diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..c7815eff7e7ab5661dd9093e9c41a09830336c28 100644 --- a/.gitattributes +++ b/.gitattributes @@ -32,4 +32,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.xz filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.task filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..3349701bba502d4b1fc355f3cb8f138c233bf493 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu18.04 + +RUN apt-get update && apt-get install -y \ + python3.8.8 \ + python3-pip \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /code + +COPY ./requirements.txt /code/requirements.txt + +RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt + +COPY . . + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"] \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..94f88094070c0acdd2732fd19b3e4f5c33c5cb61 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2024 Peng Ziqiao + +This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0). To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, and distribute the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +1. Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. + +2. NonCommercial — You may not use the material for commercial purposes. + +3. No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..517a9264095fa3b4ec82814e3b282b5fd6e58b72 --- /dev/null +++ b/app.py @@ -0,0 +1,16 @@ + +import os + +os.system(f"pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py38_cu113_pyt1121/download.html") +os.system(f"pip install tensorflow-gpu==2.8.1") +os.system(f"pip install ./freqencoder") +os.system(f"pip install ./shencoder") +os.system(f"pip install ./gridencoder") +os.system(f"pip install ./raymarching") + + #os.system(f"pip install -v -U git+https://github.com/facebookresearch/xformers.git@main#egg=xformers") + + + + + diff --git a/assets/image/synctalk.png b/assets/image/synctalk.png new file mode 100644 index 0000000000000000000000000000000000000000..6a09991ec622cebea500549a1da8f125fcfcc183 --- /dev/null +++ b/assets/image/synctalk.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c6f87ed6137d6aeb639aa3d13ec28ce8df15b3f8d926d3f5662d8de3bab7300 +size 3493716 diff --git a/data_utils/UNFaceFlow/core/__init__.py b/data_utils/UNFaceFlow/core/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/data_utils/UNFaceFlow/core/corr.py b/data_utils/UNFaceFlow/core/corr.py new file mode 100644 index 0000000000000000000000000000000000000000..b514d0229efab802eb34b80cd10798a016eef2c8 --- /dev/null +++ b/data_utils/UNFaceFlow/core/corr.py @@ -0,0 +1,91 @@ +import torch +import torch.nn.functional as F +from utils_core.utils import bilinear_sampler, coords_grid + +try: + import alt_cuda_corr +except: + # alt_cuda_corr is not compiled + pass + + +class CorrBlock: + def __init__(self, fmap1, fmap2, num_levels=4, radius=4): + self.num_levels = num_levels + self.radius = radius + self.corr_pyramid = [] + + # all pairs correlation + corr = CorrBlock.corr(fmap1, fmap2) + + batch, h1, w1, dim, h2, w2 = corr.shape + corr = corr.reshape(batch*h1*w1, dim, h2, w2) + + self.corr_pyramid.append(corr) + for i in range(self.num_levels-1): + corr = F.avg_pool2d(corr, 2, stride=2) + self.corr_pyramid.append(corr) + + def __call__(self, coords): + r = self.radius + coords = coords.permute(0, 2, 3, 1) + batch, h1, w1, _ = coords.shape + + out_pyramid = [] + for i in range(self.num_levels): + corr = self.corr_pyramid[i] + dx = torch.linspace(-r, r, 2*r+1) + dy = torch.linspace(-r, r, 2*r+1) + delta = torch.stack(torch.meshgrid(dy, dx), axis=-1).to(coords.device) + + centroid_lvl = coords.reshape(batch*h1*w1, 1, 1, 2) / 2**i + delta_lvl = delta.view(1, 2*r+1, 2*r+1, 2) + coords_lvl = centroid_lvl + delta_lvl + + corr = bilinear_sampler(corr, coords_lvl) + corr = corr.view(batch, h1, w1, -1) + out_pyramid.append(corr) + + out = torch.cat(out_pyramid, dim=-1) + return out.permute(0, 3, 1, 2).contiguous().float() + + @staticmethod + def corr(fmap1, fmap2): + batch, dim, ht, wd = fmap1.shape + fmap1 = fmap1.view(batch, dim, ht*wd) + fmap2 = fmap2.view(batch, dim, ht*wd) + + corr = torch.matmul(fmap1.transpose(1,2), fmap2) + corr = corr.view(batch, ht, wd, 1, ht, wd) + return corr / torch.sqrt(torch.tensor(dim).float()) + + +class AlternateCorrBlock: + def __init__(self, fmap1, fmap2, num_levels=4, radius=4): + self.num_levels = num_levels + self.radius = radius + + self.pyramid = [(fmap1, fmap2)] + for i in range(self.num_levels): + fmap1 = F.avg_pool2d(fmap1, 2, stride=2) + fmap2 = F.avg_pool2d(fmap2, 2, stride=2) + self.pyramid.append((fmap1, fmap2)) + + def __call__(self, coords): + coords = coords.permute(0, 2, 3, 1) + B, H, W, _ = coords.shape + dim = self.pyramid[0][0].shape[1] + + corr_list = [] + for i in range(self.num_levels): + r = self.radius + fmap1_i = self.pyramid[0][0].permute(0, 2, 3, 1).contiguous() + fmap2_i = self.pyramid[i][1].permute(0, 2, 3, 1).contiguous() + + coords_i = (coords / 2**i).reshape(B, 1, H, W, 2).contiguous() + corr, = alt_cuda_corr.forward(fmap1_i, fmap2_i, coords_i, r) + corr_list.append(corr.squeeze(1)) + + corr = torch.stack(corr_list, dim=1) + corr = corr.reshape(B, -1, H, W) + return corr / torch.sqrt(torch.tensor(dim).float()) diff --git a/data_utils/UNFaceFlow/core/datasets.py b/data_utils/UNFaceFlow/core/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..3411fdacfb900024005e8997d07c600e963a95ca --- /dev/null +++ b/data_utils/UNFaceFlow/core/datasets.py @@ -0,0 +1,235 @@ +# Data loading based on https://github.com/NVIDIA/flownet2-pytorch + +import numpy as np +import torch +import torch.utils.data as data +import torch.nn.functional as F + +import os +import math +import random +from glob import glob +import os.path as osp + +from utils import frame_utils +from utils.augmentor import FlowAugmentor, SparseFlowAugmentor + + +class FlowDataset(data.Dataset): + def __init__(self, aug_params=None, sparse=False): + self.augmentor = None + self.sparse = sparse + if aug_params is not None: + if sparse: + self.augmentor = SparseFlowAugmentor(**aug_params) + else: + self.augmentor = FlowAugmentor(**aug_params) + + self.is_test = False + self.init_seed = False + self.flow_list = [] + self.image_list = [] + self.extra_info = [] + + def __getitem__(self, index): + + if self.is_test: + img1 = frame_utils.read_gen(self.image_list[index][0]) + img2 = frame_utils.read_gen(self.image_list[index][1]) + img1 = np.array(img1).astype(np.uint8)[..., :3] + img2 = np.array(img2).astype(np.uint8)[..., :3] + img1 = torch.from_numpy(img1).permute(2, 0, 1).float() + img2 = torch.from_numpy(img2).permute(2, 0, 1).float() + return img1, img2, self.extra_info[index] + + if not self.init_seed: + worker_info = torch.utils.data.get_worker_info() + if worker_info is not None: + torch.manual_seed(worker_info.id) + np.random.seed(worker_info.id) + random.seed(worker_info.id) + self.init_seed = True + + index = index % len(self.image_list) + valid = None + if self.sparse: + flow, valid = frame_utils.readFlowKITTI(self.flow_list[index]) + else: + flow = frame_utils.read_gen(self.flow_list[index]) + + img1 = frame_utils.read_gen(self.image_list[index][0]) + img2 = frame_utils.read_gen(self.image_list[index][1]) + + flow = np.array(flow).astype(np.float32) + img1 = np.array(img1).astype(np.uint8) + img2 = np.array(img2).astype(np.uint8) + + # grayscale images + if len(img1.shape) == 2: + img1 = np.tile(img1[...,None], (1, 1, 3)) + img2 = np.tile(img2[...,None], (1, 1, 3)) + else: + img1 = img1[..., :3] + img2 = img2[..., :3] + + if self.augmentor is not None: + if self.sparse: + img1, img2, flow, valid = self.augmentor(img1, img2, flow, valid) + else: + img1, img2, flow = self.augmentor(img1, img2, flow) + + img1 = torch.from_numpy(img1).permute(2, 0, 1).float() + img2 = torch.from_numpy(img2).permute(2, 0, 1).float() + flow = torch.from_numpy(flow).permute(2, 0, 1).float() + + if valid is not None: + valid = torch.from_numpy(valid) + else: + valid = (flow[0].abs() < 1000) & (flow[1].abs() < 1000) + + return img1, img2, flow, valid.float() + + + def __rmul__(self, v): + self.flow_list = v * self.flow_list + self.image_list = v * self.image_list + return self + + def __len__(self): + return len(self.image_list) + + +class MpiSintel(FlowDataset): + def __init__(self, aug_params=None, split='training', root='datasets/Sintel', dstype='clean'): + super(MpiSintel, self).__init__(aug_params) + flow_root = osp.join(root, split, 'flow') + image_root = osp.join(root, split, dstype) + + if split == 'test': + self.is_test = True + + for scene in os.listdir(image_root): + image_list = sorted(glob(osp.join(image_root, scene, '*.png'))) + for i in range(len(image_list)-1): + self.image_list += [ [image_list[i], image_list[i+1]] ] + self.extra_info += [ (scene, i) ] # scene and frame_id + + if split != 'test': + self.flow_list += sorted(glob(osp.join(flow_root, scene, '*.flo'))) + + +class FlyingChairs(FlowDataset): + def __init__(self, aug_params=None, split='train', root='datasets/FlyingChairs_release/data'): + super(FlyingChairs, self).__init__(aug_params) + + images = sorted(glob(osp.join(root, '*.ppm'))) + flows = sorted(glob(osp.join(root, '*.flo'))) + assert (len(images)//2 == len(flows)) + + split_list = np.loadtxt('chairs_split.txt', dtype=np.int32) + for i in range(len(flows)): + xid = split_list[i] + if (split=='training' and xid==1) or (split=='validation' and xid==2): + self.flow_list += [ flows[i] ] + self.image_list += [ [images[2*i], images[2*i+1]] ] + + +class FlyingThings3D(FlowDataset): + def __init__(self, aug_params=None, root='datasets/FlyingThings3D', dstype='frames_cleanpass'): + super(FlyingThings3D, self).__init__(aug_params) + + for cam in ['left']: + for direction in ['into_future', 'into_past']: + image_dirs = sorted(glob(osp.join(root, dstype, 'TRAIN/*/*'))) + image_dirs = sorted([osp.join(f, cam) for f in image_dirs]) + + flow_dirs = sorted(glob(osp.join(root, 'optical_flow/TRAIN/*/*'))) + flow_dirs = sorted([osp.join(f, direction, cam) for f in flow_dirs]) + + for idir, fdir in zip(image_dirs, flow_dirs): + images = sorted(glob(osp.join(idir, '*.png')) ) + flows = sorted(glob(osp.join(fdir, '*.pfm')) ) + for i in range(len(flows)-1): + if direction == 'into_future': + self.image_list += [ [images[i], images[i+1]] ] + self.flow_list += [ flows[i] ] + elif direction == 'into_past': + self.image_list += [ [images[i+1], images[i]] ] + self.flow_list += [ flows[i+1] ] + + +class KITTI(FlowDataset): + def __init__(self, aug_params=None, split='training', root='datasets/KITTI'): + super(KITTI, self).__init__(aug_params, sparse=True) + if split == 'testing': + self.is_test = True + + root = osp.join(root, split) + images1 = sorted(glob(osp.join(root, 'image_2/*_10.png'))) + images2 = sorted(glob(osp.join(root, 'image_2/*_11.png'))) + + for img1, img2 in zip(images1, images2): + frame_id = img1.split('/')[-1] + self.extra_info += [ [frame_id] ] + self.image_list += [ [img1, img2] ] + + if split == 'training': + self.flow_list = sorted(glob(osp.join(root, 'flow_occ/*_10.png'))) + + +class HD1K(FlowDataset): + def __init__(self, aug_params=None, root='datasets/HD1k'): + super(HD1K, self).__init__(aug_params, sparse=True) + + seq_ix = 0 + while 1: + flows = sorted(glob(os.path.join(root, 'hd1k_flow_gt', 'flow_occ/%06d_*.png' % seq_ix))) + images = sorted(glob(os.path.join(root, 'hd1k_input', 'image_2/%06d_*.png' % seq_ix))) + + if len(flows) == 0: + break + + for i in range(len(flows)-1): + self.flow_list += [flows[i]] + self.image_list += [ [images[i], images[i+1]] ] + + seq_ix += 1 + + +def fetch_dataloader(args, TRAIN_DS='C+T+K+S+H'): + """ Create the data loader for the corresponding trainign set """ + + if args.stage == 'chairs': + aug_params = {'crop_size': args.image_size, 'min_scale': -0.1, 'max_scale': 1.0, 'do_flip': True} + train_dataset = FlyingChairs(aug_params, split='training') + + elif args.stage == 'things': + aug_params = {'crop_size': args.image_size, 'min_scale': -0.4, 'max_scale': 0.8, 'do_flip': True} + clean_dataset = FlyingThings3D(aug_params, dstype='frames_cleanpass') + final_dataset = FlyingThings3D(aug_params, dstype='frames_finalpass') + train_dataset = clean_dataset + final_dataset + + elif args.stage == 'sintel': + aug_params = {'crop_size': args.image_size, 'min_scale': -0.2, 'max_scale': 0.6, 'do_flip': True} + things = FlyingThings3D(aug_params, dstype='frames_cleanpass') + sintel_clean = MpiSintel(aug_params, split='training', dstype='clean') + sintel_final = MpiSintel(aug_params, split='training', dstype='final') + + if TRAIN_DS == 'C+T+K+S+H': + kitti = KITTI({'crop_size': args.image_size, 'min_scale': -0.3, 'max_scale': 0.5, 'do_flip': True}) + hd1k = HD1K({'crop_size': args.image_size, 'min_scale': -0.5, 'max_scale': 0.2, 'do_flip': True}) + train_dataset = 100*sintel_clean + 100*sintel_final + 200*kitti + 5*hd1k + things + + elif TRAIN_DS == 'C+T+K/S': + train_dataset = 100*sintel_clean + 100*sintel_final + things + + elif args.stage == 'kitti': + aug_params = {'crop_size': args.image_size, 'min_scale': -0.2, 'max_scale': 0.4, 'do_flip': False} + train_dataset = KITTI(aug_params, split='training') + + train_loader = data.DataLoader(train_dataset, batch_size=args.batch_size, + pin_memory=False, shuffle=True, num_workers=4, drop_last=True) + + print('Training with %d image pairs' % len(train_dataset)) + return train_loader + diff --git a/data_utils/UNFaceFlow/core/extractor.py b/data_utils/UNFaceFlow/core/extractor.py new file mode 100644 index 0000000000000000000000000000000000000000..11521b89cce9d6680736645fead90a9e105fee89 --- /dev/null +++ b/data_utils/UNFaceFlow/core/extractor.py @@ -0,0 +1,266 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class ResidualBlock(nn.Module): + def __init__(self, in_planes, planes, norm_fn='group', stride=1): + super(ResidualBlock, self).__init__() + + self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, padding=1, stride=stride) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, padding=1) + self.relu = nn.ReLU(inplace=True) + + num_groups = planes // 8 + + if norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + if not stride == 1: + self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + + elif norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(planes) + self.norm2 = nn.BatchNorm2d(planes) + if not stride == 1: + self.norm3 = nn.BatchNorm2d(planes) + + elif norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(planes) + self.norm2 = nn.InstanceNorm2d(planes) + if not stride == 1: + self.norm3 = nn.InstanceNorm2d(planes) + + elif norm_fn == 'none': + self.norm1 = nn.Sequential() + self.norm2 = nn.Sequential() + if not stride == 1: + self.norm3 = nn.Sequential() + + if stride == 1: + self.downsample = None + + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm3) + + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x+y) + + + +class BottleneckBlock(nn.Module): + def __init__(self, in_planes, planes, norm_fn='group', stride=1): + super(BottleneckBlock, self).__init__() + + self.conv1 = nn.Conv2d(in_planes, planes//4, kernel_size=1, padding=0) + self.conv2 = nn.Conv2d(planes//4, planes//4, kernel_size=3, padding=1, stride=stride) + self.conv3 = nn.Conv2d(planes//4, planes, kernel_size=1, padding=0) + self.relu = nn.ReLU(inplace=True) + + num_groups = planes // 8 + + if norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes//4) + self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes//4) + self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + if not stride == 1: + self.norm4 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + + elif norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(planes//4) + self.norm2 = nn.BatchNorm2d(planes//4) + self.norm3 = nn.BatchNorm2d(planes) + if not stride == 1: + self.norm4 = nn.BatchNorm2d(planes) + + elif norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(planes//4) + self.norm2 = nn.InstanceNorm2d(planes//4) + self.norm3 = nn.InstanceNorm2d(planes) + if not stride == 1: + self.norm4 = nn.InstanceNorm2d(planes) + + elif norm_fn == 'none': + self.norm1 = nn.Sequential() + self.norm2 = nn.Sequential() + self.norm3 = nn.Sequential() + if not stride == 1: + self.norm4 = nn.Sequential() + + if stride == 1: + self.downsample = None + + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm4) + + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + y = self.relu(self.norm3(self.conv3(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x+y) + +class BasicEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn='batch', dropout=0.0): + super(BasicEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=64) + + elif self.norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(64) + + elif self.norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(64) + + elif self.norm_fn == 'none': + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 64 + self.layer1 = self._make_layer(64, stride=1) + self.layer2 = self._make_layer(96, stride=2) + self.layer3 = self._make_layer(128, stride=2) + + # output convolution + self.conv2 = nn.Conv2d(128, output_dim, kernel_size=1) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = ResidualBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = ResidualBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + + def forward(self, x): + + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + + +class SmallEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn='batch', dropout=0.0): + super(SmallEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=32) + + elif self.norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(32) + + elif self.norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(32) + + elif self.norm_fn == 'none': + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 32, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 32 + self.layer1 = self._make_layer(32, stride=1) + self.layer2 = self._make_layer(64, stride=2) + self.layer3 = self._make_layer(96, stride=2) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + self.conv2 = nn.Conv2d(96, output_dim, kernel_size=1) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = BottleneckBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = BottleneckBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + + def forward(self, x): + + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x diff --git a/data_utils/UNFaceFlow/core/nnutils.py b/data_utils/UNFaceFlow/core/nnutils.py new file mode 100644 index 0000000000000000000000000000000000000000..bdd60f9268aecf77ac4676078635886e7ce20fe2 --- /dev/null +++ b/data_utils/UNFaceFlow/core/nnutils.py @@ -0,0 +1,233 @@ +import sys, os +import numpy as np +import torch + + +def make_conv(n_in, n_out, n_blocks, kernel=3, normalization=torch.nn.BatchNorm3d, activation=torch.nn.ReLU): + blocks = [] + for i in range(n_blocks): + in1 = n_in if i == 0 else n_out + blocks.append(torch.nn.Sequential( + torch.nn.Conv3d(in1, n_out, kernel_size=kernel, stride=1, padding=(kernel//2)), + normalization(n_out), + activation(inplace=True) + )) + return torch.nn.Sequential(*blocks) + + +def make_conv_2d(n_in, n_out, n_blocks, kernel=3, normalization=torch.nn.BatchNorm2d, activation=torch.nn.ReLU): + blocks = [] + for i in range(n_blocks): + in1 = n_in if i == 0 else n_out + blocks.append(torch.nn.Sequential( + torch.nn.Conv2d(in1, n_out, kernel_size=kernel, stride=1, padding=(kernel//2)), + normalization(n_out), + activation(inplace=True) + )) + return torch.nn.Sequential(*blocks) + + +def make_downscale(n_in, n_out, kernel=4, normalization=torch.nn.BatchNorm3d, activation=torch.nn.ReLU): + block = torch.nn.Sequential( + torch.nn.Conv3d(n_in, n_out, kernel_size=kernel, stride=2, padding=(kernel-2)//2), + normalization(n_out), + activation(inplace=True) + ) + return block + + +def make_downscale_2d(n_in, n_out, kernel=4, normalization=torch.nn.BatchNorm2d, activation=torch.nn.ReLU): + block = torch.nn.Sequential( + torch.nn.Conv2d(n_in, n_out, kernel_size=kernel, stride=2, padding=(kernel-2)//2), + normalization(n_out), + activation(inplace=True) + ) + return block + + +def make_upscale(n_in, n_out, normalization=torch.nn.BatchNorm3d, activation=torch.nn.ReLU): + block = torch.nn.Sequential( + torch.nn.ConvTranspose3d(n_in, n_out, kernel_size=6, stride=2, padding=2), + normalization(n_out), + activation(inplace=True) + ) + return block + + +def make_upscale_2d(n_in, n_out, kernel=4, normalization=torch.nn.BatchNorm2d, activation=torch.nn.ReLU): + block = torch.nn.Sequential( + torch.nn.ConvTranspose2d(n_in, n_out, kernel_size=kernel, stride=2, padding=(kernel-2)//2), + normalization(n_out), + activation(inplace=True) + ) + return block + + +class ResBlock(torch.nn.Module): + def __init__(self, n_out, kernel=3, normalization=torch.nn.BatchNorm3d, activation=torch.nn.ReLU): + super().__init__() + self.block0 = torch.nn.Sequential( + torch.nn.Conv3d(n_out, n_out, kernel_size=kernel, stride=1, padding=(kernel//2)), + normalization(n_out), + activation(inplace=True) + ) + + self.block1 = torch.nn.Sequential( + torch.nn.Conv3d(n_out, n_out, kernel_size=kernel, stride=1, padding=(kernel//2)), + normalization(n_out), + ) + + self.block2 = torch.nn.ReLU() + + def forward(self, x0): + x = self.block0(x0) + + x = self.block1(x) + + x = self.block2(x + x0) + return x + + +class ResBlock2d(torch.nn.Module): + def __init__(self, n_out, kernel=3, normalization=torch.nn.BatchNorm2d, activation=torch.nn.ReLU): + super().__init__() + self.block0 = torch.nn.Sequential( + torch.nn.Conv2d(n_out, n_out, kernel_size=kernel, stride=1, padding=(kernel//2)), + normalization(n_out), + activation(inplace=True) + ) + + self.block1 = torch.nn.Sequential( + torch.nn.Conv2d(n_out, n_out, kernel_size=kernel, stride=1, padding=(kernel//2)), + normalization(n_out), + ) + + self.block2 = torch.nn.ReLU() + + def forward(self, x0): + x = self.block0(x0) + + x = self.block1(x) + + x = self.block2(x + x0) + return x + + +class Identity(torch.nn.Module): + def __init__(self, *args, **kwargs): + super().__init__() + + def forward(self, x): + return x + + +def downscale_gt_flow(flow_gt, flow_mask, image_height, image_width): + flow_gt_copy = flow_gt.clone() + flow_mask_copy = flow_mask.clone() + + flow_gt_copy = flow_gt_copy / 20.0 + flow_mask_copy = flow_mask_copy.float() + + assert image_height % 64 == 0 and image_width % 64 == 0 + + flow_gt2 = torch.nn.functional.interpolate(input=flow_gt_copy, size=(image_height//4, image_width//4), mode='nearest') + flow_mask2 = torch.nn.functional.interpolate(input=flow_mask_copy, size=(image_height//4, image_width//4), mode='nearest').bool() + + flow_gt3 = torch.nn.functional.interpolate(input=flow_gt_copy, size=(image_height//8, image_width//8), mode='nearest') + flow_mask3 = torch.nn.functional.interpolate(input=flow_mask_copy, size=(image_height//8, image_width//8), mode='nearest').bool() + + flow_gt4 = torch.nn.functional.interpolate(input=flow_gt_copy, size=(image_height//16, image_width//16), mode='nearest') + flow_mask4 = torch.nn.functional.interpolate(input=flow_mask_copy, size=(image_height//16, image_width//16), mode='nearest').bool() + + flow_gt5 = torch.nn.functional.interpolate(input=flow_gt_copy, size=(image_height//32, image_width//32), mode='nearest') + flow_mask5 = torch.nn.functional.interpolate(input=flow_mask_copy, size=(image_height//32, image_width//32), mode='nearest').bool() + + flow_gt6 = torch.nn.functional.interpolate(input=flow_gt_copy, size=(image_height//64, image_width//64), mode='nearest') + flow_mask6 = torch.nn.functional.interpolate(input=flow_mask_copy, size=(image_height//64, image_width//64), mode='nearest').bool() + + return [flow_gt2, flow_gt3, flow_gt4, flow_gt5, flow_gt6], [flow_mask2, flow_mask3, flow_mask4, flow_mask5, flow_mask6] + + +def compute_baseline_mask_gt( + xy_coords_warped, + target_matches, valid_target_matches, + source_points, valid_source_points, + scene_flow_gt, scene_flow_mask, target_boundary_mask, + max_pos_flowed_source_to_target_dist, min_neg_flowed_source_to_target_dist +): + # Scene flow mask + scene_flow_mask_0 = scene_flow_mask[:, 0].type(torch.bool) + + # Boundary correspondences mask + # We use the nearest neighbor interpolation, since the boundary computations + # already marks any of 4 pixels as boundary. + target_nonboundary_mask = (~target_boundary_mask).type(torch.float32) + target_matches_nonboundary_mask = torch.nn.functional.grid_sample(target_nonboundary_mask, xy_coords_warped, padding_mode='zeros', mode='nearest', align_corners=False) + target_matches_nonboundary_mask = target_matches_nonboundary_mask[:, 0, :, :] >= 0.999 + + # Compute groundtruth mask (oracle) + flowed_source_points = source_points + scene_flow_gt + dist = torch.norm(flowed_source_points - target_matches, p=2, dim=1) + + # Combine all masks + # We mark a correspondence as positive if; + # - it is close enough to groundtruth flow + # AND + # - there exists groundtruth flow + # AND + # - the target match is valid + # AND + # - the source point is valid + # AND + # - the target match is not on the boundary + mask_pos_gt = (dist <= max_pos_flowed_source_to_target_dist) & scene_flow_mask_0 & valid_target_matches & valid_source_points & target_matches_nonboundary_mask + + # We mark a correspondence as negative if; + # - there exists groundtruth flow AND it is far away enough from the groundtruth flow AND source/target points are valid + # OR + # - the target match is on the boundary AND there exists groundtruth flow AND source/target points are valid + mask_neg_gt = ((dist > min_neg_flowed_source_to_target_dist) & scene_flow_mask_0 & valid_source_points & valid_target_matches) \ + | (~target_matches_nonboundary_mask & scene_flow_mask_0 & valid_source_points & valid_target_matches) + + # What remains is left undecided (masked out at loss). + # For groundtruth mask we set it to zero. + valid_mask_pixels = mask_pos_gt | mask_neg_gt + mask_gt = mask_pos_gt + + mask_gt = mask_gt.type(torch.float32) + + return mask_gt, valid_mask_pixels + + +def compute_deformed_points_gt( + source_points, scene_flow_gt, + valid_solve, valid_correspondences, + deformed_points_idxs, deformed_points_subsampled +): + batch_size = source_points.shape[0] + max_warped_points = deformed_points_idxs.shape[1] + + deformed_points_gt = torch.zeros((batch_size, max_warped_points, 3), dtype=source_points.dtype, device=source_points.device) + deformed_points_mask = torch.zeros((batch_size, max_warped_points, 3), dtype=source_points.dtype, device=source_points.device) + + for i in range(batch_size): + if valid_solve[i]: + valid_correspondences_idxs = torch.where(valid_correspondences[i]) + + # Compute deformed point groundtruth. + deformed_points_i_gt = source_points[i] + scene_flow_gt[i] + deformed_points_i_gt = deformed_points_i_gt.permute(1, 2, 0) + deformed_points_i_gt = deformed_points_i_gt[valid_correspondences_idxs[0], valid_correspondences_idxs[1], :].view(-1, 3, 1) + + # Filter out points randomly, if too many are still left. + if deformed_points_subsampled[i]: + sampled_idxs_i = deformed_points_idxs[i] + deformed_points_i_gt = deformed_points_i_gt[sampled_idxs_i] + + num_points = deformed_points_i_gt.shape[0] + + # Store the results. + deformed_points_gt[i, :num_points, :] = deformed_points_i_gt.view(1, num_points, 3) + deformed_points_mask[i, :num_points, :] = 1 + + return deformed_points_gt, deformed_points_mask diff --git a/data_utils/UNFaceFlow/core/raft.py b/data_utils/UNFaceFlow/core/raft.py new file mode 100644 index 0000000000000000000000000000000000000000..64bbac1bc4210af60fd5b7e0edce42b4bb01c0d2 --- /dev/null +++ b/data_utils/UNFaceFlow/core/raft.py @@ -0,0 +1,259 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F + +from update import BasicUpdateBlock, SmallUpdateBlock +from extractor import BasicEncoder, SmallEncoder +from corr import CorrBlock, AlternateCorrBlock +from utils_core.utils import bilinear_sampler, coords_grid, upflow8 + +try: + autocast = torch.cuda.amp.autocast +except: + # dummy autocast for PyTorch < 1.6 + class autocast: + def __init__(self, enabled): + pass + def __enter__(self): + pass + def __exit__(self, *args): + pass + + +class RAFT(nn.Module): + def __init__(self, args): + super(RAFT, self).__init__() + self.args = args + + if args.small: + self.hidden_dim = hdim = 96 + self.context_dim = cdim = 64 + args.corr_levels = 4 + args.corr_radius = 3 + + else: + self.hidden_dim = hdim = 128 + self.context_dim = cdim = 128 + args.corr_levels = 4 + args.corr_radius = 4 + + if 'dropout' not in self.args: + self.args.dropout = 0 + + if 'alternate_corr' not in self.args: + self.args.alternate_corr = False + + # feature network, context network, and update block + if args.small: + self.fnet = SmallEncoder(output_dim=128, norm_fn='instance', dropout=args.dropout) + self.cnet = SmallEncoder(output_dim=hdim+cdim, norm_fn='none', dropout=args.dropout) + self.update_block = SmallUpdateBlock(self.args, hidden_dim=hdim) + + else: + self.fnet = BasicEncoder(output_dim=256, norm_fn='instance', dropout=args.dropout) + self.cnet = BasicEncoder(output_dim=hdim+cdim, norm_fn='batch', dropout=args.dropout) + self.update_block = BasicUpdateBlock(self.args, hidden_dim=hdim) + + def freeze_bn(self): + for m in self.modules(): + if isinstance(m, nn.BatchNorm2d): + m.eval() + + def initialize_flow(self, img): + """ Flow is represented as difference between two coordinate grids flow = coords1 - coords0""" + N, C, H, W = img.shape + coords0 = coords_grid(N, H//8, W//8).to(img.device) + coords1 = coords_grid(N, H//8, W//8).to(img.device) + + # optical flow computed as difference: flow = coords1 - coords0 + return coords0, coords1 + + def upsample_flow(self, flow, mask): + """ Upsample flow field [H/8, W/8, 2] -> [H, W, 2] using convex combination """ + N, _, H, W = flow.shape + mask = mask.view(N, 1, 9, 8, 8, H, W) + mask = torch.softmax(mask, dim=2) + + up_flow = F.unfold(8 * flow, [3,3], padding=1) + up_flow = up_flow.view(N, 2, 9, 1, 1, H, W) + + up_flow = torch.sum(mask * up_flow, dim=2) + up_flow = up_flow.permute(0, 1, 4, 2, 5, 3) + return up_flow.reshape(N, 2, 8*H, 8*W) + + + def forward(self, image1, image2, iters=12, flow_init=None, upsample=True, test_mode=False): + """ Estimate optical flow between pair of frames """ + + image1 = 2 * (image1 / 255.0) - 1.0 + image2 = 2 * (image2 / 255.0) - 1.0 + + image1 = image1.contiguous() + image2 = image2.contiguous() + + hdim = self.hidden_dim + cdim = self.context_dim + + # run the feature network + with autocast(enabled=self.args.mixed_precision): + fmap1, fmap2 = self.fnet([image1, image2]) + + fmap1 = fmap1.float() + fmap2 = fmap2.float() + # print("fmap mean: ", fmap1.mean(), fmap2.mean()) + if self.args.alternate_corr: + corr_fn = AlternateCorrBlock(fmap1, fmap2, radius=self.args.corr_radius) + else: + corr_fn = CorrBlock(fmap1, fmap2, radius=self.args.corr_radius) + + # run the context network + with autocast(enabled=self.args.mixed_precision): + cnet = self.cnet(image1) + net, inp = torch.split(cnet, [hdim, cdim], dim=1) + net = torch.tanh(net) + inp = torch.relu(inp) + + coords0, coords1 = self.initialize_flow(image1) + + if flow_init is not None: + coords1 = coords1 + flow_init + + flow_predictions = [] + for itr in range(iters): + coords1 = coords1.detach() + corr = corr_fn(coords1) # index correlation volume + + flow = coords1 - coords0 + with autocast(enabled=self.args.mixed_precision): + net, up_mask, delta_flow, feature = self.update_block(net, inp, corr, flow) + # print("delta flow mean: ", delta_flow.mean()) + # F(t+1) = F(t) + \Delta(t) + coords1 = coords1 + delta_flow + + # upsample predictions + if up_mask is None: + flow_up = upflow8(coords1 - coords0) + else: + flow_up = self.upsample_flow(coords1 - coords0, up_mask) + + return flow_up, feature + +class RAFT_ALL(nn.Module): + def __init__(self, args): + super(RAFT_ALL, self).__init__() + self.args = args + + if args.small: + self.hidden_dim = hdim = 96 + self.context_dim = cdim = 64 + args.corr_levels = 4 + args.corr_radius = 3 + + else: + self.hidden_dim = hdim = 128 + self.context_dim = cdim = 128 + args.corr_levels = 4 + args.corr_radius = 4 + + if 'dropout' not in self.args: + self.args.dropout = 0 + + if 'alternate_corr' not in self.args: + self.args.alternate_corr = False + + # feature network, context network, and update block + if args.small: + self.fnet = SmallEncoder(output_dim=128, norm_fn='instance', dropout=args.dropout) + self.cnet = SmallEncoder(output_dim=hdim+cdim, norm_fn='none', dropout=args.dropout) + self.update_block = SmallUpdateBlock(self.args, hidden_dim=hdim) + + else: + self.fnet = BasicEncoder(output_dim=256, norm_fn='instance', dropout=args.dropout) + self.cnet = BasicEncoder(output_dim=hdim+cdim, norm_fn='batch', dropout=args.dropout) + self.update_block = BasicUpdateBlock(self.args, hidden_dim=hdim) + + def freeze_bn(self): + for m in self.modules(): + if isinstance(m, nn.BatchNorm2d): + m.eval() + + def initialize_flow(self, img): + """ Flow is represented as difference between two coordinate grids flow = coords1 - coords0""" + N, C, H, W = img.shape + coords0 = coords_grid(N, H//8, W//8).to(img.device) + coords1 = coords_grid(N, H//8, W//8).to(img.device) + + # optical flow computed as difference: flow = coords1 - coords0 + return coords0, coords1 + + def upsample_flow(self, flow, mask): + """ Upsample flow field [H/8, W/8, 2] -> [H, W, 2] using convex combination """ + N, _, H, W = flow.shape + mask = mask.view(N, 1, 9, 8, 8, H, W) + mask = torch.softmax(mask, dim=2) + + up_flow = F.unfold(8 * flow, [3,3], padding=1) + up_flow = up_flow.view(N, 2, 9, 1, 1, H, W) + + up_flow = torch.sum(mask * up_flow, dim=2) + up_flow = up_flow.permute(0, 1, 4, 2, 5, 3) + return up_flow.reshape(N, 2, 8*H, 8*W) + + + def forward(self, image1, image2, iters=12, flow_init=None, upsample=True, test_mode=False): + """ Estimate optical flow between pair of frames """ + + image1 = 2 * (image1 / 255.0) - 1.0 + image2 = 2 * (image2 / 255.0) - 1.0 + + image1 = image1.contiguous() + image2 = image2.contiguous() + + hdim = self.hidden_dim + cdim = self.context_dim + + # run the feature network + with autocast(enabled=self.args.mixed_precision): + fmap1, fmap2 = self.fnet([image1, image2]) + + fmap1 = fmap1.float() + fmap2 = fmap2.float() + # print("fmap mean: ", fmap1.mean(), fmap2.mean()) + if self.args.alternate_corr: + corr_fn = AlternateCorrBlock(fmap1, fmap2, radius=self.args.corr_radius) + else: + corr_fn = CorrBlock(fmap1, fmap2, radius=self.args.corr_radius) + + # run the context network + with autocast(enabled=self.args.mixed_precision): + cnet = self.cnet(image1) + net, inp = torch.split(cnet, [hdim, cdim], dim=1) + net = torch.tanh(net) + inp = torch.relu(inp) + + coords0, coords1 = self.initialize_flow(image1) + + if flow_init is not None: + coords1 = coords1 + flow_init + + flow_predictions = [] + for itr in range(iters): + coords1 = coords1.detach() + corr = corr_fn(coords1) # index correlation volume + + flow = coords1 - coords0 + with autocast(enabled=self.args.mixed_precision): + net, up_mask, delta_flow, feature = self.update_block(net, inp, corr, flow) + # print("delta flow mean: ", delta_flow.mean()) + # F(t+1) = F(t) + \Delta(t) + coords1 = coords1 + delta_flow + + # upsample predictions + if up_mask is None: + flow_up = upflow8(coords1 - coords0) + else: + flow_up = self.upsample_flow(coords1 - coords0, up_mask) + flow_predictions.append(flow_up) + + return flow_predictions, feature diff --git a/data_utils/UNFaceFlow/core/update.py b/data_utils/UNFaceFlow/core/update.py new file mode 100644 index 0000000000000000000000000000000000000000..930656d0e3d91fd25ce397726cf26d391fb86075 --- /dev/null +++ b/data_utils/UNFaceFlow/core/update.py @@ -0,0 +1,169 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from nnutils import make_conv_2d, make_upscale_2d, make_downscale_2d, ResBlock2d, Identity + +class FlowHead(nn.Module): + def __init__(self, input_dim=128, hidden_dim=256): + super(FlowHead, self).__init__() + self.conv1 = nn.Conv2d(input_dim, hidden_dim, 3, padding=1) + self.conv2 = nn.Conv2d(hidden_dim, 2, 3, padding=1) + self.relu = nn.ReLU(inplace=True) + + def forward(self, x): + x = self.relu(self.conv1(x)) + return self.conv2(x), x + +class ConvGRU(nn.Module): + def __init__(self, hidden_dim=128, input_dim=192+128): + super(ConvGRU, self).__init__() + self.convz = nn.Conv2d(hidden_dim+input_dim, hidden_dim, 3, padding=1) + self.convr = nn.Conv2d(hidden_dim+input_dim, hidden_dim, 3, padding=1) + self.convq = nn.Conv2d(hidden_dim+input_dim, hidden_dim, 3, padding=1) + + def forward(self, h, x): + hx = torch.cat([h, x], dim=1) + + z = torch.sigmoid(self.convz(hx)) + r = torch.sigmoid(self.convr(hx)) + q = torch.tanh(self.convq(torch.cat([r*h, x], dim=1))) + + h = (1-z) * h + z * q + return h + +class SepConvGRU(nn.Module): + def __init__(self, hidden_dim=128, input_dim=192+128): + super(SepConvGRU, self).__init__() + self.convz1 = nn.Conv2d(hidden_dim+input_dim, hidden_dim, (1,5), padding=(0,2)) + self.convr1 = nn.Conv2d(hidden_dim+input_dim, hidden_dim, (1,5), padding=(0,2)) + self.convq1 = nn.Conv2d(hidden_dim+input_dim, hidden_dim, (1,5), padding=(0,2)) + + self.convz2 = nn.Conv2d(hidden_dim+input_dim, hidden_dim, (5,1), padding=(2,0)) + self.convr2 = nn.Conv2d(hidden_dim+input_dim, hidden_dim, (5,1), padding=(2,0)) + self.convq2 = nn.Conv2d(hidden_dim+input_dim, hidden_dim, (5,1), padding=(2,0)) + + + def forward(self, h, x): + # horizontal + hx = torch.cat([h, x], dim=1) + z = torch.sigmoid(self.convz1(hx)) + r = torch.sigmoid(self.convr1(hx)) + q = torch.tanh(self.convq1(torch.cat([r*h, x], dim=1))) + h = (1-z) * h + z * q + + # vertical + hx = torch.cat([h, x], dim=1) + z = torch.sigmoid(self.convz2(hx)) + r = torch.sigmoid(self.convr2(hx)) + q = torch.tanh(self.convq2(torch.cat([r*h, x], dim=1))) + h = (1-z) * h + z * q + + return h + +class SmallMotionEncoder(nn.Module): + def __init__(self, args): + super(SmallMotionEncoder, self).__init__() + cor_planes = args.corr_levels * (2*args.corr_radius + 1)**2 + self.convc1 = nn.Conv2d(cor_planes, 96, 1, padding=0) + self.convf1 = nn.Conv2d(2, 64, 7, padding=3) + self.convf2 = nn.Conv2d(64, 32, 3, padding=1) + self.conv = nn.Conv2d(128, 80, 3, padding=1) + + def forward(self, flow, corr): + cor = F.relu(self.convc1(corr)) + flo = F.relu(self.convf1(flow)) + flo = F.relu(self.convf2(flo)) + cor_flo = torch.cat([cor, flo], dim=1) + out = F.relu(self.conv(cor_flo)) + return torch.cat([out, flow], dim=1) + +class BasicMotionEncoder(nn.Module): + def __init__(self, args): + super(BasicMotionEncoder, self).__init__() + cor_planes = args.corr_levels * (2*args.corr_radius + 1)**2 + self.convc1 = nn.Conv2d(cor_planes, 256, 1, padding=0) + self.convc2 = nn.Conv2d(256, 192, 3, padding=1) + self.convf1 = nn.Conv2d(2, 128, 7, padding=3) + self.convf2 = nn.Conv2d(128, 64, 3, padding=1) + self.conv = nn.Conv2d(64+192, 128-2, 3, padding=1) + + def forward(self, flow, corr): + cor = F.relu(self.convc1(corr)) + cor = F.relu(self.convc2(cor)) + flo = F.relu(self.convf1(flow)) + flo = F.relu(self.convf2(flo)) + + cor_flo = torch.cat([cor, flo], dim=1) + out = F.relu(self.conv(cor_flo)) + return torch.cat([out, flow], dim=1) + +class SmallUpdateBlock(nn.Module): + def __init__(self, args, hidden_dim=96): + super(SmallUpdateBlock, self).__init__() + self.encoder = SmallMotionEncoder(args) + self.gru = ConvGRU(hidden_dim=hidden_dim, input_dim=82+64) + self.flow_head = FlowHead(hidden_dim, hidden_dim=128) + + def forward(self, net, inp, corr, flow): + motion_features = self.encoder(flow, corr) + inp = torch.cat([inp, motion_features], dim=1) + net = self.gru(net, inp) + delta_flow, feature = self.flow_head(net) + + return net, None, delta_flow, feature + +class BasicUpdateBlock(nn.Module): + def __init__(self, args, hidden_dim=128, input_dim=128): + super(BasicUpdateBlock, self).__init__() + self.args = args + self.encoder = BasicMotionEncoder(args) + self.gru = SepConvGRU(hidden_dim=hidden_dim, input_dim=128+hidden_dim) + self.flow_head = FlowHead(hidden_dim, hidden_dim=256) + + self.mask = nn.Sequential( + nn.Conv2d(128, 256, 3, padding=1), + nn.ReLU(inplace=True), + nn.Conv2d(256, 64*9, 1, padding=0)) + + def forward(self, net, inp, corr, flow, upsample=True): + motion_features = self.encoder(flow, corr) + inp = torch.cat([inp, motion_features], dim=1) + + net = self.gru(net, inp) + delta_flow, feature = self.flow_head(net) + + # scale mask to balence gradients + mask = .25 * self.mask(net) + return net, mask, delta_flow, feature + +class BasicWeightsNet(nn.Module): + def __init__(self, opt): + super(BasicUpdateBlock, self).__init__() + if opt.small: + in_dim = 128 + else: + in_dim = 256 + fn_0 = 16 + self.input_fn = fn_0 + 2 + fn_1 = 16 + self.conv1 = torch.nn.Conv2d(in_channels=in_dim, out_channels=fn_0, kernel_size=3, stride=1, padding=1) + if opt.use_batch_norm: + custom_batch_norm = torch.nn.BatchNorm2d + else: + custom_batch_norm = Identity + self.model = nn.Sequential( + make_conv_2d(self.input_fn, fn_1, n_blocks=1, normalization=custom_batch_norm), + ResBlock2d(fn_1, normalization=custom_batch_norm), + ResBlock2d(fn_1, normalization=custom_batch_norm), + ResBlock2d(fn_1, normalization=custom_batch_norm), + nn.Conv2d(fn_1, 1, kernel_size=3, padding=1), + torch.nn.Sigmoid() + ) + + def forward(self, flow, feature): + features = self.conv1(features) + x = torch.cat([features, flow], 1) + return self.model(x) + + + diff --git a/data_utils/UNFaceFlow/core/utils_core/__init__.py b/data_utils/UNFaceFlow/core/utils_core/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/data_utils/UNFaceFlow/core/utils_core/augmentor.py b/data_utils/UNFaceFlow/core/utils_core/augmentor.py new file mode 100644 index 0000000000000000000000000000000000000000..e81c4f2b5c16c31c0ae236d744f299d430228a04 --- /dev/null +++ b/data_utils/UNFaceFlow/core/utils_core/augmentor.py @@ -0,0 +1,246 @@ +import numpy as np +import random +import math +from PIL import Image + +import cv2 +cv2.setNumThreads(0) +cv2.ocl.setUseOpenCL(False) + +import torch +from torchvision.transforms import ColorJitter +import torch.nn.functional as F + + +class FlowAugmentor: + def __init__(self, crop_size, min_scale=-0.2, max_scale=0.5, do_flip=True): + + # spatial augmentation params + self.crop_size = crop_size + self.min_scale = min_scale + self.max_scale = max_scale + self.spatial_aug_prob = 0.8 + self.stretch_prob = 0.8 + self.max_stretch = 0.2 + + # flip augmentation params + self.do_flip = do_flip + self.h_flip_prob = 0.5 + self.v_flip_prob = 0.1 + + # photometric augmentation params + self.photo_aug = ColorJitter(brightness=0.4, contrast=0.4, saturation=0.4, hue=0.5/3.14) + self.asymmetric_color_aug_prob = 0.2 + self.eraser_aug_prob = 0.5 + + def color_transform(self, img1, img2): + """ Photometric augmentation """ + + # asymmetric + if np.random.rand() < self.asymmetric_color_aug_prob: + img1 = np.array(self.photo_aug(Image.fromarray(img1)), dtype=np.uint8) + img2 = np.array(self.photo_aug(Image.fromarray(img2)), dtype=np.uint8) + + # symmetric + else: + image_stack = np.concatenate([img1, img2], axis=0) + image_stack = np.array(self.photo_aug(Image.fromarray(image_stack)), dtype=np.uint8) + img1, img2 = np.split(image_stack, 2, axis=0) + + return img1, img2 + + def eraser_transform(self, img1, img2, bounds=[50, 100]): + """ Occlusion augmentation """ + + ht, wd = img1.shape[:2] + if np.random.rand() < self.eraser_aug_prob: + mean_color = np.mean(img2.reshape(-1, 3), axis=0) + for _ in range(np.random.randint(1, 3)): + x0 = np.random.randint(0, wd) + y0 = np.random.randint(0, ht) + dx = np.random.randint(bounds[0], bounds[1]) + dy = np.random.randint(bounds[0], bounds[1]) + img2[y0:y0+dy, x0:x0+dx, :] = mean_color + + return img1, img2 + + def spatial_transform(self, img1, img2, flow): + # randomly sample scale + ht, wd = img1.shape[:2] + min_scale = np.maximum( + (self.crop_size[0] + 8) / float(ht), + (self.crop_size[1] + 8) / float(wd)) + + scale = 2 ** np.random.uniform(self.min_scale, self.max_scale) + scale_x = scale + scale_y = scale + if np.random.rand() < self.stretch_prob: + scale_x *= 2 ** np.random.uniform(-self.max_stretch, self.max_stretch) + scale_y *= 2 ** np.random.uniform(-self.max_stretch, self.max_stretch) + + scale_x = np.clip(scale_x, min_scale, None) + scale_y = np.clip(scale_y, min_scale, None) + + if np.random.rand() < self.spatial_aug_prob: + # rescale the images + img1 = cv2.resize(img1, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR) + img2 = cv2.resize(img2, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR) + flow = cv2.resize(flow, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR) + flow = flow * [scale_x, scale_y] + + if self.do_flip: + if np.random.rand() < self.h_flip_prob: # h-flip + img1 = img1[:, ::-1] + img2 = img2[:, ::-1] + flow = flow[:, ::-1] * [-1.0, 1.0] + + if np.random.rand() < self.v_flip_prob: # v-flip + img1 = img1[::-1, :] + img2 = img2[::-1, :] + flow = flow[::-1, :] * [1.0, -1.0] + + y0 = np.random.randint(0, img1.shape[0] - self.crop_size[0]) + x0 = np.random.randint(0, img1.shape[1] - self.crop_size[1]) + + img1 = img1[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + img2 = img2[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + flow = flow[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + + return img1, img2, flow + + def __call__(self, img1, img2, flow): + img1, img2 = self.color_transform(img1, img2) + img1, img2 = self.eraser_transform(img1, img2) + img1, img2, flow = self.spatial_transform(img1, img2, flow) + + img1 = np.ascontiguousarray(img1) + img2 = np.ascontiguousarray(img2) + flow = np.ascontiguousarray(flow) + + return img1, img2, flow + +class SparseFlowAugmentor: + def __init__(self, crop_size, min_scale=-0.2, max_scale=0.5, do_flip=False): + # spatial augmentation params + self.crop_size = crop_size + self.min_scale = min_scale + self.max_scale = max_scale + self.spatial_aug_prob = 0.8 + self.stretch_prob = 0.8 + self.max_stretch = 0.2 + + # flip augmentation params + self.do_flip = do_flip + self.h_flip_prob = 0.5 + self.v_flip_prob = 0.1 + + # photometric augmentation params + self.photo_aug = ColorJitter(brightness=0.3, contrast=0.3, saturation=0.3, hue=0.3/3.14) + self.asymmetric_color_aug_prob = 0.2 + self.eraser_aug_prob = 0.5 + + def color_transform(self, img1, img2): + image_stack = np.concatenate([img1, img2], axis=0) + image_stack = np.array(self.photo_aug(Image.fromarray(image_stack)), dtype=np.uint8) + img1, img2 = np.split(image_stack, 2, axis=0) + return img1, img2 + + def eraser_transform(self, img1, img2): + ht, wd = img1.shape[:2] + if np.random.rand() < self.eraser_aug_prob: + mean_color = np.mean(img2.reshape(-1, 3), axis=0) + for _ in range(np.random.randint(1, 3)): + x0 = np.random.randint(0, wd) + y0 = np.random.randint(0, ht) + dx = np.random.randint(50, 100) + dy = np.random.randint(50, 100) + img2[y0:y0+dy, x0:x0+dx, :] = mean_color + + return img1, img2 + + def resize_sparse_flow_map(self, flow, valid, fx=1.0, fy=1.0): + ht, wd = flow.shape[:2] + coords = np.meshgrid(np.arange(wd), np.arange(ht)) + coords = np.stack(coords, axis=-1) + + coords = coords.reshape(-1, 2).astype(np.float32) + flow = flow.reshape(-1, 2).astype(np.float32) + valid = valid.reshape(-1).astype(np.float32) + + coords0 = coords[valid>=1] + flow0 = flow[valid>=1] + + ht1 = int(round(ht * fy)) + wd1 = int(round(wd * fx)) + + coords1 = coords0 * [fx, fy] + flow1 = flow0 * [fx, fy] + + xx = np.round(coords1[:,0]).astype(np.int32) + yy = np.round(coords1[:,1]).astype(np.int32) + + v = (xx > 0) & (xx < wd1) & (yy > 0) & (yy < ht1) + xx = xx[v] + yy = yy[v] + flow1 = flow1[v] + + flow_img = np.zeros([ht1, wd1, 2], dtype=np.float32) + valid_img = np.zeros([ht1, wd1], dtype=np.int32) + + flow_img[yy, xx] = flow1 + valid_img[yy, xx] = 1 + + return flow_img, valid_img + + def spatial_transform(self, img1, img2, flow, valid): + # randomly sample scale + + ht, wd = img1.shape[:2] + min_scale = np.maximum( + (self.crop_size[0] + 1) / float(ht), + (self.crop_size[1] + 1) / float(wd)) + + scale = 2 ** np.random.uniform(self.min_scale, self.max_scale) + scale_x = np.clip(scale, min_scale, None) + scale_y = np.clip(scale, min_scale, None) + + if np.random.rand() < self.spatial_aug_prob: + # rescale the images + img1 = cv2.resize(img1, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR) + img2 = cv2.resize(img2, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR) + flow, valid = self.resize_sparse_flow_map(flow, valid, fx=scale_x, fy=scale_y) + + if self.do_flip: + if np.random.rand() < 0.5: # h-flip + img1 = img1[:, ::-1] + img2 = img2[:, ::-1] + flow = flow[:, ::-1] * [-1.0, 1.0] + valid = valid[:, ::-1] + + margin_y = 20 + margin_x = 50 + + y0 = np.random.randint(0, img1.shape[0] - self.crop_size[0] + margin_y) + x0 = np.random.randint(-margin_x, img1.shape[1] - self.crop_size[1] + margin_x) + + y0 = np.clip(y0, 0, img1.shape[0] - self.crop_size[0]) + x0 = np.clip(x0, 0, img1.shape[1] - self.crop_size[1]) + + img1 = img1[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + img2 = img2[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + flow = flow[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + valid = valid[y0:y0+self.crop_size[0], x0:x0+self.crop_size[1]] + return img1, img2, flow, valid + + + def __call__(self, img1, img2, flow, valid): + img1, img2 = self.color_transform(img1, img2) + img1, img2 = self.eraser_transform(img1, img2) + img1, img2, flow, valid = self.spatial_transform(img1, img2, flow, valid) + + img1 = np.ascontiguousarray(img1) + img2 = np.ascontiguousarray(img2) + flow = np.ascontiguousarray(flow) + valid = np.ascontiguousarray(valid) + + return img1, img2, flow, valid diff --git a/data_utils/UNFaceFlow/core/utils_core/flow_viz.py b/data_utils/UNFaceFlow/core/utils_core/flow_viz.py new file mode 100644 index 0000000000000000000000000000000000000000..dcee65e89b91b07ee0496aeb4c7e7436abf99641 --- /dev/null +++ b/data_utils/UNFaceFlow/core/utils_core/flow_viz.py @@ -0,0 +1,132 @@ +# Flow visualization code used from https://github.com/tomrunia/OpticalFlow_Visualization + + +# MIT License +# +# Copyright (c) 2018 Tom Runia +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to conditions. +# +# Author: Tom Runia +# Date Created: 2018-08-03 + +import numpy as np + +def make_colorwheel(): + """ + Generates a color wheel for optical flow visualization as presented in: + Baker et al. "A Database and Evaluation Methodology for Optical Flow" (ICCV, 2007) + URL: http://vision.middlebury.edu/flow/flowEval-iccv07.pdf + + Code follows the original C++ source code of Daniel Scharstein. + Code follows the the Matlab source code of Deqing Sun. + + Returns: + np.ndarray: Color wheel + """ + + RY = 15 + YG = 6 + GC = 4 + CB = 11 + BM = 13 + MR = 6 + + ncols = RY + YG + GC + CB + BM + MR + colorwheel = np.zeros((ncols, 3)) + col = 0 + + # RY + colorwheel[0:RY, 0] = 255 + colorwheel[0:RY, 1] = np.floor(255*np.arange(0,RY)/RY) + col = col+RY + # YG + colorwheel[col:col+YG, 0] = 255 - np.floor(255*np.arange(0,YG)/YG) + colorwheel[col:col+YG, 1] = 255 + col = col+YG + # GC + colorwheel[col:col+GC, 1] = 255 + colorwheel[col:col+GC, 2] = np.floor(255*np.arange(0,GC)/GC) + col = col+GC + # CB + colorwheel[col:col+CB, 1] = 255 - np.floor(255*np.arange(CB)/CB) + colorwheel[col:col+CB, 2] = 255 + col = col+CB + # BM + colorwheel[col:col+BM, 2] = 255 + colorwheel[col:col+BM, 0] = np.floor(255*np.arange(0,BM)/BM) + col = col+BM + # MR + colorwheel[col:col+MR, 2] = 255 - np.floor(255*np.arange(MR)/MR) + colorwheel[col:col+MR, 0] = 255 + return colorwheel + + +def flow_uv_to_colors(u, v, convert_to_bgr=False): + """ + Applies the flow color wheel to (possibly clipped) flow components u and v. + + According to the C++ source code of Daniel Scharstein + According to the Matlab source code of Deqing Sun + + Args: + u (np.ndarray): Input horizontal flow of shape [H,W] + v (np.ndarray): Input vertical flow of shape [H,W] + convert_to_bgr (bool, optional): Convert output image to BGR. Defaults to False. + + Returns: + np.ndarray: Flow visualization image of shape [H,W,3] + """ + flow_image = np.zeros((u.shape[0], u.shape[1], 3), np.uint8) + colorwheel = make_colorwheel() # shape [55x3] + ncols = colorwheel.shape[0] + rad = np.sqrt(np.square(u) + np.square(v)) + a = np.arctan2(-v, -u)/np.pi + fk = (a+1) / 2*(ncols-1) + k0 = np.floor(fk).astype(np.int32) + k1 = k0 + 1 + k1[k1 == ncols] = 0 + f = fk - k0 + for i in range(colorwheel.shape[1]): + tmp = colorwheel[:,i] + col0 = tmp[k0] / 255.0 + col1 = tmp[k1] / 255.0 + col = (1-f)*col0 + f*col1 + idx = (rad <= 1) + col[idx] = 1 - rad[idx] * (1-col[idx]) + col[~idx] = col[~idx] * 0.75 # out of range + # Note the 2-i => BGR instead of RGB + ch_idx = 2-i if convert_to_bgr else i + flow_image[:,:,ch_idx] = np.floor(255 * col) + return flow_image + + +def flow_to_image(flow_uv, clip_flow=None, convert_to_bgr=False): + """ + Expects a two dimensional flow image of shape. + + Args: + flow_uv (np.ndarray): Flow UV image of shape [H,W,2] + clip_flow (float, optional): Clip maximum of flow values. Defaults to None. + convert_to_bgr (bool, optional): Convert output image to BGR. Defaults to False. + + Returns: + np.ndarray: Flow visualization image of shape [H,W,3] + """ + assert flow_uv.ndim == 3, 'input flow must have three dimensions' + assert flow_uv.shape[2] == 2, 'input flow must have shape [H,W,2]' + if clip_flow is not None: + flow_uv = np.clip(flow_uv, 0, clip_flow) + u = flow_uv[:,:,0] + v = flow_uv[:,:,1] + rad = np.sqrt(np.square(u) + np.square(v)) + rad_max = np.max(rad) + epsilon = 1e-5 + u = u / (rad_max + epsilon) + v = v / (rad_max + epsilon) + return flow_uv_to_colors(u, v, convert_to_bgr) \ No newline at end of file diff --git a/data_utils/UNFaceFlow/core/utils_core/frame_utils.py b/data_utils/UNFaceFlow/core/utils_core/frame_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6c491135efaffc25bd61ec3ecde99d236f5deb12 --- /dev/null +++ b/data_utils/UNFaceFlow/core/utils_core/frame_utils.py @@ -0,0 +1,137 @@ +import numpy as np +from PIL import Image +from os.path import * +import re + +import cv2 +cv2.setNumThreads(0) +cv2.ocl.setUseOpenCL(False) + +TAG_CHAR = np.array([202021.25], np.float32) + +def readFlow(fn): + """ Read .flo file in Middlebury format""" + # Code adapted from: + # http://stackoverflow.com/questions/28013200/reading-middlebury-flow-files-with-python-bytes-array-numpy + + # WARNING: this will work on little-endian architectures (eg Intel x86) only! + # print 'fn = %s'%(fn) + with open(fn, 'rb') as f: + magic = np.fromfile(f, np.float32, count=1) + if 202021.25 != magic: + print('Magic number incorrect. Invalid .flo file') + return None + else: + w = np.fromfile(f, np.int32, count=1) + h = np.fromfile(f, np.int32, count=1) + # print 'Reading %d x %d flo file\n' % (w, h) + data = np.fromfile(f, np.float32, count=2*int(w)*int(h)) + # Reshape data into 3D array (columns, rows, bands) + # The reshape here is for visualization, the original code is (w,h,2) + return np.resize(data, (int(h), int(w), 2)) + +def readPFM(file): + file = open(file, 'rb') + + color = None + width = None + height = None + scale = None + endian = None + + header = file.readline().rstrip() + if header == b'PF': + color = True + elif header == b'Pf': + color = False + else: + raise Exception('Not a PFM file.') + + dim_match = re.match(rb'^(\d+)\s(\d+)\s$', file.readline()) + if dim_match: + width, height = map(int, dim_match.groups()) + else: + raise Exception('Malformed PFM header.') + + scale = float(file.readline().rstrip()) + if scale < 0: # little-endian + endian = '<' + scale = -scale + else: + endian = '>' # big-endian + + data = np.fromfile(file, endian + 'f') + shape = (height, width, 3) if color else (height, width) + + data = np.reshape(data, shape) + data = np.flipud(data) + return data + +def writeFlow(filename,uv,v=None): + """ Write optical flow to file. + + If v is None, uv is assumed to contain both u and v channels, + stacked in depth. + Original code by Deqing Sun, adapted from Daniel Scharstein. + """ + nBands = 2 + + if v is None: + assert(uv.ndim == 3) + assert(uv.shape[2] == 2) + u = uv[:,:,0] + v = uv[:,:,1] + else: + u = uv + + assert(u.shape == v.shape) + height,width = u.shape + f = open(filename,'wb') + # write the header + f.write(TAG_CHAR) + np.array(width).astype(np.int32).tofile(f) + np.array(height).astype(np.int32).tofile(f) + # arrange into matrix form + tmp = np.zeros((height, width*nBands)) + tmp[:,np.arange(width)*2] = u + tmp[:,np.arange(width)*2 + 1] = v + tmp.astype(np.float32).tofile(f) + f.close() + + +def readFlowKITTI(filename): + flow = cv2.imread(filename, cv2.IMREAD_ANYDEPTH|cv2.IMREAD_COLOR) + flow = flow[:,:,::-1].astype(np.float32) + flow, valid = flow[:, :, :2], flow[:, :, 2] + flow = (flow - 2**15) / 64.0 + return flow, valid + +def readDispKITTI(filename): + disp = cv2.imread(filename, cv2.IMREAD_ANYDEPTH) / 256.0 + valid = disp > 0.0 + flow = np.stack([-disp, np.zeros_like(disp)], -1) + return flow, valid + + +def writeFlowKITTI(filename, uv): + uv = 64.0 * uv + 2**15 + valid = np.ones([uv.shape[0], uv.shape[1], 1]) + uv = np.concatenate([uv, valid], axis=-1).astype(np.uint16) + cv2.imwrite(filename, uv[..., ::-1]) + + +def read_gen(file_name, pil=False): + ext = splitext(file_name)[-1] + if ext == '.png' or ext == '.jpeg' or ext == '.ppm' or ext == '.jpg': + return Image.open(file_name) + elif ext == '.bin' or ext == '.raw': + return np.load(file_name) + elif ext == '.flo': + return readFlow(file_name).astype(np.float32) + elif ext == '.pfm': + flow = readPFM(file_name).astype(np.float32) + if len(flow.shape) == 2: + return flow + else: + return flow[:, :, :-1] + return [] \ No newline at end of file diff --git a/data_utils/UNFaceFlow/core/utils_core/utils.py b/data_utils/UNFaceFlow/core/utils_core/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d25d1ebcc45ce158fcff3583f9ceed2006eafc1d --- /dev/null +++ b/data_utils/UNFaceFlow/core/utils_core/utils.py @@ -0,0 +1,86 @@ +import torch +import torch.nn.functional as F +import numpy as np +from scipy import interpolate + + +class InputPadder: + """ Pads images such that dimensions are divisible by 8 """ + def __init__(self, dims, mode='sintel'): + self.ht, self.wd = dims[-2:] + pad_ht = (((self.ht // 8) + 1) * 8 - self.ht) % 8 + pad_wd = (((self.wd // 8) + 1) * 8 - self.wd) % 8 + if mode == 'sintel': + self._pad = [pad_wd//2, pad_wd - pad_wd//2, pad_ht//2, pad_ht - pad_ht//2] + else: + self._pad = [pad_wd//2, pad_wd - pad_wd//2, 0, pad_ht] + + def pad(self, *inputs): + return [F.pad(x, self._pad, mode='replicate') for x in inputs] + + def unpad(self,x): + ht, wd = x.shape[-2:] + c = [self._pad[2], ht-self._pad[3], self._pad[0], wd-self._pad[1]] + return x[..., c[0]:c[1], c[2]:c[3]] + +def forward_interpolate(flow): + flow = flow.detach().cpu().numpy() + dx, dy = flow[0], flow[1] + + ht, wd = dx.shape + x0, y0 = np.meshgrid(np.arange(wd), np.arange(ht)) + + x1 = x0 + dx + y1 = y0 + dy + + x1 = x1.reshape(-1) + y1 = y1.reshape(-1) + dx = dx.reshape(-1) + dy = dy.reshape(-1) + + valid = (x1 > 0) & (x1 < wd) & (y1 > 0) & (y1 < ht) + x1 = x1[valid] + y1 = y1[valid] + dx = dx[valid] + dy = dy[valid] + + flow_x = interpolate.griddata( + (x1, y1), dx, (x0, y0), method='nearest', fill_value=0) + + flow_y = interpolate.griddata( + (x1, y1), dy, (x0, y0), method='nearest', fill_value=0) + + flow = np.stack([flow_x, flow_y], axis=0) + return torch.from_numpy(flow).float() + + +def bilinear_sampler(img, coords, mode='bilinear', mask=False): + """ Wrapper for grid_sample, uses pixel coordinates """ + H, W = img.shape[-2:] + xgrid, ygrid = coords.split([1,1], dim=-1) + xgrid = 2*xgrid/(W-1) - 1 + ygrid = 2*ygrid/(H-1) - 1 + + grid = torch.cat([xgrid, ygrid], dim=-1) + img = F.grid_sample(img, grid, align_corners=True) + + if mask: + mask = (xgrid > -1) & (ygrid > -1) & (xgrid < 1) & (ygrid < 1) + return img, mask.float() + + return img + + +def coords_grid(batch, ht, wd): + coords = torch.meshgrid(torch.arange(ht), torch.arange(wd)) + coords = torch.stack(coords[::-1], dim=0).float() + return coords[None].repeat(batch, 1, 1, 1) + + +def upflow8(flow, mode='bilinear'): + new_size = (8 * flow.shape[2], 8 * flow.shape[3]) + return 8 * F.interpolate(flow, size=new_size, mode=mode, align_corners=True) + +def upweights8(weights, mode='bilinear'): + new_size = (8 * weights.shape[2], 8 * weights.shape[3]) + return F.interpolate(weights, size=new_size, mode=mode, align_corners=True) diff --git a/data_utils/UNFaceFlow/core/warp_utils.py b/data_utils/UNFaceFlow/core/warp_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7fc1897ffd53760e0c3630e843e2ff8d5b3f9844 --- /dev/null +++ b/data_utils/UNFaceFlow/core/warp_utils.py @@ -0,0 +1,118 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +def mesh_grid(B, H, W): + # mesh grid + x_base = torch.arange(0, W).repeat(B, H, 1) # BHW + y_base = torch.arange(0, H).repeat(B, W, 1).transpose(1, 2) # BHW + + base_grid = torch.stack([x_base, y_base], 1) # B2HW + return base_grid + + +def norm_grid(v_grid): + _, _, H, W = v_grid.size() + + # scale grid to [-1,1] + v_grid_norm = torch.zeros_like(v_grid) + v_grid_norm[:, 0, :, :] = 2.0 * v_grid[:, 0, :, :] / (W - 1) - 1.0 + v_grid_norm[:, 1, :, :] = 2.0 * v_grid[:, 1, :, :] / (H - 1) - 1.0 + return v_grid_norm.permute(0, 2, 3, 1) # BHW2 + + +def get_corresponding_map(data): + """ + + :param data: unnormalized coordinates Bx2xHxW + :return: Bx1xHxW + """ + B, _, H, W = data.size() + + # x = data[:, 0, :, :].view(B, -1).clamp(0, W - 1) # BxN (N=H*W) + # y = data[:, 1, :, :].view(B, -1).clamp(0, H - 1) + + x = data[:, 0, :, :].view(B, -1) # BxN (N=H*W) + y = data[:, 1, :, :].view(B, -1) + + # invalid = (x < 0) | (x > W - 1) | (y < 0) | (y > H - 1) # BxN + # invalid = invalid.repeat([1, 4]) + + x1 = torch.floor(x) + x_floor = x1.clamp(0, W - 1) + y1 = torch.floor(y) + y_floor = y1.clamp(0, H - 1) + x0 = x1 + 1 + x_ceil = x0.clamp(0, W - 1) + y0 = y1 + 1 + y_ceil = y0.clamp(0, H - 1) + + x_ceil_out = x0 != x_ceil + y_ceil_out = y0 != y_ceil + x_floor_out = x1 != x_floor + y_floor_out = y1 != y_floor + invalid = torch.cat([x_ceil_out | y_ceil_out, + x_ceil_out | y_floor_out, + x_floor_out | y_ceil_out, + x_floor_out | y_floor_out], dim=1) + + # encode coordinates, since the scatter function can only index along one axis + corresponding_map = torch.zeros(B, H * W).type_as(data) + indices = torch.cat([x_ceil + y_ceil * W, + x_ceil + y_floor * W, + x_floor + y_ceil * W, + x_floor + y_floor * W], 1).long() # BxN (N=4*H*W) + values = torch.cat([(1 - torch.abs(x - x_ceil)) * (1 - torch.abs(y - y_ceil)), + (1 - torch.abs(x - x_ceil)) * (1 - torch.abs(y - y_floor)), + (1 - torch.abs(x - x_floor)) * (1 - torch.abs(y - y_ceil)), + (1 - torch.abs(x - x_floor)) * (1 - torch.abs(y - y_floor))], + 1) + # values = torch.ones_like(values) + + values[invalid] = 0 + + corresponding_map.scatter_add_(1, indices, values) + # decode coordinates + corresponding_map = corresponding_map.view(B, H, W) + + return corresponding_map.unsqueeze(1) + + +def flow_warp(x, flow12, pad='border', mode='bilinear'): + B, _, H, W = x.size() + + base_grid = mesh_grid(B, H, W).type_as(x) # B2HW + + v_grid = norm_grid(base_grid + flow12) # BHW2 + im1_recons = nn.functional.grid_sample(x, v_grid, mode=mode, padding_mode=pad) + return im1_recons + + +def get_occu_mask_bidirection(flow12, flow21, mask, scale=1, bias=0.5): + flow21_warped = flow_warp(flow21, flow12, pad='zeros') + flow12_diff = flow12 + flow21_warped + mag = (flow12 * flow12).sum(1, keepdim=True) + \ + (flow21_warped * flow21_warped).sum(1, keepdim=True) + occ_thresh = scale * mag + bias + occu = (flow12_diff * flow12_diff).sum(1, keepdim=True) > occ_thresh + # soft_occu = 1.0 / (1 + torch.exp(diff) / 5.0) + # print("forward:", diff.max(), diff.min()) + return occu + + +def get_occu_mask_backward(flow21, th=0.2): + B, _, H, W = flow21.size() + base_grid = mesh_grid(B, H, W).type_as(flow21) # B2HW + + corr_map = get_corresponding_map(base_grid + flow21) # BHW + occu_mask = corr_map.clamp(min=0., max=1.) < th + return occu_mask.float() + +def get_ssv_weights(cycle_corres, input, mask, scale_value): + vgrid = (cycle_corres.mul(scale_value) - 1.0).permute(0,2,3,1) + new_input = nn.functional.grid_sample(input, vgrid, align_corners=True, padding_mode='border') + color_diff = (((input[:, :3, :, :] - new_input[:, :3, :, :]) / 255.0) ** 2).sum(1, keepdim=True) + depth_diff = (((input[:, 3:, :, :] - new_input[:, 3:, :, :])) ** 2).sum(1, keepdim=True) + diff = torch.mul(mask.float(), color_diff + depth_diff) #(N, 1, H, W) + return torch.exp(-diff) diff --git a/data_utils/UNFaceFlow/data_test_flow/__init__.py b/data_utils/UNFaceFlow/data_test_flow/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fa8b81e62acc75596b899fbae852972d676a2631 --- /dev/null +++ b/data_utils/UNFaceFlow/data_test_flow/__init__.py @@ -0,0 +1,94 @@ +import importlib +import torch.utils.data +from data_test_flow.dd_dataset import DDDataset + +def CreateDataLoader(opt): + data_loader = CustomDatasetDataLoader() + data_loader.initialize(opt) + return data_loader + +# def CreateTestDataLoader(opt): +# data_loader = CustomTestDatasetDataLoader() +# data_loader.initialize(opt) +# return data_loader + +class BaseDataLoader(): + def __init__(self): + pass + + def initialize(self, opt): + self.opt = opt + pass + + def load_data(self): + return None + +class CustomDatasetDataLoader(BaseDataLoader): + def name(self): + return 'CustomDatasetDataLoader' + + def initialize(self, opt): + BaseDataLoader.initialize(self, opt) + self.dataset = DDDataset() + self.dataset.initialize(opt) + ''' + sampler = torch.utils.data.distributed.DistributedSampler(self.dataset) + self.dataloader = torch.utils.data.DataLoader( + self.dataset, + batch_size=opt.batch_size, + shuffle=False, + sampler=sampler) + ''' + self.dataloader = torch.utils.data.DataLoader( + self.dataset, + batch_size=opt.batch_size, + shuffle=opt.shuffle, + drop_last=True, + num_workers=int(opt.num_threads)) + + def load_data(self): + return self + + def __len__(self): + return min(len(self.dataset), self.opt.max_dataset_size) + + def __iter__(self): + for i, data in enumerate(self.dataloader): + if i * self.opt.batch_size >= self.opt.max_dataset_size: + break + yield data + +# class CustomTestDatasetDataLoader(BaseDataLoader): +# def name(self): +# return 'CustomDatasetDataLoader' + +# def initialize(self, opt): +# BaseDataLoader.initialize(self, opt) +# self.dataset = DDDatasetTest() +# self.dataset.initialize(opt) +# ''' +# sampler = torch.utils.data.distributed.DistributedSampler(self.dataset) +# self.dataloader = torch.utils.data.DataLoader( +# self.dataset, +# batch_size=opt.batch_size, +# shuffle=False, +# sampler=sampler) +# ''' +# self.dataloader = torch.utils.data.DataLoader( +# self.dataset, +# batch_size=opt.batch_size, +# shuffle=opt.shuffle, +# drop_last=True, +# num_workers=int(opt.num_threads)) + +# def load_data(self): +# return self + +# def __len__(self): +# return min(len(self.dataset), self.opt.max_dataset_size) + +# def __iter__(self): +# for i, data in enumerate(self.dataloader): +# if i * self.opt.batch_size >= self.opt.max_dataset_size: +# break +# yield data diff --git a/data_utils/UNFaceFlow/data_test_flow/base_dataset.py b/data_utils/UNFaceFlow/data_test_flow/base_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..0d0d5b57b013c968c2dda04462f00caae2f7ec29 --- /dev/null +++ b/data_utils/UNFaceFlow/data_test_flow/base_dataset.py @@ -0,0 +1,98 @@ +import torch.utils.data as data +from PIL import Image +import torchvision.transforms as transforms + + +class BaseDataset(data.Dataset): + def __init__(self): + super(BaseDataset, self).__init__() + + def name(self): + return 'BaseDataset' + + def initialize(self, opt): + pass + + def __len__(self): + return 0 + + +def get_transform(opt): + transform_list = [] + if opt.resize_or_crop == 'resize_and_crop': + osize = [opt.loadSize, opt.loadSize] + transform_list.append(transforms.Resize(osize, Image.BICUBIC)) + transform_list.append(transforms.RandomCrop(opt.fineSize)) + elif opt.resize_or_crop == 'crop': + transform_list.append(transforms.RandomCrop(opt.fineSize)) + elif opt.resize_or_crop == 'scale_width': + transform_list.append(transforms.Lambda( + lambda img: __scale_width(img, opt.fineSize))) + elif opt.resize_or_crop == 'scale_width_and_crop': + transform_list.append(transforms.Lambda( + lambda img: __scale_width(img, opt.loadSize))) + transform_list.append(transforms.RandomCrop(opt.fineSize)) + elif opt.resize_or_crop == 'none': + transform_list.append(transforms.Lambda( + lambda img: __adjust(img))) + else: + raise ValueError('--resize_or_crop %s is not a valid option.' % opt.resize_or_crop) + + if opt.isTrain and not opt.no_flip: + transform_list.append(transforms.RandomHorizontalFlip()) + + transform_list += [transforms.ToTensor(), + transforms.Normalize((0.5, 0.5, 0.5), + (0.5, 0.5, 0.5))] + return transforms.Compose(transform_list) + + +# just modify the width and height to be multiple of 4 +def __adjust(img): + ow, oh = img.size + + # the size needs to be a multiple of this number, + # because going through generator network may change img size + # and eventually cause size mismatch error + mult = 4 + if ow % mult == 0 and oh % mult == 0: + return img + w = (ow - 1) // mult + w = (w + 1) * mult + h = (oh - 1) // mult + h = (h + 1) * mult + + if ow != w or oh != h: + __print_size_warning(ow, oh, w, h) + + return img.resize((w, h), Image.BICUBIC) + + +def __scale_width(img, target_width): + ow, oh = img.size + + # the size needs to be a multiple of this number, + # because going through generator network may change img size + # and eventually cause size mismatch error + mult = 4 + assert target_width % mult == 0, "the target width needs to be multiple of %d." % mult + if (ow == target_width and oh % mult == 0): + return img + w = target_width + target_height = int(target_width * oh / ow) + m = (target_height - 1) // mult + h = (m + 1) * mult + + if target_height != h: + __print_size_warning(target_width, target_height, w, h) + + return img.resize((w, h), Image.BICUBIC) + + +def __print_size_warning(ow, oh, w, h): + if not hasattr(__print_size_warning, 'has_printed'): + print("The image size needs to be a multiple of 4. " + "The loaded image size was (%d, %d), so it was adjusted to " + "(%d, %d). This adjustment will be done to all images " + "whose sizes are not multiples of 4" % (ow, oh, w, h)) + __print_size_warning.has_printed = True \ No newline at end of file diff --git a/data_utils/UNFaceFlow/data_test_flow/dd_dataset.py b/data_utils/UNFaceFlow/data_test_flow/dd_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..51fcf87fe21abfc2b3d8fec29d7e2ce2896708a4 --- /dev/null +++ b/data_utils/UNFaceFlow/data_test_flow/dd_dataset.py @@ -0,0 +1,108 @@ +import os.path +import torch +import torch.utils.data as data +from PIL import Image +import random +import utils +import numpy as np +import torchvision.transforms as transforms +from utils_core import flow_viz +import cv2 + +class DDDataset(data.Dataset): + def __init__(self): + super(DDDataset, self).__init__() + def initialize(self, opt): + self.opt = opt + self.dir_txt = opt.datapath + self.paths = [] + in_file = open(self.dir_txt, "r") + k = 0 + list_paths = in_file.readlines() + for line in list_paths: + #if k>=20: break + flag = False + line = line.strip() + line = line.split() + + #source data + if (not os.path.exists(line[0])): + print(line[0]+" not exists") + continue + if (not os.path.exists(line[1])): + print(line[1]+" not exists") + continue + if (not os.path.exists(line[2])): + print(line[2]+" not exists") + continue + if (not os.path.exists(line[3])): + print(line[3]+" not exists") + continue + # if (not os.path.exists(line[2])): + # print(line[2]+" not exists") + # continue + + # path_list = [line[0], line[1], line[2]] + path_list = [line[0], line[1], line[2], line[3]] + self.paths.append(path_list) + k += 1 + in_file.close() + self.data_size = len(self.paths) + print("num data: ", len(self.paths)) + + def process_data(self, color, mask): + non_zero = mask.nonzero() + bound = 10 + min_x = max(0, non_zero[1].min()-bound) + max_x = min(self.opt.width-1, non_zero[1].max()+bound) + min_y = max(0, non_zero[0].min()-bound) + max_y = min(self.opt.height-1, non_zero[0].max()+bound) + color = color * (mask!=0).astype(float)[:, :, None] + crop_color = color[min_y:max_y, min_x:max_x, :] + crop_color = cv2.resize(np.ascontiguousarray(crop_color), (self.opt.crop_width, self.opt.crop_height), interpolation=cv2.INTER_LINEAR) + crop_params = [[min_x], [max_x], [min_y], [max_y]] + + return crop_color, crop_params + + def __getitem__(self, index): + paths = self.paths[index % self.data_size] + src_color = np.array(Image.open(paths[0])) + src_color = src_color.astype(np.uint8) + raw_src_color = src_color.copy() + src_mask = np.array(Image.open(paths[1]))[:, :, 0] + cv2.imwrite("test_mask.png", src_mask) + src_mask_copy = src_mask.copy() + src_crop_color, src_crop_params = self.process_data(src_color, src_mask) + #self.write_mesh(src_X, src_Y, src_Z, "./tmp/src.obj") + #HWC --> CHW, + raw_src_color = torch.from_numpy(raw_src_color).permute(2, 0, 1).float() / 255.0 + src_crop_color = torch.from_numpy(src_crop_color).permute(2, 0, 1).float() / 255.0 + + src_mask_copy = (src_mask_copy!=0) + src_mask_copy = torch.tensor(src_mask_copy[np.newaxis, :, :]) + + tar_color = np.array(Image.open(paths[2])) + tar_color = tar_color.astype(np.uint8) + raw_tar_color = tar_color.copy() + tar_mask = np.array(Image.open(paths[3]))[:, :, 0] + tar_mask_copy = tar_mask.copy() + tar_crop_color, tar_crop_params = self.process_data(tar_color, tar_mask) + + raw_tar_color = torch.from_numpy(raw_tar_color).permute(2, 0, 1).float() / 255.0 + tar_crop_color = torch.from_numpy(tar_crop_color).permute(2, 0, 1).float() / 255.0 + + tar_mask_copy = (tar_mask_copy!=0) + tar_mask_copy = torch.tensor(tar_mask_copy[np.newaxis, :, :]) + + Crop_param = torch.tensor(src_crop_params+tar_crop_params) + + split_ = paths[0].split("/") + path1 = split_[-1][:-4] + "_" + paths[2].split("/")[-1][:-4] +".oflow" + + return {"path_flow":path1, "src_crop_color":src_crop_color, "tar_crop_color":tar_crop_color, "src_color":raw_src_color, "tar_color":raw_tar_color, "src_mask":src_mask_copy, "tar_mask":tar_mask_copy, "Crop_param":Crop_param} + + def __len__(self): + return self.data_size + + def name(self): + return 'DDDataset' diff --git a/data_utils/UNFaceFlow/data_test_flow/dd_dataset_bak.py b/data_utils/UNFaceFlow/data_test_flow/dd_dataset_bak.py new file mode 100644 index 0000000000000000000000000000000000000000..c91a4ab04720abaf2a8c1d47a6a402197ccfb59e --- /dev/null +++ b/data_utils/UNFaceFlow/data_test_flow/dd_dataset_bak.py @@ -0,0 +1,107 @@ +import os.path +import torch +import torch.utils.data as data +from PIL import Image +import random +import utils +import numpy as np +import torchvision.transforms as transforms +from utils_core import flow_viz +import cv2 + +class DDDataset(data.Dataset): + def __init__(self): + super(DDDataset, self).__init__() + def initialize(self, opt): + self.opt = opt + self.dir_txt = opt.datapath + self.paths = [] + in_file = open(self.dir_txt, "r") + k = 0 + list_paths = in_file.readlines() + for line in list_paths: + #if k>=20: break + flag = False + line = line.strip() + line = line.split() + + #source data + if (not os.path.exists(line[0])): + print(line[0]+" not exists") + continue + if (not os.path.exists(line[1])): + print(line[1]+" not exists") + continue + if (not os.path.exists(line[2])): + print(line[2]+" not exists") + continue + if (not os.path.exists(line[3])): + print(line[3]+" not exists") + continue + # if (not os.path.exists(line[2])): + # print(line[2]+" not exists") + # continue + + # path_list = [line[0], line[1], line[2]] + path_list = [line[0], line[1], line[2], line[3]] + self.paths.append(path_list) + k += 1 + in_file.close() + self.data_size = len(self.paths) + print("num data: ", len(self.paths)) + + def process_data(self, color, mask): + non_zero = mask.nonzero() + bound = 10 + min_x = max(0, non_zero[1].min()-bound) + max_x = min(self.opt.width-1, non_zero[1].max()+bound) + min_y = max(0, non_zero[0].min()-bound) + max_y = min(self.opt.height-1, non_zero[0].max()+bound) + color = color * (mask!=0).astype(float)[:, :, None] + crop_color = color[min_y:max_y, min_x:max_x, :] + crop_color = cv2.resize(np.ascontiguousarray(crop_color), (self.opt.crop_width, self.opt.crop_height), interpolation=cv2.INTER_LINEAR) + crop_params = [[min_x], [max_x], [min_y], [max_y]] + + return crop_color, crop_params + + def __getitem__(self, index): + paths = self.paths[index % self.data_size] + src_color = np.array(Image.open(paths[0])) + src_color = src_color.astype(np.uint8) + raw_src_color = src_color.copy() + src_mask = np.array(Image.open(paths[1])) + src_mask_copy = src_mask.copy() + src_crop_color, src_crop_params = self.process_data(src_color, src_mask) + #self.write_mesh(src_X, src_Y, src_Z, "./tmp/src.obj") + #HWC --> CHW, + raw_src_color = torch.from_numpy(raw_src_color).permute(2, 0, 1).float() / 255.0 + src_crop_color = torch.from_numpy(src_crop_color).permute(2, 0, 1).float() / 255.0 + + src_mask_copy = (src_mask_copy!=0) + src_mask_copy = torch.tensor(src_mask_copy[np.newaxis, :, :]) + + tar_color = np.array(Image.open(paths[2])) + tar_color = tar_color.astype(np.uint8) + raw_tar_color = tar_color.copy() + tar_mask = np.array(Image.open(paths[3])) + tar_mask_copy = tar_mask.copy() + tar_crop_color, tar_crop_params = self.process_data(tar_color, tar_mask) + + raw_tar_color = torch.from_numpy(raw_tar_color).permute(2, 0, 1).float() / 255.0 + tar_crop_color = torch.from_numpy(tar_crop_color).permute(2, 0, 1).float() / 255.0 + + tar_mask_copy = (tar_mask_copy!=0) + tar_mask_copy = torch.tensor(tar_mask_copy[np.newaxis, :, :]) + + Crop_param = torch.tensor(src_crop_params+tar_crop_params) + + split_ = paths[0].split("/") + path1 = split_[-1][:-4] + "_" + paths[2].split("/")[-1][:-4] +".oflow" + + return {"path_flow":path1, "src_crop_color":src_crop_color, "tar_crop_color":tar_crop_color, "src_color":raw_src_color, "tar_color":raw_tar_color, "src_mask":src_mask_copy, "tar_mask":tar_mask_copy, "Crop_param":Crop_param} + + def __len__(self): + return self.data_size + + def name(self): + return 'DDDataset' \ No newline at end of file diff --git a/data_utils/UNFaceFlow/models/network_test_flow.py b/data_utils/UNFaceFlow/models/network_test_flow.py new file mode 100644 index 0000000000000000000000000000000000000000..c926ebb885eb18e2174b942756ef4d2bf0faa24d --- /dev/null +++ b/data_utils/UNFaceFlow/models/network_test_flow.py @@ -0,0 +1,88 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from raft import RAFT +from nnutils import make_conv_2d, make_upscale_2d, make_downscale_2d, ResBlock2d, Identity + + +class ImportanceWeights(torch.nn.Module): + def __init__(self, opt): + super().__init__() + + if opt.small: + in_dim = 128 + else: + in_dim = 256 + fn_0 = 16 + self.input_fn = fn_0 + 3 * 2 + fn_1 = 16 + self.conv1 = torch.nn.Conv2d(in_channels=in_dim, out_channels=fn_0, kernel_size=3, stride=1, padding=1) + + if opt.use_batch_norm: + custom_batch_norm = torch.nn.BatchNorm2d + else: + custom_batch_norm = Identity + + self.model = nn.Sequential( + make_conv_2d(self.input_fn, fn_1, n_blocks=1, normalization=custom_batch_norm), + ResBlock2d(fn_1, normalization=custom_batch_norm), + ResBlock2d(fn_1, normalization=custom_batch_norm), + ResBlock2d(fn_1, normalization=custom_batch_norm), + nn.Conv2d(fn_1, 1, kernel_size=3, padding=1) + # torch.nn.Sigmoid() + ) + + def forward(self, x, features): + # Reduce number of channels and upscale to highest resolution + features = self.conv1(features) + x = torch.cat([features, x], 1) + assert x.shape[1] == self.input_fn + x = self.model(x) + print(x) + print(x.max(), x.min(), x.mean()) + + return torch.nn.Sigmoid()(x) + +class NeuralNRT(nn.Module): + def __init__(self, opt, path=None, device="cuda:0"): + super(NeuralNRT, self).__init__() + self.opt = opt + self.CorresPred = RAFT(opt) + self.ImportanceW = ImportanceWeights(opt) + if path is not None: + data = torch.load(path,map_location='cpu') + if 'state_dict' in data.keys(): + self.CorresPred.load_state_dict(data['state_dict']) + print("load done") + else: + self.CorresPred.load_state_dict({k.replace('module.', ''):v for k,v in data.items()}) + print("load done") + def forward(self, src_im,tar_im, src_im_raw, tar_im_raw, Crop_param): + N=src_im.shape[0] + src_im = src_im*255.0 + tar_im = tar_im*255.0 + flow_fw_crop, feature_fw_crop = self.CorresPred(src_im, tar_im, iters=self.opt.iters) + + xx = torch.arange(0, self.opt.width).view(1,-1).repeat(self.opt.height,1) + yy = torch.arange(0, self.opt.height).view(-1,1).repeat(1,self.opt.width) + xx = xx.view(1,1,self.opt.height,self.opt.width).repeat(N,1,1,1) + yy = yy.view(1,1,self.opt.height,self.opt.width).repeat(N,1,1,1) + grid = torch.cat((xx,yy),1).float() + grid = grid.to(src_im.device) + + grid_crop = grid[:, :, :self.opt.crop_height, :self.opt.crop_width] + + flow_fw = torch.zeros((N, 2, self.opt.height, self.opt.width), device=src_im.device) + + leftup1 = torch.cat((Crop_param[:, 0:1, 0], Crop_param[:, 2:3, 0]), 1)[:, :, None, None] + leftup2 = torch.cat((Crop_param[:, 4:5, 0], Crop_param[:, 6:7, 0]), 1)[:, :, None, None] + + scale1 = torch.cat(((Crop_param[:, 1:2, 0]-Crop_param[:, 0:1, 0]).float() / self.opt.crop_width, (Crop_param[:, 3:4, 0]-Crop_param[:, 2:3, 0]).float() / self.opt.crop_height), 1)[:, :, None, None] + scale2 = torch.cat(((Crop_param[:, 5:6, 0]-Crop_param[:, 4:5, 0]).float() / self.opt.crop_width, (Crop_param[:, 7:8, 0]-Crop_param[:, 6:7, 0]).float() / self.opt.crop_height), 1)[:, :, None, None] + + flow_fw_crop = (scale2 - scale1) * grid_crop + scale2 * flow_fw_crop + for i in range(N): + flow_fw_cropi = F.interpolate(flow_fw_crop[i:(i+1)], ((Crop_param[i, 3, 0]-Crop_param[i, 2, 0]).item(), (Crop_param[i, 1, 0]-Crop_param[i, 0, 0]).item()), mode='bilinear', align_corners=True) + flow_fw_cropi =flow_fw_cropi + (leftup2 - leftup1)[i:(i+1), :, :, :] + flow_fw[i, :, Crop_param[i, 2, 0]:Crop_param[i, 3, 0], Crop_param[i, 0, 0]:Crop_param[i, 1, 0]] = flow_fw_cropi[0] + return flow_fw diff --git a/data_utils/UNFaceFlow/options_test_flow.py b/data_utils/UNFaceFlow/options_test_flow.py new file mode 100644 index 0000000000000000000000000000000000000000..505b8d1106ee9ee422598c967192d0c696d08174 --- /dev/null +++ b/data_utils/UNFaceFlow/options_test_flow.py @@ -0,0 +1,123 @@ +# ref:https://github.com/ShunyuYao/DFA-NeRF +import argparse +class BaseOptions(): + def __init__(self): + self.parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + self.initialized = False + + def initialize(self): + # self.parser.add_argument('--model_save_path', type=str, default='snapshot/small_filter_wo_ct_wi_bn/real_data/combine/', help='path') + self.parser.add_argument('--model_save_path', type=str, default='snapshot/version1/', help='path') + self.parser.add_argument('--num_threads', type=int, default=2, help='number of threads') + self.parser.add_argument('--max_dataset_size', type=int, default=150000, help='max dataset size') + + self.parser.add_argument('--n_epochs', type=int, default=40000, help='number of iterations') + self.parser.add_argument('--dropout', type=float, default=0.0, help='dropout') + self.parser.add_argument('--init_type', type=str, default='uniform', help='[uniform | xavier]') + self.parser.add_argument('--frequency_print_batch', type=int, default=1000, help='print messages every set iter') + self.parser.add_argument('--frequency_save_model', type=int, default=2000, help='save model every set iter') + self.parser.add_argument('--small', type=bool, default=True, help='use small model') + self.parser.add_argument('--use_batch_norm', action='store_true', help='') + self.parser.add_argument('--smooth_2nd', type=bool, default=True, help='') + + + #loss weight for Gauss-Newton optimization + self.parser.add_argument('--lambda_2d', type=float, default=0.001, help='weight of 2D projection loss') + self.parser.add_argument('--lambda_depth', type=float, default=1.0, help='weight of depth loss') + self.parser.add_argument('--lambda_reg', type=float, default=1.0, help='weight of regularization loss') + + self.parser.add_argument('--num_adja', type=int, default=6, help='number of nodes who affect a point') + self.parser.add_argument('--num_corres', type=int, default=20000, help='number of corres') + self.parser.add_argument('--iter_num', type=int, default=3, help='GN iter num') + self.parser.add_argument('--width', type=int, default=512, help='image width')#480 + self.parser.add_argument('--height', type=int, default=512, help='image height')#640 + self.parser.add_argument('--crop_width', type=int, default=240, help='image width') + self.parser.add_argument('--crop_height', type=int, default=320, help='image height') + self.parser.add_argument('--max_num_edges', type=int, default=30000, help='number of edges') + self.parser.add_argument('--max_num_nodes', type=int, default=1500, help='number of edges') + self.parser.add_argument('--fdim', type=int, default=128) + + #loss weight for training + self.parser.add_argument('--lambda_weights', type=float, default=0.0, help='weight of weights loss')#75 + self.parser.add_argument('--lambda_corres', type=float, default=1.0, help='weight of corres loss')#0, 1 + self.parser.add_argument('--lambda_graph', type=float, default=10.0, help='weight of graph loss')#1000, 5 + self.parser.add_argument('--lambda_warp', type=float, default=10.0, help='weight of warp loss')#1000, 5 + + + def parse(self): + if not self.initialized: + self.initialize() + + self.opt = self.parser.parse_args() + self.opt.isTrain = self.isTrain + self.opt.isTest = self.isTest + args = vars(self.opt) + + return self.opt + +class TrainOptions(BaseOptions): + # Override + def initialize(self): + BaseOptions.initialize(self) + #syn_datasets/syn_new_train_data.txt + self.parser.add_argument('--datapath', type=str, default='./data/train_data.txt', help='path') + self.parser.add_argument('--pretrain_model_path', type=str, default='./pretrain_model/raft-small.pth', help='path')# + self.parser.add_argument('--lr_C', type=float, default=0.00001, help='initial learning rate')#0.01 + self.parser.add_argument('--optimizer_C', type=str, default='sgd', help='[sgd | adam]') + self.parser.add_argument('--lr_W', type=float, default=0.00001, help='initial learning rate') + self.parser.add_argument('--lr_BSW', type=float, default=0.00001, help='initial learning rate') + self.parser.add_argument('--optimizer_W', type=str, default='sgd', help='[sgd | adam]') + self.parser.add_argument('--optimizer_BSW', type=str, default='sgd', help='[sgd | adam]') + self.parser.add_argument('--lr_decay_epoch', type=int, default=8000, help='multiply by a gamma every set iter') + self.parser.add_argument('--lr_decay', type=float, default=0.1, help='coefficient of lr decay') + self.parser.add_argument('--weight_decay', type=float, default=1e-4, help='0.0005coefficient of weight decay') + self.parser.add_argument('--batch_size', type=int, default=4, help='batch size') + self.parser.add_argument('--shuffle', type=bool, default=True, help='whether to shuffle data') + + self.parser.add_argument('--validation', type=str, nargs='+') + #self.parser.add_argument('--image_size', type=int, nargs='+', default=[384, 512]) + self.parser.add_argument('--gpus', type=int, nargs='+', default=[0,1]) + self.parser.add_argument('--mixed_precision', action='store_true', help='use mixed precision') + self.parser.add_argument('--iters', type=int, default=12) + + self.parser.add_argument('--clip', type=float, default=1.0) + self.parser.add_argument('--gamma', type=float, default=0.8, help='exponential weighting') + self.parser.add_argument('--add_noise', action='store_true') + + self.parser.add_argument('--train_bsw', type=bool, default=True, help='whether to train bsw network') + self.parser.add_argument('--train_weight', type=bool, default=True, help='whether to train weight network') + self.parser.add_argument('--train_corres', type=bool, default=True, help='whether to train corresPred network') + + self.isTrain = True + self.isTest = False + +class ValOptions(BaseOptions): + def initialize(self): + BaseOptions.initialize(self) + self.parser.add_argument('--batch_size', type=int, default=4, help='batch size') + self.parser.add_argument('--datapath', type=str, default='./data/val_data.txt', help='path') + self.parser.add_argument('--shuffle', type=bool, default=True, help='whether to shuffle data') + self.parser.add_argument('--mixed_precision', action='store_true', help='use mixed precision') + self.parser.add_argument('--alternate_corr', action='store_true', help='use efficent correlation implementation') + self.parser.add_argument('--iters', type=int, default=12) + self.isTrain = True + self.isTest = False + +class TestOptions(BaseOptions): + def initialize(self): + BaseOptions.initialize(self) + self.parser.add_argument('--batch_size', type=int, default=1, help='batch size') + self.parser.add_argument('--pretrain_model_path', type=str, default='./pretrain_model/raft-small.pth', help='path')# + + # self.parser.add_argument('--datapath', type=str, default='./data/real_train_data_1128_1.txt', help='path') + # self.parser.add_argument('--datapath', type=str, default='./data_test_flow/test_data.txt', help='path') + self.parser.add_argument('--savepath', type=str, default='flow_result', + help='save path') + self.parser.add_argument('--datapath', type=str, default='/data_b/yudong/paper_code/TalkingHead-NeRF/data_guancha/guancha_flow.txt', + help='path') + self.parser.add_argument('--mixed_precision', action='store_true', help='use mixed precision') + self.parser.add_argument('--alternate_corr', action='store_true', help='use efficent correlation implementation') + self.parser.add_argument('--iters', type=int, default=12) + self.parser.add_argument('--shuffle', type=bool, default=True, help='whether to shuffle data') + self.isTrain = False + self.isTest = True diff --git a/data_utils/UNFaceFlow/pretrain_model/raft-small.pth b/data_utils/UNFaceFlow/pretrain_model/raft-small.pth new file mode 100644 index 0000000000000000000000000000000000000000..2b0a4800f74d758ca52fa7a5af70c3caff467e1c --- /dev/null +++ b/data_utils/UNFaceFlow/pretrain_model/raft-small.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d41b9cc88442bb8aa911dbb33086dac55a226394b142937ff22d5578717332 +size 3984814 diff --git a/data_utils/UNFaceFlow/sgd_NNRT_model_epoch19008_50000.pth b/data_utils/UNFaceFlow/sgd_NNRT_model_epoch19008_50000.pth new file mode 100644 index 0000000000000000000000000000000000000000..cf5c0011d1dfa727d4371a413fbdd187445249ec --- /dev/null +++ b/data_utils/UNFaceFlow/sgd_NNRT_model_epoch19008_50000.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8156ef276732a4cbd9a9d85d9b5653abf500976372daf7892b122971a7b8f37 +size 8808087 diff --git a/data_utils/UNFaceFlow/test_flow.py b/data_utils/UNFaceFlow/test_flow.py new file mode 100644 index 0000000000000000000000000000000000000000..fef6998f136249e9c53b6055e0928dc0ed9a7939 --- /dev/null +++ b/data_utils/UNFaceFlow/test_flow.py @@ -0,0 +1,62 @@ +# ref:https://github.com/ShunyuYao/DFA-NeRF +import sys +import os +from tqdm import tqdm +dir_path = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(os.path.join(dir_path, 'core')) +from pathlib import Path +from data_test_flow import * +from models.network_test_flow import NeuralNRT +from options_test_flow import TestOptions +import torch +import numpy as np + + + +def save_flow_numpy(filename, flow_input): + np.save(filename, flow_input) + + +def predict(data): + with torch.no_grad(): + model.eval() + path_flow = data["path_flow"] + src_crop_im = data["src_crop_color"].cuda() + tar_crop_im = data["tar_crop_color"].cuda() + src_im = data["src_color"].cuda() + tar_im = data["tar_color"].cuda() + src_mask = data["src_mask"].cuda() + crop_param = data["Crop_param"].cuda() + B = src_mask.shape[0] + flow = model(src_crop_im, tar_crop_im, src_im, tar_im, crop_param) + for i in range(B): + flow_tmp = flow[i].cpu().numpy() * src_mask[i].cpu().numpy() + save_flow_numpy(os.path.join(save_path, os.path.basename( + path_flow[i])[:-6]+".npy"), flow_tmp) + + +if __name__ == "__main__": + width = 272 + height = 480 + + test_opts = TestOptions().parse() + test_opts.pretrain_model_path = os.path.join( + dir_path, 'pretrain_model/raft-small.pth') + data_loader = CreateDataLoader(test_opts) + testloader = data_loader.load_data() + model_path = os.path.join(dir_path, 'sgd_NNRT_model_epoch19008_50000.pth') + model = NeuralNRT(test_opts, os.path.join( + dir_path, 'pretrain_model/raft-small.pth')) + state_dict = torch.load(model_path) + + model.CorresPred.load_state_dict(state_dict["net_C"]) + model.ImportanceW.load_state_dict(state_dict["net_W"]) + + model = model.cuda() + + save_path = test_opts.savepath + Path(save_path).mkdir(parents=True, exist_ok=True) + total_length = len(testloader) + + for batch_idx, data in tqdm(enumerate(testloader), total=total_length): + predict(data) diff --git a/data_utils/UNFaceFlow/utils.py b/data_utils/UNFaceFlow/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9ac461a82736a410d58575a78892f2ed8f71a4b3 --- /dev/null +++ b/data_utils/UNFaceFlow/utils.py @@ -0,0 +1,84 @@ +import os +import shutil +import numpy as np +import struct +import pickle +from scipy.sparse import coo_matrix + +def load_flow(filename): + # Flow is stored row-wise in order [channels, height, width]. + assert os.path.isfile(filename), "File not found: {}".format(filename) + + flow = None + with open(filename, 'rb') as fin: + width = struct.unpack('I', fin.read(4))[0] + height = struct.unpack('I', fin.read(4))[0] + channels = struct.unpack('I', fin.read(4))[0] + n_elems = height * width * channels + + flow = struct.unpack('f' * n_elems, fin.read(n_elems * 4)) + flow = np.asarray(flow, dtype=np.float32).reshape([channels, height, width]) + + return flow + +def load_graph_info(filename, max_edges, max_nodes): + + assert os.path.isfile(filename), "File not found: {}".format(filename) + + with open(filename, 'rb') as fin: + edge_total_size = struct.unpack('I', fin.read(4))[0] + edges = struct.unpack('I' * (int(edge_total_size / 4)), fin.read(edge_total_size)) + edges = np.asarray(edges, dtype=np.int16).reshape(-1, 2).transpose() + nodes_total_size = struct.unpack('I', fin.read(4))[0] + nodes_ids = struct.unpack('I' * (int(nodes_total_size / 4)), fin.read(nodes_total_size)) + nodes_ids = np.asarray(nodes_ids, dtype=np.int32).reshape(-1) + nodes_ids = np.sort(nodes_ids) + + edges_extent = np.zeros((2, max_edges), dtype=np.int16) + edges_mask = np.zeros((max_edges), dtype=np.bool) + edges_mask[:edges.shape[1]] = 1 + edges_extent[:, :edges.shape[1]] = edges + + nodes_extent = np.zeros((max_nodes), dtype=np.int32) + nodes_mask = np.zeros((max_nodes), dtype=np.bool) + nodes_mask[:nodes_ids.shape[0]] = 1 + nodes_extent[:nodes_ids.shape[0]] = nodes_ids + + fx = struct.unpack('f', fin.read(4))[0] + fy = struct.unpack('f', fin.read(4))[0] + ox = struct.unpack('f', fin.read(4))[0] + oy = struct.unpack('f', fin.read(4))[0] + + return edges_extent, edges_mask, nodes_extent, nodes_mask, fx, fy, ox, oy + +def load_adja_id_info(filename, src_mask, H, W, num_adja, num_neigb): + + assert os.path.isfile(filename), "File not found: {}".format(filename) + assert num_adja<=8, "Num of adja is larger than 8" + assert num_neigb<=8, "Num of neighb is larger than 8" + src_v_id = np.zeros((H*W, num_adja), dtype=np.int16) + src_neigb_id = np.zeros((H*W, num_neigb), dtype=np.int32) + with open(filename, 'rb') as fin: + neigb_id, value_id = pickle.load(fin) + assert((src_mask.sum())==value_id.shape[0]) + + for i in range(num_adja): + src_v_id[src_mask.reshape(-1), i] = value_id[:, i] + for i in range(num_neigb): + src_neigb_id[src_mask.reshape(-1), i] = neigb_id[:, i] + src_v_id = src_v_id.transpose().reshape(num_adja, H, W) + src_neigb_id = src_neigb_id.transpose().reshape(num_neigb, H, W) + + return src_v_id, src_neigb_id + +def save_flow(filename, flow_input): + flow = np.copy(flow_input) + + # Flow is stored row-wise in order [channels, height, width]. + assert len(flow.shape) == 3 + + with open(filename, 'wb') as fout: + fout.write(struct.pack('I', flow.shape[2])) + fout.write(struct.pack('I', flow.shape[1])) + fout.write(struct.pack('I', flow.shape[0])) + fout.write(struct.pack('={}f'.format(flow.size), *flow.flatten("C"))) diff --git a/data_utils/blendshape_capture/face_landmarker.task b/data_utils/blendshape_capture/face_landmarker.task new file mode 100644 index 0000000000000000000000000000000000000000..fedb14de6d2b6708a56c04ae259783e23404c1aa --- /dev/null +++ b/data_utils/blendshape_capture/face_landmarker.task @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64184e229b263107bc2b804c6625db1341ff2bb731874b0bcc2fe6544e0bc9ff +size 3758596 diff --git a/data_utils/blendshape_capture/main.py b/data_utils/blendshape_capture/main.py new file mode 100644 index 0000000000000000000000000000000000000000..cdc45061a99e685e9ec369a89992701629d32386 --- /dev/null +++ b/data_utils/blendshape_capture/main.py @@ -0,0 +1,86 @@ +# -*-coding:utf-8-*- +import argparse +import os +import random +import numpy as np +import cv2 +import glob +from mediapipe import solutions +from mediapipe.framework.formats import landmark_pb2 +import numpy as np +import matplotlib.pyplot as plt +import torch +import torch.nn as nn +from scipy.signal import savgol_filter +import onnxruntime as ort +from collections import OrderedDict +import mediapipe as mp +from mediapipe.tasks import python +from mediapipe.tasks.python import vision + + +from tqdm import tqdm + + +def infer_bs(root_path): + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + base_options = python.BaseOptions(model_asset_path="./data_utils/blendshape_capture/face_landmarker.task") + options = vision.FaceLandmarkerOptions(base_options=base_options, + output_face_blendshapes=True, + output_facial_transformation_matrixes=True, + num_faces=1) + detector = vision.FaceLandmarker.create_from_options(options) + + for i in os.listdir(root_path): + if i.endswith(".mp4"): + mp4_path = os.path.join(root_path, i) + npy_path = os.path.join(root_path, "bs.npy") + if os.path.exists(npy_path): + print("npy file exists:", i.split(".")[0]) + continue + else: + print("npy file not exists:", i.split(".")[0]) + image_path = os.path.join(root_path, "img/temp.png") + os.makedirs(os.path.join(root_path, 'img/'), exist_ok=True) + cap = cv2.VideoCapture(mp4_path) + fps = cap.get(cv2.CAP_PROP_FPS) + frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) + print("fps:", fps) + print("frame_count:", frame_count) + k = 0 + total = frame_count + bs = np.zeros((int(total), 52), dtype=np.float32) + print("total:", total) + print("videoPath:{} fps:{},k".format(mp4_path.split('/')[-1], fps)) + pbar = tqdm(total=int(total)) + while (cap.isOpened()): + ret, frame = cap.read() + if ret: + cv2.imwrite(image_path, frame) + image = mp.Image.create_from_file(image_path) + result = detector.detect(image) + face_blendshapes_scores = [face_blendshapes_category.score for face_blendshapes_category in + result.face_blendshapes[0]] + blendshape_coef = np.array(face_blendshapes_scores)[1:] + blendshape_coef = np.append(blendshape_coef, 0) + bs[k] = blendshape_coef + pbar.update(1) + k += 1 + else: + break + cap.release() + pbar.close() + # np.save(npy_path, bs) + # print(np.shape(bs)) + output = np.zeros((bs.shape[0], bs.shape[1])) + for j in range(bs.shape[1]): + output[:, j] = savgol_filter(bs[:, j], 5, 3) + np.save(npy_path, output) + print(np.shape(output)) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("--path", type=str, help="idname of target person") + args = parser.parse_args() + infer_bs(args.path) diff --git a/data_utils/deepspeech_features/README.md b/data_utils/deepspeech_features/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b15c987a26bf3081aa0c73b969d370373a017c02 --- /dev/null +++ b/data_utils/deepspeech_features/README.md @@ -0,0 +1,20 @@ +# Routines for DeepSpeech features processing +Several routines for [DeepSpeech](https://github.com/mozilla/DeepSpeech) features processing, like speech features generation for [VOCA](https://github.com/TimoBolkart/voca) model. + +## Installation + +``` +pip3 install -r requirements.txt +``` + +## Usage + +Generate wav files: +``` +python3 extract_wav.py --in-video= +``` + +Generate files with DeepSpeech features: +``` +python3 extract_ds_features.py --input= +``` diff --git a/data_utils/deepspeech_features/deepspeech_features.py b/data_utils/deepspeech_features/deepspeech_features.py new file mode 100644 index 0000000000000000000000000000000000000000..0368f27e7fe75ebbca194540e62183c203848026 --- /dev/null +++ b/data_utils/deepspeech_features/deepspeech_features.py @@ -0,0 +1,275 @@ +""" + DeepSpeech features processing routines. + NB: Based on VOCA code. See the corresponding license restrictions. +""" + +__all__ = ['conv_audios_to_deepspeech'] + +import numpy as np +import warnings +import resampy +from scipy.io import wavfile +from python_speech_features import mfcc +import tensorflow.compat.v1 as tf +tf.disable_v2_behavior() + +def conv_audios_to_deepspeech(audios, + out_files, + num_frames_info, + deepspeech_pb_path, + audio_window_size=1, + audio_window_stride=1): + """ + Convert list of audio files into files with DeepSpeech features. + + Parameters + ---------- + audios : list of str or list of None + Paths to input audio files. + out_files : list of str + Paths to output files with DeepSpeech features. + num_frames_info : list of int + List of numbers of frames. + deepspeech_pb_path : str + Path to DeepSpeech 0.1.0 frozen model. + audio_window_size : int, default 16 + Audio window size. + audio_window_stride : int, default 1 + Audio window stride. + """ + # deepspeech_pb_path="/disk4/keyu/DeepSpeech/deepspeech-0.9.2-models.pbmm" + graph, logits_ph, input_node_ph, input_lengths_ph = prepare_deepspeech_net( + deepspeech_pb_path) + + with tf.compat.v1.Session(graph=graph) as sess: + for audio_file_path, out_file_path, num_frames in zip(audios, out_files, num_frames_info): + print(audio_file_path) + print(out_file_path) + audio_sample_rate, audio = wavfile.read(audio_file_path) + if audio.ndim != 1: + warnings.warn( + "Audio has multiple channels, the first channel is used") + audio = audio[:, 0] + ds_features = pure_conv_audio_to_deepspeech( + audio=audio, + audio_sample_rate=audio_sample_rate, + audio_window_size=audio_window_size, + audio_window_stride=audio_window_stride, + num_frames=num_frames, + net_fn=lambda x: sess.run( + logits_ph, + feed_dict={ + input_node_ph: x[np.newaxis, ...], + input_lengths_ph: [x.shape[0]]})) + + net_output = ds_features.reshape(-1, 29) + win_size = 16 + zero_pad = np.zeros((int(win_size / 2), net_output.shape[1])) + net_output = np.concatenate( + (zero_pad, net_output, zero_pad), axis=0) + windows = [] + for window_index in range(0, net_output.shape[0] - win_size, 2): + windows.append( + net_output[window_index:window_index + win_size]) + print(np.array(windows).shape) + np.save(out_file_path, np.array(windows)) + + +def prepare_deepspeech_net(deepspeech_pb_path): + """ + Load and prepare DeepSpeech network. + + Parameters + ---------- + deepspeech_pb_path : str + Path to DeepSpeech 0.1.0 frozen model. + + Returns + ------- + graph : obj + ThensorFlow graph. + logits_ph : obj + ThensorFlow placeholder for `logits`. + input_node_ph : obj + ThensorFlow placeholder for `input_node`. + input_lengths_ph : obj + ThensorFlow placeholder for `input_lengths`. + """ + # Load graph and place_holders: + with tf.io.gfile.GFile(deepspeech_pb_path, "rb") as f: + graph_def = tf.compat.v1.GraphDef() + graph_def.ParseFromString(f.read()) + + graph = tf.compat.v1.get_default_graph() + tf.import_graph_def(graph_def, name="deepspeech") + logits_ph = graph.get_tensor_by_name("deepspeech/logits:0") + input_node_ph = graph.get_tensor_by_name("deepspeech/input_node:0") + input_lengths_ph = graph.get_tensor_by_name("deepspeech/input_lengths:0") + + return graph, logits_ph, input_node_ph, input_lengths_ph + + +def pure_conv_audio_to_deepspeech(audio, + audio_sample_rate, + audio_window_size, + audio_window_stride, + num_frames, + net_fn): + """ + Core routine for converting audion into DeepSpeech features. + + Parameters + ---------- + audio : np.array + Audio data. + audio_sample_rate : int + Audio sample rate. + audio_window_size : int + Audio window size. + audio_window_stride : int + Audio window stride. + num_frames : int or None + Numbers of frames. + net_fn : func + Function for DeepSpeech model call. + + Returns + ------- + np.array + DeepSpeech features. + """ + target_sample_rate = 16000 + if audio_sample_rate != target_sample_rate: + resampled_audio = resampy.resample( + x=audio.astype(np.float), + sr_orig=audio_sample_rate, + sr_new=target_sample_rate) + else: + resampled_audio = audio.astype(np.float32) + input_vector = conv_audio_to_deepspeech_input_vector( + audio=resampled_audio.astype(np.int16), + sample_rate=target_sample_rate, + num_cepstrum=26, + num_context=9) + + network_output = net_fn(input_vector) + # print(network_output.shape) + + deepspeech_fps = 50 + video_fps = 50 # Change this option if video fps is different + audio_len_s = float(audio.shape[0]) / audio_sample_rate + if num_frames is None: + num_frames = int(round(audio_len_s * video_fps)) + else: + video_fps = num_frames / audio_len_s + network_output = interpolate_features( + features=network_output[:, 0], + input_rate=deepspeech_fps, + output_rate=video_fps, + output_len=num_frames) + + # Make windows: + zero_pad = np.zeros((int(audio_window_size / 2), network_output.shape[1])) + network_output = np.concatenate( + (zero_pad, network_output, zero_pad), axis=0) + windows = [] + for window_index in range(0, network_output.shape[0] - audio_window_size, audio_window_stride): + windows.append( + network_output[window_index:window_index + audio_window_size]) + + return np.array(windows) + + +def conv_audio_to_deepspeech_input_vector(audio, + sample_rate, + num_cepstrum, + num_context): + """ + Convert audio raw data into DeepSpeech input vector. + + Parameters + ---------- + audio : np.array + Audio data. + audio_sample_rate : int + Audio sample rate. + num_cepstrum : int + Number of cepstrum. + num_context : int + Number of context. + + Returns + ------- + np.array + DeepSpeech input vector. + """ + # Get mfcc coefficients: + features = mfcc( + signal=audio, + samplerate=sample_rate, + numcep=num_cepstrum) + + # We only keep every second feature (BiRNN stride = 2): + features = features[::2] + + # One stride per time step in the input: + num_strides = len(features) + + # Add empty initial and final contexts: + empty_context = np.zeros((num_context, num_cepstrum), dtype=features.dtype) + features = np.concatenate((empty_context, features, empty_context)) + + # Create a view into the array with overlapping strides of size + # numcontext (past) + 1 (present) + numcontext (future): + window_size = 2 * num_context + 1 + train_inputs = np.lib.stride_tricks.as_strided( + features, + shape=(num_strides, window_size, num_cepstrum), + strides=(features.strides[0], + features.strides[0], features.strides[1]), + writeable=False) + + # Flatten the second and third dimensions: + train_inputs = np.reshape(train_inputs, [num_strides, -1]) + + train_inputs = np.copy(train_inputs) + train_inputs = (train_inputs - np.mean(train_inputs)) / \ + np.std(train_inputs) + + return train_inputs + + +def interpolate_features(features, + input_rate, + output_rate, + output_len): + """ + Interpolate DeepSpeech features. + + Parameters + ---------- + features : np.array + DeepSpeech features. + input_rate : int + input rate (FPS). + output_rate : int + Output rate (FPS). + output_len : int + Output data length. + + Returns + ------- + np.array + Interpolated data. + """ + input_len = features.shape[0] + num_features = features.shape[1] + input_timestamps = np.arange(input_len) / float(input_rate) + output_timestamps = np.arange(output_len) / float(output_rate) + output_features = np.zeros((output_len, num_features)) + for feature_idx in range(num_features): + output_features[:, feature_idx] = np.interp( + x=output_timestamps, + xp=input_timestamps, + fp=features[:, feature_idx]) + return output_features diff --git a/data_utils/deepspeech_features/deepspeech_store.py b/data_utils/deepspeech_features/deepspeech_store.py new file mode 100644 index 0000000000000000000000000000000000000000..5595a4d559bc3b0383d511f13dcf41ee740bf9c1 --- /dev/null +++ b/data_utils/deepspeech_features/deepspeech_store.py @@ -0,0 +1,172 @@ +""" + Routines for loading DeepSpeech model. +""" + +__all__ = ['get_deepspeech_model_file'] + +import os +import zipfile +import logging +import hashlib + + +deepspeech_features_repo_url = 'https://github.com/osmr/deepspeech_features' + + +def get_deepspeech_model_file(local_model_store_dir_path=os.path.join("~", ".tensorflow", "models")): + """ + Return location for the pretrained on local file system. This function will download from online model zoo when + model cannot be found or has mismatch. The root directory will be created if it doesn't exist. + + Parameters + ---------- + local_model_store_dir_path : str, default $TENSORFLOW_HOME/models + Location for keeping the model parameters. + + Returns + ------- + file_path + Path to the requested pretrained model file. + """ + sha1_hash = "b90017e816572ddce84f5843f1fa21e6a377975e" + file_name = "deepspeech-0_1_0-b90017e8.pb" + local_model_store_dir_path = os.path.expanduser(local_model_store_dir_path) + file_path = os.path.join(local_model_store_dir_path, file_name) + if os.path.exists(file_path): + if _check_sha1(file_path, sha1_hash): + return file_path + else: + logging.warning("Mismatch in the content of model file detected. Downloading again.") + else: + logging.info("Model file not found. Downloading to {}.".format(file_path)) + + if not os.path.exists(local_model_store_dir_path): + os.makedirs(local_model_store_dir_path) + + zip_file_path = file_path + ".zip" + _download( + url="{repo_url}/releases/download/{repo_release_tag}/{file_name}.zip".format( + repo_url=deepspeech_features_repo_url, + repo_release_tag="v0.0.1", + file_name=file_name), + path=zip_file_path, + overwrite=True) + with zipfile.ZipFile(zip_file_path) as zf: + zf.extractall(local_model_store_dir_path) + os.remove(zip_file_path) + + if _check_sha1(file_path, sha1_hash): + return file_path + else: + raise ValueError("Downloaded file has different hash. Please try again.") + + +def _download(url, path=None, overwrite=False, sha1_hash=None, retries=5, verify_ssl=True): + """ + Download an given URL + + Parameters + ---------- + url : str + URL to download + path : str, optional + Destination path to store downloaded file. By default stores to the + current directory with same name as in url. + overwrite : bool, optional + Whether to overwrite destination file if already exists. + sha1_hash : str, optional + Expected sha1 hash in hexadecimal digits. Will ignore existing file when hash is specified + but doesn't match. + retries : integer, default 5 + The number of times to attempt the download in case of failure or non 200 return codes + verify_ssl : bool, default True + Verify SSL certificates. + + Returns + ------- + str + The file path of the downloaded file. + """ + import warnings + try: + import requests + except ImportError: + class requests_failed_to_import(object): + pass + requests = requests_failed_to_import + + if path is None: + fname = url.split("/")[-1] + # Empty filenames are invalid + assert fname, "Can't construct file-name from this URL. Please set the `path` option manually." + else: + path = os.path.expanduser(path) + if os.path.isdir(path): + fname = os.path.join(path, url.split("/")[-1]) + else: + fname = path + assert retries >= 0, "Number of retries should be at least 0" + + if not verify_ssl: + warnings.warn( + "Unverified HTTPS request is being made (verify_ssl=False). " + "Adding certificate verification is strongly advised.") + + if overwrite or not os.path.exists(fname) or (sha1_hash and not _check_sha1(fname, sha1_hash)): + dirname = os.path.dirname(os.path.abspath(os.path.expanduser(fname))) + if not os.path.exists(dirname): + os.makedirs(dirname) + while retries + 1 > 0: + # Disable pyling too broad Exception + # pylint: disable=W0703 + try: + print("Downloading {} from {}...".format(fname, url)) + r = requests.get(url, stream=True, verify=verify_ssl) + if r.status_code != 200: + raise RuntimeError("Failed downloading url {}".format(url)) + with open(fname, "wb") as f: + for chunk in r.iter_content(chunk_size=1024): + if chunk: # filter out keep-alive new chunks + f.write(chunk) + if sha1_hash and not _check_sha1(fname, sha1_hash): + raise UserWarning("File {} is downloaded but the content hash does not match." + " The repo may be outdated or download may be incomplete. " + "If the `repo_url` is overridden, consider switching to " + "the default repo.".format(fname)) + break + except Exception as e: + retries -= 1 + if retries <= 0: + raise e + else: + print("download failed, retrying, {} attempt{} left" + .format(retries, "s" if retries > 1 else "")) + + return fname + + +def _check_sha1(filename, sha1_hash): + """ + Check whether the sha1 hash of the file content matches the expected hash. + + Parameters + ---------- + filename : str + Path to the file. + sha1_hash : str + Expected sha1 hash in hexadecimal digits. + + Returns + ------- + bool + Whether the file content matches the expected hash. + """ + sha1 = hashlib.sha1() + with open(filename, "rb") as f: + while True: + data = f.read(1048576) + if not data: + break + sha1.update(data) + + return sha1.hexdigest() == sha1_hash diff --git a/data_utils/deepspeech_features/extract_ds_features.py b/data_utils/deepspeech_features/extract_ds_features.py new file mode 100644 index 0000000000000000000000000000000000000000..a8f0cc538e35b885e4ab72e7457d8d05c6fdbaa0 --- /dev/null +++ b/data_utils/deepspeech_features/extract_ds_features.py @@ -0,0 +1,132 @@ +""" + Script for extracting DeepSpeech features from audio file. +""" + +import os +import argparse +import numpy as np +import pandas as pd +from deepspeech_store import get_deepspeech_model_file +from deepspeech_features import conv_audios_to_deepspeech + + +def parse_args(): + """ + Create python script parameters. + Returns + ------- + ArgumentParser + Resulted args. + """ + parser = argparse.ArgumentParser( + description="Extract DeepSpeech features from audio file", + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument( + "--input", + type=str, + required=True, + help="path to input audio file or directory") + parser.add_argument( + "--output", + type=str, + help="path to output file with DeepSpeech features") + parser.add_argument( + "--deepspeech", + type=str, + help="path to DeepSpeech 0.1.0 frozen model") + parser.add_argument( + "--metainfo", + type=str, + help="path to file with meta-information") + + args = parser.parse_args() + return args + + +def extract_features(in_audios, + out_files, + deepspeech_pb_path, + metainfo_file_path=None): + """ + Real extract audio from video file. + Parameters + ---------- + in_audios : list of str + Paths to input audio files. + out_files : list of str + Paths to output files with DeepSpeech features. + deepspeech_pb_path : str + Path to DeepSpeech 0.1.0 frozen model. + metainfo_file_path : str, default None + Path to file with meta-information. + """ + #deepspeech_pb_path="/disk4/keyu/DeepSpeech/deepspeech-0.9.2-models.pbmm" + if metainfo_file_path is None: + num_frames_info = [None] * len(in_audios) + else: + train_df = pd.read_csv( + metainfo_file_path, + sep="\t", + index_col=False, + dtype={"Id": np.int, "File": np.unicode, "Count": np.int}) + num_frames_info = train_df["Count"].values + assert (len(num_frames_info) == len(in_audios)) + + for i, in_audio in enumerate(in_audios): + if not out_files[i]: + file_stem, _ = os.path.splitext(in_audio) + out_files[i] = file_stem + "_ds.npy" + #print(out_files[i]) + conv_audios_to_deepspeech( + audios=in_audios, + out_files=out_files, + num_frames_info=num_frames_info, + deepspeech_pb_path=deepspeech_pb_path) + + +def main(): + """ + Main body of script. + """ + args = parse_args() + in_audio = os.path.expanduser(args.input) + if not os.path.exists(in_audio): + raise Exception("Input file/directory doesn't exist: {}".format(in_audio)) + deepspeech_pb_path = args.deepspeech + #add + deepspeech_pb_path = True + args.deepspeech = '~/.tensorflow/models/deepspeech-0_1_0-b90017e8.pb' + #deepspeech_pb_path="/disk4/keyu/DeepSpeech/deepspeech-0.9.2-models.pbmm" + if deepspeech_pb_path is None: + deepspeech_pb_path = "" + if deepspeech_pb_path: + deepspeech_pb_path = os.path.expanduser(args.deepspeech) + if not os.path.exists(deepspeech_pb_path): + deepspeech_pb_path = get_deepspeech_model_file() + if os.path.isfile(in_audio): + extract_features( + in_audios=[in_audio], + out_files=[args.output], + deepspeech_pb_path=deepspeech_pb_path, + metainfo_file_path=args.metainfo) + else: + audio_file_paths = [] + for file_name in os.listdir(in_audio): + if not os.path.isfile(os.path.join(in_audio, file_name)): + continue + _, file_ext = os.path.splitext(file_name) + if file_ext.lower() == ".wav": + audio_file_path = os.path.join(in_audio, file_name) + audio_file_paths.append(audio_file_path) + audio_file_paths = sorted(audio_file_paths) + out_file_paths = [""] * len(audio_file_paths) + extract_features( + in_audios=audio_file_paths, + out_files=out_file_paths, + deepspeech_pb_path=deepspeech_pb_path, + metainfo_file_path=args.metainfo) + + +if __name__ == "__main__": + main() + diff --git a/data_utils/deepspeech_features/extract_wav.py b/data_utils/deepspeech_features/extract_wav.py new file mode 100644 index 0000000000000000000000000000000000000000..8458c5f2cdcc3e9670a6e5c01e52930ee345aac0 --- /dev/null +++ b/data_utils/deepspeech_features/extract_wav.py @@ -0,0 +1,87 @@ +""" + Script for extracting audio (16-bit, mono, 22000 Hz) from video file. +""" + +import os +import argparse +import subprocess + + +def parse_args(): + """ + Create python script parameters. + + Returns + ------- + ArgumentParser + Resulted args. + """ + parser = argparse.ArgumentParser( + description="Extract audio from video file", + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument( + "--in-video", + type=str, + required=True, + help="path to input video file or directory") + parser.add_argument( + "--out-audio", + type=str, + help="path to output audio file") + + args = parser.parse_args() + return args + + +def extract_audio(in_video, + out_audio): + """ + Real extract audio from video file. + + Parameters + ---------- + in_video : str + Path to input video file. + out_audio : str + Path to output audio file. + """ + if not out_audio: + file_stem, _ = os.path.splitext(in_video) + out_audio = file_stem + ".wav" + # command1 = "ffmpeg -i {in_video} -vn -acodec copy {aac_audio}" + # command2 = "ffmpeg -i {aac_audio} -vn -acodec pcm_s16le -ac 1 -ar 22000 {out_audio}" + # command = "ffmpeg -i {in_video} -vn -acodec pcm_s16le -ac 1 -ar 22000 {out_audio}" + command = "ffmpeg -i {in_video} -vn -acodec pcm_s16le -ac 1 -ar 16000 {out_audio}" + subprocess.call([command.format(in_video=in_video, out_audio=out_audio)], shell=True) + + +def main(): + """ + Main body of script. + """ + args = parse_args() + in_video = os.path.expanduser(args.in_video) + if not os.path.exists(in_video): + raise Exception("Input file/directory doesn't exist: {}".format(in_video)) + if os.path.isfile(in_video): + extract_audio( + in_video=in_video, + out_audio=args.out_audio) + else: + video_file_paths = [] + for file_name in os.listdir(in_video): + if not os.path.isfile(os.path.join(in_video, file_name)): + continue + _, file_ext = os.path.splitext(file_name) + if file_ext.lower() in (".mp4", ".mkv", ".avi"): + video_file_path = os.path.join(in_video, file_name) + video_file_paths.append(video_file_path) + video_file_paths = sorted(video_file_paths) + for video_file_path in video_file_paths: + extract_audio( + in_video=video_file_path, + out_audio="") + + +if __name__ == "__main__": + main() diff --git a/data_utils/deepspeech_features/fea_win.py b/data_utils/deepspeech_features/fea_win.py new file mode 100644 index 0000000000000000000000000000000000000000..df9e27b4e86356e69ebf6c8295c219607251d4c1 --- /dev/null +++ b/data_utils/deepspeech_features/fea_win.py @@ -0,0 +1,11 @@ +import numpy as np + +net_output = np.load('french.ds.npy').reshape(-1, 29) +win_size = 16 +zero_pad = np.zeros((int(win_size / 2), net_output.shape[1])) +net_output = np.concatenate((zero_pad, net_output, zero_pad), axis=0) +windows = [] +for window_index in range(0, net_output.shape[0] - win_size, 2): + windows.append(net_output[window_index:window_index + win_size]) +print(np.array(windows).shape) +np.save('aud_french.npy', np.array(windows)) diff --git a/data_utils/face_parsing/logger.py b/data_utils/face_parsing/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..d3f9ddcc2cae221b4dd881d02404e848b5396f7e --- /dev/null +++ b/data_utils/face_parsing/logger.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- encoding: utf-8 -*- + + +import os.path as osp +import time +import sys +import logging + +import torch.distributed as dist + + +def setup_logger(logpth): + logfile = 'BiSeNet-{}.log'.format(time.strftime('%Y-%m-%d-%H-%M-%S')) + logfile = osp.join(logpth, logfile) + FORMAT = '%(levelname)s %(filename)s(%(lineno)d): %(message)s' + log_level = logging.INFO + if dist.is_initialized() and not dist.get_rank()==0: + log_level = logging.ERROR + logging.basicConfig(level=log_level, format=FORMAT, filename=logfile) + logging.root.addHandler(logging.StreamHandler()) + + diff --git a/data_utils/face_parsing/model.py b/data_utils/face_parsing/model.py new file mode 100644 index 0000000000000000000000000000000000000000..c8b815170ca74a60213bfb7f3707d5201f9c3327 --- /dev/null +++ b/data_utils/face_parsing/model.py @@ -0,0 +1,285 @@ +#!/usr/bin/python +# -*- encoding: utf-8 -*- + + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision + +from resnet import Resnet18 +# from modules.bn import InPlaceABNSync as BatchNorm2d + + +class ConvBNReLU(nn.Module): + def __init__(self, in_chan, out_chan, ks=3, stride=1, padding=1, *args, **kwargs): + super(ConvBNReLU, self).__init__() + self.conv = nn.Conv2d(in_chan, + out_chan, + kernel_size = ks, + stride = stride, + padding = padding, + bias = False) + self.bn = nn.BatchNorm2d(out_chan) + self.init_weight() + + def forward(self, x): + x = self.conv(x) + x = F.relu(self.bn(x)) + return x + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + +class BiSeNetOutput(nn.Module): + def __init__(self, in_chan, mid_chan, n_classes, *args, **kwargs): + super(BiSeNetOutput, self).__init__() + self.conv = ConvBNReLU(in_chan, mid_chan, ks=3, stride=1, padding=1) + self.conv_out = nn.Conv2d(mid_chan, n_classes, kernel_size=1, bias=False) + self.init_weight() + + def forward(self, x): + x = self.conv(x) + x = self.conv_out(x) + return x + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + + def get_params(self): + wd_params, nowd_params = [], [] + for name, module in self.named_modules(): + if isinstance(module, nn.Linear) or isinstance(module, nn.Conv2d): + wd_params.append(module.weight) + if not module.bias is None: + nowd_params.append(module.bias) + elif isinstance(module, nn.BatchNorm2d): + nowd_params += list(module.parameters()) + return wd_params, nowd_params + + +class AttentionRefinementModule(nn.Module): + def __init__(self, in_chan, out_chan, *args, **kwargs): + super(AttentionRefinementModule, self).__init__() + self.conv = ConvBNReLU(in_chan, out_chan, ks=3, stride=1, padding=1) + self.conv_atten = nn.Conv2d(out_chan, out_chan, kernel_size= 1, bias=False) + self.bn_atten = nn.BatchNorm2d(out_chan) + self.sigmoid_atten = nn.Sigmoid() + self.init_weight() + + def forward(self, x): + feat = self.conv(x) + atten = F.avg_pool2d(feat, feat.size()[2:]) + atten = self.conv_atten(atten) + atten = self.bn_atten(atten) + atten = self.sigmoid_atten(atten) + out = torch.mul(feat, atten) + return out + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + + +class ContextPath(nn.Module): + def __init__(self, *args, **kwargs): + super(ContextPath, self).__init__() + self.resnet = Resnet18() + self.arm16 = AttentionRefinementModule(256, 128) + self.arm32 = AttentionRefinementModule(512, 128) + self.conv_head32 = ConvBNReLU(128, 128, ks=3, stride=1, padding=1) + self.conv_head16 = ConvBNReLU(128, 128, ks=3, stride=1, padding=1) + self.conv_avg = ConvBNReLU(512, 128, ks=1, stride=1, padding=0) + + self.init_weight() + + def forward(self, x): + H0, W0 = x.size()[2:] + feat8, feat16, feat32 = self.resnet(x) + H8, W8 = feat8.size()[2:] + H16, W16 = feat16.size()[2:] + H32, W32 = feat32.size()[2:] + + avg = F.avg_pool2d(feat32, feat32.size()[2:]) + avg = self.conv_avg(avg) + avg_up = F.interpolate(avg, (H32, W32), mode='nearest') + + feat32_arm = self.arm32(feat32) + feat32_sum = feat32_arm + avg_up + feat32_up = F.interpolate(feat32_sum, (H16, W16), mode='nearest') + feat32_up = self.conv_head32(feat32_up) + + feat16_arm = self.arm16(feat16) + feat16_sum = feat16_arm + feat32_up + feat16_up = F.interpolate(feat16_sum, (H8, W8), mode='nearest') + feat16_up = self.conv_head16(feat16_up) + + return feat8, feat16_up, feat32_up # x8, x8, x16 + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + + def get_params(self): + wd_params, nowd_params = [], [] + for name, module in self.named_modules(): + if isinstance(module, (nn.Linear, nn.Conv2d)): + wd_params.append(module.weight) + if not module.bias is None: + nowd_params.append(module.bias) + elif isinstance(module, nn.BatchNorm2d): + nowd_params += list(module.parameters()) + return wd_params, nowd_params + + +### This is not used, since I replace this with the resnet feature with the same size +class SpatialPath(nn.Module): + def __init__(self, *args, **kwargs): + super(SpatialPath, self).__init__() + self.conv1 = ConvBNReLU(3, 64, ks=7, stride=2, padding=3) + self.conv2 = ConvBNReLU(64, 64, ks=3, stride=2, padding=1) + self.conv3 = ConvBNReLU(64, 64, ks=3, stride=2, padding=1) + self.conv_out = ConvBNReLU(64, 128, ks=1, stride=1, padding=0) + self.init_weight() + + def forward(self, x): + feat = self.conv1(x) + feat = self.conv2(feat) + feat = self.conv3(feat) + feat = self.conv_out(feat) + return feat + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + + def get_params(self): + wd_params, nowd_params = [], [] + for name, module in self.named_modules(): + if isinstance(module, nn.Linear) or isinstance(module, nn.Conv2d): + wd_params.append(module.weight) + if not module.bias is None: + nowd_params.append(module.bias) + elif isinstance(module, nn.BatchNorm2d): + nowd_params += list(module.parameters()) + return wd_params, nowd_params + + +class FeatureFusionModule(nn.Module): + def __init__(self, in_chan, out_chan, *args, **kwargs): + super(FeatureFusionModule, self).__init__() + self.convblk = ConvBNReLU(in_chan, out_chan, ks=1, stride=1, padding=0) + self.conv1 = nn.Conv2d(out_chan, + out_chan//4, + kernel_size = 1, + stride = 1, + padding = 0, + bias = False) + self.conv2 = nn.Conv2d(out_chan//4, + out_chan, + kernel_size = 1, + stride = 1, + padding = 0, + bias = False) + self.relu = nn.ReLU(inplace=True) + self.sigmoid = nn.Sigmoid() + self.init_weight() + + def forward(self, fsp, fcp): + fcat = torch.cat([fsp, fcp], dim=1) + feat = self.convblk(fcat) + atten = F.avg_pool2d(feat, feat.size()[2:]) + atten = self.conv1(atten) + atten = self.relu(atten) + atten = self.conv2(atten) + atten = self.sigmoid(atten) + feat_atten = torch.mul(feat, atten) + feat_out = feat_atten + feat + return feat_out + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + + def get_params(self): + wd_params, nowd_params = [], [] + for name, module in self.named_modules(): + if isinstance(module, nn.Linear) or isinstance(module, nn.Conv2d): + wd_params.append(module.weight) + if not module.bias is None: + nowd_params.append(module.bias) + elif isinstance(module, nn.BatchNorm2d): + nowd_params += list(module.parameters()) + return wd_params, nowd_params + + +class BiSeNet(nn.Module): + def __init__(self, n_classes, *args, **kwargs): + super(BiSeNet, self).__init__() + self.cp = ContextPath() + ## here self.sp is deleted + self.ffm = FeatureFusionModule(256, 256) + self.conv_out = BiSeNetOutput(256, 256, n_classes) + self.conv_out16 = BiSeNetOutput(128, 64, n_classes) + self.conv_out32 = BiSeNetOutput(128, 64, n_classes) + self.init_weight() + + def forward(self, x): + H, W = x.size()[2:] + feat_res8, feat_cp8, feat_cp16 = self.cp(x) # here return res3b1 feature + feat_sp = feat_res8 # use res3b1 feature to replace spatial path feature + feat_fuse = self.ffm(feat_sp, feat_cp8) + + feat_out = self.conv_out(feat_fuse) + feat_out16 = self.conv_out16(feat_cp8) + feat_out32 = self.conv_out32(feat_cp16) + + feat_out = F.interpolate(feat_out, (H, W), mode='bilinear', align_corners=True) + feat_out16 = F.interpolate(feat_out16, (H, W), mode='bilinear', align_corners=True) + feat_out32 = F.interpolate(feat_out32, (H, W), mode='bilinear', align_corners=True) + + # return feat_out, feat_out16, feat_out32 + return feat_out + + def init_weight(self): + for ly in self.children(): + if isinstance(ly, nn.Conv2d): + nn.init.kaiming_normal_(ly.weight, a=1) + if not ly.bias is None: nn.init.constant_(ly.bias, 0) + + def get_params(self): + wd_params, nowd_params, lr_mul_wd_params, lr_mul_nowd_params = [], [], [], [] + for name, child in self.named_children(): + child_wd_params, child_nowd_params = child.get_params() + if isinstance(child, FeatureFusionModule) or isinstance(child, BiSeNetOutput): + lr_mul_wd_params += child_wd_params + lr_mul_nowd_params += child_nowd_params + else: + wd_params += child_wd_params + nowd_params += child_nowd_params + return wd_params, nowd_params, lr_mul_wd_params, lr_mul_nowd_params + + +if __name__ == "__main__": + net = BiSeNet(19) + net.cuda() + net.eval() + in_ten = torch.randn(16, 3, 640, 480).cuda() + out, out16, out32 = net(in_ten) + print(out.shape) + + net.get_params() diff --git a/data_utils/face_parsing/resnet.py b/data_utils/face_parsing/resnet.py new file mode 100644 index 0000000000000000000000000000000000000000..aa2bf95130e9815ba378cb6f73207068b81a04b9 --- /dev/null +++ b/data_utils/face_parsing/resnet.py @@ -0,0 +1,109 @@ +#!/usr/bin/python +# -*- encoding: utf-8 -*- + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.model_zoo as modelzoo + +# from modules.bn import InPlaceABNSync as BatchNorm2d + +resnet18_url = 'https://download.pytorch.org/models/resnet18-5c106cde.pth' + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +class BasicBlock(nn.Module): + def __init__(self, in_chan, out_chan, stride=1): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(in_chan, out_chan, stride) + self.bn1 = nn.BatchNorm2d(out_chan) + self.conv2 = conv3x3(out_chan, out_chan) + self.bn2 = nn.BatchNorm2d(out_chan) + self.relu = nn.ReLU(inplace=True) + self.downsample = None + if in_chan != out_chan or stride != 1: + self.downsample = nn.Sequential( + nn.Conv2d(in_chan, out_chan, + kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(out_chan), + ) + + def forward(self, x): + residual = self.conv1(x) + residual = F.relu(self.bn1(residual)) + residual = self.conv2(residual) + residual = self.bn2(residual) + + shortcut = x + if self.downsample is not None: + shortcut = self.downsample(x) + + out = shortcut + residual + out = self.relu(out) + return out + + +def create_layer_basic(in_chan, out_chan, bnum, stride=1): + layers = [BasicBlock(in_chan, out_chan, stride=stride)] + for i in range(bnum-1): + layers.append(BasicBlock(out_chan, out_chan, stride=1)) + return nn.Sequential(*layers) + + +class Resnet18(nn.Module): + def __init__(self): + super(Resnet18, self).__init__() + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = create_layer_basic(64, 64, bnum=2, stride=1) + self.layer2 = create_layer_basic(64, 128, bnum=2, stride=2) + self.layer3 = create_layer_basic(128, 256, bnum=2, stride=2) + self.layer4 = create_layer_basic(256, 512, bnum=2, stride=2) + self.init_weight() + + def forward(self, x): + x = self.conv1(x) + x = F.relu(self.bn1(x)) + x = self.maxpool(x) + + x = self.layer1(x) + feat8 = self.layer2(x) # 1/8 + feat16 = self.layer3(feat8) # 1/16 + feat32 = self.layer4(feat16) # 1/32 + return feat8, feat16, feat32 + + def init_weight(self): + state_dict = modelzoo.load_url(resnet18_url) + self_state_dict = self.state_dict() + for k, v in state_dict.items(): + if 'fc' in k: continue + self_state_dict.update({k: v}) + self.load_state_dict(self_state_dict) + + def get_params(self): + wd_params, nowd_params = [], [] + for name, module in self.named_modules(): + if isinstance(module, (nn.Linear, nn.Conv2d)): + wd_params.append(module.weight) + if not module.bias is None: + nowd_params.append(module.bias) + elif isinstance(module, nn.BatchNorm2d): + nowd_params += list(module.parameters()) + return wd_params, nowd_params + + +if __name__ == "__main__": + net = Resnet18() + x = torch.randn(16, 3, 224, 224) + out = net(x) + print(out[0].size()) + print(out[1].size()) + print(out[2].size()) + net.get_params() diff --git a/data_utils/face_parsing/test.py b/data_utils/face_parsing/test.py new file mode 100644 index 0000000000000000000000000000000000000000..538e876637e140afb16fbaf66edfaaffd43acea4 --- /dev/null +++ b/data_utils/face_parsing/test.py @@ -0,0 +1,148 @@ +#!/usr/bin/python +# -*- encoding: utf-8 -*- +import numpy as np +from model import BiSeNet + +import torch + +import os +import os.path as osp + +from PIL import Image +import torchvision.transforms as transforms +import cv2 +from pathlib import Path +import configargparse +import tqdm + +# import ttach as tta + +def vis_parsing_maps(im, parsing_anno, stride, save_im=False, save_path='vis_results/parsing_map_on_im.jpg', + img_size=(512, 512)): + im = np.array(im) + vis_im = im.copy().astype(np.uint8) + vis_parsing_anno = parsing_anno.copy().astype(np.uint8) + vis_parsing_anno = cv2.resize( + vis_parsing_anno, None, fx=stride, fy=stride, interpolation=cv2.INTER_NEAREST) + vis_parsing_anno_color = np.zeros( + (vis_parsing_anno.shape[0], vis_parsing_anno.shape[1], 3)) + np.array([255, 255, 255]) # + 255 + vis_parsing_anno_color_face = np.zeros( + (vis_parsing_anno.shape[0], vis_parsing_anno.shape[1], 3)) + np.array([255, 255, 255]) # + 255 + + num_of_class = np.max(vis_parsing_anno) + # print(num_of_class) + for pi in range(1, 14): + index = np.where(vis_parsing_anno == pi) + vis_parsing_anno_color[index[0], index[1], :] = np.array([255, 0, 0]) + for pi in range(14, 16): + index = np.where(vis_parsing_anno == pi) + vis_parsing_anno_color[index[0], index[1], :] = np.array([0, 255, 0]) + for pi in range(16, 17): + index = np.where(vis_parsing_anno == pi) + vis_parsing_anno_color[index[0], index[1], :] = np.array([0, 0, 255]) + for pi in range(17, num_of_class+1): + index = np.where(vis_parsing_anno == pi) + vis_parsing_anno_color[index[0], index[1], :] = np.array([255, 0, 0]) + + vis_parsing_anno_color = vis_parsing_anno_color.astype(np.uint8) + index = np.where(vis_parsing_anno == num_of_class-1) + vis_im = cv2.resize(vis_parsing_anno_color, img_size, + interpolation=cv2.INTER_NEAREST) + if save_im: + cv2.imwrite(save_path, vis_im) + + for pi in range(1, 7): + index = np.where(vis_parsing_anno == pi) + vis_parsing_anno_color_face[index[0], index[1], :] = np.array([255, 0, 0]) + for pi in range(10, 14): + index = np.where(vis_parsing_anno == pi) + vis_parsing_anno_color_face[index[0], index[1], :] = np.array([255, 0, 0]) + pad = 5 + vis_parsing_anno_color_face = vis_parsing_anno_color_face.astype(np.uint8) + face_part = (vis_parsing_anno_color_face[..., 0] == 255) & (vis_parsing_anno_color_face[..., 1] == 0) & (vis_parsing_anno_color_face[..., 2] == 0) + face_coords = np.stack(np.nonzero(face_part), axis=-1) + sorted_inds = np.lexsort((-face_coords[:, 0], face_coords[:, 1])) + sorted_face_coords = face_coords[sorted_inds] + u, uid, ucnt = np.unique(sorted_face_coords[:, 1], return_index=True, return_counts=True) + bottom_face_coords = sorted_face_coords[uid] + np.array([pad, 0]) + rows, cols, _ = vis_parsing_anno_color_face.shape + + # 为了保证新的坐标在图片范围内 + bottom_face_coords[:, 0] = np.clip(bottom_face_coords[:, 0], 0, rows - 1) + + y_min = np.min(bottom_face_coords[:, 1]) + y_max = np.max(bottom_face_coords[:, 1]) + + # 计算1和2部分的开始和结束位置 + y_range = y_max - y_min + height_per_part = y_range // 4 + + start_y_part1 = y_min + height_per_part + end_y_part1 = start_y_part1 + height_per_part + + start_y_part2 = end_y_part1 + end_y_part2 = start_y_part2 + height_per_part + + for coord in bottom_face_coords: + x, y = coord + start_x = max(x - pad, 0) + end_x = min(x + pad, rows) + if start_y_part1 <= y <= end_y_part1 or start_y_part2 <= y <= end_y_part2: + vis_parsing_anno_color_face[start_x:end_x, y] = [255, 0, 0] + # else: + # start_x = max(x - 2*pad, 0) + # end_x = max(x - pad, 0) + # vis_parsing_anno_color_face[start_x:end_x+1, y] = [255, 255, 255] + + vis_im = cv2.GaussianBlur(vis_parsing_anno_color_face, (9, 9), cv2.BORDER_DEFAULT) + + vis_im = cv2.resize(vis_im, img_size, + interpolation=cv2.INTER_NEAREST) + + cv2.imwrite(save_path.replace('.png', '_face.png'), vis_im) + + +def evaluate(respth='./res/test_res', dspth='./data', cp='model_final_diss.pth'): + + Path(respth).mkdir(parents=True, exist_ok=True) + + print(f'[INFO] loading model...') + n_classes = 19 + net = BiSeNet(n_classes=n_classes) + net.cuda() + net.load_state_dict(torch.load(cp)) + net.eval() + + to_tensor = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), + ]) + + image_paths = os.listdir(dspth) + + with torch.no_grad(): + for image_path in tqdm.tqdm(image_paths): + if image_path.endswith('.jpg') or image_path.endswith('.png'): + img = Image.open(osp.join(dspth, image_path)) + ori_size = img.size + image = img.resize((512, 512), Image.BILINEAR) + image = image.convert("RGB") + img = to_tensor(image) + + # test-time augmentation. + inputs = torch.unsqueeze(img, 0) # [1, 3, 512, 512] + outputs = net(inputs.cuda()) + parsing = outputs.mean(0).cpu().numpy().argmax(0) + image_path = int(image_path[:-4]) + image_path = str(image_path) + '.png' + + vis_parsing_maps(image, parsing, stride=1, save_im=True, save_path=osp.join(respth, image_path), img_size=ori_size) + + +if __name__ == "__main__": + parser = configargparse.ArgumentParser() + parser.add_argument('--respath', type=str, default='./result/', help='result path for label') + parser.add_argument('--imgpath', type=str, default='./imgs/', help='path for input images') + parser.add_argument('--modelpath', type=str, default='data_utils/face_parsing/79999_iter.pth') + args = parser.parse_args() + evaluate(respth=args.respath, dspth=args.imgpath, cp=args.modelpath) diff --git a/data_utils/face_tracking/3DMM/lands_info.txt b/data_utils/face_tracking/3DMM/lands_info.txt new file mode 100644 index 0000000000000000000000000000000000000000..cd973800c80871f6df39b14d436c32a7c3c6dd7c --- /dev/null +++ b/data_utils/face_tracking/3DMM/lands_info.txt @@ -0,0 +1,403 @@ +136 +19 +155 +22 +177 +19 +196 +15 +211 +12 +223 +8 +231 +6 +237 +4 +241 +6 +247 +4 +251 +6 +257 +8 +265 +12 +277 +15 +292 +19 +311 +22 +333 +19 +352 +1 +353 +1 +354 +1 +355 +1 +356 +1 +357 +1 +358 +1 +359 +1 +360 +1 +361 +1 +362 +1 +363 +1 +364 +1 +365 +1 +366 +1 +367 +1 +368 +1 +369 +1 +370 +1 +371 +1 +372 +1 +373 +1 +374 +1 +375 +1 +376 +1 +377 +1 +378 +1 +379 +1 +380 +1 +381 +1 +382 +1 +383 +1 +384 +1 +385 +1 +386 +1 +387 +1 +388 +1 +389 +1 +390 +1 +391 +1 +392 +1 +393 +1 +394 +1 +395 +1 +396 +1 +397 +1 +398 +1 +399 +1 +400 +1 +401 +1 +402 +1 +16655 +16901 +17155 +17412 +17669 +17926 +18183 +18440 +18826 +19083 +19340 +19726 +19983 +20240 +20625 +21010 +21396 +157 +671 +16922 +17177 +17435 +17821 +18208 +18594 +18980 +19366 +19752 +20139 +20525 +20911 +21168 +21555 +188 +575 +961 +1477 +1863 +2249 +2636 +3280 +16411 +16948 +17589 +18232 +18876 +19262 +19648 +20163 +20678 +21192 +21707 +340 +855 +1370 +1756 +2142 +2657 +3043 +3429 +16363 +16973 +17871 +18644 +19416 +20189 +20833 +21733 +752 +1523 +2037 +2681 +3323 +3708 +4222 +31497 +31491 +31484 +31555 +31626 +31730 +31865 +3224 +3737 +4250 +4764 +5150 +32139 +32192 +32271 +32368 +32436 +32521 +32600 +32655 +32445 +32465 +32506 +32546 +32585 +32640 +32716 +32733 +32750 +32785 +32914 +32913 +32912 +32911 +32910 +32909 +33076 +33057 +33038 +33001 +33357 +33333 +33287 +33243 +33202 +33144 +33675 +33612 +33524 +33420 +33348 +33260 +33179 +33123 +34322 +34316 +34309 +34227 +34147 +34034 +33897 +13269 +12750 +12231 +11713 +11325 +27304 +26767 +25869 +25094 +24318 +23543 +22897 +21991 +15699 +14922 +14404 +13758 +13110 +12721 +12203 +27231 +26742 +26103 +25456 +24810 +24422 +24034 +23517 +23000 +22482 +21965 +16061 +15544 +15027 +14639 +14251 +13734 +13346 +12958 +26716 +26465 +26207 +25819 +25432 +25044 +24656 +24268 +23880 +23493 +23105 +22717 +22458 +22071 +16167 +15780 +15392 +14876 +14488 +14100 +13713 +13067 +26939 +26695 +26443 +26184 +25925 +25666 +25407 +25148 +24760 +24501 +24242 +23854 +23595 +23336 +22947 +22558 +22170 +16136 +15618 +27932 +28270 +28552 +28771 +28990 +29567 +29780 +30000 +30316 +30627 +8155 +8173 +8184 +8190 +6516 +7363 +8203 +9043 +9884 +1828 +4016 +5177 +6341 +4804 +3771 +9955 +11094 +12255 +14323 +12526 +11495 +5262 +6024 +7375 +8215 +9055 +10394 +11179 +9674 +8835 +8235 +7635 +6793 +5779 +7384 +8225 +9064 +10536 +8828 +8228 +7628 diff --git a/data_utils/face_tracking/3DMM/tris.txt b/data_utils/face_tracking/3DMM/tris.txt new file mode 100644 index 0000000000000000000000000000000000000000..8853b244a572ac26c262f4214fa75db1f5f475f4 --- /dev/null +++ b/data_utils/face_tracking/3DMM/tris.txt @@ -0,0 +1,68746 @@ +1 2 131 +1 131 130 +2 3 131 +3 132 131 +3 4 133 +3 133 132 +4 5 133 +5 134 133 +5 6 135 +5 135 134 +6 7 135 +7 136 135 +7 8 137 +7 137 136 +8 9 137 +9 138 137 +9 10 139 +9 139 138 +10 11 139 +11 140 139 +11 12 141 +11 141 140 +12 13 141 +13 142 141 +13 14 143 +13 143 142 +14 15 143 +15 144 143 +15 16 145 +15 145 144 +16 17 145 +17 146 145 +17 18 147 +17 147 146 +18 19 147 +19 148 147 +19 20 149 +19 149 148 +20 21 149 +21 150 149 +21 22 151 +21 151 150 +22 23 151 +23 152 151 +23 24 153 +23 153 152 +24 25 153 +25 154 153 +25 26 155 +25 155 154 +26 27 155 +27 156 155 +27 28 157 +27 157 156 +28 29 157 +29 158 157 +29 30 159 +29 159 158 +30 31 159 +31 160 159 +31 32 161 +31 161 160 +32 33 161 +33 162 161 +33 34 163 +33 163 162 +34 35 163 +35 164 163 +35 36 165 +35 165 164 +36 37 165 +37 166 165 +37 38 167 +37 167 166 +38 39 167 +39 168 167 +39 40 169 +39 169 168 +40 41 169 +41 170 169 +41 42 171 +41 171 170 +42 43 171 +43 172 171 +43 44 173 +43 173 172 +44 45 173 +45 174 173 +45 46 175 +45 175 174 +46 47 175 +47 176 175 +47 48 177 +47 177 176 +48 49 177 +49 178 177 +49 50 179 +49 179 178 +50 51 179 +51 180 179 +51 52 181 +51 181 180 +52 53 181 +53 182 181 +53 54 183 +53 183 182 +54 55 183 +55 184 183 +55 56 185 +55 185 184 +56 57 185 +57 186 185 +57 58 187 +57 187 186 +58 59 187 +59 188 187 +59 60 189 +59 189 188 +60 61 189 +61 190 189 +61 62 191 +61 191 190 +62 63 191 +63 192 191 +63 64 193 +63 193 192 +64 65 193 +65 194 193 +65 66 195 +65 195 194 +66 67 195 +67 196 195 +67 68 197 +67 197 196 +68 69 197 +69 198 197 +69 70 199 +69 199 198 +70 71 199 +71 200 199 +71 72 201 +71 201 200 +72 73 201 +73 202 201 +73 74 203 +73 203 202 +74 75 203 +75 204 203 +75 76 205 +75 205 204 +76 77 205 +77 206 205 +77 78 207 +77 207 206 +78 79 207 +79 208 207 +79 80 209 +79 209 208 +80 81 209 +81 210 209 +81 82 211 +81 211 210 +82 83 211 +83 212 211 +83 84 213 +83 213 212 +84 85 213 +85 214 213 +85 86 215 +85 215 214 +86 87 215 +87 216 215 +87 88 217 +87 217 216 +88 89 217 +89 218 217 +89 90 219 +89 219 218 +90 91 219 +91 220 219 +91 92 221 +91 221 220 +92 93 221 +93 222 221 +93 94 223 +93 223 222 +94 95 223 +95 224 223 +95 96 225 +95 225 224 +96 97 225 +97 226 225 +97 98 227 +97 227 226 +98 99 227 +99 228 227 +99 100 229 +99 229 228 +100 101 229 +101 230 229 +101 102 231 +101 231 230 +102 103 231 +103 232 231 +103 104 233 +103 233 232 +104 105 233 +105 234 233 +105 106 235 +105 235 234 +106 107 235 +107 236 235 +107 108 237 +107 237 236 +108 109 237 +109 238 237 +109 110 239 +109 239 238 +110 111 239 +111 240 239 +111 112 241 +111 241 240 +112 113 241 +113 242 241 +113 114 243 +113 243 242 +114 115 243 +115 244 243 +115 116 245 +115 245 244 +116 117 245 +117 246 245 +117 118 247 +117 247 246 +118 119 247 +119 248 247 +119 120 249 +119 249 248 +120 121 249 +121 250 249 +121 122 251 +121 251 250 +122 123 251 +123 252 251 +123 124 253 +123 253 252 +124 125 253 +125 254 253 +125 126 255 +125 255 254 +126 127 255 +127 256 255 +127 128 257 +127 257 256 +128 129 257 +129 258 257 +130 131 259 +131 260 259 +131 132 261 +131 261 260 +132 133 261 +133 262 261 +133 134 263 +133 263 262 +134 135 263 +135 264 263 +135 136 265 +135 265 264 +136 137 265 +137 266 265 +137 138 267 +137 267 266 +138 139 267 +139 268 267 +139 140 269 +139 269 268 +140 141 269 +141 270 269 +141 142 271 +141 271 270 +142 143 271 +143 272 271 +143 144 273 +143 273 272 +144 145 273 +145 274 273 +145 146 275 +145 275 274 +146 147 275 +147 276 275 +147 148 277 +147 277 276 +148 149 277 +149 278 277 +149 150 279 +149 279 278 +150 151 279 +151 280 279 +151 152 281 +151 281 280 +152 153 281 +153 282 281 +153 154 283 +153 283 282 +154 155 283 +155 284 283 +155 156 285 +155 285 284 +156 157 285 +157 286 285 +157 158 287 +157 287 286 +158 159 287 +159 288 287 +159 160 289 +159 289 288 +160 161 289 +161 290 289 +161 162 291 +161 291 290 +162 163 291 +163 292 291 +163 164 293 +163 293 292 +164 165 293 +165 294 293 +165 166 295 +165 295 294 +166 167 295 +167 296 295 +167 168 297 +167 297 296 +168 169 297 +169 298 297 +169 170 299 +169 299 298 +170 171 299 +171 300 299 +171 172 301 +171 301 300 +172 173 301 +173 302 301 +173 174 303 +173 303 302 +174 175 303 +175 304 303 +175 176 305 +175 305 304 +176 177 305 +177 306 305 +177 178 307 +177 307 306 +178 179 307 +179 308 307 +179 180 309 +179 309 308 +180 181 309 +181 310 309 +181 182 311 +181 311 310 +182 183 311 +183 312 311 +183 184 313 +183 313 312 +184 185 313 +185 314 313 +185 186 315 +185 315 314 +186 187 315 +187 316 315 +187 188 317 +187 317 316 +188 189 317 +189 318 317 +189 190 319 +189 319 318 +190 191 319 +191 320 319 +191 192 321 +191 321 320 +192 193 321 +193 322 321 +193 194 323 +193 323 322 +194 195 323 +195 324 323 +195 196 325 +195 325 324 +196 197 325 +197 326 325 +197 198 327 +197 327 326 +198 199 327 +199 328 327 +199 200 329 +199 329 328 +200 201 329 +201 330 329 +201 202 331 +201 331 330 +202 203 331 +203 332 331 +203 204 333 +203 333 332 +204 205 333 +205 334 333 +205 206 335 +205 335 334 +206 207 335 +207 336 335 +207 208 337 +207 337 336 +208 209 337 +209 338 337 +209 210 339 +209 339 338 +210 211 339 +211 340 339 +211 212 341 +211 341 340 +212 213 341 +213 342 341 +213 214 343 +213 343 342 +214 215 343 +215 344 343 +215 216 345 +215 345 344 +216 217 345 +217 346 345 +217 218 347 +217 347 346 +218 219 347 +219 348 347 +219 220 349 +219 349 348 +220 221 349 +221 350 349 +221 222 351 +221 351 350 +222 223 351 +223 352 351 +223 224 353 +223 353 352 +224 225 353 +225 354 353 +225 226 355 +225 355 354 +226 227 355 +227 356 355 +227 228 357 +227 357 356 +228 229 357 +229 358 357 +229 230 359 +229 359 358 +230 231 359 +231 360 359 +231 232 361 +231 361 360 +232 233 361 +233 362 361 +233 234 363 +233 363 362 +234 235 363 +235 364 363 +235 236 365 +235 365 364 +236 237 365 +237 366 365 +237 238 367 +237 367 366 +238 239 367 +239 368 367 +239 240 369 +239 369 368 +240 241 369 +241 370 369 +241 242 371 +241 371 370 +242 243 371 +243 372 371 +243 244 373 +243 373 372 +244 245 373 +245 374 373 +245 246 375 +245 375 374 +246 247 375 +247 376 375 +247 248 377 +247 377 376 +248 249 377 +249 378 377 +249 250 379 +249 379 378 +250 251 379 +251 380 379 +251 252 381 +251 381 380 +252 253 381 +253 382 381 +253 254 383 +253 383 382 +254 255 383 +255 384 383 +255 256 385 +255 385 384 +256 257 385 +257 386 385 +257 258 387 +257 387 386 +259 260 389 +259 389 388 +260 261 389 +261 390 389 +261 262 391 +261 391 390 +262 263 391 +263 392 391 +263 264 393 +263 393 392 +264 265 393 +265 394 393 +265 266 395 +265 395 394 +266 267 395 +267 396 395 +267 268 397 +267 397 396 +268 269 397 +269 398 397 +269 270 399 +269 399 398 +270 271 399 +271 400 399 +271 272 401 +271 401 400 +272 273 401 +273 402 401 +273 274 403 +273 403 402 +274 275 403 +275 404 403 +275 276 405 +275 405 404 +276 277 405 +277 406 405 +277 278 407 +277 407 406 +278 279 407 +279 408 407 +279 280 409 +279 409 408 +280 281 409 +281 410 409 +281 282 411 +281 411 410 +282 283 411 +283 412 411 +283 284 413 +283 413 412 +284 285 413 +285 414 413 +285 286 415 +285 415 414 +286 287 415 +287 416 415 +287 288 417 +287 417 416 +288 289 417 +289 418 417 +289 290 419 +289 419 418 +290 291 419 +291 420 419 +291 292 421 +291 421 420 +292 293 421 +293 422 421 +293 294 423 +293 423 422 +294 295 423 +295 424 423 +295 296 425 +295 425 424 +296 297 425 +297 426 425 +297 298 427 +297 427 426 +298 299 427 +299 428 427 +299 300 429 +299 429 428 +300 301 429 +301 430 429 +301 302 431 +301 431 430 +302 303 431 +303 432 431 +303 304 433 +303 433 432 +304 305 433 +305 434 433 +305 306 435 +305 435 434 +306 307 435 +307 436 435 +307 308 437 +307 437 436 +308 309 437 +309 438 437 +309 310 439 +309 439 438 +310 311 439 +311 440 439 +311 312 441 +311 441 440 +312 313 441 +313 442 441 +313 314 443 +313 443 442 +314 315 443 +315 444 443 +315 316 445 +315 445 444 +316 317 445 +317 446 445 +317 318 447 +317 447 446 +318 319 447 +319 448 447 +319 320 449 +319 449 448 +320 321 449 +321 450 449 +321 322 451 +321 451 450 +322 323 451 +323 452 451 +323 324 453 +323 453 452 +324 325 453 +325 454 453 +325 326 455 +325 455 454 +326 327 455 +327 456 455 +327 328 457 +327 457 456 +328 329 457 +329 458 457 +329 330 459 +329 459 458 +330 331 459 +331 460 459 +331 332 461 +331 461 460 +332 333 461 +333 462 461 +333 334 463 +333 463 462 +334 335 463 +335 464 463 +335 336 465 +335 465 464 +336 337 465 +337 466 465 +337 338 467 +337 467 466 +338 339 467 +339 468 467 +339 340 469 +339 469 468 +340 341 469 +341 470 469 +341 342 471 +341 471 470 +342 343 471 +343 472 471 +343 344 473 +343 473 472 +344 345 473 +345 474 473 +345 346 475 +345 475 474 +346 347 475 +347 476 475 +347 348 477 +347 477 476 +348 349 477 +349 478 477 +349 350 479 +349 479 478 +350 351 479 +351 480 479 +351 352 481 +351 481 480 +352 353 481 +353 482 481 +353 354 483 +353 483 482 +354 355 483 +355 484 483 +355 356 485 +355 485 484 +356 357 485 +357 486 485 +357 358 487 +357 487 486 +358 359 487 +359 488 487 +359 360 489 +359 489 488 +360 361 489 +361 490 489 +361 362 491 +361 491 490 +362 363 491 +363 492 491 +363 364 493 +363 493 492 +364 365 493 +365 494 493 +365 366 495 +365 495 494 +366 367 495 +367 496 495 +367 368 497 +367 497 496 +368 369 497 +369 498 497 +369 370 499 +369 499 498 +370 371 499 +371 500 499 +371 372 501 +371 501 500 +372 373 501 +373 502 501 +373 374 503 +373 503 502 +374 375 503 +375 504 503 +375 376 505 +375 505 504 +376 377 505 +377 506 505 +377 378 507 +377 507 506 +378 379 507 +379 508 507 +379 380 509 +379 509 508 +380 381 509 +381 510 509 +381 382 511 +381 511 510 +382 383 511 +383 512 511 +383 384 513 +383 513 512 +384 385 513 +385 514 513 +385 386 515 +385 515 514 +386 387 515 +387 516 515 +388 389 517 +389 518 517 +389 390 519 +389 519 518 +390 391 519 +391 520 519 +391 392 521 +391 521 520 +392 393 521 +393 522 521 +393 394 523 +393 523 522 +394 395 523 +395 524 523 +395 396 525 +395 525 524 +396 397 525 +397 526 525 +397 398 527 +397 527 526 +398 399 527 +399 528 527 +399 400 529 +399 529 528 +400 401 529 +401 530 529 +401 402 531 +401 531 530 +402 403 531 +403 532 531 +403 404 533 +403 533 532 +404 405 533 +405 534 533 +405 406 535 +405 535 534 +406 407 535 +407 536 535 +407 408 537 +407 537 536 +408 409 537 +409 538 537 +409 410 539 +409 539 538 +410 411 539 +411 540 539 +411 412 541 +411 541 540 +412 413 541 +413 542 541 +413 414 543 +413 543 542 +414 415 543 +415 544 543 +415 416 545 +415 545 544 +416 417 545 +417 546 545 +417 418 547 +417 547 546 +418 419 547 +419 548 547 +419 420 549 +419 549 548 +420 421 549 +421 550 549 +421 422 551 +421 551 550 +422 423 551 +423 552 551 +423 424 553 +423 553 552 +424 425 553 +425 554 553 +425 426 555 +425 555 554 +426 427 555 +427 556 555 +427 428 557 +427 557 556 +428 429 557 +429 558 557 +429 430 559 +429 559 558 +430 431 559 +431 560 559 +431 432 561 +431 561 560 +432 433 561 +433 562 561 +433 434 563 +433 563 562 +434 435 563 +435 564 563 +435 436 565 +435 565 564 +436 437 565 +437 566 565 +437 438 567 +437 567 566 +438 439 567 +439 568 567 +439 440 569 +439 569 568 +440 441 569 +441 570 569 +441 442 571 +441 571 570 +442 443 571 +443 572 571 +443 444 573 +443 573 572 +444 445 573 +445 574 573 +445 446 575 +445 575 574 +446 447 575 +447 576 575 +447 448 577 +447 577 576 +448 449 577 +449 578 577 +449 450 579 +449 579 578 +450 451 579 +451 580 579 +451 452 581 +451 581 580 +452 453 581 +453 582 581 +453 454 583 +453 583 582 +454 455 583 +455 584 583 +455 456 585 +455 585 584 +456 457 585 +457 586 585 +457 458 587 +457 587 586 +458 459 587 +459 588 587 +459 460 589 +459 589 588 +460 461 589 +461 590 589 +461 462 591 +461 591 590 +462 463 591 +463 592 591 +463 464 593 +463 593 592 +464 465 593 +465 594 593 +465 466 595 +465 595 594 +466 467 595 +467 596 595 +467 468 597 +467 597 596 +468 469 597 +469 598 597 +469 470 599 +469 599 598 +470 471 599 +471 600 599 +471 472 601 +471 601 600 +472 473 601 +473 602 601 +473 474 603 +473 603 602 +474 475 603 +475 604 603 +475 476 605 +475 605 604 +476 477 605 +477 606 605 +477 478 607 +477 607 606 +478 479 607 +479 608 607 +479 480 609 +479 609 608 +480 481 609 +481 610 609 +481 482 611 +481 611 610 +482 483 611 +483 612 611 +483 484 613 +483 613 612 +484 485 613 +485 614 613 +485 486 615 +485 615 614 +486 487 615 +487 616 615 +487 488 617 +487 617 616 +488 489 617 +489 618 617 +489 490 619 +489 619 618 +490 491 619 +491 620 619 +491 492 621 +491 621 620 +492 493 621 +493 622 621 +493 494 623 +493 623 622 +494 495 623 +495 624 623 +495 496 625 +495 625 624 +496 497 625 +497 626 625 +497 498 627 +497 627 626 +498 499 627 +499 628 627 +499 500 629 +499 629 628 +500 501 629 +501 630 629 +501 502 631 +501 631 630 +502 503 631 +503 632 631 +503 504 633 +503 633 632 +504 505 633 +505 634 633 +505 506 635 +505 635 634 +506 507 635 +507 636 635 +507 508 637 +507 637 636 +508 509 637 +509 638 637 +509 510 639 +509 639 638 +510 511 639 +511 640 639 +511 512 641 +511 641 640 +512 513 641 +513 642 641 +513 514 643 +513 643 642 +514 515 643 +515 644 643 +515 516 645 +515 645 644 +517 518 647 +517 647 646 +518 519 647 +519 648 647 +519 520 649 +519 649 648 +520 521 649 +521 650 649 +521 522 651 +521 651 650 +522 523 651 +523 652 651 +523 524 653 +523 653 652 +524 525 653 +525 654 653 +525 526 655 +525 655 654 +526 527 655 +527 656 655 +527 528 657 +527 657 656 +528 529 657 +529 658 657 +529 530 659 +529 659 658 +530 531 659 +531 660 659 +531 532 661 +531 661 660 +532 533 661 +533 662 661 +533 534 663 +533 663 662 +534 535 663 +535 664 663 +535 536 665 +535 665 664 +536 537 665 +537 666 665 +537 538 667 +537 667 666 +538 539 667 +539 668 667 +539 540 669 +539 669 668 +540 541 669 +541 670 669 +541 542 671 +541 671 670 +542 543 671 +543 672 671 +543 544 673 +543 673 672 +544 545 673 +545 674 673 +545 546 675 +545 675 674 +546 547 675 +547 676 675 +547 548 677 +547 677 676 +548 549 677 +549 678 677 +549 550 679 +549 679 678 +550 551 679 +551 680 679 +551 552 681 +551 681 680 +552 553 681 +553 682 681 +553 554 683 +553 683 682 +554 555 683 +555 684 683 +555 556 685 +555 685 684 +556 557 685 +557 686 685 +557 558 687 +557 687 686 +558 559 687 +559 688 687 +559 560 689 +559 689 688 +560 561 689 +561 690 689 +561 562 691 +561 691 690 +562 563 691 +563 692 691 +563 564 693 +563 693 692 +564 565 693 +565 694 693 +565 566 695 +565 695 694 +566 567 695 +567 696 695 +567 568 697 +567 697 696 +568 569 697 +569 698 697 +569 570 699 +569 699 698 +570 571 699 +571 700 699 +571 572 701 +571 701 700 +572 573 701 +573 702 701 +573 574 703 +573 703 702 +574 575 703 +575 704 703 +575 576 705 +575 705 704 +576 577 705 +577 706 705 +577 578 707 +577 707 706 +578 579 707 +579 708 707 +579 580 709 +579 709 708 +580 581 709 +581 710 709 +581 582 711 +581 711 710 +582 583 711 +583 712 711 +583 584 713 +583 713 712 +584 585 713 +585 714 713 +585 586 715 +585 715 714 +586 587 715 +587 716 715 +587 588 717 +587 717 716 +588 589 717 +589 718 717 +589 590 719 +589 719 718 +590 591 719 +591 720 719 +591 592 721 +591 721 720 +592 593 721 +593 722 721 +593 594 723 +593 723 722 +594 595 723 +595 724 723 +595 596 725 +595 725 724 +596 597 725 +597 726 725 +597 598 727 +597 727 726 +598 599 727 +599 728 727 +599 600 729 +599 729 728 +600 601 729 +601 730 729 +601 602 731 +601 731 730 +602 603 731 +603 732 731 +603 604 733 +603 733 732 +604 605 733 +605 734 733 +605 606 735 +605 735 734 +606 607 735 +607 736 735 +607 608 737 +607 737 736 +608 609 737 +609 738 737 +609 610 739 +609 739 738 +610 611 739 +611 740 739 +611 612 741 +611 741 740 +612 613 741 +613 742 741 +613 614 743 +613 743 742 +614 615 743 +615 744 743 +615 616 745 +615 745 744 +616 617 745 +617 746 745 +617 618 747 +617 747 746 +618 619 747 +619 748 747 +619 620 749 +619 749 748 +620 621 749 +621 750 749 +621 622 751 +621 751 750 +622 623 751 +623 752 751 +623 624 753 +623 753 752 +624 625 753 +625 754 753 +625 626 755 +625 755 754 +626 627 755 +627 756 755 +627 628 757 +627 757 756 +628 629 757 +629 758 757 +629 630 759 +629 759 758 +630 631 759 +631 760 759 +631 632 761 +631 761 760 +632 633 761 +633 762 761 +633 634 763 +633 763 762 +634 635 763 +635 764 763 +635 636 765 +635 765 764 +636 637 765 +637 766 765 +637 638 767 +637 767 766 +638 639 767 +639 768 767 +639 640 769 +639 769 768 +640 641 769 +641 770 769 +641 642 771 +641 771 770 +642 643 771 +643 772 771 +643 644 773 +643 773 772 +644 645 773 +645 774 773 +646 647 775 +647 776 775 +647 648 777 +647 777 776 +648 649 777 +649 778 777 +649 650 779 +649 779 778 +650 651 779 +651 780 779 +651 652 781 +651 781 780 +652 653 781 +653 782 781 +653 654 783 +653 783 782 +654 655 783 +655 784 783 +655 656 785 +655 785 784 +656 657 785 +657 786 785 +657 658 787 +657 787 786 +658 659 787 +659 788 787 +659 660 789 +659 789 788 +660 661 789 +661 790 789 +661 662 791 +661 791 790 +662 663 791 +663 792 791 +663 664 793 +663 793 792 +664 665 793 +665 794 793 +665 666 795 +665 795 794 +666 667 795 +667 796 795 +667 668 797 +667 797 796 +668 669 797 +669 798 797 +669 670 799 +669 799 798 +670 671 799 +671 800 799 +671 672 801 +671 801 800 +672 673 801 +673 802 801 +673 674 803 +673 803 802 +674 675 803 +675 804 803 +675 676 805 +675 805 804 +676 677 805 +677 806 805 +677 678 807 +677 807 806 +678 679 807 +679 808 807 +679 680 809 +679 809 808 +680 681 809 +681 810 809 +681 682 811 +681 811 810 +682 683 811 +683 812 811 +683 684 813 +683 813 812 +684 685 813 +685 814 813 +685 686 815 +685 815 814 +686 687 815 +687 816 815 +687 688 817 +687 817 816 +688 689 817 +689 818 817 +689 690 819 +689 819 818 +690 691 819 +691 820 819 +691 692 821 +691 821 820 +692 693 821 +693 822 821 +693 694 823 +693 823 822 +694 695 823 +695 824 823 +695 696 825 +695 825 824 +696 697 825 +697 826 825 +697 698 827 +697 827 826 +698 699 827 +699 828 827 +699 700 829 +699 829 828 +700 701 829 +701 830 829 +701 702 831 +701 831 830 +702 703 831 +703 832 831 +703 704 833 +703 833 832 +704 705 833 +705 834 833 +705 706 835 +705 835 834 +706 707 835 +707 836 835 +707 708 837 +707 837 836 +708 709 837 +709 838 837 +709 710 839 +709 839 838 +710 711 839 +711 840 839 +711 712 841 +711 841 840 +712 713 841 +713 842 841 +713 714 843 +713 843 842 +714 715 843 +715 844 843 +715 716 845 +715 845 844 +716 717 845 +717 846 845 +717 718 847 +717 847 846 +718 719 847 +719 848 847 +719 720 849 +719 849 848 +720 721 849 +721 850 849 +721 722 851 +721 851 850 +722 723 851 +723 852 851 +723 724 853 +723 853 852 +724 725 853 +725 854 853 +725 726 855 +725 855 854 +726 727 855 +727 856 855 +727 728 857 +727 857 856 +728 729 857 +729 858 857 +729 730 859 +729 859 858 +730 731 859 +731 860 859 +731 732 861 +731 861 860 +732 733 861 +733 862 861 +733 734 863 +733 863 862 +734 735 863 +735 864 863 +735 736 865 +735 865 864 +736 737 865 +737 866 865 +737 738 867 +737 867 866 +738 739 867 +739 868 867 +739 740 869 +739 869 868 +740 741 869 +741 870 869 +741 742 871 +741 871 870 +742 743 871 +743 872 871 +743 744 873 +743 873 872 +744 745 873 +745 874 873 +745 746 875 +745 875 874 +746 747 875 +747 876 875 +747 748 877 +747 877 876 +748 749 877 +749 878 877 +749 750 879 +749 879 878 +750 751 879 +751 880 879 +751 752 881 +751 881 880 +752 753 881 +753 882 881 +753 754 883 +753 883 882 +754 755 883 +755 884 883 +755 756 885 +755 885 884 +756 757 885 +757 886 885 +757 758 887 +757 887 886 +758 759 887 +759 888 887 +759 760 889 +759 889 888 +760 761 889 +761 890 889 +761 762 891 +761 891 890 +762 763 891 +763 892 891 +763 764 893 +763 893 892 +764 765 893 +765 894 893 +765 766 895 +765 895 894 +766 767 895 +767 896 895 +767 768 897 +767 897 896 +768 769 897 +769 898 897 +769 770 899 +769 899 898 +770 771 899 +771 900 899 +771 772 901 +771 901 900 +772 773 901 +773 902 901 +773 774 903 +773 903 902 +775 776 905 +775 905 904 +776 777 905 +777 906 905 +777 778 907 +777 907 906 +778 779 907 +779 908 907 +779 780 909 +779 909 908 +780 781 909 +781 910 909 +781 782 911 +781 911 910 +782 783 911 +783 912 911 +783 784 913 +783 913 912 +784 785 913 +785 914 913 +785 786 915 +785 915 914 +786 787 915 +787 916 915 +787 788 917 +787 917 916 +788 789 917 +789 918 917 +789 790 919 +789 919 918 +790 791 919 +791 920 919 +791 792 921 +791 921 920 +792 793 921 +793 922 921 +793 794 923 +793 923 922 +794 795 923 +795 924 923 +795 796 925 +795 925 924 +796 797 925 +797 926 925 +797 798 927 +797 927 926 +798 799 927 +799 928 927 +799 800 929 +799 929 928 +800 801 929 +801 930 929 +801 802 931 +801 931 930 +802 803 931 +803 932 931 +803 804 933 +803 933 932 +804 805 933 +805 934 933 +805 806 935 +805 935 934 +806 807 935 +807 936 935 +807 808 937 +807 937 936 +808 809 937 +809 938 937 +809 810 939 +809 939 938 +810 811 939 +811 940 939 +811 812 941 +811 941 940 +812 813 941 +813 942 941 +813 814 943 +813 943 942 +814 815 943 +815 944 943 +815 816 945 +815 945 944 +816 817 945 +817 946 945 +817 818 947 +817 947 946 +818 819 947 +819 948 947 +819 820 949 +819 949 948 +820 821 949 +821 950 949 +821 822 951 +821 951 950 +822 823 951 +823 952 951 +823 824 953 +823 953 952 +824 825 953 +825 954 953 +825 826 955 +825 955 954 +826 827 955 +827 956 955 +827 828 957 +827 957 956 +828 829 957 +829 958 957 +829 830 959 +829 959 958 +830 831 959 +831 960 959 +831 832 961 +831 961 960 +832 833 961 +833 962 961 +833 834 963 +833 963 962 +834 835 963 +835 964 963 +835 836 965 +835 965 964 +836 837 965 +837 966 965 +837 838 967 +837 967 966 +838 839 967 +839 968 967 +839 840 969 +839 969 968 +840 841 969 +841 970 969 +841 842 971 +841 971 970 +842 843 971 +843 972 971 +843 844 973 +843 973 972 +844 845 973 +845 974 973 +845 846 975 +845 975 974 +846 847 975 +847 976 975 +847 848 977 +847 977 976 +848 849 977 +849 978 977 +849 850 979 +849 979 978 +850 851 979 +851 980 979 +851 852 981 +851 981 980 +852 853 981 +853 982 981 +853 854 983 +853 983 982 +854 855 983 +855 984 983 +855 856 985 +855 985 984 +856 857 985 +857 986 985 +857 858 987 +857 987 986 +858 859 987 +859 988 987 +859 860 989 +859 989 988 +860 861 989 +861 990 989 +861 862 991 +861 991 990 +862 863 991 +863 992 991 +863 864 993 +863 993 992 +864 865 993 +865 994 993 +865 866 995 +865 995 994 +866 867 995 +867 996 995 +867 868 997 +867 997 996 +868 869 997 +869 998 997 +869 870 999 +869 999 998 +870 871 999 +871 1000 999 +871 872 1001 +871 1001 1000 +872 873 1001 +873 1002 1001 +873 874 1003 +873 1003 1002 +874 875 1003 +875 1004 1003 +875 876 1005 +875 1005 1004 +876 877 1005 +877 1006 1005 +877 878 1007 +877 1007 1006 +878 879 1007 +879 1008 1007 +879 880 1009 +879 1009 1008 +880 881 1009 +881 1010 1009 +881 882 1011 +881 1011 1010 +882 883 1011 +883 1012 1011 +883 884 1013 +883 1013 1012 +884 885 1013 +885 1014 1013 +885 886 1015 +885 1015 1014 +886 887 1015 +887 1016 1015 +887 888 1017 +887 1017 1016 +888 889 1017 +889 1018 1017 +889 890 1019 +889 1019 1018 +890 891 1019 +891 1020 1019 +891 892 1021 +891 1021 1020 +892 893 1021 +893 1022 1021 +893 894 1023 +893 1023 1022 +894 895 1023 +895 1024 1023 +895 896 1025 +895 1025 1024 +896 897 1025 +897 1026 1025 +897 898 1027 +897 1027 1026 +898 899 1027 +899 1028 1027 +899 900 1029 +899 1029 1028 +900 901 1029 +901 1030 1029 +901 902 1031 +901 1031 1030 +902 903 1031 +903 1032 1031 +904 905 1033 +905 1034 1033 +905 906 1035 +905 1035 1034 +906 907 1035 +907 1036 1035 +907 908 1037 +907 1037 1036 +908 909 1037 +909 1038 1037 +909 910 1039 +909 1039 1038 +910 911 1039 +911 1040 1039 +911 912 1041 +911 1041 1040 +912 913 1041 +913 1042 1041 +913 914 1043 +913 1043 1042 +914 915 1043 +915 1044 1043 +915 916 1045 +915 1045 1044 +916 917 1045 +917 1046 1045 +917 918 1047 +917 1047 1046 +918 919 1047 +919 1048 1047 +919 920 1049 +919 1049 1048 +920 921 1049 +921 1050 1049 +921 922 1051 +921 1051 1050 +922 923 1051 +923 1052 1051 +923 924 1053 +923 1053 1052 +924 925 1053 +925 1054 1053 +925 926 1055 +925 1055 1054 +926 927 1055 +927 1056 1055 +927 928 1057 +927 1057 1056 +928 929 1057 +929 1058 1057 +929 930 1059 +929 1059 1058 +930 931 1059 +931 1060 1059 +931 932 1061 +931 1061 1060 +932 933 1061 +933 1062 1061 +933 934 1063 +933 1063 1062 +934 935 1063 +935 1064 1063 +935 936 1065 +935 1065 1064 +936 937 1065 +937 1066 1065 +937 938 1067 +937 1067 1066 +938 939 1067 +939 1068 1067 +939 940 1069 +939 1069 1068 +940 941 1069 +941 1070 1069 +941 942 1071 +941 1071 1070 +942 943 1071 +943 1072 1071 +943 944 1073 +943 1073 1072 +944 945 1073 +945 1074 1073 +945 946 1075 +945 1075 1074 +946 947 1075 +947 1076 1075 +947 948 1077 +947 1077 1076 +948 949 1077 +949 1078 1077 +949 950 1079 +949 1079 1078 +950 951 1079 +951 1080 1079 +951 952 1081 +951 1081 1080 +952 953 1081 +953 1082 1081 +953 954 1083 +953 1083 1082 +954 955 1083 +955 1084 1083 +955 956 1085 +955 1085 1084 +956 957 1085 +957 1086 1085 +957 958 1087 +957 1087 1086 +958 959 1087 +959 1088 1087 +959 960 1089 +959 1089 1088 +960 961 1089 +961 1090 1089 +961 962 1091 +961 1091 1090 +962 963 1091 +963 1092 1091 +963 964 1093 +963 1093 1092 +964 965 1093 +965 1094 1093 +965 966 1095 +965 1095 1094 +966 967 1095 +967 1096 1095 +967 968 1097 +967 1097 1096 +968 969 1097 +969 1098 1097 +969 970 1099 +969 1099 1098 +970 971 1099 +971 1100 1099 +971 972 1101 +971 1101 1100 +972 973 1101 +973 1102 1101 +973 974 1103 +973 1103 1102 +974 975 1103 +975 1104 1103 +975 976 1105 +975 1105 1104 +976 977 1105 +977 1106 1105 +977 978 1107 +977 1107 1106 +978 979 1107 +979 1108 1107 +979 980 1109 +979 1109 1108 +980 981 1109 +981 1110 1109 +981 982 1111 +981 1111 1110 +982 983 1111 +983 1112 1111 +983 984 1113 +983 1113 1112 +984 985 1113 +985 1114 1113 +985 986 1115 +985 1115 1114 +986 987 1115 +987 1116 1115 +987 988 1117 +987 1117 1116 +988 989 1117 +989 1118 1117 +989 990 1119 +989 1119 1118 +990 991 1119 +991 1120 1119 +991 992 1121 +991 1121 1120 +992 993 1121 +993 1122 1121 +993 994 1123 +993 1123 1122 +994 995 1123 +995 1124 1123 +995 996 1125 +995 1125 1124 +996 997 1125 +997 1126 1125 +997 998 1127 +997 1127 1126 +998 999 1127 +999 1128 1127 +999 1000 1129 +999 1129 1128 +1000 1001 1129 +1001 1130 1129 +1001 1002 1131 +1001 1131 1130 +1002 1003 1131 +1003 1132 1131 +1003 1004 1133 +1003 1133 1132 +1004 1005 1133 +1005 1134 1133 +1005 1006 1135 +1005 1135 1134 +1006 1007 1135 +1007 1136 1135 +1007 1008 1137 +1007 1137 1136 +1008 1009 1137 +1009 1138 1137 +1009 1010 1139 +1009 1139 1138 +1010 1011 1139 +1011 1140 1139 +1011 1012 1141 +1011 1141 1140 +1012 1013 1141 +1013 1142 1141 +1013 1014 1143 +1013 1143 1142 +1014 1015 1143 +1015 1144 1143 +1015 1016 1145 +1015 1145 1144 +1016 1017 1145 +1017 1146 1145 +1017 1018 1147 +1017 1147 1146 +1018 1019 1147 +1019 1148 1147 +1019 1020 1149 +1019 1149 1148 +1020 1021 1149 +1021 1150 1149 +1021 1022 1151 +1021 1151 1150 +1022 1023 1151 +1023 1152 1151 +1023 1024 1153 +1023 1153 1152 +1024 1025 1153 +1025 1154 1153 +1025 1026 1155 +1025 1155 1154 +1026 1027 1155 +1027 1156 1155 +1027 1028 1157 +1027 1157 1156 +1028 1029 1157 +1029 1158 1157 +1029 1030 1159 +1029 1159 1158 +1030 1031 1159 +1031 1160 1159 +1031 1032 1161 +1031 1161 1160 +1033 1034 1163 +1033 1163 1162 +1034 1035 1163 +1035 1164 1163 +1035 1036 1165 +1035 1165 1164 +1036 1037 1165 +1037 1166 1165 +1037 1038 1167 +1037 1167 1166 +1038 1039 1167 +1039 1168 1167 +1039 1040 1169 +1039 1169 1168 +1040 1041 1169 +1041 1170 1169 +1041 1042 1171 +1041 1171 1170 +1042 1043 1171 +1043 1172 1171 +1043 1044 1173 +1043 1173 1172 +1044 1045 1173 +1045 1174 1173 +1045 1046 1175 +1045 1175 1174 +1046 1047 1175 +1047 1176 1175 +1047 1048 1177 +1047 1177 1176 +1048 1049 1177 +1049 1178 1177 +1049 1050 1179 +1049 1179 1178 +1050 1051 1179 +1051 1180 1179 +1051 1052 1181 +1051 1181 1180 +1052 1053 1181 +1053 1182 1181 +1053 1054 1183 +1053 1183 1182 +1054 1055 1183 +1055 1184 1183 +1055 1056 1185 +1055 1185 1184 +1056 1057 1185 +1057 1186 1185 +1057 1058 1187 +1057 1187 1186 +1058 1059 1187 +1059 1188 1187 +1059 1060 1189 +1059 1189 1188 +1060 1061 1189 +1061 1190 1189 +1061 1062 1191 +1061 1191 1190 +1062 1063 1191 +1063 1192 1191 +1063 1064 1193 +1063 1193 1192 +1064 1065 1193 +1065 1194 1193 +1065 1066 1195 +1065 1195 1194 +1066 1067 1195 +1067 1196 1195 +1067 1068 1197 +1067 1197 1196 +1068 1069 1197 +1069 1198 1197 +1069 1070 1199 +1069 1199 1198 +1070 1071 1199 +1071 1200 1199 +1071 1072 1201 +1071 1201 1200 +1072 1073 1201 +1073 1202 1201 +1073 1074 1203 +1073 1203 1202 +1074 1075 1203 +1075 1204 1203 +1075 1076 1205 +1075 1205 1204 +1076 1077 1205 +1077 1206 1205 +1077 1078 1207 +1077 1207 1206 +1078 1079 1207 +1079 1208 1207 +1079 1080 1209 +1079 1209 1208 +1080 1081 1209 +1081 1210 1209 +1081 1082 1211 +1081 1211 1210 +1082 1083 1211 +1083 1212 1211 +1083 1084 1213 +1083 1213 1212 +1084 1085 1213 +1085 1214 1213 +1085 1086 1215 +1085 1215 1214 +1086 1087 1215 +1087 1216 1215 +1087 1088 1217 +1087 1217 1216 +1088 1089 1217 +1089 1218 1217 +1089 1090 1219 +1089 1219 1218 +1090 1091 1219 +1091 1220 1219 +1091 1092 1221 +1091 1221 1220 +1092 1093 1221 +1093 1222 1221 +1093 1094 1223 +1093 1223 1222 +1094 1095 1223 +1095 1224 1223 +1095 1096 1225 +1095 1225 1224 +1096 1097 1225 +1097 1226 1225 +1097 1098 1227 +1097 1227 1226 +1098 1099 1227 +1099 1228 1227 +1099 1100 1229 +1099 1229 1228 +1100 1101 1229 +1101 1230 1229 +1101 1102 1231 +1101 1231 1230 +1102 1103 1231 +1103 1232 1231 +1103 1104 1233 +1103 1233 1232 +1104 1105 1233 +1105 1234 1233 +1105 1106 1235 +1105 1235 1234 +1106 1107 1235 +1107 1236 1235 +1107 1108 1237 +1107 1237 1236 +1108 1109 1237 +1109 1238 1237 +1109 1110 1239 +1109 1239 1238 +1110 1111 1239 +1111 1240 1239 +1111 1112 1241 +1111 1241 1240 +1112 1113 1241 +1113 1242 1241 +1113 1114 1243 +1113 1243 1242 +1114 1115 1243 +1115 1244 1243 +1115 1116 1245 +1115 1245 1244 +1116 1117 1245 +1117 1246 1245 +1117 1118 1247 +1117 1247 1246 +1118 1119 1247 +1119 1248 1247 +1119 1120 1249 +1119 1249 1248 +1120 1121 1249 +1121 1250 1249 +1121 1122 1251 +1121 1251 1250 +1122 1123 1251 +1123 1252 1251 +1123 1124 1253 +1123 1253 1252 +1124 1125 1253 +1125 1254 1253 +1125 1126 1255 +1125 1255 1254 +1126 1127 1255 +1127 1256 1255 +1127 1128 1257 +1127 1257 1256 +1128 1129 1257 +1129 1258 1257 +1129 1130 1259 +1129 1259 1258 +1130 1131 1259 +1131 1260 1259 +1131 1132 1261 +1131 1261 1260 +1132 1133 1261 +1133 1262 1261 +1133 1134 1263 +1133 1263 1262 +1134 1135 1263 +1135 1264 1263 +1135 1136 1265 +1135 1265 1264 +1136 1137 1265 +1137 1266 1265 +1137 1138 1267 +1137 1267 1266 +1138 1139 1267 +1139 1268 1267 +1139 1140 1269 +1139 1269 1268 +1140 1141 1269 +1141 1270 1269 +1141 1142 1271 +1141 1271 1270 +1142 1143 1271 +1143 1272 1271 +1143 1144 1273 +1143 1273 1272 +1144 1145 1273 +1145 1274 1273 +1145 1146 1275 +1145 1275 1274 +1146 1147 1275 +1147 1276 1275 +1147 1148 1277 +1147 1277 1276 +1148 1149 1277 +1149 1278 1277 +1149 1150 1279 +1149 1279 1278 +1150 1151 1279 +1151 1280 1279 +1151 1152 1281 +1151 1281 1280 +1152 1153 1281 +1153 1282 1281 +1153 1154 1283 +1153 1283 1282 +1154 1155 1283 +1155 1284 1283 +1155 1156 1285 +1155 1285 1284 +1156 1157 1285 +1157 1286 1285 +1157 1158 1287 +1157 1287 1286 +1158 1159 1287 +1159 1288 1287 +1159 1160 1289 +1159 1289 1288 +1160 1161 1289 +1161 1290 1289 +1162 1163 1291 +1163 1292 1291 +1163 1164 1293 +1163 1293 1292 +1164 1165 1293 +1165 1294 1293 +1165 1166 1295 +1165 1295 1294 +1166 1167 1295 +1167 1296 1295 +1167 1168 1297 +1167 1297 1296 +1168 1169 1297 +1169 1298 1297 +1169 1170 1299 +1169 1299 1298 +1170 1171 1299 +1171 1300 1299 +1171 1172 1301 +1171 1301 1300 +1172 1173 1301 +1173 1302 1301 +1173 1174 1303 +1173 1303 1302 +1174 1175 1303 +1175 1304 1303 +1175 1176 1305 +1175 1305 1304 +1176 1177 1305 +1177 1306 1305 +1177 1178 1307 +1177 1307 1306 +1178 1179 1307 +1179 1308 1307 +1179 1180 1309 +1179 1309 1308 +1180 1181 1309 +1181 1310 1309 +1181 1182 1311 +1181 1311 1310 +1182 1183 1311 +1183 1312 1311 +1183 1184 1313 +1183 1313 1312 +1184 1185 1313 +1185 1314 1313 +1185 1186 1315 +1185 1315 1314 +1186 1187 1315 +1187 1316 1315 +1187 1188 1317 +1187 1317 1316 +1188 1189 1317 +1189 1318 1317 +1189 1190 1319 +1189 1319 1318 +1190 1191 1319 +1191 1320 1319 +1191 1192 1321 +1191 1321 1320 +1192 1193 1321 +1193 1322 1321 +1193 1194 1323 +1193 1323 1322 +1194 1195 1323 +1195 1324 1323 +1195 1196 1325 +1195 1325 1324 +1196 1197 1325 +1197 1326 1325 +1197 1198 1327 +1197 1327 1326 +1198 1199 1327 +1199 1328 1327 +1199 1200 1329 +1199 1329 1328 +1200 1201 1329 +1201 1330 1329 +1201 1202 1331 +1201 1331 1330 +1202 1203 1331 +1203 1332 1331 +1203 1204 1333 +1203 1333 1332 +1204 1205 1333 +1205 1334 1333 +1205 1206 1335 +1205 1335 1334 +1206 1207 1335 +1207 1336 1335 +1207 1208 1337 +1207 1337 1336 +1208 1209 1337 +1209 1338 1337 +1209 1210 1339 +1209 1339 1338 +1210 1211 1339 +1211 1340 1339 +1211 1212 1341 +1211 1341 1340 +1212 1213 1341 +1213 1342 1341 +1213 1214 1343 +1213 1343 1342 +1214 1215 1343 +1215 1344 1343 +1215 1216 1345 +1215 1345 1344 +1216 1217 1345 +1217 1346 1345 +1217 1218 1347 +1217 1347 1346 +1218 1219 1347 +1219 1348 1347 +1219 1220 1349 +1219 1349 1348 +1220 1221 1349 +1221 1350 1349 +1221 1222 1351 +1221 1351 1350 +1222 1223 1351 +1223 1352 1351 +1223 1224 1353 +1223 1353 1352 +1224 1225 1353 +1225 1354 1353 +1225 1226 1355 +1225 1355 1354 +1226 1227 1355 +1227 1356 1355 +1227 1228 1357 +1227 1357 1356 +1228 1229 1357 +1229 1358 1357 +1229 1230 1359 +1229 1359 1358 +1230 1231 1359 +1231 1360 1359 +1231 1232 1361 +1231 1361 1360 +1232 1233 1361 +1233 1362 1361 +1233 1234 1363 +1233 1363 1362 +1234 1235 1363 +1235 1364 1363 +1235 1236 1365 +1235 1365 1364 +1236 1237 1365 +1237 1366 1365 +1237 1238 1367 +1237 1367 1366 +1238 1239 1367 +1239 1368 1367 +1239 1240 1369 +1239 1369 1368 +1240 1241 1369 +1241 1370 1369 +1241 1242 1371 +1241 1371 1370 +1242 1243 1371 +1243 1372 1371 +1243 1244 1373 +1243 1373 1372 +1244 1245 1373 +1245 1374 1373 +1245 1246 1375 +1245 1375 1374 +1246 1247 1375 +1247 1376 1375 +1247 1248 1377 +1247 1377 1376 +1248 1249 1377 +1249 1378 1377 +1249 1250 1379 +1249 1379 1378 +1250 1251 1379 +1251 1380 1379 +1251 1252 1381 +1251 1381 1380 +1252 1253 1381 +1253 1382 1381 +1253 1254 1383 +1253 1383 1382 +1254 1255 1383 +1255 1384 1383 +1255 1256 1385 +1255 1385 1384 +1256 1257 1385 +1257 1386 1385 +1257 1258 1387 +1257 1387 1386 +1258 1259 1387 +1259 1388 1387 +1259 1260 1389 +1259 1389 1388 +1260 1261 1389 +1261 1390 1389 +1261 1262 1391 +1261 1391 1390 +1262 1263 1391 +1263 1392 1391 +1263 1264 1393 +1263 1393 1392 +1264 1265 1393 +1265 1394 1393 +1265 1266 1395 +1265 1395 1394 +1266 1267 1395 +1267 1396 1395 +1267 1268 1397 +1267 1397 1396 +1268 1269 1397 +1269 1398 1397 +1269 1270 1399 +1269 1399 1398 +1270 1271 1399 +1271 1400 1399 +1271 1272 1401 +1271 1401 1400 +1272 1273 1401 +1273 1402 1401 +1273 1274 1403 +1273 1403 1402 +1274 1275 1403 +1275 1404 1403 +1275 1276 1405 +1275 1405 1404 +1276 1277 1405 +1277 1406 1405 +1277 1278 1407 +1277 1407 1406 +1278 1279 1407 +1279 1408 1407 +1279 1280 1409 +1279 1409 1408 +1280 1281 1409 +1281 1410 1409 +1281 1282 1411 +1281 1411 1410 +1282 1283 1411 +1283 1412 1411 +1283 1284 1413 +1283 1413 1412 +1284 1285 1413 +1285 1414 1413 +1285 1286 1415 +1285 1415 1414 +1286 1287 1415 +1287 1416 1415 +1287 1288 1417 +1287 1417 1416 +1288 1289 1417 +1289 1418 1417 +1289 1290 1419 +1289 1419 1418 +1291 1292 1421 +1291 1421 1420 +1292 1293 1421 +1293 1422 1421 +1293 1294 1423 +1293 1423 1422 +1294 1295 1423 +1295 1424 1423 +1295 1296 1425 +1295 1425 1424 +1296 1297 1425 +1297 1426 1425 +1297 1298 1427 +1297 1427 1426 +1298 1299 1427 +1299 1428 1427 +1299 1300 1429 +1299 1429 1428 +1300 1301 1429 +1301 1430 1429 +1301 1302 1431 +1301 1431 1430 +1302 1303 1431 +1303 1432 1431 +1303 1304 1433 +1303 1433 1432 +1304 1305 1433 +1305 1434 1433 +1305 1306 1435 +1305 1435 1434 +1306 1307 1435 +1307 1436 1435 +1307 1308 1437 +1307 1437 1436 +1308 1309 1437 +1309 1438 1437 +1309 1310 1439 +1309 1439 1438 +1310 1311 1439 +1311 1440 1439 +1311 1312 1441 +1311 1441 1440 +1312 1313 1441 +1313 1442 1441 +1313 1314 1443 +1313 1443 1442 +1314 1315 1443 +1315 1444 1443 +1315 1316 1445 +1315 1445 1444 +1316 1317 1445 +1317 1446 1445 +1317 1318 1447 +1317 1447 1446 +1318 1319 1447 +1319 1448 1447 +1319 1320 1449 +1319 1449 1448 +1320 1321 1449 +1321 1450 1449 +1321 1322 1451 +1321 1451 1450 +1322 1323 1451 +1323 1452 1451 +1323 1324 1453 +1323 1453 1452 +1324 1325 1453 +1325 1454 1453 +1325 1326 1455 +1325 1455 1454 +1326 1327 1455 +1327 1456 1455 +1327 1328 1457 +1327 1457 1456 +1328 1329 1457 +1329 1458 1457 +1329 1330 1459 +1329 1459 1458 +1330 1331 1459 +1331 1460 1459 +1331 1332 1461 +1331 1461 1460 +1332 1333 1461 +1333 1462 1461 +1333 1334 1463 +1333 1463 1462 +1334 1335 1463 +1335 1464 1463 +1335 1336 1465 +1335 1465 1464 +1336 1337 1465 +1337 1466 1465 +1337 1338 1467 +1337 1467 1466 +1338 1339 1467 +1339 1468 1467 +1339 1340 1469 +1339 1469 1468 +1340 1341 1469 +1341 1470 1469 +1341 1342 1471 +1341 1471 1470 +1342 1343 1471 +1343 1472 1471 +1343 1344 1473 +1343 1473 1472 +1344 1345 1473 +1345 1474 1473 +1345 1346 1475 +1345 1475 1474 +1346 1347 1475 +1347 1476 1475 +1347 1348 1477 +1347 1477 1476 +1348 1349 1477 +1349 1478 1477 +1349 1350 1479 +1349 1479 1478 +1350 1351 1479 +1351 1480 1479 +1351 1352 1481 +1351 1481 1480 +1352 1353 1481 +1353 1482 1481 +1353 1354 1483 +1353 1483 1482 +1354 1355 1483 +1355 1484 1483 +1355 1356 1485 +1355 1485 1484 +1356 1357 1485 +1357 1486 1485 +1357 1358 1487 +1357 1487 1486 +1358 1359 1487 +1359 1488 1487 +1359 1360 1489 +1359 1489 1488 +1360 1361 1489 +1361 1490 1489 +1361 1362 1491 +1361 1491 1490 +1362 1363 1491 +1363 1492 1491 +1363 1364 1493 +1363 1493 1492 +1364 1365 1493 +1365 1494 1493 +1365 1366 1495 +1365 1495 1494 +1366 1367 1495 +1367 1496 1495 +1367 1368 1497 +1367 1497 1496 +1368 1369 1497 +1369 1498 1497 +1369 1370 1499 +1369 1499 1498 +1370 1371 1499 +1371 1500 1499 +1371 1372 1501 +1371 1501 1500 +1372 1373 1501 +1373 1502 1501 +1373 1374 1503 +1373 1503 1502 +1374 1375 1503 +1375 1504 1503 +1375 1376 1505 +1375 1505 1504 +1376 1377 1505 +1377 1506 1505 +1377 1378 1507 +1377 1507 1506 +1378 1379 1507 +1379 1508 1507 +1379 1380 1509 +1379 1509 1508 +1380 1381 1509 +1381 1510 1509 +1381 1382 1511 +1381 1511 1510 +1382 1383 1511 +1383 1512 1511 +1383 1384 1513 +1383 1513 1512 +1384 1385 1513 +1385 1514 1513 +1385 1386 1515 +1385 1515 1514 +1386 1387 1515 +1387 1516 1515 +1387 1388 1517 +1387 1517 1516 +1388 1389 1517 +1389 1518 1517 +1389 1390 1519 +1389 1519 1518 +1390 1391 1519 +1391 1520 1519 +1391 1392 1521 +1391 1521 1520 +1392 1393 1521 +1393 1522 1521 +1393 1394 1523 +1393 1523 1522 +1394 1395 1523 +1395 1524 1523 +1395 1396 1525 +1395 1525 1524 +1396 1397 1525 +1397 1526 1525 +1397 1398 1527 +1397 1527 1526 +1398 1399 1527 +1399 1528 1527 +1399 1400 1529 +1399 1529 1528 +1400 1401 1529 +1401 1530 1529 +1401 1402 1531 +1401 1531 1530 +1402 1403 1531 +1403 1532 1531 +1403 1404 1533 +1403 1533 1532 +1404 1405 1533 +1405 1534 1533 +1405 1406 1535 +1405 1535 1534 +1406 1407 1535 +1407 1536 1535 +1407 1408 1537 +1407 1537 1536 +1408 1409 1537 +1409 1538 1537 +1409 1410 1539 +1409 1539 1538 +1410 1411 1539 +1411 1540 1539 +1411 1412 1541 +1411 1541 1540 +1412 1413 1541 +1413 1542 1541 +1413 1414 1543 +1413 1543 1542 +1414 1415 1543 +1415 1544 1543 +1415 1416 1545 +1415 1545 1544 +1416 1417 1545 +1417 1546 1545 +1417 1418 1547 +1417 1547 1546 +1418 1419 1547 +1419 1548 1547 +1420 1421 1549 +1421 1550 1549 +1421 1422 1551 +1421 1551 1550 +1422 1423 1551 +1423 1552 1551 +1423 1424 1553 +1423 1553 1552 +1424 1425 1553 +1425 1554 1553 +1425 1426 1555 +1425 1555 1554 +1426 1427 1555 +1427 1556 1555 +1427 1428 1557 +1427 1557 1556 +1428 1429 1557 +1429 1558 1557 +1429 1430 1559 +1429 1559 1558 +1430 1431 1559 +1431 1560 1559 +1431 1432 1561 +1431 1561 1560 +1432 1433 1561 +1433 1562 1561 +1433 1434 1563 +1433 1563 1562 +1434 1435 1563 +1435 1564 1563 +1435 1436 1565 +1435 1565 1564 +1436 1437 1565 +1437 1566 1565 +1437 1438 1567 +1437 1567 1566 +1438 1439 1567 +1439 1568 1567 +1439 1440 1569 +1439 1569 1568 +1440 1441 1569 +1441 1570 1569 +1441 1442 1571 +1441 1571 1570 +1442 1443 1571 +1443 1572 1571 +1443 1444 1573 +1443 1573 1572 +1444 1445 1573 +1445 1574 1573 +1445 1446 1575 +1445 1575 1574 +1446 1447 1575 +1447 1576 1575 +1447 1448 1577 +1447 1577 1576 +1448 1449 1577 +1449 1578 1577 +1449 1450 1579 +1449 1579 1578 +1450 1451 1579 +1451 1580 1579 +1451 1452 1581 +1451 1581 1580 +1452 1453 1581 +1453 1582 1581 +1453 1454 1583 +1453 1583 1582 +1454 1455 1583 +1455 1584 1583 +1455 1456 1585 +1455 1585 1584 +1456 1457 1585 +1457 1586 1585 +1457 1458 1587 +1457 1587 1586 +1458 1459 1587 +1459 1588 1587 +1459 1460 1589 +1459 1589 1588 +1460 1461 1589 +1461 1590 1589 +1461 1462 1591 +1461 1591 1590 +1462 1463 1591 +1463 1592 1591 +1463 1464 1593 +1463 1593 1592 +1464 1465 1593 +1465 1594 1593 +1465 1466 1595 +1465 1595 1594 +1466 1467 1595 +1467 1596 1595 +1467 1468 1597 +1467 1597 1596 +1468 1469 1597 +1469 1598 1597 +1469 1470 1599 +1469 1599 1598 +1470 1471 1599 +1471 1600 1599 +1471 1472 1601 +1471 1601 1600 +1472 1473 1601 +1473 1602 1601 +1473 1474 1603 +1473 1603 1602 +1474 1475 1603 +1475 1604 1603 +1475 1476 1605 +1475 1605 1604 +1476 1477 1605 +1477 1606 1605 +1477 1478 1607 +1477 1607 1606 +1478 1479 1607 +1479 1608 1607 +1479 1480 1609 +1479 1609 1608 +1480 1481 1609 +1481 1610 1609 +1481 1482 1611 +1481 1611 1610 +1482 1483 1611 +1483 1612 1611 +1483 1484 1613 +1483 1613 1612 +1484 1485 1613 +1485 1614 1613 +1485 1486 1615 +1485 1615 1614 +1486 1487 1615 +1487 1616 1615 +1487 1488 1617 +1487 1617 1616 +1488 1489 1617 +1489 1618 1617 +1489 1490 1619 +1489 1619 1618 +1490 1491 1619 +1491 1620 1619 +1491 1492 1621 +1491 1621 1620 +1492 1493 1621 +1493 1622 1621 +1493 1494 1623 +1493 1623 1622 +1494 1495 1623 +1495 1624 1623 +1495 1496 1625 +1495 1625 1624 +1496 1497 1625 +1497 1626 1625 +1497 1498 1627 +1497 1627 1626 +1498 1499 1627 +1499 1628 1627 +1499 1500 1629 +1499 1629 1628 +1500 1501 1629 +1501 1630 1629 +1501 1502 1631 +1501 1631 1630 +1502 1503 1631 +1503 1632 1631 +1503 1504 1633 +1503 1633 1632 +1504 1505 1633 +1505 1634 1633 +1505 1506 1635 +1505 1635 1634 +1506 1507 1635 +1507 1636 1635 +1507 1508 1637 +1507 1637 1636 +1508 1509 1637 +1509 1638 1637 +1509 1510 1639 +1509 1639 1638 +1510 1511 1639 +1511 1640 1639 +1511 1512 1641 +1511 1641 1640 +1512 1513 1641 +1513 1642 1641 +1513 1514 1643 +1513 1643 1642 +1514 1515 1643 +1515 1644 1643 +1515 1516 1645 +1515 1645 1644 +1516 1517 1645 +1517 1646 1645 +1517 1518 1647 +1517 1647 1646 +1518 1519 1647 +1519 1648 1647 +1519 1520 1649 +1519 1649 1648 +1520 1521 1649 +1521 1650 1649 +1521 1522 1651 +1521 1651 1650 +1522 1523 1651 +1523 1652 1651 +1523 1524 1653 +1523 1653 1652 +1524 1525 1653 +1525 1654 1653 +1525 1526 1655 +1525 1655 1654 +1526 1527 1655 +1527 1656 1655 +1527 1528 1657 +1527 1657 1656 +1528 1529 1657 +1529 1658 1657 +1529 1530 1659 +1529 1659 1658 +1530 1531 1659 +1531 1660 1659 +1531 1532 1661 +1531 1661 1660 +1532 1533 1661 +1533 1662 1661 +1533 1534 1663 +1533 1663 1662 +1534 1535 1663 +1535 1664 1663 +1535 1536 1665 +1535 1665 1664 +1536 1537 1665 +1537 1666 1665 +1537 1538 1667 +1537 1667 1666 +1538 1539 1667 +1539 1668 1667 +1539 1540 1669 +1539 1669 1668 +1540 1541 1669 +1541 1670 1669 +1541 1542 1671 +1541 1671 1670 +1542 1543 1671 +1543 1672 1671 +1543 1544 1673 +1543 1673 1672 +1544 1545 1673 +1545 1674 1673 +1545 1546 1675 +1545 1675 1674 +1546 1547 1675 +1547 1676 1675 +1547 1548 1677 +1547 1677 1676 +1549 1550 1679 +1549 1679 1678 +1550 1551 1679 +1551 1680 1679 +1551 1552 1681 +1551 1681 1680 +1552 1553 1681 +1553 1682 1681 +1553 1554 1683 +1553 1683 1682 +1554 1555 1683 +1555 1684 1683 +1555 1556 1685 +1555 1685 1684 +1556 1557 1685 +1557 1686 1685 +1557 1558 1687 +1557 1687 1686 +1558 1559 1687 +1559 1688 1687 +1559 1560 1689 +1559 1689 1688 +1560 1561 1689 +1561 1690 1689 +1561 1562 1691 +1561 1691 1690 +1562 1563 1691 +1563 1692 1691 +1563 1564 1693 +1563 1693 1692 +1564 1565 1693 +1565 1694 1693 +1565 1566 1695 +1565 1695 1694 +1566 1567 1695 +1567 1696 1695 +1567 1568 1697 +1567 1697 1696 +1568 1569 1697 +1569 1698 1697 +1569 1570 1699 +1569 1699 1698 +1570 1571 1699 +1571 1700 1699 +1571 1572 1701 +1571 1701 1700 +1572 1573 1701 +1573 1702 1701 +1573 1574 1703 +1573 1703 1702 +1574 1575 1703 +1575 1704 1703 +1575 1576 1705 +1575 1705 1704 +1576 1577 1705 +1577 1706 1705 +1577 1578 1707 +1577 1707 1706 +1578 1579 1707 +1579 1708 1707 +1579 1580 1709 +1579 1709 1708 +1580 1581 1709 +1581 1710 1709 +1581 1582 1711 +1581 1711 1710 +1582 1583 1711 +1583 1712 1711 +1583 1584 1713 +1583 1713 1712 +1584 1585 1713 +1585 1714 1713 +1585 1586 1715 +1585 1715 1714 +1586 1587 1715 +1587 1716 1715 +1587 1588 1717 +1587 1717 1716 +1588 1589 1717 +1589 1718 1717 +1589 1590 1719 +1589 1719 1718 +1590 1591 1719 +1591 1720 1719 +1591 1592 1721 +1591 1721 1720 +1592 1593 1721 +1593 1722 1721 +1593 1594 1723 +1593 1723 1722 +1594 1595 1723 +1595 1724 1723 +1595 1596 1725 +1595 1725 1724 +1596 1597 1725 +1597 1726 1725 +1597 1598 1727 +1597 1727 1726 +1598 1599 1727 +1599 1728 1727 +1599 1600 1729 +1599 1729 1728 +1600 1601 1729 +1601 1730 1729 +1601 1602 1731 +1601 1731 1730 +1602 1603 1731 +1603 1732 1731 +1603 1604 1733 +1603 1733 1732 +1604 1605 1733 +1605 1734 1733 +1605 1606 1735 +1605 1735 1734 +1606 1607 1735 +1607 1736 1735 +1607 1608 1737 +1607 1737 1736 +1608 1609 1737 +1609 1738 1737 +1609 1610 1739 +1609 1739 1738 +1610 1611 1739 +1611 1740 1739 +1611 1612 1741 +1611 1741 1740 +1612 1613 1741 +1613 1742 1741 +1613 1614 1743 +1613 1743 1742 +1614 1615 1743 +1615 1744 1743 +1615 1616 1745 +1615 1745 1744 +1616 1617 1745 +1617 1746 1745 +1617 1618 1747 +1617 1747 1746 +1618 1619 1747 +1619 1748 1747 +1619 1620 1749 +1619 1749 1748 +1620 1621 1749 +1621 1750 1749 +1621 1622 1751 +1621 1751 1750 +1622 1623 1751 +1623 1752 1751 +1623 1624 1753 +1623 1753 1752 +1624 1625 1753 +1625 1754 1753 +1625 1626 1755 +1625 1755 1754 +1626 1627 1755 +1627 1756 1755 +1627 1628 1757 +1627 1757 1756 +1628 1629 1757 +1629 1758 1757 +1629 1630 1759 +1629 1759 1758 +1630 1631 1759 +1631 1760 1759 +1631 1632 1761 +1631 1761 1760 +1632 1633 1761 +1633 1762 1761 +1633 1634 1763 +1633 1763 1762 +1634 1635 1763 +1635 1764 1763 +1635 1636 1765 +1635 1765 1764 +1636 1637 1765 +1637 1766 1765 +1637 1638 1767 +1637 1767 1766 +1638 1639 1767 +1639 1768 1767 +1639 1640 1769 +1639 1769 1768 +1640 1641 1769 +1641 1770 1769 +1641 1642 1771 +1641 1771 1770 +1642 1643 1771 +1643 1772 1771 +1643 1644 1773 +1643 1773 1772 +1644 1645 1773 +1645 1774 1773 +1645 1646 1775 +1645 1775 1774 +1646 1647 1775 +1647 1776 1775 +1647 1648 1777 +1647 1777 1776 +1648 1649 1777 +1649 1778 1777 +1649 1650 1779 +1649 1779 1778 +1650 1651 1779 +1651 1780 1779 +1651 1652 1781 +1651 1781 1780 +1652 1653 1781 +1653 1782 1781 +1653 1654 1783 +1653 1783 1782 +1654 1655 1783 +1655 1784 1783 +1655 1656 1785 +1655 1785 1784 +1656 1657 1785 +1657 1786 1785 +1657 1658 1787 +1657 1787 1786 +1658 1659 1787 +1659 1788 1787 +1659 1660 1789 +1659 1789 1788 +1660 1661 1789 +1661 1790 1789 +1661 1662 1791 +1661 1791 1790 +1662 1663 1791 +1663 1792 1791 +1663 1664 1793 +1663 1793 1792 +1664 1665 1793 +1665 1794 1793 +1665 1666 1795 +1665 1795 1794 +1666 1667 1795 +1667 1796 1795 +1667 1668 1797 +1667 1797 1796 +1668 1669 1797 +1669 1798 1797 +1669 1670 1799 +1669 1799 1798 +1670 1671 1799 +1671 1800 1799 +1671 1672 1801 +1671 1801 1800 +1672 1673 1801 +1673 1802 1801 +1673 1674 1803 +1673 1803 1802 +1674 1675 1803 +1675 1804 1803 +1675 1676 1805 +1675 1805 1804 +1676 1677 1805 +1677 1806 1805 +1678 1679 1807 +1679 1808 1807 +1679 1680 1809 +1679 1809 1808 +1680 1681 1809 +1681 1810 1809 +1681 1682 1811 +1681 1811 1810 +1682 1683 1811 +1683 1812 1811 +1683 1684 1813 +1683 1813 1812 +1684 1685 1813 +1685 1814 1813 +1685 1686 1815 +1685 1815 1814 +1686 1687 1815 +1687 1816 1815 +1687 1688 1817 +1687 1817 1816 +1688 1689 1817 +1689 1818 1817 +1689 1690 1819 +1689 1819 1818 +1690 1691 1819 +1691 1820 1819 +1691 1692 1821 +1691 1821 1820 +1692 1693 1821 +1693 1822 1821 +1693 1694 1823 +1693 1823 1822 +1694 1695 1823 +1695 1824 1823 +1695 1696 1825 +1695 1825 1824 +1696 1697 1825 +1697 1826 1825 +1697 1698 1827 +1697 1827 1826 +1698 1699 1827 +1699 1828 1827 +1699 1700 1829 +1699 1829 1828 +1700 1701 1829 +1701 1830 1829 +1701 1702 1831 +1701 1831 1830 +1702 1703 1831 +1703 1832 1831 +1703 1704 1833 +1703 1833 1832 +1704 1705 1833 +1705 1834 1833 +1705 1706 1835 +1705 1835 1834 +1706 1707 1835 +1707 1836 1835 +1707 1708 1837 +1707 1837 1836 +1708 1709 1837 +1709 1838 1837 +1709 1710 1839 +1709 1839 1838 +1710 1711 1839 +1711 1840 1839 +1711 1712 1841 +1711 1841 1840 +1712 1713 1841 +1713 1842 1841 +1713 1714 1843 +1713 1843 1842 +1714 1715 1843 +1715 1844 1843 +1715 1716 1845 +1715 1845 1844 +1716 1717 1845 +1717 1846 1845 +1717 1718 1847 +1717 1847 1846 +1718 1719 1847 +1719 1848 1847 +1719 1720 1849 +1719 1849 1848 +1720 1721 1849 +1721 1850 1849 +1721 1722 1851 +1721 1851 1850 +1722 1723 1851 +1723 1852 1851 +1723 1724 1853 +1723 1853 1852 +1724 1725 1853 +1725 1854 1853 +1725 1726 1855 +1725 1855 1854 +1726 1727 1855 +1727 1856 1855 +1727 1728 1857 +1727 1857 1856 +1728 1729 1857 +1729 1858 1857 +1729 1730 1859 +1729 1859 1858 +1730 1731 1859 +1731 1860 1859 +1731 1732 1861 +1731 1861 1860 +1732 1733 1861 +1733 1862 1861 +1733 1734 1863 +1733 1863 1862 +1734 1735 1863 +1735 1864 1863 +1735 1736 1865 +1735 1865 1864 +1736 1737 1865 +1737 1866 1865 +1737 1738 1867 +1737 1867 1866 +1738 1739 1867 +1739 1868 1867 +1739 1740 1869 +1739 1869 1868 +1740 1741 1869 +1741 1870 1869 +1741 1742 1871 +1741 1871 1870 +1742 1743 1871 +1743 1872 1871 +1743 1744 1873 +1743 1873 1872 +1744 1745 1873 +1745 1874 1873 +1745 1746 1875 +1745 1875 1874 +1746 1747 1875 +1747 1876 1875 +1747 1748 1877 +1747 1877 1876 +1748 1749 1877 +1749 1878 1877 +1749 1750 1879 +1749 1879 1878 +1750 1751 1879 +1751 1880 1879 +1751 1752 1881 +1751 1881 1880 +1752 1753 1881 +1753 1882 1881 +1753 1754 1883 +1753 1883 1882 +1754 1755 1883 +1755 1884 1883 +1755 1756 1885 +1755 1885 1884 +1756 1757 1885 +1757 1886 1885 +1757 1758 1887 +1757 1887 1886 +1758 1759 1887 +1759 1888 1887 +1759 1760 1889 +1759 1889 1888 +1760 1761 1889 +1761 1890 1889 +1761 1762 1891 +1761 1891 1890 +1762 1763 1891 +1763 1892 1891 +1763 1764 1893 +1763 1893 1892 +1764 1765 1893 +1765 1894 1893 +1765 1766 1895 +1765 1895 1894 +1766 1767 1895 +1767 1896 1895 +1767 1768 1897 +1767 1897 1896 +1768 1769 1897 +1769 1898 1897 +1769 1770 1899 +1769 1899 1898 +1770 1771 1899 +1771 1900 1899 +1771 1772 1901 +1771 1901 1900 +1772 1773 1901 +1773 1902 1901 +1773 1774 1903 +1773 1903 1902 +1774 1775 1903 +1775 1904 1903 +1775 1776 1905 +1775 1905 1904 +1776 1777 1905 +1777 1906 1905 +1777 1778 1907 +1777 1907 1906 +1778 1779 1907 +1779 1908 1907 +1779 1780 1909 +1779 1909 1908 +1780 1781 1909 +1781 1910 1909 +1781 1782 1911 +1781 1911 1910 +1782 1783 1911 +1783 1912 1911 +1783 1784 1913 +1783 1913 1912 +1784 1785 1913 +1785 1914 1913 +1785 1786 1915 +1785 1915 1914 +1786 1787 1915 +1787 1916 1915 +1787 1788 1917 +1787 1917 1916 +1788 1789 1917 +1789 1918 1917 +1789 1790 1919 +1789 1919 1918 +1790 1791 1919 +1791 1920 1919 +1791 1792 1921 +1791 1921 1920 +1792 1793 1921 +1793 1922 1921 +1793 1794 1923 +1793 1923 1922 +1794 1795 1923 +1795 1924 1923 +1795 1796 1925 +1795 1925 1924 +1796 1797 1925 +1797 1926 1925 +1797 1798 1927 +1797 1927 1926 +1798 1799 1927 +1799 1928 1927 +1799 1800 1929 +1799 1929 1928 +1800 1801 1929 +1801 1930 1929 +1801 1802 1931 +1801 1931 1930 +1802 1803 1931 +1803 1932 1931 +1803 1804 1933 +1803 1933 1932 +1804 1805 1933 +1805 1934 1933 +1805 1806 1935 +1805 1935 1934 +1807 1808 1937 +1807 1937 1936 +1808 1809 1937 +1809 1938 1937 +1809 1810 1939 +1809 1939 1938 +1810 1811 1939 +1811 1940 1939 +1811 1812 1941 +1811 1941 1940 +1812 1813 1941 +1813 1942 1941 +1813 1814 1943 +1813 1943 1942 +1814 1815 1943 +1815 1944 1943 +1815 1816 1945 +1815 1945 1944 +1816 1817 1945 +1817 1946 1945 +1817 1818 1947 +1817 1947 1946 +1818 1819 1947 +1819 1948 1947 +1819 1820 1949 +1819 1949 1948 +1820 1821 1949 +1821 1950 1949 +1821 1822 1951 +1821 1951 1950 +1822 1823 1951 +1823 1952 1951 +1823 1824 1953 +1823 1953 1952 +1824 1825 1953 +1825 1954 1953 +1825 1826 1955 +1825 1955 1954 +1826 1827 1955 +1827 1956 1955 +1827 1828 1957 +1827 1957 1956 +1828 1829 1957 +1829 1958 1957 +1829 1830 1959 +1829 1959 1958 +1830 1831 1959 +1831 1960 1959 +1831 1832 1961 +1831 1961 1960 +1832 1833 1961 +1833 1962 1961 +1833 1834 1963 +1833 1963 1962 +1834 1835 1963 +1835 1964 1963 +1835 1836 1965 +1835 1965 1964 +1836 1837 1965 +1837 1966 1965 +1837 1838 1967 +1837 1967 1966 +1838 1839 1967 +1839 1968 1967 +1839 1840 1969 +1839 1969 1968 +1840 1841 1969 +1841 1970 1969 +1841 1842 1971 +1841 1971 1970 +1842 1843 1971 +1843 1972 1971 +1843 1844 1973 +1843 1973 1972 +1844 1845 1973 +1845 1974 1973 +1845 1846 1975 +1845 1975 1974 +1846 1847 1975 +1847 1976 1975 +1847 1848 1977 +1847 1977 1976 +1848 1849 1977 +1849 1978 1977 +1849 1850 1979 +1849 1979 1978 +1850 1851 1979 +1851 1980 1979 +1851 1852 1981 +1851 1981 1980 +1852 1853 1981 +1853 1982 1981 +1853 1854 1983 +1853 1983 1982 +1854 1855 1983 +1855 1984 1983 +1855 1856 1985 +1855 1985 1984 +1856 1857 1985 +1857 1986 1985 +1857 1858 1987 +1857 1987 1986 +1858 1859 1987 +1859 1988 1987 +1859 1860 1989 +1859 1989 1988 +1860 1861 1989 +1861 1990 1989 +1861 1862 1991 +1861 1991 1990 +1862 1863 1991 +1863 1992 1991 +1863 1864 1993 +1863 1993 1992 +1864 1865 1993 +1865 1994 1993 +1865 1866 1995 +1865 1995 1994 +1866 1867 1995 +1867 1996 1995 +1867 1868 1997 +1867 1997 1996 +1868 1869 1997 +1869 1998 1997 +1869 1870 1999 +1869 1999 1998 +1870 1871 1999 +1871 2000 1999 +1871 1872 2001 +1871 2001 2000 +1872 1873 2001 +1873 2002 2001 +1873 1874 2003 +1873 2003 2002 +1874 1875 2003 +1875 2004 2003 +1875 1876 2005 +1875 2005 2004 +1876 1877 2005 +1877 2006 2005 +1877 1878 2007 +1877 2007 2006 +1878 1879 2007 +1879 2008 2007 +1879 1880 2009 +1879 2009 2008 +1880 1881 2009 +1881 2010 2009 +1881 1882 2011 +1881 2011 2010 +1882 1883 2011 +1883 2012 2011 +1883 1884 2013 +1883 2013 2012 +1884 1885 2013 +1885 2014 2013 +1885 1886 2015 +1885 2015 2014 +1886 1887 2015 +1887 2016 2015 +1887 1888 2017 +1887 2017 2016 +1888 1889 2017 +1889 2018 2017 +1889 1890 2019 +1889 2019 2018 +1890 1891 2019 +1891 2020 2019 +1891 1892 2021 +1891 2021 2020 +1892 1893 2021 +1893 2022 2021 +1893 1894 2023 +1893 2023 2022 +1894 1895 2023 +1895 2024 2023 +1895 1896 2025 +1895 2025 2024 +1896 1897 2025 +1897 2026 2025 +1897 1898 2027 +1897 2027 2026 +1898 1899 2027 +1899 2028 2027 +1899 1900 2029 +1899 2029 2028 +1900 1901 2029 +1901 2030 2029 +1901 1902 2031 +1901 2031 2030 +1902 1903 2031 +1903 2032 2031 +1903 1904 2033 +1903 2033 2032 +1904 1905 2033 +1905 2034 2033 +1905 1906 2035 +1905 2035 2034 +1906 1907 2035 +1907 2036 2035 +1907 1908 2037 +1907 2037 2036 +1908 1909 2037 +1909 2038 2037 +1909 1910 2039 +1909 2039 2038 +1910 1911 2039 +1911 2040 2039 +1911 1912 2041 +1911 2041 2040 +1912 1913 2041 +1913 2042 2041 +1913 1914 2043 +1913 2043 2042 +1914 1915 2043 +1915 2044 2043 +1915 1916 2045 +1915 2045 2044 +1916 1917 2045 +1917 2046 2045 +1917 1918 2047 +1917 2047 2046 +1918 1919 2047 +1919 2048 2047 +1919 1920 2049 +1919 2049 2048 +1920 1921 2049 +1921 2050 2049 +1921 1922 2051 +1921 2051 2050 +1922 1923 2051 +1923 2052 2051 +1923 1924 2053 +1923 2053 2052 +1924 1925 2053 +1925 2054 2053 +1925 1926 2055 +1925 2055 2054 +1926 1927 2055 +1927 2056 2055 +1927 1928 2057 +1927 2057 2056 +1928 1929 2057 +1929 2058 2057 +1929 1930 2059 +1929 2059 2058 +1930 1931 2059 +1931 2060 2059 +1931 1932 2061 +1931 2061 2060 +1932 1933 2061 +1933 2062 2061 +1933 1934 2063 +1933 2063 2062 +1934 1935 2063 +1935 2064 2063 +1936 1937 2065 +1937 2066 2065 +1937 1938 2067 +1937 2067 2066 +1938 1939 2067 +1939 2068 2067 +1939 1940 2069 +1939 2069 2068 +1940 1941 2069 +1941 2070 2069 +1941 1942 2071 +1941 2071 2070 +1942 1943 2071 +1943 2072 2071 +1943 1944 2073 +1943 2073 2072 +1944 1945 2073 +1945 2074 2073 +1945 1946 2075 +1945 2075 2074 +1946 1947 2075 +1947 2076 2075 +1947 1948 2077 +1947 2077 2076 +1948 1949 2077 +1949 2078 2077 +1949 1950 2079 +1949 2079 2078 +1950 1951 2079 +1951 2080 2079 +1951 1952 2081 +1951 2081 2080 +1952 1953 2081 +1953 2082 2081 +1953 1954 2083 +1953 2083 2082 +1954 1955 2083 +1955 2084 2083 +1955 1956 2085 +1955 2085 2084 +1956 1957 2085 +1957 2086 2085 +1957 1958 2087 +1957 2087 2086 +1958 1959 2087 +1959 2088 2087 +1959 1960 2089 +1959 2089 2088 +1960 1961 2089 +1961 2090 2089 +1961 1962 2091 +1961 2091 2090 +1962 1963 2091 +1963 2092 2091 +1963 1964 2093 +1963 2093 2092 +1964 1965 2093 +1965 2094 2093 +1965 1966 2095 +1965 2095 2094 +1966 1967 2095 +1967 2096 2095 +1967 1968 2097 +1967 2097 2096 +1968 1969 2097 +1969 2098 2097 +1969 1970 2099 +1969 2099 2098 +1970 1971 2099 +1971 2100 2099 +1971 1972 2101 +1971 2101 2100 +1972 1973 2101 +1973 2102 2101 +1973 1974 2103 +1973 2103 2102 +1974 1975 2103 +1975 2104 2103 +1975 1976 2105 +1975 2105 2104 +1976 1977 2105 +1977 2106 2105 +1977 1978 2107 +1977 2107 2106 +1978 1979 2107 +1979 2108 2107 +1979 1980 2109 +1979 2109 2108 +1980 1981 2109 +1981 2110 2109 +1981 1982 2111 +1981 2111 2110 +1982 1983 2111 +1983 2112 2111 +1983 1984 2113 +1983 2113 2112 +1984 1985 2113 +1985 2114 2113 +1985 1986 2115 +1985 2115 2114 +1986 1987 2115 +1987 2116 2115 +1987 1988 2117 +1987 2117 2116 +1988 1989 2117 +1989 2118 2117 +1989 1990 2119 +1989 2119 2118 +1990 1991 2119 +1991 2120 2119 +1991 1992 2121 +1991 2121 2120 +1992 1993 2121 +1993 2122 2121 +1993 1994 2123 +1993 2123 2122 +1994 1995 2123 +1995 2124 2123 +1995 1996 2125 +1995 2125 2124 +1996 1997 2125 +1997 2126 2125 +1997 1998 2127 +1997 2127 2126 +1998 1999 2127 +1999 2128 2127 +1999 2000 2129 +1999 2129 2128 +2000 2001 2129 +2001 2130 2129 +2001 2002 2131 +2001 2131 2130 +2002 2003 2131 +2003 2132 2131 +2003 2004 2133 +2003 2133 2132 +2004 2005 2133 +2005 2134 2133 +2005 2006 2135 +2005 2135 2134 +2006 2007 2135 +2007 2136 2135 +2007 2008 2137 +2007 2137 2136 +2008 2009 2137 +2009 2138 2137 +2009 2010 2139 +2009 2139 2138 +2010 2011 2139 +2011 2140 2139 +2011 2012 2141 +2011 2141 2140 +2012 2013 2141 +2013 2142 2141 +2013 2014 2143 +2013 2143 2142 +2014 2015 2143 +2015 2144 2143 +2015 2016 2145 +2015 2145 2144 +2016 2017 2145 +2017 2146 2145 +2017 2018 2147 +2017 2147 2146 +2018 2019 2147 +2019 2148 2147 +2019 2020 2149 +2019 2149 2148 +2020 2021 2149 +2021 2150 2149 +2021 2022 2151 +2021 2151 2150 +2022 2023 2151 +2023 2152 2151 +2023 2024 2153 +2023 2153 2152 +2024 2025 2153 +2025 2154 2153 +2025 2026 2155 +2025 2155 2154 +2026 2027 2155 +2027 2156 2155 +2027 2028 2157 +2027 2157 2156 +2028 2029 2157 +2029 2158 2157 +2029 2030 2159 +2029 2159 2158 +2030 2031 2159 +2031 2160 2159 +2031 2032 2161 +2031 2161 2160 +2032 2033 2161 +2033 2162 2161 +2033 2034 2163 +2033 2163 2162 +2034 2035 2163 +2035 2164 2163 +2035 2036 2165 +2035 2165 2164 +2036 2037 2165 +2037 2166 2165 +2037 2038 2167 +2037 2167 2166 +2038 2039 2167 +2039 2168 2167 +2039 2040 2169 +2039 2169 2168 +2040 2041 2169 +2041 2170 2169 +2041 2042 2171 +2041 2171 2170 +2042 2043 2171 +2043 2172 2171 +2043 2044 2173 +2043 2173 2172 +2044 2045 2173 +2045 2174 2173 +2045 2046 2175 +2045 2175 2174 +2046 2047 2175 +2047 2176 2175 +2047 2048 2177 +2047 2177 2176 +2048 2049 2177 +2049 2178 2177 +2049 2050 2179 +2049 2179 2178 +2050 2051 2179 +2051 2180 2179 +2051 2052 2181 +2051 2181 2180 +2052 2053 2181 +2053 2182 2181 +2053 2054 2183 +2053 2183 2182 +2054 2055 2183 +2055 2184 2183 +2055 2056 2185 +2055 2185 2184 +2056 2057 2185 +2057 2186 2185 +2057 2058 2187 +2057 2187 2186 +2058 2059 2187 +2059 2188 2187 +2059 2060 2189 +2059 2189 2188 +2060 2061 2189 +2061 2190 2189 +2061 2062 2191 +2061 2191 2190 +2062 2063 2191 +2063 2192 2191 +2063 2064 2193 +2063 2193 2192 +2065 2066 2195 +2065 2195 2194 +2066 2067 2195 +2067 2196 2195 +2067 2068 2197 +2067 2197 2196 +2068 2069 2197 +2069 2198 2197 +2069 2070 2199 +2069 2199 2198 +2070 2071 2199 +2071 2200 2199 +2071 2072 2201 +2071 2201 2200 +2072 2073 2201 +2073 2202 2201 +2073 2074 2203 +2073 2203 2202 +2074 2075 2203 +2075 2204 2203 +2075 2076 2205 +2075 2205 2204 +2076 2077 2205 +2077 2206 2205 +2077 2078 2207 +2077 2207 2206 +2078 2079 2207 +2079 2208 2207 +2079 2080 2209 +2079 2209 2208 +2080 2081 2209 +2081 2210 2209 +2081 2082 2211 +2081 2211 2210 +2082 2083 2211 +2083 2212 2211 +2083 2084 2213 +2083 2213 2212 +2084 2085 2213 +2085 2214 2213 +2085 2086 2215 +2085 2215 2214 +2086 2087 2215 +2087 2216 2215 +2087 2088 2217 +2087 2217 2216 +2088 2089 2217 +2089 2218 2217 +2089 2090 2219 +2089 2219 2218 +2090 2091 2219 +2091 2220 2219 +2091 2092 2221 +2091 2221 2220 +2092 2093 2221 +2093 2222 2221 +2093 2094 2223 +2093 2223 2222 +2094 2095 2223 +2095 2224 2223 +2095 2096 2225 +2095 2225 2224 +2096 2097 2225 +2097 2226 2225 +2097 2098 2227 +2097 2227 2226 +2098 2099 2227 +2099 2228 2227 +2099 2100 2229 +2099 2229 2228 +2100 2101 2229 +2101 2230 2229 +2101 2102 2231 +2101 2231 2230 +2102 2103 2231 +2103 2232 2231 +2103 2104 2233 +2103 2233 2232 +2104 2105 2233 +2105 2234 2233 +2105 2106 2235 +2105 2235 2234 +2106 2107 2235 +2107 2236 2235 +2107 2108 2237 +2107 2237 2236 +2108 2109 2237 +2109 2238 2237 +2109 2110 2239 +2109 2239 2238 +2110 2111 2239 +2111 2240 2239 +2111 2112 2241 +2111 2241 2240 +2112 2113 2241 +2113 2242 2241 +2113 2114 2243 +2113 2243 2242 +2114 2115 2243 +2115 2244 2243 +2115 2116 2245 +2115 2245 2244 +2116 2117 2245 +2117 2246 2245 +2117 2118 2247 +2117 2247 2246 +2118 2119 2247 +2119 2248 2247 +2119 2120 2249 +2119 2249 2248 +2120 2121 2249 +2121 2250 2249 +2121 2122 2251 +2121 2251 2250 +2122 2123 2251 +2123 2252 2251 +2123 2124 2253 +2123 2253 2252 +2124 2125 2253 +2125 2254 2253 +2125 2126 2255 +2125 2255 2254 +2126 2127 2255 +2127 2256 2255 +2127 2128 2257 +2127 2257 2256 +2128 2129 2257 +2129 2258 2257 +2129 2130 2259 +2129 2259 2258 +2130 2131 2259 +2131 2260 2259 +2131 2132 2261 +2131 2261 2260 +2132 2133 2261 +2133 2262 2261 +2133 2134 2263 +2133 2263 2262 +2134 2135 2263 +2135 2264 2263 +2135 2136 2265 +2135 2265 2264 +2136 2137 2265 +2137 2266 2265 +2137 2138 2267 +2137 2267 2266 +2138 2139 2267 +2139 2268 2267 +2139 2140 2269 +2139 2269 2268 +2140 2141 2269 +2141 2270 2269 +2141 2142 2271 +2141 2271 2270 +2142 2143 2271 +2143 2272 2271 +2143 2144 2273 +2143 2273 2272 +2144 2145 2273 +2145 2274 2273 +2145 2146 2275 +2145 2275 2274 +2146 2147 2275 +2147 2276 2275 +2147 2148 2277 +2147 2277 2276 +2148 2149 2277 +2149 2278 2277 +2149 2150 2279 +2149 2279 2278 +2150 2151 2279 +2151 2280 2279 +2151 2152 2281 +2151 2281 2280 +2152 2153 2281 +2153 2282 2281 +2153 2154 2283 +2153 2283 2282 +2154 2155 2283 +2155 2284 2283 +2155 2156 2285 +2155 2285 2284 +2156 2157 2285 +2157 2286 2285 +2157 2158 2287 +2157 2287 2286 +2158 2159 2287 +2159 2288 2287 +2159 2160 2289 +2159 2289 2288 +2160 2161 2289 +2161 2290 2289 +2161 2162 2291 +2161 2291 2290 +2162 2163 2291 +2163 2292 2291 +2163 2164 2293 +2163 2293 2292 +2164 2165 2293 +2165 2294 2293 +2165 2166 2295 +2165 2295 2294 +2166 2167 2295 +2167 2296 2295 +2167 2168 2297 +2167 2297 2296 +2168 2169 2297 +2169 2298 2297 +2169 2170 2299 +2169 2299 2298 +2170 2171 2299 +2171 2300 2299 +2171 2172 2301 +2171 2301 2300 +2172 2173 2301 +2173 2302 2301 +2173 2174 2303 +2173 2303 2302 +2174 2175 2303 +2175 2304 2303 +2175 2176 2305 +2175 2305 2304 +2176 2177 2305 +2177 2306 2305 +2177 2178 2307 +2177 2307 2306 +2178 2179 2307 +2179 2308 2307 +2179 2180 2309 +2179 2309 2308 +2180 2181 2309 +2181 2310 2309 +2181 2182 2311 +2181 2311 2310 +2182 2183 2311 +2183 2312 2311 +2183 2184 2313 +2183 2313 2312 +2184 2185 2313 +2185 2314 2313 +2185 2186 2315 +2185 2315 2314 +2186 2187 2315 +2187 2316 2315 +2187 2188 2317 +2187 2317 2316 +2188 2189 2317 +2189 2318 2317 +2189 2190 2319 +2189 2319 2318 +2190 2191 2319 +2191 2320 2319 +2191 2192 2321 +2191 2321 2320 +2192 2193 2321 +2193 2322 2321 +2194 2195 2323 +2195 2324 2323 +2195 2196 2325 +2195 2325 2324 +2196 2197 2325 +2197 2326 2325 +2197 2198 2327 +2197 2327 2326 +2198 2199 2327 +2199 2328 2327 +2199 2200 2329 +2199 2329 2328 +2200 2201 2329 +2201 2330 2329 +2201 2202 2331 +2201 2331 2330 +2202 2203 2331 +2203 2332 2331 +2203 2204 2333 +2203 2333 2332 +2204 2205 2333 +2205 2334 2333 +2205 2206 2335 +2205 2335 2334 +2206 2207 2335 +2207 2336 2335 +2207 2208 2337 +2207 2337 2336 +2208 2209 2337 +2209 2338 2337 +2209 2210 2339 +2209 2339 2338 +2210 2211 2339 +2211 2340 2339 +2211 2212 2341 +2211 2341 2340 +2212 2213 2341 +2213 2342 2341 +2213 2214 2343 +2213 2343 2342 +2214 2215 2343 +2215 2344 2343 +2215 2216 2345 +2215 2345 2344 +2216 2217 2345 +2217 2346 2345 +2217 2218 2347 +2217 2347 2346 +2218 2219 2347 +2219 2348 2347 +2219 2220 2349 +2219 2349 2348 +2220 2221 2349 +2221 2350 2349 +2221 2222 2351 +2221 2351 2350 +2222 2223 2351 +2223 2352 2351 +2223 2224 2353 +2223 2353 2352 +2224 2225 2353 +2225 2354 2353 +2225 2226 2355 +2225 2355 2354 +2226 2227 2355 +2227 2356 2355 +2227 2228 2357 +2227 2357 2356 +2228 2229 2357 +2229 2358 2357 +2229 2230 2359 +2229 2359 2358 +2230 2231 2359 +2231 2360 2359 +2231 2232 2361 +2231 2361 2360 +2232 2233 2361 +2233 2362 2361 +2233 2234 2363 +2233 2363 2362 +2234 2235 2363 +2235 2364 2363 +2235 2236 2365 +2235 2365 2364 +2236 2237 2365 +2237 2366 2365 +2237 2238 2367 +2237 2367 2366 +2238 2239 2367 +2239 2368 2367 +2239 2240 2369 +2239 2369 2368 +2240 2241 2369 +2241 2370 2369 +2241 2242 2371 +2241 2371 2370 +2242 2243 2371 +2243 2372 2371 +2243 2244 2373 +2243 2373 2372 +2244 2245 2373 +2245 2374 2373 +2245 2246 2375 +2245 2375 2374 +2246 2247 2375 +2247 2376 2375 +2247 2248 2377 +2247 2377 2376 +2248 2249 2377 +2249 2378 2377 +2249 2250 2379 +2249 2379 2378 +2250 2251 2379 +2251 2380 2379 +2251 2252 2381 +2251 2381 2380 +2252 2253 2381 +2253 2382 2381 +2253 2254 2383 +2253 2383 2382 +2254 2255 2383 +2255 2384 2383 +2255 2256 2385 +2255 2385 2384 +2256 2257 2385 +2257 2386 2385 +2257 2258 2387 +2257 2387 2386 +2258 2259 2387 +2259 2388 2387 +2259 2260 2389 +2259 2389 2388 +2260 2261 2389 +2261 2390 2389 +2261 2262 2391 +2261 2391 2390 +2262 2263 2391 +2263 2392 2391 +2263 2264 2393 +2263 2393 2392 +2264 2265 2393 +2265 2394 2393 +2265 2266 2395 +2265 2395 2394 +2266 2267 2395 +2267 2396 2395 +2267 2268 2397 +2267 2397 2396 +2268 2269 2397 +2269 2398 2397 +2269 2270 2399 +2269 2399 2398 +2270 2271 2399 +2271 2400 2399 +2271 2272 2401 +2271 2401 2400 +2272 2273 2401 +2273 2402 2401 +2273 2274 2403 +2273 2403 2402 +2274 2275 2403 +2275 2404 2403 +2275 2276 2405 +2275 2405 2404 +2276 2277 2405 +2277 2406 2405 +2277 2278 2407 +2277 2407 2406 +2278 2279 2407 +2279 2408 2407 +2279 2280 2409 +2279 2409 2408 +2280 2281 2409 +2281 2410 2409 +2281 2282 2411 +2281 2411 2410 +2282 2283 2411 +2283 2412 2411 +2283 2284 2413 +2283 2413 2412 +2284 2285 2413 +2285 2414 2413 +2285 2286 2415 +2285 2415 2414 +2286 2287 2415 +2287 2416 2415 +2287 2288 2417 +2287 2417 2416 +2288 2289 2417 +2289 2418 2417 +2289 2290 2419 +2289 2419 2418 +2290 2291 2419 +2291 2420 2419 +2291 2292 2421 +2291 2421 2420 +2292 2293 2421 +2293 2422 2421 +2293 2294 2423 +2293 2423 2422 +2294 2295 2423 +2295 2424 2423 +2295 2296 2425 +2295 2425 2424 +2296 2297 2425 +2297 2426 2425 +2297 2298 2427 +2297 2427 2426 +2298 2299 2427 +2299 2428 2427 +2299 2300 2429 +2299 2429 2428 +2300 2301 2429 +2301 2430 2429 +2301 2302 2431 +2301 2431 2430 +2302 2303 2431 +2303 2432 2431 +2303 2304 2433 +2303 2433 2432 +2304 2305 2433 +2305 2434 2433 +2305 2306 2435 +2305 2435 2434 +2306 2307 2435 +2307 2436 2435 +2307 2308 2437 +2307 2437 2436 +2308 2309 2437 +2309 2438 2437 +2309 2310 2439 +2309 2439 2438 +2310 2311 2439 +2311 2440 2439 +2311 2312 2441 +2311 2441 2440 +2312 2313 2441 +2313 2442 2441 +2313 2314 2443 +2313 2443 2442 +2314 2315 2443 +2315 2444 2443 +2315 2316 2445 +2315 2445 2444 +2316 2317 2445 +2317 2446 2445 +2317 2318 2447 +2317 2447 2446 +2318 2319 2447 +2319 2448 2447 +2319 2320 2449 +2319 2449 2448 +2320 2321 2449 +2321 2450 2449 +2321 2322 2451 +2321 2451 2450 +2323 2324 2453 +2323 2453 2452 +2324 2325 2453 +2325 2454 2453 +2325 2326 2455 +2325 2455 2454 +2326 2327 2455 +2327 2456 2455 +2327 2328 2457 +2327 2457 2456 +2328 2329 2457 +2329 2458 2457 +2329 2330 2459 +2329 2459 2458 +2330 2331 2459 +2331 2460 2459 +2331 2332 2461 +2331 2461 2460 +2332 2333 2461 +2333 2462 2461 +2333 2334 2463 +2333 2463 2462 +2334 2335 2463 +2335 2464 2463 +2335 2336 2465 +2335 2465 2464 +2336 2337 2465 +2337 2466 2465 +2337 2338 2467 +2337 2467 2466 +2338 2339 2467 +2339 2468 2467 +2339 2340 2469 +2339 2469 2468 +2340 2341 2469 +2341 2470 2469 +2341 2342 2471 +2341 2471 2470 +2342 2343 2471 +2343 2472 2471 +2343 2344 2473 +2343 2473 2472 +2344 2345 2473 +2345 2474 2473 +2345 2346 2475 +2345 2475 2474 +2346 2347 2475 +2347 2476 2475 +2347 2348 2477 +2347 2477 2476 +2348 2349 2477 +2349 2478 2477 +2349 2350 2479 +2349 2479 2478 +2350 2351 2479 +2351 2480 2479 +2351 2352 2481 +2351 2481 2480 +2352 2353 2481 +2353 2482 2481 +2353 2354 2483 +2353 2483 2482 +2354 2355 2483 +2355 2484 2483 +2355 2356 2485 +2355 2485 2484 +2356 2357 2485 +2357 2486 2485 +2357 2358 2487 +2357 2487 2486 +2358 2359 2487 +2359 2488 2487 +2359 2360 2489 +2359 2489 2488 +2360 2361 2489 +2361 2490 2489 +2361 2362 2491 +2361 2491 2490 +2362 2363 2491 +2363 2492 2491 +2363 2364 2493 +2363 2493 2492 +2364 2365 2493 +2365 2494 2493 +2365 2366 2495 +2365 2495 2494 +2366 2367 2495 +2367 2496 2495 +2367 2368 2497 +2367 2497 2496 +2368 2369 2497 +2369 2498 2497 +2369 2370 2499 +2369 2499 2498 +2370 2371 2499 +2371 2500 2499 +2371 2372 2501 +2371 2501 2500 +2372 2373 2501 +2373 2502 2501 +2373 2374 2503 +2373 2503 2502 +2374 2375 2503 +2375 2504 2503 +2375 2376 2505 +2375 2505 2504 +2376 2377 2505 +2377 2506 2505 +2377 2378 2507 +2377 2507 2506 +2378 2379 2507 +2379 2508 2507 +2379 2380 2509 +2379 2509 2508 +2380 2381 2509 +2381 2510 2509 +2381 2382 2511 +2381 2511 2510 +2382 2383 2511 +2383 2512 2511 +2383 2384 2513 +2383 2513 2512 +2384 2385 2513 +2385 2514 2513 +2385 2386 2515 +2385 2515 2514 +2386 2387 2515 +2387 2516 2515 +2387 2388 2517 +2387 2517 2516 +2388 2389 2517 +2389 2518 2517 +2389 2390 2519 +2389 2519 2518 +2390 2391 2519 +2391 2520 2519 +2391 2392 2521 +2391 2521 2520 +2392 2393 2521 +2393 2522 2521 +2393 2394 2523 +2393 2523 2522 +2394 2395 2523 +2395 2524 2523 +2395 2396 2525 +2395 2525 2524 +2396 2397 2525 +2397 2526 2525 +2397 2398 2527 +2397 2527 2526 +2398 2399 2527 +2399 2528 2527 +2399 2400 2529 +2399 2529 2528 +2400 2401 2529 +2401 2530 2529 +2401 2402 2531 +2401 2531 2530 +2402 2403 2531 +2403 2532 2531 +2403 2404 2533 +2403 2533 2532 +2404 2405 2533 +2405 2534 2533 +2405 2406 2535 +2405 2535 2534 +2406 2407 2535 +2407 2536 2535 +2407 2408 2537 +2407 2537 2536 +2408 2409 2537 +2409 2538 2537 +2409 2410 2539 +2409 2539 2538 +2410 2411 2539 +2411 2540 2539 +2411 2412 2541 +2411 2541 2540 +2412 2413 2541 +2413 2542 2541 +2413 2414 2543 +2413 2543 2542 +2414 2415 2543 +2415 2544 2543 +2415 2416 2545 +2415 2545 2544 +2416 2417 2545 +2417 2546 2545 +2417 2418 2547 +2417 2547 2546 +2418 2419 2547 +2419 2548 2547 +2419 2420 2549 +2419 2549 2548 +2420 2421 2549 +2421 2550 2549 +2421 2422 2551 +2421 2551 2550 +2422 2423 2551 +2423 2552 2551 +2423 2424 2553 +2423 2553 2552 +2424 2425 2553 +2425 2554 2553 +2425 2426 2555 +2425 2555 2554 +2426 2427 2555 +2427 2556 2555 +2427 2428 2557 +2427 2557 2556 +2428 2429 2557 +2429 2558 2557 +2429 2430 2559 +2429 2559 2558 +2430 2431 2559 +2431 2560 2559 +2431 2432 2561 +2431 2561 2560 +2432 2433 2561 +2433 2562 2561 +2433 2434 2563 +2433 2563 2562 +2434 2435 2563 +2435 2564 2563 +2435 2436 2565 +2435 2565 2564 +2436 2437 2565 +2437 2566 2565 +2437 2438 2567 +2437 2567 2566 +2438 2439 2567 +2439 2568 2567 +2439 2440 2569 +2439 2569 2568 +2440 2441 2569 +2441 2570 2569 +2441 2442 2571 +2441 2571 2570 +2442 2443 2571 +2443 2572 2571 +2443 2444 2573 +2443 2573 2572 +2444 2445 2573 +2445 2574 2573 +2445 2446 2575 +2445 2575 2574 +2446 2447 2575 +2447 2576 2575 +2447 2448 2577 +2447 2577 2576 +2448 2449 2577 +2449 2578 2577 +2449 2450 2579 +2449 2579 2578 +2450 2451 2579 +2451 2580 2579 +2452 2453 2581 +2453 2582 2581 +2453 2454 2583 +2453 2583 2582 +2454 2455 2583 +2455 2584 2583 +2455 2456 2585 +2455 2585 2584 +2456 2457 2585 +2457 2586 2585 +2457 2458 2587 +2457 2587 2586 +2458 2459 2587 +2459 2588 2587 +2459 2460 2589 +2459 2589 2588 +2460 2461 2589 +2461 2590 2589 +2461 2462 2591 +2461 2591 2590 +2462 2463 2591 +2463 2592 2591 +2463 2464 2593 +2463 2593 2592 +2464 2465 2593 +2465 2594 2593 +2465 2466 2595 +2465 2595 2594 +2466 2467 2595 +2467 2596 2595 +2467 2468 2597 +2467 2597 2596 +2468 2469 2597 +2469 2598 2597 +2469 2470 2599 +2469 2599 2598 +2470 2471 2599 +2471 2600 2599 +2471 2472 2601 +2471 2601 2600 +2472 2473 2601 +2473 2602 2601 +2473 2474 2603 +2473 2603 2602 +2474 2475 2603 +2475 2604 2603 +2475 2476 2605 +2475 2605 2604 +2476 2477 2605 +2477 2606 2605 +2477 2478 2607 +2477 2607 2606 +2478 2479 2607 +2479 2608 2607 +2479 2480 2609 +2479 2609 2608 +2480 2481 2609 +2481 2610 2609 +2481 2482 2611 +2481 2611 2610 +2482 2483 2611 +2483 2612 2611 +2483 2484 2613 +2483 2613 2612 +2484 2485 2613 +2485 2614 2613 +2485 2486 2615 +2485 2615 2614 +2486 2487 2615 +2487 2616 2615 +2487 2488 2617 +2487 2617 2616 +2488 2489 2617 +2489 2618 2617 +2489 2490 2619 +2489 2619 2618 +2490 2491 2619 +2491 2620 2619 +2491 2492 2621 +2491 2621 2620 +2492 2493 2621 +2493 2622 2621 +2493 2494 2623 +2493 2623 2622 +2494 2495 2623 +2495 2624 2623 +2495 2496 2625 +2495 2625 2624 +2496 2497 2625 +2497 2626 2625 +2497 2498 2627 +2497 2627 2626 +2498 2499 2627 +2499 2628 2627 +2499 2500 2629 +2499 2629 2628 +2500 2501 2629 +2501 2630 2629 +2501 2502 2631 +2501 2631 2630 +2502 2503 2631 +2503 2632 2631 +2503 2504 2633 +2503 2633 2632 +2504 2505 2633 +2505 2634 2633 +2505 2506 2635 +2505 2635 2634 +2506 2507 2635 +2507 2636 2635 +2507 2508 2637 +2507 2637 2636 +2508 2509 2637 +2509 2638 2637 +2509 2510 2639 +2509 2639 2638 +2510 2511 2639 +2511 2640 2639 +2511 2512 2641 +2511 2641 2640 +2512 2513 2641 +2513 2642 2641 +2513 2514 2643 +2513 2643 2642 +2514 2515 2643 +2515 2644 2643 +2515 2516 2645 +2515 2645 2644 +2516 2517 2645 +2517 2646 2645 +2517 2518 2647 +2517 2647 2646 +2518 2519 2647 +2519 2648 2647 +2519 2520 2649 +2519 2649 2648 +2520 2521 2649 +2521 2650 2649 +2521 2522 2651 +2521 2651 2650 +2522 2523 2651 +2523 2652 2651 +2523 2524 2653 +2523 2653 2652 +2524 2525 2653 +2525 2654 2653 +2525 2526 2655 +2525 2655 2654 +2526 2527 2655 +2527 2656 2655 +2527 2528 2657 +2527 2657 2656 +2528 2529 2657 +2529 2658 2657 +2529 2530 2659 +2529 2659 2658 +2530 2531 2659 +2531 2660 2659 +2531 2532 2661 +2531 2661 2660 +2532 2533 2661 +2533 2662 2661 +2533 2534 2663 +2533 2663 2662 +2534 2535 2663 +2535 2664 2663 +2535 2536 2665 +2535 2665 2664 +2536 2537 2665 +2537 2666 2665 +2537 2538 2667 +2537 2667 2666 +2538 2539 2667 +2539 2668 2667 +2539 2540 2669 +2539 2669 2668 +2540 2541 2669 +2541 2670 2669 +2541 2542 2671 +2541 2671 2670 +2542 2543 2671 +2543 2672 2671 +2543 2544 2673 +2543 2673 2672 +2544 2545 2673 +2545 2674 2673 +2545 2546 2675 +2545 2675 2674 +2546 2547 2675 +2547 2676 2675 +2547 2548 2677 +2547 2677 2676 +2548 2549 2677 +2549 2678 2677 +2549 2550 2679 +2549 2679 2678 +2550 2551 2679 +2551 2680 2679 +2551 2552 2681 +2551 2681 2680 +2552 2553 2681 +2553 2682 2681 +2553 2554 2683 +2553 2683 2682 +2554 2555 2683 +2555 2684 2683 +2555 2556 2685 +2555 2685 2684 +2556 2557 2685 +2557 2686 2685 +2557 2558 2687 +2557 2687 2686 +2558 2559 2687 +2559 2688 2687 +2559 2560 2689 +2559 2689 2688 +2560 2561 2689 +2561 2690 2689 +2561 2562 2691 +2561 2691 2690 +2562 2563 2691 +2563 2692 2691 +2563 2564 2693 +2563 2693 2692 +2564 2565 2693 +2565 2694 2693 +2565 2566 2695 +2565 2695 2694 +2566 2567 2695 +2567 2696 2695 +2567 2568 2697 +2567 2697 2696 +2568 2569 2697 +2569 2698 2697 +2569 2570 2699 +2569 2699 2698 +2570 2571 2699 +2571 2700 2699 +2571 2572 2701 +2571 2701 2700 +2572 2573 2701 +2573 2702 2701 +2573 2574 2703 +2573 2703 2702 +2574 2575 2703 +2575 2704 2703 +2575 2576 2705 +2575 2705 2704 +2576 2577 2705 +2577 2706 2705 +2577 2578 2707 +2577 2707 2706 +2578 2579 2707 +2579 2708 2707 +2579 2580 2709 +2579 2709 2708 +2581 2582 2711 +2581 2711 2710 +2582 2583 2711 +2583 2712 2711 +2583 2584 2713 +2583 2713 2712 +2584 2585 2713 +2585 2714 2713 +2585 2586 2715 +2585 2715 2714 +2586 2587 2715 +2587 2716 2715 +2587 2588 2717 +2587 2717 2716 +2588 2589 2717 +2589 2718 2717 +2589 2590 2719 +2589 2719 2718 +2590 2591 2719 +2591 2720 2719 +2591 2592 2721 +2591 2721 2720 +2592 2593 2721 +2593 2722 2721 +2593 2594 2723 +2593 2723 2722 +2594 2595 2723 +2595 2724 2723 +2595 2596 2725 +2595 2725 2724 +2596 2597 2725 +2597 2726 2725 +2597 2598 2727 +2597 2727 2726 +2598 2599 2727 +2599 2728 2727 +2599 2600 2729 +2599 2729 2728 +2600 2601 2729 +2601 2730 2729 +2601 2602 2731 +2601 2731 2730 +2602 2603 2731 +2603 2732 2731 +2603 2604 2733 +2603 2733 2732 +2604 2605 2733 +2605 2734 2733 +2605 2606 2735 +2605 2735 2734 +2606 2607 2735 +2607 2736 2735 +2607 2608 2737 +2607 2737 2736 +2608 2609 2737 +2609 2738 2737 +2609 2610 2739 +2609 2739 2738 +2610 2611 2739 +2611 2740 2739 +2611 2612 2741 +2611 2741 2740 +2612 2613 2741 +2613 2742 2741 +2613 2614 2743 +2613 2743 2742 +2614 2615 2743 +2615 2744 2743 +2615 2616 2745 +2615 2745 2744 +2616 2617 2745 +2617 2746 2745 +2617 2618 2747 +2617 2747 2746 +2618 2619 2747 +2619 2748 2747 +2619 2620 2749 +2619 2749 2748 +2620 2621 2749 +2621 2750 2749 +2621 2622 2751 +2621 2751 2750 +2622 2623 2751 +2623 2752 2751 +2623 2624 2753 +2623 2753 2752 +2624 2625 2753 +2625 2754 2753 +2625 2626 2755 +2625 2755 2754 +2626 2627 2755 +2627 2756 2755 +2627 2628 2757 +2627 2757 2756 +2628 2629 2757 +2629 2758 2757 +2629 2630 2759 +2629 2759 2758 +2630 2631 2759 +2631 2760 2759 +2631 2632 2761 +2631 2761 2760 +2632 2633 2761 +2633 2762 2761 +2633 2634 2763 +2633 2763 2762 +2634 2635 2763 +2635 2764 2763 +2635 2636 2765 +2635 2765 2764 +2636 2637 2765 +2637 2766 2765 +2637 2638 2767 +2637 2767 2766 +2638 2639 2767 +2639 2768 2767 +2639 2640 2769 +2639 2769 2768 +2640 2641 2769 +2641 2770 2769 +2641 2642 2771 +2641 2771 2770 +2642 2643 2771 +2643 2772 2771 +2643 2644 2773 +2643 2773 2772 +2644 2645 2773 +2645 2774 2773 +2645 2646 2775 +2645 2775 2774 +2646 2647 2775 +2647 2776 2775 +2647 2648 2777 +2647 2777 2776 +2648 2649 2777 +2649 2778 2777 +2649 2650 2779 +2649 2779 2778 +2650 2651 2779 +2651 2780 2779 +2651 2652 2781 +2651 2781 2780 +2652 2653 2781 +2653 2782 2781 +2653 2654 2783 +2653 2783 2782 +2654 2655 2783 +2655 2784 2783 +2655 2656 2785 +2655 2785 2784 +2656 2657 2785 +2657 2786 2785 +2657 2658 2787 +2657 2787 2786 +2658 2659 2787 +2659 2788 2787 +2659 2660 2789 +2659 2789 2788 +2660 2661 2789 +2661 2790 2789 +2661 2662 2791 +2661 2791 2790 +2662 2663 2791 +2663 2792 2791 +2663 2664 2793 +2663 2793 2792 +2664 2665 2793 +2665 2794 2793 +2665 2666 2795 +2665 2795 2794 +2666 2667 2795 +2667 2796 2795 +2667 2668 2797 +2667 2797 2796 +2668 2669 2797 +2669 2798 2797 +2669 2670 2799 +2669 2799 2798 +2670 2671 2799 +2671 2800 2799 +2671 2672 2801 +2671 2801 2800 +2672 2673 2801 +2673 2802 2801 +2673 2674 2803 +2673 2803 2802 +2674 2675 2803 +2675 2804 2803 +2675 2676 2805 +2675 2805 2804 +2676 2677 2805 +2677 2806 2805 +2677 2678 2807 +2677 2807 2806 +2678 2679 2807 +2679 2808 2807 +2679 2680 2809 +2679 2809 2808 +2680 2681 2809 +2681 2810 2809 +2681 2682 2811 +2681 2811 2810 +2682 2683 2811 +2683 2812 2811 +2683 2684 2813 +2683 2813 2812 +2684 2685 2813 +2685 2814 2813 +2685 2686 2815 +2685 2815 2814 +2686 2687 2815 +2687 2816 2815 +2687 2688 2817 +2687 2817 2816 +2688 2689 2817 +2689 2818 2817 +2689 2690 2819 +2689 2819 2818 +2690 2691 2819 +2691 2820 2819 +2691 2692 2821 +2691 2821 2820 +2692 2693 2821 +2693 2822 2821 +2693 2694 2823 +2693 2823 2822 +2694 2695 2823 +2695 2824 2823 +2695 2696 2825 +2695 2825 2824 +2696 2697 2825 +2697 2826 2825 +2697 2698 2827 +2697 2827 2826 +2698 2699 2827 +2699 2828 2827 +2699 2700 2829 +2699 2829 2828 +2700 2701 2829 +2701 2830 2829 +2701 2702 2831 +2701 2831 2830 +2702 2703 2831 +2703 2832 2831 +2703 2704 2833 +2703 2833 2832 +2704 2705 2833 +2705 2834 2833 +2705 2706 2835 +2705 2835 2834 +2706 2707 2835 +2707 2836 2835 +2707 2708 2837 +2707 2837 2836 +2708 2709 2837 +2709 2838 2837 +2710 2711 2839 +2711 2840 2839 +2711 2712 2841 +2711 2841 2840 +2712 2713 2841 +2713 2842 2841 +2713 2714 2843 +2713 2843 2842 +2714 2715 2843 +2715 2844 2843 +2715 2716 2845 +2715 2845 2844 +2716 2717 2845 +2717 2846 2845 +2717 2718 2847 +2717 2847 2846 +2718 2719 2847 +2719 2848 2847 +2719 2720 2849 +2719 2849 2848 +2720 2721 2849 +2721 2850 2849 +2721 2722 2851 +2721 2851 2850 +2722 2723 2851 +2723 2852 2851 +2723 2724 2853 +2723 2853 2852 +2724 2725 2853 +2725 2854 2853 +2725 2726 2855 +2725 2855 2854 +2726 2727 2855 +2727 2856 2855 +2727 2728 2857 +2727 2857 2856 +2728 2729 2857 +2729 2858 2857 +2729 2730 2859 +2729 2859 2858 +2730 2731 2859 +2731 2860 2859 +2731 2732 2861 +2731 2861 2860 +2732 2733 2861 +2733 2862 2861 +2733 2734 2863 +2733 2863 2862 +2734 2735 2863 +2735 2864 2863 +2735 2736 2865 +2735 2865 2864 +2736 2737 2865 +2737 2866 2865 +2737 2738 2867 +2737 2867 2866 +2738 2739 2867 +2739 2868 2867 +2739 2740 2869 +2739 2869 2868 +2740 2741 2869 +2741 2870 2869 +2741 2742 2871 +2741 2871 2870 +2742 2743 2871 +2743 2872 2871 +2743 2744 2873 +2743 2873 2872 +2744 2745 2873 +2745 2874 2873 +2745 2746 2875 +2745 2875 2874 +2746 2747 2875 +2747 2876 2875 +2747 2748 2877 +2747 2877 2876 +2748 2749 2877 +2749 2878 2877 +2749 2750 2879 +2749 2879 2878 +2750 2751 2879 +2751 2880 2879 +2751 2752 2881 +2751 2881 2880 +2752 2753 2881 +2753 2882 2881 +2753 2754 2883 +2753 2883 2882 +2754 2755 2883 +2755 2884 2883 +2755 2756 2885 +2755 2885 2884 +2756 2757 2885 +2757 2886 2885 +2757 2758 2887 +2757 2887 2886 +2758 2759 2887 +2759 2888 2887 +2759 2760 2889 +2759 2889 2888 +2760 2761 2889 +2761 2890 2889 +2761 2762 2891 +2761 2891 2890 +2762 2763 2891 +2763 2892 2891 +2763 2764 2893 +2763 2893 2892 +2764 2765 2893 +2765 2894 2893 +2765 2766 2895 +2765 2895 2894 +2766 2767 2895 +2767 2896 2895 +2767 2768 2897 +2767 2897 2896 +2768 2769 2897 +2769 2898 2897 +2769 2770 2899 +2769 2899 2898 +2770 2771 2899 +2771 2900 2899 +2771 2772 2901 +2771 2901 2900 +2772 2773 2901 +2773 2902 2901 +2773 2774 2903 +2773 2903 2902 +2774 2775 2903 +2775 2904 2903 +2775 2776 2905 +2775 2905 2904 +2776 2777 2905 +2777 2906 2905 +2777 2778 2907 +2777 2907 2906 +2778 2779 2907 +2779 2908 2907 +2779 2780 2909 +2779 2909 2908 +2780 2781 2909 +2781 2910 2909 +2781 2782 2911 +2781 2911 2910 +2782 2783 2911 +2783 2912 2911 +2783 2784 2913 +2783 2913 2912 +2784 2785 2913 +2785 2914 2913 +2785 2786 2915 +2785 2915 2914 +2786 2787 2915 +2787 2916 2915 +2787 2788 2917 +2787 2917 2916 +2788 2789 2917 +2789 2918 2917 +2789 2790 2919 +2789 2919 2918 +2790 2791 2919 +2791 2920 2919 +2791 2792 2921 +2791 2921 2920 +2792 2793 2921 +2793 2922 2921 +2793 2794 2923 +2793 2923 2922 +2794 2795 2923 +2795 2924 2923 +2795 2796 2925 +2795 2925 2924 +2796 2797 2925 +2797 2926 2925 +2797 2798 2927 +2797 2927 2926 +2798 2799 2927 +2799 2928 2927 +2799 2800 2929 +2799 2929 2928 +2800 2801 2929 +2801 2930 2929 +2801 2802 2931 +2801 2931 2930 +2802 2803 2931 +2803 2932 2931 +2803 2804 2933 +2803 2933 2932 +2804 2805 2933 +2805 2934 2933 +2805 2806 2935 +2805 2935 2934 +2806 2807 2935 +2807 2936 2935 +2807 2808 2937 +2807 2937 2936 +2808 2809 2937 +2809 2938 2937 +2809 2810 2939 +2809 2939 2938 +2810 2811 2939 +2811 2940 2939 +2811 2812 2941 +2811 2941 2940 +2812 2813 2941 +2813 2942 2941 +2813 2814 2943 +2813 2943 2942 +2814 2815 2943 +2815 2944 2943 +2815 2816 2945 +2815 2945 2944 +2816 2817 2945 +2817 2946 2945 +2817 2818 2947 +2817 2947 2946 +2818 2819 2947 +2819 2948 2947 +2819 2820 2949 +2819 2949 2948 +2820 2821 2949 +2821 2950 2949 +2821 2822 2951 +2821 2951 2950 +2822 2823 2951 +2823 2952 2951 +2823 2824 2953 +2823 2953 2952 +2824 2825 2953 +2825 2954 2953 +2825 2826 2955 +2825 2955 2954 +2826 2827 2955 +2827 2956 2955 +2827 2828 2957 +2827 2957 2956 +2828 2829 2957 +2829 2958 2957 +2829 2830 2959 +2829 2959 2958 +2830 2831 2959 +2831 2960 2959 +2831 2832 2961 +2831 2961 2960 +2832 2833 2961 +2833 2962 2961 +2833 2834 2963 +2833 2963 2962 +2834 2835 2963 +2835 2964 2963 +2835 2836 2965 +2835 2965 2964 +2836 2837 2965 +2837 2966 2965 +2837 2838 2967 +2837 2967 2966 +2839 2840 2969 +2839 2969 2968 +2840 2841 2969 +2841 2970 2969 +2841 2842 2971 +2841 2971 2970 +2842 2843 2971 +2843 2972 2971 +2843 2844 2973 +2843 2973 2972 +2844 2845 2973 +2845 2974 2973 +2845 2846 2975 +2845 2975 2974 +2846 2847 2975 +2847 2976 2975 +2847 2848 2977 +2847 2977 2976 +2848 2849 2977 +2849 2978 2977 +2849 2850 2979 +2849 2979 2978 +2850 2851 2979 +2851 2980 2979 +2851 2852 2981 +2851 2981 2980 +2852 2853 2981 +2853 2982 2981 +2853 2854 2983 +2853 2983 2982 +2854 2855 2983 +2855 2984 2983 +2855 2856 2985 +2855 2985 2984 +2856 2857 2985 +2857 2986 2985 +2857 2858 2987 +2857 2987 2986 +2858 2859 2987 +2859 2988 2987 +2859 2860 2989 +2859 2989 2988 +2860 2861 2989 +2861 2990 2989 +2861 2862 2991 +2861 2991 2990 +2862 2863 2991 +2863 2992 2991 +2863 2864 2993 +2863 2993 2992 +2864 2865 2993 +2865 2994 2993 +2865 2866 2995 +2865 2995 2994 +2866 2867 2995 +2867 2996 2995 +2867 2868 2997 +2867 2997 2996 +2868 2869 2997 +2869 2998 2997 +2869 2870 2999 +2869 2999 2998 +2870 2871 2999 +2871 3000 2999 +2871 2872 3001 +2871 3001 3000 +2872 2873 3001 +2873 3002 3001 +2873 2874 3003 +2873 3003 3002 +2874 2875 3003 +2875 3004 3003 +2875 2876 3005 +2875 3005 3004 +2876 2877 3005 +2877 3006 3005 +2877 2878 3007 +2877 3007 3006 +2878 2879 3007 +2879 3008 3007 +2879 2880 3009 +2879 3009 3008 +2880 2881 3009 +2881 3010 3009 +2881 2882 3011 +2881 3011 3010 +2882 2883 3011 +2883 3012 3011 +2883 2884 3013 +2883 3013 3012 +2884 2885 3013 +2885 3014 3013 +2885 2886 3015 +2885 3015 3014 +2886 2887 3015 +2887 3016 3015 +2887 2888 3017 +2887 3017 3016 +2888 2889 3017 +2889 3018 3017 +2889 2890 3019 +2889 3019 3018 +2890 2891 3019 +2891 3020 3019 +2891 2892 3021 +2891 3021 3020 +2892 2893 3021 +2893 3022 3021 +2893 2894 3023 +2893 3023 3022 +2894 2895 3023 +2895 3024 3023 +2895 2896 3025 +2895 3025 3024 +2896 2897 3025 +2897 3026 3025 +2897 2898 3027 +2897 3027 3026 +2898 2899 3027 +2899 3028 3027 +2899 2900 3029 +2899 3029 3028 +2900 2901 3029 +2901 3030 3029 +2901 2902 3031 +2901 3031 3030 +2902 2903 3031 +2903 3032 3031 +2903 2904 3033 +2903 3033 3032 +2904 2905 3033 +2905 3034 3033 +2905 2906 3035 +2905 3035 3034 +2906 2907 3035 +2907 3036 3035 +2907 2908 3037 +2907 3037 3036 +2908 2909 3037 +2909 3038 3037 +2909 2910 3039 +2909 3039 3038 +2910 2911 3039 +2911 3040 3039 +2911 2912 3041 +2911 3041 3040 +2912 2913 3041 +2913 3042 3041 +2913 2914 3043 +2913 3043 3042 +2914 2915 3043 +2915 3044 3043 +2915 2916 3045 +2915 3045 3044 +2916 2917 3045 +2917 3046 3045 +2917 2918 3047 +2917 3047 3046 +2918 2919 3047 +2919 3048 3047 +2919 2920 3049 +2919 3049 3048 +2920 2921 3049 +2921 3050 3049 +2921 2922 3051 +2921 3051 3050 +2922 2923 3051 +2923 3052 3051 +2923 2924 3053 +2923 3053 3052 +2924 2925 3053 +2925 3054 3053 +2925 2926 3055 +2925 3055 3054 +2926 2927 3055 +2927 3056 3055 +2927 2928 3057 +2927 3057 3056 +2928 2929 3057 +2929 3058 3057 +2929 2930 3059 +2929 3059 3058 +2930 2931 3059 +2931 3060 3059 +2931 2932 3061 +2931 3061 3060 +2932 2933 3061 +2933 3062 3061 +2933 2934 3063 +2933 3063 3062 +2934 2935 3063 +2935 3064 3063 +2935 2936 3065 +2935 3065 3064 +2936 2937 3065 +2937 3066 3065 +2937 2938 3067 +2937 3067 3066 +2938 2939 3067 +2939 3068 3067 +2939 2940 3069 +2939 3069 3068 +2940 2941 3069 +2941 3070 3069 +2941 2942 3071 +2941 3071 3070 +2942 2943 3071 +2943 3072 3071 +2943 2944 3073 +2943 3073 3072 +2944 2945 3073 +2945 3074 3073 +2945 2946 3075 +2945 3075 3074 +2946 2947 3075 +2947 3076 3075 +2947 2948 3077 +2947 3077 3076 +2948 2949 3077 +2949 3078 3077 +2949 2950 3079 +2949 3079 3078 +2950 2951 3079 +2951 3080 3079 +2951 2952 3081 +2951 3081 3080 +2952 2953 3081 +2953 3082 3081 +2953 2954 3083 +2953 3083 3082 +2954 2955 3083 +2955 3084 3083 +2955 2956 3085 +2955 3085 3084 +2956 2957 3085 +2957 3086 3085 +2957 2958 3087 +2957 3087 3086 +2958 2959 3087 +2959 3088 3087 +2959 2960 3089 +2959 3089 3088 +2960 2961 3089 +2961 3090 3089 +2961 2962 3091 +2961 3091 3090 +2962 2963 3091 +2963 3092 3091 +2963 2964 3093 +2963 3093 3092 +2964 2965 3093 +2965 3094 3093 +2965 2966 3095 +2965 3095 3094 +2966 2967 3095 +2967 3096 3095 +2968 2969 3097 +2969 3098 3097 +2969 2970 3099 +2969 3099 3098 +2970 2971 3099 +2971 3100 3099 +2971 2972 3101 +2971 3101 3100 +2972 2973 3101 +2973 3102 3101 +2973 2974 3103 +2973 3103 3102 +2974 2975 3103 +2975 3104 3103 +2975 2976 3105 +2975 3105 3104 +2976 2977 3105 +2977 3106 3105 +2977 2978 3107 +2977 3107 3106 +2978 2979 3107 +2979 3108 3107 +2979 2980 3109 +2979 3109 3108 +2980 2981 3109 +2981 3110 3109 +2981 2982 3111 +2981 3111 3110 +2982 2983 3111 +2983 3112 3111 +2983 2984 3113 +2983 3113 3112 +2984 2985 3113 +2985 3114 3113 +2985 2986 3115 +2985 3115 3114 +2986 2987 3115 +2987 3116 3115 +2987 2988 3117 +2987 3117 3116 +2988 2989 3117 +2989 3118 3117 +2989 2990 3119 +2989 3119 3118 +2990 2991 3119 +2991 3120 3119 +2991 2992 3121 +2991 3121 3120 +2992 2993 3121 +2993 3122 3121 +2993 2994 3123 +2993 3123 3122 +2994 2995 3123 +2995 3124 3123 +2995 2996 3125 +2995 3125 3124 +2996 2997 3125 +2997 3126 3125 +2997 2998 3127 +2997 3127 3126 +2998 2999 3127 +2999 3128 3127 +2999 3000 3129 +2999 3129 3128 +3000 3001 3129 +3001 3130 3129 +3001 3002 3131 +3001 3131 3130 +3002 3003 3131 +3003 3132 3131 +3003 3004 3133 +3003 3133 3132 +3004 3005 3133 +3005 3134 3133 +3005 3006 3135 +3005 3135 3134 +3006 3007 3135 +3007 3136 3135 +3007 3008 3137 +3007 3137 3136 +3008 3009 3137 +3009 3138 3137 +3009 3010 3139 +3009 3139 3138 +3010 3011 3139 +3011 3140 3139 +3011 3012 3141 +3011 3141 3140 +3012 3013 3141 +3013 3142 3141 +3013 3014 3143 +3013 3143 3142 +3014 3015 3143 +3015 3144 3143 +3015 3016 3145 +3015 3145 3144 +3016 3017 3145 +3017 3146 3145 +3017 3018 3147 +3017 3147 3146 +3018 3019 3147 +3019 3148 3147 +3019 3020 3149 +3019 3149 3148 +3020 3021 3149 +3021 3150 3149 +3021 3022 3151 +3021 3151 3150 +3022 3023 3151 +3023 3152 3151 +3023 3024 3153 +3023 3153 3152 +3024 3025 3153 +3025 3154 3153 +3025 3026 3155 +3025 3155 3154 +3026 3027 3155 +3027 3156 3155 +3027 3028 3157 +3027 3157 3156 +3028 3029 3157 +3029 3158 3157 +3029 3030 3159 +3029 3159 3158 +3030 3031 3159 +3031 3160 3159 +3031 3032 3161 +3031 3161 3160 +3032 3033 3161 +3033 3162 3161 +3033 3034 3163 +3033 3163 3162 +3034 3035 3163 +3035 3164 3163 +3035 3036 3165 +3035 3165 3164 +3036 3037 3165 +3037 3166 3165 +3037 3038 3167 +3037 3167 3166 +3038 3039 3167 +3039 3168 3167 +3039 3040 3169 +3039 3169 3168 +3040 3041 3169 +3041 3170 3169 +3041 3042 3171 +3041 3171 3170 +3042 3043 3171 +3043 3172 3171 +3043 3044 3173 +3043 3173 3172 +3044 3045 3173 +3045 3174 3173 +3045 3046 3175 +3045 3175 3174 +3046 3047 3175 +3047 3176 3175 +3047 3048 3177 +3047 3177 3176 +3048 3049 3177 +3049 3178 3177 +3049 3050 3179 +3049 3179 3178 +3050 3051 3179 +3051 3180 3179 +3051 3052 3181 +3051 3181 3180 +3052 3053 3181 +3053 3182 3181 +3053 3054 3183 +3053 3183 3182 +3054 3055 3183 +3055 3184 3183 +3055 3056 3185 +3055 3185 3184 +3056 3057 3185 +3057 3186 3185 +3057 3058 3187 +3057 3187 3186 +3058 3059 3187 +3059 3188 3187 +3059 3060 3189 +3059 3189 3188 +3060 3061 3189 +3061 3190 3189 +3061 3062 3191 +3061 3191 3190 +3062 3063 3191 +3063 3192 3191 +3063 3064 3193 +3063 3193 3192 +3064 3065 3193 +3065 3194 3193 +3065 3066 3195 +3065 3195 3194 +3066 3067 3195 +3067 3196 3195 +3067 3068 3197 +3067 3197 3196 +3068 3069 3197 +3069 3198 3197 +3069 3070 3199 +3069 3199 3198 +3070 3071 3199 +3071 3200 3199 +3071 3072 3201 +3071 3201 3200 +3072 3073 3201 +3073 3202 3201 +3073 3074 3203 +3073 3203 3202 +3074 3075 3203 +3075 3204 3203 +3075 3076 3205 +3075 3205 3204 +3076 3077 3205 +3077 3206 3205 +3077 3078 3207 +3077 3207 3206 +3078 3079 3207 +3079 3208 3207 +3079 3080 3209 +3079 3209 3208 +3080 3081 3209 +3081 3210 3209 +3081 3082 3211 +3081 3211 3210 +3082 3083 3211 +3083 3212 3211 +3083 3084 3213 +3083 3213 3212 +3084 3085 3213 +3085 3214 3213 +3085 3086 3215 +3085 3215 3214 +3086 3087 3215 +3087 3216 3215 +3087 3088 3217 +3087 3217 3216 +3088 3089 3217 +3089 3218 3217 +3089 3090 3219 +3089 3219 3218 +3090 3091 3219 +3091 3220 3219 +3091 3092 3221 +3091 3221 3220 +3092 3093 3221 +3093 3222 3221 +3093 3094 3223 +3093 3223 3222 +3094 3095 3223 +3095 3224 3223 +3095 3096 3225 +3095 3225 3224 +3097 3098 3227 +3097 3227 3226 +3098 3099 3227 +3099 3228 3227 +3099 3100 3229 +3099 3229 3228 +3100 3101 3229 +3101 3230 3229 +3101 3102 3231 +3101 3231 3230 +3102 3103 3231 +3103 3232 3231 +3103 3104 3233 +3103 3233 3232 +3104 3105 3233 +3105 3234 3233 +3105 3106 3235 +3105 3235 3234 +3106 3107 3235 +3107 3236 3235 +3107 3108 3237 +3107 3237 3236 +3108 3109 3237 +3109 3238 3237 +3109 3110 3239 +3109 3239 3238 +3110 3111 3239 +3111 3240 3239 +3111 3112 3241 +3111 3241 3240 +3112 3113 3241 +3113 3242 3241 +3113 3114 3243 +3113 3243 3242 +3114 3115 3243 +3115 3244 3243 +3115 3116 3245 +3115 3245 3244 +3116 3117 3245 +3117 3246 3245 +3117 3118 3247 +3117 3247 3246 +3118 3119 3247 +3119 3248 3247 +3119 3120 3249 +3119 3249 3248 +3120 3121 3249 +3121 3250 3249 +3121 3122 3251 +3121 3251 3250 +3122 3123 3251 +3123 3252 3251 +3123 3124 3253 +3123 3253 3252 +3124 3125 3253 +3125 3254 3253 +3125 3126 3255 +3125 3255 3254 +3126 3127 3255 +3127 3256 3255 +3127 3128 3257 +3127 3257 3256 +3128 3129 3257 +3129 3258 3257 +3129 3130 3259 +3129 3259 3258 +3130 3131 3259 +3131 3260 3259 +3131 3132 3261 +3131 3261 3260 +3132 3133 3261 +3133 3262 3261 +3133 3134 3263 +3133 3263 3262 +3134 3135 3263 +3135 3264 3263 +3135 3136 3265 +3135 3265 3264 +3136 3137 3265 +3137 3266 3265 +3137 3138 3267 +3137 3267 3266 +3138 3139 3267 +3139 3268 3267 +3139 3140 3269 +3139 3269 3268 +3140 3141 3269 +3141 3270 3269 +3141 3142 3271 +3141 3271 3270 +3142 3143 3271 +3143 3272 3271 +3143 3144 3273 +3143 3273 3272 +3144 3145 3273 +3145 3274 3273 +3145 3146 3275 +3145 3275 3274 +3146 3147 3275 +3147 3276 3275 +3147 3148 3277 +3147 3277 3276 +3148 3149 3277 +3149 3278 3277 +3149 3150 3279 +3149 3279 3278 +3150 3151 3279 +3151 3280 3279 +3151 3152 3281 +3151 3281 3280 +3152 3153 3281 +3153 3282 3281 +3153 3154 3283 +3153 3283 3282 +3154 3155 3283 +3155 3284 3283 +3155 3156 3285 +3155 3285 3284 +3156 3157 3285 +3157 3286 3285 +3157 3158 3287 +3157 3287 3286 +3158 3159 3287 +3159 3288 3287 +3159 3160 3289 +3159 3289 3288 +3160 3161 3289 +3161 3290 3289 +3161 3162 3291 +3161 3291 3290 +3162 3163 3291 +3163 3292 3291 +3163 3164 3293 +3163 3293 3292 +3164 3165 3293 +3165 3294 3293 +3165 3166 3295 +3165 3295 3294 +3166 3167 3295 +3167 3296 3295 +3167 3168 3297 +3167 3297 3296 +3168 3169 3297 +3169 3298 3297 +3169 3170 3299 +3169 3299 3298 +3170 3171 3299 +3171 3300 3299 +3171 3172 3301 +3171 3301 3300 +3172 3173 3301 +3173 3302 3301 +3173 3174 3303 +3173 3303 3302 +3174 3175 3303 +3175 3304 3303 +3175 3176 3305 +3175 3305 3304 +3176 3177 3305 +3177 3306 3305 +3177 3178 3307 +3177 3307 3306 +3178 3179 3307 +3179 3308 3307 +3179 3180 3309 +3179 3309 3308 +3180 3181 3309 +3181 3310 3309 +3181 3182 3311 +3181 3311 3310 +3182 3183 3311 +3183 3312 3311 +3183 3184 3313 +3183 3313 3312 +3184 3185 3313 +3185 3314 3313 +3185 3186 3315 +3185 3315 3314 +3186 3187 3315 +3187 3316 3315 +3187 3188 3317 +3187 3317 3316 +3188 3189 3317 +3189 3318 3317 +3189 3190 3319 +3189 3319 3318 +3190 3191 3319 +3191 3320 3319 +3191 3192 3321 +3191 3321 3320 +3192 3193 3321 +3193 3322 3321 +3193 3194 3323 +3193 3323 3322 +3194 3195 3323 +3195 3324 3323 +3195 3196 3325 +3195 3325 3324 +3196 3197 3325 +3197 3326 3325 +3197 3198 3327 +3197 3327 3326 +3198 3199 3327 +3199 3328 3327 +3199 3200 3329 +3199 3329 3328 +3200 3201 3329 +3201 3330 3329 +3201 3202 3331 +3201 3331 3330 +3202 3203 3331 +3203 3332 3331 +3203 3204 3333 +3203 3333 3332 +3204 3205 3333 +3205 3334 3333 +3205 3206 3335 +3205 3335 3334 +3206 3207 3335 +3207 3336 3335 +3207 3208 3337 +3207 3337 3336 +3208 3209 3337 +3209 3338 3337 +3209 3210 3339 +3209 3339 3338 +3210 3211 3339 +3211 3340 3339 +3211 3212 3341 +3211 3341 3340 +3212 3213 3341 +3213 3342 3341 +3213 3214 3343 +3213 3343 3342 +3214 3215 3343 +3215 3344 3343 +3215 3216 3345 +3215 3345 3344 +3216 3217 3345 +3217 3346 3345 +3217 3218 3347 +3217 3347 3346 +3218 3219 3347 +3219 3348 3347 +3219 3220 3349 +3219 3349 3348 +3220 3221 3349 +3221 3350 3349 +3221 3222 3351 +3221 3351 3350 +3222 3223 3351 +3223 3352 3351 +3223 3224 3353 +3223 3353 3352 +3224 3225 3353 +3225 3354 3353 +3226 3227 3355 +3227 3356 3355 +3227 3228 3357 +3227 3357 3356 +3228 3229 3357 +3229 3358 3357 +3229 3230 3359 +3229 3359 3358 +3230 3231 3359 +3231 3360 3359 +3231 3232 3361 +3231 3361 3360 +3232 3233 3361 +3233 3362 3361 +3233 3234 3363 +3233 3363 3362 +3234 3235 3363 +3235 3364 3363 +3235 3236 3365 +3235 3365 3364 +3236 3237 3365 +3237 3366 3365 +3237 3238 3367 +3237 3367 3366 +3238 3239 3367 +3239 3368 3367 +3239 3240 3369 +3239 3369 3368 +3240 3241 3369 +3241 3370 3369 +3241 3242 3371 +3241 3371 3370 +3242 3243 3371 +3243 3372 3371 +3243 3244 3373 +3243 3373 3372 +3244 3245 3373 +3245 3374 3373 +3245 3246 3375 +3245 3375 3374 +3246 3247 3375 +3247 3376 3375 +3247 3248 3377 +3247 3377 3376 +3248 3249 3377 +3249 3378 3377 +3249 3250 3379 +3249 3379 3378 +3250 3251 3379 +3251 3380 3379 +3251 3252 3381 +3251 3381 3380 +3252 3253 3381 +3253 3382 3381 +3253 3254 3383 +3253 3383 3382 +3254 3255 3383 +3255 3384 3383 +3255 3256 3385 +3255 3385 3384 +3256 3257 3385 +3257 3386 3385 +3257 3258 3387 +3257 3387 3386 +3258 3259 3387 +3259 3388 3387 +3259 3260 3389 +3259 3389 3388 +3260 3261 3389 +3261 3390 3389 +3261 3262 3391 +3261 3391 3390 +3262 3263 3391 +3263 3392 3391 +3263 3264 3393 +3263 3393 3392 +3264 3265 3393 +3265 3394 3393 +3265 3266 3395 +3265 3395 3394 +3266 3267 3395 +3267 3396 3395 +3267 3268 3397 +3267 3397 3396 +3268 3269 3397 +3269 3398 3397 +3269 3270 3399 +3269 3399 3398 +3270 3271 3399 +3271 3400 3399 +3271 3272 3401 +3271 3401 3400 +3272 3273 3401 +3273 3402 3401 +3273 3274 3403 +3273 3403 3402 +3274 3275 3403 +3275 3404 3403 +3275 3276 3405 +3275 3405 3404 +3276 3277 3405 +3277 3406 3405 +3277 3278 3407 +3277 3407 3406 +3278 3279 3407 +3279 3408 3407 +3279 3280 3409 +3279 3409 3408 +3280 3281 3409 +3281 3410 3409 +3281 3282 3411 +3281 3411 3410 +3282 3283 3411 +3283 3412 3411 +3283 3284 3413 +3283 3413 3412 +3284 3285 3413 +3285 3414 3413 +3285 3286 3415 +3285 3415 3414 +3286 3287 3415 +3287 3416 3415 +3287 3288 3417 +3287 3417 3416 +3288 3289 3417 +3289 3418 3417 +3289 3290 3419 +3289 3419 3418 +3290 3291 3419 +3291 3420 3419 +3291 3292 3421 +3291 3421 3420 +3292 3293 3421 +3293 3422 3421 +3293 3294 3423 +3293 3423 3422 +3294 3295 3423 +3295 3424 3423 +3295 3296 3425 +3295 3425 3424 +3296 3297 3425 +3297 3426 3425 +3297 3298 3427 +3297 3427 3426 +3298 3299 3427 +3299 3428 3427 +3299 3300 3429 +3299 3429 3428 +3300 3301 3429 +3301 3430 3429 +3301 3302 3431 +3301 3431 3430 +3302 3303 3431 +3303 3432 3431 +3303 3304 3433 +3303 3433 3432 +3304 3305 3433 +3305 3434 3433 +3305 3306 3435 +3305 3435 3434 +3306 3307 3435 +3307 3436 3435 +3307 3308 3437 +3307 3437 3436 +3308 3309 3437 +3309 3438 3437 +3309 3310 3439 +3309 3439 3438 +3310 3311 3439 +3311 3440 3439 +3311 3312 3441 +3311 3441 3440 +3312 3313 3441 +3313 3442 3441 +3313 3314 3443 +3313 3443 3442 +3314 3315 3443 +3315 3444 3443 +3315 3316 3445 +3315 3445 3444 +3316 3317 3445 +3317 3446 3445 +3317 3318 3447 +3317 3447 3446 +3318 3319 3447 +3319 3448 3447 +3319 3320 3449 +3319 3449 3448 +3320 3321 3449 +3321 3450 3449 +3321 3322 3451 +3321 3451 3450 +3322 3323 3451 +3323 3452 3451 +3323 3324 3453 +3323 3453 3452 +3324 3325 3453 +3325 3454 3453 +3325 3326 3455 +3325 3455 3454 +3326 3327 3455 +3327 3456 3455 +3327 3328 3457 +3327 3457 3456 +3328 3329 3457 +3329 3458 3457 +3329 3330 3459 +3329 3459 3458 +3330 3331 3459 +3331 3460 3459 +3331 3332 3461 +3331 3461 3460 +3332 3333 3461 +3333 3462 3461 +3333 3334 3463 +3333 3463 3462 +3334 3335 3463 +3335 3464 3463 +3335 3336 3465 +3335 3465 3464 +3336 3337 3465 +3337 3466 3465 +3337 3338 3467 +3337 3467 3466 +3338 3339 3467 +3339 3468 3467 +3339 3340 3469 +3339 3469 3468 +3340 3341 3469 +3341 3470 3469 +3341 3342 3471 +3341 3471 3470 +3342 3343 3471 +3343 3472 3471 +3343 3344 3473 +3343 3473 3472 +3344 3345 3473 +3345 3474 3473 +3345 3346 3475 +3345 3475 3474 +3346 3347 3475 +3347 3476 3475 +3347 3348 3477 +3347 3477 3476 +3348 3349 3477 +3349 3478 3477 +3349 3350 3479 +3349 3479 3478 +3350 3351 3479 +3351 3480 3479 +3351 3352 3481 +3351 3481 3480 +3352 3353 3481 +3353 3482 3481 +3353 3354 3483 +3353 3483 3482 +3355 3356 3485 +3355 3485 3484 +3356 3357 3485 +3357 3486 3485 +3357 3358 3487 +3357 3487 3486 +3358 3359 3487 +3359 3488 3487 +3359 3360 3489 +3359 3489 3488 +3360 3361 3489 +3361 3490 3489 +3361 3362 3491 +3361 3491 3490 +3362 3363 3491 +3363 3492 3491 +3363 3364 3493 +3363 3493 3492 +3364 3365 3493 +3365 3494 3493 +3365 3366 3495 +3365 3495 3494 +3366 3367 3495 +3367 3496 3495 +3367 3368 3497 +3367 3497 3496 +3368 3369 3497 +3369 3498 3497 +3369 3370 3499 +3369 3499 3498 +3370 3371 3499 +3371 3500 3499 +3371 3372 3501 +3371 3501 3500 +3372 3373 3501 +3373 3502 3501 +3373 3374 3503 +3373 3503 3502 +3374 3375 3503 +3375 3504 3503 +3375 3376 3505 +3375 3505 3504 +3376 3377 3505 +3377 3506 3505 +3377 3378 3507 +3377 3507 3506 +3378 3379 3507 +3379 3508 3507 +3379 3380 3509 +3379 3509 3508 +3380 3381 3509 +3381 3510 3509 +3381 3382 3511 +3381 3511 3510 +3382 3383 3511 +3383 3512 3511 +3383 3384 3513 +3383 3513 3512 +3384 3385 3513 +3385 3514 3513 +3385 3386 3515 +3385 3515 3514 +3386 3387 3515 +3387 3516 3515 +3387 3388 3517 +3387 3517 3516 +3388 3389 3517 +3389 3518 3517 +3389 3390 3519 +3389 3519 3518 +3390 3391 3519 +3391 3520 3519 +3391 3392 3521 +3391 3521 3520 +3392 3393 3521 +3393 3522 3521 +3393 3394 3523 +3393 3523 3522 +3394 3395 3523 +3395 3524 3523 +3395 3396 3525 +3395 3525 3524 +3396 3397 3525 +3397 3526 3525 +3397 3398 3527 +3397 3527 3526 +3398 3399 3527 +3399 3528 3527 +3399 3400 3529 +3399 3529 3528 +3400 3401 3529 +3401 3530 3529 +3401 3402 3531 +3401 3531 3530 +3402 3403 3531 +3403 3532 3531 +3403 3404 3533 +3403 3533 3532 +3404 3405 3533 +3405 3534 3533 +3405 3406 3535 +3405 3535 3534 +3406 3407 3535 +3407 3536 3535 +3407 3408 3537 +3407 3537 3536 +3408 3409 3537 +3409 3538 3537 +3409 3410 3539 +3409 3539 3538 +3410 3411 3539 +3411 3540 3539 +3411 3412 3541 +3411 3541 3540 +3412 3413 3541 +3413 3542 3541 +3413 3414 3543 +3413 3543 3542 +3414 3415 3543 +3415 3544 3543 +3415 3416 3545 +3415 3545 3544 +3416 3417 3545 +3417 3546 3545 +3417 3418 3547 +3417 3547 3546 +3418 3419 3547 +3419 3548 3547 +3419 3420 3549 +3419 3549 3548 +3420 3421 3549 +3421 3550 3549 +3421 3422 3551 +3421 3551 3550 +3422 3423 3551 +3423 3552 3551 +3423 3424 3553 +3423 3553 3552 +3424 3425 3553 +3425 3554 3553 +3425 3426 3555 +3425 3555 3554 +3426 3427 3555 +3427 3556 3555 +3427 3428 3557 +3427 3557 3556 +3428 3429 3557 +3429 3558 3557 +3429 3430 3559 +3429 3559 3558 +3430 3431 3559 +3431 3560 3559 +3431 3432 3561 +3431 3561 3560 +3432 3433 3561 +3433 3562 3561 +3433 3434 3563 +3433 3563 3562 +3434 3435 3563 +3435 3564 3563 +3435 3436 3565 +3435 3565 3564 +3436 3437 3565 +3437 3566 3565 +3437 3438 3567 +3437 3567 3566 +3438 3439 3567 +3439 3568 3567 +3439 3440 3569 +3439 3569 3568 +3440 3441 3569 +3441 3570 3569 +3441 3442 3571 +3441 3571 3570 +3442 3443 3571 +3443 3572 3571 +3443 3444 3573 +3443 3573 3572 +3444 3445 3573 +3445 3574 3573 +3445 3446 3575 +3445 3575 3574 +3446 3447 3575 +3447 3576 3575 +3447 3448 3577 +3447 3577 3576 +3448 3449 3577 +3449 3578 3577 +3449 3450 3579 +3449 3579 3578 +3450 3451 3579 +3451 3580 3579 +3451 3452 3581 +3451 3581 3580 +3452 3453 3581 +3453 3582 3581 +3453 3454 3583 +3453 3583 3582 +3454 3455 3583 +3455 3584 3583 +3455 3456 3585 +3455 3585 3584 +3456 3457 3585 +3457 3586 3585 +3457 3458 3587 +3457 3587 3586 +3458 3459 3587 +3459 3588 3587 +3459 3460 3589 +3459 3589 3588 +3460 3461 3589 +3461 3590 3589 +3461 3462 3591 +3461 3591 3590 +3462 3463 3591 +3463 3592 3591 +3463 3464 3593 +3463 3593 3592 +3464 3465 3593 +3465 3594 3593 +3465 3466 3595 +3465 3595 3594 +3466 3467 3595 +3467 3596 3595 +3467 3468 3597 +3467 3597 3596 +3468 3469 3597 +3469 3598 3597 +3469 3470 3599 +3469 3599 3598 +3470 3471 3599 +3471 3600 3599 +3471 3472 3601 +3471 3601 3600 +3472 3473 3601 +3473 3602 3601 +3473 3474 3603 +3473 3603 3602 +3474 3475 3603 +3475 3604 3603 +3475 3476 3605 +3475 3605 3604 +3476 3477 3605 +3477 3606 3605 +3477 3478 3607 +3477 3607 3606 +3478 3479 3607 +3479 3608 3607 +3479 3480 3609 +3479 3609 3608 +3480 3481 3609 +3481 3610 3609 +3481 3482 3611 +3481 3611 3610 +3482 3483 3611 +3483 3612 3611 +3484 3485 3613 +3485 3614 3613 +3485 3486 3615 +3485 3615 3614 +3486 3487 3615 +3487 3616 3615 +3487 3488 3617 +3487 3617 3616 +3488 3489 3617 +3489 3618 3617 +3489 3490 3619 +3489 3619 3618 +3490 3491 3619 +3491 3620 3619 +3491 3492 3621 +3491 3621 3620 +3492 3493 3621 +3493 3622 3621 +3493 3494 3623 +3493 3623 3622 +3494 3495 3623 +3495 3624 3623 +3495 3496 3625 +3495 3625 3624 +3496 3497 3625 +3497 3626 3625 +3497 3498 3627 +3497 3627 3626 +3498 3499 3627 +3499 3628 3627 +3499 3500 3629 +3499 3629 3628 +3500 3501 3629 +3501 3630 3629 +3501 3502 3631 +3501 3631 3630 +3502 3503 3631 +3503 3632 3631 +3503 3504 3633 +3503 3633 3632 +3504 3505 3633 +3505 3634 3633 +3505 3506 3635 +3505 3635 3634 +3506 3507 3635 +3507 3636 3635 +3507 3508 3637 +3507 3637 3636 +3508 3509 3637 +3509 3638 3637 +3509 3510 3639 +3509 3639 3638 +3510 3511 3639 +3511 3640 3639 +3511 3512 3641 +3511 3641 3640 +3512 3513 3641 +3513 3642 3641 +3513 3514 3643 +3513 3643 3642 +3514 3515 3643 +3515 3644 3643 +3515 3516 3645 +3515 3645 3644 +3516 3517 3645 +3517 3646 3645 +3517 3518 3647 +3517 3647 3646 +3518 3519 3647 +3519 3648 3647 +3519 3520 3649 +3519 3649 3648 +3520 3521 3649 +3521 3650 3649 +3521 3522 3651 +3521 3651 3650 +3522 3523 3651 +3523 3652 3651 +3523 3524 3653 +3523 3653 3652 +3524 3525 3653 +3525 3654 3653 +3525 3526 3655 +3525 3655 3654 +3526 3527 3655 +3527 3656 3655 +3527 3528 3657 +3527 3657 3656 +3528 3529 3657 +3529 3658 3657 +3529 3530 3659 +3529 3659 3658 +3530 3531 3659 +3531 3660 3659 +3531 3532 3661 +3531 3661 3660 +3532 3533 3661 +3533 3662 3661 +3533 3534 3663 +3533 3663 3662 +3534 3535 3663 +3535 3664 3663 +3535 3536 3665 +3535 3665 3664 +3536 3537 3665 +3537 3666 3665 +3537 3538 3667 +3537 3667 3666 +3538 3539 3667 +3539 3668 3667 +3539 3540 3669 +3539 3669 3668 +3540 3541 3669 +3541 3670 3669 +3541 3542 3671 +3541 3671 3670 +3542 3543 3671 +3543 3672 3671 +3543 3544 3673 +3543 3673 3672 +3544 3545 3673 +3545 3674 3673 +3545 3546 3675 +3545 3675 3674 +3546 3547 3675 +3547 3676 3675 +3547 3548 3677 +3547 3677 3676 +3548 3549 3677 +3549 3678 3677 +3549 3550 3679 +3549 3679 3678 +3550 3551 3679 +3551 3680 3679 +3551 3552 3681 +3551 3681 3680 +3552 3553 3681 +3553 3682 3681 +3553 3554 3683 +3553 3683 3682 +3554 3555 3683 +3555 3684 3683 +3555 3556 3685 +3555 3685 3684 +3556 3557 3685 +3557 3686 3685 +3557 3558 3687 +3557 3687 3686 +3558 3559 3687 +3559 3688 3687 +3559 3560 3689 +3559 3689 3688 +3560 3561 3689 +3561 3690 3689 +3561 3562 3691 +3561 3691 3690 +3562 3563 3691 +3563 3692 3691 +3563 3564 3693 +3563 3693 3692 +3564 3565 3693 +3565 3694 3693 +3565 3566 3695 +3565 3695 3694 +3566 3567 3695 +3567 3696 3695 +3567 3568 3697 +3567 3697 3696 +3568 3569 3697 +3569 3698 3697 +3569 3570 3699 +3569 3699 3698 +3570 3571 3699 +3571 3700 3699 +3571 3572 3701 +3571 3701 3700 +3572 3573 3701 +3573 3702 3701 +3573 3574 3703 +3573 3703 3702 +3574 3575 3703 +3575 3704 3703 +3575 3576 3705 +3575 3705 3704 +3576 3577 3705 +3577 3706 3705 +3577 3578 3707 +3577 3707 3706 +3578 3579 3707 +3579 3708 3707 +3579 3580 3709 +3579 3709 3708 +3580 3581 3709 +3581 3710 3709 +3581 3582 3711 +3581 3711 3710 +3582 3583 3711 +3583 3712 3711 +3583 3584 3713 +3583 3713 3712 +3584 3585 3713 +3585 3714 3713 +3585 3586 3715 +3585 3715 3714 +3586 3587 3715 +3587 3716 3715 +3587 3588 3717 +3587 3717 3716 +3588 3589 3717 +3589 3718 3717 +3589 3590 3719 +3589 3719 3718 +3590 3591 3719 +3591 3720 3719 +3591 3592 3721 +3591 3721 3720 +3592 3593 3721 +3593 3722 3721 +3593 3594 3723 +3593 3723 3722 +3594 3595 3723 +3595 3724 3723 +3595 3596 3725 +3595 3725 3724 +3596 3597 3725 +3597 3726 3725 +3597 3598 3727 +3597 3727 3726 +3598 3599 3727 +3599 3728 3727 +3599 3600 3729 +3599 3729 3728 +3600 3601 3729 +3601 3730 3729 +3601 3602 3731 +3601 3731 3730 +3602 3603 3731 +3603 3732 3731 +3603 3604 3733 +3603 3733 3732 +3604 3605 3733 +3605 3734 3733 +3605 3606 3735 +3605 3735 3734 +3606 3607 3735 +3607 3736 3735 +3607 3608 3737 +3607 3737 3736 +3608 3609 3737 +3609 3738 3737 +3609 3610 3739 +3609 3739 3738 +3610 3611 3739 +3611 3740 3739 +3611 3612 3741 +3611 3741 3740 +3613 3614 3743 +3613 3743 3742 +3614 3615 3743 +3615 3744 3743 +3615 3616 3745 +3615 3745 3744 +3616 3617 3745 +3617 3746 3745 +3617 3618 3747 +3617 3747 3746 +3618 3619 3747 +3619 3748 3747 +3619 3620 3749 +3619 3749 3748 +3620 3621 3749 +3621 3750 3749 +3621 3622 3751 +3621 3751 3750 +3622 3623 3751 +3623 3752 3751 +3623 3624 3753 +3623 3753 3752 +3624 3625 3753 +3625 3754 3753 +3625 3626 3755 +3625 3755 3754 +3626 3627 3755 +3627 3756 3755 +3627 3628 3757 +3627 3757 3756 +3628 3629 3757 +3629 3758 3757 +3629 3630 3759 +3629 3759 3758 +3630 3631 3759 +3631 3760 3759 +3631 3632 3761 +3631 3761 3760 +3632 3633 3761 +3633 3762 3761 +3633 3634 3763 +3633 3763 3762 +3634 3635 3763 +3635 3764 3763 +3635 3636 3765 +3635 3765 3764 +3636 3637 3765 +3637 3766 3765 +3637 3638 3767 +3637 3767 3766 +3638 3639 3767 +3639 3768 3767 +3639 3640 3769 +3639 3769 3768 +3640 3641 3769 +3641 3770 3769 +3641 3642 3771 +3641 3771 3770 +3642 3643 3771 +3643 3772 3771 +3643 3644 3773 +3643 3773 3772 +3644 3645 3773 +3645 3774 3773 +3645 3646 3775 +3645 3775 3774 +3646 3647 3775 +3647 3776 3775 +3647 3648 3777 +3647 3777 3776 +3648 3649 3777 +3649 3778 3777 +3649 3650 3779 +3649 3779 3778 +3650 3651 3779 +3651 3780 3779 +3651 3652 3781 +3651 3781 3780 +3652 3653 3781 +3653 3782 3781 +3653 3654 3783 +3653 3783 3782 +3654 3655 3783 +3655 3784 3783 +3655 3656 3785 +3655 3785 3784 +3656 3657 3785 +3657 3786 3785 +3657 3658 3787 +3657 3787 3786 +3658 3659 3787 +3659 3788 3787 +3659 3660 3789 +3659 3789 3788 +3660 3661 3789 +3661 3790 3789 +3661 3662 3791 +3661 3791 3790 +3662 3663 3791 +3663 3792 3791 +3663 3664 3793 +3663 3793 3792 +3664 3665 3793 +3665 3794 3793 +3665 3666 3795 +3665 3795 3794 +3666 3667 3795 +3667 3796 3795 +3667 3668 3797 +3667 3797 3796 +3668 3669 3797 +3669 3798 3797 +3669 3670 3799 +3669 3799 3798 +3670 3671 3799 +3671 3800 3799 +3671 3672 3801 +3671 3801 3800 +3672 3673 3801 +3673 3802 3801 +3673 3674 3803 +3673 3803 3802 +3674 3675 3803 +3675 3804 3803 +3675 3676 3805 +3675 3805 3804 +3676 3677 3805 +3677 3806 3805 +3677 3678 3807 +3677 3807 3806 +3678 3679 3807 +3679 3808 3807 +3679 3680 3809 +3679 3809 3808 +3680 3681 3809 +3681 3810 3809 +3681 3682 3811 +3681 3811 3810 +3682 3683 3811 +3683 3812 3811 +3683 3684 3813 +3683 3813 3812 +3684 3685 3813 +3685 3814 3813 +3685 3686 3815 +3685 3815 3814 +3686 3687 3815 +3687 3816 3815 +3687 3688 3817 +3687 3817 3816 +3688 3689 3817 +3689 3818 3817 +3689 3690 3819 +3689 3819 3818 +3690 3691 3819 +3691 3820 3819 +3691 3692 3821 +3691 3821 3820 +3692 3693 3821 +3693 3822 3821 +3693 3694 3823 +3693 3823 3822 +3694 3695 3823 +3695 3824 3823 +3695 3696 3825 +3695 3825 3824 +3696 3697 3825 +3697 3826 3825 +3697 3698 3827 +3697 3827 3826 +3698 3699 3827 +3699 3828 3827 +3699 3700 3829 +3699 3829 3828 +3700 3701 3829 +3701 3830 3829 +3701 3702 3831 +3701 3831 3830 +3702 3703 3831 +3703 3832 3831 +3703 3704 3833 +3703 3833 3832 +3704 3705 3833 +3705 3834 3833 +3705 3706 3835 +3705 3835 3834 +3706 3707 3835 +3707 3836 3835 +3707 3708 3837 +3707 3837 3836 +3708 3709 3837 +3709 3838 3837 +3709 3710 3839 +3709 3839 3838 +3710 3711 3839 +3711 3840 3839 +3711 3712 3841 +3711 3841 3840 +3712 3713 3841 +3713 3842 3841 +3713 3714 3843 +3713 3843 3842 +3714 3715 3843 +3715 3844 3843 +3715 3716 3845 +3715 3845 3844 +3716 3717 3845 +3717 3846 3845 +3717 3718 3847 +3717 3847 3846 +3718 3719 3847 +3719 3848 3847 +3719 3720 3849 +3719 3849 3848 +3720 3721 3849 +3721 3850 3849 +3721 3722 3851 +3721 3851 3850 +3722 3723 3851 +3723 3852 3851 +3723 3724 3853 +3723 3853 3852 +3724 3725 3853 +3725 3854 3853 +3725 3726 3855 +3725 3855 3854 +3726 3727 3855 +3727 3856 3855 +3727 3728 3857 +3727 3857 3856 +3728 3729 3857 +3729 3858 3857 +3729 3730 3859 +3729 3859 3858 +3730 3731 3859 +3731 3860 3859 +3731 3732 3861 +3731 3861 3860 +3732 3733 3861 +3733 3862 3861 +3733 3734 3863 +3733 3863 3862 +3734 3735 3863 +3735 3864 3863 +3735 3736 3865 +3735 3865 3864 +3736 3737 3865 +3737 3866 3865 +3737 3738 3867 +3737 3867 3866 +3738 3739 3867 +3739 3868 3867 +3739 3740 3869 +3739 3869 3868 +3740 3741 3869 +3741 3870 3869 +3742 3743 3871 +3743 3872 3871 +3743 3744 3873 +3743 3873 3872 +3744 3745 3873 +3745 3874 3873 +3745 3746 3875 +3745 3875 3874 +3746 3747 3875 +3747 3876 3875 +3747 3748 3877 +3747 3877 3876 +3748 3749 3877 +3749 3878 3877 +3749 3750 3879 +3749 3879 3878 +3750 3751 3879 +3751 3880 3879 +3751 3752 3881 +3751 3881 3880 +3752 3753 3881 +3753 3882 3881 +3753 3754 3883 +3753 3883 3882 +3754 3755 3883 +3755 3884 3883 +3755 3756 3885 +3755 3885 3884 +3756 3757 3885 +3757 3886 3885 +3757 3758 3887 +3757 3887 3886 +3758 3759 3887 +3759 3888 3887 +3759 3760 3889 +3759 3889 3888 +3760 3761 3889 +3761 3890 3889 +3761 3762 3891 +3761 3891 3890 +3762 3763 3891 +3763 3892 3891 +3763 3764 3893 +3763 3893 3892 +3764 3765 3893 +3765 3894 3893 +3765 3766 3895 +3765 3895 3894 +3766 3767 3895 +3767 3896 3895 +3767 3768 3897 +3767 3897 3896 +3768 3769 3897 +3769 3898 3897 +3769 3770 3899 +3769 3899 3898 +3770 3771 3899 +3771 3900 3899 +3771 3772 3901 +3771 3901 3900 +3772 3773 3901 +3773 3902 3901 +3773 3774 3903 +3773 3903 3902 +3774 3775 3903 +3775 3904 3903 +3775 3776 3905 +3775 3905 3904 +3776 3777 3905 +3777 3906 3905 +3777 3778 3907 +3777 3907 3906 +3778 3779 3907 +3779 3908 3907 +3779 3780 3909 +3779 3909 3908 +3780 3781 3909 +3781 3910 3909 +3781 3782 3911 +3781 3911 3910 +3782 3783 3911 +3783 3912 3911 +3783 3784 3913 +3783 3913 3912 +3784 3785 3913 +3785 3914 3913 +3785 3786 3915 +3785 3915 3914 +3786 3787 3915 +3787 3916 3915 +3787 3788 3917 +3787 3917 3916 +3788 3789 3917 +3789 3918 3917 +3789 3790 3919 +3789 3919 3918 +3790 3791 3919 +3791 3920 3919 +3791 3792 3921 +3791 3921 3920 +3792 3793 3921 +3793 3922 3921 +3793 3794 3923 +3793 3923 3922 +3794 3795 3923 +3795 3924 3923 +3795 3796 3925 +3795 3925 3924 +3796 3797 3925 +3797 3926 3925 +3797 3798 3927 +3797 3927 3926 +3798 3799 3927 +3799 3928 3927 +3799 3800 3929 +3799 3929 3928 +3800 3801 3929 +3801 3930 3929 +3801 3802 3931 +3801 3931 3930 +3802 3803 3931 +3803 3932 3931 +3803 3804 3933 +3803 3933 3932 +3804 3805 3933 +3805 3934 3933 +3805 3806 3935 +3805 3935 3934 +3806 3807 3935 +3807 3936 3935 +3807 3808 3937 +3807 3937 3936 +3808 3809 3937 +3809 3938 3937 +3809 3810 3939 +3809 3939 3938 +3810 3811 3939 +3811 3940 3939 +3811 3812 3941 +3811 3941 3940 +3812 3813 3941 +3813 3942 3941 +3813 3814 3943 +3813 3943 3942 +3814 3815 3943 +3815 3944 3943 +3815 3816 3945 +3815 3945 3944 +3816 3817 3945 +3817 3946 3945 +3817 3818 3947 +3817 3947 3946 +3818 3819 3947 +3819 3948 3947 +3819 3820 3949 +3819 3949 3948 +3820 3821 3949 +3821 3950 3949 +3821 3822 3951 +3821 3951 3950 +3822 3823 3951 +3823 3952 3951 +3823 3824 3953 +3823 3953 3952 +3824 3825 3953 +3825 3954 3953 +3825 3826 3955 +3825 3955 3954 +3826 3827 3955 +3827 3956 3955 +3827 3828 3957 +3827 3957 3956 +3828 3829 3957 +3829 3958 3957 +3829 3830 3959 +3829 3959 3958 +3830 3831 3959 +3831 3960 3959 +3831 3832 3961 +3831 3961 3960 +3832 3833 3961 +3833 3962 3961 +3833 3834 3963 +3833 3963 3962 +3834 3835 3963 +3835 3964 3963 +3835 3836 3965 +3835 3965 3964 +3836 3837 3965 +3837 3966 3965 +3837 3838 3967 +3837 3967 3966 +3838 3839 3967 +3839 3968 3967 +3839 3840 3969 +3839 3969 3968 +3840 3841 3969 +3841 3970 3969 +3841 3842 3971 +3841 3971 3970 +3842 3843 3971 +3843 3972 3971 +3843 3844 3973 +3843 3973 3972 +3844 3845 3973 +3845 3974 3973 +3845 3846 3975 +3845 3975 3974 +3846 3847 3975 +3847 3976 3975 +3847 3848 3977 +3847 3977 3976 +3848 3849 3977 +3849 3978 3977 +3849 3850 3979 +3849 3979 3978 +3850 3851 3979 +3851 3980 3979 +3851 3852 3981 +3851 3981 3980 +3852 3853 3981 +3853 3982 3981 +3853 3854 3983 +3853 3983 3982 +3854 3855 3983 +3855 3984 3983 +3855 3856 3985 +3855 3985 3984 +3856 3857 3985 +3857 3986 3985 +3857 3858 3987 +3857 3987 3986 +3858 3859 3987 +3859 3988 3987 +3859 3860 3989 +3859 3989 3988 +3860 3861 3989 +3861 3990 3989 +3861 3862 3991 +3861 3991 3990 +3862 3863 3991 +3863 3992 3991 +3863 3864 3993 +3863 3993 3992 +3864 3865 3993 +3865 3994 3993 +3865 3866 3995 +3865 3995 3994 +3866 3867 3995 +3867 3996 3995 +3867 3868 3997 +3867 3997 3996 +3868 3869 3997 +3869 3998 3997 +3869 3870 3999 +3869 3999 3998 +3871 3872 4001 +3871 4001 4000 +3872 3873 4001 +3873 4002 4001 +3873 3874 4003 +3873 4003 4002 +3874 3875 4003 +3875 4004 4003 +3875 3876 4005 +3875 4005 4004 +3876 3877 4005 +3877 4006 4005 +3877 3878 4007 +3877 4007 4006 +3878 3879 4007 +3879 4008 4007 +3879 3880 4009 +3879 4009 4008 +3880 3881 4009 +3881 4010 4009 +3881 3882 4011 +3881 4011 4010 +3882 3883 4011 +3883 4012 4011 +3883 3884 4013 +3883 4013 4012 +3884 3885 4013 +3885 4014 4013 +3885 3886 4015 +3885 4015 4014 +3886 3887 4015 +3887 4016 4015 +3887 3888 4017 +3887 4017 4016 +3888 3889 4017 +3889 4018 4017 +3889 3890 4019 +3889 4019 4018 +3890 3891 4019 +3891 4020 4019 +3891 3892 4021 +3891 4021 4020 +3892 3893 4021 +3893 4022 4021 +3893 3894 4023 +3893 4023 4022 +3894 3895 4023 +3895 4024 4023 +3895 3896 4025 +3895 4025 4024 +3896 3897 4025 +3897 4026 4025 +3897 3898 4027 +3897 4027 4026 +3898 3899 4027 +3899 4028 4027 +3899 3900 4029 +3899 4029 4028 +3900 3901 4029 +3901 4030 4029 +3901 3902 4031 +3901 4031 4030 +3902 3903 4031 +3903 4032 4031 +3903 3904 4033 +3903 4033 4032 +3904 3905 4033 +3905 4034 4033 +3905 3906 4035 +3905 4035 4034 +3906 3907 4035 +3907 4036 4035 +3907 3908 4037 +3907 4037 4036 +3908 3909 4037 +3909 4038 4037 +3909 3910 4039 +3909 4039 4038 +3910 3911 4039 +3911 4040 4039 +3911 3912 4041 +3911 4041 4040 +3912 3913 4041 +3913 4042 4041 +3913 3914 4043 +3913 4043 4042 +3914 3915 4043 +3915 4044 4043 +3915 3916 4045 +3915 4045 4044 +3916 3917 4045 +3917 4046 4045 +3917 3918 4047 +3917 4047 4046 +3918 3919 4047 +3919 4048 4047 +3919 3920 4049 +3919 4049 4048 +3920 3921 4049 +3921 4050 4049 +3921 3922 4051 +3921 4051 4050 +3922 3923 4051 +3923 4052 4051 +3923 3924 4053 +3923 4053 4052 +3924 3925 4053 +3925 4054 4053 +3925 3926 4055 +3925 4055 4054 +3926 3927 4055 +3927 4056 4055 +3927 3928 4057 +3927 4057 4056 +3928 3929 4057 +3929 4058 4057 +3929 3930 4059 +3929 4059 4058 +3930 3931 4059 +3931 4060 4059 +3931 3932 4061 +3931 4061 4060 +3932 3933 4061 +3933 4062 4061 +3933 3934 4063 +3933 4063 4062 +3934 3935 4063 +3935 4064 4063 +3935 3936 4065 +3935 4065 4064 +3936 3937 4065 +3937 4066 4065 +3937 3938 4067 +3937 4067 4066 +3938 3939 4067 +3939 4068 4067 +3939 3940 4069 +3939 4069 4068 +3940 3941 4069 +3941 4070 4069 +3941 3942 4071 +3941 4071 4070 +3942 3943 4071 +3943 4072 4071 +3943 3944 4073 +3943 4073 4072 +3944 3945 4073 +3945 4074 4073 +3945 3946 4075 +3945 4075 4074 +3946 3947 4075 +3947 4076 4075 +3947 3948 4077 +3947 4077 4076 +3948 3949 4077 +3949 4078 4077 +3949 3950 4079 +3949 4079 4078 +3950 3951 4079 +3951 4080 4079 +3951 3952 4081 +3951 4081 4080 +3952 3953 4081 +3953 4082 4081 +3953 3954 4083 +3953 4083 4082 +3954 3955 4083 +3955 4084 4083 +3955 3956 4085 +3955 4085 4084 +3956 3957 4085 +3957 4086 4085 +3957 3958 4087 +3957 4087 4086 +3958 3959 4087 +3959 4088 4087 +3959 3960 4089 +3959 4089 4088 +3960 3961 4089 +3961 4090 4089 +3961 3962 4091 +3961 4091 4090 +3962 3963 4091 +3963 4092 4091 +3963 3964 4093 +3963 4093 4092 +3964 3965 4093 +3965 4094 4093 +3965 3966 4095 +3965 4095 4094 +3966 3967 4095 +3967 4096 4095 +3967 3968 4097 +3967 4097 4096 +3968 3969 4097 +3969 4098 4097 +3969 3970 4099 +3969 4099 4098 +3970 3971 4099 +3971 4100 4099 +3971 3972 4101 +3971 4101 4100 +3972 3973 4101 +3973 4102 4101 +3973 3974 4103 +3973 4103 4102 +3974 3975 4103 +3975 4104 4103 +3975 3976 4105 +3975 4105 4104 +3976 3977 4105 +3977 4106 4105 +3977 3978 4107 +3977 4107 4106 +3978 3979 4107 +3979 4108 4107 +3979 3980 4109 +3979 4109 4108 +3980 3981 4109 +3981 4110 4109 +3981 3982 4111 +3981 4111 4110 +3982 3983 4111 +3983 4112 4111 +3983 3984 4113 +3983 4113 4112 +3984 3985 4113 +3985 4114 4113 +3985 3986 4115 +3985 4115 4114 +3986 3987 4115 +3987 4116 4115 +3987 3988 4117 +3987 4117 4116 +3988 3989 4117 +3989 4118 4117 +3989 3990 4119 +3989 4119 4118 +3990 3991 4119 +3991 4120 4119 +3991 3992 4121 +3991 4121 4120 +3992 3993 4121 +3993 4122 4121 +3993 3994 4123 +3993 4123 4122 +3994 3995 4123 +3995 4124 4123 +3995 3996 4125 +3995 4125 4124 +3996 3997 4125 +3997 4126 4125 +3997 3998 4127 +3997 4127 4126 +3998 3999 4127 +3999 4128 4127 +4000 4001 4129 +4001 4130 4129 +4001 4002 4131 +4001 4131 4130 +4002 4003 4131 +4003 4132 4131 +4003 4004 4133 +4003 4133 4132 +4004 4005 4133 +4005 4134 4133 +4005 4006 4135 +4005 4135 4134 +4006 4007 4135 +4007 4136 4135 +4007 4008 4137 +4007 4137 4136 +4008 4009 4137 +4009 4138 4137 +4009 4010 4139 +4009 4139 4138 +4010 4011 4139 +4011 4140 4139 +4011 4012 4141 +4011 4141 4140 +4012 4013 4141 +4013 4142 4141 +4013 4014 4143 +4013 4143 4142 +4014 4015 4143 +4015 4144 4143 +4015 4016 4145 +4015 4145 4144 +4016 4017 4145 +4017 4146 4145 +4017 4018 4147 +4017 4147 4146 +4018 4019 4147 +4019 4148 4147 +4019 4020 4149 +4019 4149 4148 +4020 4021 4149 +4021 4150 4149 +4021 4022 4151 +4021 4151 4150 +4022 4023 4151 +4023 4152 4151 +4023 4024 4153 +4023 4153 4152 +4024 4025 4153 +4025 4154 4153 +4025 4026 4155 +4025 4155 4154 +4026 4027 4155 +4027 4156 4155 +4027 4028 4157 +4027 4157 4156 +4028 4029 4157 +4029 4158 4157 +4029 4030 4159 +4029 4159 4158 +4030 4031 4159 +4031 4160 4159 +4031 4032 4161 +4031 4161 4160 +4032 4033 4161 +4033 4162 4161 +4033 4034 4163 +4033 4163 4162 +4034 4035 4163 +4035 4164 4163 +4035 4036 4165 +4035 4165 4164 +4036 4037 4165 +4037 4166 4165 +4037 4038 4167 +4037 4167 4166 +4038 4039 4167 +4039 4168 4167 +4039 4040 4169 +4039 4169 4168 +4040 4041 4169 +4041 4170 4169 +4041 4042 4171 +4041 4171 4170 +4042 4043 4171 +4043 4172 4171 +4043 4044 4173 +4043 4173 4172 +4044 4045 4173 +4045 4174 4173 +4045 4046 4175 +4045 4175 4174 +4046 4047 4175 +4047 4176 4175 +4047 4048 4177 +4047 4177 4176 +4048 4049 4177 +4049 4178 4177 +4049 4050 4179 +4049 4179 4178 +4050 4051 4179 +4051 4180 4179 +4051 4052 4181 +4051 4181 4180 +4052 4053 4181 +4053 4182 4181 +4053 4054 4183 +4053 4183 4182 +4054 4055 4183 +4055 4184 4183 +4055 4056 4185 +4055 4185 4184 +4056 4057 4185 +4057 4186 4185 +4057 4058 4187 +4057 4187 4186 +4058 4059 4187 +4059 4188 4187 +4059 4060 4189 +4059 4189 4188 +4060 4061 4189 +4061 4190 4189 +4061 4062 4191 +4061 4191 4190 +4062 4063 4191 +4063 4192 4191 +4063 4064 4193 +4063 4193 4192 +4064 4065 4193 +4065 4194 4193 +4065 4066 4195 +4065 4195 4194 +4066 4067 4195 +4067 4196 4195 +4067 4068 4197 +4067 4197 4196 +4068 4069 4197 +4069 4198 4197 +4069 4070 4199 +4069 4199 4198 +4070 4071 4199 +4071 4200 4199 +4071 4072 4201 +4071 4201 4200 +4072 4073 4201 +4073 4202 4201 +4073 4074 4203 +4073 4203 4202 +4074 4075 4203 +4075 4204 4203 +4075 4076 4205 +4075 4205 4204 +4076 4077 4205 +4077 4206 4205 +4077 4078 4207 +4077 4207 4206 +4078 4079 4207 +4079 4208 4207 +4079 4080 4209 +4079 4209 4208 +4080 4081 4209 +4081 4210 4209 +4081 4082 4211 +4081 4211 4210 +4082 4083 4211 +4083 4212 4211 +4083 4084 4213 +4083 4213 4212 +4084 4085 4213 +4085 4214 4213 +4085 4086 4215 +4085 4215 4214 +4086 4087 4215 +4087 4216 4215 +4087 4088 4217 +4087 4217 4216 +4088 4089 4217 +4089 4218 4217 +4089 4090 4219 +4089 4219 4218 +4090 4091 4219 +4091 4220 4219 +4091 4092 4221 +4091 4221 4220 +4092 4093 4221 +4093 4222 4221 +4093 4094 4223 +4093 4223 4222 +4094 4095 4223 +4095 4224 4223 +4095 4096 4225 +4095 4225 4224 +4096 4097 4225 +4097 4226 4225 +4097 4098 4227 +4097 4227 4226 +4098 4099 4227 +4099 4228 4227 +4099 4100 4229 +4099 4229 4228 +4100 4101 4229 +4101 4230 4229 +4101 4102 4231 +4101 4231 4230 +4102 4103 4231 +4103 4232 4231 +4103 4104 4233 +4103 4233 4232 +4104 4105 4233 +4105 4234 4233 +4105 4106 4235 +4105 4235 4234 +4106 4107 4235 +4107 4236 4235 +4107 4108 4237 +4107 4237 4236 +4108 4109 4237 +4109 4238 4237 +4109 4110 4239 +4109 4239 4238 +4110 4111 4239 +4111 4240 4239 +4111 4112 4241 +4111 4241 4240 +4112 4113 4241 +4113 4242 4241 +4113 4114 4243 +4113 4243 4242 +4114 4115 4243 +4115 4244 4243 +4115 4116 4245 +4115 4245 4244 +4116 4117 4245 +4117 4246 4245 +4117 4118 4247 +4117 4247 4246 +4118 4119 4247 +4119 4248 4247 +4119 4120 4249 +4119 4249 4248 +4120 4121 4249 +4121 4250 4249 +4121 4122 4251 +4121 4251 4250 +4122 4123 4251 +4123 4252 4251 +4123 4124 4253 +4123 4253 4252 +4124 4125 4253 +4125 4254 4253 +4125 4126 4255 +4125 4255 4254 +4126 4127 4255 +4127 4256 4255 +4127 4128 4257 +4127 4257 4256 +4129 4130 4259 +4129 4259 4258 +4130 4131 4259 +4131 4260 4259 +4131 4132 4261 +4131 4261 4260 +4132 4133 4261 +4133 4262 4261 +4133 4134 4263 +4133 4263 4262 +4134 4135 4263 +4135 4264 4263 +4135 4136 4265 +4135 4265 4264 +4136 4137 4265 +4137 4266 4265 +4137 4138 4267 +4137 4267 4266 +4138 4139 4267 +4139 4268 4267 +4139 4140 4269 +4139 4269 4268 +4140 4141 4269 +4141 4270 4269 +4141 4142 4271 +4141 4271 4270 +4142 4143 4271 +4143 4272 4271 +4143 4144 4273 +4143 4273 4272 +4144 4145 4273 +4145 4274 4273 +4145 4146 4275 +4145 4275 4274 +4146 4147 4275 +4147 4276 4275 +4147 4148 4277 +4147 4277 4276 +4148 4149 4277 +4149 4278 4277 +4149 4150 4279 +4149 4279 4278 +4150 4151 4279 +4151 4280 4279 +4151 4152 4281 +4151 4281 4280 +4152 4153 4281 +4153 4282 4281 +4153 4154 4283 +4153 4283 4282 +4154 4155 4283 +4155 4284 4283 +4155 4156 4285 +4155 4285 4284 +4156 4157 4285 +4157 4286 4285 +4157 4158 4287 +4157 4287 4286 +4158 4159 4287 +4159 4288 4287 +4159 4160 4289 +4159 4289 4288 +4160 4161 4289 +4161 4290 4289 +4161 4162 4291 +4161 4291 4290 +4162 4163 4291 +4163 4292 4291 +4163 4164 4293 +4163 4293 4292 +4164 4165 4293 +4165 4294 4293 +4165 4166 4295 +4165 4295 4294 +4166 4167 4295 +4167 4296 4295 +4167 4168 4297 +4167 4297 4296 +4168 4169 4297 +4169 4298 4297 +4169 4170 4299 +4169 4299 4298 +4170 4171 4299 +4171 4300 4299 +4171 4172 4301 +4171 4301 4300 +4172 4173 4301 +4173 4302 4301 +4173 4174 4303 +4173 4303 4302 +4174 4175 4303 +4175 4304 4303 +4175 4176 4305 +4175 4305 4304 +4176 4177 4305 +4177 4306 4305 +4177 4178 4307 +4177 4307 4306 +4178 4179 4307 +4179 4308 4307 +4179 4180 4309 +4179 4309 4308 +4180 4181 4309 +4181 4310 4309 +4181 4182 4311 +4181 4311 4310 +4182 4183 4311 +4183 4312 4311 +4183 4184 4313 +4183 4313 4312 +4184 4185 4313 +4185 4314 4313 +4185 4186 4315 +4185 4315 4314 +4186 4187 4315 +4187 4316 4315 +4187 4188 4317 +4187 4317 4316 +4188 4189 4317 +4189 4318 4317 +4189 4190 4319 +4189 4319 4318 +4190 4191 4319 +4191 4320 4319 +4191 4192 4321 +4191 4321 4320 +4192 4193 4321 +4193 4322 4321 +4193 4194 4323 +4193 4323 4322 +4194 4195 4323 +4195 4324 4323 +4195 4196 4325 +4195 4325 4324 +4196 4197 4325 +4197 4326 4325 +4197 4198 4327 +4197 4327 4326 +4198 4199 4327 +4199 4328 4327 +4199 4200 4329 +4199 4329 4328 +4200 4201 4329 +4201 4330 4329 +4201 4202 4331 +4201 4331 4330 +4202 4203 4331 +4203 4332 4331 +4203 4204 4333 +4203 4333 4332 +4204 4205 4333 +4205 4334 4333 +4205 4206 4335 +4205 4335 4334 +4206 4207 4335 +4207 4336 4335 +4207 4208 4337 +4207 4337 4336 +4208 4209 4337 +4209 4338 4337 +4209 4210 4339 +4209 4339 4338 +4210 4211 4339 +4211 4340 4339 +4211 4212 4341 +4211 4341 4340 +4212 4213 4341 +4213 4342 4341 +4213 4214 4343 +4213 4343 4342 +4214 4215 4343 +4215 4344 4343 +4215 4216 4345 +4215 4345 4344 +4216 4217 4345 +4217 4346 4345 +4217 4218 4347 +4217 4347 4346 +4218 4219 4347 +4219 4348 4347 +4219 4220 4349 +4219 4349 4348 +4220 4221 4349 +4221 4350 4349 +4221 4222 4351 +4221 4351 4350 +4222 4223 4351 +4223 4352 4351 +4223 4224 4353 +4223 4353 4352 +4224 4225 4353 +4225 4354 4353 +4225 4226 4355 +4225 4355 4354 +4226 4227 4355 +4227 4356 4355 +4227 4228 4357 +4227 4357 4356 +4228 4229 4357 +4229 4358 4357 +4229 4230 4359 +4229 4359 4358 +4230 4231 4359 +4231 4360 4359 +4231 4232 4361 +4231 4361 4360 +4232 4233 4361 +4233 4362 4361 +4233 4234 4363 +4233 4363 4362 +4234 4235 4363 +4235 4364 4363 +4235 4236 4365 +4235 4365 4364 +4236 4237 4365 +4237 4366 4365 +4237 4238 4367 +4237 4367 4366 +4238 4239 4367 +4239 4368 4367 +4239 4240 4369 +4239 4369 4368 +4240 4241 4369 +4241 4370 4369 +4241 4242 4371 +4241 4371 4370 +4242 4243 4371 +4243 4372 4371 +4243 4244 4373 +4243 4373 4372 +4244 4245 4373 +4245 4374 4373 +4245 4246 4375 +4245 4375 4374 +4246 4247 4375 +4247 4376 4375 +4247 4248 4377 +4247 4377 4376 +4248 4249 4377 +4249 4378 4377 +4249 4250 4379 +4249 4379 4378 +4250 4251 4379 +4251 4380 4379 +4251 4252 4381 +4251 4381 4380 +4252 4253 4381 +4253 4382 4381 +4253 4254 4383 +4253 4383 4382 +4254 4255 4383 +4255 4384 4383 +4255 4256 4385 +4255 4385 4384 +4256 4257 4385 +4257 4386 4385 +4258 4259 4387 +4259 4388 4387 +4259 4260 4389 +4259 4389 4388 +4260 4261 4389 +4261 4390 4389 +4261 4262 4391 +4261 4391 4390 +4262 4263 4391 +4263 4392 4391 +4263 4264 4393 +4263 4393 4392 +4264 4265 4393 +4265 4394 4393 +4265 4266 4395 +4265 4395 4394 +4266 4267 4395 +4267 4396 4395 +4267 4268 4397 +4267 4397 4396 +4268 4269 4397 +4269 4398 4397 +4269 4270 4399 +4269 4399 4398 +4270 4271 4399 +4271 4400 4399 +4271 4272 4401 +4271 4401 4400 +4272 4273 4401 +4273 4402 4401 +4273 4274 4403 +4273 4403 4402 +4274 4275 4403 +4275 4404 4403 +4275 4276 4405 +4275 4405 4404 +4276 4277 4405 +4277 4406 4405 +4277 4278 4407 +4277 4407 4406 +4278 4279 4407 +4279 4408 4407 +4279 4280 4409 +4279 4409 4408 +4280 4281 4409 +4281 4410 4409 +4281 4282 4411 +4281 4411 4410 +4282 4283 4411 +4283 4412 4411 +4283 4284 4413 +4283 4413 4412 +4284 4285 4413 +4285 4414 4413 +4285 4286 4415 +4285 4415 4414 +4286 4287 4415 +4287 4416 4415 +4287 4288 4417 +4287 4417 4416 +4288 4289 4417 +4289 4418 4417 +4289 4290 4419 +4289 4419 4418 +4290 4291 4419 +4291 4420 4419 +4291 4292 4421 +4291 4421 4420 +4292 4293 4421 +4293 4422 4421 +4293 4294 4423 +4293 4423 4422 +4294 4295 4423 +4295 4424 4423 +4295 4296 4425 +4295 4425 4424 +4296 4297 4425 +4297 4426 4425 +4297 4298 4427 +4297 4427 4426 +4298 4299 4427 +4299 4428 4427 +4299 4300 4429 +4299 4429 4428 +4300 4301 4429 +4301 4430 4429 +4301 4302 4431 +4301 4431 4430 +4302 4303 4431 +4303 4432 4431 +4303 4304 4433 +4303 4433 4432 +4304 4305 4433 +4305 4434 4433 +4305 4306 4435 +4305 4435 4434 +4306 4307 4435 +4307 4436 4435 +4307 4308 4437 +4307 4437 4436 +4308 4309 4437 +4309 4438 4437 +4309 4310 4439 +4309 4439 4438 +4310 4311 4439 +4311 4440 4439 +4311 4312 4441 +4311 4441 4440 +4312 4313 4441 +4313 4442 4441 +4313 4314 4443 +4313 4443 4442 +4314 4315 4443 +4315 4444 4443 +4315 4316 4445 +4315 4445 4444 +4316 4317 4445 +4317 4446 4445 +4317 4318 4447 +4317 4447 4446 +4318 4319 4447 +4319 4448 4447 +4319 4320 4449 +4319 4449 4448 +4320 4321 4449 +4321 4450 4449 +4321 4322 4451 +4321 4451 4450 +4322 4323 4451 +4323 4452 4451 +4323 4324 4453 +4323 4453 4452 +4324 4325 4453 +4325 4454 4453 +4325 4326 4455 +4325 4455 4454 +4326 4327 4455 +4327 4456 4455 +4327 4328 4457 +4327 4457 4456 +4328 4329 4457 +4329 4458 4457 +4329 4330 4459 +4329 4459 4458 +4330 4331 4459 +4331 4460 4459 +4331 4332 4461 +4331 4461 4460 +4332 4333 4461 +4333 4462 4461 +4333 4334 4463 +4333 4463 4462 +4334 4335 4463 +4335 4464 4463 +4335 4336 4465 +4335 4465 4464 +4336 4337 4465 +4337 4466 4465 +4337 4338 4467 +4337 4467 4466 +4338 4339 4467 +4339 4468 4467 +4339 4340 4469 +4339 4469 4468 +4340 4341 4469 +4341 4470 4469 +4341 4342 4471 +4341 4471 4470 +4342 4343 4471 +4343 4472 4471 +4343 4344 4473 +4343 4473 4472 +4344 4345 4473 +4345 4474 4473 +4345 4346 4475 +4345 4475 4474 +4346 4347 4475 +4347 4476 4475 +4347 4348 4477 +4347 4477 4476 +4348 4349 4477 +4349 4478 4477 +4349 4350 4479 +4349 4479 4478 +4350 4351 4479 +4351 4480 4479 +4351 4352 4481 +4351 4481 4480 +4352 4353 4481 +4353 4482 4481 +4353 4354 4483 +4353 4483 4482 +4354 4355 4483 +4355 4484 4483 +4355 4356 4485 +4355 4485 4484 +4356 4357 4485 +4357 4486 4485 +4357 4358 4487 +4357 4487 4486 +4358 4359 4487 +4359 4488 4487 +4359 4360 4489 +4359 4489 4488 +4360 4361 4489 +4361 4490 4489 +4361 4362 4491 +4361 4491 4490 +4362 4363 4491 +4363 4492 4491 +4363 4364 4493 +4363 4493 4492 +4364 4365 4493 +4365 4494 4493 +4365 4366 4495 +4365 4495 4494 +4366 4367 4495 +4367 4496 4495 +4367 4368 4497 +4367 4497 4496 +4368 4369 4497 +4369 4498 4497 +4369 4370 4499 +4369 4499 4498 +4370 4371 4499 +4371 4500 4499 +4371 4372 4501 +4371 4501 4500 +4372 4373 4501 +4373 4502 4501 +4373 4374 4503 +4373 4503 4502 +4374 4375 4503 +4375 4504 4503 +4375 4376 4505 +4375 4505 4504 +4376 4377 4505 +4377 4506 4505 +4377 4378 4507 +4377 4507 4506 +4378 4379 4507 +4379 4508 4507 +4379 4380 4509 +4379 4509 4508 +4380 4381 4509 +4381 4510 4509 +4381 4382 4511 +4381 4511 4510 +4382 4383 4511 +4383 4512 4511 +4383 4384 4513 +4383 4513 4512 +4384 4385 4513 +4385 4514 4513 +4385 4386 4515 +4385 4515 4514 +4387 4388 4517 +4387 4517 4516 +4388 4389 4517 +4389 4518 4517 +4389 4390 4519 +4389 4519 4518 +4390 4391 4519 +4391 4520 4519 +4391 4392 4521 +4391 4521 4520 +4392 4393 4521 +4393 4522 4521 +4393 4394 4523 +4393 4523 4522 +4394 4395 4523 +4395 4524 4523 +4395 4396 4525 +4395 4525 4524 +4396 4397 4525 +4397 4526 4525 +4397 4398 4527 +4397 4527 4526 +4398 4399 4527 +4399 4528 4527 +4399 4400 4529 +4399 4529 4528 +4400 4401 4529 +4401 4530 4529 +4401 4402 4531 +4401 4531 4530 +4402 4403 4531 +4403 4532 4531 +4403 4404 4533 +4403 4533 4532 +4404 4405 4533 +4405 4534 4533 +4405 4406 4535 +4405 4535 4534 +4406 4407 4535 +4407 4536 4535 +4407 4408 4537 +4407 4537 4536 +4408 4409 4537 +4409 4538 4537 +4409 4410 4539 +4409 4539 4538 +4410 4411 4539 +4411 4540 4539 +4411 4412 4541 +4411 4541 4540 +4412 4413 4541 +4413 4542 4541 +4413 4414 4543 +4413 4543 4542 +4414 4415 4543 +4415 4544 4543 +4415 4416 4545 +4415 4545 4544 +4416 4417 4545 +4417 4546 4545 +4417 4418 4547 +4417 4547 4546 +4418 4419 4547 +4419 4548 4547 +4419 4420 4549 +4419 4549 4548 +4420 4421 4549 +4421 4550 4549 +4421 4422 4551 +4421 4551 4550 +4422 4423 4551 +4423 4552 4551 +4423 4424 4553 +4423 4553 4552 +4424 4425 4553 +4425 4554 4553 +4425 4426 4555 +4425 4555 4554 +4426 4427 4555 +4427 4556 4555 +4427 4428 4557 +4427 4557 4556 +4428 4429 4557 +4429 4558 4557 +4429 4430 4559 +4429 4559 4558 +4430 4431 4559 +4431 4560 4559 +4431 4432 4561 +4431 4561 4560 +4432 4433 4561 +4433 4562 4561 +4433 4434 4563 +4433 4563 4562 +4434 4435 4563 +4435 4564 4563 +4435 4436 4565 +4435 4565 4564 +4436 4437 4565 +4437 4566 4565 +4437 4438 4567 +4437 4567 4566 +4438 4439 4567 +4439 4568 4567 +4439 4440 4569 +4439 4569 4568 +4440 4441 4569 +4441 4570 4569 +4441 4442 4571 +4441 4571 4570 +4442 4443 4571 +4443 4572 4571 +4443 4444 4573 +4443 4573 4572 +4444 4445 4573 +4445 4574 4573 +4445 4446 4575 +4445 4575 4574 +4446 4447 4575 +4447 4576 4575 +4447 4448 4577 +4447 4577 4576 +4448 4449 4577 +4449 4578 4577 +4449 4450 4579 +4449 4579 4578 +4450 4451 4579 +4451 4580 4579 +4451 4452 4581 +4451 4581 4580 +4452 4453 4581 +4453 4582 4581 +4453 4454 4583 +4453 4583 4582 +4454 4455 4583 +4455 4584 4583 +4455 4456 4585 +4455 4585 4584 +4456 4457 4585 +4457 4586 4585 +4457 4458 4587 +4457 4587 4586 +4458 4459 4587 +4459 4588 4587 +4459 4460 4589 +4459 4589 4588 +4460 4461 4589 +4461 4590 4589 +4461 4462 4591 +4461 4591 4590 +4462 4463 4591 +4463 4592 4591 +4463 4464 4593 +4463 4593 4592 +4464 4465 4593 +4465 4594 4593 +4465 4466 4595 +4465 4595 4594 +4466 4467 4595 +4467 4596 4595 +4467 4468 4597 +4467 4597 4596 +4468 4469 4597 +4469 4598 4597 +4469 4470 4599 +4469 4599 4598 +4470 4471 4599 +4471 4600 4599 +4471 4472 4601 +4471 4601 4600 +4472 4473 4601 +4473 4602 4601 +4473 4474 4603 +4473 4603 4602 +4474 4475 4603 +4475 4604 4603 +4475 4476 4605 +4475 4605 4604 +4476 4477 4605 +4477 4606 4605 +4477 4478 4607 +4477 4607 4606 +4478 4479 4607 +4479 4608 4607 +4479 4480 4609 +4479 4609 4608 +4480 4481 4609 +4481 4610 4609 +4481 4482 4611 +4481 4611 4610 +4482 4483 4611 +4483 4612 4611 +4483 4484 4613 +4483 4613 4612 +4484 4485 4613 +4485 4614 4613 +4485 4486 4615 +4485 4615 4614 +4486 4487 4615 +4487 4616 4615 +4487 4488 4617 +4487 4617 4616 +4488 4489 4617 +4489 4618 4617 +4489 4490 4619 +4489 4619 4618 +4490 4491 4619 +4491 4620 4619 +4491 4492 4621 +4491 4621 4620 +4492 4493 4621 +4493 4622 4621 +4493 4494 4623 +4493 4623 4622 +4494 4495 4623 +4495 4624 4623 +4495 4496 4625 +4495 4625 4624 +4496 4497 4625 +4497 4626 4625 +4497 4498 4627 +4497 4627 4626 +4498 4499 4627 +4499 4628 4627 +4499 4500 4629 +4499 4629 4628 +4500 4501 4629 +4501 4630 4629 +4501 4502 4631 +4501 4631 4630 +4502 4503 4631 +4503 4632 4631 +4503 4504 4633 +4503 4633 4632 +4504 4505 4633 +4505 4634 4633 +4505 4506 4635 +4505 4635 4634 +4506 4507 4635 +4507 4636 4635 +4507 4508 4637 +4507 4637 4636 +4508 4509 4637 +4509 4638 4637 +4509 4510 4639 +4509 4639 4638 +4510 4511 4639 +4511 4640 4639 +4511 4512 4641 +4511 4641 4640 +4512 4513 4641 +4513 4642 4641 +4513 4514 4643 +4513 4643 4642 +4514 4515 4643 +4515 4644 4643 +4516 4517 4645 +4517 4646 4645 +4517 4518 4647 +4517 4647 4646 +4518 4519 4647 +4519 4648 4647 +4519 4520 4649 +4519 4649 4648 +4520 4521 4649 +4521 4650 4649 +4521 4522 4651 +4521 4651 4650 +4522 4523 4651 +4523 4652 4651 +4523 4524 4653 +4523 4653 4652 +4524 4525 4653 +4525 4654 4653 +4525 4526 4655 +4525 4655 4654 +4526 4527 4655 +4527 4656 4655 +4527 4528 4657 +4527 4657 4656 +4528 4529 4657 +4529 4658 4657 +4529 4530 4659 +4529 4659 4658 +4530 4531 4659 +4531 4660 4659 +4531 4532 4661 +4531 4661 4660 +4532 4533 4661 +4533 4662 4661 +4533 4534 4663 +4533 4663 4662 +4534 4535 4663 +4535 4664 4663 +4535 4536 4665 +4535 4665 4664 +4536 4537 4665 +4537 4666 4665 +4537 4538 4667 +4537 4667 4666 +4538 4539 4667 +4539 4668 4667 +4539 4540 4669 +4539 4669 4668 +4540 4541 4669 +4541 4670 4669 +4541 4542 4671 +4541 4671 4670 +4542 4543 4671 +4543 4672 4671 +4543 4544 4673 +4543 4673 4672 +4544 4545 4673 +4545 4674 4673 +4545 4546 4675 +4545 4675 4674 +4546 4547 4675 +4547 4676 4675 +4547 4548 4677 +4547 4677 4676 +4548 4549 4677 +4549 4678 4677 +4549 4550 4679 +4549 4679 4678 +4550 4551 4679 +4551 4680 4679 +4551 4552 4681 +4551 4681 4680 +4552 4553 4681 +4553 4682 4681 +4553 4554 4683 +4553 4683 4682 +4554 4555 4683 +4555 4684 4683 +4555 4556 4685 +4555 4685 4684 +4556 4557 4685 +4557 4686 4685 +4557 4558 4687 +4557 4687 4686 +4558 4559 4687 +4559 4688 4687 +4559 4560 4689 +4559 4689 4688 +4560 4561 4689 +4561 4690 4689 +4561 4562 4691 +4561 4691 4690 +4562 4563 4691 +4563 4692 4691 +4563 4564 4693 +4563 4693 4692 +4564 4565 4693 +4565 4694 4693 +4565 4566 4695 +4565 4695 4694 +4566 4567 4695 +4567 4696 4695 +4567 4568 4697 +4567 4697 4696 +4568 4569 4697 +4569 4698 4697 +4569 4570 4699 +4569 4699 4698 +4570 4571 4699 +4571 4700 4699 +4571 4572 4701 +4571 4701 4700 +4572 4573 4701 +4573 4702 4701 +4573 4574 4703 +4573 4703 4702 +4574 4575 4703 +4575 4704 4703 +4575 4576 4705 +4575 4705 4704 +4576 4577 4705 +4577 4706 4705 +4577 4578 4707 +4577 4707 4706 +4578 4579 4707 +4579 4708 4707 +4579 4580 4709 +4579 4709 4708 +4580 4581 4709 +4581 4710 4709 +4581 4582 4711 +4581 4711 4710 +4582 4583 4711 +4583 4712 4711 +4583 4584 4713 +4583 4713 4712 +4584 4585 4713 +4585 4714 4713 +4585 4586 4715 +4585 4715 4714 +4586 4587 4715 +4587 4716 4715 +4587 4588 4717 +4587 4717 4716 +4588 4589 4717 +4589 4718 4717 +4589 4590 4719 +4589 4719 4718 +4590 4591 4719 +4591 4720 4719 +4591 4592 4721 +4591 4721 4720 +4592 4593 4721 +4593 4722 4721 +4593 4594 4723 +4593 4723 4722 +4594 4595 4723 +4595 4724 4723 +4595 4596 4725 +4595 4725 4724 +4596 4597 4725 +4597 4726 4725 +4597 4598 4727 +4597 4727 4726 +4598 4599 4727 +4599 4728 4727 +4599 4600 4729 +4599 4729 4728 +4600 4601 4729 +4601 4730 4729 +4601 4602 4731 +4601 4731 4730 +4602 4603 4731 +4603 4732 4731 +4603 4604 4733 +4603 4733 4732 +4604 4605 4733 +4605 4734 4733 +4605 4606 4735 +4605 4735 4734 +4606 4607 4735 +4607 4736 4735 +4607 4608 4737 +4607 4737 4736 +4608 4609 4737 +4609 4738 4737 +4609 4610 4739 +4609 4739 4738 +4610 4611 4739 +4611 4740 4739 +4611 4612 4741 +4611 4741 4740 +4612 4613 4741 +4613 4742 4741 +4613 4614 4743 +4613 4743 4742 +4614 4615 4743 +4615 4744 4743 +4615 4616 4745 +4615 4745 4744 +4616 4617 4745 +4617 4746 4745 +4617 4618 4747 +4617 4747 4746 +4618 4619 4747 +4619 4748 4747 +4619 4620 4749 +4619 4749 4748 +4620 4621 4749 +4621 4750 4749 +4621 4622 4751 +4621 4751 4750 +4622 4623 4751 +4623 4752 4751 +4623 4624 4753 +4623 4753 4752 +4624 4625 4753 +4625 4754 4753 +4625 4626 4755 +4625 4755 4754 +4626 4627 4755 +4627 4756 4755 +4627 4628 4757 +4627 4757 4756 +4628 4629 4757 +4629 4758 4757 +4629 4630 4759 +4629 4759 4758 +4630 4631 4759 +4631 4760 4759 +4631 4632 4761 +4631 4761 4760 +4632 4633 4761 +4633 4762 4761 +4633 4634 4763 +4633 4763 4762 +4634 4635 4763 +4635 4764 4763 +4635 4636 4765 +4635 4765 4764 +4636 4637 4765 +4637 4766 4765 +4637 4638 4767 +4637 4767 4766 +4638 4639 4767 +4639 4768 4767 +4639 4640 4769 +4639 4769 4768 +4640 4641 4769 +4641 4770 4769 +4641 4642 4771 +4641 4771 4770 +4642 4643 4771 +4643 4772 4771 +4643 4644 4773 +4643 4773 4772 +4645 4646 4775 +4645 4775 4774 +4646 4647 4775 +4647 4776 4775 +4647 4648 4777 +4647 4777 4776 +4648 4649 4777 +4649 4778 4777 +4649 4650 4779 +4649 4779 4778 +4650 4651 4779 +4651 4780 4779 +4651 4652 4781 +4651 4781 4780 +4652 4653 4781 +4653 4782 4781 +4653 4654 4783 +4653 4783 4782 +4654 4655 4783 +4655 4784 4783 +4655 4656 4785 +4655 4785 4784 +4656 4657 4785 +4657 4786 4785 +4657 4658 4787 +4657 4787 4786 +4658 4659 4787 +4659 4788 4787 +4659 4660 4789 +4659 4789 4788 +4660 4661 4789 +4661 4790 4789 +4661 4662 4791 +4661 4791 4790 +4662 4663 4791 +4663 4792 4791 +4663 4664 4793 +4663 4793 4792 +4664 4665 4793 +4665 4794 4793 +4665 4666 4795 +4665 4795 4794 +4666 4667 4795 +4667 4796 4795 +4667 4668 4797 +4667 4797 4796 +4668 4669 4797 +4669 4798 4797 +4669 4670 4799 +4669 4799 4798 +4670 4671 4799 +4671 4800 4799 +4671 4672 4801 +4671 4801 4800 +4672 4673 4801 +4673 4802 4801 +4673 4674 4803 +4673 4803 4802 +4674 4675 4803 +4675 4804 4803 +4675 4676 4805 +4675 4805 4804 +4676 4677 4805 +4677 4806 4805 +4677 4678 4807 +4677 4807 4806 +4678 4679 4807 +4679 4808 4807 +4679 4680 4809 +4679 4809 4808 +4680 4681 4809 +4681 4810 4809 +4681 4682 4811 +4681 4811 4810 +4682 4683 4811 +4683 4812 4811 +4683 4684 4813 +4683 4813 4812 +4684 4685 4813 +4685 4814 4813 +4685 4686 4815 +4685 4815 4814 +4686 4687 4815 +4687 4816 4815 +4687 4688 4817 +4687 4817 4816 +4688 4689 4817 +4689 4818 4817 +4689 4690 4819 +4689 4819 4818 +4690 4691 4819 +4691 4820 4819 +4691 4692 4821 +4691 4821 4820 +4692 4693 4821 +4693 4822 4821 +4693 4694 4823 +4693 4823 4822 +4694 4695 4823 +4695 4824 4823 +4695 4696 4825 +4695 4825 4824 +4696 4697 4825 +4697 4826 4825 +4697 4698 4827 +4697 4827 4826 +4698 4699 4827 +4699 4828 4827 +4699 4700 4829 +4699 4829 4828 +4700 4701 4829 +4701 4830 4829 +4701 4702 4831 +4701 4831 4830 +4702 4703 4831 +4703 4832 4831 +4703 4704 4833 +4703 4833 4832 +4704 4705 4833 +4705 4834 4833 +4705 4706 4835 +4705 4835 4834 +4706 4707 4835 +4707 4836 4835 +4707 4708 4837 +4707 4837 4836 +4708 4709 4837 +4709 4838 4837 +4709 4710 4839 +4709 4839 4838 +4710 4711 4839 +4711 4840 4839 +4711 4712 4841 +4711 4841 4840 +4712 4713 4841 +4713 4842 4841 +4713 4714 4843 +4713 4843 4842 +4714 4715 4843 +4715 4844 4843 +4715 4716 4845 +4715 4845 4844 +4716 4717 4845 +4717 4846 4845 +4717 4718 4847 +4717 4847 4846 +4718 4719 4847 +4719 4848 4847 +4719 4720 4849 +4719 4849 4848 +4720 4721 4849 +4721 4850 4849 +4721 4722 4851 +4721 4851 4850 +4722 4723 4851 +4723 4852 4851 +4723 4724 4853 +4723 4853 4852 +4724 4725 4853 +4725 4854 4853 +4725 4726 4855 +4725 4855 4854 +4726 4727 4855 +4727 4856 4855 +4727 4728 4857 +4727 4857 4856 +4728 4729 4857 +4729 4858 4857 +4729 4730 4859 +4729 4859 4858 +4730 4731 4859 +4731 4860 4859 +4731 4732 4861 +4731 4861 4860 +4732 4733 4861 +4733 4862 4861 +4733 4734 4863 +4733 4863 4862 +4734 4735 4863 +4735 4864 4863 +4735 4736 4865 +4735 4865 4864 +4736 4737 4865 +4737 4866 4865 +4737 4738 4867 +4737 4867 4866 +4738 4739 4867 +4739 4868 4867 +4739 4740 4869 +4739 4869 4868 +4740 4741 4869 +4741 4870 4869 +4741 4742 4871 +4741 4871 4870 +4742 4743 4871 +4743 4872 4871 +4743 4744 4873 +4743 4873 4872 +4744 4745 4873 +4745 4874 4873 +4745 4746 4875 +4745 4875 4874 +4746 4747 4875 +4747 4876 4875 +4747 4748 4877 +4747 4877 4876 +4748 4749 4877 +4749 4878 4877 +4749 4750 4879 +4749 4879 4878 +4750 4751 4879 +4751 4880 4879 +4751 4752 4881 +4751 4881 4880 +4752 4753 4881 +4753 4882 4881 +4753 4754 4883 +4753 4883 4882 +4754 4755 4883 +4755 4884 4883 +4755 4756 4885 +4755 4885 4884 +4756 4757 4885 +4757 4886 4885 +4757 4758 4887 +4757 4887 4886 +4758 4759 4887 +4759 4888 4887 +4759 4760 4889 +4759 4889 4888 +4760 4761 4889 +4761 4890 4889 +4761 4762 4891 +4761 4891 4890 +4762 4763 4891 +4763 4892 4891 +4763 4764 4893 +4763 4893 4892 +4764 4765 4893 +4765 4894 4893 +4765 4766 4895 +4765 4895 4894 +4766 4767 4895 +4767 4896 4895 +4767 4768 4897 +4767 4897 4896 +4768 4769 4897 +4769 4898 4897 +4769 4770 4899 +4769 4899 4898 +4770 4771 4899 +4771 4900 4899 +4771 4772 4901 +4771 4901 4900 +4772 4773 4901 +4773 4902 4901 +4774 4775 4903 +4775 4904 4903 +4775 4776 4905 +4775 4905 4904 +4776 4777 4905 +4777 4906 4905 +4777 4778 4907 +4777 4907 4906 +4778 4779 4907 +4779 4908 4907 +4779 4780 4909 +4779 4909 4908 +4780 4781 4909 +4781 4910 4909 +4781 4782 4911 +4781 4911 4910 +4782 4783 4911 +4783 4912 4911 +4783 4784 4913 +4783 4913 4912 +4784 4785 4913 +4785 4914 4913 +4785 4786 4915 +4785 4915 4914 +4786 4787 4915 +4787 4916 4915 +4787 4788 4917 +4787 4917 4916 +4788 4789 4917 +4789 4918 4917 +4789 4790 4919 +4789 4919 4918 +4790 4791 4919 +4791 4920 4919 +4791 4792 4921 +4791 4921 4920 +4792 4793 4921 +4793 4922 4921 +4793 4794 4923 +4793 4923 4922 +4794 4795 4923 +4795 4924 4923 +4795 4796 4925 +4795 4925 4924 +4796 4797 4925 +4797 4926 4925 +4797 4798 4927 +4797 4927 4926 +4798 4799 4927 +4799 4928 4927 +4799 4800 4929 +4799 4929 4928 +4800 4801 4929 +4801 4930 4929 +4801 4802 4931 +4801 4931 4930 +4802 4803 4931 +4803 4932 4931 +4803 4804 4933 +4803 4933 4932 +4804 4805 4933 +4805 4934 4933 +4805 4806 4935 +4805 4935 4934 +4806 4807 4935 +4807 4936 4935 +4807 4808 4937 +4807 4937 4936 +4808 4809 4937 +4809 4938 4937 +4809 4810 4939 +4809 4939 4938 +4810 4811 4939 +4811 4940 4939 +4811 4812 4941 +4811 4941 4940 +4812 4813 4941 +4813 4942 4941 +4813 4814 4943 +4813 4943 4942 +4814 4815 4943 +4815 4944 4943 +4815 4816 4945 +4815 4945 4944 +4816 4817 4945 +4817 4946 4945 +4817 4818 4947 +4817 4947 4946 +4818 4819 4947 +4819 4948 4947 +4819 4820 4949 +4819 4949 4948 +4820 4821 4949 +4821 4950 4949 +4821 4822 4951 +4821 4951 4950 +4822 4823 4951 +4823 4952 4951 +4823 4824 4953 +4823 4953 4952 +4824 4825 4953 +4825 4954 4953 +4825 4826 4955 +4825 4955 4954 +4826 4827 4955 +4827 4956 4955 +4827 4828 4957 +4827 4957 4956 +4828 4829 4957 +4829 4958 4957 +4829 4830 4959 +4829 4959 4958 +4830 4831 4959 +4831 4960 4959 +4831 4832 4961 +4831 4961 4960 +4832 4833 4961 +4833 4962 4961 +4833 4834 4963 +4833 4963 4962 +4834 4835 4963 +4835 4964 4963 +4835 4836 4965 +4835 4965 4964 +4836 4837 4965 +4837 4966 4965 +4837 4838 4967 +4837 4967 4966 +4838 4839 4967 +4839 4968 4967 +4839 4840 4969 +4839 4969 4968 +4840 4841 4969 +4841 4970 4969 +4841 4842 4971 +4841 4971 4970 +4842 4843 4971 +4843 4972 4971 +4843 4844 4973 +4843 4973 4972 +4844 4845 4973 +4845 4974 4973 +4845 4846 4975 +4845 4975 4974 +4846 4847 4975 +4847 4976 4975 +4847 4848 4977 +4847 4977 4976 +4848 4849 4977 +4849 4978 4977 +4849 4850 4979 +4849 4979 4978 +4850 4851 4979 +4851 4980 4979 +4851 4852 4981 +4851 4981 4980 +4852 4853 4981 +4853 4982 4981 +4853 4854 4983 +4853 4983 4982 +4854 4855 4983 +4855 4984 4983 +4855 4856 4985 +4855 4985 4984 +4856 4857 4985 +4857 4986 4985 +4857 4858 4987 +4857 4987 4986 +4858 4859 4987 +4859 4988 4987 +4859 4860 4989 +4859 4989 4988 +4860 4861 4989 +4861 4990 4989 +4861 4862 4991 +4861 4991 4990 +4862 4863 4991 +4863 4992 4991 +4863 4864 4993 +4863 4993 4992 +4864 4865 4993 +4865 4994 4993 +4865 4866 4995 +4865 4995 4994 +4866 4867 4995 +4867 4996 4995 +4867 4868 4997 +4867 4997 4996 +4868 4869 4997 +4869 4998 4997 +4869 4870 4999 +4869 4999 4998 +4870 4871 4999 +4871 5000 4999 +4871 4872 5001 +4871 5001 5000 +4872 4873 5001 +4873 5002 5001 +4873 4874 5003 +4873 5003 5002 +4874 4875 5003 +4875 5004 5003 +4875 4876 5005 +4875 5005 5004 +4876 4877 5005 +4877 5006 5005 +4877 4878 5007 +4877 5007 5006 +4878 4879 5007 +4879 5008 5007 +4879 4880 5009 +4879 5009 5008 +4880 4881 5009 +4881 5010 5009 +4881 4882 5011 +4881 5011 5010 +4882 4883 5011 +4883 5012 5011 +4883 4884 5013 +4883 5013 5012 +4884 4885 5013 +4885 5014 5013 +4885 4886 5015 +4885 5015 5014 +4886 4887 5015 +4887 5016 5015 +4887 4888 5017 +4887 5017 5016 +4888 4889 5017 +4889 5018 5017 +4889 4890 5019 +4889 5019 5018 +4890 4891 5019 +4891 5020 5019 +4891 4892 5021 +4891 5021 5020 +4892 4893 5021 +4893 5022 5021 +4893 4894 5023 +4893 5023 5022 +4894 4895 5023 +4895 5024 5023 +4895 4896 5025 +4895 5025 5024 +4896 4897 5025 +4897 5026 5025 +4897 4898 5027 +4897 5027 5026 +4898 4899 5027 +4899 5028 5027 +4899 4900 5029 +4899 5029 5028 +4900 4901 5029 +4901 5030 5029 +4901 4902 5031 +4901 5031 5030 +4903 4904 5033 +4903 5033 5032 +4904 4905 5033 +4905 5034 5033 +4905 4906 5035 +4905 5035 5034 +4906 4907 5035 +4907 5036 5035 +4907 4908 5037 +4907 5037 5036 +4908 4909 5037 +4909 5038 5037 +4909 4910 5039 +4909 5039 5038 +4910 4911 5039 +4911 5040 5039 +4911 4912 5041 +4911 5041 5040 +4912 4913 5041 +4913 5042 5041 +4913 4914 5043 +4913 5043 5042 +4914 4915 5043 +4915 5044 5043 +4915 4916 5045 +4915 5045 5044 +4916 4917 5045 +4917 5046 5045 +4917 4918 5047 +4917 5047 5046 +4918 4919 5047 +4919 5048 5047 +4919 4920 5049 +4919 5049 5048 +4920 4921 5049 +4921 5050 5049 +4921 4922 5051 +4921 5051 5050 +4922 4923 5051 +4923 5052 5051 +4923 4924 5053 +4923 5053 5052 +4924 4925 5053 +4925 5054 5053 +4925 4926 5055 +4925 5055 5054 +4926 4927 5055 +4927 5056 5055 +4927 4928 5057 +4927 5057 5056 +4928 4929 5057 +4929 5058 5057 +4929 4930 5059 +4929 5059 5058 +4930 4931 5059 +4931 5060 5059 +4931 4932 5061 +4931 5061 5060 +4932 4933 5061 +4933 5062 5061 +4933 4934 5063 +4933 5063 5062 +4934 4935 5063 +4935 5064 5063 +4935 4936 5065 +4935 5065 5064 +4936 4937 5065 +4937 5066 5065 +4937 4938 5067 +4937 5067 5066 +4938 4939 5067 +4939 5068 5067 +4939 4940 5069 +4939 5069 5068 +4940 4941 5069 +4941 5070 5069 +4941 4942 5071 +4941 5071 5070 +4942 4943 5071 +4943 5072 5071 +4943 4944 5073 +4943 5073 5072 +4944 4945 5073 +4945 5074 5073 +4945 4946 5075 +4945 5075 5074 +4946 4947 5075 +4947 5076 5075 +4947 4948 5077 +4947 5077 5076 +4948 4949 5077 +4949 5078 5077 +4949 4950 5079 +4949 5079 5078 +4950 4951 5079 +4951 5080 5079 +4951 4952 5081 +4951 5081 5080 +4952 4953 5081 +4953 5082 5081 +4953 4954 5083 +4953 5083 5082 +4954 4955 5083 +4955 5084 5083 +4955 4956 5085 +4955 5085 5084 +4956 4957 5085 +4957 5086 5085 +4957 4958 5087 +4957 5087 5086 +4958 4959 5087 +4959 5088 5087 +4959 4960 5089 +4959 5089 5088 +4960 4961 5089 +4961 5090 5089 +4961 4962 5091 +4961 5091 5090 +4962 4963 5091 +4963 5092 5091 +4963 4964 5093 +4963 5093 5092 +4964 4965 5093 +4965 5094 5093 +4965 4966 5095 +4965 5095 5094 +4966 4967 5095 +4967 5096 5095 +4967 4968 5097 +4967 5097 5096 +4968 4969 5097 +4969 5098 5097 +4969 4970 5099 +4969 5099 5098 +4970 4971 5099 +4971 5100 5099 +4971 4972 5101 +4971 5101 5100 +4972 4973 5101 +4973 5102 5101 +4973 4974 5103 +4973 5103 5102 +4974 4975 5103 +4975 5104 5103 +4975 4976 5105 +4975 5105 5104 +4976 4977 5105 +4977 5106 5105 +4977 4978 5107 +4977 5107 5106 +4978 4979 5107 +4979 5108 5107 +4979 4980 5109 +4979 5109 5108 +4980 4981 5109 +4981 5110 5109 +4981 4982 5111 +4981 5111 5110 +4982 4983 5111 +4983 5112 5111 +4983 4984 5113 +4983 5113 5112 +4984 4985 5113 +4985 5114 5113 +4985 4986 5115 +4985 5115 5114 +4986 4987 5115 +4987 5116 5115 +4987 4988 5117 +4987 5117 5116 +4988 4989 5117 +4989 5118 5117 +4989 4990 5119 +4989 5119 5118 +4990 4991 5119 +4991 5120 5119 +4991 4992 5121 +4991 5121 5120 +4992 4993 5121 +4993 5122 5121 +4993 4994 5123 +4993 5123 5122 +4994 4995 5123 +4995 5124 5123 +4995 4996 5125 +4995 5125 5124 +4996 4997 5125 +4997 5126 5125 +4997 4998 5127 +4997 5127 5126 +4998 4999 5127 +4999 5128 5127 +4999 5000 5129 +4999 5129 5128 +5000 5001 5129 +5001 5130 5129 +5001 5002 5131 +5001 5131 5130 +5002 5003 5131 +5003 5132 5131 +5003 5004 5133 +5003 5133 5132 +5004 5005 5133 +5005 5134 5133 +5005 5006 5135 +5005 5135 5134 +5006 5007 5135 +5007 5136 5135 +5007 5008 5137 +5007 5137 5136 +5008 5009 5137 +5009 5138 5137 +5009 5010 5139 +5009 5139 5138 +5010 5011 5139 +5011 5140 5139 +5011 5012 5141 +5011 5141 5140 +5012 5013 5141 +5013 5142 5141 +5013 5014 5143 +5013 5143 5142 +5014 5015 5143 +5015 5144 5143 +5015 5016 5145 +5015 5145 5144 +5016 5017 5145 +5017 5146 5145 +5017 5018 5147 +5017 5147 5146 +5018 5019 5147 +5019 5148 5147 +5019 5020 5149 +5019 5149 5148 +5020 5021 5149 +5021 5150 5149 +5021 5022 5151 +5021 5151 5150 +5022 5023 5151 +5023 5152 5151 +5023 5024 5153 +5023 5153 5152 +5024 5025 5153 +5025 5154 5153 +5025 5026 5155 +5025 5155 5154 +5026 5027 5155 +5027 5156 5155 +5027 5028 5157 +5027 5157 5156 +5028 5029 5157 +5029 5158 5157 +5029 5030 5159 +5029 5159 5158 +5030 5031 5159 +5031 5160 5159 +5032 5033 5161 +5033 5162 5161 +5033 5034 5163 +5033 5163 5162 +5034 5035 5163 +5035 5164 5163 +5035 5036 5165 +5035 5165 5164 +5036 5037 5165 +5037 5166 5165 +5037 5038 5167 +5037 5167 5166 +5038 5039 5167 +5039 5168 5167 +5039 5040 5169 +5039 5169 5168 +5040 5041 5169 +5041 5170 5169 +5041 5042 5171 +5041 5171 5170 +5042 5043 5171 +5043 5172 5171 +5043 5044 5173 +5043 5173 5172 +5044 5045 5173 +5045 5174 5173 +5045 5046 5175 +5045 5175 5174 +5046 5047 5175 +5047 5176 5175 +5047 5048 5177 +5047 5177 5176 +5048 5049 5177 +5049 5178 5177 +5049 5050 5179 +5049 5179 5178 +5050 5051 5179 +5051 5180 5179 +5051 5052 5181 +5051 5181 5180 +5052 5053 5181 +5053 5182 5181 +5053 5054 5183 +5053 5183 5182 +5054 5055 5183 +5055 5184 5183 +5055 5056 5185 +5055 5185 5184 +5056 5057 5185 +5057 5186 5185 +5057 5058 5187 +5057 5187 5186 +5058 5059 5187 +5059 5188 5187 +5059 5060 5189 +5059 5189 5188 +5060 5061 5189 +5061 5190 5189 +5061 5062 5191 +5061 5191 5190 +5062 5063 5191 +5063 5192 5191 +5063 5064 5193 +5063 5193 5192 +5064 5065 5193 +5065 5194 5193 +5065 5066 5195 +5065 5195 5194 +5066 5067 5195 +5067 5196 5195 +5067 5068 5197 +5067 5197 5196 +5068 5069 5197 +5069 5198 5197 +5069 5070 5199 +5069 5199 5198 +5070 5071 5199 +5071 5200 5199 +5071 5072 5201 +5071 5201 5200 +5072 5073 5201 +5073 5202 5201 +5073 5074 5203 +5073 5203 5202 +5074 5075 5203 +5075 5204 5203 +5075 5076 5205 +5075 5205 5204 +5076 5077 5205 +5077 5206 5205 +5077 5078 5207 +5077 5207 5206 +5078 5079 5207 +5079 5208 5207 +5079 5080 5209 +5079 5209 5208 +5080 5081 5209 +5081 5210 5209 +5081 5082 5211 +5081 5211 5210 +5082 5083 5211 +5083 5212 5211 +5083 5084 5213 +5083 5213 5212 +5084 5085 5213 +5085 5214 5213 +5085 5086 5215 +5085 5215 5214 +5086 5087 5215 +5087 5216 5215 +5087 5088 5217 +5087 5217 5216 +5088 5089 5217 +5089 5218 5217 +5089 5090 5219 +5089 5219 5218 +5090 5091 5219 +5091 5220 5219 +5091 5092 5221 +5091 5221 5220 +5092 5093 5221 +5093 5222 5221 +5093 5094 5223 +5093 5223 5222 +5094 5095 5223 +5095 5224 5223 +5095 5096 5225 +5095 5225 5224 +5096 5097 5225 +5097 5226 5225 +5097 5098 5227 +5097 5227 5226 +5098 5099 5227 +5099 5228 5227 +5099 5100 5229 +5099 5229 5228 +5100 5101 5229 +5101 5230 5229 +5101 5102 5231 +5101 5231 5230 +5102 5103 5231 +5103 5232 5231 +5103 5104 5233 +5103 5233 5232 +5104 5105 5233 +5105 5234 5233 +5105 5106 5235 +5105 5235 5234 +5106 5107 5235 +5107 5236 5235 +5107 5108 5237 +5107 5237 5236 +5108 5109 5237 +5109 5238 5237 +5109 5110 5239 +5109 5239 5238 +5110 5111 5239 +5111 5240 5239 +5111 5112 5241 +5111 5241 5240 +5112 5113 5241 +5113 5242 5241 +5113 5114 5243 +5113 5243 5242 +5114 5115 5243 +5115 5244 5243 +5115 5116 5245 +5115 5245 5244 +5116 5117 5245 +5117 5246 5245 +5117 5118 5247 +5117 5247 5246 +5118 5119 5247 +5119 5248 5247 +5119 5120 5249 +5119 5249 5248 +5120 5121 5249 +5121 5250 5249 +5121 5122 5251 +5121 5251 5250 +5122 5123 5251 +5123 5252 5251 +5123 5124 5253 +5123 5253 5252 +5124 5125 5253 +5125 5254 5253 +5125 5126 5255 +5125 5255 5254 +5126 5127 5255 +5127 5256 5255 +5127 5128 5257 +5127 5257 5256 +5128 5129 5257 +5129 5258 5257 +5129 5130 5259 +5129 5259 5258 +5130 5131 5259 +5131 5260 5259 +5131 5132 5261 +5131 5261 5260 +5132 5133 5261 +5133 5262 5261 +5133 5134 5263 +5133 5263 5262 +5134 5135 5263 +5135 5264 5263 +5135 5136 5265 +5135 5265 5264 +5136 5137 5265 +5137 5266 5265 +5137 5138 5267 +5137 5267 5266 +5138 5139 5267 +5139 5268 5267 +5139 5140 5269 +5139 5269 5268 +5140 5141 5269 +5141 5270 5269 +5141 5142 5271 +5141 5271 5270 +5142 5143 5271 +5143 5272 5271 +5143 5144 5273 +5143 5273 5272 +5144 5145 5273 +5145 5274 5273 +5145 5146 5275 +5145 5275 5274 +5146 5147 5275 +5147 5276 5275 +5147 5148 5277 +5147 5277 5276 +5148 5149 5277 +5149 5278 5277 +5149 5150 5279 +5149 5279 5278 +5150 5151 5279 +5151 5280 5279 +5151 5152 5281 +5151 5281 5280 +5152 5153 5281 +5153 5282 5281 +5153 5154 5283 +5153 5283 5282 +5154 5155 5283 +5155 5284 5283 +5155 5156 5285 +5155 5285 5284 +5156 5157 5285 +5157 5286 5285 +5157 5158 5287 +5157 5287 5286 +5158 5159 5287 +5159 5288 5287 +5159 5160 5289 +5159 5289 5288 +5161 5162 5291 +5161 5291 5290 +5162 5163 5291 +5163 5292 5291 +5163 5164 5293 +5163 5293 5292 +5164 5165 5293 +5165 5294 5293 +5165 5166 5295 +5165 5295 5294 +5166 5167 5295 +5167 5296 5295 +5167 5168 5297 +5167 5297 5296 +5168 5169 5297 +5169 5298 5297 +5169 5170 5299 +5169 5299 5298 +5170 5171 5299 +5171 5300 5299 +5171 5172 5301 +5171 5301 5300 +5172 5173 5301 +5173 5302 5301 +5173 5174 5303 +5173 5303 5302 +5174 5175 5303 +5175 5304 5303 +5175 5176 5305 +5175 5305 5304 +5176 5177 5305 +5177 5306 5305 +5177 5178 5307 +5177 5307 5306 +5178 5179 5307 +5179 5308 5307 +5179 5180 5309 +5179 5309 5308 +5180 5181 5309 +5181 5310 5309 +5181 5182 5311 +5181 5311 5310 +5182 5183 5311 +5183 5312 5311 +5183 5184 5313 +5183 5313 5312 +5184 5185 5313 +5185 5314 5313 +5185 5186 5315 +5185 5315 5314 +5186 5187 5315 +5187 5316 5315 +5187 5188 5317 +5187 5317 5316 +5188 5189 5317 +5189 5318 5317 +5189 5190 5319 +5189 5319 5318 +5190 5191 5319 +5191 5320 5319 +5191 5192 5321 +5191 5321 5320 +5192 5193 5321 +5193 5322 5321 +5193 5194 5323 +5193 5323 5322 +5194 5195 5323 +5195 5324 5323 +5195 5196 5325 +5195 5325 5324 +5196 5197 5325 +5197 5326 5325 +5197 5198 5327 +5197 5327 5326 +5198 5199 5327 +5199 5328 5327 +5199 5200 5329 +5199 5329 5328 +5200 5201 5329 +5201 5330 5329 +5201 5202 5331 +5201 5331 5330 +5202 5203 5331 +5203 5332 5331 +5203 5204 5333 +5203 5333 5332 +5204 5205 5333 +5205 5334 5333 +5205 5206 5335 +5205 5335 5334 +5206 5207 5335 +5207 5336 5335 +5207 5208 5337 +5207 5337 5336 +5208 5209 5337 +5209 5338 5337 +5209 5210 5339 +5209 5339 5338 +5210 5211 5339 +5211 5340 5339 +5211 5212 5341 +5211 5341 5340 +5212 5213 5341 +5213 5342 5341 +5213 5214 5343 +5213 5343 5342 +5214 5215 5343 +5215 5344 5343 +5215 5216 5345 +5215 5345 5344 +5216 5217 5345 +5217 5346 5345 +5217 5218 5347 +5217 5347 5346 +5218 5219 5347 +5219 5348 5347 +5219 5220 5349 +5219 5349 5348 +5220 5221 5349 +5221 5350 5349 +5221 5222 5351 +5221 5351 5350 +5222 5223 5351 +5223 5352 5351 +5223 5224 5353 +5223 5353 5352 +5224 5225 5353 +5225 5354 5353 +5225 5226 5355 +5225 5355 5354 +5226 5227 5355 +5227 5356 5355 +5227 5228 5357 +5227 5357 5356 +5228 5229 5357 +5229 5358 5357 +5229 5230 5359 +5229 5359 5358 +5230 5231 5359 +5231 5360 5359 +5231 5232 5361 +5231 5361 5360 +5232 5233 5361 +5233 5362 5361 +5233 5234 5363 +5233 5363 5362 +5234 5235 5363 +5235 5364 5363 +5235 5236 5365 +5235 5365 5364 +5236 5237 5365 +5237 5366 5365 +5237 5238 5367 +5237 5367 5366 +5238 5239 5367 +5239 5368 5367 +5239 5240 5369 +5239 5369 5368 +5240 5241 5369 +5241 5370 5369 +5241 5242 5371 +5241 5371 5370 +5242 5243 5371 +5243 5372 5371 +5243 5244 5373 +5243 5373 5372 +5244 5245 5373 +5245 5374 5373 +5245 5246 5375 +5245 5375 5374 +5246 5247 5375 +5247 5376 5375 +5247 5248 5377 +5247 5377 5376 +5248 5249 5377 +5249 5378 5377 +5249 5250 5379 +5249 5379 5378 +5250 5251 5379 +5251 5380 5379 +5251 5252 5381 +5251 5381 5380 +5252 5253 5381 +5253 5382 5381 +5253 5254 5383 +5253 5383 5382 +5254 5255 5383 +5255 5384 5383 +5255 5256 5385 +5255 5385 5384 +5256 5257 5385 +5257 5386 5385 +5257 5258 5387 +5257 5387 5386 +5258 5259 5387 +5259 5388 5387 +5259 5260 5389 +5259 5389 5388 +5260 5261 5389 +5261 5390 5389 +5261 5262 5391 +5261 5391 5390 +5262 5263 5391 +5263 5392 5391 +5263 5264 5393 +5263 5393 5392 +5264 5265 5393 +5265 5394 5393 +5265 5266 5395 +5265 5395 5394 +5266 5267 5395 +5267 5396 5395 +5267 5268 5397 +5267 5397 5396 +5268 5269 5397 +5269 5398 5397 +5269 5270 5399 +5269 5399 5398 +5270 5271 5399 +5271 5400 5399 +5271 5272 5401 +5271 5401 5400 +5272 5273 5401 +5273 5402 5401 +5273 5274 5403 +5273 5403 5402 +5274 5275 5403 +5275 5404 5403 +5275 5276 5405 +5275 5405 5404 +5276 5277 5405 +5277 5406 5405 +5277 5278 5407 +5277 5407 5406 +5278 5279 5407 +5279 5408 5407 +5279 5280 5409 +5279 5409 5408 +5280 5281 5409 +5281 5410 5409 +5281 5282 5411 +5281 5411 5410 +5282 5283 5411 +5283 5412 5411 +5283 5284 5413 +5283 5413 5412 +5284 5285 5413 +5285 5414 5413 +5285 5286 5415 +5285 5415 5414 +5286 5287 5415 +5287 5416 5415 +5287 5288 5417 +5287 5417 5416 +5288 5289 5417 +5289 5418 5417 +5290 5291 5419 +5291 5420 5419 +5291 5292 5421 +5291 5421 5420 +5292 5293 5421 +5293 5422 5421 +5293 5294 5423 +5293 5423 5422 +5294 5295 5423 +5295 5424 5423 +5295 5296 5425 +5295 5425 5424 +5296 5297 5425 +5297 5426 5425 +5297 5298 5427 +5297 5427 5426 +5298 5299 5427 +5299 5428 5427 +5299 5300 5429 +5299 5429 5428 +5300 5301 5429 +5301 5430 5429 +5301 5302 5431 +5301 5431 5430 +5302 5303 5431 +5303 5432 5431 +5303 5304 5433 +5303 5433 5432 +5304 5305 5433 +5305 5434 5433 +5305 5306 5435 +5305 5435 5434 +5306 5307 5435 +5307 5436 5435 +5307 5308 5437 +5307 5437 5436 +5308 5309 5437 +5309 5438 5437 +5309 5310 5439 +5309 5439 5438 +5310 5311 5439 +5311 5440 5439 +5311 5312 5441 +5311 5441 5440 +5312 5313 5441 +5313 5442 5441 +5313 5314 5443 +5313 5443 5442 +5314 5315 5443 +5315 5444 5443 +5315 5316 5445 +5315 5445 5444 +5316 5317 5445 +5317 5446 5445 +5317 5318 5447 +5317 5447 5446 +5318 5319 5447 +5319 5448 5447 +5319 5320 5449 +5319 5449 5448 +5320 5321 5449 +5321 5450 5449 +5321 5322 5451 +5321 5451 5450 +5322 5323 5451 +5323 5452 5451 +5323 5324 5453 +5323 5453 5452 +5324 5325 5453 +5325 5454 5453 +5325 5326 5455 +5325 5455 5454 +5326 5327 5455 +5327 5456 5455 +5327 5328 5457 +5327 5457 5456 +5328 5329 5457 +5329 5458 5457 +5329 5330 5459 +5329 5459 5458 +5330 5331 5459 +5331 5460 5459 +5331 5332 5461 +5331 5461 5460 +5332 5333 5461 +5333 5462 5461 +5333 5334 5463 +5333 5463 5462 +5334 5335 5463 +5335 5464 5463 +5335 5336 5465 +5335 5465 5464 +5336 5337 5465 +5337 5466 5465 +5337 5338 5467 +5337 5467 5466 +5338 5339 5467 +5339 5468 5467 +5339 5340 5469 +5339 5469 5468 +5340 5341 5469 +5341 5470 5469 +5341 5342 5471 +5341 5471 5470 +5342 5343 5471 +5343 5472 5471 +5343 5344 5473 +5343 5473 5472 +5344 5345 5473 +5345 5474 5473 +5345 5346 5475 +5345 5475 5474 +5346 5347 5475 +5347 5476 5475 +5347 5348 5477 +5347 5477 5476 +5348 5349 5477 +5349 5478 5477 +5349 5350 5479 +5349 5479 5478 +5350 5351 5479 +5351 5480 5479 +5351 5352 5481 +5351 5481 5480 +5352 5353 5481 +5353 5482 5481 +5353 5354 5483 +5353 5483 5482 +5354 5355 5483 +5355 5484 5483 +5355 5356 5485 +5355 5485 5484 +5356 5357 5485 +5357 5486 5485 +5357 5358 5487 +5357 5487 5486 +5358 5359 5487 +5359 5488 5487 +5359 5360 5489 +5359 5489 5488 +5360 5361 5489 +5361 5490 5489 +5361 5362 5491 +5361 5491 5490 +5362 5363 5491 +5363 5492 5491 +5363 5364 5493 +5363 5493 5492 +5364 5365 5493 +5365 5494 5493 +5365 5366 5495 +5365 5495 5494 +5366 5367 5495 +5367 5496 5495 +5367 5368 5497 +5367 5497 5496 +5368 5369 5497 +5369 5498 5497 +5369 5370 5499 +5369 5499 5498 +5370 5371 5499 +5371 5500 5499 +5371 5372 5501 +5371 5501 5500 +5372 5373 5501 +5373 5502 5501 +5373 5374 5503 +5373 5503 5502 +5374 5375 5503 +5375 5504 5503 +5375 5376 5505 +5375 5505 5504 +5376 5377 5505 +5377 5506 5505 +5377 5378 5507 +5377 5507 5506 +5378 5379 5507 +5379 5508 5507 +5379 5380 5509 +5379 5509 5508 +5380 5381 5509 +5381 5510 5509 +5381 5382 5511 +5381 5511 5510 +5382 5383 5511 +5383 5512 5511 +5383 5384 5513 +5383 5513 5512 +5384 5385 5513 +5385 5514 5513 +5385 5386 5515 +5385 5515 5514 +5386 5387 5515 +5387 5516 5515 +5387 5388 5517 +5387 5517 5516 +5388 5389 5517 +5389 5518 5517 +5389 5390 5519 +5389 5519 5518 +5390 5391 5519 +5391 5520 5519 +5391 5392 5521 +5391 5521 5520 +5392 5393 5521 +5393 5522 5521 +5393 5394 5523 +5393 5523 5522 +5394 5395 5523 +5395 5524 5523 +5395 5396 5525 +5395 5525 5524 +5396 5397 5525 +5397 5526 5525 +5397 5398 5527 +5397 5527 5526 +5398 5399 5527 +5399 5528 5527 +5399 5400 5529 +5399 5529 5528 +5400 5401 5529 +5401 5530 5529 +5401 5402 5531 +5401 5531 5530 +5402 5403 5531 +5403 5532 5531 +5403 5404 5533 +5403 5533 5532 +5404 5405 5533 +5405 5534 5533 +5405 5406 5535 +5405 5535 5534 +5406 5407 5535 +5407 5536 5535 +5407 5408 5537 +5407 5537 5536 +5408 5409 5537 +5409 5538 5537 +5409 5410 5539 +5409 5539 5538 +5410 5411 5539 +5411 5540 5539 +5411 5412 5541 +5411 5541 5540 +5412 5413 5541 +5413 5542 5541 +5413 5414 5543 +5413 5543 5542 +5414 5415 5543 +5415 5544 5543 +5415 5416 5545 +5415 5545 5544 +5416 5417 5545 +5417 5546 5545 +5417 5418 5547 +5417 5547 5546 +5419 5420 5549 +5419 5549 5548 +5420 5421 5549 +5421 5550 5549 +5421 5422 5551 +5421 5551 5550 +5422 5423 5551 +5423 5552 5551 +5423 5424 5553 +5423 5553 5552 +5424 5425 5553 +5425 5554 5553 +5425 5426 5555 +5425 5555 5554 +5426 5427 5555 +5427 5556 5555 +5427 5428 5557 +5427 5557 5556 +5428 5429 5557 +5429 5558 5557 +5429 5430 5559 +5429 5559 5558 +5430 5431 5559 +5431 5560 5559 +5431 5432 5561 +5431 5561 5560 +5432 5433 5561 +5433 5562 5561 +5433 5434 5563 +5433 5563 5562 +5434 5435 5563 +5435 5564 5563 +5435 5436 5565 +5435 5565 5564 +5436 5437 5565 +5437 5566 5565 +5437 5438 5567 +5437 5567 5566 +5438 5439 5567 +5439 5568 5567 +5439 5440 5569 +5439 5569 5568 +5440 5441 5569 +5441 5570 5569 +5441 5442 5571 +5441 5571 5570 +5442 5443 5571 +5443 5572 5571 +5443 5444 5573 +5443 5573 5572 +5444 5445 5573 +5445 5574 5573 +5445 5446 5575 +5445 5575 5574 +5446 5447 5575 +5447 5576 5575 +5447 5448 5577 +5447 5577 5576 +5448 5449 5577 +5449 5578 5577 +5449 5450 5579 +5449 5579 5578 +5450 5451 5579 +5451 5580 5579 +5451 5452 5581 +5451 5581 5580 +5452 5453 5581 +5453 5582 5581 +5453 5454 5583 +5453 5583 5582 +5454 5455 5583 +5455 5584 5583 +5455 5456 5585 +5455 5585 5584 +5456 5457 5585 +5457 5586 5585 +5457 5458 5587 +5457 5587 5586 +5458 5459 5587 +5459 5588 5587 +5459 5460 5589 +5459 5589 5588 +5460 5461 5589 +5461 5590 5589 +5461 5462 5591 +5461 5591 5590 +5462 5463 5591 +5463 5592 5591 +5463 5464 5593 +5463 5593 5592 +5464 5465 5593 +5465 5594 5593 +5465 5466 5595 +5465 5595 5594 +5466 5467 5595 +5467 5596 5595 +5467 5468 5597 +5467 5597 5596 +5468 5469 5597 +5469 5598 5597 +5469 5470 5599 +5469 5599 5598 +5470 5471 5599 +5471 5600 5599 +5471 5472 5601 +5471 5601 5600 +5472 5473 5601 +5473 5602 5601 +5473 5474 5603 +5473 5603 5602 +5474 5475 5603 +5475 5604 5603 +5475 5476 5605 +5475 5605 5604 +5476 5477 5605 +5477 5606 5605 +5477 5478 5607 +5477 5607 5606 +5478 5479 5607 +5479 5608 5607 +5479 5480 5609 +5479 5609 5608 +5480 5481 5609 +5481 5610 5609 +5481 5482 5611 +5481 5611 5610 +5482 5483 5611 +5483 5612 5611 +5483 5484 5613 +5483 5613 5612 +5484 5485 5613 +5485 5614 5613 +5485 5486 5615 +5485 5615 5614 +5486 5487 5615 +5487 5616 5615 +5487 5488 5617 +5487 5617 5616 +5488 5489 5617 +5489 5618 5617 +5489 5490 5619 +5489 5619 5618 +5490 5491 5619 +5491 5620 5619 +5491 5492 5621 +5491 5621 5620 +5492 5493 5621 +5493 5622 5621 +5493 5494 5623 +5493 5623 5622 +5494 5495 5623 +5495 5624 5623 +5495 5496 5625 +5495 5625 5624 +5496 5497 5625 +5497 5626 5625 +5497 5498 5627 +5497 5627 5626 +5498 5499 5627 +5499 5628 5627 +5499 5500 5629 +5499 5629 5628 +5500 5501 5629 +5501 5630 5629 +5501 5502 5631 +5501 5631 5630 +5502 5503 5631 +5503 5632 5631 +5503 5504 5633 +5503 5633 5632 +5504 5505 5633 +5505 5634 5633 +5505 5506 5635 +5505 5635 5634 +5506 5507 5635 +5507 5636 5635 +5507 5508 5637 +5507 5637 5636 +5508 5509 5637 +5509 5638 5637 +5509 5510 5639 +5509 5639 5638 +5510 5511 5639 +5511 5640 5639 +5511 5512 5641 +5511 5641 5640 +5512 5513 5641 +5513 5642 5641 +5513 5514 5643 +5513 5643 5642 +5514 5515 5643 +5515 5644 5643 +5515 5516 5645 +5515 5645 5644 +5516 5517 5645 +5517 5646 5645 +5517 5518 5647 +5517 5647 5646 +5518 5519 5647 +5519 5648 5647 +5519 5520 5649 +5519 5649 5648 +5520 5521 5649 +5521 5650 5649 +5521 5522 5651 +5521 5651 5650 +5522 5523 5651 +5523 5652 5651 +5523 5524 5653 +5523 5653 5652 +5524 5525 5653 +5525 5654 5653 +5525 5526 5655 +5525 5655 5654 +5526 5527 5655 +5527 5656 5655 +5527 5528 5657 +5527 5657 5656 +5528 5529 5657 +5529 5658 5657 +5529 5530 5659 +5529 5659 5658 +5530 5531 5659 +5531 5660 5659 +5531 5532 5661 +5531 5661 5660 +5532 5533 5661 +5533 5662 5661 +5533 5534 5663 +5533 5663 5662 +5534 5535 5663 +5535 5664 5663 +5535 5536 5665 +5535 5665 5664 +5536 5537 5665 +5537 5666 5665 +5537 5538 5667 +5537 5667 5666 +5538 5539 5667 +5539 5668 5667 +5539 5540 5669 +5539 5669 5668 +5540 5541 5669 +5541 5670 5669 +5541 5542 5671 +5541 5671 5670 +5542 5543 5671 +5543 5672 5671 +5543 5544 5673 +5543 5673 5672 +5544 5545 5673 +5545 5674 5673 +5545 5546 5675 +5545 5675 5674 +5546 5547 5675 +5547 5676 5675 +5548 5549 5677 +5549 5678 5677 +5549 5550 5679 +5549 5679 5678 +5550 5551 5679 +5551 5680 5679 +5551 5552 5681 +5551 5681 5680 +5552 5553 5681 +5553 5682 5681 +5553 5554 5683 +5553 5683 5682 +5554 5555 5683 +5555 5684 5683 +5555 5556 5685 +5555 5685 5684 +5556 5557 5685 +5557 5686 5685 +5557 5558 5687 +5557 5687 5686 +5558 5559 5687 +5559 5688 5687 +5559 5560 5689 +5559 5689 5688 +5560 5561 5689 +5561 5690 5689 +5561 5562 5691 +5561 5691 5690 +5562 5563 5691 +5563 5692 5691 +5563 5564 5693 +5563 5693 5692 +5564 5565 5693 +5565 5694 5693 +5565 5566 5695 +5565 5695 5694 +5566 5567 5695 +5567 5696 5695 +5567 5568 5697 +5567 5697 5696 +5568 5569 5697 +5569 5698 5697 +5569 5570 5699 +5569 5699 5698 +5570 5571 5699 +5571 5700 5699 +5571 5572 5701 +5571 5701 5700 +5572 5573 5701 +5573 5702 5701 +5573 5574 5703 +5573 5703 5702 +5574 5575 5703 +5575 5704 5703 +5575 5576 5705 +5575 5705 5704 +5576 5577 5705 +5577 5706 5705 +5577 5578 5707 +5577 5707 5706 +5578 5579 5707 +5579 5708 5707 +5579 5580 5709 +5579 5709 5708 +5580 5581 5709 +5581 5710 5709 +5581 5582 5711 +5581 5711 5710 +5582 5583 5711 +5583 5712 5711 +5583 5584 5713 +5583 5713 5712 +5584 5585 5713 +5585 5714 5713 +5585 5586 5715 +5585 5715 5714 +5586 5587 5715 +5587 5716 5715 +5587 5588 5717 +5587 5717 5716 +5588 5589 5717 +5589 5718 5717 +5589 5590 5719 +5589 5719 5718 +5590 5591 5719 +5591 5720 5719 +5591 5592 5721 +5591 5721 5720 +5592 5593 5721 +5593 5722 5721 +5593 5594 5723 +5593 5723 5722 +5594 5595 5723 +5595 5724 5723 +5595 5596 5725 +5595 5725 5724 +5596 5597 5725 +5597 5726 5725 +5597 5598 5727 +5597 5727 5726 +5598 5599 5727 +5599 5728 5727 +5599 5600 5729 +5599 5729 5728 +5600 5601 5729 +5601 5730 5729 +5601 5602 5731 +5601 5731 5730 +5602 5603 5731 +5603 5732 5731 +5603 5604 5733 +5603 5733 5732 +5604 5605 5733 +5605 5734 5733 +5605 5606 5735 +5605 5735 5734 +5606 5607 5735 +5607 5736 5735 +5607 5608 5737 +5607 5737 5736 +5608 5609 5737 +5609 5738 5737 +5609 5610 5739 +5609 5739 5738 +5610 5611 5739 +5611 5740 5739 +5611 5612 5741 +5611 5741 5740 +5612 5613 5741 +5613 5742 5741 +5613 5614 5743 +5613 5743 5742 +5614 5615 5743 +5615 5744 5743 +5615 5616 5745 +5615 5745 5744 +5616 5617 5745 +5617 5746 5745 +5617 5618 5747 +5617 5747 5746 +5618 5619 5747 +5619 5748 5747 +5619 5620 5749 +5619 5749 5748 +5620 5621 5749 +5621 5750 5749 +5621 5622 5751 +5621 5751 5750 +5622 5623 5751 +5623 5752 5751 +5623 5624 5753 +5623 5753 5752 +5624 5625 5753 +5625 5754 5753 +5625 5626 5755 +5625 5755 5754 +5626 5627 5755 +5627 5756 5755 +5627 5628 5757 +5627 5757 5756 +5628 5629 5757 +5629 5758 5757 +5629 5630 5759 +5629 5759 5758 +5630 5631 5759 +5631 5760 5759 +5631 5632 5761 +5631 5761 5760 +5632 5633 5761 +5633 5762 5761 +5633 5634 5763 +5633 5763 5762 +5634 5635 5763 +5635 5764 5763 +5635 5636 5765 +5635 5765 5764 +5636 5637 5765 +5637 5766 5765 +5637 5638 5767 +5637 5767 5766 +5638 5639 5767 +5639 5768 5767 +5639 5640 5769 +5639 5769 5768 +5640 5641 5769 +5641 5770 5769 +5641 5642 5771 +5641 5771 5770 +5642 5643 5771 +5643 5772 5771 +5643 5644 5773 +5643 5773 5772 +5644 5645 5773 +5645 5774 5773 +5645 5646 5775 +5645 5775 5774 +5646 5647 5775 +5647 5776 5775 +5647 5648 5777 +5647 5777 5776 +5648 5649 5777 +5649 5778 5777 +5649 5650 5779 +5649 5779 5778 +5650 5651 5779 +5651 5780 5779 +5651 5652 5781 +5651 5781 5780 +5652 5653 5781 +5653 5782 5781 +5653 5654 5783 +5653 5783 5782 +5654 5655 5783 +5655 5784 5783 +5655 5656 5785 +5655 5785 5784 +5656 5657 5785 +5657 5786 5785 +5657 5658 5787 +5657 5787 5786 +5658 5659 5787 +5659 5788 5787 +5659 5660 5789 +5659 5789 5788 +5660 5661 5789 +5661 5790 5789 +5661 5662 5791 +5661 5791 5790 +5662 5663 5791 +5663 5792 5791 +5663 5664 5793 +5663 5793 5792 +5664 5665 5793 +5665 5794 5793 +5665 5666 5795 +5665 5795 5794 +5666 5667 5795 +5667 5796 5795 +5667 5668 5797 +5667 5797 5796 +5668 5669 5797 +5669 5798 5797 +5669 5670 5799 +5669 5799 5798 +5670 5671 5799 +5671 5800 5799 +5671 5672 5801 +5671 5801 5800 +5672 5673 5801 +5673 5802 5801 +5673 5674 5803 +5673 5803 5802 +5674 5675 5803 +5675 5804 5803 +5675 5676 5805 +5675 5805 5804 +5677 5678 5807 +5677 5807 5806 +5678 5679 5807 +5679 5808 5807 +5679 5680 5809 +5679 5809 5808 +5680 5681 5809 +5681 5810 5809 +5681 5682 5811 +5681 5811 5810 +5682 5683 5811 +5683 5812 5811 +5683 5684 5813 +5683 5813 5812 +5684 5685 5813 +5685 5814 5813 +5685 5686 5815 +5685 5815 5814 +5686 5687 5815 +5687 5816 5815 +5687 5688 5817 +5687 5817 5816 +5688 5689 5817 +5689 5818 5817 +5689 5690 5819 +5689 5819 5818 +5690 5691 5819 +5691 5820 5819 +5691 5692 5821 +5691 5821 5820 +5692 5693 5821 +5693 5822 5821 +5693 5694 5823 +5693 5823 5822 +5694 5695 5823 +5695 5824 5823 +5695 5696 5825 +5695 5825 5824 +5696 5697 5825 +5697 5826 5825 +5697 5698 5827 +5697 5827 5826 +5698 5699 5827 +5699 5828 5827 +5699 5700 5829 +5699 5829 5828 +5700 5701 5829 +5701 5830 5829 +5701 5702 5831 +5701 5831 5830 +5702 5703 5831 +5703 5832 5831 +5703 5704 5833 +5703 5833 5832 +5704 5705 5833 +5705 5834 5833 +5705 5706 5835 +5705 5835 5834 +5706 5707 5835 +5707 5836 5835 +5707 5708 5837 +5707 5837 5836 +5708 5709 5837 +5709 5838 5837 +5709 5710 5839 +5709 5839 5838 +5710 5711 5839 +5711 5840 5839 +5711 5712 5841 +5711 5841 5840 +5712 5713 5841 +5713 5842 5841 +5713 5714 5843 +5713 5843 5842 +5714 5715 5843 +5715 5844 5843 +5715 5716 5845 +5715 5845 5844 +5716 5717 5845 +5717 5846 5845 +5717 5718 5847 +5717 5847 5846 +5718 5719 5847 +5719 5848 5847 +5719 5720 5849 +5719 5849 5848 +5720 5721 5849 +5721 5850 5849 +5721 5722 5851 +5721 5851 5850 +5722 5723 5851 +5723 5852 5851 +5723 5724 5853 +5723 5853 5852 +5724 5725 5853 +5725 5854 5853 +5725 5726 5855 +5725 5855 5854 +5726 5727 5855 +5727 5856 5855 +5727 5728 5857 +5727 5857 5856 +5728 5729 5857 +5729 5858 5857 +5729 5730 5859 +5729 5859 5858 +5730 5731 5859 +5731 5860 5859 +5731 5732 5861 +5731 5861 5860 +5732 5733 5861 +5733 5862 5861 +5733 5734 5863 +5733 5863 5862 +5734 5735 5863 +5735 5864 5863 +5735 5736 5865 +5735 5865 5864 +5736 5737 5865 +5737 5866 5865 +5737 5738 5867 +5737 5867 5866 +5738 5739 5867 +5739 5868 5867 +5739 5740 5869 +5739 5869 5868 +5740 5741 5869 +5741 5870 5869 +5741 5742 5871 +5741 5871 5870 +5742 5743 5871 +5743 5872 5871 +5743 5744 5873 +5743 5873 5872 +5744 5745 5873 +5745 5874 5873 +5745 5746 5875 +5745 5875 5874 +5746 5747 5875 +5747 5876 5875 +5747 5748 5877 +5747 5877 5876 +5748 5749 5877 +5749 5878 5877 +5749 5750 5879 +5749 5879 5878 +5750 5751 5879 +5751 5880 5879 +5751 5752 5881 +5751 5881 5880 +5752 5753 5881 +5753 5882 5881 +5753 5754 5883 +5753 5883 5882 +5754 5755 5883 +5755 5884 5883 +5755 5756 5885 +5755 5885 5884 +5756 5757 5885 +5757 5886 5885 +5757 5758 5887 +5757 5887 5886 +5758 5759 5887 +5759 5888 5887 +5759 5760 5889 +5759 5889 5888 +5760 5761 5889 +5761 5890 5889 +5761 5762 5891 +5761 5891 5890 +5762 5763 5891 +5763 5892 5891 +5763 5764 5893 +5763 5893 5892 +5764 5765 5893 +5765 5894 5893 +5765 5766 5895 +5765 5895 5894 +5766 5767 5895 +5767 5896 5895 +5767 5768 5897 +5767 5897 5896 +5768 5769 5897 +5769 5898 5897 +5769 5770 5899 +5769 5899 5898 +5770 5771 5899 +5771 5900 5899 +5771 5772 5901 +5771 5901 5900 +5772 5773 5901 +5773 5902 5901 +5773 5774 5903 +5773 5903 5902 +5774 5775 5903 +5775 5904 5903 +5775 5776 5905 +5775 5905 5904 +5776 5777 5905 +5777 5906 5905 +5777 5778 5907 +5777 5907 5906 +5778 5779 5907 +5779 5908 5907 +5779 5780 5909 +5779 5909 5908 +5780 5781 5909 +5781 5910 5909 +5781 5782 5911 +5781 5911 5910 +5782 5783 5911 +5783 5912 5911 +5783 5784 5913 +5783 5913 5912 +5784 5785 5913 +5785 5914 5913 +5785 5786 5915 +5785 5915 5914 +5786 5787 5915 +5787 5916 5915 +5787 5788 5917 +5787 5917 5916 +5788 5789 5917 +5789 5918 5917 +5789 5790 5919 +5789 5919 5918 +5790 5791 5919 +5791 5920 5919 +5791 5792 5921 +5791 5921 5920 +5792 5793 5921 +5793 5922 5921 +5793 5794 5923 +5793 5923 5922 +5794 5795 5923 +5795 5924 5923 +5795 5796 5925 +5795 5925 5924 +5796 5797 5925 +5797 5926 5925 +5797 5798 5927 +5797 5927 5926 +5798 5799 5927 +5799 5928 5927 +5799 5800 5929 +5799 5929 5928 +5800 5801 5929 +5801 5930 5929 +5801 5802 5931 +5801 5931 5930 +5802 5803 5931 +5803 5932 5931 +5803 5804 5933 +5803 5933 5932 +5804 5805 5933 +5805 5934 5933 +5806 5807 5935 +5807 5936 5935 +5807 5808 5937 +5807 5937 5936 +5808 5809 5937 +5809 5938 5937 +5809 5810 5939 +5809 5939 5938 +5810 5811 5939 +5811 5940 5939 +5811 5812 5941 +5811 5941 5940 +5812 5813 5941 +5813 5942 5941 +5813 5814 5943 +5813 5943 5942 +5814 5815 5943 +5815 5944 5943 +5815 5816 5945 +5815 5945 5944 +5816 5817 5945 +5817 5946 5945 +5817 5818 5947 +5817 5947 5946 +5818 5819 5947 +5819 5948 5947 +5819 5820 5949 +5819 5949 5948 +5820 5821 5949 +5821 5950 5949 +5821 5822 5951 +5821 5951 5950 +5822 5823 5951 +5823 5952 5951 +5823 5824 5953 +5823 5953 5952 +5824 5825 5953 +5825 5954 5953 +5825 5826 5955 +5825 5955 5954 +5826 5827 5955 +5827 5956 5955 +5827 5828 5957 +5827 5957 5956 +5828 5829 5957 +5829 5958 5957 +5829 5830 5959 +5829 5959 5958 +5830 5831 5959 +5831 5960 5959 +5831 5832 5961 +5831 5961 5960 +5832 5833 5961 +5833 5962 5961 +5833 5834 5963 +5833 5963 5962 +5834 5835 5963 +5835 5964 5963 +5835 5836 5965 +5835 5965 5964 +5836 5837 5965 +5837 5966 5965 +5837 5838 5967 +5837 5967 5966 +5838 5839 5967 +5839 5968 5967 +5839 5840 5969 +5839 5969 5968 +5840 5841 5969 +5841 5970 5969 +5841 5842 5971 +5841 5971 5970 +5842 5843 5971 +5843 5972 5971 +5843 5844 5973 +5843 5973 5972 +5844 5845 5973 +5845 5974 5973 +5845 5846 5975 +5845 5975 5974 +5846 5847 5975 +5847 5976 5975 +5847 5848 5977 +5847 5977 5976 +5848 5849 5977 +5849 5978 5977 +5849 5850 5979 +5849 5979 5978 +5850 5851 5979 +5851 5980 5979 +5851 5852 5981 +5851 5981 5980 +5852 5853 5981 +5853 5982 5981 +5853 5854 5983 +5853 5983 5982 +5854 5855 5983 +5855 5984 5983 +5855 5856 5985 +5855 5985 5984 +5856 5857 5985 +5857 5986 5985 +5857 5858 5987 +5857 5987 5986 +5858 5859 5987 +5859 5988 5987 +5859 5860 5989 +5859 5989 5988 +5860 5861 5989 +5861 5990 5989 +5861 5862 5991 +5861 5991 5990 +5862 5863 5991 +5863 5992 5991 +5863 5864 5993 +5863 5993 5992 +5864 5865 5993 +5865 5994 5993 +5865 5866 5995 +5865 5995 5994 +5866 5867 5995 +5867 5996 5995 +5867 5868 5997 +5867 5997 5996 +5868 5869 5997 +5869 5998 5997 +5869 5870 5999 +5869 5999 5998 +5870 5871 5999 +5871 6000 5999 +5871 5872 6001 +5871 6001 6000 +5872 5873 6001 +5873 6002 6001 +5873 5874 6003 +5873 6003 6002 +5874 5875 6003 +5875 6004 6003 +5875 5876 6005 +5875 6005 6004 +5876 5877 6005 +5877 6006 6005 +5877 5878 6007 +5877 6007 6006 +5878 5879 6007 +5879 6008 6007 +5879 5880 6009 +5879 6009 6008 +5880 5881 6009 +5881 6010 6009 +5881 5882 6011 +5881 6011 6010 +5882 5883 6011 +5883 6012 6011 +5883 5884 6013 +5883 6013 6012 +5884 5885 6013 +5885 6014 6013 +5885 5886 6015 +5885 6015 6014 +5886 5887 6015 +5887 6016 6015 +5887 5888 6017 +5887 6017 6016 +5888 5889 6017 +5889 6018 6017 +5889 5890 6019 +5889 6019 6018 +5890 5891 6019 +5891 6020 6019 +5891 5892 6021 +5891 6021 6020 +5892 5893 6021 +5893 6022 6021 +5893 5894 6023 +5893 6023 6022 +5894 5895 6023 +5895 6024 6023 +5895 5896 6025 +5895 6025 6024 +5896 5897 6025 +5897 6026 6025 +5897 5898 6027 +5897 6027 6026 +5898 5899 6027 +5899 6028 6027 +5899 5900 6029 +5899 6029 6028 +5900 5901 6029 +5901 6030 6029 +5901 5902 6031 +5901 6031 6030 +5902 5903 6031 +5903 6032 6031 +5903 5904 6033 +5903 6033 6032 +5904 5905 6033 +5905 6034 6033 +5905 5906 6035 +5905 6035 6034 +5906 5907 6035 +5907 6036 6035 +5907 5908 6037 +5907 6037 6036 +5908 5909 6037 +5909 6038 6037 +5909 5910 6039 +5909 6039 6038 +5910 5911 6039 +5911 6040 6039 +5911 5912 6041 +5911 6041 6040 +5912 5913 6041 +5913 6042 6041 +5913 5914 6043 +5913 6043 6042 +5914 5915 6043 +5915 6044 6043 +5915 5916 6045 +5915 6045 6044 +5916 5917 6045 +5917 6046 6045 +5917 5918 6047 +5917 6047 6046 +5918 5919 6047 +5919 6048 6047 +5919 5920 6049 +5919 6049 6048 +5920 5921 6049 +5921 6050 6049 +5921 5922 6051 +5921 6051 6050 +5922 5923 6051 +5923 6052 6051 +5923 5924 6053 +5923 6053 6052 +5924 5925 6053 +5925 6054 6053 +5925 5926 6055 +5925 6055 6054 +5926 5927 6055 +5927 6056 6055 +5927 5928 6057 +5927 6057 6056 +5928 5929 6057 +5929 6058 6057 +5929 5930 6059 +5929 6059 6058 +5930 5931 6059 +5931 6060 6059 +5931 5932 6061 +5931 6061 6060 +5932 5933 6061 +5933 6062 6061 +5933 5934 6063 +5933 6063 6062 +5935 5936 6065 +5935 6065 6064 +5936 5937 6065 +5937 6066 6065 +5937 5938 6067 +5937 6067 6066 +5938 5939 6067 +5939 6068 6067 +5939 5940 6069 +5939 6069 6068 +5940 5941 6069 +5941 6070 6069 +5941 5942 6071 +5941 6071 6070 +5942 5943 6071 +5943 6072 6071 +5943 5944 6073 +5943 6073 6072 +5944 5945 6073 +5945 6074 6073 +5945 5946 6075 +5945 6075 6074 +5946 5947 6075 +5947 6076 6075 +5947 5948 6077 +5947 6077 6076 +5948 5949 6077 +5949 6078 6077 +5949 5950 6079 +5949 6079 6078 +5950 5951 6079 +5951 6080 6079 +5951 5952 6081 +5951 6081 6080 +5952 5953 6081 +5953 6082 6081 +5953 5954 6083 +5953 6083 6082 +5954 5955 6083 +5955 6084 6083 +5955 5956 6085 +5955 6085 6084 +5956 5957 6085 +5957 6086 6085 +5957 5958 6087 +5957 6087 6086 +5958 5959 6087 +5959 6088 6087 +5959 5960 6089 +5959 6089 6088 +5960 5961 6089 +5961 6090 6089 +5961 5962 6091 +5961 6091 6090 +5962 5963 6091 +5963 6092 6091 +5963 5964 6093 +5963 6093 6092 +5964 5965 6093 +5965 6094 6093 +5965 5966 6095 +5965 6095 6094 +5966 5967 6095 +5967 6096 6095 +5967 5968 6097 +5967 6097 6096 +5968 5969 6097 +5969 6098 6097 +5969 5970 6099 +5969 6099 6098 +5970 5971 6099 +5971 6100 6099 +5971 5972 6101 +5971 6101 6100 +5972 5973 6101 +5973 6102 6101 +5973 5974 6103 +5973 6103 6102 +5974 5975 6103 +5975 6104 6103 +5975 5976 6105 +5975 6105 6104 +5976 5977 6105 +5977 6106 6105 +5977 5978 6107 +5977 6107 6106 +5978 5979 6107 +5979 6108 6107 +5979 5980 6109 +5979 6109 6108 +5980 5981 6109 +5981 6110 6109 +5981 5982 6111 +5981 6111 6110 +5982 5983 6111 +5983 6112 6111 +5983 5984 6113 +5983 6113 6112 +5984 5985 6113 +5985 6114 6113 +5985 5986 6115 +5985 6115 6114 +5986 5987 6115 +5987 6116 6115 +5987 5988 6117 +5987 6117 6116 +5988 5989 6117 +5989 6118 6117 +5989 5990 6119 +5989 6119 6118 +5990 5991 6119 +5991 6120 6119 +5991 5992 6121 +5991 6121 6120 +5992 5993 6121 +5993 6122 6121 +5993 5994 6123 +5993 6123 6122 +5994 5995 6123 +5995 6124 6123 +5995 5996 6125 +5995 6125 6124 +5996 5997 6125 +5997 6126 6125 +5997 5998 6127 +5997 6127 6126 +5998 5999 6127 +5999 6128 6127 +5999 6000 6129 +5999 6129 6128 +6000 6001 6129 +6001 6130 6129 +6001 6002 6131 +6001 6131 6130 +6002 6003 6131 +6003 6132 6131 +6003 6004 6133 +6003 6133 6132 +6004 6005 6133 +6005 6134 6133 +6005 6006 6135 +6005 6135 6134 +6006 6007 6135 +6007 6136 6135 +6007 6008 6137 +6007 6137 6136 +6008 6009 6137 +6009 6138 6137 +6009 6010 6139 +6009 6139 6138 +6010 6011 6139 +6011 6140 6139 +6011 6012 6141 +6011 6141 6140 +6012 6013 6141 +6013 6142 6141 +6013 6014 6143 +6013 6143 6142 +6014 6015 6143 +6015 6144 6143 +6015 6016 6145 +6015 6145 6144 +6016 6017 6145 +6017 6146 6145 +6017 6018 6147 +6017 6147 6146 +6018 6019 6147 +6019 6148 6147 +6019 6020 6149 +6019 6149 6148 +6020 6021 6149 +6021 6150 6149 +6021 6022 6151 +6021 6151 6150 +6022 6023 6151 +6023 6152 6151 +6023 6024 6153 +6023 6153 6152 +6024 6025 6153 +6025 6154 6153 +6025 6026 6155 +6025 6155 6154 +6026 6027 6155 +6027 6156 6155 +6027 6028 6157 +6027 6157 6156 +6028 6029 6157 +6029 6158 6157 +6029 6030 6159 +6029 6159 6158 +6030 6031 6159 +6031 6160 6159 +6031 6032 6161 +6031 6161 6160 +6032 6033 6161 +6033 6162 6161 +6033 6034 6163 +6033 6163 6162 +6034 6035 6163 +6035 6164 6163 +6035 6036 6165 +6035 6165 6164 +6036 6037 6165 +6037 6166 6165 +6037 6038 6167 +6037 6167 6166 +6038 6039 6167 +6039 6040 6168 +6040 6041 6168 +6041 6169 6168 +6041 6042 6170 +6041 6170 6169 +6042 6043 6170 +6043 6171 6170 +6043 6044 6172 +6043 6172 6171 +6044 6045 6172 +6045 6173 6172 +6045 6046 6174 +6045 6174 6173 +6046 6047 6174 +6047 6175 6174 +6047 6048 6176 +6047 6176 6175 +6048 6049 6176 +6049 6177 6176 +6049 6050 6178 +6049 6178 6177 +6050 6051 6178 +6051 6179 6178 +6051 6052 6180 +6051 6180 6179 +6052 6053 6180 +6053 6181 6180 +6053 6054 6182 +6053 6182 6181 +6054 6055 6182 +6055 6183 6182 +6055 6056 6184 +6055 6184 6183 +6056 6057 6184 +6057 6185 6184 +6057 6058 6186 +6057 6186 6185 +6058 6059 6186 +6059 6187 6186 +6059 6060 6188 +6059 6188 6187 +6060 6061 6188 +6061 6189 6188 +6061 6062 6190 +6061 6190 6189 +6062 6063 6190 +6063 6191 6190 +6064 6065 6192 +6065 6193 6192 +6065 6066 6194 +6065 6194 6193 +6066 6067 6194 +6067 6195 6194 +6067 6068 6196 +6067 6196 6195 +6068 6069 6196 +6069 6197 6196 +6069 6070 6198 +6069 6198 6197 +6070 6071 6198 +6071 6199 6198 +6071 6072 6200 +6071 6200 6199 +6072 6073 6200 +6073 6201 6200 +6073 6074 6202 +6073 6202 6201 +6074 6075 6202 +6075 6203 6202 +6075 6076 6204 +6075 6204 6203 +6076 6077 6204 +6077 6205 6204 +6077 6078 6206 +6077 6206 6205 +6078 6079 6206 +6079 6207 6206 +6079 6080 6208 +6079 6208 6207 +6080 6081 6208 +6081 6209 6208 +6081 6082 6210 +6081 6210 6209 +6082 6083 6210 +6083 6211 6210 +6083 6084 6212 +6083 6212 6211 +6084 6085 6212 +6085 6213 6212 +6085 6086 6214 +6085 6214 6213 +6086 6087 6214 +6087 6215 6214 +6087 6088 6216 +6087 6216 6215 +6088 6089 6216 +6089 6217 6216 +6089 6090 6218 +6089 6218 6217 +6090 6091 6218 +6091 6219 6218 +6091 6092 6220 +6091 6220 6219 +6092 6093 6220 +6093 6221 6220 +6093 6094 6222 +6093 6222 6221 +6094 6095 6222 +6095 6223 6222 +6095 6096 6224 +6095 6224 6223 +6096 6097 6224 +6097 6225 6224 +6097 6098 6226 +6097 6226 6225 +6098 6099 6226 +6099 6227 6226 +6099 6100 6228 +6099 6228 6227 +6100 6101 6228 +6101 6229 6228 +6101 6102 6230 +6101 6230 6229 +6102 6103 6230 +6103 6231 6230 +6103 6104 6232 +6103 6232 6231 +6104 6105 6232 +6105 6233 6232 +6105 6106 6234 +6105 6234 6233 +6106 6107 6234 +6107 6235 6234 +6107 6108 6236 +6107 6236 6235 +6108 6109 6236 +6109 6237 6236 +6109 6110 6238 +6109 6238 6237 +6110 6111 6238 +6111 6239 6238 +6111 6112 6240 +6111 6240 6239 +6112 6113 6240 +6113 6241 6240 +6113 6114 6242 +6113 6242 6241 +6114 6115 6242 +6115 6243 6242 +6115 6116 6244 +6115 6244 6243 +6116 6117 6244 +6117 6245 6244 +6117 6118 6246 +6117 6246 6245 +6118 6119 6246 +6119 6247 6246 +6119 6120 6248 +6119 6248 6247 +6120 6121 6248 +6121 6249 6248 +6121 6122 6250 +6121 6250 6249 +6122 6123 6250 +6123 6251 6250 +6123 6124 6252 +6123 6252 6251 +6124 6125 6252 +6125 6253 6252 +6125 6126 6254 +6125 6254 6253 +6126 6127 6254 +6127 6255 6254 +6127 6128 6256 +6127 6256 6255 +6128 6129 6256 +6129 6257 6256 +6129 6130 6258 +6129 6258 6257 +6130 6131 6258 +6131 6259 6258 +6131 6132 6260 +6131 6260 6259 +6132 6133 6260 +6133 6261 6260 +6133 6134 6262 +6133 6262 6261 +6134 6135 6262 +6135 6263 6262 +6135 6136 6264 +6135 6264 6263 +6136 6137 6264 +6137 6265 6264 +6137 6138 6266 +6137 6266 6265 +6138 6139 6266 +6139 6267 6266 +6139 6140 6268 +6139 6268 6267 +6140 6141 6268 +6141 6269 6268 +6141 6142 6270 +6141 6270 6269 +6142 6143 6270 +6143 6271 6270 +6143 6144 6272 +6143 6272 6271 +6144 6145 6272 +6145 6273 6272 +6145 6146 6274 +6145 6274 6273 +6146 6147 6274 +6147 6275 6274 +6147 6148 6276 +6147 6276 6275 +6148 6149 6276 +6149 6277 6276 +6149 6150 6278 +6149 6278 6277 +6150 6151 6278 +6151 6279 6278 +6151 6152 6280 +6151 6280 6279 +6152 6153 6280 +6153 6281 6280 +6153 6154 6282 +6153 6282 6281 +6154 6155 6282 +6155 6283 6282 +6155 6156 6284 +6155 6284 6283 +6156 6157 6284 +6157 6285 6284 +6157 6158 6286 +6157 6286 6285 +6158 6159 6286 +6159 6287 6286 +6159 6160 6288 +6159 6288 6287 +6160 6161 6288 +6161 6289 6288 +6161 6162 6290 +6161 6290 6289 +6162 6163 6290 +6163 6291 6290 +6163 6164 6292 +6163 6292 6291 +6164 6165 6292 +6165 6293 6292 +6165 6166 6294 +6165 6294 6293 +6166 6167 6294 +6168 6169 6295 +6169 6170 6295 +6170 6296 6295 +6170 6171 6297 +6170 6297 6296 +6171 6172 6297 +6172 6298 6297 +6172 6173 6299 +6172 6299 6298 +6173 6174 6299 +6174 6300 6299 +6174 6175 6301 +6174 6301 6300 +6175 6176 6301 +6176 6302 6301 +6176 6177 6303 +6176 6303 6302 +6177 6178 6303 +6178 6304 6303 +6178 6179 6305 +6178 6305 6304 +6179 6180 6305 +6180 6306 6305 +6180 6181 6307 +6180 6307 6306 +6181 6182 6307 +6182 6308 6307 +6182 6183 6309 +6182 6309 6308 +6183 6184 6309 +6184 6310 6309 +6184 6185 6311 +6184 6311 6310 +6185 6186 6311 +6186 6312 6311 +6186 6187 6313 +6186 6313 6312 +6187 6188 6313 +6188 6314 6313 +6188 6189 6315 +6188 6315 6314 +6189 6190 6315 +6190 6316 6315 +6190 6191 6317 +6190 6317 6316 +6192 6193 6319 +6192 6319 6318 +6193 6194 6319 +6194 6320 6319 +6194 6195 6321 +6194 6321 6320 +6195 6196 6321 +6196 6322 6321 +6196 6197 6323 +6196 6323 6322 +6197 6198 6323 +6198 6324 6323 +6198 6199 6325 +6198 6325 6324 +6199 6200 6325 +6200 6326 6325 +6200 6201 6327 +6200 6327 6326 +6201 6202 6327 +6202 6328 6327 +6202 6203 6329 +6202 6329 6328 +6203 6204 6329 +6204 6330 6329 +6204 6205 6331 +6204 6331 6330 +6205 6206 6331 +6206 6332 6331 +6206 6207 6333 +6206 6333 6332 +6207 6208 6333 +6208 6334 6333 +6208 6209 6335 +6208 6335 6334 +6209 6210 6335 +6210 6336 6335 +6210 6211 6337 +6210 6337 6336 +6211 6212 6337 +6212 6338 6337 +6212 6213 6339 +6212 6339 6338 +6213 6214 6339 +6214 6340 6339 +6214 6215 6341 +6214 6341 6340 +6215 6216 6341 +6216 6342 6341 +6216 6217 6343 +6216 6343 6342 +6217 6218 6343 +6218 6344 6343 +6218 6219 6345 +6218 6345 6344 +6219 6220 6345 +6220 6346 6345 +6220 6221 6347 +6220 6347 6346 +6221 6222 6347 +6222 6348 6347 +6222 6223 6349 +6222 6349 6348 +6223 6224 6349 +6224 6350 6349 +6224 6225 6351 +6224 6351 6350 +6225 6226 6351 +6226 6352 6351 +6226 6227 6353 +6226 6353 6352 +6227 6228 6353 +6228 6354 6353 +6228 6229 6355 +6228 6355 6354 +6229 6230 6355 +6230 6356 6355 +6230 6231 6357 +6230 6357 6356 +6231 6232 6357 +6232 6358 6357 +6232 6233 6359 +6232 6359 6358 +6233 6234 6359 +6234 6360 6359 +6234 6235 6361 +6234 6361 6360 +6235 6236 6361 +6236 6362 6361 +6236 6237 6363 +6236 6363 6362 +6237 6238 6363 +6238 6364 6363 +6238 6239 6365 +6238 6365 6364 +6239 6240 6365 +6240 6366 6365 +6240 6241 6367 +6240 6367 6366 +6241 6242 6367 +6242 6368 6367 +6242 6243 6369 +6242 6369 6368 +6243 6244 6369 +6244 6370 6369 +6244 6245 6371 +6244 6371 6370 +6245 6246 6371 +6246 6372 6371 +6246 6247 6373 +6246 6373 6372 +6247 6248 6373 +6248 6374 6373 +6248 6249 6375 +6248 6375 6374 +6249 6250 6375 +6250 6376 6375 +6250 6251 6377 +6250 6377 6376 +6251 6252 6377 +6252 6378 6377 +6252 6253 6379 +6252 6379 6378 +6253 6254 6379 +6254 6380 6379 +6254 6255 6381 +6254 6381 6380 +6255 6256 6381 +6256 6382 6381 +6256 6257 6383 +6256 6383 6382 +6257 6258 6383 +6258 6384 6383 +6258 6259 6385 +6258 6385 6384 +6259 6260 6385 +6260 6386 6385 +6260 6261 6387 +6260 6387 6386 +6261 6262 6387 +6262 6388 6387 +6262 6263 6389 +6262 6389 6388 +6263 6264 6389 +6264 6390 6389 +6264 6265 6391 +6264 6391 6390 +6265 6266 6391 +6266 6392 6391 +6266 6267 6393 +6266 6393 6392 +6267 6268 6393 +6268 6394 6393 +6268 6269 6395 +6268 6395 6394 +6269 6270 6395 +6270 6396 6395 +6270 6271 6397 +6270 6397 6396 +6271 6272 6397 +6272 6398 6397 +6272 6273 6399 +6272 6399 6398 +6273 6274 6399 +6274 6400 6399 +6274 6275 6401 +6274 6401 6400 +6275 6276 6401 +6276 6402 6401 +6276 6277 6403 +6276 6403 6402 +6277 6278 6403 +6278 6404 6403 +6278 6279 6405 +6278 6405 6404 +6279 6280 6405 +6280 6406 6405 +6280 6281 6407 +6280 6407 6406 +6281 6282 6407 +6282 6408 6407 +6282 6283 6409 +6282 6409 6408 +6283 6284 6409 +6284 6410 6409 +6284 6285 6411 +6284 6411 6410 +6285 6286 6411 +6286 6412 6411 +6286 6287 6413 +6286 6413 6412 +6287 6288 6413 +6288 6414 6413 +6288 6289 6415 +6288 6415 6414 +6289 6290 6415 +6290 6416 6415 +6290 6291 6417 +6290 6417 6416 +6291 6292 6417 +6292 6418 6417 +6292 6293 6419 +6292 6419 6418 +6293 6294 6419 +6297 6298 6421 +6297 6421 6420 +6298 6299 6421 +6299 6422 6421 +6299 6300 6423 +6299 6423 6422 +6300 6301 6423 +6301 6424 6423 +6301 6302 6425 +6301 6425 6424 +6302 6303 6425 +6303 6426 6425 +6303 6304 6427 +6303 6427 6426 +6304 6305 6427 +6305 6428 6427 +6305 6306 6429 +6305 6429 6428 +6306 6307 6429 +6307 6430 6429 +6307 6308 6431 +6307 6431 6430 +6308 6309 6431 +6309 6432 6431 +6309 6310 6433 +6309 6433 6432 +6310 6311 6433 +6311 6434 6433 +6311 6312 6435 +6311 6435 6434 +6312 6313 6435 +6313 6436 6435 +6313 6314 6437 +6313 6437 6436 +6314 6315 6437 +6315 6438 6437 +6315 6316 6439 +6315 6439 6438 +6316 6317 6439 +6317 6440 6439 +6318 6319 6441 +6319 6442 6441 +6319 6320 6443 +6319 6443 6442 +6320 6321 6443 +6321 6444 6443 +6321 6322 6445 +6321 6445 6444 +6322 6323 6445 +6323 6446 6445 +6323 6324 6447 +6323 6447 6446 +6324 6325 6447 +6325 6448 6447 +6325 6326 6449 +6325 6449 6448 +6326 6327 6449 +6327 6450 6449 +6327 6328 6451 +6327 6451 6450 +6328 6329 6451 +6329 6452 6451 +6329 6330 6453 +6329 6453 6452 +6330 6331 6453 +6331 6454 6453 +6331 6332 6455 +6331 6455 6454 +6332 6333 6455 +6333 6456 6455 +6333 6334 6457 +6333 6457 6456 +6334 6335 6457 +6335 6458 6457 +6335 6336 6459 +6335 6459 6458 +6336 6337 6459 +6337 6460 6459 +6337 6338 6461 +6337 6461 6460 +6338 6339 6461 +6339 6462 6461 +6339 6340 6463 +6339 6463 6462 +6340 6341 6463 +6341 6464 6463 +6341 6342 6465 +6341 6465 6464 +6342 6343 6465 +6343 6466 6465 +6343 6344 6467 +6343 6467 6466 +6344 6345 6467 +6345 6468 6467 +6345 6346 6469 +6345 6469 6468 +6346 6347 6469 +6347 6470 6469 +6347 6348 6471 +6347 6471 6470 +6348 6349 6471 +6349 6472 6471 +6349 6350 6473 +6349 6473 6472 +6350 6351 6473 +6351 6474 6473 +6351 6352 6475 +6351 6475 6474 +6352 6353 6475 +6353 6476 6475 +6353 6354 6477 +6353 6477 6476 +6354 6355 6477 +6355 6478 6477 +6355 6356 6479 +6355 6479 6478 +6356 6357 6479 +6357 6480 6479 +6357 6358 6481 +6357 6481 6480 +6358 6359 6481 +6359 6482 6481 +6359 6360 6483 +6359 6483 6482 +6360 6361 6483 +6361 6484 6483 +6361 6362 6485 +6361 6485 6484 +6362 6363 6485 +6363 6486 6485 +6363 6364 6487 +6363 6487 6486 +6364 6365 6487 +6365 6488 6487 +6365 6366 6489 +6365 6489 6488 +6366 6367 6489 +6367 6490 6489 +6367 6368 6491 +6367 6491 6490 +6368 6369 6491 +6369 6492 6491 +6369 6370 6493 +6369 6493 6492 +6370 6371 6493 +6371 6494 6493 +6371 6372 6495 +6371 6495 6494 +6372 6373 6495 +6373 6496 6495 +6373 6374 6497 +6373 6497 6496 +6374 6375 6497 +6375 6498 6497 +6375 6376 6499 +6375 6499 6498 +6376 6377 6499 +6377 6500 6499 +6377 6378 6501 +6377 6501 6500 +6378 6379 6501 +6379 6502 6501 +6379 6380 6503 +6379 6503 6502 +6380 6381 6503 +6381 6504 6503 +6381 6382 6505 +6381 6505 6504 +6382 6383 6505 +6383 6506 6505 +6383 6384 6507 +6383 6507 6506 +6384 6385 6507 +6385 6508 6507 +6385 6386 6509 +6385 6509 6508 +6386 6387 6509 +6387 6510 6509 +6387 6388 6511 +6387 6511 6510 +6388 6389 6511 +6389 6512 6511 +6389 6390 6513 +6389 6513 6512 +6390 6391 6513 +6391 6514 6513 +6391 6392 6515 +6391 6515 6514 +6392 6393 6515 +6393 6516 6515 +6393 6394 6517 +6393 6517 6516 +6394 6395 6517 +6395 6518 6517 +6395 6396 6519 +6395 6519 6518 +6396 6397 6519 +6397 6520 6519 +6397 6398 6521 +6397 6521 6520 +6398 6399 6521 +6399 6522 6521 +6399 6400 6523 +6399 6523 6522 +6400 6401 6523 +6401 6524 6523 +6401 6402 6525 +6401 6525 6524 +6402 6403 6525 +6403 6526 6525 +6403 6404 6527 +6403 6527 6526 +6404 6405 6527 +6405 6528 6527 +6405 6406 6529 +6405 6529 6528 +6406 6407 6529 +6407 6530 6529 +6407 6408 6531 +6407 6531 6530 +6408 6409 6531 +6409 6532 6531 +6409 6410 6533 +6409 6533 6532 +6410 6411 6533 +6411 6534 6533 +6411 6412 6535 +6411 6535 6534 +6412 6413 6535 +6413 6536 6535 +6413 6414 6537 +6413 6537 6536 +6414 6415 6537 +6415 6538 6537 +6415 6416 6539 +6415 6539 6538 +6416 6417 6539 +6417 6540 6539 +6417 6418 6541 +6417 6541 6540 +6418 6419 6541 +6420 6421 6542 +6421 6543 6542 +6421 6422 6544 +6421 6544 6543 +6422 6423 6544 +6423 6545 6544 +6423 6424 6546 +6423 6546 6545 +6424 6425 6546 +6425 6547 6546 +6425 6426 6548 +6425 6548 6547 +6426 6427 6548 +6427 6549 6548 +6427 6428 6550 +6427 6550 6549 +6428 6429 6550 +6429 6551 6550 +6429 6430 6552 +6429 6552 6551 +6430 6431 6552 +6431 6553 6552 +6431 6432 6554 +6431 6554 6553 +6432 6433 6554 +6433 6555 6554 +6433 6434 6556 +6433 6556 6555 +6434 6435 6556 +6435 6557 6556 +6435 6436 6558 +6435 6558 6557 +6436 6437 6558 +6437 6559 6558 +6437 6438 6560 +6437 6560 6559 +6438 6439 6560 +6439 6561 6560 +6439 6440 6562 +6439 6562 6561 +6441 6442 6564 +6441 6564 6563 +6442 6443 6564 +6443 6565 6564 +6443 6444 6566 +6443 6566 6565 +6444 6445 6566 +6445 6567 6566 +6445 6446 6568 +6445 6568 6567 +6446 6447 6568 +6447 6569 6568 +6447 6448 6570 +6447 6570 6569 +6448 6449 6570 +6449 6571 6570 +6449 6450 6572 +6449 6572 6571 +6450 6451 6572 +6451 6573 6572 +6451 6452 6574 +6451 6574 6573 +6452 6453 6574 +6453 6575 6574 +6453 6454 6576 +6453 6576 6575 +6454 6455 6576 +6455 6577 6576 +6455 6456 6578 +6455 6578 6577 +6456 6457 6578 +6457 6579 6578 +6457 6458 6580 +6457 6580 6579 +6458 6459 6580 +6459 6581 6580 +6459 6460 6582 +6459 6582 6581 +6460 6461 6582 +6461 6583 6582 +6461 6462 6584 +6461 6584 6583 +6462 6463 6584 +6463 6585 6584 +6463 6464 6586 +6463 6586 6585 +6464 6465 6586 +6465 6587 6586 +6465 6466 6588 +6465 6588 6587 +6466 6467 6588 +6467 6589 6588 +6467 6468 6590 +6467 6590 6589 +6468 6469 6590 +6469 6591 6590 +6469 6470 6592 +6469 6592 6591 +6470 6471 6592 +6471 6593 6592 +6471 6472 6594 +6471 6594 6593 +6472 6473 6594 +6473 6595 6594 +6473 6474 6596 +6473 6596 6595 +6474 6475 6596 +6475 6597 6596 +6475 6476 6598 +6475 6598 6597 +6476 6477 6598 +6477 6599 6598 +6477 6478 6600 +6477 6600 6599 +6478 6479 6600 +6479 6601 6600 +6479 6480 6602 +6479 6602 6601 +6480 6481 6602 +6481 6603 6602 +6481 6482 6604 +6481 6604 6603 +6482 6483 6604 +6483 6605 6604 +6483 6484 6606 +6483 6606 6605 +6484 6485 6606 +6485 6607 6606 +6485 6486 6608 +6485 6608 6607 +6486 6487 6608 +6487 6609 6608 +6487 6488 6610 +6487 6610 6609 +6488 6489 6610 +6489 6611 6610 +6489 6490 6612 +6489 6612 6611 +6490 6491 6612 +6491 6613 6612 +6491 6492 6614 +6491 6614 6613 +6492 6493 6614 +6493 6615 6614 +6493 6494 6616 +6493 6616 6615 +6494 6495 6616 +6495 6617 6616 +6495 6496 6618 +6495 6618 6617 +6496 6497 6618 +6497 6619 6618 +6497 6498 6620 +6497 6620 6619 +6498 6499 6620 +6499 6621 6620 +6499 6500 6622 +6499 6622 6621 +6500 6501 6622 +6501 6623 6622 +6501 6502 6624 +6501 6624 6623 +6502 6503 6624 +6503 6625 6624 +6503 6504 6626 +6503 6626 6625 +6504 6505 6626 +6505 6627 6626 +6505 6506 6628 +6505 6628 6627 +6506 6507 6628 +6507 6629 6628 +6507 6508 6630 +6507 6630 6629 +6508 6509 6630 +6509 6631 6630 +6509 6510 6632 +6509 6632 6631 +6510 6511 6632 +6511 6633 6632 +6511 6512 6634 +6511 6634 6633 +6512 6513 6634 +6513 6635 6634 +6513 6514 6636 +6513 6636 6635 +6514 6515 6636 +6515 6637 6636 +6515 6516 6638 +6515 6638 6637 +6516 6517 6638 +6517 6639 6638 +6517 6518 6640 +6517 6640 6639 +6518 6519 6640 +6519 6641 6640 +6519 6520 6642 +6519 6642 6641 +6520 6521 6642 +6521 6643 6642 +6521 6522 6644 +6521 6644 6643 +6522 6523 6644 +6523 6645 6644 +6523 6524 6646 +6523 6646 6645 +6524 6525 6646 +6525 6647 6646 +6525 6526 6648 +6525 6648 6647 +6526 6527 6648 +6527 6649 6648 +6527 6528 6650 +6527 6650 6649 +6528 6529 6650 +6529 6651 6650 +6529 6530 6652 +6529 6652 6651 +6530 6531 6652 +6531 6653 6652 +6531 6532 6654 +6531 6654 6653 +6532 6533 6654 +6533 6655 6654 +6533 6534 6656 +6533 6656 6655 +6534 6535 6656 +6535 6657 6656 +6535 6536 6658 +6535 6658 6657 +6536 6537 6658 +6537 6659 6658 +6537 6538 6660 +6537 6660 6659 +6538 6539 6660 +6539 6661 6660 +6539 6540 6662 +6539 6662 6661 +6540 6541 6662 +6541 6663 6662 +6542 6543 6665 +6542 6665 6664 +6543 6544 6665 +6544 6666 6665 +6544 6545 6667 +6544 6667 6666 +6545 6546 6667 +6546 6668 6667 +6546 6547 6669 +6546 6669 6668 +6547 6548 6669 +6548 6670 6669 +6548 6549 6671 +6548 6671 6670 +6549 6550 6671 +6550 6672 6671 +6550 6551 6673 +6550 6673 6672 +6551 6552 6673 +6552 6674 6673 +6552 6553 6675 +6552 6675 6674 +6553 6554 6675 +6554 6676 6675 +6554 6555 6677 +6554 6677 6676 +6555 6556 6677 +6556 6678 6677 +6556 6557 6679 +6556 6679 6678 +6557 6558 6679 +6558 6680 6679 +6558 6559 6681 +6558 6681 6680 +6559 6560 6681 +6560 6682 6681 +6560 6561 6683 +6560 6683 6682 +6561 6562 6683 +6562 6684 6683 +6563 6564 6685 +6564 6686 6685 +6564 6565 6687 +6564 6687 6686 +6565 6566 6687 +6566 6688 6687 +6566 6567 6689 +6566 6689 6688 +6567 6568 6689 +6568 6690 6689 +6568 6569 6691 +6568 6691 6690 +6569 6570 6691 +6570 6692 6691 +6570 6571 6693 +6570 6693 6692 +6571 6572 6693 +6572 6694 6693 +6572 6573 6695 +6572 6695 6694 +6573 6574 6695 +6574 6696 6695 +6574 6575 6697 +6574 6697 6696 +6575 6576 6697 +6576 6698 6697 +6576 6577 6699 +6576 6699 6698 +6577 6578 6699 +6578 6700 6699 +6578 6579 6701 +6578 6701 6700 +6579 6580 6701 +6580 6702 6701 +6580 6581 6703 +6580 6703 6702 +6581 6582 6703 +6582 6704 6703 +6582 6583 6705 +6582 6705 6704 +6583 6584 6705 +6584 6706 6705 +6584 6585 6707 +6584 6707 6706 +6585 6586 6707 +6586 6708 6707 +6586 6587 6709 +6586 6709 6708 +6587 6588 6709 +6588 6710 6709 +6588 6589 6711 +6588 6711 6710 +6589 6590 6711 +6590 6712 6711 +6590 6591 6713 +6590 6713 6712 +6591 6592 6713 +6592 6714 6713 +6592 6593 6715 +6592 6715 6714 +6593 6594 6715 +6594 6716 6715 +6594 6595 6717 +6594 6717 6716 +6595 6596 6717 +6596 6718 6717 +6596 6597 6719 +6596 6719 6718 +6597 6598 6719 +6598 6720 6719 +6598 6599 6721 +6598 6721 6720 +6599 6600 6721 +6600 6722 6721 +6600 6601 6723 +6600 6723 6722 +6601 6602 6723 +6602 6724 6723 +6602 6603 6725 +6602 6725 6724 +6603 6604 6725 +6604 6726 6725 +6604 6605 6727 +6604 6727 6726 +6605 6606 6727 +6606 6728 6727 +6606 6607 6729 +6606 6729 6728 +6607 6608 6729 +6608 6730 6729 +6608 6609 6731 +6608 6731 6730 +6609 6610 6731 +6610 6732 6731 +6610 6611 6733 +6610 6733 6732 +6611 6612 6733 +6612 6734 6733 +6612 6613 6735 +6612 6735 6734 +6613 6614 6735 +6614 6736 6735 +6614 6615 6737 +6614 6737 6736 +6615 6616 6737 +6616 6738 6737 +6616 6617 6739 +6616 6739 6738 +6617 6618 6739 +6618 6740 6739 +6618 6619 6741 +6618 6741 6740 +6619 6620 6741 +6620 6742 6741 +6620 6621 6743 +6620 6743 6742 +6621 6622 6743 +6622 6744 6743 +6622 6623 6745 +6622 6745 6744 +6623 6624 6745 +6624 6746 6745 +6624 6625 6747 +6624 6747 6746 +6625 6626 6747 +6626 6748 6747 +6626 6627 6749 +6626 6749 6748 +6627 6628 6749 +6628 6750 6749 +6628 6629 6751 +6628 6751 6750 +6629 6630 6751 +6630 6752 6751 +6630 6631 6753 +6630 6753 6752 +6631 6632 6753 +6632 6754 6753 +6632 6633 6755 +6632 6755 6754 +6633 6634 6755 +6634 6756 6755 +6634 6635 6757 +6634 6757 6756 +6635 6636 6757 +6636 6758 6757 +6636 6637 6759 +6636 6759 6758 +6637 6638 6759 +6638 6760 6759 +6638 6639 6761 +6638 6761 6760 +6639 6640 6761 +6640 6762 6761 +6640 6641 6763 +6640 6763 6762 +6641 6642 6763 +6642 6764 6763 +6642 6643 6765 +6642 6765 6764 +6643 6644 6765 +6644 6766 6765 +6644 6645 6767 +6644 6767 6766 +6645 6646 6767 +6646 6768 6767 +6646 6647 6769 +6646 6769 6768 +6647 6648 6769 +6648 6770 6769 +6648 6649 6771 +6648 6771 6770 +6649 6650 6771 +6650 6772 6771 +6650 6651 6773 +6650 6773 6772 +6651 6652 6773 +6652 6774 6773 +6652 6653 6775 +6652 6775 6774 +6653 6654 6775 +6654 6776 6775 +6654 6655 6777 +6654 6777 6776 +6655 6656 6777 +6656 6778 6777 +6656 6657 6779 +6656 6779 6778 +6657 6658 6779 +6658 6780 6779 +6658 6659 6781 +6658 6781 6780 +6659 6660 6781 +6660 6782 6781 +6660 6661 6783 +6660 6783 6782 +6661 6662 6783 +6662 6784 6783 +6662 6663 6785 +6662 6785 6784 +6664 6665 6786 +6665 6787 6786 +6665 6666 6788 +6665 6788 6787 +6666 6667 6788 +6667 6789 6788 +6667 6668 6790 +6667 6790 6789 +6668 6669 6790 +6669 6791 6790 +6669 6670 6792 +6669 6792 6791 +6670 6671 6792 +6671 6793 6792 +6671 6672 6794 +6671 6794 6793 +6672 6673 6794 +6673 6795 6794 +6673 6674 6796 +6673 6796 6795 +6674 6675 6796 +6675 6797 6796 +6675 6676 6798 +6675 6798 6797 +6676 6677 6798 +6677 6799 6798 +6677 6678 6800 +6677 6800 6799 +6678 6679 6800 +6679 6801 6800 +6679 6680 6802 +6679 6802 6801 +6680 6681 6802 +6681 6803 6802 +6681 6682 6804 +6681 6804 6803 +6682 6683 6804 +6683 6805 6804 +6683 6684 6806 +6683 6806 6805 +6685 6686 6808 +6685 6808 6807 +6686 6687 6808 +6687 6809 6808 +6687 6688 6810 +6687 6810 6809 +6688 6689 6810 +6689 6811 6810 +6689 6690 6812 +6689 6812 6811 +6690 6691 6812 +6691 6813 6812 +6691 6692 6814 +6691 6814 6813 +6692 6693 6814 +6693 6815 6814 +6693 6694 6816 +6693 6816 6815 +6694 6695 6816 +6695 6817 6816 +6695 6696 6818 +6695 6818 6817 +6696 6697 6818 +6697 6819 6818 +6697 6698 6820 +6697 6820 6819 +6698 6699 6820 +6699 6821 6820 +6699 6700 6822 +6699 6822 6821 +6700 6701 6822 +6701 6823 6822 +6701 6702 6824 +6701 6824 6823 +6702 6703 6824 +6703 6825 6824 +6703 6704 6826 +6703 6826 6825 +6704 6705 6826 +6705 6827 6826 +6705 6706 6828 +6705 6828 6827 +6706 6707 6828 +6707 6829 6828 +6707 6708 6830 +6707 6830 6829 +6708 6709 6830 +6709 6831 6830 +6709 6710 6832 +6709 6832 6831 +6710 6711 6832 +6711 6833 6832 +6711 6712 6834 +6711 6834 6833 +6712 6713 6834 +6713 6835 6834 +6713 6714 6836 +6713 6836 6835 +6714 6715 6836 +6715 6837 6836 +6715 6716 6838 +6715 6838 6837 +6716 6717 6838 +6717 6839 6838 +6717 6718 6840 +6717 6840 6839 +6718 6719 6840 +6719 6841 6840 +6719 6720 6842 +6719 6842 6841 +6720 6721 6842 +6721 6843 6842 +6721 6722 6844 +6721 6844 6843 +6722 6723 6844 +6723 6845 6844 +6723 6724 6846 +6723 6846 6845 +6724 6725 6846 +6725 6847 6846 +6725 6726 6848 +6725 6848 6847 +6726 6727 6848 +6727 6849 6848 +6727 6728 6850 +6727 6850 6849 +6728 6729 6850 +6729 6851 6850 +6729 6730 6852 +6729 6852 6851 +6730 6731 6852 +6731 6853 6852 +6731 6732 6854 +6731 6854 6853 +6732 6733 6854 +6733 6855 6854 +6733 6734 6856 +6733 6856 6855 +6734 6735 6856 +6735 6857 6856 +6735 6736 6858 +6735 6858 6857 +6736 6737 6858 +6737 6859 6858 +6737 6738 6860 +6737 6860 6859 +6738 6739 6860 +6739 6861 6860 +6739 6740 6862 +6739 6862 6861 +6740 6741 6862 +6741 6863 6862 +6741 6742 6864 +6741 6864 6863 +6742 6743 6864 +6743 6865 6864 +6743 6744 6866 +6743 6866 6865 +6744 6745 6866 +6745 6867 6866 +6745 6746 6868 +6745 6868 6867 +6746 6747 6868 +6747 6869 6868 +6747 6748 6870 +6747 6870 6869 +6748 6749 6870 +6749 6871 6870 +6749 6750 6872 +6749 6872 6871 +6750 6751 6872 +6751 6873 6872 +6751 6752 6874 +6751 6874 6873 +6752 6753 6874 +6753 6875 6874 +6753 6754 6876 +6753 6876 6875 +6754 6755 6876 +6755 6877 6876 +6755 6756 6878 +6755 6878 6877 +6756 6757 6878 +6757 6879 6878 +6757 6758 6880 +6757 6880 6879 +6758 6759 6880 +6759 6881 6880 +6759 6760 6882 +6759 6882 6881 +6760 6761 6882 +6761 6883 6882 +6761 6762 6884 +6761 6884 6883 +6762 6763 6884 +6763 6885 6884 +6763 6764 6886 +6763 6886 6885 +6764 6765 6886 +6765 6887 6886 +6765 6766 6888 +6765 6888 6887 +6766 6767 6888 +6767 6889 6888 +6767 6768 6890 +6767 6890 6889 +6768 6769 6890 +6769 6891 6890 +6769 6770 6892 +6769 6892 6891 +6770 6771 6892 +6771 6893 6892 +6771 6772 6894 +6771 6894 6893 +6772 6773 6894 +6773 6895 6894 +6773 6774 6896 +6773 6896 6895 +6774 6775 6896 +6775 6897 6896 +6775 6776 6898 +6775 6898 6897 +6776 6777 6898 +6777 6899 6898 +6777 6778 6900 +6777 6900 6899 +6778 6779 6900 +6779 6901 6900 +6779 6780 6902 +6779 6902 6901 +6780 6781 6902 +6781 6903 6902 +6781 6782 6904 +6781 6904 6903 +6782 6783 6904 +6783 6905 6904 +6783 6784 6906 +6783 6906 6905 +6784 6785 6906 +6785 6907 6906 +6786 6787 6908 +6787 6788 6908 +6788 6909 6908 +6788 6789 6910 +6788 6910 6909 +6789 6790 6910 +6790 6911 6910 +6790 6791 6912 +6790 6912 6911 +6791 6792 6912 +6792 6913 6912 +6792 6793 6914 +6792 6914 6913 +6793 6794 6914 +6794 6915 6914 +6794 6795 6916 +6794 6916 6915 +6795 6796 6916 +6796 6917 6916 +6796 6797 6918 +6796 6918 6917 +6797 6798 6918 +6798 6919 6918 +6798 6799 6920 +6798 6920 6919 +6799 6800 6920 +6800 6921 6920 +6800 6801 6922 +6800 6922 6921 +6801 6802 6922 +6802 6923 6922 +6802 6803 6924 +6802 6924 6923 +6803 6804 6924 +6804 6925 6924 +6804 6805 6926 +6804 6926 6925 +6805 6806 6926 +6806 6927 6926 +6807 6808 6928 +6808 6929 6928 +6808 6809 6930 +6808 6930 6929 +6809 6810 6930 +6810 6931 6930 +6810 6811 6932 +6810 6932 6931 +6811 6812 6932 +6812 6933 6932 +6812 6813 6934 +6812 6934 6933 +6813 6814 6934 +6814 6935 6934 +6814 6815 6936 +6814 6936 6935 +6815 6816 6936 +6816 6937 6936 +6816 6817 6938 +6816 6938 6937 +6817 6818 6938 +6818 6939 6938 +6818 6819 6940 +6818 6940 6939 +6819 6820 6940 +6820 6941 6940 +6820 6821 6942 +6820 6942 6941 +6821 6822 6942 +6822 6943 6942 +6822 6823 6944 +6822 6944 6943 +6823 6824 6944 +6824 6945 6944 +6824 6825 6946 +6824 6946 6945 +6825 6826 6946 +6826 6947 6946 +6826 6827 6948 +6826 6948 6947 +6827 6828 6948 +6828 6949 6948 +6828 6829 6950 +6828 6950 6949 +6829 6830 6950 +6830 6951 6950 +6830 6831 6952 +6830 6952 6951 +6831 6832 6952 +6832 6953 6952 +6832 6833 6954 +6832 6954 6953 +6833 6834 6954 +6834 6955 6954 +6834 6835 6956 +6834 6956 6955 +6835 6836 6956 +6836 6957 6956 +6836 6837 6958 +6836 6958 6957 +6837 6838 6958 +6838 6959 6958 +6838 6839 6960 +6838 6960 6959 +6839 6840 6960 +6840 6961 6960 +6840 6841 6962 +6840 6962 6961 +6841 6842 6962 +6842 6963 6962 +6842 6843 6964 +6842 6964 6963 +6843 6844 6964 +6844 6965 6964 +6844 6845 6966 +6844 6966 6965 +6845 6846 6966 +6846 6967 6966 +6846 6847 6968 +6846 6968 6967 +6847 6848 6968 +6848 6969 6968 +6848 6849 6970 +6848 6970 6969 +6849 6850 6970 +6850 6971 6970 +6850 6851 6972 +6850 6972 6971 +6851 6852 6972 +6852 6973 6972 +6852 6853 6974 +6852 6974 6973 +6853 6854 6974 +6854 6975 6974 +6854 6855 6976 +6854 6976 6975 +6855 6856 6976 +6856 6977 6976 +6856 6857 6978 +6856 6978 6977 +6857 6858 6978 +6858 6979 6978 +6858 6859 6980 +6858 6980 6979 +6859 6860 6980 +6860 6981 6980 +6860 6861 6982 +6860 6982 6981 +6861 6862 6982 +6862 6983 6982 +6862 6863 6984 +6862 6984 6983 +6863 6864 6984 +6864 6985 6984 +6864 6865 6986 +6864 6986 6985 +6865 6866 6986 +6866 6987 6986 +6866 6867 6988 +6866 6988 6987 +6867 6868 6988 +6868 6989 6988 +6868 6869 6990 +6868 6990 6989 +6869 6870 6990 +6870 6991 6990 +6870 6871 6992 +6870 6992 6991 +6871 6872 6992 +6872 6993 6992 +6872 6873 6994 +6872 6994 6993 +6873 6874 6994 +6874 6995 6994 +6874 6875 6996 +6874 6996 6995 +6875 6876 6996 +6876 6997 6996 +6876 6877 6998 +6876 6998 6997 +6877 6878 6998 +6878 6999 6998 +6878 6879 7000 +6878 7000 6999 +6879 6880 7000 +6880 7001 7000 +6880 6881 7002 +6880 7002 7001 +6881 6882 7002 +6882 7003 7002 +6882 6883 7004 +6882 7004 7003 +6883 6884 7004 +6884 7005 7004 +6884 6885 7006 +6884 7006 7005 +6885 6886 7006 +6886 7007 7006 +6886 6887 7008 +6886 7008 7007 +6887 6888 7008 +6888 7009 7008 +6888 6889 7010 +6888 7010 7009 +6889 6890 7010 +6890 7011 7010 +6890 6891 7012 +6890 7012 7011 +6891 6892 7012 +6892 7013 7012 +6892 6893 7014 +6892 7014 7013 +6893 6894 7014 +6894 7015 7014 +6894 6895 7016 +6894 7016 7015 +6895 6896 7016 +6896 7017 7016 +6896 6897 7018 +6896 7018 7017 +6897 6898 7018 +6898 7019 7018 +6898 6899 7020 +6898 7020 7019 +6899 6900 7020 +6900 7021 7020 +6900 6901 7022 +6900 7022 7021 +6901 6902 7022 +6902 7023 7022 +6902 6903 7024 +6902 7024 7023 +6903 6904 7024 +6904 7025 7024 +6904 6905 7026 +6904 7026 7025 +6905 6906 7026 +6906 7027 7026 +6906 6907 7028 +6906 7028 7027 +6908 6909 7029 +6909 6910 7029 +6910 7030 7029 +6910 6911 7031 +6910 7031 7030 +6911 6912 7031 +6912 7032 7031 +6912 6913 7033 +6912 7033 7032 +6913 6914 7033 +6914 7034 7033 +6914 6915 7035 +6914 7035 7034 +6915 6916 7035 +6916 7036 7035 +6916 6917 7037 +6916 7037 7036 +6917 6918 7037 +6918 7038 7037 +6918 6919 7039 +6918 7039 7038 +6919 6920 7039 +6920 7040 7039 +6920 6921 7041 +6920 7041 7040 +6921 6922 7041 +6922 7042 7041 +6922 6923 7043 +6922 7043 7042 +6923 6924 7043 +6924 7044 7043 +6924 6925 7045 +6924 7045 7044 +6925 6926 7045 +6926 7046 7045 +6926 6927 7047 +6926 7047 7046 +6928 6929 7049 +6928 7049 7048 +6929 6930 7049 +6930 7050 7049 +6930 6931 7051 +6930 7051 7050 +6931 6932 7051 +6932 7052 7051 +6932 6933 7053 +6932 7053 7052 +6933 6934 7053 +6934 7054 7053 +6934 6935 7055 +6934 7055 7054 +6935 6936 7055 +6936 7056 7055 +6936 6937 7057 +6936 7057 7056 +6937 6938 7057 +6938 7058 7057 +6938 6939 7059 +6938 7059 7058 +6939 6940 7059 +6940 7060 7059 +6940 6941 7061 +6940 7061 7060 +6941 6942 7061 +6942 7062 7061 +6942 6943 7063 +6942 7063 7062 +6943 6944 7063 +6944 7064 7063 +6944 6945 7065 +6944 7065 7064 +6945 6946 7065 +6946 7066 7065 +6946 6947 7067 +6946 7067 7066 +6947 6948 7067 +6948 7068 7067 +6948 6949 7069 +6948 7069 7068 +6949 6950 7069 +6950 7070 7069 +6950 6951 7071 +6950 7071 7070 +6951 6952 7071 +6952 7072 7071 +6952 6953 7073 +6952 7073 7072 +6953 6954 7073 +6954 7074 7073 +6954 6955 7075 +6954 7075 7074 +6955 6956 7075 +6956 7076 7075 +6956 6957 7077 +6956 7077 7076 +6957 6958 7077 +6958 7078 7077 +6958 6959 7079 +6958 7079 7078 +6959 6960 7079 +6960 7080 7079 +6960 6961 7081 +6960 7081 7080 +6961 6962 7081 +6962 7082 7081 +6962 6963 7083 +6962 7083 7082 +6963 6964 7083 +6964 7084 7083 +6964 6965 7085 +6964 7085 7084 +6965 6966 7085 +6966 7086 7085 +6966 6967 7087 +6966 7087 7086 +6967 6968 7087 +6968 7088 7087 +6968 6969 7089 +6968 7089 7088 +6969 6970 7089 +6970 7090 7089 +6970 6971 7091 +6970 7091 7090 +6971 6972 7091 +6972 7092 7091 +6972 6973 7093 +6972 7093 7092 +6973 6974 7093 +6974 7094 7093 +6974 6975 7095 +6974 7095 7094 +6975 6976 7095 +6976 7096 7095 +6976 6977 7097 +6976 7097 7096 +6977 6978 7097 +6978 7098 7097 +6978 6979 7099 +6978 7099 7098 +6979 6980 7099 +6980 7100 7099 +6980 6981 7101 +6980 7101 7100 +6981 6982 7101 +6982 7102 7101 +6982 6983 7103 +6982 7103 7102 +6983 6984 7103 +6984 7104 7103 +6984 6985 7105 +6984 7105 7104 +6985 6986 7105 +6986 7106 7105 +6986 6987 7107 +6986 7107 7106 +6987 6988 7107 +6988 7108 7107 +6988 6989 7109 +6988 7109 7108 +6989 6990 7109 +6990 7110 7109 +6990 6991 7111 +6990 7111 7110 +6991 6992 7111 +6992 7112 7111 +6992 6993 7113 +6992 7113 7112 +6993 6994 7113 +6994 7114 7113 +6994 6995 7115 +6994 7115 7114 +6995 6996 7115 +6996 7116 7115 +6996 6997 7117 +6996 7117 7116 +6997 6998 7117 +6998 7118 7117 +6998 6999 7119 +6998 7119 7118 +6999 7000 7119 +7000 7120 7119 +7000 7001 7121 +7000 7121 7120 +7001 7002 7121 +7002 7122 7121 +7002 7003 7123 +7002 7123 7122 +7003 7004 7123 +7004 7124 7123 +7004 7005 7125 +7004 7125 7124 +7005 7006 7125 +7006 7126 7125 +7006 7007 7127 +7006 7127 7126 +7007 7008 7127 +7008 7128 7127 +7008 7009 7129 +7008 7129 7128 +7009 7010 7129 +7010 7130 7129 +7010 7011 7131 +7010 7131 7130 +7011 7012 7131 +7012 7132 7131 +7012 7013 7133 +7012 7133 7132 +7013 7014 7133 +7014 7134 7133 +7014 7015 7135 +7014 7135 7134 +7015 7016 7135 +7016 7136 7135 +7016 7017 7137 +7016 7137 7136 +7017 7018 7137 +7018 7138 7137 +7018 7019 7139 +7018 7139 7138 +7019 7020 7139 +7020 7140 7139 +7020 7021 7141 +7020 7141 7140 +7021 7022 7141 +7022 7142 7141 +7022 7023 7143 +7022 7143 7142 +7023 7024 7143 +7024 7144 7143 +7024 7025 7145 +7024 7145 7144 +7025 7026 7145 +7026 7146 7145 +7026 7027 7147 +7026 7147 7146 +7027 7028 7147 +7028 7148 7147 +7029 7030 7150 +7029 7150 7149 +7030 7031 7150 +7031 7151 7150 +7031 7032 7152 +7031 7152 7151 +7032 7033 7152 +7033 7153 7152 +7033 7034 7154 +7033 7154 7153 +7034 7035 7154 +7035 7155 7154 +7035 7036 7156 +7035 7156 7155 +7036 7037 7156 +7037 7157 7156 +7037 7038 7158 +7037 7158 7157 +7038 7039 7158 +7039 7159 7158 +7039 7040 7160 +7039 7160 7159 +7040 7041 7160 +7041 7161 7160 +7041 7042 7162 +7041 7162 7161 +7042 7043 7162 +7043 7163 7162 +7043 7044 7164 +7043 7164 7163 +7044 7045 7164 +7045 7165 7164 +7045 7046 7166 +7045 7166 7165 +7046 7047 7166 +7047 7167 7166 +7048 7049 7168 +7049 7169 7168 +7049 7050 7170 +7049 7170 7169 +7050 7051 7170 +7051 7171 7170 +7051 7052 7172 +7051 7172 7171 +7052 7053 7172 +7053 7173 7172 +7053 7054 7174 +7053 7174 7173 +7054 7055 7174 +7055 7175 7174 +7055 7056 7176 +7055 7176 7175 +7056 7057 7176 +7057 7177 7176 +7057 7058 7178 +7057 7178 7177 +7058 7059 7178 +7059 7179 7178 +7059 7060 7180 +7059 7180 7179 +7060 7061 7180 +7061 7181 7180 +7061 7062 7182 +7061 7182 7181 +7062 7063 7182 +7063 7183 7182 +7063 7064 7184 +7063 7184 7183 +7064 7065 7184 +7065 7185 7184 +7065 7066 7186 +7065 7186 7185 +7066 7067 7186 +7067 7187 7186 +7067 7068 7188 +7067 7188 7187 +7068 7069 7188 +7069 7189 7188 +7069 7070 7190 +7069 7190 7189 +7070 7071 7190 +7071 7191 7190 +7071 7072 7192 +7071 7192 7191 +7072 7073 7192 +7073 7193 7192 +7073 7074 7194 +7073 7194 7193 +7074 7075 7194 +7075 7195 7194 +7075 7076 7196 +7075 7196 7195 +7076 7077 7196 +7077 7197 7196 +7077 7078 7198 +7077 7198 7197 +7078 7079 7198 +7079 7199 7198 +7079 7080 7200 +7079 7200 7199 +7080 7081 7200 +7081 7201 7200 +7081 7082 7202 +7081 7202 7201 +7082 7083 7202 +7083 7203 7202 +7083 7084 7204 +7083 7204 7203 +7084 7085 7204 +7085 7205 7204 +7085 7086 7206 +7085 7206 7205 +7086 7087 7206 +7087 7207 7206 +7087 7088 7208 +7087 7208 7207 +7088 7089 7208 +7089 7209 7208 +7089 7090 7210 +7089 7210 7209 +7090 7091 7210 +7091 7211 7210 +7091 7092 7212 +7091 7212 7211 +7092 7093 7212 +7093 7213 7212 +7093 7094 7214 +7093 7214 7213 +7094 7095 7214 +7095 7215 7214 +7095 7096 7216 +7095 7216 7215 +7096 7097 7216 +7097 7217 7216 +7097 7098 7218 +7097 7218 7217 +7098 7099 7218 +7099 7219 7218 +7099 7100 7220 +7099 7220 7219 +7100 7101 7220 +7101 7221 7220 +7101 7102 7222 +7101 7222 7221 +7102 7103 7222 +7103 7223 7222 +7103 7104 7224 +7103 7224 7223 +7104 7105 7224 +7105 7225 7224 +7105 7106 7226 +7105 7226 7225 +7106 7107 7226 +7107 7227 7226 +7107 7108 7228 +7107 7228 7227 +7108 7109 7228 +7109 7229 7228 +7109 7110 7230 +7109 7230 7229 +7110 7111 7230 +7111 7231 7230 +7111 7112 7232 +7111 7232 7231 +7112 7113 7232 +7113 7233 7232 +7113 7114 7234 +7113 7234 7233 +7114 7115 7234 +7115 7235 7234 +7115 7116 7236 +7115 7236 7235 +7116 7117 7236 +7117 7237 7236 +7117 7118 7238 +7117 7238 7237 +7118 7119 7238 +7119 7239 7238 +7119 7120 7240 +7119 7240 7239 +7120 7121 7240 +7121 7241 7240 +7121 7122 7242 +7121 7242 7241 +7122 7123 7242 +7123 7243 7242 +7123 7124 7244 +7123 7244 7243 +7124 7125 7244 +7125 7245 7244 +7125 7126 7246 +7125 7246 7245 +7126 7127 7246 +7127 7247 7246 +7127 7128 7248 +7127 7248 7247 +7128 7129 7248 +7129 7249 7248 +7129 7130 7250 +7129 7250 7249 +7130 7131 7250 +7131 7251 7250 +7131 7132 7252 +7131 7252 7251 +7132 7133 7252 +7133 7253 7252 +7133 7134 7254 +7133 7254 7253 +7134 7135 7254 +7135 7255 7254 +7135 7136 7256 +7135 7256 7255 +7136 7137 7256 +7137 7257 7256 +7137 7138 7258 +7137 7258 7257 +7138 7139 7258 +7139 7259 7258 +7139 7140 7260 +7139 7260 7259 +7140 7141 7260 +7141 7261 7260 +7141 7142 7262 +7141 7262 7261 +7142 7143 7262 +7143 7263 7262 +7143 7144 7264 +7143 7264 7263 +7144 7145 7264 +7145 7265 7264 +7145 7146 7266 +7145 7266 7265 +7146 7147 7266 +7147 7267 7266 +7147 7148 7268 +7147 7268 7267 +7149 7150 7269 +7150 7270 7269 +7150 7151 7271 +7150 7271 7270 +7151 7152 7271 +7152 7272 7271 +7152 7153 7273 +7152 7273 7272 +7153 7154 7273 +7154 7274 7273 +7154 7155 7275 +7154 7275 7274 +7155 7156 7275 +7156 7276 7275 +7156 7157 7277 +7156 7277 7276 +7157 7158 7277 +7158 7278 7277 +7158 7159 7279 +7158 7279 7278 +7159 7160 7279 +7160 7280 7279 +7160 7161 7281 +7160 7281 7280 +7161 7162 7281 +7162 7282 7281 +7162 7163 7283 +7162 7283 7282 +7163 7164 7283 +7164 7284 7283 +7164 7165 7285 +7164 7285 7284 +7165 7166 7285 +7166 7286 7285 +7166 7167 7287 +7166 7287 7286 +7168 7169 7289 +7168 7289 7288 +7169 7170 7289 +7170 7290 7289 +7170 7171 7291 +7170 7291 7290 +7171 7172 7291 +7172 7292 7291 +7172 7173 7293 +7172 7293 7292 +7173 7174 7293 +7174 7294 7293 +7174 7175 7295 +7174 7295 7294 +7175 7176 7295 +7176 7296 7295 +7176 7177 7297 +7176 7297 7296 +7177 7178 7297 +7178 7298 7297 +7178 7179 7299 +7178 7299 7298 +7179 7180 7299 +7180 7300 7299 +7180 7181 7301 +7180 7301 7300 +7181 7182 7301 +7182 7302 7301 +7182 7183 7303 +7182 7303 7302 +7183 7184 7303 +7184 7304 7303 +7184 7185 7305 +7184 7305 7304 +7185 7186 7305 +7186 7306 7305 +7186 7187 7307 +7186 7307 7306 +7187 7188 7307 +7188 7308 7307 +7188 7189 7309 +7188 7309 7308 +7189 7190 7309 +7190 7310 7309 +7190 7191 7311 +7190 7311 7310 +7191 7192 7311 +7192 7312 7311 +7192 7193 7313 +7192 7313 7312 +7193 7194 7313 +7194 7314 7313 +7194 7195 7315 +7194 7315 7314 +7195 7196 7315 +7196 7316 7315 +7196 7197 7317 +7196 7317 7316 +7197 7198 7317 +7198 7318 7317 +7198 7199 7319 +7198 7319 7318 +7199 7200 7319 +7200 7320 7319 +7200 7201 7321 +7200 7321 7320 +7201 7202 7321 +7202 7322 7321 +7202 7203 7323 +7202 7323 7322 +7203 7204 7323 +7204 7324 7323 +7204 7205 7325 +7204 7325 7324 +7205 7206 7325 +7206 7326 7325 +7206 7207 7327 +7206 7327 7326 +7207 7208 7327 +7208 7328 7327 +7208 7209 7329 +7208 7329 7328 +7209 7210 7329 +7210 7330 7329 +7210 7211 7331 +7210 7331 7330 +7211 7212 7331 +7212 7332 7331 +7212 7213 7333 +7212 7333 7332 +7213 7214 7333 +7214 7334 7333 +7214 7215 7335 +7214 7335 7334 +7215 7216 7335 +7216 7336 7335 +7216 7217 7337 +7216 7337 7336 +7217 7218 7337 +7218 7338 7337 +7218 7219 7339 +7218 7339 7338 +7219 7220 7339 +7220 7340 7339 +7220 7221 7341 +7220 7341 7340 +7221 7222 7341 +7222 7342 7341 +7222 7223 7343 +7222 7343 7342 +7223 7224 7343 +7224 7344 7343 +7224 7225 7345 +7224 7345 7344 +7225 7226 7345 +7226 7346 7345 +7226 7227 7347 +7226 7347 7346 +7227 7228 7347 +7228 7348 7347 +7228 7229 7349 +7228 7349 7348 +7229 7230 7349 +7230 7350 7349 +7230 7231 7351 +7230 7351 7350 +7231 7232 7351 +7232 7352 7351 +7232 7233 7353 +7232 7353 7352 +7233 7234 7353 +7234 7354 7353 +7234 7235 7355 +7234 7355 7354 +7235 7236 7355 +7236 7356 7355 +7236 7237 7357 +7236 7357 7356 +7237 7238 7357 +7238 7358 7357 +7238 7239 7359 +7238 7359 7358 +7239 7240 7359 +7240 7360 7359 +7240 7241 7361 +7240 7361 7360 +7241 7242 7361 +7242 7362 7361 +7242 7243 7363 +7242 7363 7362 +7243 7244 7363 +7244 7364 7363 +7244 7245 7365 +7244 7365 7364 +7245 7246 7365 +7246 7366 7365 +7246 7247 7367 +7246 7367 7366 +7247 7248 7367 +7248 7368 7367 +7248 7249 7369 +7248 7369 7368 +7249 7250 7369 +7250 7370 7369 +7250 7251 7371 +7250 7371 7370 +7251 7252 7371 +7252 7372 7371 +7252 7253 7373 +7252 7373 7372 +7253 7254 7373 +7254 7374 7373 +7254 7255 7375 +7254 7375 7374 +7255 7256 7375 +7256 7376 7375 +7256 7257 7377 +7256 7377 7376 +7257 7258 7377 +7258 7378 7377 +7258 7259 7379 +7258 7379 7378 +7259 7260 7379 +7260 7380 7379 +7260 7261 7381 +7260 7381 7380 +7261 7262 7381 +7262 7382 7381 +7262 7263 7383 +7262 7383 7382 +7263 7264 7383 +7264 7384 7383 +7264 7265 7385 +7264 7385 7384 +7265 7266 7385 +7266 7386 7385 +7266 7267 7387 +7266 7387 7386 +7267 7268 7387 +7268 7388 7387 +7269 7270 7390 +7269 7390 7389 +7270 7271 7390 +7271 7391 7390 +7271 7272 7392 +7271 7392 7391 +7272 7273 7392 +7273 7393 7392 +7273 7274 7394 +7273 7394 7393 +7274 7275 7394 +7275 7395 7394 +7275 7276 7396 +7275 7396 7395 +7276 7277 7396 +7277 7397 7396 +7277 7278 7398 +7277 7398 7397 +7278 7279 7398 +7279 7399 7398 +7279 7280 7400 +7279 7400 7399 +7280 7281 7400 +7281 7401 7400 +7281 7282 7402 +7281 7402 7401 +7282 7283 7402 +7283 7403 7402 +7283 7284 7404 +7283 7404 7403 +7284 7285 7404 +7285 7405 7404 +7285 7286 7406 +7285 7406 7405 +7286 7287 7406 +7287 7407 7406 +7288 7289 7408 +7289 7409 7408 +7289 7290 7410 +7289 7410 7409 +7290 7291 7410 +7291 7411 7410 +7291 7292 7412 +7291 7412 7411 +7292 7293 7412 +7293 7413 7412 +7293 7294 7414 +7293 7414 7413 +7294 7295 7414 +7295 7415 7414 +7295 7296 7416 +7295 7416 7415 +7296 7297 7416 +7297 7417 7416 +7297 7298 7418 +7297 7418 7417 +7298 7299 7418 +7299 7419 7418 +7299 7300 7420 +7299 7420 7419 +7300 7301 7420 +7301 7421 7420 +7301 7302 7422 +7301 7422 7421 +7302 7303 7422 +7303 7423 7422 +7303 7304 7424 +7303 7424 7423 +7304 7305 7424 +7305 7425 7424 +7305 7306 7426 +7305 7426 7425 +7306 7307 7426 +7307 7427 7426 +7307 7308 7428 +7307 7428 7427 +7308 7309 7428 +7309 7429 7428 +7309 7310 7430 +7309 7430 7429 +7310 7311 7430 +7311 7431 7430 +7311 7312 7432 +7311 7432 7431 +7312 7313 7432 +7313 7433 7432 +7313 7314 7434 +7313 7434 7433 +7314 7315 7434 +7315 7435 7434 +7315 7316 7436 +7315 7436 7435 +7316 7317 7436 +7317 7437 7436 +7317 7318 7438 +7317 7438 7437 +7318 7319 7438 +7319 7439 7438 +7319 7320 7440 +7319 7440 7439 +7320 7321 7440 +7321 7441 7440 +7321 7322 7442 +7321 7442 7441 +7322 7323 7442 +7323 7443 7442 +7323 7324 7444 +7323 7444 7443 +7324 7325 7444 +7325 7445 7444 +7325 7326 7446 +7325 7446 7445 +7326 7327 7446 +7327 7447 7446 +7327 7328 7448 +7327 7448 7447 +7328 7329 7448 +7329 7449 7448 +7329 7330 7450 +7329 7450 7449 +7330 7331 7450 +7331 7451 7450 +7331 7332 7452 +7331 7452 7451 +7332 7333 7452 +7333 7453 7452 +7333 7334 7454 +7333 7454 7453 +7334 7335 7454 +7335 7455 7454 +7335 7336 7456 +7335 7456 7455 +7336 7337 7456 +7337 7457 7456 +7337 7338 7458 +7337 7458 7457 +7338 7339 7458 +7339 7459 7458 +7339 7340 7460 +7339 7460 7459 +7340 7341 7460 +7341 7461 7460 +7341 7342 7462 +7341 7462 7461 +7342 7343 7462 +7343 7463 7462 +7343 7344 7464 +7343 7464 7463 +7344 7345 7464 +7345 7465 7464 +7345 7346 7466 +7345 7466 7465 +7346 7347 7466 +7347 7467 7466 +7347 7348 7468 +7347 7468 7467 +7348 7349 7468 +7349 7469 7468 +7349 7350 7470 +7349 7470 7469 +7350 7351 7470 +7351 7471 7470 +7351 7352 7472 +7351 7472 7471 +7352 7353 7472 +7353 7473 7472 +7353 7354 7474 +7353 7474 7473 +7354 7355 7474 +7355 7475 7474 +7355 7356 7476 +7355 7476 7475 +7356 7357 7476 +7357 7477 7476 +7357 7358 7478 +7357 7478 7477 +7358 7359 7478 +7359 7479 7478 +7359 7360 7480 +7359 7480 7479 +7360 7361 7480 +7361 7481 7480 +7361 7362 7482 +7361 7482 7481 +7362 7363 7482 +7363 7483 7482 +7363 7364 7484 +7363 7484 7483 +7364 7365 7484 +7365 7485 7484 +7365 7366 7486 +7365 7486 7485 +7366 7367 7486 +7367 7487 7486 +7367 7368 7488 +7367 7488 7487 +7368 7369 7488 +7369 7489 7488 +7369 7370 7490 +7369 7490 7489 +7370 7371 7490 +7371 7491 7490 +7371 7372 7492 +7371 7492 7491 +7372 7373 7492 +7373 7493 7492 +7373 7374 7494 +7373 7494 7493 +7374 7375 7494 +7375 7495 7494 +7375 7376 7496 +7375 7496 7495 +7376 7377 7496 +7377 7497 7496 +7377 7378 7498 +7377 7498 7497 +7378 7379 7498 +7379 7499 7498 +7379 7380 7500 +7379 7500 7499 +7380 7381 7500 +7381 7501 7500 +7381 7382 7502 +7381 7502 7501 +7382 7383 7502 +7383 7503 7502 +7383 7384 7504 +7383 7504 7503 +7384 7385 7504 +7385 7505 7504 +7385 7386 7506 +7385 7506 7505 +7386 7387 7506 +7387 7507 7506 +7387 7388 7508 +7387 7508 7507 +7389 7390 7509 +7390 7510 7509 +7390 7391 7511 +7390 7511 7510 +7391 7392 7511 +7392 7512 7511 +7392 7393 7513 +7392 7513 7512 +7393 7394 7513 +7394 7514 7513 +7394 7395 7515 +7394 7515 7514 +7395 7396 7515 +7396 7516 7515 +7396 7397 7517 +7396 7517 7516 +7397 7398 7517 +7398 7518 7517 +7398 7399 7519 +7398 7519 7518 +7399 7400 7519 +7400 7520 7519 +7400 7401 7521 +7400 7521 7520 +7401 7402 7521 +7402 7522 7521 +7402 7403 7523 +7402 7523 7522 +7403 7404 7523 +7404 7524 7523 +7404 7405 7525 +7404 7525 7524 +7405 7406 7525 +7406 7526 7525 +7406 7407 7527 +7406 7527 7526 +7408 7409 7529 +7408 7529 7528 +7409 7410 7529 +7410 7530 7529 +7410 7411 7531 +7410 7531 7530 +7411 7412 7531 +7412 7532 7531 +7412 7413 7533 +7412 7533 7532 +7413 7414 7533 +7414 7534 7533 +7414 7415 7535 +7414 7535 7534 +7415 7416 7535 +7416 7536 7535 +7416 7417 7537 +7416 7537 7536 +7417 7418 7537 +7418 7538 7537 +7418 7419 7539 +7418 7539 7538 +7419 7420 7539 +7420 7540 7539 +7420 7421 7541 +7420 7541 7540 +7421 7422 7541 +7422 7542 7541 +7422 7423 7543 +7422 7543 7542 +7423 7424 7543 +7424 7544 7543 +7424 7425 7545 +7424 7545 7544 +7425 7426 7545 +7426 7546 7545 +7426 7427 7547 +7426 7547 7546 +7427 7428 7547 +7428 7548 7547 +7428 7429 7549 +7428 7549 7548 +7429 7430 7549 +7430 7550 7549 +7430 7431 7551 +7430 7551 7550 +7431 7432 7551 +7432 7552 7551 +7432 7433 7553 +7432 7553 7552 +7433 7434 7553 +7434 7554 7553 +7434 7435 7555 +7434 7555 7554 +7435 7436 7555 +7436 7556 7555 +7436 7437 7557 +7436 7557 7556 +7437 7438 7557 +7438 7558 7557 +7438 7439 7559 +7438 7559 7558 +7439 7440 7559 +7440 7560 7559 +7440 7441 7561 +7440 7561 7560 +7441 7442 7561 +7442 7562 7561 +7442 7443 7563 +7442 7563 7562 +7443 7444 7563 +7444 7564 7563 +7444 7445 7565 +7444 7565 7564 +7445 7446 7565 +7446 7566 7565 +7446 7447 7567 +7446 7567 7566 +7447 7448 7567 +7448 7568 7567 +7448 7449 7569 +7448 7569 7568 +7449 7450 7569 +7450 7570 7569 +7450 7451 7571 +7450 7571 7570 +7451 7452 7571 +7452 7572 7571 +7452 7453 7573 +7452 7573 7572 +7453 7454 7573 +7454 7574 7573 +7454 7455 7575 +7454 7575 7574 +7455 7456 7575 +7456 7576 7575 +7456 7457 7577 +7456 7577 7576 +7457 7458 7577 +7458 7578 7577 +7458 7459 7579 +7458 7579 7578 +7459 7460 7579 +7460 7580 7579 +7460 7461 7581 +7460 7581 7580 +7461 7462 7581 +7462 7582 7581 +7462 7463 7583 +7462 7583 7582 +7463 7464 7583 +7464 7584 7583 +7464 7465 7585 +7464 7585 7584 +7465 7466 7585 +7466 7586 7585 +7466 7467 7587 +7466 7587 7586 +7467 7468 7587 +7468 7588 7587 +7468 7469 7589 +7468 7589 7588 +7469 7470 7589 +7470 7590 7589 +7470 7471 7591 +7470 7591 7590 +7471 7472 7591 +7472 7592 7591 +7472 7473 7593 +7472 7593 7592 +7473 7474 7593 +7474 7594 7593 +7474 7475 7595 +7474 7595 7594 +7475 7476 7595 +7476 7596 7595 +7476 7477 7597 +7476 7597 7596 +7477 7478 7597 +7478 7598 7597 +7478 7479 7599 +7478 7599 7598 +7479 7480 7599 +7480 7600 7599 +7480 7481 7601 +7480 7601 7600 +7481 7482 7601 +7482 7602 7601 +7482 7483 7603 +7482 7603 7602 +7483 7484 7603 +7484 7604 7603 +7484 7485 7605 +7484 7605 7604 +7485 7486 7605 +7486 7606 7605 +7486 7487 7607 +7486 7607 7606 +7487 7488 7607 +7488 7608 7607 +7488 7489 7609 +7488 7609 7608 +7489 7490 7609 +7490 7610 7609 +7490 7491 7611 +7490 7611 7610 +7491 7492 7611 +7492 7612 7611 +7492 7493 7613 +7492 7613 7612 +7493 7494 7613 +7494 7614 7613 +7494 7495 7615 +7494 7615 7614 +7495 7496 7615 +7496 7616 7615 +7496 7497 7617 +7496 7617 7616 +7497 7498 7617 +7498 7618 7617 +7498 7499 7619 +7498 7619 7618 +7499 7500 7619 +7500 7620 7619 +7500 7501 7621 +7500 7621 7620 +7501 7502 7621 +7502 7622 7621 +7502 7503 7623 +7502 7623 7622 +7503 7504 7623 +7504 7624 7623 +7504 7505 7625 +7504 7625 7624 +7505 7506 7625 +7506 7626 7625 +7506 7507 7627 +7506 7627 7626 +7507 7508 7627 +7508 7628 7627 +7509 7510 7630 +7509 7630 7629 +7510 7511 7630 +7511 7631 7630 +7511 7512 7632 +7511 7632 7631 +7512 7513 7632 +7513 7633 7632 +7513 7514 7634 +7513 7634 7633 +7514 7515 7634 +7515 7635 7634 +7515 7516 7636 +7515 7636 7635 +7516 7517 7636 +7517 7637 7636 +7517 7518 7638 +7517 7638 7637 +7518 7519 7638 +7519 7639 7638 +7519 7520 7640 +7519 7640 7639 +7520 7521 7640 +7521 7641 7640 +7521 7522 7642 +7521 7642 7641 +7522 7523 7642 +7523 7643 7642 +7523 7524 7644 +7523 7644 7643 +7524 7525 7644 +7525 7645 7644 +7525 7526 7646 +7525 7646 7645 +7526 7527 7646 +7527 7647 7646 +7528 7529 7648 +7529 7649 7648 +7529 7530 7650 +7529 7650 7649 +7530 7531 7650 +7531 7651 7650 +7531 7532 7652 +7531 7652 7651 +7532 7533 7652 +7533 7653 7652 +7533 7534 7654 +7533 7654 7653 +7534 7535 7654 +7535 7655 7654 +7535 7536 7656 +7535 7656 7655 +7536 7537 7656 +7537 7657 7656 +7537 7538 7658 +7537 7658 7657 +7538 7539 7658 +7539 7659 7658 +7539 7540 7660 +7539 7660 7659 +7540 7541 7660 +7541 7661 7660 +7541 7542 7662 +7541 7662 7661 +7542 7543 7662 +7543 7663 7662 +7543 7544 7664 +7543 7664 7663 +7544 7545 7664 +7545 7665 7664 +7545 7546 7666 +7545 7666 7665 +7546 7547 7666 +7547 7667 7666 +7547 7548 7668 +7547 7668 7667 +7548 7549 7668 +7549 7669 7668 +7549 7550 7670 +7549 7670 7669 +7550 7551 7670 +7551 7671 7670 +7551 7552 7672 +7551 7672 7671 +7552 7553 7672 +7553 7673 7672 +7553 7554 7674 +7553 7674 7673 +7554 7555 7674 +7555 7675 7674 +7555 7556 7676 +7555 7676 7675 +7556 7557 7676 +7557 7677 7676 +7557 7558 7678 +7557 7678 7677 +7558 7559 7678 +7559 7679 7678 +7559 7560 7680 +7559 7680 7679 +7560 7561 7680 +7561 7681 7680 +7561 7562 7682 +7561 7682 7681 +7562 7563 7682 +7563 7683 7682 +7563 7564 7684 +7563 7684 7683 +7564 7565 7684 +7565 7685 7684 +7565 7566 7686 +7565 7686 7685 +7566 7567 7686 +7567 7687 7686 +7567 7568 7688 +7567 7688 7687 +7568 7569 7688 +7569 7689 7688 +7569 7570 7690 +7569 7690 7689 +7570 7571 7690 +7571 7691 7690 +7571 7572 7692 +7571 7692 7691 +7572 7573 7692 +7573 7693 7692 +7573 7574 7694 +7573 7694 7693 +7574 7575 7694 +7575 7695 7694 +7575 7576 7696 +7575 7696 7695 +7576 7577 7696 +7577 7697 7696 +7577 7578 7698 +7577 7698 7697 +7578 7579 7698 +7579 7699 7698 +7579 7580 7700 +7579 7700 7699 +7580 7581 7700 +7581 7701 7700 +7581 7582 7702 +7581 7702 7701 +7582 7583 7702 +7583 7703 7702 +7583 7584 7704 +7583 7704 7703 +7584 7585 7704 +7585 7705 7704 +7585 7586 7706 +7585 7706 7705 +7586 7587 7706 +7587 7707 7706 +7587 7588 7708 +7587 7708 7707 +7588 7589 7708 +7589 7709 7708 +7589 7590 7710 +7589 7710 7709 +7590 7591 7710 +7591 7711 7710 +7591 7592 7712 +7591 7712 7711 +7592 7593 7712 +7593 7713 7712 +7593 7594 7714 +7593 7714 7713 +7594 7595 7714 +7595 7715 7714 +7595 7596 7716 +7595 7716 7715 +7596 7597 7716 +7597 7717 7716 +7597 7598 7718 +7597 7718 7717 +7598 7599 7718 +7599 7719 7718 +7599 7600 7720 +7599 7720 7719 +7600 7601 7720 +7601 7721 7720 +7601 7602 7722 +7601 7722 7721 +7602 7603 7722 +7603 7723 7722 +7603 7604 7724 +7603 7724 7723 +7604 7605 7724 +7605 7725 7724 +7605 7606 7726 +7605 7726 7725 +7606 7607 7726 +7607 7727 7726 +7607 7608 7728 +7607 7728 7727 +7608 7609 7728 +7609 7729 7728 +7609 7610 7730 +7609 7730 7729 +7610 7611 7730 +7611 7731 7730 +7611 7612 7732 +7611 7732 7731 +7612 7613 7732 +7613 7733 7732 +7613 7614 7734 +7613 7734 7733 +7614 7615 7734 +7615 7735 7734 +7615 7616 7736 +7615 7736 7735 +7616 7617 7736 +7617 7737 7736 +7617 7618 7738 +7617 7738 7737 +7618 7619 7738 +7619 7739 7738 +7619 7620 7740 +7619 7740 7739 +7620 7621 7740 +7621 7741 7740 +7621 7622 7742 +7621 7742 7741 +7622 7623 7742 +7623 7743 7742 +7623 7624 7744 +7623 7744 7743 +7624 7625 7744 +7625 7745 7744 +7625 7626 7746 +7625 7746 7745 +7626 7627 7746 +7627 7747 7746 +7627 7628 7748 +7627 7748 7747 +7629 7630 7749 +7630 7750 7749 +7630 7631 7751 +7630 7751 7750 +7631 7632 7751 +7632 7752 7751 +7632 7633 7753 +7632 7753 7752 +7633 7634 7753 +7634 7754 7753 +7634 7635 7755 +7634 7755 7754 +7635 7636 7755 +7636 7756 7755 +7636 7637 7757 +7636 7757 7756 +7637 7638 7757 +7638 7758 7757 +7638 7639 7759 +7638 7759 7758 +7639 7640 7759 +7640 7760 7759 +7640 7641 7761 +7640 7761 7760 +7641 7642 7761 +7642 7762 7761 +7642 7643 7763 +7642 7763 7762 +7643 7644 7763 +7644 7764 7763 +7644 7645 7765 +7644 7765 7764 +7645 7646 7765 +7646 7766 7765 +7646 7647 7767 +7646 7767 7766 +7648 7649 7769 +7648 7769 7768 +7649 7650 7769 +7650 7770 7769 +7650 7651 7771 +7650 7771 7770 +7651 7652 7771 +7652 7772 7771 +7652 7653 7773 +7652 7773 7772 +7653 7654 7773 +7654 7774 7773 +7654 7655 7775 +7654 7775 7774 +7655 7656 7775 +7656 7776 7775 +7656 7657 7777 +7656 7777 7776 +7657 7658 7777 +7658 7778 7777 +7658 7659 7779 +7658 7779 7778 +7659 7660 7779 +7660 7780 7779 +7660 7661 7781 +7660 7781 7780 +7661 7662 7781 +7662 7782 7781 +7662 7663 7783 +7662 7783 7782 +7663 7664 7783 +7664 7784 7783 +7664 7665 7785 +7664 7785 7784 +7665 7666 7785 +7666 7786 7785 +7666 7667 7787 +7666 7787 7786 +7667 7668 7787 +7668 7788 7787 +7668 7669 7789 +7668 7789 7788 +7669 7670 7789 +7670 7790 7789 +7670 7671 7791 +7670 7791 7790 +7671 7672 7791 +7672 7792 7791 +7672 7673 7793 +7672 7793 7792 +7673 7674 7793 +7674 7794 7793 +7674 7675 7795 +7674 7795 7794 +7675 7676 7795 +7676 7796 7795 +7676 7677 7797 +7676 7797 7796 +7677 7678 7797 +7678 7798 7797 +7678 7679 7799 +7678 7799 7798 +7679 7680 7799 +7680 7800 7799 +7680 7681 7801 +7680 7801 7800 +7681 7682 7801 +7682 7802 7801 +7682 7683 7803 +7682 7803 7802 +7683 7684 7803 +7684 7804 7803 +7684 7685 7805 +7684 7805 7804 +7685 7686 7805 +7686 7806 7805 +7686 7687 7807 +7686 7807 7806 +7687 7688 7807 +7688 7808 7807 +7688 7689 7809 +7688 7809 7808 +7689 7690 7809 +7690 7810 7809 +7690 7691 7811 +7690 7811 7810 +7691 7692 7811 +7692 7812 7811 +7692 7693 7813 +7692 7813 7812 +7693 7694 7813 +7694 7814 7813 +7694 7695 7815 +7694 7815 7814 +7695 7696 7815 +7696 7816 7815 +7696 7697 7817 +7696 7817 7816 +7697 7698 7817 +7698 7818 7817 +7698 7699 7819 +7698 7819 7818 +7699 7700 7819 +7700 7820 7819 +7700 7701 7821 +7700 7821 7820 +7701 7702 7821 +7702 7822 7821 +7702 7703 7823 +7702 7823 7822 +7703 7704 7823 +7704 7824 7823 +7704 7705 7825 +7704 7825 7824 +7705 7706 7825 +7706 7826 7825 +7706 7707 7827 +7706 7827 7826 +7707 7708 7827 +7708 7828 7827 +7708 7709 7829 +7708 7829 7828 +7709 7710 7829 +7710 7830 7829 +7710 7711 7831 +7710 7831 7830 +7711 7712 7831 +7712 7832 7831 +7712 7713 7833 +7712 7833 7832 +7713 7714 7833 +7714 7834 7833 +7714 7715 7835 +7714 7835 7834 +7715 7716 7835 +7716 7836 7835 +7716 7717 7837 +7716 7837 7836 +7717 7718 7837 +7718 7838 7837 +7718 7719 7839 +7718 7839 7838 +7719 7720 7839 +7720 7840 7839 +7720 7721 7841 +7720 7841 7840 +7721 7722 7841 +7722 7842 7841 +7722 7723 7843 +7722 7843 7842 +7723 7724 7843 +7724 7844 7843 +7724 7725 7845 +7724 7845 7844 +7725 7726 7845 +7726 7846 7845 +7726 7727 7847 +7726 7847 7846 +7727 7728 7847 +7728 7848 7847 +7728 7729 7849 +7728 7849 7848 +7729 7730 7849 +7730 7850 7849 +7730 7731 7851 +7730 7851 7850 +7731 7732 7851 +7732 7852 7851 +7732 7733 7853 +7732 7853 7852 +7733 7734 7853 +7734 7854 7853 +7734 7735 7855 +7734 7855 7854 +7735 7736 7855 +7736 7856 7855 +7736 7737 7857 +7736 7857 7856 +7737 7738 7857 +7738 7858 7857 +7738 7739 7859 +7738 7859 7858 +7739 7740 7859 +7740 7860 7859 +7740 7741 7861 +7740 7861 7860 +7741 7742 7861 +7742 7862 7861 +7742 7743 7863 +7742 7863 7862 +7743 7744 7863 +7744 7864 7863 +7744 7745 7865 +7744 7865 7864 +7745 7746 7865 +7746 7866 7865 +7746 7747 7867 +7746 7867 7866 +7747 7748 7867 +7748 7868 7867 +7749 7750 7870 +7749 7870 7869 +7750 7751 7870 +7751 7871 7870 +7751 7752 7872 +7751 7872 7871 +7752 7753 7872 +7753 7873 7872 +7753 7754 7874 +7753 7874 7873 +7754 7755 7874 +7755 7875 7874 +7755 7756 7876 +7755 7876 7875 +7756 7757 7876 +7757 7877 7876 +7757 7758 7878 +7757 7878 7877 +7758 7759 7878 +7759 7879 7878 +7759 7760 7880 +7759 7880 7879 +7760 7761 7880 +7761 7881 7880 +7761 7762 7882 +7761 7882 7881 +7762 7763 7882 +7763 7883 7882 +7763 7764 7884 +7763 7884 7883 +7764 7765 7884 +7765 7885 7884 +7765 7766 7886 +7765 7886 7885 +7766 7767 7886 +7767 7887 7886 +7768 7769 7888 +7769 7889 7888 +7769 7770 7890 +7769 7890 7889 +7770 7771 7890 +7771 7891 7890 +7771 7772 7892 +7771 7892 7891 +7772 7773 7892 +7773 7893 7892 +7773 7774 7894 +7773 7894 7893 +7774 7775 7894 +7775 7895 7894 +7775 7776 7896 +7775 7896 7895 +7776 7777 7896 +7777 7897 7896 +7777 7778 7898 +7777 7898 7897 +7778 7779 7898 +7779 7899 7898 +7779 7780 7900 +7779 7900 7899 +7780 7781 7900 +7781 7901 7900 +7781 7782 7902 +7781 7902 7901 +7782 7783 7902 +7783 7903 7902 +7783 7784 7904 +7783 7904 7903 +7784 7785 7904 +7785 7905 7904 +7785 7786 7906 +7785 7906 7905 +7786 7787 7906 +7787 7907 7906 +7787 7788 7908 +7787 7908 7907 +7788 7789 7908 +7789 7909 7908 +7789 7790 7910 +7789 7910 7909 +7790 7791 7910 +7791 7911 7910 +7791 7792 7912 +7791 7912 7911 +7792 7793 7912 +7793 7913 7912 +7793 7794 7914 +7793 7914 7913 +7794 7795 7914 +7795 7915 7914 +7795 7796 7916 +7795 7916 7915 +7796 7797 7916 +7797 7917 7916 +7797 7798 7918 +7797 7918 7917 +7798 7799 7918 +7799 7919 7918 +7799 7800 7920 +7799 7920 7919 +7800 7801 7920 +7801 7921 7920 +7801 7802 7922 +7801 7922 7921 +7802 7803 7922 +7803 7923 7922 +7803 7804 7924 +7803 7924 7923 +7804 7805 7924 +7805 7925 7924 +7805 7806 7926 +7805 7926 7925 +7806 7807 7926 +7807 7927 7926 +7807 7808 7928 +7807 7928 7927 +7808 7809 7928 +7809 7929 7928 +7809 7810 7930 +7809 7930 7929 +7810 7811 7930 +7811 7931 7930 +7811 7812 7932 +7811 7932 7931 +7812 7813 7932 +7813 7933 7932 +7813 7814 7934 +7813 7934 7933 +7814 7815 7934 +7815 7935 7934 +7815 7816 7936 +7815 7936 7935 +7816 7817 7936 +7817 7937 7936 +7817 7818 7938 +7817 7938 7937 +7818 7819 7938 +7819 7939 7938 +7819 7820 7940 +7819 7940 7939 +7820 7821 7940 +7821 7941 7940 +7821 7822 7942 +7821 7942 7941 +7822 7823 7942 +7823 7943 7942 +7823 7824 7944 +7823 7944 7943 +7824 7825 7944 +7825 7945 7944 +7825 7826 7946 +7825 7946 7945 +7826 7827 7946 +7827 7947 7946 +7827 7828 7948 +7827 7948 7947 +7828 7829 7948 +7829 7949 7948 +7829 7830 7950 +7829 7950 7949 +7830 7831 7950 +7831 7951 7950 +7831 7832 7952 +7831 7952 7951 +7832 7833 7952 +7833 7953 7952 +7833 7834 7954 +7833 7954 7953 +7834 7835 7954 +7835 7955 7954 +7835 7836 7956 +7835 7956 7955 +7836 7837 7956 +7837 7957 7956 +7837 7838 7958 +7837 7958 7957 +7838 7839 7958 +7839 7959 7958 +7839 7840 7960 +7839 7960 7959 +7840 7841 7960 +7841 7961 7960 +7841 7842 7962 +7841 7962 7961 +7842 7843 7962 +7843 7963 7962 +7843 7844 7964 +7843 7964 7963 +7844 7845 7964 +7845 7965 7964 +7845 7846 7966 +7845 7966 7965 +7846 7847 7966 +7847 7967 7966 +7847 7848 7968 +7847 7968 7967 +7848 7849 7968 +7849 7969 7968 +7849 7850 7970 +7849 7970 7969 +7850 7851 7970 +7851 7971 7970 +7851 7852 7972 +7851 7972 7971 +7852 7853 7972 +7853 7973 7972 +7853 7854 7974 +7853 7974 7973 +7854 7855 7974 +7855 7975 7974 +7855 7856 7976 +7855 7976 7975 +7856 7857 7976 +7857 7977 7976 +7857 7858 7978 +7857 7978 7977 +7858 7859 7978 +7859 7979 7978 +7859 7860 7980 +7859 7980 7979 +7860 7861 7980 +7861 7981 7980 +7861 7862 7982 +7861 7982 7981 +7862 7863 7982 +7863 7983 7982 +7863 7864 7984 +7863 7984 7983 +7864 7865 7984 +7865 7985 7984 +7865 7866 7986 +7865 7986 7985 +7866 7867 7986 +7867 7987 7986 +7867 7868 7988 +7867 7988 7987 +7869 7870 7989 +7870 7990 7989 +7870 7871 7991 +7870 7991 7990 +7871 7872 7991 +7872 7992 7991 +7872 7873 7993 +7872 7993 7992 +7873 7874 7993 +7874 7994 7993 +7874 7875 7995 +7874 7995 7994 +7875 7876 7995 +7876 7996 7995 +7876 7877 7997 +7876 7997 7996 +7877 7878 7997 +7878 7998 7997 +7878 7879 7999 +7878 7999 7998 +7879 7880 7999 +7880 8000 7999 +7880 7881 8001 +7880 8001 8000 +7881 7882 8001 +7882 8002 8001 +7882 7883 8003 +7882 8003 8002 +7883 7884 8003 +7884 8004 8003 +7884 7885 8005 +7884 8005 8004 +7885 7886 8005 +7886 8006 8005 +7886 7887 8007 +7886 8007 8006 +7888 7889 8009 +7888 8009 8008 +7889 7890 8009 +7890 8010 8009 +7890 7891 8011 +7890 8011 8010 +7891 7892 8011 +7892 8012 8011 +7892 7893 8013 +7892 8013 8012 +7893 7894 8013 +7894 8014 8013 +7894 7895 8015 +7894 8015 8014 +7895 7896 8015 +7896 8016 8015 +7896 7897 8017 +7896 8017 8016 +7897 7898 8017 +7898 8018 8017 +7898 7899 8019 +7898 8019 8018 +7899 7900 8019 +7900 8020 8019 +7900 7901 8021 +7900 8021 8020 +7901 7902 8021 +7902 8022 8021 +7902 7903 8023 +7902 8023 8022 +7903 7904 8023 +7904 8024 8023 +7904 7905 8025 +7904 8025 8024 +7905 7906 8025 +7906 8026 8025 +7906 7907 8027 +7906 8027 8026 +7907 7908 8027 +7908 8028 8027 +7908 7909 8029 +7908 8029 8028 +7909 7910 8029 +7910 8030 8029 +7910 7911 8031 +7910 8031 8030 +7911 7912 8031 +7912 8032 8031 +7912 7913 8033 +7912 8033 8032 +7913 7914 8033 +7914 8034 8033 +7914 7915 8035 +7914 8035 8034 +7915 7916 8035 +7916 8036 8035 +7916 7917 8037 +7916 8037 8036 +7917 7918 8037 +7918 8038 8037 +7918 7919 8039 +7918 8039 8038 +7919 7920 8039 +7920 8040 8039 +7920 7921 8041 +7920 8041 8040 +7921 7922 8041 +7922 8042 8041 +7922 7923 8043 +7922 8043 8042 +7923 7924 8043 +7924 8044 8043 +7924 7925 8045 +7924 8045 8044 +7925 7926 8045 +7926 8046 8045 +7926 7927 8047 +7926 8047 8046 +7927 7928 8047 +7928 8048 8047 +7928 7929 8049 +7928 8049 8048 +7929 7930 8049 +7930 8050 8049 +7930 7931 8051 +7930 8051 8050 +7931 7932 8051 +7932 8052 8051 +7932 7933 8053 +7932 8053 8052 +7933 7934 8053 +7934 8054 8053 +7934 7935 8055 +7934 8055 8054 +7935 7936 8055 +7936 8056 8055 +7936 7937 8057 +7936 8057 8056 +7937 7938 8057 +7938 8058 8057 +7938 7939 8059 +7938 8059 8058 +7939 7940 8059 +7940 8060 8059 +7940 7941 8061 +7940 8061 8060 +7941 7942 8061 +7942 8062 8061 +7942 7943 8063 +7942 8063 8062 +7943 7944 8063 +7944 8064 8063 +7944 7945 8065 +7944 8065 8064 +7945 7946 8065 +7946 8066 8065 +7946 7947 8067 +7946 8067 8066 +7947 7948 8067 +7948 8068 8067 +7948 7949 8069 +7948 8069 8068 +7949 7950 8069 +7950 8070 8069 +7950 7951 8071 +7950 8071 8070 +7951 7952 8071 +7952 8072 8071 +7952 7953 8073 +7952 8073 8072 +7953 7954 8073 +7954 8074 8073 +7954 7955 8075 +7954 8075 8074 +7955 7956 8075 +7956 8076 8075 +7956 7957 8077 +7956 8077 8076 +7957 7958 8077 +7958 8078 8077 +7958 7959 8079 +7958 8079 8078 +7959 7960 8079 +7960 8080 8079 +7960 7961 8081 +7960 8081 8080 +7961 7962 8081 +7962 8082 8081 +7962 7963 8083 +7962 8083 8082 +7963 7964 8083 +7964 8084 8083 +7964 7965 8085 +7964 8085 8084 +7965 7966 8085 +7966 8086 8085 +7966 7967 8087 +7966 8087 8086 +7967 7968 8087 +7968 8088 8087 +7968 7969 8089 +7968 8089 8088 +7969 7970 8089 +7970 8090 8089 +7970 7971 8091 +7970 8091 8090 +7971 7972 8091 +7972 8092 8091 +7972 7973 8093 +7972 8093 8092 +7973 7974 8093 +7974 8094 8093 +7974 7975 8095 +7974 8095 8094 +7975 7976 8095 +7976 8096 8095 +7976 7977 8097 +7976 8097 8096 +7977 7978 8097 +7978 8098 8097 +7978 7979 8099 +7978 8099 8098 +7979 7980 8099 +7980 8100 8099 +7980 7981 8101 +7980 8101 8100 +7981 7982 8101 +7982 8102 8101 +7982 7983 8103 +7982 8103 8102 +7983 7984 8103 +7984 8104 8103 +7984 7985 8105 +7984 8105 8104 +7985 7986 8105 +7986 8106 8105 +7986 7987 8107 +7986 8107 8106 +7987 7988 8107 +7988 8108 8107 +7989 7990 8110 +7989 8110 8109 +7990 7991 8110 +7991 8111 8110 +7991 7992 8112 +7991 8112 8111 +7992 7993 8112 +7993 8113 8112 +7993 7994 8114 +7993 8114 8113 +7994 7995 8114 +7995 8115 8114 +7995 7996 8116 +7995 8116 8115 +7996 7997 8116 +7997 8117 8116 +7997 7998 8118 +7997 8118 8117 +7998 7999 8118 +7999 8119 8118 +7999 8000 8120 +7999 8120 8119 +8000 8001 8120 +8001 8121 8120 +8001 8002 8122 +8001 8122 8121 +8002 8003 8122 +8003 8123 8122 +8003 8004 8124 +8003 8124 8123 +8004 8005 8124 +8005 8125 8124 +8005 8006 8126 +8005 8126 8125 +8006 8007 8126 +8007 8127 8126 +8008 8009 8128 +8009 8129 8128 +8009 8010 8130 +8009 8130 8129 +8010 8011 8130 +8011 8131 8130 +8011 8012 8132 +8011 8132 8131 +8012 8013 8132 +8013 8133 8132 +8013 8014 8134 +8013 8134 8133 +8014 8015 8134 +8015 8135 8134 +8015 8016 8136 +8015 8136 8135 +8016 8017 8136 +8017 8137 8136 +8017 8018 8138 +8017 8138 8137 +8018 8019 8138 +8019 8139 8138 +8019 8020 8140 +8019 8140 8139 +8020 8021 8140 +8021 8141 8140 +8021 8022 8142 +8021 8142 8141 +8022 8023 8142 +8023 8143 8142 +8023 8024 8144 +8023 8144 8143 +8024 8025 8144 +8025 8145 8144 +8025 8026 8146 +8025 8146 8145 +8026 8027 8146 +8027 8147 8146 +8027 8028 8148 +8027 8148 8147 +8028 8029 8148 +8029 8149 8148 +8029 8030 8150 +8029 8150 8149 +8030 8031 8150 +8031 8151 8150 +8031 8032 8152 +8031 8152 8151 +8032 8033 8152 +8033 8153 8152 +8033 8034 8154 +8033 8154 8153 +8034 8035 8154 +8035 8155 8154 +8035 8036 8156 +8035 8156 8155 +8036 8037 8156 +8037 8157 8156 +8037 8038 8158 +8037 8158 8157 +8038 8039 8158 +8039 8159 8158 +8039 8040 8160 +8039 8160 8159 +8040 8041 8160 +8041 8161 8160 +8041 8042 8162 +8041 8162 8161 +8042 8043 8162 +8043 8163 8162 +8043 8044 8164 +8043 8164 8163 +8044 8045 8164 +8045 8165 8164 +8045 8046 8166 +8045 8166 8165 +8046 8047 8166 +8047 8167 8166 +8047 8048 8168 +8047 8168 8167 +8048 8049 8168 +8049 8169 8168 +8049 8050 8170 +8049 8170 8169 +8050 8051 8170 +8051 8171 8170 +8051 8052 8172 +8051 8172 8171 +8052 8053 8172 +8053 8173 8172 +8053 8054 8174 +8053 8174 8173 +8054 8055 8174 +8055 8175 8174 +8055 8056 8176 +8055 8176 8175 +8056 8057 8176 +8057 8177 8176 +8057 8058 8178 +8057 8178 8177 +8058 8059 8178 +8059 8179 8178 +8059 8060 8180 +8059 8180 8179 +8060 8061 8180 +8061 8181 8180 +8061 8062 8182 +8061 8182 8181 +8062 8063 8182 +8063 8183 8182 +8063 8064 8184 +8063 8184 8183 +8064 8065 8184 +8065 8185 8184 +8065 8066 8186 +8065 8186 8185 +8066 8067 8186 +8067 8187 8186 +8067 8068 8188 +8067 8188 8187 +8068 8069 8188 +8069 8189 8188 +8069 8070 8190 +8069 8190 8189 +8070 8071 8190 +8071 8191 8190 +8071 8072 8192 +8071 8192 8191 +8072 8073 8192 +8073 8193 8192 +8073 8074 8194 +8073 8194 8193 +8074 8075 8194 +8075 8195 8194 +8075 8076 8196 +8075 8196 8195 +8076 8077 8196 +8077 8197 8196 +8077 8078 8198 +8077 8198 8197 +8078 8079 8198 +8079 8199 8198 +8079 8080 8200 +8079 8200 8199 +8080 8081 8200 +8081 8201 8200 +8081 8082 8202 +8081 8202 8201 +8082 8083 8202 +8083 8203 8202 +8083 8084 8204 +8083 8204 8203 +8084 8085 8204 +8085 8205 8204 +8085 8086 8206 +8085 8206 8205 +8086 8087 8206 +8087 8207 8206 +8087 8088 8208 +8087 8208 8207 +8088 8089 8208 +8089 8209 8208 +8089 8090 8210 +8089 8210 8209 +8090 8091 8210 +8091 8211 8210 +8091 8092 8212 +8091 8212 8211 +8092 8093 8212 +8093 8213 8212 +8093 8094 8214 +8093 8214 8213 +8094 8095 8214 +8095 8215 8214 +8095 8096 8216 +8095 8216 8215 +8096 8097 8216 +8097 8217 8216 +8097 8098 8218 +8097 8218 8217 +8098 8099 8218 +8099 8219 8218 +8099 8100 8220 +8099 8220 8219 +8100 8101 8220 +8101 8221 8220 +8101 8102 8222 +8101 8222 8221 +8102 8103 8222 +8103 8223 8222 +8103 8104 8224 +8103 8224 8223 +8104 8105 8224 +8105 8225 8224 +8105 8106 8226 +8105 8226 8225 +8106 8107 8226 +8107 8227 8226 +8107 8108 8228 +8107 8228 8227 +8109 8110 8229 +8110 8230 8229 +8110 8111 8231 +8110 8231 8230 +8111 8112 8231 +8112 8232 8231 +8112 8113 8233 +8112 8233 8232 +8113 8114 8233 +8114 8234 8233 +8114 8115 8235 +8114 8235 8234 +8115 8116 8235 +8116 8236 8235 +8116 8117 8237 +8116 8237 8236 +8117 8118 8237 +8118 8238 8237 +8118 8119 8239 +8118 8239 8238 +8119 8120 8239 +8120 8240 8239 +8120 8121 8241 +8120 8241 8240 +8121 8122 8241 +8122 8242 8241 +8122 8123 8243 +8122 8243 8242 +8123 8124 8243 +8124 8244 8243 +8124 8125 8245 +8124 8245 8244 +8125 8126 8245 +8126 8246 8245 +8126 8127 8247 +8126 8247 8246 +8128 8129 8249 +8128 8249 8248 +8129 8130 8249 +8130 8250 8249 +8130 8131 8251 +8130 8251 8250 +8131 8132 8251 +8132 8252 8251 +8132 8133 8253 +8132 8253 8252 +8133 8134 8253 +8134 8254 8253 +8134 8135 8255 +8134 8255 8254 +8135 8136 8255 +8136 8256 8255 +8136 8137 8257 +8136 8257 8256 +8137 8138 8257 +8138 8258 8257 +8138 8139 8259 +8138 8259 8258 +8139 8140 8259 +8140 8260 8259 +8140 8141 8261 +8140 8261 8260 +8141 8142 8261 +8142 8262 8261 +8142 8143 8263 +8142 8263 8262 +8143 8144 8263 +8144 8264 8263 +8144 8145 8265 +8144 8265 8264 +8145 8146 8265 +8146 8266 8265 +8146 8147 8267 +8146 8267 8266 +8147 8148 8267 +8148 8268 8267 +8148 8149 8269 +8148 8269 8268 +8149 8150 8269 +8150 8270 8269 +8150 8151 8271 +8150 8271 8270 +8151 8152 8271 +8152 8272 8271 +8152 8153 8273 +8152 8273 8272 +8153 8154 8273 +8154 8274 8273 +8154 8155 8275 +8154 8275 8274 +8155 8156 8275 +8156 8276 8275 +8156 8157 8277 +8156 8277 8276 +8157 8158 8277 +8158 8278 8277 +8158 8159 8279 +8158 8279 8278 +8159 8160 8279 +8160 8280 8279 +8160 8161 8281 +8160 8281 8280 +8161 8162 8281 +8162 8282 8281 +8162 8163 8283 +8162 8283 8282 +8163 8164 8283 +8164 8284 8283 +8164 8165 8285 +8164 8285 8284 +8165 8166 8285 +8166 8286 8285 +8166 8167 8287 +8166 8287 8286 +8167 8168 8287 +8168 8288 8287 +8168 8169 8289 +8168 8289 8288 +8169 8170 8289 +8170 8290 8289 +8170 8171 8291 +8170 8291 8290 +8171 8172 8291 +8172 8292 8291 +8172 8173 8293 +8172 8293 8292 +8173 8174 8293 +8174 8294 8293 +8174 8175 8295 +8174 8295 8294 +8175 8176 8295 +8176 8296 8295 +8176 8177 8297 +8176 8297 8296 +8177 8178 8297 +8178 8298 8297 +8178 8179 8299 +8178 8299 8298 +8179 8180 8299 +8180 8300 8299 +8180 8181 8301 +8180 8301 8300 +8181 8182 8301 +8182 8302 8301 +8182 8183 8303 +8182 8303 8302 +8183 8184 8303 +8184 8304 8303 +8184 8185 8305 +8184 8305 8304 +8185 8186 8305 +8186 8306 8305 +8186 8187 8307 +8186 8307 8306 +8187 8188 8307 +8188 8308 8307 +8188 8189 8309 +8188 8309 8308 +8189 8190 8309 +8190 8310 8309 +8190 8191 8311 +8190 8311 8310 +8191 8192 8311 +8192 8312 8311 +8192 8193 8313 +8192 8313 8312 +8193 8194 8313 +8194 8314 8313 +8194 8195 8315 +8194 8315 8314 +8195 8196 8315 +8196 8316 8315 +8196 8197 8317 +8196 8317 8316 +8197 8198 8317 +8198 8318 8317 +8198 8199 8319 +8198 8319 8318 +8199 8200 8319 +8200 8320 8319 +8200 8201 8321 +8200 8321 8320 +8201 8202 8321 +8202 8322 8321 +8202 8203 8323 +8202 8323 8322 +8203 8204 8323 +8204 8324 8323 +8204 8205 8325 +8204 8325 8324 +8205 8206 8325 +8206 8326 8325 +8206 8207 8327 +8206 8327 8326 +8207 8208 8327 +8208 8328 8327 +8208 8209 8329 +8208 8329 8328 +8209 8210 8329 +8210 8330 8329 +8210 8211 8331 +8210 8331 8330 +8211 8212 8331 +8212 8332 8331 +8212 8213 8333 +8212 8333 8332 +8213 8214 8333 +8214 8334 8333 +8214 8215 8335 +8214 8335 8334 +8215 8216 8335 +8216 8336 8335 +8216 8217 8337 +8216 8337 8336 +8217 8218 8337 +8218 8338 8337 +8218 8219 8339 +8218 8339 8338 +8219 8220 8339 +8220 8340 8339 +8220 8221 8341 +8220 8341 8340 +8221 8222 8341 +8222 8342 8341 +8222 8223 8343 +8222 8343 8342 +8223 8224 8343 +8224 8344 8343 +8224 8225 8345 +8224 8345 8344 +8225 8226 8345 +8226 8346 8345 +8226 8227 8347 +8226 8347 8346 +8227 8228 8347 +8228 8348 8347 +8229 8230 8350 +8229 8350 8349 +8230 8231 8350 +8231 8351 8350 +8231 8232 8352 +8231 8352 8351 +8232 8233 8352 +8233 8353 8352 +8233 8234 8354 +8233 8354 8353 +8234 8235 8354 +8235 8355 8354 +8235 8236 8356 +8235 8356 8355 +8236 8237 8356 +8237 8357 8356 +8237 8238 8358 +8237 8358 8357 +8238 8239 8358 +8239 8359 8358 +8239 8240 8360 +8239 8360 8359 +8240 8241 8360 +8241 8361 8360 +8241 8242 8362 +8241 8362 8361 +8242 8243 8362 +8243 8363 8362 +8243 8244 8364 +8243 8364 8363 +8244 8245 8364 +8245 8365 8364 +8245 8246 8366 +8245 8366 8365 +8246 8247 8366 +8247 8367 8366 +8248 8249 8368 +8249 8369 8368 +8249 8250 8370 +8249 8370 8369 +8250 8251 8370 +8251 8371 8370 +8251 8252 8372 +8251 8372 8371 +8252 8253 8372 +8253 8373 8372 +8253 8254 8374 +8253 8374 8373 +8254 8255 8374 +8255 8375 8374 +8255 8256 8376 +8255 8376 8375 +8256 8257 8376 +8257 8377 8376 +8257 8258 8378 +8257 8378 8377 +8258 8259 8378 +8259 8379 8378 +8259 8260 8380 +8259 8380 8379 +8260 8261 8380 +8261 8381 8380 +8261 8262 8382 +8261 8382 8381 +8262 8263 8382 +8263 8383 8382 +8263 8264 8384 +8263 8384 8383 +8264 8265 8384 +8265 8385 8384 +8265 8266 8386 +8265 8386 8385 +8266 8267 8386 +8267 8387 8386 +8267 8268 8388 +8267 8388 8387 +8268 8269 8388 +8269 8389 8388 +8269 8270 8390 +8269 8390 8389 +8270 8271 8390 +8271 8391 8390 +8271 8272 8392 +8271 8392 8391 +8272 8273 8392 +8273 8393 8392 +8273 8274 8394 +8273 8394 8393 +8274 8275 8394 +8275 8395 8394 +8275 8276 8396 +8275 8396 8395 +8276 8277 8396 +8277 8397 8396 +8277 8278 8398 +8277 8398 8397 +8278 8279 8398 +8279 8399 8398 +8279 8280 8400 +8279 8400 8399 +8280 8281 8400 +8281 8401 8400 +8281 8282 8402 +8281 8402 8401 +8282 8283 8402 +8283 8403 8402 +8283 8284 8404 +8283 8404 8403 +8284 8285 8404 +8285 8405 8404 +8285 8286 8406 +8285 8406 8405 +8286 8287 8406 +8287 8407 8406 +8287 8288 8408 +8287 8408 8407 +8288 8289 8408 +8289 8409 8408 +8289 8290 8410 +8289 8410 8409 +8290 8291 8410 +8291 8411 8410 +8291 8292 8412 +8291 8412 8411 +8292 8293 8412 +8293 8413 8412 +8293 8294 8414 +8293 8414 8413 +8294 8295 8414 +8295 8415 8414 +8295 8296 8416 +8295 8416 8415 +8296 8297 8416 +8297 8417 8416 +8297 8298 8418 +8297 8418 8417 +8298 8299 8418 +8299 8419 8418 +8299 8300 8420 +8299 8420 8419 +8300 8301 8420 +8301 8421 8420 +8301 8302 8422 +8301 8422 8421 +8302 8303 8422 +8303 8423 8422 +8303 8304 8424 +8303 8424 8423 +8304 8305 8424 +8305 8425 8424 +8305 8306 8426 +8305 8426 8425 +8306 8307 8426 +8307 8427 8426 +8307 8308 8428 +8307 8428 8427 +8308 8309 8428 +8309 8429 8428 +8309 8310 8430 +8309 8430 8429 +8310 8311 8430 +8311 8431 8430 +8311 8312 8432 +8311 8432 8431 +8312 8313 8432 +8313 8433 8432 +8313 8314 8434 +8313 8434 8433 +8314 8315 8434 +8315 8435 8434 +8315 8316 8436 +8315 8436 8435 +8316 8317 8436 +8317 8437 8436 +8317 8318 8438 +8317 8438 8437 +8318 8319 8438 +8319 8439 8438 +8319 8320 8440 +8319 8440 8439 +8320 8321 8440 +8321 8441 8440 +8321 8322 8442 +8321 8442 8441 +8322 8323 8442 +8323 8443 8442 +8323 8324 8444 +8323 8444 8443 +8324 8325 8444 +8325 8445 8444 +8325 8326 8446 +8325 8446 8445 +8326 8327 8446 +8327 8447 8446 +8327 8328 8448 +8327 8448 8447 +8328 8329 8448 +8329 8449 8448 +8329 8330 8450 +8329 8450 8449 +8330 8331 8450 +8331 8451 8450 +8331 8332 8452 +8331 8452 8451 +8332 8333 8452 +8333 8453 8452 +8333 8334 8454 +8333 8454 8453 +8334 8335 8454 +8335 8455 8454 +8335 8336 8456 +8335 8456 8455 +8336 8337 8456 +8337 8457 8456 +8337 8338 8458 +8337 8458 8457 +8338 8339 8458 +8339 8459 8458 +8339 8340 8460 +8339 8460 8459 +8340 8341 8460 +8341 8461 8460 +8341 8342 8462 +8341 8462 8461 +8342 8343 8462 +8343 8463 8462 +8343 8344 8464 +8343 8464 8463 +8344 8345 8464 +8345 8465 8464 +8345 8346 8466 +8345 8466 8465 +8346 8347 8466 +8347 8467 8466 +8347 8348 8468 +8347 8468 8467 +8349 8350 8469 +8350 8470 8469 +8350 8351 8471 +8350 8471 8470 +8351 8352 8471 +8352 8472 8471 +8352 8353 8473 +8352 8473 8472 +8353 8354 8473 +8354 8474 8473 +8354 8355 8475 +8354 8475 8474 +8355 8356 8475 +8356 8476 8475 +8356 8357 8477 +8356 8477 8476 +8357 8358 8477 +8358 8478 8477 +8358 8359 8479 +8358 8479 8478 +8359 8360 8479 +8360 8480 8479 +8360 8361 8481 +8360 8481 8480 +8361 8362 8481 +8362 8482 8481 +8362 8363 8483 +8362 8483 8482 +8363 8364 8483 +8364 8484 8483 +8364 8365 8485 +8364 8485 8484 +8365 8366 8485 +8366 8486 8485 +8366 8367 8487 +8366 8487 8486 +8368 8369 8489 +8368 8489 8488 +8369 8370 8489 +8370 8490 8489 +8370 8371 8491 +8370 8491 8490 +8371 8372 8491 +8372 8492 8491 +8372 8373 8493 +8372 8493 8492 +8373 8374 8493 +8374 8494 8493 +8374 8375 8495 +8374 8495 8494 +8375 8376 8495 +8376 8496 8495 +8376 8377 8497 +8376 8497 8496 +8377 8378 8497 +8378 8498 8497 +8378 8379 8499 +8378 8499 8498 +8379 8380 8499 +8380 8500 8499 +8380 8381 8501 +8380 8501 8500 +8381 8382 8501 +8382 8502 8501 +8382 8383 8503 +8382 8503 8502 +8383 8384 8503 +8384 8504 8503 +8384 8385 8505 +8384 8505 8504 +8385 8386 8505 +8386 8506 8505 +8386 8387 8507 +8386 8507 8506 +8387 8388 8507 +8388 8508 8507 +8388 8389 8509 +8388 8509 8508 +8389 8390 8509 +8390 8510 8509 +8390 8391 8511 +8390 8511 8510 +8391 8392 8511 +8392 8512 8511 +8392 8393 8513 +8392 8513 8512 +8393 8394 8513 +8394 8514 8513 +8394 8395 8515 +8394 8515 8514 +8395 8396 8515 +8396 8516 8515 +8396 8397 8517 +8396 8517 8516 +8397 8398 8517 +8398 8518 8517 +8398 8399 8519 +8398 8519 8518 +8399 8400 8519 +8400 8520 8519 +8400 8401 8521 +8400 8521 8520 +8401 8402 8521 +8402 8522 8521 +8402 8403 8523 +8402 8523 8522 +8403 8404 8523 +8404 8524 8523 +8404 8405 8525 +8404 8525 8524 +8405 8406 8525 +8406 8526 8525 +8406 8407 8527 +8406 8527 8526 +8407 8408 8527 +8408 8528 8527 +8408 8409 8529 +8408 8529 8528 +8409 8410 8529 +8410 8530 8529 +8410 8411 8531 +8410 8531 8530 +8411 8412 8531 +8412 8532 8531 +8412 8413 8533 +8412 8533 8532 +8413 8414 8533 +8414 8534 8533 +8414 8415 8535 +8414 8535 8534 +8415 8416 8535 +8416 8536 8535 +8416 8417 8537 +8416 8537 8536 +8417 8418 8537 +8418 8538 8537 +8418 8419 8539 +8418 8539 8538 +8419 8420 8539 +8420 8540 8539 +8420 8421 8541 +8420 8541 8540 +8421 8422 8541 +8422 8542 8541 +8422 8423 8543 +8422 8543 8542 +8423 8424 8543 +8424 8544 8543 +8424 8425 8545 +8424 8545 8544 +8425 8426 8545 +8426 8546 8545 +8426 8427 8547 +8426 8547 8546 +8427 8428 8547 +8428 8548 8547 +8428 8429 8549 +8428 8549 8548 +8429 8430 8549 +8430 8550 8549 +8430 8431 8551 +8430 8551 8550 +8431 8432 8551 +8432 8552 8551 +8432 8433 8553 +8432 8553 8552 +8433 8434 8553 +8434 8554 8553 +8434 8435 8555 +8434 8555 8554 +8435 8436 8555 +8436 8556 8555 +8436 8437 8557 +8436 8557 8556 +8437 8438 8557 +8438 8558 8557 +8438 8439 8559 +8438 8559 8558 +8439 8440 8559 +8440 8560 8559 +8440 8441 8561 +8440 8561 8560 +8441 8442 8561 +8442 8562 8561 +8442 8443 8563 +8442 8563 8562 +8443 8444 8563 +8444 8564 8563 +8444 8445 8565 +8444 8565 8564 +8445 8446 8565 +8446 8566 8565 +8446 8447 8567 +8446 8567 8566 +8447 8448 8567 +8448 8568 8567 +8448 8449 8569 +8448 8569 8568 +8449 8450 8569 +8450 8570 8569 +8450 8451 8571 +8450 8571 8570 +8451 8452 8571 +8452 8572 8571 +8452 8453 8573 +8452 8573 8572 +8453 8454 8573 +8454 8574 8573 +8454 8455 8575 +8454 8575 8574 +8455 8456 8575 +8456 8576 8575 +8456 8457 8577 +8456 8577 8576 +8457 8458 8577 +8458 8578 8577 +8458 8459 8579 +8458 8579 8578 +8459 8460 8579 +8460 8580 8579 +8460 8461 8581 +8460 8581 8580 +8461 8462 8581 +8462 8582 8581 +8462 8463 8583 +8462 8583 8582 +8463 8464 8583 +8464 8584 8583 +8464 8465 8585 +8464 8585 8584 +8465 8466 8585 +8466 8586 8585 +8466 8467 8587 +8466 8587 8586 +8467 8468 8587 +8468 8588 8587 +8469 8470 8590 +8469 8590 8589 +8470 8471 8590 +8471 8591 8590 +8471 8472 8592 +8471 8592 8591 +8472 8473 8592 +8473 8593 8592 +8473 8474 8594 +8473 8594 8593 +8474 8475 8594 +8475 8595 8594 +8475 8476 8596 +8475 8596 8595 +8476 8477 8596 +8477 8597 8596 +8477 8478 8598 +8477 8598 8597 +8478 8479 8598 +8479 8599 8598 +8479 8480 8600 +8479 8600 8599 +8480 8481 8600 +8481 8601 8600 +8481 8482 8602 +8481 8602 8601 +8482 8483 8602 +8483 8603 8602 +8483 8484 8604 +8483 8604 8603 +8484 8485 8604 +8485 8605 8604 +8485 8486 8606 +8485 8606 8605 +8486 8487 8606 +8487 8607 8606 +8488 8489 8608 +8489 8609 8608 +8489 8490 8610 +8489 8610 8609 +8490 8491 8610 +8491 8611 8610 +8491 8492 8612 +8491 8612 8611 +8492 8493 8612 +8493 8613 8612 +8493 8494 8614 +8493 8614 8613 +8494 8495 8614 +8495 8615 8614 +8495 8496 8616 +8495 8616 8615 +8496 8497 8616 +8497 8617 8616 +8497 8498 8618 +8497 8618 8617 +8498 8499 8618 +8499 8619 8618 +8499 8500 8620 +8499 8620 8619 +8500 8501 8620 +8501 8621 8620 +8501 8502 8622 +8501 8622 8621 +8502 8503 8622 +8503 8623 8622 +8503 8504 8624 +8503 8624 8623 +8504 8505 8624 +8505 8625 8624 +8505 8506 8626 +8505 8626 8625 +8506 8507 8626 +8507 8627 8626 +8507 8508 8628 +8507 8628 8627 +8508 8509 8628 +8509 8629 8628 +8509 8510 8630 +8509 8630 8629 +8510 8511 8630 +8511 8631 8630 +8511 8512 8632 +8511 8632 8631 +8512 8513 8632 +8513 8633 8632 +8513 8514 8634 +8513 8634 8633 +8514 8515 8634 +8515 8635 8634 +8515 8516 8636 +8515 8636 8635 +8516 8517 8636 +8517 8637 8636 +8517 8518 8638 +8517 8638 8637 +8518 8519 8638 +8519 8639 8638 +8519 8520 8640 +8519 8640 8639 +8520 8521 8640 +8521 8641 8640 +8521 8522 8642 +8521 8642 8641 +8522 8523 8642 +8523 8643 8642 +8523 8524 8644 +8523 8644 8643 +8524 8525 8644 +8525 8645 8644 +8525 8526 8646 +8525 8646 8645 +8526 8527 8646 +8527 8647 8646 +8527 8528 8648 +8527 8648 8647 +8528 8529 8648 +8529 8649 8648 +8529 8530 8650 +8529 8650 8649 +8530 8531 8650 +8531 8651 8650 +8531 8532 8652 +8531 8652 8651 +8532 8533 8652 +8533 8653 8652 +8533 8534 8654 +8533 8654 8653 +8534 8535 8654 +8535 8655 8654 +8535 8536 8656 +8535 8656 8655 +8536 8537 8656 +8537 8657 8656 +8537 8538 8658 +8537 8658 8657 +8538 8539 8658 +8539 8659 8658 +8539 8540 8660 +8539 8660 8659 +8540 8541 8660 +8541 8661 8660 +8541 8542 8662 +8541 8662 8661 +8542 8543 8662 +8543 8663 8662 +8543 8544 8664 +8543 8664 8663 +8544 8545 8664 +8545 8665 8664 +8545 8546 8666 +8545 8666 8665 +8546 8547 8666 +8547 8667 8666 +8547 8548 8668 +8547 8668 8667 +8548 8549 8668 +8549 8669 8668 +8549 8550 8670 +8549 8670 8669 +8550 8551 8670 +8551 8671 8670 +8551 8552 8672 +8551 8672 8671 +8552 8553 8672 +8553 8673 8672 +8553 8554 8674 +8553 8674 8673 +8554 8555 8674 +8555 8675 8674 +8555 8556 8676 +8555 8676 8675 +8556 8557 8676 +8557 8677 8676 +8557 8558 8678 +8557 8678 8677 +8558 8559 8678 +8559 8679 8678 +8559 8560 8680 +8559 8680 8679 +8560 8561 8680 +8561 8681 8680 +8561 8562 8682 +8561 8682 8681 +8562 8563 8682 +8563 8683 8682 +8563 8564 8684 +8563 8684 8683 +8564 8565 8684 +8565 8685 8684 +8565 8566 8686 +8565 8686 8685 +8566 8567 8686 +8567 8687 8686 +8567 8568 8688 +8567 8688 8687 +8568 8569 8688 +8569 8689 8688 +8569 8570 8690 +8569 8690 8689 +8570 8571 8690 +8571 8691 8690 +8571 8572 8692 +8571 8692 8691 +8572 8573 8692 +8573 8693 8692 +8573 8574 8694 +8573 8694 8693 +8574 8575 8694 +8575 8695 8694 +8575 8576 8696 +8575 8696 8695 +8576 8577 8696 +8577 8697 8696 +8577 8578 8698 +8577 8698 8697 +8578 8579 8698 +8579 8699 8698 +8579 8580 8700 +8579 8700 8699 +8580 8581 8700 +8581 8701 8700 +8581 8582 8702 +8581 8702 8701 +8582 8583 8702 +8583 8703 8702 +8583 8584 8704 +8583 8704 8703 +8584 8585 8704 +8585 8705 8704 +8585 8586 8706 +8585 8706 8705 +8586 8587 8706 +8587 8707 8706 +8587 8588 8708 +8587 8708 8707 +8589 8590 8709 +8590 8710 8709 +8590 8591 8711 +8590 8711 8710 +8591 8592 8711 +8592 8712 8711 +8592 8593 8713 +8592 8713 8712 +8593 8594 8713 +8594 8714 8713 +8594 8595 8715 +8594 8715 8714 +8595 8596 8715 +8596 8716 8715 +8596 8597 8717 +8596 8717 8716 +8597 8598 8717 +8598 8718 8717 +8598 8599 8719 +8598 8719 8718 +8599 8600 8719 +8600 8720 8719 +8600 8601 8721 +8600 8721 8720 +8601 8602 8721 +8602 8722 8721 +8602 8603 8723 +8602 8723 8722 +8603 8604 8723 +8604 8724 8723 +8604 8605 8725 +8604 8725 8724 +8605 8606 8725 +8606 8726 8725 +8606 8607 8727 +8606 8727 8726 +8608 8609 8729 +8608 8729 8728 +8609 8610 8729 +8610 8730 8729 +8610 8611 8731 +8610 8731 8730 +8611 8612 8731 +8612 8732 8731 +8612 8613 8733 +8612 8733 8732 +8613 8614 8733 +8614 8734 8733 +8614 8615 8735 +8614 8735 8734 +8615 8616 8735 +8616 8736 8735 +8616 8617 8737 +8616 8737 8736 +8617 8618 8737 +8618 8738 8737 +8618 8619 8739 +8618 8739 8738 +8619 8620 8739 +8620 8740 8739 +8620 8621 8741 +8620 8741 8740 +8621 8622 8741 +8622 8742 8741 +8622 8623 8743 +8622 8743 8742 +8623 8624 8743 +8624 8744 8743 +8624 8625 8745 +8624 8745 8744 +8625 8626 8745 +8626 8746 8745 +8626 8627 8747 +8626 8747 8746 +8627 8628 8747 +8628 8748 8747 +8628 8629 8749 +8628 8749 8748 +8629 8630 8749 +8630 8750 8749 +8630 8631 8751 +8630 8751 8750 +8631 8632 8751 +8632 8752 8751 +8632 8633 8753 +8632 8753 8752 +8633 8634 8753 +8634 8754 8753 +8634 8635 8755 +8634 8755 8754 +8635 8636 8755 +8636 8756 8755 +8636 8637 8757 +8636 8757 8756 +8637 8638 8757 +8638 8758 8757 +8638 8639 8759 +8638 8759 8758 +8639 8640 8759 +8640 8760 8759 +8640 8641 8761 +8640 8761 8760 +8641 8642 8761 +8642 8762 8761 +8642 8643 8763 +8642 8763 8762 +8643 8644 8763 +8644 8764 8763 +8644 8645 8765 +8644 8765 8764 +8645 8646 8765 +8646 8766 8765 +8646 8647 8767 +8646 8767 8766 +8647 8648 8767 +8648 8768 8767 +8648 8649 8769 +8648 8769 8768 +8649 8650 8769 +8650 8770 8769 +8650 8651 8771 +8650 8771 8770 +8651 8652 8771 +8652 8772 8771 +8652 8653 8773 +8652 8773 8772 +8653 8654 8773 +8654 8774 8773 +8654 8655 8775 +8654 8775 8774 +8655 8656 8775 +8656 8776 8775 +8656 8657 8777 +8656 8777 8776 +8657 8658 8777 +8658 8778 8777 +8658 8659 8779 +8658 8779 8778 +8659 8660 8779 +8660 8780 8779 +8660 8661 8781 +8660 8781 8780 +8661 8662 8781 +8662 8782 8781 +8662 8663 8783 +8662 8783 8782 +8663 8664 8783 +8664 8784 8783 +8664 8665 8785 +8664 8785 8784 +8665 8666 8785 +8666 8786 8785 +8666 8667 8787 +8666 8787 8786 +8667 8668 8787 +8668 8788 8787 +8668 8669 8789 +8668 8789 8788 +8669 8670 8789 +8670 8790 8789 +8670 8671 8791 +8670 8791 8790 +8671 8672 8791 +8672 8792 8791 +8672 8673 8793 +8672 8793 8792 +8673 8674 8793 +8674 8794 8793 +8674 8675 8795 +8674 8795 8794 +8675 8676 8795 +8676 8796 8795 +8676 8677 8797 +8676 8797 8796 +8677 8678 8797 +8678 8798 8797 +8678 8679 8799 +8678 8799 8798 +8679 8680 8799 +8680 8800 8799 +8680 8681 8801 +8680 8801 8800 +8681 8682 8801 +8682 8802 8801 +8682 8683 8803 +8682 8803 8802 +8683 8684 8803 +8684 8804 8803 +8684 8685 8805 +8684 8805 8804 +8685 8686 8805 +8686 8806 8805 +8686 8687 8807 +8686 8807 8806 +8687 8688 8807 +8688 8808 8807 +8688 8689 8809 +8688 8809 8808 +8689 8690 8809 +8690 8810 8809 +8690 8691 8811 +8690 8811 8810 +8691 8692 8811 +8692 8812 8811 +8692 8693 8813 +8692 8813 8812 +8693 8694 8813 +8694 8814 8813 +8694 8695 8815 +8694 8815 8814 +8695 8696 8815 +8696 8816 8815 +8696 8697 8817 +8696 8817 8816 +8697 8698 8817 +8698 8818 8817 +8698 8699 8819 +8698 8819 8818 +8699 8700 8819 +8700 8820 8819 +8700 8701 8821 +8700 8821 8820 +8701 8702 8821 +8702 8822 8821 +8702 8703 8823 +8702 8823 8822 +8703 8704 8823 +8704 8824 8823 +8704 8705 8825 +8704 8825 8824 +8705 8706 8825 +8706 8826 8825 +8706 8707 8827 +8706 8827 8826 +8707 8708 8827 +8708 8828 8827 +8709 8710 8830 +8709 8830 8829 +8710 8711 8830 +8711 8831 8830 +8711 8712 8832 +8711 8832 8831 +8712 8713 8832 +8713 8833 8832 +8713 8714 8834 +8713 8834 8833 +8714 8715 8834 +8715 8835 8834 +8715 8716 8836 +8715 8836 8835 +8716 8717 8836 +8717 8837 8836 +8717 8718 8838 +8717 8838 8837 +8718 8719 8838 +8719 8839 8838 +8719 8720 8840 +8719 8840 8839 +8720 8721 8840 +8721 8841 8840 +8721 8722 8842 +8721 8842 8841 +8722 8723 8842 +8723 8843 8842 +8723 8724 8844 +8723 8844 8843 +8724 8725 8844 +8725 8845 8844 +8725 8726 8846 +8725 8846 8845 +8726 8727 8846 +8727 8847 8846 +8728 8729 8848 +8729 8849 8848 +8729 8730 8850 +8729 8850 8849 +8730 8731 8850 +8731 8851 8850 +8731 8732 8852 +8731 8852 8851 +8732 8733 8852 +8733 8853 8852 +8733 8734 8854 +8733 8854 8853 +8734 8735 8854 +8735 8855 8854 +8735 8736 8856 +8735 8856 8855 +8736 8737 8856 +8737 8857 8856 +8737 8738 8858 +8737 8858 8857 +8738 8739 8858 +8739 8859 8858 +8739 8740 8860 +8739 8860 8859 +8740 8741 8860 +8741 8861 8860 +8741 8742 8862 +8741 8862 8861 +8742 8743 8862 +8743 8863 8862 +8743 8744 8864 +8743 8864 8863 +8744 8745 8864 +8745 8865 8864 +8745 8746 8866 +8745 8866 8865 +8746 8747 8866 +8747 8867 8866 +8747 8748 8868 +8747 8868 8867 +8748 8749 8868 +8749 8869 8868 +8749 8750 8870 +8749 8870 8869 +8750 8751 8870 +8751 8871 8870 +8751 8752 8872 +8751 8872 8871 +8752 8753 8872 +8753 8873 8872 +8753 8754 8874 +8753 8874 8873 +8754 8755 8874 +8755 8875 8874 +8755 8756 8876 +8755 8876 8875 +8756 8757 8876 +8757 8877 8876 +8757 8758 8878 +8757 8878 8877 +8758 8759 8878 +8759 8879 8878 +8759 8760 8880 +8759 8880 8879 +8760 8761 8880 +8761 8881 8880 +8761 8762 8882 +8761 8882 8881 +8762 8763 8882 +8763 8883 8882 +8763 8764 8884 +8763 8884 8883 +8764 8765 8884 +8765 8885 8884 +8765 8766 8886 +8765 8886 8885 +8766 8767 8886 +8767 8887 8886 +8767 8768 8888 +8767 8888 8887 +8768 8769 8888 +8769 8889 8888 +8769 8770 8890 +8769 8890 8889 +8770 8771 8890 +8771 8891 8890 +8771 8772 8892 +8771 8892 8891 +8772 8773 8892 +8773 8893 8892 +8773 8774 8894 +8773 8894 8893 +8774 8775 8894 +8775 8895 8894 +8775 8776 8896 +8775 8896 8895 +8776 8777 8896 +8777 8897 8896 +8777 8778 8898 +8777 8898 8897 +8778 8779 8898 +8779 8899 8898 +8779 8780 8900 +8779 8900 8899 +8780 8781 8900 +8781 8901 8900 +8781 8782 8902 +8781 8902 8901 +8782 8783 8902 +8783 8903 8902 +8783 8784 8904 +8783 8904 8903 +8784 8785 8904 +8785 8905 8904 +8785 8786 8906 +8785 8906 8905 +8786 8787 8906 +8787 8907 8906 +8787 8788 8908 +8787 8908 8907 +8788 8789 8908 +8789 8909 8908 +8789 8790 8910 +8789 8910 8909 +8790 8791 8910 +8791 8911 8910 +8791 8792 8912 +8791 8912 8911 +8792 8793 8912 +8793 8913 8912 +8793 8794 8914 +8793 8914 8913 +8794 8795 8914 +8795 8915 8914 +8795 8796 8916 +8795 8916 8915 +8796 8797 8916 +8797 8917 8916 +8797 8798 8918 +8797 8918 8917 +8798 8799 8918 +8799 8919 8918 +8799 8800 8920 +8799 8920 8919 +8800 8801 8920 +8801 8921 8920 +8801 8802 8922 +8801 8922 8921 +8802 8803 8922 +8803 8923 8922 +8803 8804 8924 +8803 8924 8923 +8804 8805 8924 +8805 8925 8924 +8805 8806 8926 +8805 8926 8925 +8806 8807 8926 +8807 8927 8926 +8807 8808 8928 +8807 8928 8927 +8808 8809 8928 +8809 8929 8928 +8809 8810 8930 +8809 8930 8929 +8810 8811 8930 +8811 8931 8930 +8811 8812 8932 +8811 8932 8931 +8812 8813 8932 +8813 8933 8932 +8813 8814 8934 +8813 8934 8933 +8814 8815 8934 +8815 8935 8934 +8815 8816 8936 +8815 8936 8935 +8816 8817 8936 +8817 8937 8936 +8817 8818 8938 +8817 8938 8937 +8818 8819 8938 +8819 8939 8938 +8819 8820 8940 +8819 8940 8939 +8820 8821 8940 +8821 8941 8940 +8821 8822 8942 +8821 8942 8941 +8822 8823 8942 +8823 8943 8942 +8823 8824 8944 +8823 8944 8943 +8824 8825 8944 +8825 8945 8944 +8825 8826 8946 +8825 8946 8945 +8826 8827 8946 +8827 8947 8946 +8827 8828 8948 +8827 8948 8947 +8829 8830 8949 +8830 8950 8949 +8830 8831 8951 +8830 8951 8950 +8831 8832 8951 +8832 8952 8951 +8832 8833 8953 +8832 8953 8952 +8833 8834 8953 +8834 8954 8953 +8834 8835 8955 +8834 8955 8954 +8835 8836 8955 +8836 8956 8955 +8836 8837 8957 +8836 8957 8956 +8837 8838 8957 +8838 8958 8957 +8838 8839 8959 +8838 8959 8958 +8839 8840 8959 +8840 8960 8959 +8840 8841 8961 +8840 8961 8960 +8841 8842 8961 +8842 8962 8961 +8842 8843 8963 +8842 8963 8962 +8843 8844 8963 +8844 8964 8963 +8844 8845 8965 +8844 8965 8964 +8845 8846 8965 +8846 8966 8965 +8846 8847 8967 +8846 8967 8966 +8848 8849 8969 +8848 8969 8968 +8849 8850 8969 +8850 8970 8969 +8850 8851 8971 +8850 8971 8970 +8851 8852 8971 +8852 8972 8971 +8852 8853 8973 +8852 8973 8972 +8853 8854 8973 +8854 8974 8973 +8854 8855 8975 +8854 8975 8974 +8855 8856 8975 +8856 8976 8975 +8856 8857 8977 +8856 8977 8976 +8857 8858 8977 +8858 8978 8977 +8858 8859 8979 +8858 8979 8978 +8859 8860 8979 +8860 8980 8979 +8860 8861 8981 +8860 8981 8980 +8861 8862 8981 +8862 8982 8981 +8862 8863 8983 +8862 8983 8982 +8863 8864 8983 +8864 8984 8983 +8864 8865 8985 +8864 8985 8984 +8865 8866 8985 +8866 8986 8985 +8866 8867 8987 +8866 8987 8986 +8867 8868 8987 +8868 8988 8987 +8868 8869 8989 +8868 8989 8988 +8869 8870 8989 +8870 8990 8989 +8870 8871 8991 +8870 8991 8990 +8871 8872 8991 +8872 8992 8991 +8872 8873 8993 +8872 8993 8992 +8873 8874 8993 +8874 8994 8993 +8874 8875 8995 +8874 8995 8994 +8875 8876 8995 +8876 8996 8995 +8876 8877 8997 +8876 8997 8996 +8877 8878 8997 +8878 8998 8997 +8878 8879 8999 +8878 8999 8998 +8879 8880 8999 +8880 9000 8999 +8880 8881 9001 +8880 9001 9000 +8881 8882 9001 +8882 9002 9001 +8882 8883 9003 +8882 9003 9002 +8883 8884 9003 +8884 9004 9003 +8884 8885 9005 +8884 9005 9004 +8885 8886 9005 +8886 9006 9005 +8886 8887 9007 +8886 9007 9006 +8887 8888 9007 +8888 9008 9007 +8888 8889 9009 +8888 9009 9008 +8889 8890 9009 +8890 9010 9009 +8890 8891 9011 +8890 9011 9010 +8891 8892 9011 +8892 9012 9011 +8892 8893 9013 +8892 9013 9012 +8893 8894 9013 +8894 9014 9013 +8894 8895 9015 +8894 9015 9014 +8895 8896 9015 +8896 9016 9015 +8896 8897 9017 +8896 9017 9016 +8897 8898 9017 +8898 9018 9017 +8898 8899 9019 +8898 9019 9018 +8899 8900 9019 +8900 9020 9019 +8900 8901 9021 +8900 9021 9020 +8901 8902 9021 +8902 9022 9021 +8902 8903 9023 +8902 9023 9022 +8903 8904 9023 +8904 9024 9023 +8904 8905 9025 +8904 9025 9024 +8905 8906 9025 +8906 9026 9025 +8906 8907 9027 +8906 9027 9026 +8907 8908 9027 +8908 9028 9027 +8908 8909 9029 +8908 9029 9028 +8909 8910 9029 +8910 9030 9029 +8910 8911 9031 +8910 9031 9030 +8911 8912 9031 +8912 9032 9031 +8912 8913 9033 +8912 9033 9032 +8913 8914 9033 +8914 9034 9033 +8914 8915 9035 +8914 9035 9034 +8915 8916 9035 +8916 9036 9035 +8916 8917 9037 +8916 9037 9036 +8917 8918 9037 +8918 9038 9037 +8918 8919 9039 +8918 9039 9038 +8919 8920 9039 +8920 9040 9039 +8920 8921 9041 +8920 9041 9040 +8921 8922 9041 +8922 9042 9041 +8922 8923 9043 +8922 9043 9042 +8923 8924 9043 +8924 9044 9043 +8924 8925 9045 +8924 9045 9044 +8925 8926 9045 +8926 9046 9045 +8926 8927 9047 +8926 9047 9046 +8927 8928 9047 +8928 9048 9047 +8928 8929 9049 +8928 9049 9048 +8929 8930 9049 +8930 9050 9049 +8930 8931 9051 +8930 9051 9050 +8931 8932 9051 +8932 9052 9051 +8932 8933 9053 +8932 9053 9052 +8933 8934 9053 +8934 9054 9053 +8934 8935 9055 +8934 9055 9054 +8935 8936 9055 +8936 9056 9055 +8936 8937 9057 +8936 9057 9056 +8937 8938 9057 +8938 9058 9057 +8938 8939 9059 +8938 9059 9058 +8939 8940 9059 +8940 9060 9059 +8940 8941 9061 +8940 9061 9060 +8941 8942 9061 +8942 9062 9061 +8942 8943 9063 +8942 9063 9062 +8943 8944 9063 +8944 9064 9063 +8944 8945 9065 +8944 9065 9064 +8945 8946 9065 +8946 9066 9065 +8946 8947 9067 +8946 9067 9066 +8947 8948 9067 +8948 9068 9067 +8949 8950 9070 +8949 9070 9069 +8950 8951 9070 +8951 9071 9070 +8951 8952 9072 +8951 9072 9071 +8952 8953 9072 +8953 9073 9072 +8953 8954 9074 +8953 9074 9073 +8954 8955 9074 +8955 9075 9074 +8955 8956 9076 +8955 9076 9075 +8956 8957 9076 +8957 9077 9076 +8957 8958 9078 +8957 9078 9077 +8958 8959 9078 +8959 9079 9078 +8959 8960 9080 +8959 9080 9079 +8960 8961 9080 +8961 9081 9080 +8961 8962 9082 +8961 9082 9081 +8962 8963 9082 +8963 9083 9082 +8963 8964 9084 +8963 9084 9083 +8964 8965 9084 +8965 9085 9084 +8965 8966 9086 +8965 9086 9085 +8966 8967 9086 +8967 9087 9086 +8968 8969 9088 +8969 9089 9088 +8969 8970 9090 +8969 9090 9089 +8970 8971 9090 +8971 9091 9090 +8971 8972 9092 +8971 9092 9091 +8972 8973 9092 +8973 9093 9092 +8973 8974 9094 +8973 9094 9093 +8974 8975 9094 +8975 9095 9094 +8975 8976 9096 +8975 9096 9095 +8976 8977 9096 +8977 9097 9096 +8977 8978 9098 +8977 9098 9097 +8978 8979 9098 +8979 9099 9098 +8979 8980 9100 +8979 9100 9099 +8980 8981 9100 +8981 9101 9100 +8981 8982 9102 +8981 9102 9101 +8982 8983 9102 +8983 9103 9102 +8983 8984 9104 +8983 9104 9103 +8984 8985 9104 +8985 9105 9104 +8985 8986 9106 +8985 9106 9105 +8986 8987 9106 +8987 9107 9106 +8987 8988 9108 +8987 9108 9107 +8988 8989 9108 +8989 9109 9108 +8989 8990 9110 +8989 9110 9109 +8990 8991 9110 +8991 9111 9110 +8991 8992 9112 +8991 9112 9111 +8992 8993 9112 +8993 9113 9112 +8993 8994 9114 +8993 9114 9113 +8994 8995 9114 +8995 9115 9114 +8995 8996 9116 +8995 9116 9115 +8996 8997 9116 +8997 9117 9116 +8997 8998 9118 +8997 9118 9117 +8998 8999 9118 +8999 9119 9118 +8999 9000 9120 +8999 9120 9119 +9000 9001 9120 +9001 9121 9120 +9001 9002 9122 +9001 9122 9121 +9002 9003 9122 +9003 9123 9122 +9003 9004 9124 +9003 9124 9123 +9004 9005 9124 +9005 9125 9124 +9005 9006 9126 +9005 9126 9125 +9006 9007 9126 +9007 9127 9126 +9007 9008 9128 +9007 9128 9127 +9008 9009 9128 +9009 9129 9128 +9009 9010 9130 +9009 9130 9129 +9010 9011 9130 +9011 9131 9130 +9011 9012 9132 +9011 9132 9131 +9012 9013 9132 +9013 9133 9132 +9013 9014 9134 +9013 9134 9133 +9014 9015 9134 +9015 9135 9134 +9015 9016 9136 +9015 9136 9135 +9016 9017 9136 +9017 9137 9136 +9017 9018 9138 +9017 9138 9137 +9018 9019 9138 +9019 9139 9138 +9019 9020 9140 +9019 9140 9139 +9020 9021 9140 +9021 9141 9140 +9021 9022 9142 +9021 9142 9141 +9022 9023 9142 +9023 9143 9142 +9023 9024 9144 +9023 9144 9143 +9024 9025 9144 +9025 9145 9144 +9025 9026 9146 +9025 9146 9145 +9026 9027 9146 +9027 9147 9146 +9027 9028 9148 +9027 9148 9147 +9028 9029 9148 +9029 9149 9148 +9029 9030 9150 +9029 9150 9149 +9030 9031 9150 +9031 9151 9150 +9031 9032 9152 +9031 9152 9151 +9032 9033 9152 +9033 9153 9152 +9033 9034 9154 +9033 9154 9153 +9034 9035 9154 +9035 9155 9154 +9035 9036 9156 +9035 9156 9155 +9036 9037 9156 +9037 9157 9156 +9037 9038 9158 +9037 9158 9157 +9038 9039 9158 +9039 9159 9158 +9039 9040 9160 +9039 9160 9159 +9040 9041 9160 +9041 9161 9160 +9041 9042 9162 +9041 9162 9161 +9042 9043 9162 +9043 9163 9162 +9043 9044 9164 +9043 9164 9163 +9044 9045 9164 +9045 9165 9164 +9045 9046 9166 +9045 9166 9165 +9046 9047 9166 +9047 9167 9166 +9047 9048 9168 +9047 9168 9167 +9048 9049 9168 +9049 9169 9168 +9049 9050 9170 +9049 9170 9169 +9050 9051 9170 +9051 9171 9170 +9051 9052 9172 +9051 9172 9171 +9052 9053 9172 +9053 9173 9172 +9053 9054 9174 +9053 9174 9173 +9054 9055 9174 +9055 9175 9174 +9055 9056 9176 +9055 9176 9175 +9056 9057 9176 +9057 9177 9176 +9057 9058 9178 +9057 9178 9177 +9058 9059 9178 +9059 9179 9178 +9059 9060 9180 +9059 9180 9179 +9060 9061 9180 +9061 9181 9180 +9061 9062 9182 +9061 9182 9181 +9062 9063 9182 +9063 9183 9182 +9063 9064 9184 +9063 9184 9183 +9064 9065 9184 +9065 9185 9184 +9065 9066 9186 +9065 9186 9185 +9066 9067 9186 +9067 9187 9186 +9067 9068 9188 +9067 9188 9187 +9069 9070 9189 +9070 9190 9189 +9070 9071 9191 +9070 9191 9190 +9071 9072 9191 +9072 9192 9191 +9072 9073 9193 +9072 9193 9192 +9073 9074 9193 +9074 9194 9193 +9074 9075 9195 +9074 9195 9194 +9075 9076 9195 +9076 9196 9195 +9076 9077 9197 +9076 9197 9196 +9077 9078 9197 +9078 9198 9197 +9078 9079 9199 +9078 9199 9198 +9079 9080 9199 +9080 9200 9199 +9080 9081 9201 +9080 9201 9200 +9081 9082 9201 +9082 9202 9201 +9082 9083 9203 +9082 9203 9202 +9083 9084 9203 +9084 9204 9203 +9084 9085 9205 +9084 9205 9204 +9085 9086 9205 +9086 9206 9205 +9086 9087 9207 +9086 9207 9206 +9088 9089 9209 +9088 9209 9208 +9089 9090 9209 +9090 9210 9209 +9090 9091 9211 +9090 9211 9210 +9091 9092 9211 +9092 9212 9211 +9092 9093 9213 +9092 9213 9212 +9093 9094 9213 +9094 9214 9213 +9094 9095 9215 +9094 9215 9214 +9095 9096 9215 +9096 9216 9215 +9096 9097 9217 +9096 9217 9216 +9097 9098 9217 +9098 9218 9217 +9098 9099 9219 +9098 9219 9218 +9099 9100 9219 +9100 9220 9219 +9100 9101 9221 +9100 9221 9220 +9101 9102 9221 +9102 9222 9221 +9102 9103 9223 +9102 9223 9222 +9103 9104 9223 +9104 9224 9223 +9104 9105 9225 +9104 9225 9224 +9105 9106 9225 +9106 9226 9225 +9106 9107 9227 +9106 9227 9226 +9107 9108 9227 +9108 9228 9227 +9108 9109 9229 +9108 9229 9228 +9109 9110 9229 +9110 9230 9229 +9110 9111 9231 +9110 9231 9230 +9111 9112 9231 +9112 9232 9231 +9112 9113 9233 +9112 9233 9232 +9113 9114 9233 +9114 9234 9233 +9114 9115 9235 +9114 9235 9234 +9115 9116 9235 +9116 9236 9235 +9116 9117 9237 +9116 9237 9236 +9117 9118 9237 +9118 9238 9237 +9118 9119 9239 +9118 9239 9238 +9119 9120 9239 +9120 9240 9239 +9120 9121 9241 +9120 9241 9240 +9121 9122 9241 +9122 9242 9241 +9122 9123 9243 +9122 9243 9242 +9123 9124 9243 +9124 9244 9243 +9124 9125 9245 +9124 9245 9244 +9125 9126 9245 +9126 9246 9245 +9126 9127 9247 +9126 9247 9246 +9127 9128 9247 +9128 9248 9247 +9128 9129 9249 +9128 9249 9248 +9129 9130 9249 +9130 9250 9249 +9130 9131 9251 +9130 9251 9250 +9131 9132 9251 +9132 9252 9251 +9132 9133 9253 +9132 9253 9252 +9133 9134 9253 +9134 9254 9253 +9134 9135 9255 +9134 9255 9254 +9135 9136 9255 +9136 9256 9255 +9136 9137 9257 +9136 9257 9256 +9137 9138 9257 +9138 9258 9257 +9138 9139 9259 +9138 9259 9258 +9139 9140 9259 +9140 9260 9259 +9140 9141 9261 +9140 9261 9260 +9141 9142 9261 +9142 9262 9261 +9142 9143 9263 +9142 9263 9262 +9143 9144 9263 +9144 9264 9263 +9144 9145 9265 +9144 9265 9264 +9145 9146 9265 +9146 9266 9265 +9146 9147 9267 +9146 9267 9266 +9147 9148 9267 +9148 9268 9267 +9148 9149 9269 +9148 9269 9268 +9149 9150 9269 +9150 9270 9269 +9150 9151 9271 +9150 9271 9270 +9151 9152 9271 +9152 9272 9271 +9152 9153 9273 +9152 9273 9272 +9153 9154 9273 +9154 9274 9273 +9154 9155 9275 +9154 9275 9274 +9155 9156 9275 +9156 9276 9275 +9156 9157 9277 +9156 9277 9276 +9157 9158 9277 +9158 9278 9277 +9158 9159 9279 +9158 9279 9278 +9159 9160 9279 +9160 9280 9279 +9160 9161 9281 +9160 9281 9280 +9161 9162 9281 +9162 9282 9281 +9162 9163 9283 +9162 9283 9282 +9163 9164 9283 +9164 9284 9283 +9164 9165 9285 +9164 9285 9284 +9165 9166 9285 +9166 9286 9285 +9166 9167 9287 +9166 9287 9286 +9167 9168 9287 +9168 9288 9287 +9168 9169 9289 +9168 9289 9288 +9169 9170 9289 +9170 9290 9289 +9170 9171 9291 +9170 9291 9290 +9171 9172 9291 +9172 9292 9291 +9172 9173 9293 +9172 9293 9292 +9173 9174 9293 +9174 9294 9293 +9174 9175 9295 +9174 9295 9294 +9175 9176 9295 +9176 9296 9295 +9176 9177 9297 +9176 9297 9296 +9177 9178 9297 +9178 9298 9297 +9178 9179 9299 +9178 9299 9298 +9179 9180 9299 +9180 9300 9299 +9180 9181 9301 +9180 9301 9300 +9181 9182 9301 +9182 9302 9301 +9182 9183 9303 +9182 9303 9302 +9183 9184 9303 +9184 9304 9303 +9184 9185 9305 +9184 9305 9304 +9185 9186 9305 +9186 9306 9305 +9186 9187 9307 +9186 9307 9306 +9187 9188 9307 +9188 9308 9307 +9189 9190 9310 +9189 9310 9309 +9190 9191 9310 +9191 9311 9310 +9191 9192 9312 +9191 9312 9311 +9192 9193 9312 +9193 9313 9312 +9193 9194 9314 +9193 9314 9313 +9194 9195 9314 +9195 9315 9314 +9195 9196 9316 +9195 9316 9315 +9196 9197 9316 +9197 9317 9316 +9197 9198 9318 +9197 9318 9317 +9198 9199 9318 +9199 9319 9318 +9199 9200 9320 +9199 9320 9319 +9200 9201 9320 +9201 9321 9320 +9201 9202 9322 +9201 9322 9321 +9202 9203 9322 +9203 9323 9322 +9203 9204 9324 +9203 9324 9323 +9204 9205 9324 +9205 9325 9324 +9205 9206 9326 +9205 9326 9325 +9206 9207 9326 +9207 9327 9326 +9208 9209 9328 +9209 9329 9328 +9209 9210 9330 +9209 9330 9329 +9210 9211 9330 +9211 9331 9330 +9211 9212 9332 +9211 9332 9331 +9212 9213 9332 +9213 9333 9332 +9213 9214 9334 +9213 9334 9333 +9214 9215 9334 +9215 9335 9334 +9215 9216 9336 +9215 9336 9335 +9216 9217 9336 +9217 9337 9336 +9217 9218 9338 +9217 9338 9337 +9218 9219 9338 +9219 9339 9338 +9219 9220 9340 +9219 9340 9339 +9220 9221 9340 +9221 9341 9340 +9221 9222 9342 +9221 9342 9341 +9222 9223 9342 +9223 9343 9342 +9223 9224 9344 +9223 9344 9343 +9224 9225 9344 +9225 9345 9344 +9225 9226 9346 +9225 9346 9345 +9226 9227 9346 +9227 9347 9346 +9227 9228 9348 +9227 9348 9347 +9228 9229 9348 +9229 9349 9348 +9229 9230 9350 +9229 9350 9349 +9230 9231 9350 +9231 9351 9350 +9231 9232 9352 +9231 9352 9351 +9232 9233 9352 +9233 9353 9352 +9233 9234 9354 +9233 9354 9353 +9234 9235 9354 +9235 9355 9354 +9235 9236 9356 +9235 9356 9355 +9236 9237 9356 +9237 9357 9356 +9237 9238 9358 +9237 9358 9357 +9238 9239 9358 +9239 9359 9358 +9239 9240 9360 +9239 9360 9359 +9240 9241 9360 +9241 9361 9360 +9241 9242 9362 +9241 9362 9361 +9242 9243 9362 +9243 9363 9362 +9243 9244 9364 +9243 9364 9363 +9244 9245 9364 +9245 9365 9364 +9245 9246 9366 +9245 9366 9365 +9246 9247 9366 +9247 9367 9366 +9247 9248 9368 +9247 9368 9367 +9248 9249 9368 +9249 9369 9368 +9249 9250 9370 +9249 9370 9369 +9250 9251 9370 +9251 9371 9370 +9251 9252 9372 +9251 9372 9371 +9252 9253 9372 +9253 9373 9372 +9253 9254 9374 +9253 9374 9373 +9254 9255 9374 +9255 9375 9374 +9255 9256 9376 +9255 9376 9375 +9256 9257 9376 +9257 9377 9376 +9257 9258 9378 +9257 9378 9377 +9258 9259 9378 +9259 9379 9378 +9259 9260 9380 +9259 9380 9379 +9260 9261 9380 +9261 9381 9380 +9261 9262 9382 +9261 9382 9381 +9262 9263 9382 +9263 9383 9382 +9263 9264 9384 +9263 9384 9383 +9264 9265 9384 +9265 9385 9384 +9265 9266 9386 +9265 9386 9385 +9266 9267 9386 +9267 9387 9386 +9267 9268 9388 +9267 9388 9387 +9268 9269 9388 +9269 9389 9388 +9269 9270 9390 +9269 9390 9389 +9270 9271 9390 +9271 9391 9390 +9271 9272 9392 +9271 9392 9391 +9272 9273 9392 +9273 9393 9392 +9273 9274 9394 +9273 9394 9393 +9274 9275 9394 +9275 9395 9394 +9275 9276 9396 +9275 9396 9395 +9276 9277 9396 +9277 9397 9396 +9277 9278 9398 +9277 9398 9397 +9278 9279 9398 +9279 9399 9398 +9279 9280 9400 +9279 9400 9399 +9280 9281 9400 +9281 9401 9400 +9281 9282 9402 +9281 9402 9401 +9282 9283 9402 +9283 9403 9402 +9283 9284 9404 +9283 9404 9403 +9284 9285 9404 +9285 9405 9404 +9285 9286 9406 +9285 9406 9405 +9286 9287 9406 +9287 9407 9406 +9287 9288 9408 +9287 9408 9407 +9288 9289 9408 +9289 9409 9408 +9289 9290 9410 +9289 9410 9409 +9290 9291 9410 +9291 9411 9410 +9291 9292 9412 +9291 9412 9411 +9292 9293 9412 +9293 9413 9412 +9293 9294 9414 +9293 9414 9413 +9294 9295 9414 +9295 9415 9414 +9295 9296 9416 +9295 9416 9415 +9296 9297 9416 +9297 9417 9416 +9297 9298 9418 +9297 9418 9417 +9298 9299 9418 +9299 9419 9418 +9299 9300 9420 +9299 9420 9419 +9300 9301 9420 +9301 9421 9420 +9301 9302 9422 +9301 9422 9421 +9302 9303 9422 +9303 9423 9422 +9303 9304 9424 +9303 9424 9423 +9304 9305 9424 +9305 9425 9424 +9305 9306 9426 +9305 9426 9425 +9306 9307 9426 +9307 9427 9426 +9307 9308 9428 +9307 9428 9427 +9309 9310 9429 +9310 9430 9429 +9310 9311 9431 +9310 9431 9430 +9311 9312 9431 +9312 9432 9431 +9312 9313 9433 +9312 9433 9432 +9313 9314 9433 +9314 9434 9433 +9314 9315 9435 +9314 9435 9434 +9315 9316 9435 +9316 9436 9435 +9316 9317 9437 +9316 9437 9436 +9317 9318 9437 +9318 9438 9437 +9318 9319 9439 +9318 9439 9438 +9319 9320 9439 +9320 9440 9439 +9320 9321 9441 +9320 9441 9440 +9321 9322 9441 +9322 9442 9441 +9322 9323 9443 +9322 9443 9442 +9323 9324 9443 +9324 9444 9443 +9324 9325 9445 +9324 9445 9444 +9325 9326 9445 +9326 9446 9445 +9326 9327 9447 +9326 9447 9446 +9328 9329 9449 +9328 9449 9448 +9329 9330 9449 +9330 9450 9449 +9330 9331 9451 +9330 9451 9450 +9331 9332 9451 +9332 9452 9451 +9332 9333 9453 +9332 9453 9452 +9333 9334 9453 +9334 9454 9453 +9334 9335 9455 +9334 9455 9454 +9335 9336 9455 +9336 9456 9455 +9336 9337 9457 +9336 9457 9456 +9337 9338 9457 +9338 9458 9457 +9338 9339 9459 +9338 9459 9458 +9339 9340 9459 +9340 9460 9459 +9340 9341 9461 +9340 9461 9460 +9341 9342 9461 +9342 9462 9461 +9342 9343 9463 +9342 9463 9462 +9343 9344 9463 +9344 9464 9463 +9344 9345 9465 +9344 9465 9464 +9345 9346 9465 +9346 9466 9465 +9346 9347 9467 +9346 9467 9466 +9347 9348 9467 +9348 9468 9467 +9348 9349 9469 +9348 9469 9468 +9349 9350 9469 +9350 9470 9469 +9350 9351 9471 +9350 9471 9470 +9351 9352 9471 +9352 9472 9471 +9352 9353 9473 +9352 9473 9472 +9353 9354 9473 +9354 9474 9473 +9354 9355 9475 +9354 9475 9474 +9355 9356 9475 +9356 9476 9475 +9356 9357 9477 +9356 9477 9476 +9357 9358 9477 +9358 9478 9477 +9358 9359 9479 +9358 9479 9478 +9359 9360 9479 +9360 9480 9479 +9360 9361 9481 +9360 9481 9480 +9361 9362 9481 +9362 9482 9481 +9362 9363 9483 +9362 9483 9482 +9363 9364 9483 +9364 9484 9483 +9364 9365 9485 +9364 9485 9484 +9365 9366 9485 +9366 9486 9485 +9366 9367 9487 +9366 9487 9486 +9367 9368 9487 +9368 9488 9487 +9368 9369 9489 +9368 9489 9488 +9369 9370 9489 +9370 9490 9489 +9370 9371 9491 +9370 9491 9490 +9371 9372 9491 +9372 9492 9491 +9372 9373 9493 +9372 9493 9492 +9373 9374 9493 +9374 9494 9493 +9374 9375 9495 +9374 9495 9494 +9375 9376 9495 +9376 9496 9495 +9376 9377 9497 +9376 9497 9496 +9377 9378 9497 +9378 9498 9497 +9378 9379 9499 +9378 9499 9498 +9379 9380 9499 +9380 9500 9499 +9380 9381 9501 +9380 9501 9500 +9381 9382 9501 +9382 9502 9501 +9382 9383 9503 +9382 9503 9502 +9383 9384 9503 +9384 9504 9503 +9384 9385 9505 +9384 9505 9504 +9385 9386 9505 +9386 9506 9505 +9386 9387 9507 +9386 9507 9506 +9387 9388 9507 +9388 9508 9507 +9388 9389 9509 +9388 9509 9508 +9389 9390 9509 +9390 9510 9509 +9390 9391 9511 +9390 9511 9510 +9391 9392 9511 +9392 9512 9511 +9392 9393 9513 +9392 9513 9512 +9393 9394 9513 +9394 9514 9513 +9394 9395 9515 +9394 9515 9514 +9395 9396 9515 +9396 9516 9515 +9396 9397 9517 +9396 9517 9516 +9397 9398 9517 +9398 9518 9517 +9398 9399 9519 +9398 9519 9518 +9399 9400 9519 +9400 9520 9519 +9400 9401 9521 +9400 9521 9520 +9401 9402 9521 +9402 9522 9521 +9402 9403 9523 +9402 9523 9522 +9403 9404 9523 +9404 9524 9523 +9404 9405 9525 +9404 9525 9524 +9405 9406 9525 +9406 9526 9525 +9406 9407 9527 +9406 9527 9526 +9407 9408 9527 +9408 9528 9527 +9408 9409 9529 +9408 9529 9528 +9409 9410 9529 +9410 9530 9529 +9410 9411 9531 +9410 9531 9530 +9411 9412 9531 +9412 9532 9531 +9412 9413 9533 +9412 9533 9532 +9413 9414 9533 +9414 9534 9533 +9414 9415 9535 +9414 9535 9534 +9415 9416 9535 +9416 9536 9535 +9416 9417 9537 +9416 9537 9536 +9417 9418 9537 +9418 9538 9537 +9418 9419 9539 +9418 9539 9538 +9419 9420 9539 +9420 9540 9539 +9420 9421 9541 +9420 9541 9540 +9421 9422 9541 +9422 9542 9541 +9422 9423 9543 +9422 9543 9542 +9423 9424 9543 +9424 9544 9543 +9424 9425 9545 +9424 9545 9544 +9425 9426 9545 +9426 9546 9545 +9426 9427 9547 +9426 9547 9546 +9427 9428 9547 +9428 9548 9547 +9429 9430 9550 +9429 9550 9549 +9430 9431 9550 +9431 9551 9550 +9431 9432 9552 +9431 9552 9551 +9432 9433 9552 +9433 9553 9552 +9433 9434 9554 +9433 9554 9553 +9434 9435 9554 +9435 9555 9554 +9435 9436 9556 +9435 9556 9555 +9436 9437 9556 +9437 9557 9556 +9437 9438 9558 +9437 9558 9557 +9438 9439 9558 +9439 9559 9558 +9439 9440 9560 +9439 9560 9559 +9440 9441 9560 +9441 9561 9560 +9441 9442 9562 +9441 9562 9561 +9442 9443 9562 +9443 9563 9562 +9443 9444 9564 +9443 9564 9563 +9444 9445 9564 +9445 9565 9564 +9445 9446 9566 +9445 9566 9565 +9446 9447 9566 +9447 9567 9566 +9448 9449 9568 +9449 9569 9568 +9449 9450 9570 +9449 9570 9569 +9450 9451 9570 +9451 9571 9570 +9451 9452 9572 +9451 9572 9571 +9452 9453 9572 +9453 9573 9572 +9453 9454 9574 +9453 9574 9573 +9454 9455 9574 +9455 9575 9574 +9455 9456 9576 +9455 9576 9575 +9456 9457 9576 +9457 9577 9576 +9457 9458 9578 +9457 9578 9577 +9458 9459 9578 +9459 9579 9578 +9459 9460 9580 +9459 9580 9579 +9460 9461 9580 +9461 9581 9580 +9461 9462 9582 +9461 9582 9581 +9462 9463 9582 +9463 9583 9582 +9463 9464 9584 +9463 9584 9583 +9464 9465 9584 +9465 9585 9584 +9465 9466 9586 +9465 9586 9585 +9466 9467 9586 +9467 9587 9586 +9467 9468 9588 +9467 9588 9587 +9468 9469 9588 +9469 9589 9588 +9469 9470 9590 +9469 9590 9589 +9470 9471 9590 +9471 9591 9590 +9471 9472 9592 +9471 9592 9591 +9472 9473 9592 +9473 9593 9592 +9473 9474 9594 +9473 9594 9593 +9474 9475 9594 +9475 9595 9594 +9475 9476 9596 +9475 9596 9595 +9476 9477 9596 +9477 9597 9596 +9477 9478 9598 +9477 9598 9597 +9478 9479 9598 +9479 9599 9598 +9479 9480 9600 +9479 9600 9599 +9480 9481 9600 +9481 9601 9600 +9481 9482 9602 +9481 9602 9601 +9482 9483 9602 +9483 9603 9602 +9483 9484 9604 +9483 9604 9603 +9484 9485 9604 +9485 9605 9604 +9485 9486 9606 +9485 9606 9605 +9486 9487 9606 +9487 9607 9606 +9487 9488 9608 +9487 9608 9607 +9488 9489 9608 +9489 9609 9608 +9489 9490 9610 +9489 9610 9609 +9490 9491 9610 +9491 9611 9610 +9491 9492 9612 +9491 9612 9611 +9492 9493 9612 +9493 9613 9612 +9493 9494 9614 +9493 9614 9613 +9494 9495 9614 +9495 9615 9614 +9495 9496 9616 +9495 9616 9615 +9496 9497 9616 +9497 9617 9616 +9497 9498 9618 +9497 9618 9617 +9498 9499 9618 +9499 9619 9618 +9499 9500 9620 +9499 9620 9619 +9500 9501 9620 +9501 9621 9620 +9501 9502 9622 +9501 9622 9621 +9502 9503 9622 +9503 9623 9622 +9503 9504 9624 +9503 9624 9623 +9504 9505 9624 +9505 9625 9624 +9505 9506 9626 +9505 9626 9625 +9506 9507 9626 +9507 9627 9626 +9507 9508 9628 +9507 9628 9627 +9508 9509 9628 +9509 9629 9628 +9509 9510 9630 +9509 9630 9629 +9510 9511 9630 +9511 9631 9630 +9511 9512 9632 +9511 9632 9631 +9512 9513 9632 +9513 9633 9632 +9513 9514 9634 +9513 9634 9633 +9514 9515 9634 +9515 9635 9634 +9515 9516 9636 +9515 9636 9635 +9516 9517 9636 +9517 9637 9636 +9517 9518 9638 +9517 9638 9637 +9518 9519 9638 +9519 9639 9638 +9519 9520 9640 +9519 9640 9639 +9520 9521 9640 +9521 9641 9640 +9521 9522 9642 +9521 9642 9641 +9522 9523 9642 +9523 9643 9642 +9523 9524 9644 +9523 9644 9643 +9524 9525 9644 +9525 9645 9644 +9525 9526 9646 +9525 9646 9645 +9526 9527 9646 +9527 9647 9646 +9527 9528 9648 +9527 9648 9647 +9528 9529 9648 +9529 9649 9648 +9529 9530 9650 +9529 9650 9649 +9530 9531 9650 +9531 9651 9650 +9531 9532 9652 +9531 9652 9651 +9532 9533 9652 +9533 9653 9652 +9533 9534 9654 +9533 9654 9653 +9534 9535 9654 +9535 9655 9654 +9535 9536 9656 +9535 9656 9655 +9536 9537 9656 +9537 9657 9656 +9537 9538 9658 +9537 9658 9657 +9538 9539 9658 +9539 9659 9658 +9539 9540 9660 +9539 9660 9659 +9540 9541 9660 +9541 9661 9660 +9541 9542 9662 +9541 9662 9661 +9542 9543 9662 +9543 9663 9662 +9543 9544 9664 +9543 9664 9663 +9544 9545 9664 +9545 9665 9664 +9545 9546 9666 +9545 9666 9665 +9546 9547 9666 +9547 9667 9666 +9547 9548 9668 +9547 9668 9667 +9549 9550 9669 +9550 9670 9669 +9550 9551 9671 +9550 9671 9670 +9551 9552 9671 +9552 9672 9671 +9552 9553 9673 +9552 9673 9672 +9553 9554 9673 +9554 9674 9673 +9554 9555 9675 +9554 9675 9674 +9555 9556 9675 +9556 9676 9675 +9556 9557 9677 +9556 9677 9676 +9557 9558 9677 +9558 9678 9677 +9558 9559 9679 +9558 9679 9678 +9559 9560 9679 +9560 9680 9679 +9560 9561 9681 +9560 9681 9680 +9561 9562 9681 +9562 9682 9681 +9562 9563 9683 +9562 9683 9682 +9563 9564 9683 +9564 9684 9683 +9564 9565 9685 +9564 9685 9684 +9565 9566 9685 +9566 9686 9685 +9566 9567 9687 +9566 9687 9686 +9568 9569 9689 +9568 9689 9688 +9569 9570 9689 +9570 9690 9689 +9570 9571 9691 +9570 9691 9690 +9571 9572 9691 +9572 9692 9691 +9572 9573 9693 +9572 9693 9692 +9573 9574 9693 +9574 9694 9693 +9574 9575 9695 +9574 9695 9694 +9575 9576 9695 +9576 9696 9695 +9576 9577 9697 +9576 9697 9696 +9577 9578 9697 +9578 9698 9697 +9578 9579 9699 +9578 9699 9698 +9579 9580 9699 +9580 9700 9699 +9580 9581 9701 +9580 9701 9700 +9581 9582 9701 +9582 9702 9701 +9582 9583 9703 +9582 9703 9702 +9583 9584 9703 +9584 9704 9703 +9584 9585 9705 +9584 9705 9704 +9585 9586 9705 +9586 9706 9705 +9586 9587 9707 +9586 9707 9706 +9587 9588 9707 +9588 9708 9707 +9588 9589 9709 +9588 9709 9708 +9589 9590 9709 +9590 9710 9709 +9590 9591 9711 +9590 9711 9710 +9591 9592 9711 +9592 9712 9711 +9592 9593 9713 +9592 9713 9712 +9593 9594 9713 +9594 9714 9713 +9594 9595 9715 +9594 9715 9714 +9595 9596 9715 +9596 9716 9715 +9596 9597 9717 +9596 9717 9716 +9597 9598 9717 +9598 9718 9717 +9598 9599 9719 +9598 9719 9718 +9599 9600 9719 +9600 9720 9719 +9600 9601 9721 +9600 9721 9720 +9601 9602 9721 +9602 9722 9721 +9602 9603 9723 +9602 9723 9722 +9603 9604 9723 +9604 9724 9723 +9604 9605 9725 +9604 9725 9724 +9605 9606 9725 +9606 9726 9725 +9606 9607 9727 +9606 9727 9726 +9607 9608 9727 +9608 9728 9727 +9608 9609 9729 +9608 9729 9728 +9609 9610 9729 +9610 9730 9729 +9610 9611 9731 +9610 9731 9730 +9611 9612 9731 +9612 9732 9731 +9612 9613 9733 +9612 9733 9732 +9613 9614 9733 +9614 9734 9733 +9614 9615 9735 +9614 9735 9734 +9615 9616 9735 +9616 9736 9735 +9616 9617 9737 +9616 9737 9736 +9617 9618 9737 +9618 9738 9737 +9618 9619 9739 +9618 9739 9738 +9619 9620 9739 +9620 9740 9739 +9620 9621 9741 +9620 9741 9740 +9621 9622 9741 +9622 9742 9741 +9622 9623 9743 +9622 9743 9742 +9623 9624 9743 +9624 9744 9743 +9624 9625 9745 +9624 9745 9744 +9625 9626 9745 +9626 9746 9745 +9626 9627 9747 +9626 9747 9746 +9627 9628 9747 +9628 9748 9747 +9628 9629 9749 +9628 9749 9748 +9629 9630 9749 +9630 9750 9749 +9630 9631 9751 +9630 9751 9750 +9631 9632 9751 +9632 9752 9751 +9632 9633 9753 +9632 9753 9752 +9633 9634 9753 +9634 9754 9753 +9634 9635 9755 +9634 9755 9754 +9635 9636 9755 +9636 9756 9755 +9636 9637 9757 +9636 9757 9756 +9637 9638 9757 +9638 9758 9757 +9638 9639 9759 +9638 9759 9758 +9639 9640 9759 +9640 9760 9759 +9640 9641 9761 +9640 9761 9760 +9641 9642 9761 +9642 9762 9761 +9642 9643 9763 +9642 9763 9762 +9643 9644 9763 +9644 9764 9763 +9644 9645 9765 +9644 9765 9764 +9645 9646 9765 +9646 9766 9765 +9646 9647 9767 +9646 9767 9766 +9647 9648 9767 +9648 9768 9767 +9648 9649 9769 +9648 9769 9768 +9649 9650 9769 +9650 9770 9769 +9650 9651 9771 +9650 9771 9770 +9651 9652 9771 +9652 9772 9771 +9652 9653 9773 +9652 9773 9772 +9653 9654 9773 +9654 9774 9773 +9654 9655 9775 +9654 9775 9774 +9655 9656 9775 +9656 9776 9775 +9656 9657 9777 +9656 9777 9776 +9657 9658 9777 +9658 9778 9777 +9658 9659 9779 +9658 9779 9778 +9659 9660 9779 +9660 9780 9779 +9660 9661 9781 +9660 9781 9780 +9661 9662 9781 +9662 9782 9781 +9662 9663 9783 +9662 9783 9782 +9663 9664 9783 +9664 9784 9783 +9664 9665 9785 +9664 9785 9784 +9665 9666 9785 +9666 9786 9785 +9666 9667 9787 +9666 9787 9786 +9667 9668 9787 +9668 9788 9787 +9669 9790 9789 +9669 9670 9791 +9669 9791 9790 +9670 9671 9791 +9671 9792 9791 +9671 9672 9793 +9671 9793 9792 +9672 9673 9793 +9673 9794 9793 +9673 9674 9795 +9673 9795 9794 +9674 9675 9795 +9675 9796 9795 +9675 9676 9797 +9675 9797 9796 +9676 9677 9797 +9677 9798 9797 +9677 9678 9799 +9677 9799 9798 +9678 9679 9799 +9679 9800 9799 +9679 9680 9801 +9679 9801 9800 +9680 9681 9801 +9681 9802 9801 +9681 9682 9803 +9681 9803 9802 +9682 9683 9803 +9683 9804 9803 +9683 9684 9805 +9683 9805 9804 +9684 9685 9805 +9685 9806 9805 +9685 9686 9807 +9685 9807 9806 +9686 9687 9807 +9687 9808 9807 +9688 9689 9809 +9689 9810 9809 +9689 9690 9811 +9689 9811 9810 +9690 9691 9811 +9691 9812 9811 +9691 9692 9813 +9691 9813 9812 +9692 9693 9813 +9693 9814 9813 +9693 9694 9815 +9693 9815 9814 +9694 9695 9815 +9695 9816 9815 +9695 9696 9817 +9695 9817 9816 +9696 9697 9817 +9697 9818 9817 +9697 9698 9819 +9697 9819 9818 +9698 9699 9819 +9699 9820 9819 +9699 9700 9821 +9699 9821 9820 +9700 9701 9821 +9701 9822 9821 +9701 9702 9823 +9701 9823 9822 +9702 9703 9823 +9703 9824 9823 +9703 9704 9825 +9703 9825 9824 +9704 9705 9825 +9705 9826 9825 +9705 9706 9827 +9705 9827 9826 +9706 9707 9827 +9707 9828 9827 +9707 9708 9829 +9707 9829 9828 +9708 9709 9829 +9709 9830 9829 +9709 9710 9831 +9709 9831 9830 +9710 9711 9831 +9711 9832 9831 +9711 9712 9833 +9711 9833 9832 +9712 9713 9833 +9713 9834 9833 +9713 9714 9835 +9713 9835 9834 +9714 9715 9835 +9715 9836 9835 +9715 9716 9837 +9715 9837 9836 +9716 9717 9837 +9717 9838 9837 +9717 9718 9839 +9717 9839 9838 +9718 9719 9839 +9719 9840 9839 +9719 9720 9841 +9719 9841 9840 +9720 9721 9841 +9721 9842 9841 +9721 9722 9843 +9721 9843 9842 +9722 9723 9843 +9723 9844 9843 +9723 9724 9845 +9723 9845 9844 +9724 9725 9845 +9725 9846 9845 +9725 9726 9847 +9725 9847 9846 +9726 9727 9847 +9727 9848 9847 +9727 9728 9849 +9727 9849 9848 +9728 9729 9849 +9729 9850 9849 +9729 9730 9851 +9729 9851 9850 +9730 9731 9851 +9731 9852 9851 +9731 9732 9853 +9731 9853 9852 +9732 9733 9853 +9733 9854 9853 +9733 9734 9855 +9733 9855 9854 +9734 9735 9855 +9735 9856 9855 +9735 9736 9857 +9735 9857 9856 +9736 9737 9857 +9737 9858 9857 +9737 9738 9859 +9737 9859 9858 +9738 9739 9859 +9739 9860 9859 +9739 9740 9861 +9739 9861 9860 +9740 9741 9861 +9741 9862 9861 +9741 9742 9863 +9741 9863 9862 +9742 9743 9863 +9743 9864 9863 +9743 9744 9865 +9743 9865 9864 +9744 9745 9865 +9745 9866 9865 +9745 9746 9867 +9745 9867 9866 +9746 9747 9867 +9747 9868 9867 +9747 9748 9869 +9747 9869 9868 +9748 9749 9869 +9749 9870 9869 +9749 9750 9871 +9749 9871 9870 +9750 9751 9871 +9751 9872 9871 +9751 9752 9873 +9751 9873 9872 +9752 9753 9873 +9753 9874 9873 +9753 9754 9875 +9753 9875 9874 +9754 9755 9875 +9755 9876 9875 +9755 9756 9877 +9755 9877 9876 +9756 9757 9877 +9757 9878 9877 +9757 9758 9879 +9757 9879 9878 +9758 9759 9879 +9759 9880 9879 +9759 9760 9881 +9759 9881 9880 +9760 9761 9881 +9761 9882 9881 +9761 9762 9883 +9761 9883 9882 +9762 9763 9883 +9763 9884 9883 +9763 9764 9885 +9763 9885 9884 +9764 9765 9885 +9765 9886 9885 +9765 9766 9887 +9765 9887 9886 +9766 9767 9887 +9767 9888 9887 +9767 9768 9889 +9767 9889 9888 +9768 9769 9889 +9769 9890 9889 +9769 9770 9891 +9769 9891 9890 +9770 9771 9891 +9771 9892 9891 +9771 9772 9893 +9771 9893 9892 +9772 9773 9893 +9773 9894 9893 +9773 9774 9895 +9773 9895 9894 +9774 9775 9895 +9775 9896 9895 +9775 9776 9897 +9775 9897 9896 +9776 9777 9897 +9777 9898 9897 +9777 9778 9899 +9777 9899 9898 +9778 9779 9899 +9779 9900 9899 +9779 9780 9901 +9779 9901 9900 +9780 9781 9901 +9781 9902 9901 +9781 9782 9903 +9781 9903 9902 +9782 9783 9903 +9783 9904 9903 +9783 9784 9905 +9783 9905 9904 +9784 9785 9905 +9785 9906 9905 +9785 9786 9907 +9785 9907 9906 +9786 9787 9907 +9787 9908 9907 +9787 9788 9909 +9787 9909 9908 +9789 9911 9910 +9789 9790 9912 +9789 9912 9911 +9790 9791 9912 +9791 9913 9912 +9791 9792 9914 +9791 9914 9913 +9792 9793 9914 +9793 9915 9914 +9793 9794 9916 +9793 9916 9915 +9794 9795 9916 +9795 9917 9916 +9795 9796 9918 +9795 9918 9917 +9796 9797 9918 +9797 9919 9918 +9797 9798 9920 +9797 9920 9919 +9798 9799 9920 +9799 9921 9920 +9799 9800 9922 +9799 9922 9921 +9800 9801 9922 +9801 9923 9922 +9801 9802 9924 +9801 9924 9923 +9802 9803 9924 +9803 9925 9924 +9803 9804 9926 +9803 9926 9925 +9804 9805 9926 +9805 9927 9926 +9805 9806 9928 +9805 9928 9927 +9806 9807 9928 +9807 9929 9928 +9807 9808 9930 +9807 9930 9929 +9809 9810 9932 +9809 9932 9931 +9810 9811 9932 +9811 9933 9932 +9811 9812 9934 +9811 9934 9933 +9812 9813 9934 +9813 9935 9934 +9813 9814 9936 +9813 9936 9935 +9814 9815 9936 +9815 9937 9936 +9815 9816 9938 +9815 9938 9937 +9816 9817 9938 +9817 9939 9938 +9817 9818 9940 +9817 9940 9939 +9818 9819 9940 +9819 9941 9940 +9819 9820 9942 +9819 9942 9941 +9820 9821 9942 +9821 9943 9942 +9821 9822 9944 +9821 9944 9943 +9822 9823 9944 +9823 9945 9944 +9823 9824 9946 +9823 9946 9945 +9824 9825 9946 +9825 9947 9946 +9825 9826 9948 +9825 9948 9947 +9826 9827 9948 +9827 9949 9948 +9827 9828 9950 +9827 9950 9949 +9828 9829 9950 +9829 9951 9950 +9829 9830 9952 +9829 9952 9951 +9830 9831 9952 +9831 9953 9952 +9831 9832 9954 +9831 9954 9953 +9832 9833 9954 +9833 9955 9954 +9833 9834 9956 +9833 9956 9955 +9834 9835 9956 +9835 9957 9956 +9835 9836 9958 +9835 9958 9957 +9836 9837 9958 +9837 9959 9958 +9837 9838 9960 +9837 9960 9959 +9838 9839 9960 +9839 9961 9960 +9839 9840 9962 +9839 9962 9961 +9840 9841 9962 +9841 9963 9962 +9841 9842 9964 +9841 9964 9963 +9842 9843 9964 +9843 9965 9964 +9843 9844 9966 +9843 9966 9965 +9844 9845 9966 +9845 9967 9966 +9845 9846 9968 +9845 9968 9967 +9846 9847 9968 +9847 9969 9968 +9847 9848 9970 +9847 9970 9969 +9848 9849 9970 +9849 9971 9970 +9849 9850 9972 +9849 9972 9971 +9850 9851 9972 +9851 9973 9972 +9851 9852 9974 +9851 9974 9973 +9852 9853 9974 +9853 9975 9974 +9853 9854 9976 +9853 9976 9975 +9854 9855 9976 +9855 9977 9976 +9855 9856 9978 +9855 9978 9977 +9856 9857 9978 +9857 9979 9978 +9857 9858 9980 +9857 9980 9979 +9858 9859 9980 +9859 9981 9980 +9859 9860 9982 +9859 9982 9981 +9860 9861 9982 +9861 9983 9982 +9861 9862 9984 +9861 9984 9983 +9862 9863 9984 +9863 9985 9984 +9863 9864 9986 +9863 9986 9985 +9864 9865 9986 +9865 9987 9986 +9865 9866 9988 +9865 9988 9987 +9866 9867 9988 +9867 9989 9988 +9867 9868 9990 +9867 9990 9989 +9868 9869 9990 +9869 9991 9990 +9869 9870 9992 +9869 9992 9991 +9870 9871 9992 +9871 9993 9992 +9871 9872 9994 +9871 9994 9993 +9872 9873 9994 +9873 9995 9994 +9873 9874 9996 +9873 9996 9995 +9874 9875 9996 +9875 9997 9996 +9875 9876 9998 +9875 9998 9997 +9876 9877 9998 +9877 9999 9998 +9877 9878 10000 +9877 10000 9999 +9878 9879 10000 +9879 10001 10000 +9879 9880 10002 +9879 10002 10001 +9880 9881 10002 +9881 10003 10002 +9881 9882 10004 +9881 10004 10003 +9882 9883 10004 +9883 10005 10004 +9883 9884 10006 +9883 10006 10005 +9884 9885 10006 +9885 10007 10006 +9885 9886 10008 +9885 10008 10007 +9886 9887 10008 +9887 10009 10008 +9887 9888 10010 +9887 10010 10009 +9888 9889 10010 +9889 10011 10010 +9889 9890 10012 +9889 10012 10011 +9890 9891 10012 +9891 10013 10012 +9891 9892 10014 +9891 10014 10013 +9892 9893 10014 +9893 10015 10014 +9893 9894 10016 +9893 10016 10015 +9894 9895 10016 +9895 10017 10016 +9895 9896 10018 +9895 10018 10017 +9896 9897 10018 +9897 10019 10018 +9897 9898 10020 +9897 10020 10019 +9898 9899 10020 +9899 10021 10020 +9899 9900 10022 +9899 10022 10021 +9900 9901 10022 +9901 10023 10022 +9901 9902 10024 +9901 10024 10023 +9902 9903 10024 +9903 10025 10024 +9903 9904 10026 +9903 10026 10025 +9904 9905 10026 +9905 10027 10026 +9905 9906 10028 +9905 10028 10027 +9906 9907 10028 +9907 10029 10028 +9907 9908 10030 +9907 10030 10029 +9908 9909 10030 +9909 10031 10030 +9910 10033 10032 +9910 9911 10034 +9910 10034 10033 +9911 9912 10034 +9912 10035 10034 +9912 9913 10036 +9912 10036 10035 +9913 9914 10036 +9914 10037 10036 +9914 9915 10038 +9914 10038 10037 +9915 9916 10038 +9916 10039 10038 +9916 9917 10040 +9916 10040 10039 +9917 9918 10040 +9918 10041 10040 +9918 9919 10042 +9918 10042 10041 +9919 9920 10042 +9920 10043 10042 +9920 9921 10044 +9920 10044 10043 +9921 9922 10044 +9922 10045 10044 +9922 9923 10046 +9922 10046 10045 +9923 9924 10046 +9924 10047 10046 +9924 9925 10048 +9924 10048 10047 +9925 9926 10048 +9926 10049 10048 +9926 9927 10050 +9926 10050 10049 +9927 9928 10050 +9928 10051 10050 +9928 9929 10052 +9928 10052 10051 +9929 9930 10052 +9930 10053 10052 +9931 9932 10054 +9932 10055 10054 +9932 9933 10056 +9932 10056 10055 +9933 9934 10056 +9934 10057 10056 +9934 9935 10058 +9934 10058 10057 +9935 9936 10058 +9936 10059 10058 +9936 9937 10060 +9936 10060 10059 +9937 9938 10060 +9938 10061 10060 +9938 9939 10062 +9938 10062 10061 +9939 9940 10062 +9940 10063 10062 +9940 9941 10064 +9940 10064 10063 +9941 9942 10064 +9942 10065 10064 +9942 9943 10066 +9942 10066 10065 +9943 9944 10066 +9944 10067 10066 +9944 9945 10068 +9944 10068 10067 +9945 9946 10068 +9946 10069 10068 +9946 9947 10070 +9946 10070 10069 +9947 9948 10070 +9948 10071 10070 +9948 9949 10072 +9948 10072 10071 +9949 9950 10072 +9950 10073 10072 +9950 9951 10074 +9950 10074 10073 +9951 9952 10074 +9952 10075 10074 +9952 9953 10076 +9952 10076 10075 +9953 9954 10076 +9954 10077 10076 +9954 9955 10078 +9954 10078 10077 +9955 9956 10078 +9956 10079 10078 +9956 9957 10080 +9956 10080 10079 +9957 9958 10080 +9958 10081 10080 +9958 9959 10082 +9958 10082 10081 +9959 9960 10082 +9960 10083 10082 +9960 9961 10084 +9960 10084 10083 +9961 9962 10084 +9962 10085 10084 +9962 9963 10086 +9962 10086 10085 +9963 9964 10086 +9964 10087 10086 +9964 9965 10088 +9964 10088 10087 +9965 9966 10088 +9966 10089 10088 +9966 9967 10090 +9966 10090 10089 +9967 9968 10090 +9968 10091 10090 +9968 9969 10092 +9968 10092 10091 +9969 9970 10092 +9970 10093 10092 +9970 9971 10094 +9970 10094 10093 +9971 9972 10094 +9972 10095 10094 +9972 9973 10096 +9972 10096 10095 +9973 9974 10096 +9974 10097 10096 +9974 9975 10098 +9974 10098 10097 +9975 9976 10098 +9976 10099 10098 +9976 9977 10100 +9976 10100 10099 +9977 9978 10100 +9978 10101 10100 +9978 9979 10102 +9978 10102 10101 +9979 9980 10102 +9980 10103 10102 +9980 9981 10104 +9980 10104 10103 +9981 9982 10104 +9982 10105 10104 +9982 9983 10106 +9982 10106 10105 +9983 9984 10106 +9984 10107 10106 +9984 9985 10108 +9984 10108 10107 +9985 9986 10108 +9986 10109 10108 +9986 9987 10110 +9986 10110 10109 +9987 9988 10110 +9988 10111 10110 +9988 9989 10112 +9988 10112 10111 +9989 9990 10112 +9990 10113 10112 +9990 9991 10114 +9990 10114 10113 +9991 9992 10114 +9992 10115 10114 +9992 9993 10116 +9992 10116 10115 +9993 9994 10116 +9994 10117 10116 +9994 9995 10118 +9994 10118 10117 +9995 9996 10118 +9996 10119 10118 +9996 9997 10120 +9996 10120 10119 +9997 9998 10120 +9998 10121 10120 +9998 9999 10122 +9998 10122 10121 +9999 10000 10122 +10000 10123 10122 +10000 10001 10124 +10000 10124 10123 +10001 10002 10124 +10002 10125 10124 +10002 10003 10126 +10002 10126 10125 +10003 10004 10126 +10004 10127 10126 +10004 10005 10128 +10004 10128 10127 +10005 10006 10128 +10006 10129 10128 +10006 10007 10130 +10006 10130 10129 +10007 10008 10130 +10008 10131 10130 +10008 10009 10132 +10008 10132 10131 +10009 10010 10132 +10010 10133 10132 +10010 10011 10134 +10010 10134 10133 +10011 10012 10134 +10012 10135 10134 +10012 10013 10136 +10012 10136 10135 +10013 10014 10136 +10014 10137 10136 +10014 10015 10138 +10014 10138 10137 +10015 10016 10138 +10016 10139 10138 +10016 10017 10140 +10016 10140 10139 +10017 10018 10140 +10018 10141 10140 +10018 10019 10142 +10018 10142 10141 +10019 10020 10142 +10020 10143 10142 +10020 10021 10144 +10020 10144 10143 +10021 10022 10144 +10022 10145 10144 +10022 10023 10146 +10022 10146 10145 +10023 10024 10146 +10024 10147 10146 +10024 10025 10148 +10024 10148 10147 +10025 10026 10148 +10026 10149 10148 +10026 10027 10150 +10026 10150 10149 +10027 10028 10150 +10028 10151 10150 +10028 10029 10152 +10028 10152 10151 +10029 10030 10152 +10030 10153 10152 +10030 10031 10154 +10030 10154 10153 +10032 10157 10156 +10032 10033 10158 +10032 10158 10157 +10033 10034 10158 +10034 10159 10158 +10034 10035 10160 +10034 10160 10159 +10035 10036 10160 +10036 10161 10160 +10036 10037 10162 +10036 10162 10161 +10037 10038 10162 +10038 10163 10162 +10038 10039 10164 +10038 10164 10163 +10039 10040 10164 +10040 10165 10164 +10040 10041 10166 +10040 10166 10165 +10041 10042 10166 +10042 10167 10166 +10042 10043 10168 +10042 10168 10167 +10043 10044 10168 +10044 10169 10168 +10044 10045 10170 +10044 10170 10169 +10045 10046 10170 +10046 10171 10170 +10046 10047 10172 +10046 10172 10171 +10047 10048 10172 +10048 10173 10172 +10048 10049 10174 +10048 10174 10173 +10049 10050 10174 +10050 10175 10174 +10050 10051 10176 +10050 10176 10175 +10051 10052 10176 +10052 10177 10176 +10052 10053 10178 +10052 10178 10177 +10054 10055 10180 +10054 10180 10179 +10055 10056 10180 +10056 10181 10180 +10056 10057 10182 +10056 10182 10181 +10057 10058 10182 +10058 10183 10182 +10058 10059 10184 +10058 10184 10183 +10059 10060 10184 +10060 10185 10184 +10060 10061 10186 +10060 10186 10185 +10061 10062 10186 +10062 10187 10186 +10062 10063 10188 +10062 10188 10187 +10063 10064 10188 +10064 10189 10188 +10064 10065 10190 +10064 10190 10189 +10065 10066 10190 +10066 10191 10190 +10066 10067 10192 +10066 10192 10191 +10067 10068 10192 +10068 10193 10192 +10068 10069 10194 +10068 10194 10193 +10069 10070 10194 +10070 10195 10194 +10070 10071 10196 +10070 10196 10195 +10071 10072 10196 +10072 10197 10196 +10072 10073 10198 +10072 10198 10197 +10073 10074 10198 +10074 10199 10198 +10074 10075 10200 +10074 10200 10199 +10075 10076 10200 +10076 10201 10200 +10076 10077 10202 +10076 10202 10201 +10077 10078 10202 +10078 10203 10202 +10078 10079 10204 +10078 10204 10203 +10079 10080 10204 +10080 10205 10204 +10080 10081 10206 +10080 10206 10205 +10081 10082 10206 +10082 10207 10206 +10082 10083 10208 +10082 10208 10207 +10083 10084 10208 +10084 10209 10208 +10084 10085 10210 +10084 10210 10209 +10085 10086 10210 +10086 10211 10210 +10086 10087 10212 +10086 10212 10211 +10087 10088 10212 +10088 10213 10212 +10088 10089 10214 +10088 10214 10213 +10089 10090 10214 +10090 10215 10214 +10090 10091 10216 +10090 10216 10215 +10091 10092 10216 +10092 10217 10216 +10092 10093 10218 +10092 10218 10217 +10093 10094 10218 +10094 10219 10218 +10094 10095 10220 +10094 10220 10219 +10095 10096 10220 +10096 10221 10220 +10096 10097 10222 +10096 10222 10221 +10097 10098 10222 +10098 10223 10222 +10098 10099 10224 +10098 10224 10223 +10099 10100 10224 +10100 10225 10224 +10100 10101 10226 +10100 10226 10225 +10101 10102 10226 +10102 10227 10226 +10102 10103 10228 +10102 10228 10227 +10103 10104 10228 +10104 10229 10228 +10104 10105 10230 +10104 10230 10229 +10105 10106 10230 +10106 10231 10230 +10106 10107 10232 +10106 10232 10231 +10107 10108 10232 +10108 10233 10232 +10108 10109 10234 +10108 10234 10233 +10109 10110 10234 +10110 10235 10234 +10110 10111 10236 +10110 10236 10235 +10111 10112 10236 +10112 10237 10236 +10112 10113 10238 +10112 10238 10237 +10113 10114 10238 +10114 10239 10238 +10114 10115 10240 +10114 10240 10239 +10115 10116 10240 +10116 10241 10240 +10116 10117 10242 +10116 10242 10241 +10117 10118 10242 +10118 10243 10242 +10118 10119 10244 +10118 10244 10243 +10119 10120 10244 +10120 10245 10244 +10120 10121 10246 +10120 10246 10245 +10121 10122 10246 +10122 10247 10246 +10122 10123 10248 +10122 10248 10247 +10123 10124 10248 +10124 10249 10248 +10124 10125 10250 +10124 10250 10249 +10125 10126 10250 +10126 10251 10250 +10126 10127 10252 +10126 10252 10251 +10127 10128 10252 +10128 10253 10252 +10128 10129 10254 +10128 10254 10253 +10129 10130 10254 +10130 10255 10254 +10130 10131 10256 +10130 10256 10255 +10131 10132 10256 +10132 10257 10256 +10132 10133 10258 +10132 10258 10257 +10133 10134 10258 +10134 10259 10258 +10134 10135 10260 +10134 10260 10259 +10135 10136 10260 +10136 10261 10260 +10136 10137 10262 +10136 10262 10261 +10137 10138 10262 +10138 10263 10262 +10138 10139 10264 +10138 10264 10263 +10139 10140 10264 +10140 10265 10264 +10140 10141 10266 +10140 10266 10265 +10141 10142 10266 +10142 10267 10266 +10142 10143 10268 +10142 10268 10267 +10143 10144 10268 +10144 10269 10268 +10144 10145 10270 +10144 10270 10269 +10145 10146 10270 +10146 10271 10270 +10146 10147 10272 +10146 10272 10271 +10147 10148 10272 +10148 10273 10272 +10148 10149 10274 +10148 10274 10273 +10149 10150 10274 +10150 10275 10274 +10150 10151 10276 +10150 10276 10275 +10151 10152 10276 +10152 10277 10276 +10152 10153 10278 +10152 10278 10277 +10153 10154 10278 +10155 10280 10279 +10155 10281 10280 +10156 10282 10281 +10156 10157 10283 +10156 10283 10282 +10157 10158 10283 +10158 10284 10283 +10158 10159 10285 +10158 10285 10284 +10159 10160 10285 +10160 10286 10285 +10160 10161 10287 +10160 10287 10286 +10161 10162 10287 +10162 10288 10287 +10162 10163 10289 +10162 10289 10288 +10163 10164 10289 +10164 10290 10289 +10164 10165 10291 +10164 10291 10290 +10165 10166 10291 +10166 10292 10291 +10166 10167 10293 +10166 10293 10292 +10167 10168 10293 +10168 10294 10293 +10168 10169 10295 +10168 10295 10294 +10169 10170 10295 +10170 10296 10295 +10170 10171 10297 +10170 10297 10296 +10171 10172 10297 +10172 10298 10297 +10172 10173 10299 +10172 10299 10298 +10173 10174 10299 +10174 10300 10299 +10174 10175 10301 +10174 10301 10300 +10175 10176 10301 +10176 10302 10301 +10176 10177 10303 +10176 10303 10302 +10177 10178 10303 +10178 10304 10303 +10179 10180 10305 +10180 10306 10305 +10180 10181 10307 +10180 10307 10306 +10181 10182 10307 +10182 10308 10307 +10182 10183 10309 +10182 10309 10308 +10183 10184 10309 +10184 10310 10309 +10184 10185 10311 +10184 10311 10310 +10185 10186 10311 +10186 10312 10311 +10186 10187 10313 +10186 10313 10312 +10187 10188 10313 +10188 10314 10313 +10188 10189 10315 +10188 10315 10314 +10189 10190 10315 +10190 10316 10315 +10190 10191 10317 +10190 10317 10316 +10191 10192 10317 +10192 10318 10317 +10192 10193 10319 +10192 10319 10318 +10193 10194 10319 +10194 10320 10319 +10194 10195 10321 +10194 10321 10320 +10195 10196 10321 +10196 10322 10321 +10196 10197 10323 +10196 10323 10322 +10197 10198 10323 +10198 10324 10323 +10198 10199 10325 +10198 10325 10324 +10199 10200 10325 +10200 10326 10325 +10200 10201 10327 +10200 10327 10326 +10201 10202 10327 +10202 10328 10327 +10202 10203 10329 +10202 10329 10328 +10203 10204 10329 +10204 10330 10329 +10204 10205 10331 +10204 10331 10330 +10205 10206 10331 +10206 10332 10331 +10206 10207 10333 +10206 10333 10332 +10207 10208 10333 +10208 10334 10333 +10208 10209 10335 +10208 10335 10334 +10209 10210 10335 +10210 10336 10335 +10210 10211 10337 +10210 10337 10336 +10211 10212 10337 +10212 10338 10337 +10212 10213 10339 +10212 10339 10338 +10213 10214 10339 +10214 10340 10339 +10214 10215 10341 +10214 10341 10340 +10215 10216 10341 +10216 10342 10341 +10216 10217 10343 +10216 10343 10342 +10217 10218 10343 +10218 10344 10343 +10218 10219 10345 +10218 10345 10344 +10219 10220 10345 +10220 10346 10345 +10220 10221 10347 +10220 10347 10346 +10221 10222 10347 +10222 10348 10347 +10222 10223 10349 +10222 10349 10348 +10223 10224 10349 +10224 10350 10349 +10224 10225 10351 +10224 10351 10350 +10225 10226 10351 +10226 10352 10351 +10226 10227 10353 +10226 10353 10352 +10227 10228 10353 +10228 10354 10353 +10228 10229 10355 +10228 10355 10354 +10229 10230 10355 +10230 10356 10355 +10230 10231 10357 +10230 10357 10356 +10231 10232 10357 +10232 10358 10357 +10232 10233 10359 +10232 10359 10358 +10233 10234 10359 +10234 10360 10359 +10234 10235 10361 +10234 10361 10360 +10235 10236 10361 +10236 10362 10361 +10236 10237 10363 +10236 10363 10362 +10237 10238 10363 +10238 10364 10363 +10238 10239 10365 +10238 10365 10364 +10239 10240 10365 +10240 10366 10365 +10240 10241 10367 +10240 10367 10366 +10241 10242 10367 +10242 10368 10367 +10242 10243 10369 +10242 10369 10368 +10243 10244 10369 +10244 10370 10369 +10244 10245 10371 +10244 10371 10370 +10245 10246 10371 +10246 10372 10371 +10246 10247 10373 +10246 10373 10372 +10247 10248 10373 +10248 10374 10373 +10248 10249 10375 +10248 10375 10374 +10249 10250 10375 +10250 10376 10375 +10250 10251 10377 +10250 10377 10376 +10251 10252 10377 +10252 10378 10377 +10252 10253 10379 +10252 10379 10378 +10253 10254 10379 +10254 10380 10379 +10254 10255 10381 +10254 10381 10380 +10255 10256 10381 +10256 10382 10381 +10256 10257 10383 +10256 10383 10382 +10257 10258 10383 +10258 10384 10383 +10258 10259 10385 +10258 10385 10384 +10259 10260 10385 +10260 10386 10385 +10260 10261 10387 +10260 10387 10386 +10261 10262 10387 +10262 10388 10387 +10262 10263 10389 +10262 10389 10388 +10263 10264 10389 +10264 10390 10389 +10264 10265 10391 +10264 10391 10390 +10265 10266 10391 +10266 10392 10391 +10266 10267 10393 +10266 10393 10392 +10267 10268 10393 +10268 10394 10393 +10268 10269 10395 +10268 10395 10394 +10269 10270 10395 +10270 10396 10395 +10270 10271 10397 +10270 10397 10396 +10271 10272 10397 +10272 10398 10397 +10272 10273 10399 +10272 10399 10398 +10273 10274 10399 +10274 10400 10399 +10274 10275 10401 +10274 10401 10400 +10275 10276 10401 +10276 10402 10401 +10276 10277 10403 +10276 10403 10402 +10277 10278 10403 +10278 10404 10403 +10278 10405 10404 +10279 10407 10406 +10279 10280 10408 +10279 10408 10407 +10280 10281 10408 +10281 10409 10408 +10281 10282 10410 +10281 10410 10409 +10282 10283 10410 +10283 10411 10410 +10283 10284 10412 +10283 10412 10411 +10284 10285 10412 +10285 10413 10412 +10285 10286 10414 +10285 10414 10413 +10286 10287 10414 +10287 10415 10414 +10287 10288 10416 +10287 10416 10415 +10288 10289 10416 +10289 10417 10416 +10289 10290 10418 +10289 10418 10417 +10290 10291 10418 +10291 10419 10418 +10291 10292 10420 +10291 10420 10419 +10292 10293 10420 +10293 10421 10420 +10293 10294 10422 +10293 10422 10421 +10294 10295 10422 +10295 10423 10422 +10295 10296 10424 +10295 10424 10423 +10296 10297 10424 +10297 10425 10424 +10297 10298 10426 +10297 10426 10425 +10298 10299 10426 +10299 10427 10426 +10299 10300 10428 +10299 10428 10427 +10300 10301 10428 +10301 10429 10428 +10301 10302 10430 +10301 10430 10429 +10302 10303 10430 +10303 10431 10430 +10303 10304 10432 +10303 10432 10431 +10305 10306 10434 +10305 10434 10433 +10306 10307 10434 +10307 10435 10434 +10307 10308 10436 +10307 10436 10435 +10308 10309 10436 +10309 10437 10436 +10309 10310 10438 +10309 10438 10437 +10310 10311 10438 +10311 10439 10438 +10311 10312 10440 +10311 10440 10439 +10312 10313 10440 +10313 10441 10440 +10313 10314 10442 +10313 10442 10441 +10314 10315 10442 +10315 10443 10442 +10315 10316 10444 +10315 10444 10443 +10316 10317 10444 +10317 10445 10444 +10317 10318 10446 +10317 10446 10445 +10318 10319 10446 +10319 10447 10446 +10319 10320 10448 +10319 10448 10447 +10320 10321 10448 +10321 10449 10448 +10321 10322 10450 +10321 10450 10449 +10322 10323 10450 +10323 10451 10450 +10323 10324 10452 +10323 10452 10451 +10324 10325 10452 +10325 10453 10452 +10325 10326 10454 +10325 10454 10453 +10326 10327 10454 +10327 10455 10454 +10327 10328 10456 +10327 10456 10455 +10328 10329 10456 +10329 10457 10456 +10329 10330 10458 +10329 10458 10457 +10330 10331 10458 +10331 10459 10458 +10331 10332 10460 +10331 10460 10459 +10332 10333 10460 +10333 10461 10460 +10333 10334 10462 +10333 10462 10461 +10334 10335 10462 +10335 10463 10462 +10335 10336 10464 +10335 10464 10463 +10336 10337 10464 +10337 10465 10464 +10337 10338 10466 +10337 10466 10465 +10338 10339 10466 +10339 10467 10466 +10339 10340 10468 +10339 10468 10467 +10340 10341 10468 +10341 10469 10468 +10341 10342 10470 +10341 10470 10469 +10342 10343 10470 +10343 10471 10470 +10343 10344 10472 +10343 10472 10471 +10344 10345 10472 +10345 10473 10472 +10345 10346 10474 +10345 10474 10473 +10346 10347 10474 +10347 10475 10474 +10347 10348 10476 +10347 10476 10475 +10348 10349 10476 +10349 10477 10476 +10349 10350 10478 +10349 10478 10477 +10350 10351 10478 +10351 10479 10478 +10351 10352 10480 +10351 10480 10479 +10352 10353 10480 +10353 10481 10480 +10353 10354 10482 +10353 10482 10481 +10354 10355 10482 +10355 10483 10482 +10355 10356 10484 +10355 10484 10483 +10356 10357 10484 +10357 10485 10484 +10357 10358 10486 +10357 10486 10485 +10358 10359 10486 +10359 10487 10486 +10359 10360 10488 +10359 10488 10487 +10360 10361 10488 +10361 10489 10488 +10361 10362 10490 +10361 10490 10489 +10362 10363 10490 +10363 10491 10490 +10363 10364 10492 +10363 10492 10491 +10364 10365 10492 +10365 10493 10492 +10365 10366 10494 +10365 10494 10493 +10366 10367 10494 +10367 10495 10494 +10367 10368 10496 +10367 10496 10495 +10368 10369 10496 +10369 10497 10496 +10369 10370 10498 +10369 10498 10497 +10370 10371 10498 +10371 10499 10498 +10371 10372 10500 +10371 10500 10499 +10372 10373 10500 +10373 10501 10500 +10373 10374 10502 +10373 10502 10501 +10374 10375 10502 +10375 10503 10502 +10375 10376 10504 +10375 10504 10503 +10376 10377 10504 +10377 10505 10504 +10377 10378 10506 +10377 10506 10505 +10378 10379 10506 +10379 10507 10506 +10379 10380 10508 +10379 10508 10507 +10380 10381 10508 +10381 10509 10508 +10381 10382 10510 +10381 10510 10509 +10382 10383 10510 +10383 10511 10510 +10383 10384 10512 +10383 10512 10511 +10384 10385 10512 +10385 10513 10512 +10385 10386 10514 +10385 10514 10513 +10386 10387 10514 +10387 10515 10514 +10387 10388 10516 +10387 10516 10515 +10388 10389 10516 +10389 10517 10516 +10389 10390 10518 +10389 10518 10517 +10390 10391 10518 +10391 10519 10518 +10391 10392 10520 +10391 10520 10519 +10392 10393 10520 +10393 10521 10520 +10393 10394 10522 +10393 10522 10521 +10394 10395 10522 +10395 10523 10522 +10395 10396 10524 +10395 10524 10523 +10396 10397 10524 +10397 10525 10524 +10397 10398 10526 +10397 10526 10525 +10398 10399 10526 +10399 10527 10526 +10399 10400 10528 +10399 10528 10527 +10400 10401 10528 +10401 10529 10528 +10401 10402 10530 +10401 10530 10529 +10402 10403 10530 +10403 10531 10530 +10403 10404 10532 +10403 10532 10531 +10404 10405 10532 +10405 10533 10532 +10405 10534 10533 +10406 10535 10534 +10406 10407 10536 +10406 10536 10535 +10407 10408 10536 +10408 10537 10536 +10408 10409 10538 +10408 10538 10537 +10409 10410 10538 +10410 10539 10538 +10410 10411 10540 +10410 10540 10539 +10411 10412 10540 +10412 10541 10540 +10412 10413 10542 +10412 10542 10541 +10413 10414 10542 +10414 10543 10542 +10414 10415 10544 +10414 10544 10543 +10415 10416 10544 +10416 10545 10544 +10416 10417 10546 +10416 10546 10545 +10417 10418 10546 +10418 10547 10546 +10418 10419 10548 +10418 10548 10547 +10419 10420 10548 +10420 10549 10548 +10420 10421 10550 +10420 10550 10549 +10421 10422 10550 +10422 10551 10550 +10422 10423 10552 +10422 10552 10551 +10423 10424 10552 +10424 10553 10552 +10424 10425 10554 +10424 10554 10553 +10425 10426 10554 +10426 10555 10554 +10426 10427 10556 +10426 10556 10555 +10427 10428 10556 +10428 10557 10556 +10428 10429 10558 +10428 10558 10557 +10429 10430 10558 +10430 10559 10558 +10430 10431 10560 +10430 10560 10559 +10431 10432 10560 +10432 10561 10560 +10433 10434 10562 +10434 10563 10562 +10434 10435 10564 +10434 10564 10563 +10435 10436 10564 +10436 10565 10564 +10436 10437 10566 +10436 10566 10565 +10437 10438 10566 +10438 10567 10566 +10438 10439 10568 +10438 10568 10567 +10439 10440 10568 +10440 10569 10568 +10440 10441 10570 +10440 10570 10569 +10441 10442 10570 +10442 10571 10570 +10442 10443 10572 +10442 10572 10571 +10443 10444 10572 +10444 10573 10572 +10444 10445 10574 +10444 10574 10573 +10445 10446 10574 +10446 10575 10574 +10446 10447 10576 +10446 10576 10575 +10447 10448 10576 +10448 10577 10576 +10448 10449 10578 +10448 10578 10577 +10449 10450 10578 +10450 10579 10578 +10450 10451 10580 +10450 10580 10579 +10451 10452 10580 +10452 10581 10580 +10452 10453 10582 +10452 10582 10581 +10453 10454 10582 +10454 10583 10582 +10454 10455 10584 +10454 10584 10583 +10455 10456 10584 +10456 10585 10584 +10456 10457 10586 +10456 10586 10585 +10457 10458 10586 +10458 10587 10586 +10458 10459 10588 +10458 10588 10587 +10459 10460 10588 +10460 10589 10588 +10460 10461 10590 +10460 10590 10589 +10461 10462 10590 +10462 10591 10590 +10462 10463 10592 +10462 10592 10591 +10463 10464 10592 +10464 10593 10592 +10464 10465 10594 +10464 10594 10593 +10465 10466 10594 +10466 10595 10594 +10466 10467 10596 +10466 10596 10595 +10467 10468 10596 +10468 10597 10596 +10468 10469 10598 +10468 10598 10597 +10469 10470 10598 +10470 10599 10598 +10470 10471 10600 +10470 10600 10599 +10471 10472 10600 +10472 10601 10600 +10472 10473 10602 +10472 10602 10601 +10473 10474 10602 +10474 10603 10602 +10474 10475 10604 +10474 10604 10603 +10475 10476 10604 +10476 10605 10604 +10476 10477 10606 +10476 10606 10605 +10477 10478 10606 +10478 10607 10606 +10478 10479 10608 +10478 10608 10607 +10479 10480 10608 +10480 10609 10608 +10480 10481 10610 +10480 10610 10609 +10481 10482 10610 +10482 10611 10610 +10482 10483 10612 +10482 10612 10611 +10483 10484 10612 +10484 10613 10612 +10484 10485 10614 +10484 10614 10613 +10485 10486 10614 +10486 10615 10614 +10486 10487 10616 +10486 10616 10615 +10487 10488 10616 +10488 10617 10616 +10488 10489 10618 +10488 10618 10617 +10489 10490 10618 +10490 10619 10618 +10490 10491 10620 +10490 10620 10619 +10491 10492 10620 +10492 10621 10620 +10492 10493 10622 +10492 10622 10621 +10493 10494 10622 +10494 10623 10622 +10494 10495 10624 +10494 10624 10623 +10495 10496 10624 +10496 10625 10624 +10496 10497 10626 +10496 10626 10625 +10497 10498 10626 +10498 10627 10626 +10498 10499 10628 +10498 10628 10627 +10499 10500 10628 +10500 10629 10628 +10500 10501 10630 +10500 10630 10629 +10501 10502 10630 +10502 10631 10630 +10502 10503 10632 +10502 10632 10631 +10503 10504 10632 +10504 10633 10632 +10504 10505 10634 +10504 10634 10633 +10505 10506 10634 +10506 10635 10634 +10506 10507 10636 +10506 10636 10635 +10507 10508 10636 +10508 10637 10636 +10508 10509 10638 +10508 10638 10637 +10509 10510 10638 +10510 10639 10638 +10510 10511 10640 +10510 10640 10639 +10511 10512 10640 +10512 10641 10640 +10512 10513 10642 +10512 10642 10641 +10513 10514 10642 +10514 10643 10642 +10514 10515 10644 +10514 10644 10643 +10515 10516 10644 +10516 10645 10644 +10516 10517 10646 +10516 10646 10645 +10517 10518 10646 +10518 10647 10646 +10518 10519 10648 +10518 10648 10647 +10519 10520 10648 +10520 10649 10648 +10520 10521 10650 +10520 10650 10649 +10521 10522 10650 +10522 10651 10650 +10522 10523 10652 +10522 10652 10651 +10523 10524 10652 +10524 10653 10652 +10524 10525 10654 +10524 10654 10653 +10525 10526 10654 +10526 10655 10654 +10526 10527 10656 +10526 10656 10655 +10527 10528 10656 +10528 10657 10656 +10528 10529 10658 +10528 10658 10657 +10529 10530 10658 +10530 10659 10658 +10530 10531 10660 +10530 10660 10659 +10531 10532 10660 +10532 10661 10660 +10532 10533 10662 +10532 10662 10661 +10533 10534 10662 +10534 10663 10662 +10534 10535 10664 +10534 10664 10663 +10535 10536 10664 +10536 10665 10664 +10536 10537 10666 +10536 10666 10665 +10537 10538 10666 +10538 10667 10666 +10538 10539 10668 +10538 10668 10667 +10539 10540 10668 +10540 10669 10668 +10540 10541 10670 +10540 10670 10669 +10541 10542 10670 +10542 10671 10670 +10542 10543 10672 +10542 10672 10671 +10543 10544 10672 +10544 10673 10672 +10544 10545 10674 +10544 10674 10673 +10545 10546 10674 +10546 10675 10674 +10546 10547 10676 +10546 10676 10675 +10547 10548 10676 +10548 10677 10676 +10548 10549 10678 +10548 10678 10677 +10549 10550 10678 +10550 10679 10678 +10550 10551 10680 +10550 10680 10679 +10551 10552 10680 +10552 10681 10680 +10552 10553 10682 +10552 10682 10681 +10553 10554 10682 +10554 10683 10682 +10554 10555 10684 +10554 10684 10683 +10555 10556 10684 +10556 10685 10684 +10556 10557 10686 +10556 10686 10685 +10557 10558 10686 +10558 10687 10686 +10558 10559 10688 +10558 10688 10687 +10559 10560 10688 +10560 10689 10688 +10560 10561 10690 +10560 10690 10689 +10562 10563 10692 +10562 10692 10691 +10563 10564 10692 +10564 10693 10692 +10564 10565 10694 +10564 10694 10693 +10565 10566 10694 +10566 10695 10694 +10566 10567 10696 +10566 10696 10695 +10567 10568 10696 +10568 10697 10696 +10568 10569 10698 +10568 10698 10697 +10569 10570 10698 +10570 10699 10698 +10570 10571 10700 +10570 10700 10699 +10571 10572 10700 +10572 10701 10700 +10572 10573 10702 +10572 10702 10701 +10573 10574 10702 +10574 10703 10702 +10574 10575 10704 +10574 10704 10703 +10575 10576 10704 +10576 10705 10704 +10576 10577 10706 +10576 10706 10705 +10577 10578 10706 +10578 10707 10706 +10578 10579 10708 +10578 10708 10707 +10579 10580 10708 +10580 10709 10708 +10580 10581 10710 +10580 10710 10709 +10581 10582 10710 +10582 10711 10710 +10582 10583 10712 +10582 10712 10711 +10583 10584 10712 +10584 10713 10712 +10584 10585 10714 +10584 10714 10713 +10585 10586 10714 +10586 10715 10714 +10586 10587 10716 +10586 10716 10715 +10587 10588 10716 +10588 10717 10716 +10588 10589 10718 +10588 10718 10717 +10589 10590 10718 +10590 10719 10718 +10590 10591 10720 +10590 10720 10719 +10591 10592 10720 +10592 10721 10720 +10592 10593 10722 +10592 10722 10721 +10593 10594 10722 +10594 10723 10722 +10594 10595 10724 +10594 10724 10723 +10595 10596 10724 +10596 10725 10724 +10596 10597 10726 +10596 10726 10725 +10597 10598 10726 +10598 10727 10726 +10598 10599 10728 +10598 10728 10727 +10599 10600 10728 +10600 10729 10728 +10600 10601 10730 +10600 10730 10729 +10601 10602 10730 +10602 10731 10730 +10602 10603 10732 +10602 10732 10731 +10603 10604 10732 +10604 10733 10732 +10604 10605 10734 +10604 10734 10733 +10605 10606 10734 +10606 10735 10734 +10606 10607 10736 +10606 10736 10735 +10607 10608 10736 +10608 10737 10736 +10608 10609 10738 +10608 10738 10737 +10609 10610 10738 +10610 10739 10738 +10610 10611 10740 +10610 10740 10739 +10611 10612 10740 +10612 10741 10740 +10612 10613 10742 +10612 10742 10741 +10613 10614 10742 +10614 10743 10742 +10614 10615 10744 +10614 10744 10743 +10615 10616 10744 +10616 10745 10744 +10616 10617 10746 +10616 10746 10745 +10617 10618 10746 +10618 10747 10746 +10618 10619 10748 +10618 10748 10747 +10619 10620 10748 +10620 10749 10748 +10620 10621 10750 +10620 10750 10749 +10621 10622 10750 +10622 10751 10750 +10622 10623 10752 +10622 10752 10751 +10623 10624 10752 +10624 10753 10752 +10624 10625 10754 +10624 10754 10753 +10625 10626 10754 +10626 10755 10754 +10626 10627 10756 +10626 10756 10755 +10627 10628 10756 +10628 10757 10756 +10628 10629 10758 +10628 10758 10757 +10629 10630 10758 +10630 10759 10758 +10630 10631 10760 +10630 10760 10759 +10631 10632 10760 +10632 10761 10760 +10632 10633 10762 +10632 10762 10761 +10633 10634 10762 +10634 10763 10762 +10634 10635 10764 +10634 10764 10763 +10635 10636 10764 +10636 10765 10764 +10636 10637 10766 +10636 10766 10765 +10637 10638 10766 +10638 10767 10766 +10638 10639 10768 +10638 10768 10767 +10639 10640 10768 +10640 10769 10768 +10640 10641 10770 +10640 10770 10769 +10641 10642 10770 +10642 10771 10770 +10642 10643 10772 +10642 10772 10771 +10643 10644 10772 +10644 10773 10772 +10644 10645 10774 +10644 10774 10773 +10645 10646 10774 +10646 10775 10774 +10646 10647 10776 +10646 10776 10775 +10647 10648 10776 +10648 10777 10776 +10648 10649 10778 +10648 10778 10777 +10649 10650 10778 +10650 10779 10778 +10650 10651 10780 +10650 10780 10779 +10651 10652 10780 +10652 10781 10780 +10652 10653 10782 +10652 10782 10781 +10653 10654 10782 +10654 10783 10782 +10654 10655 10784 +10654 10784 10783 +10655 10656 10784 +10656 10785 10784 +10656 10657 10786 +10656 10786 10785 +10657 10658 10786 +10658 10787 10786 +10658 10659 10788 +10658 10788 10787 +10659 10660 10788 +10660 10789 10788 +10660 10661 10790 +10660 10790 10789 +10661 10662 10790 +10662 10791 10790 +10662 10663 10792 +10662 10792 10791 +10663 10664 10792 +10664 10793 10792 +10664 10665 10794 +10664 10794 10793 +10665 10666 10794 +10666 10795 10794 +10666 10667 10796 +10666 10796 10795 +10667 10668 10796 +10668 10797 10796 +10668 10669 10798 +10668 10798 10797 +10669 10670 10798 +10670 10799 10798 +10670 10671 10800 +10670 10800 10799 +10671 10672 10800 +10672 10801 10800 +10672 10673 10802 +10672 10802 10801 +10673 10674 10802 +10674 10803 10802 +10674 10675 10804 +10674 10804 10803 +10675 10676 10804 +10676 10805 10804 +10676 10677 10806 +10676 10806 10805 +10677 10678 10806 +10678 10807 10806 +10678 10679 10808 +10678 10808 10807 +10679 10680 10808 +10680 10809 10808 +10680 10681 10810 +10680 10810 10809 +10681 10682 10810 +10682 10811 10810 +10682 10683 10812 +10682 10812 10811 +10683 10684 10812 +10684 10813 10812 +10684 10685 10814 +10684 10814 10813 +10685 10686 10814 +10686 10815 10814 +10686 10687 10816 +10686 10816 10815 +10687 10688 10816 +10688 10817 10816 +10688 10689 10818 +10688 10818 10817 +10689 10690 10818 +10690 10819 10818 +10691 10692 10820 +10692 10821 10820 +10692 10693 10822 +10692 10822 10821 +10693 10694 10822 +10694 10823 10822 +10694 10695 10824 +10694 10824 10823 +10695 10696 10824 +10696 10825 10824 +10696 10697 10826 +10696 10826 10825 +10697 10698 10826 +10698 10827 10826 +10698 10699 10828 +10698 10828 10827 +10699 10700 10828 +10700 10829 10828 +10700 10701 10830 +10700 10830 10829 +10701 10702 10830 +10702 10831 10830 +10702 10703 10832 +10702 10832 10831 +10703 10704 10832 +10704 10833 10832 +10704 10705 10834 +10704 10834 10833 +10705 10706 10834 +10706 10835 10834 +10706 10707 10836 +10706 10836 10835 +10707 10708 10836 +10708 10837 10836 +10708 10709 10838 +10708 10838 10837 +10709 10710 10838 +10710 10839 10838 +10710 10711 10840 +10710 10840 10839 +10711 10712 10840 +10712 10841 10840 +10712 10713 10842 +10712 10842 10841 +10713 10714 10842 +10714 10843 10842 +10714 10715 10844 +10714 10844 10843 +10715 10716 10844 +10716 10845 10844 +10716 10717 10846 +10716 10846 10845 +10717 10718 10846 +10718 10847 10846 +10718 10719 10848 +10718 10848 10847 +10719 10720 10848 +10720 10849 10848 +10720 10721 10850 +10720 10850 10849 +10721 10722 10850 +10722 10851 10850 +10722 10723 10852 +10722 10852 10851 +10723 10724 10852 +10724 10853 10852 +10724 10725 10854 +10724 10854 10853 +10725 10726 10854 +10726 10855 10854 +10726 10727 10856 +10726 10856 10855 +10727 10728 10856 +10728 10857 10856 +10728 10729 10858 +10728 10858 10857 +10729 10730 10858 +10730 10859 10858 +10730 10731 10860 +10730 10860 10859 +10731 10732 10860 +10732 10861 10860 +10732 10733 10862 +10732 10862 10861 +10733 10734 10862 +10734 10863 10862 +10734 10735 10864 +10734 10864 10863 +10735 10736 10864 +10736 10865 10864 +10736 10737 10866 +10736 10866 10865 +10737 10738 10866 +10738 10867 10866 +10738 10739 10868 +10738 10868 10867 +10739 10740 10868 +10740 10869 10868 +10740 10741 10870 +10740 10870 10869 +10741 10742 10870 +10742 10871 10870 +10742 10743 10872 +10742 10872 10871 +10743 10744 10872 +10744 10873 10872 +10744 10745 10874 +10744 10874 10873 +10745 10746 10874 +10746 10875 10874 +10746 10747 10876 +10746 10876 10875 +10747 10748 10876 +10748 10877 10876 +10748 10749 10878 +10748 10878 10877 +10749 10750 10878 +10750 10879 10878 +10750 10751 10880 +10750 10880 10879 +10751 10752 10880 +10752 10881 10880 +10752 10753 10882 +10752 10882 10881 +10753 10754 10882 +10754 10883 10882 +10754 10755 10884 +10754 10884 10883 +10755 10756 10884 +10756 10885 10884 +10756 10757 10886 +10756 10886 10885 +10757 10758 10886 +10758 10887 10886 +10758 10759 10888 +10758 10888 10887 +10759 10760 10888 +10760 10889 10888 +10760 10761 10890 +10760 10890 10889 +10761 10762 10890 +10762 10891 10890 +10762 10763 10892 +10762 10892 10891 +10763 10764 10892 +10764 10893 10892 +10764 10765 10894 +10764 10894 10893 +10765 10766 10894 +10766 10895 10894 +10766 10767 10896 +10766 10896 10895 +10767 10768 10896 +10768 10897 10896 +10768 10769 10898 +10768 10898 10897 +10769 10770 10898 +10770 10899 10898 +10770 10771 10900 +10770 10900 10899 +10771 10772 10900 +10772 10901 10900 +10772 10773 10902 +10772 10902 10901 +10773 10774 10902 +10774 10903 10902 +10774 10775 10904 +10774 10904 10903 +10775 10776 10904 +10776 10905 10904 +10776 10777 10906 +10776 10906 10905 +10777 10778 10906 +10778 10907 10906 +10778 10779 10908 +10778 10908 10907 +10779 10780 10908 +10780 10909 10908 +10780 10781 10910 +10780 10910 10909 +10781 10782 10910 +10782 10911 10910 +10782 10783 10912 +10782 10912 10911 +10783 10784 10912 +10784 10913 10912 +10784 10785 10914 +10784 10914 10913 +10785 10786 10914 +10786 10915 10914 +10786 10787 10916 +10786 10916 10915 +10787 10788 10916 +10788 10917 10916 +10788 10789 10918 +10788 10918 10917 +10789 10790 10918 +10790 10919 10918 +10790 10791 10920 +10790 10920 10919 +10791 10792 10920 +10792 10921 10920 +10792 10793 10922 +10792 10922 10921 +10793 10794 10922 +10794 10923 10922 +10794 10795 10924 +10794 10924 10923 +10795 10796 10924 +10796 10925 10924 +10796 10797 10926 +10796 10926 10925 +10797 10798 10926 +10798 10927 10926 +10798 10799 10928 +10798 10928 10927 +10799 10800 10928 +10800 10929 10928 +10800 10801 10930 +10800 10930 10929 +10801 10802 10930 +10802 10931 10930 +10802 10803 10932 +10802 10932 10931 +10803 10804 10932 +10804 10933 10932 +10804 10805 10934 +10804 10934 10933 +10805 10806 10934 +10806 10935 10934 +10806 10807 10936 +10806 10936 10935 +10807 10808 10936 +10808 10937 10936 +10808 10809 10938 +10808 10938 10937 +10809 10810 10938 +10810 10939 10938 +10810 10811 10940 +10810 10940 10939 +10811 10812 10940 +10812 10941 10940 +10812 10813 10942 +10812 10942 10941 +10813 10814 10942 +10814 10943 10942 +10814 10815 10944 +10814 10944 10943 +10815 10816 10944 +10816 10945 10944 +10816 10817 10946 +10816 10946 10945 +10817 10818 10946 +10818 10947 10946 +10818 10819 10948 +10818 10948 10947 +10820 10821 10950 +10820 10950 10949 +10821 10822 10950 +10822 10951 10950 +10822 10823 10952 +10822 10952 10951 +10823 10824 10952 +10824 10953 10952 +10824 10825 10954 +10824 10954 10953 +10825 10826 10954 +10826 10955 10954 +10826 10827 10956 +10826 10956 10955 +10827 10828 10956 +10828 10957 10956 +10828 10829 10958 +10828 10958 10957 +10829 10830 10958 +10830 10959 10958 +10830 10831 10960 +10830 10960 10959 +10831 10832 10960 +10832 10961 10960 +10832 10833 10962 +10832 10962 10961 +10833 10834 10962 +10834 10963 10962 +10834 10835 10964 +10834 10964 10963 +10835 10836 10964 +10836 10965 10964 +10836 10837 10966 +10836 10966 10965 +10837 10838 10966 +10838 10967 10966 +10838 10839 10968 +10838 10968 10967 +10839 10840 10968 +10840 10969 10968 +10840 10841 10970 +10840 10970 10969 +10841 10842 10970 +10842 10971 10970 +10842 10843 10972 +10842 10972 10971 +10843 10844 10972 +10844 10973 10972 +10844 10845 10974 +10844 10974 10973 +10845 10846 10974 +10846 10975 10974 +10846 10847 10976 +10846 10976 10975 +10847 10848 10976 +10848 10977 10976 +10848 10849 10978 +10848 10978 10977 +10849 10850 10978 +10850 10979 10978 +10850 10851 10980 +10850 10980 10979 +10851 10852 10980 +10852 10981 10980 +10852 10853 10982 +10852 10982 10981 +10853 10854 10982 +10854 10983 10982 +10854 10855 10984 +10854 10984 10983 +10855 10856 10984 +10856 10985 10984 +10856 10857 10986 +10856 10986 10985 +10857 10858 10986 +10858 10987 10986 +10858 10859 10988 +10858 10988 10987 +10859 10860 10988 +10860 10989 10988 +10860 10861 10990 +10860 10990 10989 +10861 10862 10990 +10862 10991 10990 +10862 10863 10992 +10862 10992 10991 +10863 10864 10992 +10864 10993 10992 +10864 10865 10994 +10864 10994 10993 +10865 10866 10994 +10866 10995 10994 +10866 10867 10996 +10866 10996 10995 +10867 10868 10996 +10868 10997 10996 +10868 10869 10998 +10868 10998 10997 +10869 10870 10998 +10870 10999 10998 +10870 10871 11000 +10870 11000 10999 +10871 10872 11000 +10872 11001 11000 +10872 10873 11002 +10872 11002 11001 +10873 10874 11002 +10874 11003 11002 +10874 10875 11004 +10874 11004 11003 +10875 10876 11004 +10876 11005 11004 +10876 10877 11006 +10876 11006 11005 +10877 10878 11006 +10878 11007 11006 +10878 10879 11008 +10878 11008 11007 +10879 10880 11008 +10880 11009 11008 +10880 10881 11010 +10880 11010 11009 +10881 10882 11010 +10882 11011 11010 +10882 10883 11012 +10882 11012 11011 +10883 10884 11012 +10884 11013 11012 +10884 10885 11014 +10884 11014 11013 +10885 10886 11014 +10886 11015 11014 +10886 10887 11016 +10886 11016 11015 +10887 10888 11016 +10888 11017 11016 +10888 10889 11018 +10888 11018 11017 +10889 10890 11018 +10890 11019 11018 +10890 10891 11020 +10890 11020 11019 +10891 10892 11020 +10892 11021 11020 +10892 10893 11022 +10892 11022 11021 +10893 10894 11022 +10894 11023 11022 +10894 10895 11024 +10894 11024 11023 +10895 10896 11024 +10896 11025 11024 +10896 10897 11026 +10896 11026 11025 +10897 10898 11026 +10898 11027 11026 +10898 10899 11028 +10898 11028 11027 +10899 10900 11028 +10900 11029 11028 +10900 10901 11030 +10900 11030 11029 +10901 10902 11030 +10902 11031 11030 +10902 10903 11032 +10902 11032 11031 +10903 10904 11032 +10904 11033 11032 +10904 10905 11034 +10904 11034 11033 +10905 10906 11034 +10906 11035 11034 +10906 10907 11036 +10906 11036 11035 +10907 10908 11036 +10908 11037 11036 +10908 10909 11038 +10908 11038 11037 +10909 10910 11038 +10910 11039 11038 +10910 10911 11040 +10910 11040 11039 +10911 10912 11040 +10912 11041 11040 +10912 10913 11042 +10912 11042 11041 +10913 10914 11042 +10914 11043 11042 +10914 10915 11044 +10914 11044 11043 +10915 10916 11044 +10916 11045 11044 +10916 10917 11046 +10916 11046 11045 +10917 10918 11046 +10918 11047 11046 +10918 10919 11048 +10918 11048 11047 +10919 10920 11048 +10920 11049 11048 +10920 10921 11050 +10920 11050 11049 +10921 10922 11050 +10922 11051 11050 +10922 10923 11052 +10922 11052 11051 +10923 10924 11052 +10924 11053 11052 +10924 10925 11054 +10924 11054 11053 +10925 10926 11054 +10926 11055 11054 +10926 10927 11056 +10926 11056 11055 +10927 10928 11056 +10928 11057 11056 +10928 10929 11058 +10928 11058 11057 +10929 10930 11058 +10930 11059 11058 +10930 10931 11060 +10930 11060 11059 +10931 10932 11060 +10932 11061 11060 +10932 10933 11062 +10932 11062 11061 +10933 10934 11062 +10934 11063 11062 +10934 10935 11064 +10934 11064 11063 +10935 10936 11064 +10936 11065 11064 +10936 10937 11066 +10936 11066 11065 +10937 10938 11066 +10938 11067 11066 +10938 10939 11068 +10938 11068 11067 +10939 10940 11068 +10940 11069 11068 +10940 10941 11070 +10940 11070 11069 +10941 10942 11070 +10942 11071 11070 +10942 10943 11072 +10942 11072 11071 +10943 10944 11072 +10944 11073 11072 +10944 10945 11074 +10944 11074 11073 +10945 10946 11074 +10946 11075 11074 +10946 10947 11076 +10946 11076 11075 +10947 10948 11076 +10948 11077 11076 +10949 10950 11078 +10950 11079 11078 +10950 10951 11080 +10950 11080 11079 +10951 10952 11080 +10952 11081 11080 +10952 10953 11082 +10952 11082 11081 +10953 10954 11082 +10954 11083 11082 +10954 10955 11084 +10954 11084 11083 +10955 10956 11084 +10956 11085 11084 +10956 10957 11086 +10956 11086 11085 +10957 10958 11086 +10958 11087 11086 +10958 10959 11088 +10958 11088 11087 +10959 10960 11088 +10960 11089 11088 +10960 10961 11090 +10960 11090 11089 +10961 10962 11090 +10962 11091 11090 +10962 10963 11092 +10962 11092 11091 +10963 10964 11092 +10964 11093 11092 +10964 10965 11094 +10964 11094 11093 +10965 10966 11094 +10966 11095 11094 +10966 10967 11096 +10966 11096 11095 +10967 10968 11096 +10968 11097 11096 +10968 10969 11098 +10968 11098 11097 +10969 10970 11098 +10970 11099 11098 +10970 10971 11100 +10970 11100 11099 +10971 10972 11100 +10972 11101 11100 +10972 10973 11102 +10972 11102 11101 +10973 10974 11102 +10974 11103 11102 +10974 10975 11104 +10974 11104 11103 +10975 10976 11104 +10976 11105 11104 +10976 10977 11106 +10976 11106 11105 +10977 10978 11106 +10978 11107 11106 +10978 10979 11108 +10978 11108 11107 +10979 10980 11108 +10980 11109 11108 +10980 10981 11110 +10980 11110 11109 +10981 10982 11110 +10982 11111 11110 +10982 10983 11112 +10982 11112 11111 +10983 10984 11112 +10984 11113 11112 +10984 10985 11114 +10984 11114 11113 +10985 10986 11114 +10986 11115 11114 +10986 10987 11116 +10986 11116 11115 +10987 10988 11116 +10988 11117 11116 +10988 10989 11118 +10988 11118 11117 +10989 10990 11118 +10990 11119 11118 +10990 10991 11120 +10990 11120 11119 +10991 10992 11120 +10992 11121 11120 +10992 10993 11122 +10992 11122 11121 +10993 10994 11122 +10994 11123 11122 +10994 10995 11124 +10994 11124 11123 +10995 10996 11124 +10996 11125 11124 +10996 10997 11126 +10996 11126 11125 +10997 10998 11126 +10998 11127 11126 +10998 10999 11128 +10998 11128 11127 +10999 11000 11128 +11000 11129 11128 +11000 11001 11130 +11000 11130 11129 +11001 11002 11130 +11002 11131 11130 +11002 11003 11132 +11002 11132 11131 +11003 11004 11132 +11004 11133 11132 +11004 11005 11134 +11004 11134 11133 +11005 11006 11134 +11006 11135 11134 +11006 11007 11136 +11006 11136 11135 +11007 11008 11136 +11008 11137 11136 +11008 11009 11138 +11008 11138 11137 +11009 11010 11138 +11010 11139 11138 +11010 11011 11140 +11010 11140 11139 +11011 11012 11140 +11012 11141 11140 +11012 11013 11142 +11012 11142 11141 +11013 11014 11142 +11014 11143 11142 +11014 11015 11144 +11014 11144 11143 +11015 11016 11144 +11016 11145 11144 +11016 11017 11146 +11016 11146 11145 +11017 11018 11146 +11018 11147 11146 +11018 11019 11148 +11018 11148 11147 +11019 11020 11148 +11020 11149 11148 +11020 11021 11150 +11020 11150 11149 +11021 11022 11150 +11022 11151 11150 +11022 11023 11152 +11022 11152 11151 +11023 11024 11152 +11024 11153 11152 +11024 11025 11154 +11024 11154 11153 +11025 11026 11154 +11026 11155 11154 +11026 11027 11156 +11026 11156 11155 +11027 11028 11156 +11028 11157 11156 +11028 11029 11158 +11028 11158 11157 +11029 11030 11158 +11030 11159 11158 +11030 11031 11160 +11030 11160 11159 +11031 11032 11160 +11032 11161 11160 +11032 11033 11162 +11032 11162 11161 +11033 11034 11162 +11034 11163 11162 +11034 11035 11164 +11034 11164 11163 +11035 11036 11164 +11036 11165 11164 +11036 11037 11166 +11036 11166 11165 +11037 11038 11166 +11038 11167 11166 +11038 11039 11168 +11038 11168 11167 +11039 11040 11168 +11040 11169 11168 +11040 11041 11170 +11040 11170 11169 +11041 11042 11170 +11042 11171 11170 +11042 11043 11172 +11042 11172 11171 +11043 11044 11172 +11044 11173 11172 +11044 11045 11174 +11044 11174 11173 +11045 11046 11174 +11046 11175 11174 +11046 11047 11176 +11046 11176 11175 +11047 11048 11176 +11048 11177 11176 +11048 11049 11178 +11048 11178 11177 +11049 11050 11178 +11050 11179 11178 +11050 11051 11180 +11050 11180 11179 +11051 11052 11180 +11052 11181 11180 +11052 11053 11182 +11052 11182 11181 +11053 11054 11182 +11054 11183 11182 +11054 11055 11184 +11054 11184 11183 +11055 11056 11184 +11056 11185 11184 +11056 11057 11186 +11056 11186 11185 +11057 11058 11186 +11058 11187 11186 +11058 11059 11188 +11058 11188 11187 +11059 11060 11188 +11060 11189 11188 +11060 11061 11190 +11060 11190 11189 +11061 11062 11190 +11062 11191 11190 +11062 11063 11192 +11062 11192 11191 +11063 11064 11192 +11064 11193 11192 +11064 11065 11194 +11064 11194 11193 +11065 11066 11194 +11066 11195 11194 +11066 11067 11196 +11066 11196 11195 +11067 11068 11196 +11068 11197 11196 +11068 11069 11198 +11068 11198 11197 +11069 11070 11198 +11070 11199 11198 +11070 11071 11200 +11070 11200 11199 +11071 11072 11200 +11072 11201 11200 +11072 11073 11202 +11072 11202 11201 +11073 11074 11202 +11074 11203 11202 +11074 11075 11204 +11074 11204 11203 +11075 11076 11204 +11076 11205 11204 +11076 11077 11206 +11076 11206 11205 +11078 11079 11208 +11078 11208 11207 +11079 11080 11208 +11080 11209 11208 +11080 11081 11210 +11080 11210 11209 +11081 11082 11210 +11082 11211 11210 +11082 11083 11212 +11082 11212 11211 +11083 11084 11212 +11084 11213 11212 +11084 11085 11214 +11084 11214 11213 +11085 11086 11214 +11086 11215 11214 +11086 11087 11216 +11086 11216 11215 +11087 11088 11216 +11088 11217 11216 +11088 11089 11218 +11088 11218 11217 +11089 11090 11218 +11090 11219 11218 +11090 11091 11220 +11090 11220 11219 +11091 11092 11220 +11092 11221 11220 +11092 11093 11222 +11092 11222 11221 +11093 11094 11222 +11094 11223 11222 +11094 11095 11224 +11094 11224 11223 +11095 11096 11224 +11096 11225 11224 +11096 11097 11226 +11096 11226 11225 +11097 11098 11226 +11098 11227 11226 +11098 11099 11228 +11098 11228 11227 +11099 11100 11228 +11100 11229 11228 +11100 11101 11230 +11100 11230 11229 +11101 11102 11230 +11102 11231 11230 +11102 11103 11232 +11102 11232 11231 +11103 11104 11232 +11104 11233 11232 +11104 11105 11234 +11104 11234 11233 +11105 11106 11234 +11106 11235 11234 +11106 11107 11236 +11106 11236 11235 +11107 11108 11236 +11108 11237 11236 +11108 11109 11238 +11108 11238 11237 +11109 11110 11238 +11110 11239 11238 +11110 11111 11240 +11110 11240 11239 +11111 11112 11240 +11112 11241 11240 +11112 11113 11242 +11112 11242 11241 +11113 11114 11242 +11114 11243 11242 +11114 11115 11244 +11114 11244 11243 +11115 11116 11244 +11116 11245 11244 +11116 11117 11246 +11116 11246 11245 +11117 11118 11246 +11118 11247 11246 +11118 11119 11248 +11118 11248 11247 +11119 11120 11248 +11120 11249 11248 +11120 11121 11250 +11120 11250 11249 +11121 11122 11250 +11122 11251 11250 +11122 11123 11252 +11122 11252 11251 +11123 11124 11252 +11124 11253 11252 +11124 11125 11254 +11124 11254 11253 +11125 11126 11254 +11126 11255 11254 +11126 11127 11256 +11126 11256 11255 +11127 11128 11256 +11128 11257 11256 +11128 11129 11258 +11128 11258 11257 +11129 11130 11258 +11130 11259 11258 +11130 11131 11260 +11130 11260 11259 +11131 11132 11260 +11132 11261 11260 +11132 11133 11262 +11132 11262 11261 +11133 11134 11262 +11134 11263 11262 +11134 11135 11264 +11134 11264 11263 +11135 11136 11264 +11136 11265 11264 +11136 11137 11266 +11136 11266 11265 +11137 11138 11266 +11138 11267 11266 +11138 11139 11268 +11138 11268 11267 +11139 11140 11268 +11140 11269 11268 +11140 11141 11270 +11140 11270 11269 +11141 11142 11270 +11142 11271 11270 +11142 11143 11272 +11142 11272 11271 +11143 11144 11272 +11144 11273 11272 +11144 11145 11274 +11144 11274 11273 +11145 11146 11274 +11146 11275 11274 +11146 11147 11276 +11146 11276 11275 +11147 11148 11276 +11148 11277 11276 +11148 11149 11278 +11148 11278 11277 +11149 11150 11278 +11150 11279 11278 +11150 11151 11280 +11150 11280 11279 +11151 11152 11280 +11152 11281 11280 +11152 11153 11282 +11152 11282 11281 +11153 11154 11282 +11154 11283 11282 +11154 11155 11284 +11154 11284 11283 +11155 11156 11284 +11156 11285 11284 +11156 11157 11286 +11156 11286 11285 +11157 11158 11286 +11158 11287 11286 +11158 11159 11288 +11158 11288 11287 +11159 11160 11288 +11160 11289 11288 +11160 11161 11290 +11160 11290 11289 +11161 11162 11290 +11162 11291 11290 +11162 11163 11292 +11162 11292 11291 +11163 11164 11292 +11164 11293 11292 +11164 11165 11294 +11164 11294 11293 +11165 11166 11294 +11166 11295 11294 +11166 11167 11296 +11166 11296 11295 +11167 11168 11296 +11168 11297 11296 +11168 11169 11298 +11168 11298 11297 +11169 11170 11298 +11170 11299 11298 +11170 11171 11300 +11170 11300 11299 +11171 11172 11300 +11172 11301 11300 +11172 11173 11302 +11172 11302 11301 +11173 11174 11302 +11174 11303 11302 +11174 11175 11304 +11174 11304 11303 +11175 11176 11304 +11176 11305 11304 +11176 11177 11306 +11176 11306 11305 +11177 11178 11306 +11178 11307 11306 +11178 11179 11308 +11178 11308 11307 +11179 11180 11308 +11180 11309 11308 +11180 11181 11310 +11180 11310 11309 +11181 11182 11310 +11182 11311 11310 +11182 11183 11312 +11182 11312 11311 +11183 11184 11312 +11184 11313 11312 +11184 11185 11314 +11184 11314 11313 +11185 11186 11314 +11186 11315 11314 +11186 11187 11316 +11186 11316 11315 +11187 11188 11316 +11188 11317 11316 +11188 11189 11318 +11188 11318 11317 +11189 11190 11318 +11190 11319 11318 +11190 11191 11320 +11190 11320 11319 +11191 11192 11320 +11192 11321 11320 +11192 11193 11322 +11192 11322 11321 +11193 11194 11322 +11194 11323 11322 +11194 11195 11324 +11194 11324 11323 +11195 11196 11324 +11196 11325 11324 +11196 11197 11326 +11196 11326 11325 +11197 11198 11326 +11198 11327 11326 +11198 11199 11328 +11198 11328 11327 +11199 11200 11328 +11200 11329 11328 +11200 11201 11330 +11200 11330 11329 +11201 11202 11330 +11202 11331 11330 +11202 11203 11332 +11202 11332 11331 +11203 11204 11332 +11204 11333 11332 +11204 11205 11334 +11204 11334 11333 +11205 11206 11334 +11206 11335 11334 +11207 11208 11336 +11208 11337 11336 +11208 11209 11338 +11208 11338 11337 +11209 11210 11338 +11210 11339 11338 +11210 11211 11340 +11210 11340 11339 +11211 11212 11340 +11212 11341 11340 +11212 11213 11342 +11212 11342 11341 +11213 11214 11342 +11214 11343 11342 +11214 11215 11344 +11214 11344 11343 +11215 11216 11344 +11216 11345 11344 +11216 11217 11346 +11216 11346 11345 +11217 11218 11346 +11218 11347 11346 +11218 11219 11348 +11218 11348 11347 +11219 11220 11348 +11220 11349 11348 +11220 11221 11350 +11220 11350 11349 +11221 11222 11350 +11222 11351 11350 +11222 11223 11352 +11222 11352 11351 +11223 11224 11352 +11224 11353 11352 +11224 11225 11354 +11224 11354 11353 +11225 11226 11354 +11226 11355 11354 +11226 11227 11356 +11226 11356 11355 +11227 11228 11356 +11228 11357 11356 +11228 11229 11358 +11228 11358 11357 +11229 11230 11358 +11230 11359 11358 +11230 11231 11360 +11230 11360 11359 +11231 11232 11360 +11232 11361 11360 +11232 11233 11362 +11232 11362 11361 +11233 11234 11362 +11234 11363 11362 +11234 11235 11364 +11234 11364 11363 +11235 11236 11364 +11236 11365 11364 +11236 11237 11366 +11236 11366 11365 +11237 11238 11366 +11238 11367 11366 +11238 11239 11368 +11238 11368 11367 +11239 11240 11368 +11240 11369 11368 +11240 11241 11370 +11240 11370 11369 +11241 11242 11370 +11242 11371 11370 +11242 11243 11372 +11242 11372 11371 +11243 11244 11372 +11244 11373 11372 +11244 11245 11374 +11244 11374 11373 +11245 11246 11374 +11246 11375 11374 +11246 11247 11376 +11246 11376 11375 +11247 11248 11376 +11248 11377 11376 +11248 11249 11378 +11248 11378 11377 +11249 11250 11378 +11250 11379 11378 +11250 11251 11380 +11250 11380 11379 +11251 11252 11380 +11252 11381 11380 +11252 11253 11382 +11252 11382 11381 +11253 11254 11382 +11254 11383 11382 +11254 11255 11384 +11254 11384 11383 +11255 11256 11384 +11256 11385 11384 +11256 11257 11386 +11256 11386 11385 +11257 11258 11386 +11258 11387 11386 +11258 11259 11388 +11258 11388 11387 +11259 11260 11388 +11260 11389 11388 +11260 11261 11390 +11260 11390 11389 +11261 11262 11390 +11262 11391 11390 +11262 11263 11392 +11262 11392 11391 +11263 11264 11392 +11264 11393 11392 +11264 11265 11394 +11264 11394 11393 +11265 11266 11394 +11266 11395 11394 +11266 11267 11396 +11266 11396 11395 +11267 11268 11396 +11268 11397 11396 +11268 11269 11398 +11268 11398 11397 +11269 11270 11398 +11270 11399 11398 +11270 11271 11400 +11270 11400 11399 +11271 11272 11400 +11272 11401 11400 +11272 11273 11402 +11272 11402 11401 +11273 11274 11402 +11274 11403 11402 +11274 11275 11404 +11274 11404 11403 +11275 11276 11404 +11276 11405 11404 +11276 11277 11406 +11276 11406 11405 +11277 11278 11406 +11278 11407 11406 +11278 11279 11408 +11278 11408 11407 +11279 11280 11408 +11280 11409 11408 +11280 11281 11410 +11280 11410 11409 +11281 11282 11410 +11282 11411 11410 +11282 11283 11412 +11282 11412 11411 +11283 11284 11412 +11284 11413 11412 +11284 11285 11414 +11284 11414 11413 +11285 11286 11414 +11286 11415 11414 +11286 11287 11416 +11286 11416 11415 +11287 11288 11416 +11288 11417 11416 +11288 11289 11418 +11288 11418 11417 +11289 11290 11418 +11290 11419 11418 +11290 11291 11420 +11290 11420 11419 +11291 11292 11420 +11292 11421 11420 +11292 11293 11422 +11292 11422 11421 +11293 11294 11422 +11294 11423 11422 +11294 11295 11424 +11294 11424 11423 +11295 11296 11424 +11296 11425 11424 +11296 11297 11426 +11296 11426 11425 +11297 11298 11426 +11298 11427 11426 +11298 11299 11428 +11298 11428 11427 +11299 11300 11428 +11300 11429 11428 +11300 11301 11430 +11300 11430 11429 +11301 11302 11430 +11302 11431 11430 +11302 11303 11432 +11302 11432 11431 +11303 11304 11432 +11304 11433 11432 +11304 11305 11434 +11304 11434 11433 +11305 11306 11434 +11306 11435 11434 +11306 11307 11436 +11306 11436 11435 +11307 11308 11436 +11308 11437 11436 +11308 11309 11438 +11308 11438 11437 +11309 11310 11438 +11310 11439 11438 +11310 11311 11440 +11310 11440 11439 +11311 11312 11440 +11312 11441 11440 +11312 11313 11442 +11312 11442 11441 +11313 11314 11442 +11314 11443 11442 +11314 11315 11444 +11314 11444 11443 +11315 11316 11444 +11316 11445 11444 +11316 11317 11446 +11316 11446 11445 +11317 11318 11446 +11318 11447 11446 +11318 11319 11448 +11318 11448 11447 +11319 11320 11448 +11320 11449 11448 +11320 11321 11450 +11320 11450 11449 +11321 11322 11450 +11322 11451 11450 +11322 11323 11452 +11322 11452 11451 +11323 11324 11452 +11324 11453 11452 +11324 11325 11454 +11324 11454 11453 +11325 11326 11454 +11326 11455 11454 +11326 11327 11456 +11326 11456 11455 +11327 11328 11456 +11328 11457 11456 +11328 11329 11458 +11328 11458 11457 +11329 11330 11458 +11330 11459 11458 +11330 11331 11460 +11330 11460 11459 +11331 11332 11460 +11332 11461 11460 +11332 11333 11462 +11332 11462 11461 +11333 11334 11462 +11334 11463 11462 +11334 11335 11464 +11334 11464 11463 +11336 11337 11466 +11336 11466 11465 +11337 11338 11466 +11338 11467 11466 +11338 11339 11468 +11338 11468 11467 +11339 11340 11468 +11340 11469 11468 +11340 11341 11470 +11340 11470 11469 +11341 11342 11470 +11342 11471 11470 +11342 11343 11472 +11342 11472 11471 +11343 11344 11472 +11344 11473 11472 +11344 11345 11474 +11344 11474 11473 +11345 11346 11474 +11346 11475 11474 +11346 11347 11476 +11346 11476 11475 +11347 11348 11476 +11348 11477 11476 +11348 11349 11478 +11348 11478 11477 +11349 11350 11478 +11350 11479 11478 +11350 11351 11480 +11350 11480 11479 +11351 11352 11480 +11352 11481 11480 +11352 11353 11482 +11352 11482 11481 +11353 11354 11482 +11354 11483 11482 +11354 11355 11484 +11354 11484 11483 +11355 11356 11484 +11356 11485 11484 +11356 11357 11486 +11356 11486 11485 +11357 11358 11486 +11358 11487 11486 +11358 11359 11488 +11358 11488 11487 +11359 11360 11488 +11360 11489 11488 +11360 11361 11490 +11360 11490 11489 +11361 11362 11490 +11362 11491 11490 +11362 11363 11492 +11362 11492 11491 +11363 11364 11492 +11364 11493 11492 +11364 11365 11494 +11364 11494 11493 +11365 11366 11494 +11366 11495 11494 +11366 11367 11496 +11366 11496 11495 +11367 11368 11496 +11368 11497 11496 +11368 11369 11498 +11368 11498 11497 +11369 11370 11498 +11370 11499 11498 +11370 11371 11500 +11370 11500 11499 +11371 11372 11500 +11372 11501 11500 +11372 11373 11502 +11372 11502 11501 +11373 11374 11502 +11374 11503 11502 +11374 11375 11504 +11374 11504 11503 +11375 11376 11504 +11376 11505 11504 +11376 11377 11506 +11376 11506 11505 +11377 11378 11506 +11378 11507 11506 +11378 11379 11508 +11378 11508 11507 +11379 11380 11508 +11380 11509 11508 +11380 11381 11510 +11380 11510 11509 +11381 11382 11510 +11382 11511 11510 +11382 11383 11512 +11382 11512 11511 +11383 11384 11512 +11384 11513 11512 +11384 11385 11514 +11384 11514 11513 +11385 11386 11514 +11386 11515 11514 +11386 11387 11516 +11386 11516 11515 +11387 11388 11516 +11388 11517 11516 +11388 11389 11518 +11388 11518 11517 +11389 11390 11518 +11390 11519 11518 +11390 11391 11520 +11390 11520 11519 +11391 11392 11520 +11392 11521 11520 +11392 11393 11522 +11392 11522 11521 +11393 11394 11522 +11394 11523 11522 +11394 11395 11524 +11394 11524 11523 +11395 11396 11524 +11396 11525 11524 +11396 11397 11526 +11396 11526 11525 +11397 11398 11526 +11398 11527 11526 +11398 11399 11528 +11398 11528 11527 +11399 11400 11528 +11400 11529 11528 +11400 11401 11530 +11400 11530 11529 +11401 11402 11530 +11402 11531 11530 +11402 11403 11532 +11402 11532 11531 +11403 11404 11532 +11404 11533 11532 +11404 11405 11534 +11404 11534 11533 +11405 11406 11534 +11406 11535 11534 +11406 11407 11536 +11406 11536 11535 +11407 11408 11536 +11408 11537 11536 +11408 11409 11538 +11408 11538 11537 +11409 11410 11538 +11410 11539 11538 +11410 11411 11540 +11410 11540 11539 +11411 11412 11540 +11412 11541 11540 +11412 11413 11542 +11412 11542 11541 +11413 11414 11542 +11414 11543 11542 +11414 11415 11544 +11414 11544 11543 +11415 11416 11544 +11416 11545 11544 +11416 11417 11546 +11416 11546 11545 +11417 11418 11546 +11418 11547 11546 +11418 11419 11548 +11418 11548 11547 +11419 11420 11548 +11420 11549 11548 +11420 11421 11550 +11420 11550 11549 +11421 11422 11550 +11422 11551 11550 +11422 11423 11552 +11422 11552 11551 +11423 11424 11552 +11424 11553 11552 +11424 11425 11554 +11424 11554 11553 +11425 11426 11554 +11426 11555 11554 +11426 11427 11556 +11426 11556 11555 +11427 11428 11556 +11428 11557 11556 +11428 11429 11558 +11428 11558 11557 +11429 11430 11558 +11430 11559 11558 +11430 11431 11560 +11430 11560 11559 +11431 11432 11560 +11432 11561 11560 +11432 11433 11562 +11432 11562 11561 +11433 11434 11562 +11434 11563 11562 +11434 11435 11564 +11434 11564 11563 +11435 11436 11564 +11436 11565 11564 +11436 11437 11566 +11436 11566 11565 +11437 11438 11566 +11438 11567 11566 +11438 11439 11568 +11438 11568 11567 +11439 11440 11568 +11440 11569 11568 +11440 11441 11570 +11440 11570 11569 +11441 11442 11570 +11442 11571 11570 +11442 11443 11572 +11442 11572 11571 +11443 11444 11572 +11444 11573 11572 +11444 11445 11574 +11444 11574 11573 +11445 11446 11574 +11446 11575 11574 +11446 11447 11576 +11446 11576 11575 +11447 11448 11576 +11448 11577 11576 +11448 11449 11578 +11448 11578 11577 +11449 11450 11578 +11450 11579 11578 +11450 11451 11580 +11450 11580 11579 +11451 11452 11580 +11452 11581 11580 +11452 11453 11582 +11452 11582 11581 +11453 11454 11582 +11454 11583 11582 +11454 11455 11584 +11454 11584 11583 +11455 11456 11584 +11456 11585 11584 +11456 11457 11586 +11456 11586 11585 +11457 11458 11586 +11458 11587 11586 +11458 11459 11588 +11458 11588 11587 +11459 11460 11588 +11460 11589 11588 +11460 11461 11590 +11460 11590 11589 +11461 11462 11590 +11462 11591 11590 +11462 11463 11592 +11462 11592 11591 +11463 11464 11592 +11464 11593 11592 +11465 11466 11594 +11466 11595 11594 +11466 11467 11596 +11466 11596 11595 +11467 11468 11596 +11468 11597 11596 +11468 11469 11598 +11468 11598 11597 +11469 11470 11598 +11470 11599 11598 +11470 11471 11600 +11470 11600 11599 +11471 11472 11600 +11472 11601 11600 +11472 11473 11602 +11472 11602 11601 +11473 11474 11602 +11474 11603 11602 +11474 11475 11604 +11474 11604 11603 +11475 11476 11604 +11476 11605 11604 +11476 11477 11606 +11476 11606 11605 +11477 11478 11606 +11478 11607 11606 +11478 11479 11608 +11478 11608 11607 +11479 11480 11608 +11480 11609 11608 +11480 11481 11610 +11480 11610 11609 +11481 11482 11610 +11482 11611 11610 +11482 11483 11612 +11482 11612 11611 +11483 11484 11612 +11484 11613 11612 +11484 11485 11614 +11484 11614 11613 +11485 11486 11614 +11486 11615 11614 +11486 11487 11616 +11486 11616 11615 +11487 11488 11616 +11488 11617 11616 +11488 11489 11618 +11488 11618 11617 +11489 11490 11618 +11490 11619 11618 +11490 11491 11620 +11490 11620 11619 +11491 11492 11620 +11492 11621 11620 +11492 11493 11622 +11492 11622 11621 +11493 11494 11622 +11494 11623 11622 +11494 11495 11624 +11494 11624 11623 +11495 11496 11624 +11496 11625 11624 +11496 11497 11626 +11496 11626 11625 +11497 11498 11626 +11498 11627 11626 +11498 11499 11628 +11498 11628 11627 +11499 11500 11628 +11500 11629 11628 +11500 11501 11630 +11500 11630 11629 +11501 11502 11630 +11502 11631 11630 +11502 11503 11632 +11502 11632 11631 +11503 11504 11632 +11504 11633 11632 +11504 11505 11634 +11504 11634 11633 +11505 11506 11634 +11506 11635 11634 +11506 11507 11636 +11506 11636 11635 +11507 11508 11636 +11508 11637 11636 +11508 11509 11638 +11508 11638 11637 +11509 11510 11638 +11510 11639 11638 +11510 11511 11640 +11510 11640 11639 +11511 11512 11640 +11512 11641 11640 +11512 11513 11642 +11512 11642 11641 +11513 11514 11642 +11514 11643 11642 +11514 11515 11644 +11514 11644 11643 +11515 11516 11644 +11516 11645 11644 +11516 11517 11646 +11516 11646 11645 +11517 11518 11646 +11518 11647 11646 +11518 11519 11648 +11518 11648 11647 +11519 11520 11648 +11520 11649 11648 +11520 11521 11650 +11520 11650 11649 +11521 11522 11650 +11522 11651 11650 +11522 11523 11652 +11522 11652 11651 +11523 11524 11652 +11524 11653 11652 +11524 11525 11654 +11524 11654 11653 +11525 11526 11654 +11526 11655 11654 +11526 11527 11656 +11526 11656 11655 +11527 11528 11656 +11528 11657 11656 +11528 11529 11658 +11528 11658 11657 +11529 11530 11658 +11530 11659 11658 +11530 11531 11660 +11530 11660 11659 +11531 11532 11660 +11532 11661 11660 +11532 11533 11662 +11532 11662 11661 +11533 11534 11662 +11534 11663 11662 +11534 11535 11664 +11534 11664 11663 +11535 11536 11664 +11536 11665 11664 +11536 11537 11666 +11536 11666 11665 +11537 11538 11666 +11538 11667 11666 +11538 11539 11668 +11538 11668 11667 +11539 11540 11668 +11540 11669 11668 +11540 11541 11670 +11540 11670 11669 +11541 11542 11670 +11542 11671 11670 +11542 11543 11672 +11542 11672 11671 +11543 11544 11672 +11544 11673 11672 +11544 11545 11674 +11544 11674 11673 +11545 11546 11674 +11546 11675 11674 +11546 11547 11676 +11546 11676 11675 +11547 11548 11676 +11548 11677 11676 +11548 11549 11678 +11548 11678 11677 +11549 11550 11678 +11550 11679 11678 +11550 11551 11680 +11550 11680 11679 +11551 11552 11680 +11552 11681 11680 +11552 11553 11682 +11552 11682 11681 +11553 11554 11682 +11554 11683 11682 +11554 11555 11684 +11554 11684 11683 +11555 11556 11684 +11556 11685 11684 +11556 11557 11686 +11556 11686 11685 +11557 11558 11686 +11558 11687 11686 +11558 11559 11688 +11558 11688 11687 +11559 11560 11688 +11560 11689 11688 +11560 11561 11690 +11560 11690 11689 +11561 11562 11690 +11562 11691 11690 +11562 11563 11692 +11562 11692 11691 +11563 11564 11692 +11564 11693 11692 +11564 11565 11694 +11564 11694 11693 +11565 11566 11694 +11566 11695 11694 +11566 11567 11696 +11566 11696 11695 +11567 11568 11696 +11568 11697 11696 +11568 11569 11698 +11568 11698 11697 +11569 11570 11698 +11570 11699 11698 +11570 11571 11700 +11570 11700 11699 +11571 11572 11700 +11572 11701 11700 +11572 11573 11702 +11572 11702 11701 +11573 11574 11702 +11574 11703 11702 +11574 11575 11704 +11574 11704 11703 +11575 11576 11704 +11576 11705 11704 +11576 11577 11706 +11576 11706 11705 +11577 11578 11706 +11578 11707 11706 +11578 11579 11708 +11578 11708 11707 +11579 11580 11708 +11580 11709 11708 +11580 11581 11710 +11580 11710 11709 +11581 11582 11710 +11582 11711 11710 +11582 11583 11712 +11582 11712 11711 +11583 11584 11712 +11584 11713 11712 +11584 11585 11714 +11584 11714 11713 +11585 11586 11714 +11586 11715 11714 +11586 11587 11716 +11586 11716 11715 +11587 11588 11716 +11588 11717 11716 +11588 11589 11718 +11588 11718 11717 +11589 11590 11718 +11590 11719 11718 +11590 11591 11720 +11590 11720 11719 +11591 11592 11720 +11592 11721 11720 +11592 11593 11722 +11592 11722 11721 +11594 11595 11724 +11594 11724 11723 +11595 11596 11724 +11596 11725 11724 +11596 11597 11726 +11596 11726 11725 +11597 11598 11726 +11598 11727 11726 +11598 11599 11728 +11598 11728 11727 +11599 11600 11728 +11600 11729 11728 +11600 11601 11730 +11600 11730 11729 +11601 11602 11730 +11602 11731 11730 +11602 11603 11732 +11602 11732 11731 +11603 11604 11732 +11604 11733 11732 +11604 11605 11734 +11604 11734 11733 +11605 11606 11734 +11606 11735 11734 +11606 11607 11736 +11606 11736 11735 +11607 11608 11736 +11608 11737 11736 +11608 11609 11738 +11608 11738 11737 +11609 11610 11738 +11610 11739 11738 +11610 11611 11740 +11610 11740 11739 +11611 11612 11740 +11612 11741 11740 +11612 11613 11742 +11612 11742 11741 +11613 11614 11742 +11614 11743 11742 +11614 11615 11744 +11614 11744 11743 +11615 11616 11744 +11616 11745 11744 +11616 11617 11746 +11616 11746 11745 +11617 11618 11746 +11618 11747 11746 +11618 11619 11748 +11618 11748 11747 +11619 11620 11748 +11620 11749 11748 +11620 11621 11750 +11620 11750 11749 +11621 11622 11750 +11622 11751 11750 +11622 11623 11752 +11622 11752 11751 +11623 11624 11752 +11624 11753 11752 +11624 11625 11754 +11624 11754 11753 +11625 11626 11754 +11626 11755 11754 +11626 11627 11756 +11626 11756 11755 +11627 11628 11756 +11628 11757 11756 +11628 11629 11758 +11628 11758 11757 +11629 11630 11758 +11630 11759 11758 +11630 11631 11760 +11630 11760 11759 +11631 11632 11760 +11632 11761 11760 +11632 11633 11762 +11632 11762 11761 +11633 11634 11762 +11634 11763 11762 +11634 11635 11764 +11634 11764 11763 +11635 11636 11764 +11636 11765 11764 +11636 11637 11766 +11636 11766 11765 +11637 11638 11766 +11638 11767 11766 +11638 11639 11768 +11638 11768 11767 +11639 11640 11768 +11640 11769 11768 +11640 11641 11770 +11640 11770 11769 +11641 11642 11770 +11642 11771 11770 +11642 11643 11772 +11642 11772 11771 +11643 11644 11772 +11644 11773 11772 +11644 11645 11774 +11644 11774 11773 +11645 11646 11774 +11646 11775 11774 +11646 11647 11776 +11646 11776 11775 +11647 11648 11776 +11648 11777 11776 +11648 11649 11778 +11648 11778 11777 +11649 11650 11778 +11650 11779 11778 +11650 11651 11780 +11650 11780 11779 +11651 11652 11780 +11652 11781 11780 +11652 11653 11782 +11652 11782 11781 +11653 11654 11782 +11654 11783 11782 +11654 11655 11784 +11654 11784 11783 +11655 11656 11784 +11656 11785 11784 +11656 11657 11786 +11656 11786 11785 +11657 11658 11786 +11658 11787 11786 +11658 11659 11788 +11658 11788 11787 +11659 11660 11788 +11660 11789 11788 +11660 11661 11790 +11660 11790 11789 +11661 11662 11790 +11662 11791 11790 +11662 11663 11792 +11662 11792 11791 +11663 11664 11792 +11664 11793 11792 +11664 11665 11794 +11664 11794 11793 +11665 11666 11794 +11666 11795 11794 +11666 11667 11796 +11666 11796 11795 +11667 11668 11796 +11668 11797 11796 +11668 11669 11798 +11668 11798 11797 +11669 11670 11798 +11670 11799 11798 +11670 11671 11800 +11670 11800 11799 +11671 11672 11800 +11672 11801 11800 +11672 11673 11802 +11672 11802 11801 +11673 11674 11802 +11674 11803 11802 +11674 11675 11804 +11674 11804 11803 +11675 11676 11804 +11676 11805 11804 +11676 11677 11806 +11676 11806 11805 +11677 11678 11806 +11678 11807 11806 +11678 11679 11808 +11678 11808 11807 +11679 11680 11808 +11680 11809 11808 +11680 11681 11810 +11680 11810 11809 +11681 11682 11810 +11682 11811 11810 +11682 11683 11812 +11682 11812 11811 +11683 11684 11812 +11684 11813 11812 +11684 11685 11814 +11684 11814 11813 +11685 11686 11814 +11686 11815 11814 +11686 11687 11816 +11686 11816 11815 +11687 11688 11816 +11688 11817 11816 +11688 11689 11818 +11688 11818 11817 +11689 11690 11818 +11690 11819 11818 +11690 11691 11820 +11690 11820 11819 +11691 11692 11820 +11692 11821 11820 +11692 11693 11822 +11692 11822 11821 +11693 11694 11822 +11694 11823 11822 +11694 11695 11824 +11694 11824 11823 +11695 11696 11824 +11696 11825 11824 +11696 11697 11826 +11696 11826 11825 +11697 11698 11826 +11698 11827 11826 +11698 11699 11828 +11698 11828 11827 +11699 11700 11828 +11700 11829 11828 +11700 11701 11830 +11700 11830 11829 +11701 11702 11830 +11702 11831 11830 +11702 11703 11832 +11702 11832 11831 +11703 11704 11832 +11704 11833 11832 +11704 11705 11834 +11704 11834 11833 +11705 11706 11834 +11706 11835 11834 +11706 11707 11836 +11706 11836 11835 +11707 11708 11836 +11708 11837 11836 +11708 11709 11838 +11708 11838 11837 +11709 11710 11838 +11710 11839 11838 +11710 11711 11840 +11710 11840 11839 +11711 11712 11840 +11712 11841 11840 +11712 11713 11842 +11712 11842 11841 +11713 11714 11842 +11714 11843 11842 +11714 11715 11844 +11714 11844 11843 +11715 11716 11844 +11716 11845 11844 +11716 11717 11846 +11716 11846 11845 +11717 11718 11846 +11718 11847 11846 +11718 11719 11848 +11718 11848 11847 +11719 11720 11848 +11720 11849 11848 +11720 11721 11850 +11720 11850 11849 +11721 11722 11850 +11722 11851 11850 +11723 11724 11852 +11724 11853 11852 +11724 11725 11854 +11724 11854 11853 +11725 11726 11854 +11726 11855 11854 +11726 11727 11856 +11726 11856 11855 +11727 11728 11856 +11728 11857 11856 +11728 11729 11858 +11728 11858 11857 +11729 11730 11858 +11730 11859 11858 +11730 11731 11860 +11730 11860 11859 +11731 11732 11860 +11732 11861 11860 +11732 11733 11862 +11732 11862 11861 +11733 11734 11862 +11734 11863 11862 +11734 11735 11864 +11734 11864 11863 +11735 11736 11864 +11736 11865 11864 +11736 11737 11866 +11736 11866 11865 +11737 11738 11866 +11738 11867 11866 +11738 11739 11868 +11738 11868 11867 +11739 11740 11868 +11740 11869 11868 +11740 11741 11870 +11740 11870 11869 +11741 11742 11870 +11742 11871 11870 +11742 11743 11872 +11742 11872 11871 +11743 11744 11872 +11744 11873 11872 +11744 11745 11874 +11744 11874 11873 +11745 11746 11874 +11746 11875 11874 +11746 11747 11876 +11746 11876 11875 +11747 11748 11876 +11748 11877 11876 +11748 11749 11878 +11748 11878 11877 +11749 11750 11878 +11750 11879 11878 +11750 11751 11880 +11750 11880 11879 +11751 11752 11880 +11752 11881 11880 +11752 11753 11882 +11752 11882 11881 +11753 11754 11882 +11754 11883 11882 +11754 11755 11884 +11754 11884 11883 +11755 11756 11884 +11756 11885 11884 +11756 11757 11886 +11756 11886 11885 +11757 11758 11886 +11758 11887 11886 +11758 11759 11888 +11758 11888 11887 +11759 11760 11888 +11760 11889 11888 +11760 11761 11890 +11760 11890 11889 +11761 11762 11890 +11762 11891 11890 +11762 11763 11892 +11762 11892 11891 +11763 11764 11892 +11764 11893 11892 +11764 11765 11894 +11764 11894 11893 +11765 11766 11894 +11766 11895 11894 +11766 11767 11896 +11766 11896 11895 +11767 11768 11896 +11768 11897 11896 +11768 11769 11898 +11768 11898 11897 +11769 11770 11898 +11770 11899 11898 +11770 11771 11900 +11770 11900 11899 +11771 11772 11900 +11772 11901 11900 +11772 11773 11902 +11772 11902 11901 +11773 11774 11902 +11774 11903 11902 +11774 11775 11904 +11774 11904 11903 +11775 11776 11904 +11776 11905 11904 +11776 11777 11906 +11776 11906 11905 +11777 11778 11906 +11778 11907 11906 +11778 11779 11908 +11778 11908 11907 +11779 11780 11908 +11780 11909 11908 +11780 11781 11910 +11780 11910 11909 +11781 11782 11910 +11782 11911 11910 +11782 11783 11912 +11782 11912 11911 +11783 11784 11912 +11784 11913 11912 +11784 11785 11914 +11784 11914 11913 +11785 11786 11914 +11786 11915 11914 +11786 11787 11916 +11786 11916 11915 +11787 11788 11916 +11788 11917 11916 +11788 11789 11918 +11788 11918 11917 +11789 11790 11918 +11790 11919 11918 +11790 11791 11920 +11790 11920 11919 +11791 11792 11920 +11792 11921 11920 +11792 11793 11922 +11792 11922 11921 +11793 11794 11922 +11794 11923 11922 +11794 11795 11924 +11794 11924 11923 +11795 11796 11924 +11796 11925 11924 +11796 11797 11926 +11796 11926 11925 +11797 11798 11926 +11798 11927 11926 +11798 11799 11928 +11798 11928 11927 +11799 11800 11928 +11800 11929 11928 +11800 11801 11930 +11800 11930 11929 +11801 11802 11930 +11802 11931 11930 +11802 11803 11932 +11802 11932 11931 +11803 11804 11932 +11804 11933 11932 +11804 11805 11934 +11804 11934 11933 +11805 11806 11934 +11806 11935 11934 +11806 11807 11936 +11806 11936 11935 +11807 11808 11936 +11808 11937 11936 +11808 11809 11938 +11808 11938 11937 +11809 11810 11938 +11810 11939 11938 +11810 11811 11940 +11810 11940 11939 +11811 11812 11940 +11812 11941 11940 +11812 11813 11942 +11812 11942 11941 +11813 11814 11942 +11814 11943 11942 +11814 11815 11944 +11814 11944 11943 +11815 11816 11944 +11816 11945 11944 +11816 11817 11946 +11816 11946 11945 +11817 11818 11946 +11818 11947 11946 +11818 11819 11948 +11818 11948 11947 +11819 11820 11948 +11820 11949 11948 +11820 11821 11950 +11820 11950 11949 +11821 11822 11950 +11822 11951 11950 +11822 11823 11952 +11822 11952 11951 +11823 11824 11952 +11824 11953 11952 +11824 11825 11954 +11824 11954 11953 +11825 11826 11954 +11826 11955 11954 +11826 11827 11956 +11826 11956 11955 +11827 11828 11956 +11828 11957 11956 +11828 11829 11958 +11828 11958 11957 +11829 11830 11958 +11830 11959 11958 +11830 11831 11960 +11830 11960 11959 +11831 11832 11960 +11832 11961 11960 +11832 11833 11962 +11832 11962 11961 +11833 11834 11962 +11834 11963 11962 +11834 11835 11964 +11834 11964 11963 +11835 11836 11964 +11836 11965 11964 +11836 11837 11966 +11836 11966 11965 +11837 11838 11966 +11838 11967 11966 +11838 11839 11968 +11838 11968 11967 +11839 11840 11968 +11840 11969 11968 +11840 11841 11970 +11840 11970 11969 +11841 11842 11970 +11842 11971 11970 +11842 11843 11972 +11842 11972 11971 +11843 11844 11972 +11844 11973 11972 +11844 11845 11974 +11844 11974 11973 +11845 11846 11974 +11846 11975 11974 +11846 11847 11976 +11846 11976 11975 +11847 11848 11976 +11848 11977 11976 +11848 11849 11978 +11848 11978 11977 +11849 11850 11978 +11850 11979 11978 +11850 11851 11980 +11850 11980 11979 +11852 11853 11982 +11852 11982 11981 +11853 11854 11982 +11854 11983 11982 +11854 11855 11984 +11854 11984 11983 +11855 11856 11984 +11856 11985 11984 +11856 11857 11986 +11856 11986 11985 +11857 11858 11986 +11858 11987 11986 +11858 11859 11988 +11858 11988 11987 +11859 11860 11988 +11860 11989 11988 +11860 11861 11990 +11860 11990 11989 +11861 11862 11990 +11862 11991 11990 +11862 11863 11992 +11862 11992 11991 +11863 11864 11992 +11864 11993 11992 +11864 11865 11994 +11864 11994 11993 +11865 11866 11994 +11866 11995 11994 +11866 11867 11996 +11866 11996 11995 +11867 11868 11996 +11868 11997 11996 +11868 11869 11998 +11868 11998 11997 +11869 11870 11998 +11870 11999 11998 +11870 11871 12000 +11870 12000 11999 +11871 11872 12000 +11872 12001 12000 +11872 11873 12002 +11872 12002 12001 +11873 11874 12002 +11874 12003 12002 +11874 11875 12004 +11874 12004 12003 +11875 11876 12004 +11876 12005 12004 +11876 11877 12006 +11876 12006 12005 +11877 11878 12006 +11878 12007 12006 +11878 11879 12008 +11878 12008 12007 +11879 11880 12008 +11880 12009 12008 +11880 11881 12010 +11880 12010 12009 +11881 11882 12010 +11882 12011 12010 +11882 11883 12012 +11882 12012 12011 +11883 11884 12012 +11884 12013 12012 +11884 11885 12014 +11884 12014 12013 +11885 11886 12014 +11886 12015 12014 +11886 11887 12016 +11886 12016 12015 +11887 11888 12016 +11888 12017 12016 +11888 11889 12018 +11888 12018 12017 +11889 11890 12018 +11890 12019 12018 +11890 11891 12020 +11890 12020 12019 +11891 11892 12020 +11892 12021 12020 +11892 11893 12022 +11892 12022 12021 +11893 11894 12022 +11894 12023 12022 +11894 11895 12024 +11894 12024 12023 +11895 11896 12024 +11896 12025 12024 +11896 11897 12026 +11896 12026 12025 +11897 11898 12026 +11898 12027 12026 +11898 11899 12028 +11898 12028 12027 +11899 11900 12028 +11900 12029 12028 +11900 11901 12030 +11900 12030 12029 +11901 11902 12030 +11902 12031 12030 +11902 11903 12032 +11902 12032 12031 +11903 11904 12032 +11904 12033 12032 +11904 11905 12034 +11904 12034 12033 +11905 11906 12034 +11906 12035 12034 +11906 11907 12036 +11906 12036 12035 +11907 11908 12036 +11908 12037 12036 +11908 11909 12038 +11908 12038 12037 +11909 11910 12038 +11910 12039 12038 +11910 11911 12040 +11910 12040 12039 +11911 11912 12040 +11912 12041 12040 +11912 11913 12042 +11912 12042 12041 +11913 11914 12042 +11914 12043 12042 +11914 11915 12044 +11914 12044 12043 +11915 11916 12044 +11916 12045 12044 +11916 11917 12046 +11916 12046 12045 +11917 11918 12046 +11918 12047 12046 +11918 11919 12048 +11918 12048 12047 +11919 11920 12048 +11920 12049 12048 +11920 11921 12050 +11920 12050 12049 +11921 11922 12050 +11922 12051 12050 +11922 11923 12052 +11922 12052 12051 +11923 11924 12052 +11924 12053 12052 +11924 11925 12054 +11924 12054 12053 +11925 11926 12054 +11926 12055 12054 +11926 11927 12056 +11926 12056 12055 +11927 11928 12056 +11928 12057 12056 +11928 11929 12058 +11928 12058 12057 +11929 11930 12058 +11930 12059 12058 +11930 11931 12060 +11930 12060 12059 +11931 11932 12060 +11932 12061 12060 +11932 11933 12062 +11932 12062 12061 +11933 11934 12062 +11934 12063 12062 +11934 11935 12064 +11934 12064 12063 +11935 11936 12064 +11936 12065 12064 +11936 11937 12066 +11936 12066 12065 +11937 11938 12066 +11938 12067 12066 +11938 11939 12068 +11938 12068 12067 +11939 11940 12068 +11940 12069 12068 +11940 11941 12070 +11940 12070 12069 +11941 11942 12070 +11942 12071 12070 +11942 11943 12072 +11942 12072 12071 +11943 11944 12072 +11944 12073 12072 +11944 11945 12074 +11944 12074 12073 +11945 11946 12074 +11946 12075 12074 +11946 11947 12076 +11946 12076 12075 +11947 11948 12076 +11948 12077 12076 +11948 11949 12078 +11948 12078 12077 +11949 11950 12078 +11950 12079 12078 +11950 11951 12080 +11950 12080 12079 +11951 11952 12080 +11952 12081 12080 +11952 11953 12082 +11952 12082 12081 +11953 11954 12082 +11954 12083 12082 +11954 11955 12084 +11954 12084 12083 +11955 11956 12084 +11956 12085 12084 +11956 11957 12086 +11956 12086 12085 +11957 11958 12086 +11958 12087 12086 +11958 11959 12088 +11958 12088 12087 +11959 11960 12088 +11960 12089 12088 +11960 11961 12090 +11960 12090 12089 +11961 11962 12090 +11962 12091 12090 +11962 11963 12092 +11962 12092 12091 +11963 11964 12092 +11964 12093 12092 +11964 11965 12094 +11964 12094 12093 +11965 11966 12094 +11966 12095 12094 +11966 11967 12096 +11966 12096 12095 +11967 11968 12096 +11968 12097 12096 +11968 11969 12098 +11968 12098 12097 +11969 11970 12098 +11970 12099 12098 +11970 11971 12100 +11970 12100 12099 +11971 11972 12100 +11972 12101 12100 +11972 11973 12102 +11972 12102 12101 +11973 11974 12102 +11974 12103 12102 +11974 11975 12104 +11974 12104 12103 +11975 11976 12104 +11976 12105 12104 +11976 11977 12106 +11976 12106 12105 +11977 11978 12106 +11978 12107 12106 +11978 11979 12108 +11978 12108 12107 +11979 11980 12108 +11980 12109 12108 +11981 11982 12110 +11982 12111 12110 +11982 11983 12112 +11982 12112 12111 +11983 11984 12112 +11984 12113 12112 +11984 11985 12114 +11984 12114 12113 +11985 11986 12114 +11986 12115 12114 +11986 11987 12116 +11986 12116 12115 +11987 11988 12116 +11988 12117 12116 +11988 11989 12118 +11988 12118 12117 +11989 11990 12118 +11990 12119 12118 +11990 11991 12120 +11990 12120 12119 +11991 11992 12120 +11992 12121 12120 +11992 11993 12122 +11992 12122 12121 +11993 11994 12122 +11994 12123 12122 +11994 11995 12124 +11994 12124 12123 +11995 11996 12124 +11996 12125 12124 +11996 11997 12126 +11996 12126 12125 +11997 11998 12126 +11998 12127 12126 +11998 11999 12128 +11998 12128 12127 +11999 12000 12128 +12000 12129 12128 +12000 12001 12130 +12000 12130 12129 +12001 12002 12130 +12002 12131 12130 +12002 12003 12132 +12002 12132 12131 +12003 12004 12132 +12004 12133 12132 +12004 12005 12134 +12004 12134 12133 +12005 12006 12134 +12006 12135 12134 +12006 12007 12136 +12006 12136 12135 +12007 12008 12136 +12008 12137 12136 +12008 12009 12138 +12008 12138 12137 +12009 12010 12138 +12010 12139 12138 +12010 12011 12140 +12010 12140 12139 +12011 12012 12140 +12012 12141 12140 +12012 12013 12142 +12012 12142 12141 +12013 12014 12142 +12014 12143 12142 +12014 12015 12144 +12014 12144 12143 +12015 12016 12144 +12016 12145 12144 +12016 12017 12146 +12016 12146 12145 +12017 12018 12146 +12018 12147 12146 +12018 12019 12148 +12018 12148 12147 +12019 12020 12148 +12020 12149 12148 +12020 12021 12150 +12020 12150 12149 +12021 12022 12150 +12022 12151 12150 +12022 12023 12152 +12022 12152 12151 +12023 12024 12152 +12024 12153 12152 +12024 12025 12154 +12024 12154 12153 +12025 12026 12154 +12026 12155 12154 +12026 12027 12156 +12026 12156 12155 +12027 12028 12156 +12028 12157 12156 +12028 12029 12158 +12028 12158 12157 +12029 12030 12158 +12030 12159 12158 +12030 12031 12160 +12030 12160 12159 +12031 12032 12160 +12032 12161 12160 +12032 12033 12162 +12032 12162 12161 +12033 12034 12162 +12034 12163 12162 +12034 12035 12164 +12034 12164 12163 +12035 12036 12164 +12036 12165 12164 +12036 12037 12166 +12036 12166 12165 +12037 12038 12166 +12038 12167 12166 +12038 12039 12168 +12038 12168 12167 +12039 12040 12168 +12040 12169 12168 +12040 12041 12170 +12040 12170 12169 +12041 12042 12170 +12042 12171 12170 +12042 12043 12172 +12042 12172 12171 +12043 12044 12172 +12044 12173 12172 +12044 12045 12174 +12044 12174 12173 +12045 12046 12174 +12046 12175 12174 +12046 12047 12176 +12046 12176 12175 +12047 12048 12176 +12048 12177 12176 +12048 12049 12178 +12048 12178 12177 +12049 12050 12178 +12050 12179 12178 +12050 12051 12180 +12050 12180 12179 +12051 12052 12180 +12052 12181 12180 +12052 12053 12182 +12052 12182 12181 +12053 12054 12182 +12054 12183 12182 +12054 12055 12184 +12054 12184 12183 +12055 12056 12184 +12056 12185 12184 +12056 12057 12186 +12056 12186 12185 +12057 12058 12186 +12058 12187 12186 +12058 12059 12188 +12058 12188 12187 +12059 12060 12188 +12060 12189 12188 +12060 12061 12190 +12060 12190 12189 +12061 12062 12190 +12062 12191 12190 +12062 12063 12192 +12062 12192 12191 +12063 12064 12192 +12064 12193 12192 +12064 12065 12194 +12064 12194 12193 +12065 12066 12194 +12066 12195 12194 +12066 12067 12196 +12066 12196 12195 +12067 12068 12196 +12068 12197 12196 +12068 12069 12198 +12068 12198 12197 +12069 12070 12198 +12070 12199 12198 +12070 12071 12200 +12070 12200 12199 +12071 12072 12200 +12072 12201 12200 +12072 12073 12202 +12072 12202 12201 +12073 12074 12202 +12074 12203 12202 +12074 12075 12204 +12074 12204 12203 +12075 12076 12204 +12076 12205 12204 +12076 12077 12206 +12076 12206 12205 +12077 12078 12206 +12078 12207 12206 +12078 12079 12208 +12078 12208 12207 +12079 12080 12208 +12080 12209 12208 +12080 12081 12210 +12080 12210 12209 +12081 12082 12210 +12082 12211 12210 +12082 12083 12212 +12082 12212 12211 +12083 12084 12212 +12084 12213 12212 +12084 12085 12214 +12084 12214 12213 +12085 12086 12214 +12086 12215 12214 +12086 12087 12216 +12086 12216 12215 +12087 12088 12216 +12088 12217 12216 +12088 12089 12218 +12088 12218 12217 +12089 12090 12218 +12090 12219 12218 +12090 12091 12220 +12090 12220 12219 +12091 12092 12220 +12092 12221 12220 +12092 12093 12222 +12092 12222 12221 +12093 12094 12222 +12094 12223 12222 +12094 12095 12224 +12094 12224 12223 +12095 12096 12224 +12096 12225 12224 +12096 12097 12226 +12096 12226 12225 +12097 12098 12226 +12098 12227 12226 +12098 12099 12228 +12098 12228 12227 +12099 12100 12228 +12100 12229 12228 +12100 12101 12230 +12100 12230 12229 +12101 12102 12230 +12102 12231 12230 +12102 12103 12232 +12102 12232 12231 +12103 12104 12232 +12104 12233 12232 +12104 12105 12234 +12104 12234 12233 +12105 12106 12234 +12106 12235 12234 +12106 12107 12236 +12106 12236 12235 +12107 12108 12236 +12108 12237 12236 +12108 12109 12238 +12108 12238 12237 +12110 12111 12240 +12110 12240 12239 +12111 12112 12240 +12112 12241 12240 +12112 12113 12242 +12112 12242 12241 +12113 12114 12242 +12114 12243 12242 +12114 12115 12244 +12114 12244 12243 +12115 12116 12244 +12116 12245 12244 +12116 12117 12246 +12116 12246 12245 +12117 12118 12246 +12118 12247 12246 +12118 12119 12248 +12118 12248 12247 +12119 12120 12248 +12120 12249 12248 +12120 12121 12250 +12120 12250 12249 +12121 12122 12250 +12122 12251 12250 +12122 12123 12252 +12122 12252 12251 +12123 12124 12252 +12124 12253 12252 +12124 12125 12254 +12124 12254 12253 +12125 12126 12254 +12126 12255 12254 +12126 12127 12256 +12126 12256 12255 +12127 12128 12256 +12128 12257 12256 +12128 12129 12258 +12128 12258 12257 +12129 12130 12258 +12130 12259 12258 +12130 12131 12260 +12130 12260 12259 +12131 12132 12260 +12132 12261 12260 +12132 12133 12262 +12132 12262 12261 +12133 12134 12262 +12134 12263 12262 +12134 12135 12264 +12134 12264 12263 +12135 12136 12264 +12136 12265 12264 +12136 12137 12266 +12136 12266 12265 +12137 12138 12266 +12138 12267 12266 +12138 12139 12268 +12138 12268 12267 +12139 12140 12268 +12140 12269 12268 +12140 12141 12270 +12140 12270 12269 +12141 12142 12270 +12142 12271 12270 +12142 12143 12272 +12142 12272 12271 +12143 12144 12272 +12144 12273 12272 +12144 12145 12274 +12144 12274 12273 +12145 12146 12274 +12146 12275 12274 +12146 12147 12276 +12146 12276 12275 +12147 12148 12276 +12148 12277 12276 +12148 12149 12278 +12148 12278 12277 +12149 12150 12278 +12150 12279 12278 +12150 12151 12280 +12150 12280 12279 +12151 12152 12280 +12152 12281 12280 +12152 12153 12282 +12152 12282 12281 +12153 12154 12282 +12154 12283 12282 +12154 12155 12284 +12154 12284 12283 +12155 12156 12284 +12156 12285 12284 +12156 12157 12286 +12156 12286 12285 +12157 12158 12286 +12158 12287 12286 +12158 12159 12288 +12158 12288 12287 +12159 12160 12288 +12160 12289 12288 +12160 12161 12290 +12160 12290 12289 +12161 12162 12290 +12162 12291 12290 +12162 12163 12292 +12162 12292 12291 +12163 12164 12292 +12164 12293 12292 +12164 12165 12294 +12164 12294 12293 +12165 12166 12294 +12166 12295 12294 +12166 12167 12296 +12166 12296 12295 +12167 12168 12296 +12168 12297 12296 +12168 12169 12298 +12168 12298 12297 +12169 12170 12298 +12170 12299 12298 +12170 12171 12300 +12170 12300 12299 +12171 12172 12300 +12172 12301 12300 +12172 12173 12302 +12172 12302 12301 +12173 12174 12302 +12174 12303 12302 +12174 12175 12304 +12174 12304 12303 +12175 12176 12304 +12176 12305 12304 +12176 12177 12306 +12176 12306 12305 +12177 12178 12306 +12178 12307 12306 +12178 12179 12308 +12178 12308 12307 +12179 12180 12308 +12180 12309 12308 +12180 12181 12310 +12180 12310 12309 +12181 12182 12310 +12182 12311 12310 +12182 12183 12312 +12182 12312 12311 +12183 12184 12312 +12184 12313 12312 +12184 12185 12314 +12184 12314 12313 +12185 12186 12314 +12186 12315 12314 +12186 12187 12316 +12186 12316 12315 +12187 12188 12316 +12188 12317 12316 +12188 12189 12318 +12188 12318 12317 +12189 12190 12318 +12190 12319 12318 +12190 12191 12320 +12190 12320 12319 +12191 12192 12320 +12192 12321 12320 +12192 12193 12322 +12192 12322 12321 +12193 12194 12322 +12194 12323 12322 +12194 12195 12324 +12194 12324 12323 +12195 12196 12324 +12196 12325 12324 +12196 12197 12326 +12196 12326 12325 +12197 12198 12326 +12198 12327 12326 +12198 12199 12328 +12198 12328 12327 +12199 12200 12328 +12200 12329 12328 +12200 12201 12330 +12200 12330 12329 +12201 12202 12330 +12202 12331 12330 +12202 12203 12332 +12202 12332 12331 +12203 12204 12332 +12204 12333 12332 +12204 12205 12334 +12204 12334 12333 +12205 12206 12334 +12206 12335 12334 +12206 12207 12336 +12206 12336 12335 +12207 12208 12336 +12208 12337 12336 +12208 12209 12338 +12208 12338 12337 +12209 12210 12338 +12210 12339 12338 +12210 12211 12340 +12210 12340 12339 +12211 12212 12340 +12212 12341 12340 +12212 12213 12342 +12212 12342 12341 +12213 12214 12342 +12214 12343 12342 +12214 12215 12344 +12214 12344 12343 +12215 12216 12344 +12216 12345 12344 +12216 12217 12346 +12216 12346 12345 +12217 12218 12346 +12218 12347 12346 +12218 12219 12348 +12218 12348 12347 +12219 12220 12348 +12220 12349 12348 +12220 12221 12350 +12220 12350 12349 +12221 12222 12350 +12222 12351 12350 +12222 12223 12352 +12222 12352 12351 +12223 12224 12352 +12224 12353 12352 +12224 12225 12354 +12224 12354 12353 +12225 12226 12354 +12226 12355 12354 +12226 12227 12356 +12226 12356 12355 +12227 12228 12356 +12228 12357 12356 +12228 12229 12358 +12228 12358 12357 +12229 12230 12358 +12230 12359 12358 +12230 12231 12360 +12230 12360 12359 +12231 12232 12360 +12232 12361 12360 +12232 12233 12362 +12232 12362 12361 +12233 12234 12362 +12234 12363 12362 +12234 12235 12364 +12234 12364 12363 +12235 12236 12364 +12236 12365 12364 +12236 12237 12366 +12236 12366 12365 +12237 12238 12366 +12238 12367 12366 +12239 12240 12368 +12240 12369 12368 +12240 12241 12370 +12240 12370 12369 +12241 12242 12370 +12242 12371 12370 +12242 12243 12372 +12242 12372 12371 +12243 12244 12372 +12244 12373 12372 +12244 12245 12374 +12244 12374 12373 +12245 12246 12374 +12246 12375 12374 +12246 12247 12376 +12246 12376 12375 +12247 12248 12376 +12248 12377 12376 +12248 12249 12378 +12248 12378 12377 +12249 12250 12378 +12250 12379 12378 +12250 12251 12380 +12250 12380 12379 +12251 12252 12380 +12252 12381 12380 +12252 12253 12382 +12252 12382 12381 +12253 12254 12382 +12254 12383 12382 +12254 12255 12384 +12254 12384 12383 +12255 12256 12384 +12256 12385 12384 +12256 12257 12386 +12256 12386 12385 +12257 12258 12386 +12258 12387 12386 +12258 12259 12388 +12258 12388 12387 +12259 12260 12388 +12260 12389 12388 +12260 12261 12390 +12260 12390 12389 +12261 12262 12390 +12262 12391 12390 +12262 12263 12392 +12262 12392 12391 +12263 12264 12392 +12264 12393 12392 +12264 12265 12394 +12264 12394 12393 +12265 12266 12394 +12266 12395 12394 +12266 12267 12396 +12266 12396 12395 +12267 12268 12396 +12268 12397 12396 +12268 12269 12398 +12268 12398 12397 +12269 12270 12398 +12270 12399 12398 +12270 12271 12400 +12270 12400 12399 +12271 12272 12400 +12272 12401 12400 +12272 12273 12402 +12272 12402 12401 +12273 12274 12402 +12274 12403 12402 +12274 12275 12404 +12274 12404 12403 +12275 12276 12404 +12276 12405 12404 +12276 12277 12406 +12276 12406 12405 +12277 12278 12406 +12278 12407 12406 +12278 12279 12408 +12278 12408 12407 +12279 12280 12408 +12280 12409 12408 +12280 12281 12410 +12280 12410 12409 +12281 12282 12410 +12282 12411 12410 +12282 12283 12412 +12282 12412 12411 +12283 12284 12412 +12284 12413 12412 +12284 12285 12414 +12284 12414 12413 +12285 12286 12414 +12286 12415 12414 +12286 12287 12416 +12286 12416 12415 +12287 12288 12416 +12288 12417 12416 +12288 12289 12418 +12288 12418 12417 +12289 12290 12418 +12290 12419 12418 +12290 12291 12420 +12290 12420 12419 +12291 12292 12420 +12292 12421 12420 +12292 12293 12422 +12292 12422 12421 +12293 12294 12422 +12294 12423 12422 +12294 12295 12424 +12294 12424 12423 +12295 12296 12424 +12296 12425 12424 +12296 12297 12426 +12296 12426 12425 +12297 12298 12426 +12298 12427 12426 +12298 12299 12428 +12298 12428 12427 +12299 12300 12428 +12300 12429 12428 +12300 12301 12430 +12300 12430 12429 +12301 12302 12430 +12302 12431 12430 +12302 12303 12432 +12302 12432 12431 +12303 12304 12432 +12304 12433 12432 +12304 12305 12434 +12304 12434 12433 +12305 12306 12434 +12306 12435 12434 +12306 12307 12436 +12306 12436 12435 +12307 12308 12436 +12308 12437 12436 +12308 12309 12438 +12308 12438 12437 +12309 12310 12438 +12310 12439 12438 +12310 12311 12440 +12310 12440 12439 +12311 12312 12440 +12312 12441 12440 +12312 12313 12442 +12312 12442 12441 +12313 12314 12442 +12314 12443 12442 +12314 12315 12444 +12314 12444 12443 +12315 12316 12444 +12316 12445 12444 +12316 12317 12446 +12316 12446 12445 +12317 12318 12446 +12318 12447 12446 +12318 12319 12448 +12318 12448 12447 +12319 12320 12448 +12320 12449 12448 +12320 12321 12450 +12320 12450 12449 +12321 12322 12450 +12322 12451 12450 +12322 12323 12452 +12322 12452 12451 +12323 12324 12452 +12324 12453 12452 +12324 12325 12454 +12324 12454 12453 +12325 12326 12454 +12326 12455 12454 +12326 12327 12456 +12326 12456 12455 +12327 12328 12456 +12328 12457 12456 +12328 12329 12458 +12328 12458 12457 +12329 12330 12458 +12330 12459 12458 +12330 12331 12460 +12330 12460 12459 +12331 12332 12460 +12332 12461 12460 +12332 12333 12462 +12332 12462 12461 +12333 12334 12462 +12334 12463 12462 +12334 12335 12464 +12334 12464 12463 +12335 12336 12464 +12336 12465 12464 +12336 12337 12466 +12336 12466 12465 +12337 12338 12466 +12338 12467 12466 +12338 12339 12468 +12338 12468 12467 +12339 12340 12468 +12340 12469 12468 +12340 12341 12470 +12340 12470 12469 +12341 12342 12470 +12342 12471 12470 +12342 12343 12472 +12342 12472 12471 +12343 12344 12472 +12344 12473 12472 +12344 12345 12474 +12344 12474 12473 +12345 12346 12474 +12346 12475 12474 +12346 12347 12476 +12346 12476 12475 +12347 12348 12476 +12348 12477 12476 +12348 12349 12478 +12348 12478 12477 +12349 12350 12478 +12350 12479 12478 +12350 12351 12480 +12350 12480 12479 +12351 12352 12480 +12352 12481 12480 +12352 12353 12482 +12352 12482 12481 +12353 12354 12482 +12354 12483 12482 +12354 12355 12484 +12354 12484 12483 +12355 12356 12484 +12356 12485 12484 +12356 12357 12486 +12356 12486 12485 +12357 12358 12486 +12358 12487 12486 +12358 12359 12488 +12358 12488 12487 +12359 12360 12488 +12360 12489 12488 +12360 12361 12490 +12360 12490 12489 +12361 12362 12490 +12362 12491 12490 +12362 12363 12492 +12362 12492 12491 +12363 12364 12492 +12364 12493 12492 +12364 12365 12494 +12364 12494 12493 +12365 12366 12494 +12366 12495 12494 +12366 12367 12496 +12366 12496 12495 +12368 12369 12498 +12368 12498 12497 +12369 12370 12498 +12370 12499 12498 +12370 12371 12500 +12370 12500 12499 +12371 12372 12500 +12372 12501 12500 +12372 12373 12502 +12372 12502 12501 +12373 12374 12502 +12374 12503 12502 +12374 12375 12504 +12374 12504 12503 +12375 12376 12504 +12376 12505 12504 +12376 12377 12506 +12376 12506 12505 +12377 12378 12506 +12378 12507 12506 +12378 12379 12508 +12378 12508 12507 +12379 12380 12508 +12380 12509 12508 +12380 12381 12510 +12380 12510 12509 +12381 12382 12510 +12382 12511 12510 +12382 12383 12512 +12382 12512 12511 +12383 12384 12512 +12384 12513 12512 +12384 12385 12514 +12384 12514 12513 +12385 12386 12514 +12386 12515 12514 +12386 12387 12516 +12386 12516 12515 +12387 12388 12516 +12388 12517 12516 +12388 12389 12518 +12388 12518 12517 +12389 12390 12518 +12390 12519 12518 +12390 12391 12520 +12390 12520 12519 +12391 12392 12520 +12392 12521 12520 +12392 12393 12522 +12392 12522 12521 +12393 12394 12522 +12394 12523 12522 +12394 12395 12524 +12394 12524 12523 +12395 12396 12524 +12396 12525 12524 +12396 12397 12526 +12396 12526 12525 +12397 12398 12526 +12398 12527 12526 +12398 12399 12528 +12398 12528 12527 +12399 12400 12528 +12400 12529 12528 +12400 12401 12530 +12400 12530 12529 +12401 12402 12530 +12402 12531 12530 +12402 12403 12532 +12402 12532 12531 +12403 12404 12532 +12404 12533 12532 +12404 12405 12534 +12404 12534 12533 +12405 12406 12534 +12406 12535 12534 +12406 12407 12536 +12406 12536 12535 +12407 12408 12536 +12408 12537 12536 +12408 12409 12538 +12408 12538 12537 +12409 12410 12538 +12410 12539 12538 +12410 12411 12540 +12410 12540 12539 +12411 12412 12540 +12412 12541 12540 +12412 12413 12542 +12412 12542 12541 +12413 12414 12542 +12414 12543 12542 +12414 12415 12544 +12414 12544 12543 +12415 12416 12544 +12416 12545 12544 +12416 12417 12546 +12416 12546 12545 +12417 12418 12546 +12418 12547 12546 +12418 12419 12548 +12418 12548 12547 +12419 12420 12548 +12420 12549 12548 +12420 12421 12550 +12420 12550 12549 +12421 12422 12550 +12422 12551 12550 +12422 12423 12552 +12422 12552 12551 +12423 12424 12552 +12424 12553 12552 +12424 12425 12554 +12424 12554 12553 +12425 12426 12554 +12426 12555 12554 +12426 12427 12556 +12426 12556 12555 +12427 12428 12556 +12428 12557 12556 +12428 12429 12558 +12428 12558 12557 +12429 12430 12558 +12430 12559 12558 +12430 12431 12560 +12430 12560 12559 +12431 12432 12560 +12432 12561 12560 +12432 12433 12562 +12432 12562 12561 +12433 12434 12562 +12434 12563 12562 +12434 12435 12564 +12434 12564 12563 +12435 12436 12564 +12436 12565 12564 +12436 12437 12566 +12436 12566 12565 +12437 12438 12566 +12438 12567 12566 +12438 12439 12568 +12438 12568 12567 +12439 12440 12568 +12440 12569 12568 +12440 12441 12570 +12440 12570 12569 +12441 12442 12570 +12442 12571 12570 +12442 12443 12572 +12442 12572 12571 +12443 12444 12572 +12444 12573 12572 +12444 12445 12574 +12444 12574 12573 +12445 12446 12574 +12446 12575 12574 +12446 12447 12576 +12446 12576 12575 +12447 12448 12576 +12448 12577 12576 +12448 12449 12578 +12448 12578 12577 +12449 12450 12578 +12450 12579 12578 +12450 12451 12580 +12450 12580 12579 +12451 12452 12580 +12452 12581 12580 +12452 12453 12582 +12452 12582 12581 +12453 12454 12582 +12454 12583 12582 +12454 12455 12584 +12454 12584 12583 +12455 12456 12584 +12456 12585 12584 +12456 12457 12586 +12456 12586 12585 +12457 12458 12586 +12458 12587 12586 +12458 12459 12588 +12458 12588 12587 +12459 12460 12588 +12460 12589 12588 +12460 12461 12590 +12460 12590 12589 +12461 12462 12590 +12462 12591 12590 +12462 12463 12592 +12462 12592 12591 +12463 12464 12592 +12464 12593 12592 +12464 12465 12594 +12464 12594 12593 +12465 12466 12594 +12466 12595 12594 +12466 12467 12596 +12466 12596 12595 +12467 12468 12596 +12468 12597 12596 +12468 12469 12598 +12468 12598 12597 +12469 12470 12598 +12470 12599 12598 +12470 12471 12600 +12470 12600 12599 +12471 12472 12600 +12472 12601 12600 +12472 12473 12602 +12472 12602 12601 +12473 12474 12602 +12474 12603 12602 +12474 12475 12604 +12474 12604 12603 +12475 12476 12604 +12476 12605 12604 +12476 12477 12606 +12476 12606 12605 +12477 12478 12606 +12478 12607 12606 +12478 12479 12608 +12478 12608 12607 +12479 12480 12608 +12480 12609 12608 +12480 12481 12610 +12480 12610 12609 +12481 12482 12610 +12482 12611 12610 +12482 12483 12612 +12482 12612 12611 +12483 12484 12612 +12484 12613 12612 +12484 12485 12614 +12484 12614 12613 +12485 12486 12614 +12486 12615 12614 +12486 12487 12616 +12486 12616 12615 +12487 12488 12616 +12488 12617 12616 +12488 12489 12618 +12488 12618 12617 +12489 12490 12618 +12490 12619 12618 +12490 12491 12620 +12490 12620 12619 +12491 12492 12620 +12492 12621 12620 +12492 12493 12622 +12492 12622 12621 +12493 12494 12622 +12494 12623 12622 +12494 12495 12624 +12494 12624 12623 +12495 12496 12624 +12496 12625 12624 +12497 12498 12626 +12498 12627 12626 +12498 12499 12628 +12498 12628 12627 +12499 12500 12628 +12500 12629 12628 +12500 12501 12630 +12500 12630 12629 +12501 12502 12630 +12502 12631 12630 +12502 12503 12632 +12502 12632 12631 +12503 12504 12632 +12504 12633 12632 +12504 12505 12634 +12504 12634 12633 +12505 12506 12634 +12506 12635 12634 +12506 12507 12636 +12506 12636 12635 +12507 12508 12636 +12508 12637 12636 +12508 12509 12638 +12508 12638 12637 +12509 12510 12638 +12510 12639 12638 +12510 12511 12640 +12510 12640 12639 +12511 12512 12640 +12512 12641 12640 +12512 12513 12642 +12512 12642 12641 +12513 12514 12642 +12514 12643 12642 +12514 12515 12644 +12514 12644 12643 +12515 12516 12644 +12516 12645 12644 +12516 12517 12646 +12516 12646 12645 +12517 12518 12646 +12518 12647 12646 +12518 12519 12648 +12518 12648 12647 +12519 12520 12648 +12520 12649 12648 +12520 12521 12650 +12520 12650 12649 +12521 12522 12650 +12522 12651 12650 +12522 12523 12652 +12522 12652 12651 +12523 12524 12652 +12524 12653 12652 +12524 12525 12654 +12524 12654 12653 +12525 12526 12654 +12526 12655 12654 +12526 12527 12656 +12526 12656 12655 +12527 12528 12656 +12528 12657 12656 +12528 12529 12658 +12528 12658 12657 +12529 12530 12658 +12530 12659 12658 +12530 12531 12660 +12530 12660 12659 +12531 12532 12660 +12532 12661 12660 +12532 12533 12662 +12532 12662 12661 +12533 12534 12662 +12534 12663 12662 +12534 12535 12664 +12534 12664 12663 +12535 12536 12664 +12536 12665 12664 +12536 12537 12666 +12536 12666 12665 +12537 12538 12666 +12538 12667 12666 +12538 12539 12668 +12538 12668 12667 +12539 12540 12668 +12540 12669 12668 +12540 12541 12670 +12540 12670 12669 +12541 12542 12670 +12542 12671 12670 +12542 12543 12672 +12542 12672 12671 +12543 12544 12672 +12544 12673 12672 +12544 12545 12674 +12544 12674 12673 +12545 12546 12674 +12546 12675 12674 +12546 12547 12676 +12546 12676 12675 +12547 12548 12676 +12548 12677 12676 +12548 12549 12678 +12548 12678 12677 +12549 12550 12678 +12550 12679 12678 +12550 12551 12680 +12550 12680 12679 +12551 12552 12680 +12552 12681 12680 +12552 12553 12682 +12552 12682 12681 +12553 12554 12682 +12554 12683 12682 +12554 12555 12684 +12554 12684 12683 +12555 12556 12684 +12556 12685 12684 +12556 12557 12686 +12556 12686 12685 +12557 12558 12686 +12558 12687 12686 +12558 12559 12688 +12558 12688 12687 +12559 12560 12688 +12560 12689 12688 +12560 12561 12690 +12560 12690 12689 +12561 12562 12690 +12562 12691 12690 +12562 12563 12692 +12562 12692 12691 +12563 12564 12692 +12564 12693 12692 +12564 12565 12694 +12564 12694 12693 +12565 12566 12694 +12566 12695 12694 +12566 12567 12696 +12566 12696 12695 +12567 12568 12696 +12568 12697 12696 +12568 12569 12698 +12568 12698 12697 +12569 12570 12698 +12570 12699 12698 +12570 12571 12700 +12570 12700 12699 +12571 12572 12700 +12572 12701 12700 +12572 12573 12702 +12572 12702 12701 +12573 12574 12702 +12574 12703 12702 +12574 12575 12704 +12574 12704 12703 +12575 12576 12704 +12576 12705 12704 +12576 12577 12706 +12576 12706 12705 +12577 12578 12706 +12578 12707 12706 +12578 12579 12708 +12578 12708 12707 +12579 12580 12708 +12580 12709 12708 +12580 12581 12710 +12580 12710 12709 +12581 12582 12710 +12582 12711 12710 +12582 12583 12712 +12582 12712 12711 +12583 12584 12712 +12584 12713 12712 +12584 12585 12714 +12584 12714 12713 +12585 12586 12714 +12586 12715 12714 +12586 12587 12716 +12586 12716 12715 +12587 12588 12716 +12588 12717 12716 +12588 12589 12718 +12588 12718 12717 +12589 12590 12718 +12590 12719 12718 +12590 12591 12720 +12590 12720 12719 +12591 12592 12720 +12592 12721 12720 +12592 12593 12722 +12592 12722 12721 +12593 12594 12722 +12594 12723 12722 +12594 12595 12724 +12594 12724 12723 +12595 12596 12724 +12596 12725 12724 +12596 12597 12726 +12596 12726 12725 +12597 12598 12726 +12598 12727 12726 +12598 12599 12728 +12598 12728 12727 +12599 12600 12728 +12600 12729 12728 +12600 12601 12730 +12600 12730 12729 +12601 12602 12730 +12602 12731 12730 +12602 12603 12732 +12602 12732 12731 +12603 12604 12732 +12604 12733 12732 +12604 12605 12734 +12604 12734 12733 +12605 12606 12734 +12606 12735 12734 +12606 12607 12736 +12606 12736 12735 +12607 12608 12736 +12608 12737 12736 +12608 12609 12738 +12608 12738 12737 +12609 12610 12738 +12610 12739 12738 +12610 12611 12740 +12610 12740 12739 +12611 12612 12740 +12612 12741 12740 +12612 12613 12742 +12612 12742 12741 +12613 12614 12742 +12614 12743 12742 +12614 12615 12744 +12614 12744 12743 +12615 12616 12744 +12616 12745 12744 +12616 12617 12746 +12616 12746 12745 +12617 12618 12746 +12618 12747 12746 +12618 12619 12748 +12618 12748 12747 +12619 12620 12748 +12620 12749 12748 +12620 12621 12750 +12620 12750 12749 +12621 12622 12750 +12622 12751 12750 +12622 12623 12752 +12622 12752 12751 +12623 12624 12752 +12624 12753 12752 +12624 12625 12754 +12624 12754 12753 +12626 12627 12756 +12626 12756 12755 +12627 12628 12756 +12628 12757 12756 +12628 12629 12758 +12628 12758 12757 +12629 12630 12758 +12630 12759 12758 +12630 12631 12760 +12630 12760 12759 +12631 12632 12760 +12632 12761 12760 +12632 12633 12762 +12632 12762 12761 +12633 12634 12762 +12634 12763 12762 +12634 12635 12764 +12634 12764 12763 +12635 12636 12764 +12636 12765 12764 +12636 12637 12766 +12636 12766 12765 +12637 12638 12766 +12638 12767 12766 +12638 12639 12768 +12638 12768 12767 +12639 12640 12768 +12640 12769 12768 +12640 12641 12770 +12640 12770 12769 +12641 12642 12770 +12642 12771 12770 +12642 12643 12772 +12642 12772 12771 +12643 12644 12772 +12644 12773 12772 +12644 12645 12774 +12644 12774 12773 +12645 12646 12774 +12646 12775 12774 +12646 12647 12776 +12646 12776 12775 +12647 12648 12776 +12648 12777 12776 +12648 12649 12778 +12648 12778 12777 +12649 12650 12778 +12650 12779 12778 +12650 12651 12780 +12650 12780 12779 +12651 12652 12780 +12652 12781 12780 +12652 12653 12782 +12652 12782 12781 +12653 12654 12782 +12654 12783 12782 +12654 12655 12784 +12654 12784 12783 +12655 12656 12784 +12656 12785 12784 +12656 12657 12786 +12656 12786 12785 +12657 12658 12786 +12658 12787 12786 +12658 12659 12788 +12658 12788 12787 +12659 12660 12788 +12660 12789 12788 +12660 12661 12790 +12660 12790 12789 +12661 12662 12790 +12662 12791 12790 +12662 12663 12792 +12662 12792 12791 +12663 12664 12792 +12664 12793 12792 +12664 12665 12794 +12664 12794 12793 +12665 12666 12794 +12666 12795 12794 +12666 12667 12796 +12666 12796 12795 +12667 12668 12796 +12668 12797 12796 +12668 12669 12798 +12668 12798 12797 +12669 12670 12798 +12670 12799 12798 +12670 12671 12800 +12670 12800 12799 +12671 12672 12800 +12672 12801 12800 +12672 12673 12802 +12672 12802 12801 +12673 12674 12802 +12674 12803 12802 +12674 12675 12804 +12674 12804 12803 +12675 12676 12804 +12676 12805 12804 +12676 12677 12806 +12676 12806 12805 +12677 12678 12806 +12678 12807 12806 +12678 12679 12808 +12678 12808 12807 +12679 12680 12808 +12680 12809 12808 +12680 12681 12810 +12680 12810 12809 +12681 12682 12810 +12682 12811 12810 +12682 12683 12812 +12682 12812 12811 +12683 12684 12812 +12684 12813 12812 +12684 12685 12814 +12684 12814 12813 +12685 12686 12814 +12686 12815 12814 +12686 12687 12816 +12686 12816 12815 +12687 12688 12816 +12688 12817 12816 +12688 12689 12818 +12688 12818 12817 +12689 12690 12818 +12690 12819 12818 +12690 12691 12820 +12690 12820 12819 +12691 12692 12820 +12692 12821 12820 +12692 12693 12822 +12692 12822 12821 +12693 12694 12822 +12694 12823 12822 +12694 12695 12824 +12694 12824 12823 +12695 12696 12824 +12696 12825 12824 +12696 12697 12826 +12696 12826 12825 +12697 12698 12826 +12698 12827 12826 +12698 12699 12828 +12698 12828 12827 +12699 12700 12828 +12700 12829 12828 +12700 12701 12830 +12700 12830 12829 +12701 12702 12830 +12702 12831 12830 +12702 12703 12832 +12702 12832 12831 +12703 12704 12832 +12704 12833 12832 +12704 12705 12834 +12704 12834 12833 +12705 12706 12834 +12706 12835 12834 +12706 12707 12836 +12706 12836 12835 +12707 12708 12836 +12708 12837 12836 +12708 12709 12838 +12708 12838 12837 +12709 12710 12838 +12710 12839 12838 +12710 12711 12840 +12710 12840 12839 +12711 12712 12840 +12712 12841 12840 +12712 12713 12842 +12712 12842 12841 +12713 12714 12842 +12714 12843 12842 +12714 12715 12844 +12714 12844 12843 +12715 12716 12844 +12716 12845 12844 +12716 12717 12846 +12716 12846 12845 +12717 12718 12846 +12718 12847 12846 +12718 12719 12848 +12718 12848 12847 +12719 12720 12848 +12720 12849 12848 +12720 12721 12850 +12720 12850 12849 +12721 12722 12850 +12722 12851 12850 +12722 12723 12852 +12722 12852 12851 +12723 12724 12852 +12724 12853 12852 +12724 12725 12854 +12724 12854 12853 +12725 12726 12854 +12726 12855 12854 +12726 12727 12856 +12726 12856 12855 +12727 12728 12856 +12728 12857 12856 +12728 12729 12858 +12728 12858 12857 +12729 12730 12858 +12730 12859 12858 +12730 12731 12860 +12730 12860 12859 +12731 12732 12860 +12732 12861 12860 +12732 12733 12862 +12732 12862 12861 +12733 12734 12862 +12734 12863 12862 +12734 12735 12864 +12734 12864 12863 +12735 12736 12864 +12736 12865 12864 +12736 12737 12866 +12736 12866 12865 +12737 12738 12866 +12738 12867 12866 +12738 12739 12868 +12738 12868 12867 +12739 12740 12868 +12740 12869 12868 +12740 12741 12870 +12740 12870 12869 +12741 12742 12870 +12742 12871 12870 +12742 12743 12872 +12742 12872 12871 +12743 12744 12872 +12744 12873 12872 +12744 12745 12874 +12744 12874 12873 +12745 12746 12874 +12746 12875 12874 +12746 12747 12876 +12746 12876 12875 +12747 12748 12876 +12748 12877 12876 +12748 12749 12878 +12748 12878 12877 +12749 12750 12878 +12750 12879 12878 +12750 12751 12880 +12750 12880 12879 +12751 12752 12880 +12752 12881 12880 +12752 12753 12882 +12752 12882 12881 +12753 12754 12882 +12754 12883 12882 +12755 12756 12884 +12756 12885 12884 +12756 12757 12886 +12756 12886 12885 +12757 12758 12886 +12758 12887 12886 +12758 12759 12888 +12758 12888 12887 +12759 12760 12888 +12760 12889 12888 +12760 12761 12890 +12760 12890 12889 +12761 12762 12890 +12762 12891 12890 +12762 12763 12892 +12762 12892 12891 +12763 12764 12892 +12764 12893 12892 +12764 12765 12894 +12764 12894 12893 +12765 12766 12894 +12766 12895 12894 +12766 12767 12896 +12766 12896 12895 +12767 12768 12896 +12768 12897 12896 +12768 12769 12898 +12768 12898 12897 +12769 12770 12898 +12770 12899 12898 +12770 12771 12900 +12770 12900 12899 +12771 12772 12900 +12772 12901 12900 +12772 12773 12902 +12772 12902 12901 +12773 12774 12902 +12774 12903 12902 +12774 12775 12904 +12774 12904 12903 +12775 12776 12904 +12776 12905 12904 +12776 12777 12906 +12776 12906 12905 +12777 12778 12906 +12778 12907 12906 +12778 12779 12908 +12778 12908 12907 +12779 12780 12908 +12780 12909 12908 +12780 12781 12910 +12780 12910 12909 +12781 12782 12910 +12782 12911 12910 +12782 12783 12912 +12782 12912 12911 +12783 12784 12912 +12784 12913 12912 +12784 12785 12914 +12784 12914 12913 +12785 12786 12914 +12786 12915 12914 +12786 12787 12916 +12786 12916 12915 +12787 12788 12916 +12788 12917 12916 +12788 12789 12918 +12788 12918 12917 +12789 12790 12918 +12790 12919 12918 +12790 12791 12920 +12790 12920 12919 +12791 12792 12920 +12792 12921 12920 +12792 12793 12922 +12792 12922 12921 +12793 12794 12922 +12794 12923 12922 +12794 12795 12924 +12794 12924 12923 +12795 12796 12924 +12796 12925 12924 +12796 12797 12926 +12796 12926 12925 +12797 12798 12926 +12798 12927 12926 +12798 12799 12928 +12798 12928 12927 +12799 12800 12928 +12800 12929 12928 +12800 12801 12930 +12800 12930 12929 +12801 12802 12930 +12802 12931 12930 +12802 12803 12932 +12802 12932 12931 +12803 12804 12932 +12804 12933 12932 +12804 12805 12934 +12804 12934 12933 +12805 12806 12934 +12806 12935 12934 +12806 12807 12936 +12806 12936 12935 +12807 12808 12936 +12808 12937 12936 +12808 12809 12938 +12808 12938 12937 +12809 12810 12938 +12810 12939 12938 +12810 12811 12940 +12810 12940 12939 +12811 12812 12940 +12812 12941 12940 +12812 12813 12942 +12812 12942 12941 +12813 12814 12942 +12814 12943 12942 +12814 12815 12944 +12814 12944 12943 +12815 12816 12944 +12816 12945 12944 +12816 12817 12946 +12816 12946 12945 +12817 12818 12946 +12818 12947 12946 +12818 12819 12948 +12818 12948 12947 +12819 12820 12948 +12820 12949 12948 +12820 12821 12950 +12820 12950 12949 +12821 12822 12950 +12822 12951 12950 +12822 12823 12952 +12822 12952 12951 +12823 12824 12952 +12824 12953 12952 +12824 12825 12954 +12824 12954 12953 +12825 12826 12954 +12826 12955 12954 +12826 12827 12956 +12826 12956 12955 +12827 12828 12956 +12828 12957 12956 +12828 12829 12958 +12828 12958 12957 +12829 12830 12958 +12830 12959 12958 +12830 12831 12960 +12830 12960 12959 +12831 12832 12960 +12832 12961 12960 +12832 12833 12962 +12832 12962 12961 +12833 12834 12962 +12834 12963 12962 +12834 12835 12964 +12834 12964 12963 +12835 12836 12964 +12836 12965 12964 +12836 12837 12966 +12836 12966 12965 +12837 12838 12966 +12838 12967 12966 +12838 12839 12968 +12838 12968 12967 +12839 12840 12968 +12840 12969 12968 +12840 12841 12970 +12840 12970 12969 +12841 12842 12970 +12842 12971 12970 +12842 12843 12972 +12842 12972 12971 +12843 12844 12972 +12844 12973 12972 +12844 12845 12974 +12844 12974 12973 +12845 12846 12974 +12846 12975 12974 +12846 12847 12976 +12846 12976 12975 +12847 12848 12976 +12848 12977 12976 +12848 12849 12978 +12848 12978 12977 +12849 12850 12978 +12850 12979 12978 +12850 12851 12980 +12850 12980 12979 +12851 12852 12980 +12852 12981 12980 +12852 12853 12982 +12852 12982 12981 +12853 12854 12982 +12854 12983 12982 +12854 12855 12984 +12854 12984 12983 +12855 12856 12984 +12856 12985 12984 +12856 12857 12986 +12856 12986 12985 +12857 12858 12986 +12858 12987 12986 +12858 12859 12988 +12858 12988 12987 +12859 12860 12988 +12860 12989 12988 +12860 12861 12990 +12860 12990 12989 +12861 12862 12990 +12862 12991 12990 +12862 12863 12992 +12862 12992 12991 +12863 12864 12992 +12864 12993 12992 +12864 12865 12994 +12864 12994 12993 +12865 12866 12994 +12866 12995 12994 +12866 12867 12996 +12866 12996 12995 +12867 12868 12996 +12868 12997 12996 +12868 12869 12998 +12868 12998 12997 +12869 12870 12998 +12870 12999 12998 +12870 12871 13000 +12870 13000 12999 +12871 12872 13000 +12872 13001 13000 +12872 12873 13002 +12872 13002 13001 +12873 12874 13002 +12874 13003 13002 +12874 12875 13004 +12874 13004 13003 +12875 12876 13004 +12876 13005 13004 +12876 12877 13006 +12876 13006 13005 +12877 12878 13006 +12878 13007 13006 +12878 12879 13008 +12878 13008 13007 +12879 12880 13008 +12880 13009 13008 +12880 12881 13010 +12880 13010 13009 +12881 12882 13010 +12882 13011 13010 +12882 12883 13012 +12882 13012 13011 +12884 12885 13014 +12884 13014 13013 +12885 12886 13014 +12886 13015 13014 +12886 12887 13016 +12886 13016 13015 +12887 12888 13016 +12888 13017 13016 +12888 12889 13018 +12888 13018 13017 +12889 12890 13018 +12890 13019 13018 +12890 12891 13020 +12890 13020 13019 +12891 12892 13020 +12892 13021 13020 +12892 12893 13022 +12892 13022 13021 +12893 12894 13022 +12894 13023 13022 +12894 12895 13024 +12894 13024 13023 +12895 12896 13024 +12896 13025 13024 +12896 12897 13026 +12896 13026 13025 +12897 12898 13026 +12898 13027 13026 +12898 12899 13028 +12898 13028 13027 +12899 12900 13028 +12900 13029 13028 +12900 12901 13030 +12900 13030 13029 +12901 12902 13030 +12902 13031 13030 +12902 12903 13032 +12902 13032 13031 +12903 12904 13032 +12904 13033 13032 +12904 12905 13034 +12904 13034 13033 +12905 12906 13034 +12906 13035 13034 +12906 12907 13036 +12906 13036 13035 +12907 12908 13036 +12908 13037 13036 +12908 12909 13038 +12908 13038 13037 +12909 12910 13038 +12910 13039 13038 +12910 12911 13040 +12910 13040 13039 +12911 12912 13040 +12912 13041 13040 +12912 12913 13042 +12912 13042 13041 +12913 12914 13042 +12914 13043 13042 +12914 12915 13044 +12914 13044 13043 +12915 12916 13044 +12916 13045 13044 +12916 12917 13046 +12916 13046 13045 +12917 12918 13046 +12918 13047 13046 +12918 12919 13048 +12918 13048 13047 +12919 12920 13048 +12920 13049 13048 +12920 12921 13050 +12920 13050 13049 +12921 12922 13050 +12922 13051 13050 +12922 12923 13052 +12922 13052 13051 +12923 12924 13052 +12924 13053 13052 +12924 12925 13054 +12924 13054 13053 +12925 12926 13054 +12926 13055 13054 +12926 12927 13056 +12926 13056 13055 +12927 12928 13056 +12928 13057 13056 +12928 12929 13058 +12928 13058 13057 +12929 12930 13058 +12930 13059 13058 +12930 12931 13060 +12930 13060 13059 +12931 12932 13060 +12932 13061 13060 +12932 12933 13062 +12932 13062 13061 +12933 12934 13062 +12934 13063 13062 +12934 12935 13064 +12934 13064 13063 +12935 12936 13064 +12936 13065 13064 +12936 12937 13066 +12936 13066 13065 +12937 12938 13066 +12938 13067 13066 +12938 12939 13068 +12938 13068 13067 +12939 12940 13068 +12940 13069 13068 +12940 12941 13070 +12940 13070 13069 +12941 12942 13070 +12942 13071 13070 +12942 12943 13072 +12942 13072 13071 +12943 12944 13072 +12944 13073 13072 +12944 12945 13074 +12944 13074 13073 +12945 12946 13074 +12946 13075 13074 +12946 12947 13076 +12946 13076 13075 +12947 12948 13076 +12948 13077 13076 +12948 12949 13078 +12948 13078 13077 +12949 12950 13078 +12950 13079 13078 +12950 12951 13080 +12950 13080 13079 +12951 12952 13080 +12952 13081 13080 +12952 12953 13082 +12952 13082 13081 +12953 12954 13082 +12954 13083 13082 +12954 12955 13084 +12954 13084 13083 +12955 12956 13084 +12956 13085 13084 +12956 12957 13086 +12956 13086 13085 +12957 12958 13086 +12958 13087 13086 +12958 12959 13088 +12958 13088 13087 +12959 12960 13088 +12960 13089 13088 +12960 12961 13090 +12960 13090 13089 +12961 12962 13090 +12962 13091 13090 +12962 12963 13092 +12962 13092 13091 +12963 12964 13092 +12964 13093 13092 +12964 12965 13094 +12964 13094 13093 +12965 12966 13094 +12966 13095 13094 +12966 12967 13096 +12966 13096 13095 +12967 12968 13096 +12968 13097 13096 +12968 12969 13098 +12968 13098 13097 +12969 12970 13098 +12970 13099 13098 +12970 12971 13100 +12970 13100 13099 +12971 12972 13100 +12972 13101 13100 +12972 12973 13102 +12972 13102 13101 +12973 12974 13102 +12974 13103 13102 +12974 12975 13104 +12974 13104 13103 +12975 12976 13104 +12976 13105 13104 +12976 12977 13106 +12976 13106 13105 +12977 12978 13106 +12978 13107 13106 +12978 12979 13108 +12978 13108 13107 +12979 12980 13108 +12980 13109 13108 +12980 12981 13110 +12980 13110 13109 +12981 12982 13110 +12982 13111 13110 +12982 12983 13112 +12982 13112 13111 +12983 12984 13112 +12984 13113 13112 +12984 12985 13114 +12984 13114 13113 +12985 12986 13114 +12986 13115 13114 +12986 12987 13116 +12986 13116 13115 +12987 12988 13116 +12988 13117 13116 +12988 12989 13118 +12988 13118 13117 +12989 12990 13118 +12990 13119 13118 +12990 12991 13120 +12990 13120 13119 +12991 12992 13120 +12992 13121 13120 +12992 12993 13122 +12992 13122 13121 +12993 12994 13122 +12994 13123 13122 +12994 12995 13124 +12994 13124 13123 +12995 12996 13124 +12996 13125 13124 +12996 12997 13126 +12996 13126 13125 +12997 12998 13126 +12998 13127 13126 +12998 12999 13128 +12998 13128 13127 +12999 13000 13128 +13000 13129 13128 +13000 13001 13130 +13000 13130 13129 +13001 13002 13130 +13002 13131 13130 +13002 13003 13132 +13002 13132 13131 +13003 13004 13132 +13004 13133 13132 +13004 13005 13134 +13004 13134 13133 +13005 13006 13134 +13006 13135 13134 +13006 13007 13136 +13006 13136 13135 +13007 13008 13136 +13008 13137 13136 +13008 13009 13138 +13008 13138 13137 +13009 13010 13138 +13010 13139 13138 +13010 13011 13140 +13010 13140 13139 +13011 13012 13140 +13012 13141 13140 +13013 13014 13142 +13014 13143 13142 +13014 13015 13144 +13014 13144 13143 +13015 13016 13144 +13016 13145 13144 +13016 13017 13146 +13016 13146 13145 +13017 13018 13146 +13018 13147 13146 +13018 13019 13148 +13018 13148 13147 +13019 13020 13148 +13020 13149 13148 +13020 13021 13150 +13020 13150 13149 +13021 13022 13150 +13022 13151 13150 +13022 13023 13152 +13022 13152 13151 +13023 13024 13152 +13024 13153 13152 +13024 13025 13154 +13024 13154 13153 +13025 13026 13154 +13026 13155 13154 +13026 13027 13156 +13026 13156 13155 +13027 13028 13156 +13028 13157 13156 +13028 13029 13158 +13028 13158 13157 +13029 13030 13158 +13030 13159 13158 +13030 13031 13160 +13030 13160 13159 +13031 13032 13160 +13032 13161 13160 +13032 13033 13162 +13032 13162 13161 +13033 13034 13162 +13034 13163 13162 +13034 13035 13164 +13034 13164 13163 +13035 13036 13164 +13036 13165 13164 +13036 13037 13166 +13036 13166 13165 +13037 13038 13166 +13038 13167 13166 +13038 13039 13168 +13038 13168 13167 +13039 13040 13168 +13040 13169 13168 +13040 13041 13170 +13040 13170 13169 +13041 13042 13170 +13042 13171 13170 +13042 13043 13172 +13042 13172 13171 +13043 13044 13172 +13044 13173 13172 +13044 13045 13174 +13044 13174 13173 +13045 13046 13174 +13046 13175 13174 +13046 13047 13176 +13046 13176 13175 +13047 13048 13176 +13048 13177 13176 +13048 13049 13178 +13048 13178 13177 +13049 13050 13178 +13050 13179 13178 +13050 13051 13180 +13050 13180 13179 +13051 13052 13180 +13052 13181 13180 +13052 13053 13182 +13052 13182 13181 +13053 13054 13182 +13054 13183 13182 +13054 13055 13184 +13054 13184 13183 +13055 13056 13184 +13056 13185 13184 +13056 13057 13186 +13056 13186 13185 +13057 13058 13186 +13058 13187 13186 +13058 13059 13188 +13058 13188 13187 +13059 13060 13188 +13060 13189 13188 +13060 13061 13190 +13060 13190 13189 +13061 13062 13190 +13062 13191 13190 +13062 13063 13192 +13062 13192 13191 +13063 13064 13192 +13064 13193 13192 +13064 13065 13194 +13064 13194 13193 +13065 13066 13194 +13066 13195 13194 +13066 13067 13196 +13066 13196 13195 +13067 13068 13196 +13068 13197 13196 +13068 13069 13198 +13068 13198 13197 +13069 13070 13198 +13070 13199 13198 +13070 13071 13200 +13070 13200 13199 +13071 13072 13200 +13072 13201 13200 +13072 13073 13202 +13072 13202 13201 +13073 13074 13202 +13074 13203 13202 +13074 13075 13204 +13074 13204 13203 +13075 13076 13204 +13076 13205 13204 +13076 13077 13206 +13076 13206 13205 +13077 13078 13206 +13078 13207 13206 +13078 13079 13208 +13078 13208 13207 +13079 13080 13208 +13080 13209 13208 +13080 13081 13210 +13080 13210 13209 +13081 13082 13210 +13082 13211 13210 +13082 13083 13212 +13082 13212 13211 +13083 13084 13212 +13084 13213 13212 +13084 13085 13214 +13084 13214 13213 +13085 13086 13214 +13086 13215 13214 +13086 13087 13216 +13086 13216 13215 +13087 13088 13216 +13088 13217 13216 +13088 13089 13218 +13088 13218 13217 +13089 13090 13218 +13090 13219 13218 +13090 13091 13220 +13090 13220 13219 +13091 13092 13220 +13092 13221 13220 +13092 13093 13222 +13092 13222 13221 +13093 13094 13222 +13094 13223 13222 +13094 13095 13224 +13094 13224 13223 +13095 13096 13224 +13096 13225 13224 +13096 13097 13226 +13096 13226 13225 +13097 13098 13226 +13098 13227 13226 +13098 13099 13228 +13098 13228 13227 +13099 13100 13228 +13100 13229 13228 +13100 13101 13230 +13100 13230 13229 +13101 13102 13230 +13102 13231 13230 +13102 13103 13232 +13102 13232 13231 +13103 13104 13232 +13104 13233 13232 +13104 13105 13234 +13104 13234 13233 +13105 13106 13234 +13106 13235 13234 +13106 13107 13236 +13106 13236 13235 +13107 13108 13236 +13108 13237 13236 +13108 13109 13238 +13108 13238 13237 +13109 13110 13238 +13110 13239 13238 +13110 13111 13240 +13110 13240 13239 +13111 13112 13240 +13112 13241 13240 +13112 13113 13242 +13112 13242 13241 +13113 13114 13242 +13114 13243 13242 +13114 13115 13244 +13114 13244 13243 +13115 13116 13244 +13116 13245 13244 +13116 13117 13246 +13116 13246 13245 +13117 13118 13246 +13118 13247 13246 +13118 13119 13248 +13118 13248 13247 +13119 13120 13248 +13120 13249 13248 +13120 13121 13250 +13120 13250 13249 +13121 13122 13250 +13122 13251 13250 +13122 13123 13252 +13122 13252 13251 +13123 13124 13252 +13124 13253 13252 +13124 13125 13254 +13124 13254 13253 +13125 13126 13254 +13126 13255 13254 +13126 13127 13256 +13126 13256 13255 +13127 13128 13256 +13128 13257 13256 +13128 13129 13258 +13128 13258 13257 +13129 13130 13258 +13130 13259 13258 +13130 13131 13260 +13130 13260 13259 +13131 13132 13260 +13132 13261 13260 +13132 13133 13262 +13132 13262 13261 +13133 13134 13262 +13134 13263 13262 +13134 13135 13264 +13134 13264 13263 +13135 13136 13264 +13136 13265 13264 +13136 13137 13266 +13136 13266 13265 +13137 13138 13266 +13138 13267 13266 +13138 13139 13268 +13138 13268 13267 +13139 13140 13268 +13140 13269 13268 +13140 13141 13270 +13140 13270 13269 +13142 13143 13272 +13142 13272 13271 +13143 13144 13272 +13144 13273 13272 +13144 13145 13274 +13144 13274 13273 +13145 13146 13274 +13146 13275 13274 +13146 13147 13276 +13146 13276 13275 +13147 13148 13276 +13148 13277 13276 +13148 13149 13278 +13148 13278 13277 +13149 13150 13278 +13150 13279 13278 +13150 13151 13280 +13150 13280 13279 +13151 13152 13280 +13152 13281 13280 +13152 13153 13282 +13152 13282 13281 +13153 13154 13282 +13154 13283 13282 +13154 13155 13284 +13154 13284 13283 +13155 13156 13284 +13156 13285 13284 +13156 13157 13286 +13156 13286 13285 +13157 13158 13286 +13158 13287 13286 +13158 13159 13288 +13158 13288 13287 +13159 13160 13288 +13160 13289 13288 +13160 13161 13290 +13160 13290 13289 +13161 13162 13290 +13162 13291 13290 +13162 13163 13292 +13162 13292 13291 +13163 13164 13292 +13164 13293 13292 +13164 13165 13294 +13164 13294 13293 +13165 13166 13294 +13166 13295 13294 +13166 13167 13296 +13166 13296 13295 +13167 13168 13296 +13168 13297 13296 +13168 13169 13298 +13168 13298 13297 +13169 13170 13298 +13170 13299 13298 +13170 13171 13300 +13170 13300 13299 +13171 13172 13300 +13172 13301 13300 +13172 13173 13302 +13172 13302 13301 +13173 13174 13302 +13174 13303 13302 +13174 13175 13304 +13174 13304 13303 +13175 13176 13304 +13176 13305 13304 +13176 13177 13306 +13176 13306 13305 +13177 13178 13306 +13178 13307 13306 +13178 13179 13308 +13178 13308 13307 +13179 13180 13308 +13180 13309 13308 +13180 13181 13310 +13180 13310 13309 +13181 13182 13310 +13182 13311 13310 +13182 13183 13312 +13182 13312 13311 +13183 13184 13312 +13184 13313 13312 +13184 13185 13314 +13184 13314 13313 +13185 13186 13314 +13186 13315 13314 +13186 13187 13316 +13186 13316 13315 +13187 13188 13316 +13188 13317 13316 +13188 13189 13318 +13188 13318 13317 +13189 13190 13318 +13190 13319 13318 +13190 13191 13320 +13190 13320 13319 +13191 13192 13320 +13192 13321 13320 +13192 13193 13322 +13192 13322 13321 +13193 13194 13322 +13194 13323 13322 +13194 13195 13324 +13194 13324 13323 +13195 13196 13324 +13196 13325 13324 +13196 13197 13326 +13196 13326 13325 +13197 13198 13326 +13198 13327 13326 +13198 13199 13328 +13198 13328 13327 +13199 13200 13328 +13200 13329 13328 +13200 13201 13330 +13200 13330 13329 +13201 13202 13330 +13202 13331 13330 +13202 13203 13332 +13202 13332 13331 +13203 13204 13332 +13204 13333 13332 +13204 13205 13334 +13204 13334 13333 +13205 13206 13334 +13206 13335 13334 +13206 13207 13336 +13206 13336 13335 +13207 13208 13336 +13208 13337 13336 +13208 13209 13338 +13208 13338 13337 +13209 13210 13338 +13210 13339 13338 +13210 13211 13340 +13210 13340 13339 +13211 13212 13340 +13212 13341 13340 +13212 13213 13342 +13212 13342 13341 +13213 13214 13342 +13214 13343 13342 +13214 13215 13344 +13214 13344 13343 +13215 13216 13344 +13216 13345 13344 +13216 13217 13346 +13216 13346 13345 +13217 13218 13346 +13218 13347 13346 +13218 13219 13348 +13218 13348 13347 +13219 13220 13348 +13220 13349 13348 +13220 13221 13350 +13220 13350 13349 +13221 13222 13350 +13222 13351 13350 +13222 13223 13352 +13222 13352 13351 +13223 13224 13352 +13224 13353 13352 +13224 13225 13354 +13224 13354 13353 +13225 13226 13354 +13226 13355 13354 +13226 13227 13356 +13226 13356 13355 +13227 13228 13356 +13228 13357 13356 +13228 13229 13358 +13228 13358 13357 +13229 13230 13358 +13230 13359 13358 +13230 13231 13360 +13230 13360 13359 +13231 13232 13360 +13232 13361 13360 +13232 13233 13362 +13232 13362 13361 +13233 13234 13362 +13234 13363 13362 +13234 13235 13364 +13234 13364 13363 +13235 13236 13364 +13236 13365 13364 +13236 13237 13366 +13236 13366 13365 +13237 13238 13366 +13238 13367 13366 +13238 13239 13368 +13238 13368 13367 +13239 13240 13368 +13240 13369 13368 +13240 13241 13370 +13240 13370 13369 +13241 13242 13370 +13242 13371 13370 +13242 13243 13372 +13242 13372 13371 +13243 13244 13372 +13244 13373 13372 +13244 13245 13374 +13244 13374 13373 +13245 13246 13374 +13246 13375 13374 +13246 13247 13376 +13246 13376 13375 +13247 13248 13376 +13248 13377 13376 +13248 13249 13378 +13248 13378 13377 +13249 13250 13378 +13250 13379 13378 +13250 13251 13380 +13250 13380 13379 +13251 13252 13380 +13252 13381 13380 +13252 13253 13382 +13252 13382 13381 +13253 13254 13382 +13254 13383 13382 +13254 13255 13384 +13254 13384 13383 +13255 13256 13384 +13256 13385 13384 +13256 13257 13386 +13256 13386 13385 +13257 13258 13386 +13258 13387 13386 +13258 13259 13388 +13258 13388 13387 +13259 13260 13388 +13260 13389 13388 +13260 13261 13390 +13260 13390 13389 +13261 13262 13390 +13262 13391 13390 +13262 13263 13392 +13262 13392 13391 +13263 13264 13392 +13264 13393 13392 +13264 13265 13394 +13264 13394 13393 +13265 13266 13394 +13266 13395 13394 +13266 13267 13396 +13266 13396 13395 +13267 13268 13396 +13268 13397 13396 +13268 13269 13398 +13268 13398 13397 +13269 13270 13398 +13270 13399 13398 +13271 13272 13400 +13272 13401 13400 +13272 13273 13402 +13272 13402 13401 +13273 13274 13402 +13274 13403 13402 +13274 13275 13404 +13274 13404 13403 +13275 13276 13404 +13276 13405 13404 +13276 13277 13406 +13276 13406 13405 +13277 13278 13406 +13278 13407 13406 +13278 13279 13408 +13278 13408 13407 +13279 13280 13408 +13280 13409 13408 +13280 13281 13410 +13280 13410 13409 +13281 13282 13410 +13282 13411 13410 +13282 13283 13412 +13282 13412 13411 +13283 13284 13412 +13284 13413 13412 +13284 13285 13414 +13284 13414 13413 +13285 13286 13414 +13286 13415 13414 +13286 13287 13416 +13286 13416 13415 +13287 13288 13416 +13288 13417 13416 +13288 13289 13418 +13288 13418 13417 +13289 13290 13418 +13290 13419 13418 +13290 13291 13420 +13290 13420 13419 +13291 13292 13420 +13292 13421 13420 +13292 13293 13422 +13292 13422 13421 +13293 13294 13422 +13294 13423 13422 +13294 13295 13424 +13294 13424 13423 +13295 13296 13424 +13296 13425 13424 +13296 13297 13426 +13296 13426 13425 +13297 13298 13426 +13298 13427 13426 +13298 13299 13428 +13298 13428 13427 +13299 13300 13428 +13300 13429 13428 +13300 13301 13430 +13300 13430 13429 +13301 13302 13430 +13302 13431 13430 +13302 13303 13432 +13302 13432 13431 +13303 13304 13432 +13304 13433 13432 +13304 13305 13434 +13304 13434 13433 +13305 13306 13434 +13306 13435 13434 +13306 13307 13436 +13306 13436 13435 +13307 13308 13436 +13308 13437 13436 +13308 13309 13438 +13308 13438 13437 +13309 13310 13438 +13310 13439 13438 +13310 13311 13440 +13310 13440 13439 +13311 13312 13440 +13312 13441 13440 +13312 13313 13442 +13312 13442 13441 +13313 13314 13442 +13314 13443 13442 +13314 13315 13444 +13314 13444 13443 +13315 13316 13444 +13316 13445 13444 +13316 13317 13446 +13316 13446 13445 +13317 13318 13446 +13318 13447 13446 +13318 13319 13448 +13318 13448 13447 +13319 13320 13448 +13320 13449 13448 +13320 13321 13450 +13320 13450 13449 +13321 13322 13450 +13322 13451 13450 +13322 13323 13452 +13322 13452 13451 +13323 13324 13452 +13324 13453 13452 +13324 13325 13454 +13324 13454 13453 +13325 13326 13454 +13326 13455 13454 +13326 13327 13456 +13326 13456 13455 +13327 13328 13456 +13328 13457 13456 +13328 13329 13458 +13328 13458 13457 +13329 13330 13458 +13330 13459 13458 +13330 13331 13460 +13330 13460 13459 +13331 13332 13460 +13332 13461 13460 +13332 13333 13462 +13332 13462 13461 +13333 13334 13462 +13334 13463 13462 +13334 13335 13464 +13334 13464 13463 +13335 13336 13464 +13336 13465 13464 +13336 13337 13466 +13336 13466 13465 +13337 13338 13466 +13338 13467 13466 +13338 13339 13468 +13338 13468 13467 +13339 13340 13468 +13340 13469 13468 +13340 13341 13470 +13340 13470 13469 +13341 13342 13470 +13342 13471 13470 +13342 13343 13472 +13342 13472 13471 +13343 13344 13472 +13344 13473 13472 +13344 13345 13474 +13344 13474 13473 +13345 13346 13474 +13346 13475 13474 +13346 13347 13476 +13346 13476 13475 +13347 13348 13476 +13348 13477 13476 +13348 13349 13478 +13348 13478 13477 +13349 13350 13478 +13350 13479 13478 +13350 13351 13480 +13350 13480 13479 +13351 13352 13480 +13352 13481 13480 +13352 13353 13482 +13352 13482 13481 +13353 13354 13482 +13354 13483 13482 +13354 13355 13484 +13354 13484 13483 +13355 13356 13484 +13356 13485 13484 +13356 13357 13486 +13356 13486 13485 +13357 13358 13486 +13358 13487 13486 +13358 13359 13488 +13358 13488 13487 +13359 13360 13488 +13360 13489 13488 +13360 13361 13490 +13360 13490 13489 +13361 13362 13490 +13362 13491 13490 +13362 13363 13492 +13362 13492 13491 +13363 13364 13492 +13364 13493 13492 +13364 13365 13494 +13364 13494 13493 +13365 13366 13494 +13366 13495 13494 +13366 13367 13496 +13366 13496 13495 +13367 13368 13496 +13368 13497 13496 +13368 13369 13498 +13368 13498 13497 +13369 13370 13498 +13370 13499 13498 +13370 13371 13500 +13370 13500 13499 +13371 13372 13500 +13372 13501 13500 +13372 13373 13502 +13372 13502 13501 +13373 13374 13502 +13374 13503 13502 +13374 13375 13504 +13374 13504 13503 +13375 13376 13504 +13376 13505 13504 +13376 13377 13506 +13376 13506 13505 +13377 13378 13506 +13378 13507 13506 +13378 13379 13508 +13378 13508 13507 +13379 13380 13508 +13380 13509 13508 +13380 13381 13510 +13380 13510 13509 +13381 13382 13510 +13382 13511 13510 +13382 13383 13512 +13382 13512 13511 +13383 13384 13512 +13384 13513 13512 +13384 13385 13514 +13384 13514 13513 +13385 13386 13514 +13386 13515 13514 +13386 13387 13516 +13386 13516 13515 +13387 13388 13516 +13388 13517 13516 +13388 13389 13518 +13388 13518 13517 +13389 13390 13518 +13390 13519 13518 +13390 13391 13520 +13390 13520 13519 +13391 13392 13520 +13392 13521 13520 +13392 13393 13522 +13392 13522 13521 +13393 13394 13522 +13394 13523 13522 +13394 13395 13524 +13394 13524 13523 +13395 13396 13524 +13396 13525 13524 +13396 13397 13526 +13396 13526 13525 +13397 13398 13526 +13398 13527 13526 +13398 13399 13528 +13398 13528 13527 +13400 13401 13530 +13400 13530 13529 +13401 13402 13530 +13402 13531 13530 +13402 13403 13532 +13402 13532 13531 +13403 13404 13532 +13404 13533 13532 +13404 13405 13534 +13404 13534 13533 +13405 13406 13534 +13406 13535 13534 +13406 13407 13536 +13406 13536 13535 +13407 13408 13536 +13408 13537 13536 +13408 13409 13538 +13408 13538 13537 +13409 13410 13538 +13410 13539 13538 +13410 13411 13540 +13410 13540 13539 +13411 13412 13540 +13412 13541 13540 +13412 13413 13542 +13412 13542 13541 +13413 13414 13542 +13414 13543 13542 +13414 13415 13544 +13414 13544 13543 +13415 13416 13544 +13416 13545 13544 +13416 13417 13546 +13416 13546 13545 +13417 13418 13546 +13418 13547 13546 +13418 13419 13548 +13418 13548 13547 +13419 13420 13548 +13420 13549 13548 +13420 13421 13550 +13420 13550 13549 +13421 13422 13550 +13422 13551 13550 +13422 13423 13552 +13422 13552 13551 +13423 13424 13552 +13424 13553 13552 +13424 13425 13554 +13424 13554 13553 +13425 13426 13554 +13426 13555 13554 +13426 13427 13556 +13426 13556 13555 +13427 13428 13556 +13428 13557 13556 +13428 13429 13558 +13428 13558 13557 +13429 13430 13558 +13430 13559 13558 +13430 13431 13560 +13430 13560 13559 +13431 13432 13560 +13432 13561 13560 +13432 13433 13562 +13432 13562 13561 +13433 13434 13562 +13434 13563 13562 +13434 13435 13564 +13434 13564 13563 +13435 13436 13564 +13436 13565 13564 +13436 13437 13566 +13436 13566 13565 +13437 13438 13566 +13438 13567 13566 +13438 13439 13568 +13438 13568 13567 +13439 13440 13568 +13440 13569 13568 +13440 13441 13570 +13440 13570 13569 +13441 13442 13570 +13442 13571 13570 +13442 13443 13572 +13442 13572 13571 +13443 13444 13572 +13444 13573 13572 +13444 13445 13574 +13444 13574 13573 +13445 13446 13574 +13446 13575 13574 +13446 13447 13576 +13446 13576 13575 +13447 13448 13576 +13448 13577 13576 +13448 13449 13578 +13448 13578 13577 +13449 13450 13578 +13450 13579 13578 +13450 13451 13580 +13450 13580 13579 +13451 13452 13580 +13452 13581 13580 +13452 13453 13582 +13452 13582 13581 +13453 13454 13582 +13454 13583 13582 +13454 13455 13584 +13454 13584 13583 +13455 13456 13584 +13456 13585 13584 +13456 13457 13586 +13456 13586 13585 +13457 13458 13586 +13458 13587 13586 +13458 13459 13588 +13458 13588 13587 +13459 13460 13588 +13460 13589 13588 +13460 13461 13590 +13460 13590 13589 +13461 13462 13590 +13462 13591 13590 +13462 13463 13592 +13462 13592 13591 +13463 13464 13592 +13464 13593 13592 +13464 13465 13594 +13464 13594 13593 +13465 13466 13594 +13466 13595 13594 +13466 13467 13596 +13466 13596 13595 +13467 13468 13596 +13468 13597 13596 +13468 13469 13598 +13468 13598 13597 +13469 13470 13598 +13470 13599 13598 +13470 13471 13600 +13470 13600 13599 +13471 13472 13600 +13472 13601 13600 +13472 13473 13602 +13472 13602 13601 +13473 13474 13602 +13474 13603 13602 +13474 13475 13604 +13474 13604 13603 +13475 13476 13604 +13476 13605 13604 +13476 13477 13606 +13476 13606 13605 +13477 13478 13606 +13478 13607 13606 +13478 13479 13608 +13478 13608 13607 +13479 13480 13608 +13480 13609 13608 +13480 13481 13610 +13480 13610 13609 +13481 13482 13610 +13482 13611 13610 +13482 13483 13612 +13482 13612 13611 +13483 13484 13612 +13484 13613 13612 +13484 13485 13614 +13484 13614 13613 +13485 13486 13614 +13486 13615 13614 +13486 13487 13616 +13486 13616 13615 +13487 13488 13616 +13488 13617 13616 +13488 13489 13618 +13488 13618 13617 +13489 13490 13618 +13490 13619 13618 +13490 13491 13620 +13490 13620 13619 +13491 13492 13620 +13492 13621 13620 +13492 13493 13622 +13492 13622 13621 +13493 13494 13622 +13494 13623 13622 +13494 13495 13624 +13494 13624 13623 +13495 13496 13624 +13496 13625 13624 +13496 13497 13626 +13496 13626 13625 +13497 13498 13626 +13498 13627 13626 +13498 13499 13628 +13498 13628 13627 +13499 13500 13628 +13500 13629 13628 +13500 13501 13630 +13500 13630 13629 +13501 13502 13630 +13502 13631 13630 +13502 13503 13632 +13502 13632 13631 +13503 13504 13632 +13504 13633 13632 +13504 13505 13634 +13504 13634 13633 +13505 13506 13634 +13506 13635 13634 +13506 13507 13636 +13506 13636 13635 +13507 13508 13636 +13508 13637 13636 +13508 13509 13638 +13508 13638 13637 +13509 13510 13638 +13510 13639 13638 +13510 13511 13640 +13510 13640 13639 +13511 13512 13640 +13512 13641 13640 +13512 13513 13642 +13512 13642 13641 +13513 13514 13642 +13514 13643 13642 +13514 13515 13644 +13514 13644 13643 +13515 13516 13644 +13516 13645 13644 +13516 13517 13646 +13516 13646 13645 +13517 13518 13646 +13518 13647 13646 +13518 13519 13648 +13518 13648 13647 +13519 13520 13648 +13520 13649 13648 +13520 13521 13650 +13520 13650 13649 +13521 13522 13650 +13522 13651 13650 +13522 13523 13652 +13522 13652 13651 +13523 13524 13652 +13524 13653 13652 +13524 13525 13654 +13524 13654 13653 +13525 13526 13654 +13526 13655 13654 +13526 13527 13656 +13526 13656 13655 +13527 13528 13656 +13528 13657 13656 +13529 13530 13658 +13530 13659 13658 +13530 13531 13660 +13530 13660 13659 +13531 13532 13660 +13532 13661 13660 +13532 13533 13662 +13532 13662 13661 +13533 13534 13662 +13534 13663 13662 +13534 13535 13664 +13534 13664 13663 +13535 13536 13664 +13536 13665 13664 +13536 13537 13666 +13536 13666 13665 +13537 13538 13666 +13538 13667 13666 +13538 13539 13668 +13538 13668 13667 +13539 13540 13668 +13540 13669 13668 +13540 13541 13670 +13540 13670 13669 +13541 13542 13670 +13542 13671 13670 +13542 13543 13672 +13542 13672 13671 +13543 13544 13672 +13544 13673 13672 +13544 13545 13674 +13544 13674 13673 +13545 13546 13674 +13546 13675 13674 +13546 13547 13676 +13546 13676 13675 +13547 13548 13676 +13548 13677 13676 +13548 13549 13678 +13548 13678 13677 +13549 13550 13678 +13550 13679 13678 +13550 13551 13680 +13550 13680 13679 +13551 13552 13680 +13552 13681 13680 +13552 13553 13682 +13552 13682 13681 +13553 13554 13682 +13554 13683 13682 +13554 13555 13684 +13554 13684 13683 +13555 13556 13684 +13556 13685 13684 +13556 13557 13686 +13556 13686 13685 +13557 13558 13686 +13558 13687 13686 +13558 13559 13688 +13558 13688 13687 +13559 13560 13688 +13560 13689 13688 +13560 13561 13690 +13560 13690 13689 +13561 13562 13690 +13562 13691 13690 +13562 13563 13692 +13562 13692 13691 +13563 13564 13692 +13564 13693 13692 +13564 13565 13694 +13564 13694 13693 +13565 13566 13694 +13566 13695 13694 +13566 13567 13696 +13566 13696 13695 +13567 13568 13696 +13568 13697 13696 +13568 13569 13698 +13568 13698 13697 +13569 13570 13698 +13570 13699 13698 +13570 13571 13700 +13570 13700 13699 +13571 13572 13700 +13572 13701 13700 +13572 13573 13702 +13572 13702 13701 +13573 13574 13702 +13574 13703 13702 +13574 13575 13704 +13574 13704 13703 +13575 13576 13704 +13576 13705 13704 +13576 13577 13706 +13576 13706 13705 +13577 13578 13706 +13578 13707 13706 +13578 13579 13708 +13578 13708 13707 +13579 13580 13708 +13580 13709 13708 +13580 13581 13710 +13580 13710 13709 +13581 13582 13710 +13582 13711 13710 +13582 13583 13712 +13582 13712 13711 +13583 13584 13712 +13584 13713 13712 +13584 13585 13714 +13584 13714 13713 +13585 13586 13714 +13586 13715 13714 +13586 13587 13716 +13586 13716 13715 +13587 13588 13716 +13588 13717 13716 +13588 13589 13718 +13588 13718 13717 +13589 13590 13718 +13590 13719 13718 +13590 13591 13720 +13590 13720 13719 +13591 13592 13720 +13592 13721 13720 +13592 13593 13722 +13592 13722 13721 +13593 13594 13722 +13594 13723 13722 +13594 13595 13724 +13594 13724 13723 +13595 13596 13724 +13596 13725 13724 +13596 13597 13726 +13596 13726 13725 +13597 13598 13726 +13598 13727 13726 +13598 13599 13728 +13598 13728 13727 +13599 13600 13728 +13600 13729 13728 +13600 13601 13730 +13600 13730 13729 +13601 13602 13730 +13602 13731 13730 +13602 13603 13732 +13602 13732 13731 +13603 13604 13732 +13604 13733 13732 +13604 13605 13734 +13604 13734 13733 +13605 13606 13734 +13606 13735 13734 +13606 13607 13736 +13606 13736 13735 +13607 13608 13736 +13608 13737 13736 +13608 13609 13738 +13608 13738 13737 +13609 13610 13738 +13610 13739 13738 +13610 13611 13740 +13610 13740 13739 +13611 13612 13740 +13612 13741 13740 +13612 13613 13742 +13612 13742 13741 +13613 13614 13742 +13614 13743 13742 +13614 13615 13744 +13614 13744 13743 +13615 13616 13744 +13616 13745 13744 +13616 13617 13746 +13616 13746 13745 +13617 13618 13746 +13618 13747 13746 +13618 13619 13748 +13618 13748 13747 +13619 13620 13748 +13620 13749 13748 +13620 13621 13750 +13620 13750 13749 +13621 13622 13750 +13622 13751 13750 +13622 13623 13752 +13622 13752 13751 +13623 13624 13752 +13624 13753 13752 +13624 13625 13754 +13624 13754 13753 +13625 13626 13754 +13626 13755 13754 +13626 13627 13756 +13626 13756 13755 +13627 13628 13756 +13628 13757 13756 +13628 13629 13758 +13628 13758 13757 +13629 13630 13758 +13630 13759 13758 +13630 13631 13760 +13630 13760 13759 +13631 13632 13760 +13632 13761 13760 +13632 13633 13762 +13632 13762 13761 +13633 13634 13762 +13634 13763 13762 +13634 13635 13764 +13634 13764 13763 +13635 13636 13764 +13636 13765 13764 +13636 13637 13766 +13636 13766 13765 +13637 13638 13766 +13638 13767 13766 +13638 13639 13768 +13638 13768 13767 +13639 13640 13768 +13640 13769 13768 +13640 13641 13770 +13640 13770 13769 +13641 13642 13770 +13642 13771 13770 +13642 13643 13772 +13642 13772 13771 +13643 13644 13772 +13644 13773 13772 +13644 13645 13774 +13644 13774 13773 +13645 13646 13774 +13646 13775 13774 +13646 13647 13776 +13646 13776 13775 +13647 13648 13776 +13648 13777 13776 +13648 13649 13778 +13648 13778 13777 +13649 13650 13778 +13650 13779 13778 +13650 13651 13780 +13650 13780 13779 +13651 13652 13780 +13652 13781 13780 +13652 13653 13782 +13652 13782 13781 +13653 13654 13782 +13654 13783 13782 +13654 13655 13784 +13654 13784 13783 +13655 13656 13784 +13656 13785 13784 +13656 13657 13786 +13656 13786 13785 +13658 13659 13788 +13658 13788 13787 +13659 13660 13788 +13660 13789 13788 +13660 13661 13790 +13660 13790 13789 +13661 13662 13790 +13662 13791 13790 +13662 13663 13792 +13662 13792 13791 +13663 13664 13792 +13664 13793 13792 +13664 13665 13794 +13664 13794 13793 +13665 13666 13794 +13666 13795 13794 +13666 13667 13796 +13666 13796 13795 +13667 13668 13796 +13668 13797 13796 +13668 13669 13798 +13668 13798 13797 +13669 13670 13798 +13670 13799 13798 +13670 13671 13800 +13670 13800 13799 +13671 13672 13800 +13672 13801 13800 +13672 13673 13802 +13672 13802 13801 +13673 13674 13802 +13674 13803 13802 +13674 13675 13804 +13674 13804 13803 +13675 13676 13804 +13676 13805 13804 +13676 13677 13806 +13676 13806 13805 +13677 13678 13806 +13678 13807 13806 +13678 13679 13808 +13678 13808 13807 +13679 13680 13808 +13680 13809 13808 +13680 13681 13810 +13680 13810 13809 +13681 13682 13810 +13682 13811 13810 +13682 13683 13812 +13682 13812 13811 +13683 13684 13812 +13684 13813 13812 +13684 13685 13814 +13684 13814 13813 +13685 13686 13814 +13686 13815 13814 +13686 13687 13816 +13686 13816 13815 +13687 13688 13816 +13688 13817 13816 +13688 13689 13818 +13688 13818 13817 +13689 13690 13818 +13690 13819 13818 +13690 13691 13820 +13690 13820 13819 +13691 13692 13820 +13692 13821 13820 +13692 13693 13822 +13692 13822 13821 +13693 13694 13822 +13694 13823 13822 +13694 13695 13824 +13694 13824 13823 +13695 13696 13824 +13696 13825 13824 +13696 13697 13826 +13696 13826 13825 +13697 13698 13826 +13698 13827 13826 +13698 13699 13828 +13698 13828 13827 +13699 13700 13828 +13700 13829 13828 +13700 13701 13830 +13700 13830 13829 +13701 13702 13830 +13702 13831 13830 +13702 13703 13832 +13702 13832 13831 +13703 13704 13832 +13704 13833 13832 +13704 13705 13834 +13704 13834 13833 +13705 13706 13834 +13706 13835 13834 +13706 13707 13836 +13706 13836 13835 +13707 13708 13836 +13708 13837 13836 +13708 13709 13838 +13708 13838 13837 +13709 13710 13838 +13710 13839 13838 +13710 13711 13840 +13710 13840 13839 +13711 13712 13840 +13712 13841 13840 +13712 13713 13842 +13712 13842 13841 +13713 13714 13842 +13714 13843 13842 +13714 13715 13844 +13714 13844 13843 +13715 13716 13844 +13716 13845 13844 +13716 13717 13846 +13716 13846 13845 +13717 13718 13846 +13718 13847 13846 +13718 13719 13848 +13718 13848 13847 +13719 13720 13848 +13720 13849 13848 +13720 13721 13850 +13720 13850 13849 +13721 13722 13850 +13722 13851 13850 +13722 13723 13852 +13722 13852 13851 +13723 13724 13852 +13724 13853 13852 +13724 13725 13854 +13724 13854 13853 +13725 13726 13854 +13726 13855 13854 +13726 13727 13856 +13726 13856 13855 +13727 13728 13856 +13728 13857 13856 +13728 13729 13858 +13728 13858 13857 +13729 13730 13858 +13730 13859 13858 +13730 13731 13860 +13730 13860 13859 +13731 13732 13860 +13732 13861 13860 +13732 13733 13862 +13732 13862 13861 +13733 13734 13862 +13734 13863 13862 +13734 13735 13864 +13734 13864 13863 +13735 13736 13864 +13736 13865 13864 +13736 13737 13866 +13736 13866 13865 +13737 13738 13866 +13738 13867 13866 +13738 13739 13868 +13738 13868 13867 +13739 13740 13868 +13740 13869 13868 +13740 13741 13870 +13740 13870 13869 +13741 13742 13870 +13742 13871 13870 +13742 13743 13872 +13742 13872 13871 +13743 13744 13872 +13744 13873 13872 +13744 13745 13874 +13744 13874 13873 +13745 13746 13874 +13746 13875 13874 +13746 13747 13876 +13746 13876 13875 +13747 13748 13876 +13748 13877 13876 +13748 13749 13878 +13748 13878 13877 +13749 13750 13878 +13750 13879 13878 +13750 13751 13880 +13750 13880 13879 +13751 13752 13880 +13752 13881 13880 +13752 13753 13882 +13752 13882 13881 +13753 13754 13882 +13754 13883 13882 +13754 13755 13884 +13754 13884 13883 +13755 13756 13884 +13756 13885 13884 +13756 13757 13886 +13756 13886 13885 +13757 13758 13886 +13758 13887 13886 +13758 13759 13888 +13758 13888 13887 +13759 13760 13888 +13760 13889 13888 +13760 13761 13890 +13760 13890 13889 +13761 13762 13890 +13762 13891 13890 +13762 13763 13892 +13762 13892 13891 +13763 13764 13892 +13764 13893 13892 +13764 13765 13894 +13764 13894 13893 +13765 13766 13894 +13766 13895 13894 +13766 13767 13896 +13766 13896 13895 +13767 13768 13896 +13768 13897 13896 +13768 13769 13898 +13768 13898 13897 +13769 13770 13898 +13770 13899 13898 +13770 13771 13900 +13770 13900 13899 +13771 13772 13900 +13772 13901 13900 +13772 13773 13902 +13772 13902 13901 +13773 13774 13902 +13774 13903 13902 +13774 13775 13904 +13774 13904 13903 +13775 13776 13904 +13776 13905 13904 +13776 13777 13906 +13776 13906 13905 +13777 13778 13906 +13778 13907 13906 +13778 13779 13908 +13778 13908 13907 +13779 13780 13908 +13780 13909 13908 +13780 13781 13910 +13780 13910 13909 +13781 13782 13910 +13782 13911 13910 +13782 13783 13912 +13782 13912 13911 +13783 13784 13912 +13784 13913 13912 +13784 13785 13914 +13784 13914 13913 +13785 13786 13914 +13786 13915 13914 +13787 13788 13916 +13788 13917 13916 +13788 13789 13918 +13788 13918 13917 +13789 13790 13918 +13790 13919 13918 +13790 13791 13920 +13790 13920 13919 +13791 13792 13920 +13792 13921 13920 +13792 13793 13922 +13792 13922 13921 +13793 13794 13922 +13794 13923 13922 +13794 13795 13924 +13794 13924 13923 +13795 13796 13924 +13796 13925 13924 +13796 13797 13926 +13796 13926 13925 +13797 13798 13926 +13798 13927 13926 +13798 13799 13928 +13798 13928 13927 +13799 13800 13928 +13800 13929 13928 +13800 13801 13930 +13800 13930 13929 +13801 13802 13930 +13802 13931 13930 +13802 13803 13932 +13802 13932 13931 +13803 13804 13932 +13804 13933 13932 +13804 13805 13934 +13804 13934 13933 +13805 13806 13934 +13806 13935 13934 +13806 13807 13936 +13806 13936 13935 +13807 13808 13936 +13808 13937 13936 +13808 13809 13938 +13808 13938 13937 +13809 13810 13938 +13810 13939 13938 +13810 13811 13940 +13810 13940 13939 +13811 13812 13940 +13812 13941 13940 +13812 13813 13942 +13812 13942 13941 +13813 13814 13942 +13814 13943 13942 +13814 13815 13944 +13814 13944 13943 +13815 13816 13944 +13816 13945 13944 +13816 13817 13946 +13816 13946 13945 +13817 13818 13946 +13818 13947 13946 +13818 13819 13948 +13818 13948 13947 +13819 13820 13948 +13820 13949 13948 +13820 13821 13950 +13820 13950 13949 +13821 13822 13950 +13822 13951 13950 +13822 13823 13952 +13822 13952 13951 +13823 13824 13952 +13824 13953 13952 +13824 13825 13954 +13824 13954 13953 +13825 13826 13954 +13826 13955 13954 +13826 13827 13956 +13826 13956 13955 +13827 13828 13956 +13828 13957 13956 +13828 13829 13958 +13828 13958 13957 +13829 13830 13958 +13830 13959 13958 +13830 13831 13960 +13830 13960 13959 +13831 13832 13960 +13832 13961 13960 +13832 13833 13962 +13832 13962 13961 +13833 13834 13962 +13834 13963 13962 +13834 13835 13964 +13834 13964 13963 +13835 13836 13964 +13836 13965 13964 +13836 13837 13966 +13836 13966 13965 +13837 13838 13966 +13838 13967 13966 +13838 13839 13968 +13838 13968 13967 +13839 13840 13968 +13840 13969 13968 +13840 13841 13970 +13840 13970 13969 +13841 13842 13970 +13842 13971 13970 +13842 13843 13972 +13842 13972 13971 +13843 13844 13972 +13844 13973 13972 +13844 13845 13974 +13844 13974 13973 +13845 13846 13974 +13846 13975 13974 +13846 13847 13976 +13846 13976 13975 +13847 13848 13976 +13848 13977 13976 +13848 13849 13978 +13848 13978 13977 +13849 13850 13978 +13850 13979 13978 +13850 13851 13980 +13850 13980 13979 +13851 13852 13980 +13852 13981 13980 +13852 13853 13982 +13852 13982 13981 +13853 13854 13982 +13854 13983 13982 +13854 13855 13984 +13854 13984 13983 +13855 13856 13984 +13856 13985 13984 +13856 13857 13986 +13856 13986 13985 +13857 13858 13986 +13858 13987 13986 +13858 13859 13988 +13858 13988 13987 +13859 13860 13988 +13860 13989 13988 +13860 13861 13990 +13860 13990 13989 +13861 13862 13990 +13862 13991 13990 +13862 13863 13992 +13862 13992 13991 +13863 13864 13992 +13864 13993 13992 +13864 13865 13994 +13864 13994 13993 +13865 13866 13994 +13866 13995 13994 +13866 13867 13996 +13866 13996 13995 +13867 13868 13996 +13868 13997 13996 +13868 13869 13998 +13868 13998 13997 +13869 13870 13998 +13870 13999 13998 +13870 13871 14000 +13870 14000 13999 +13871 13872 14000 +13872 14001 14000 +13872 13873 14002 +13872 14002 14001 +13873 13874 14002 +13874 14003 14002 +13874 13875 14004 +13874 14004 14003 +13875 13876 14004 +13876 14005 14004 +13876 13877 14006 +13876 14006 14005 +13877 13878 14006 +13878 14007 14006 +13878 13879 14008 +13878 14008 14007 +13879 13880 14008 +13880 14009 14008 +13880 13881 14010 +13880 14010 14009 +13881 13882 14010 +13882 14011 14010 +13882 13883 14012 +13882 14012 14011 +13883 13884 14012 +13884 14013 14012 +13884 13885 14014 +13884 14014 14013 +13885 13886 14014 +13886 14015 14014 +13886 13887 14016 +13886 14016 14015 +13887 13888 14016 +13888 14017 14016 +13888 13889 14018 +13888 14018 14017 +13889 13890 14018 +13890 14019 14018 +13890 13891 14020 +13890 14020 14019 +13891 13892 14020 +13892 14021 14020 +13892 13893 14022 +13892 14022 14021 +13893 13894 14022 +13894 14023 14022 +13894 13895 14024 +13894 14024 14023 +13895 13896 14024 +13896 14025 14024 +13896 13897 14026 +13896 14026 14025 +13897 13898 14026 +13898 14027 14026 +13898 13899 14028 +13898 14028 14027 +13899 13900 14028 +13900 14029 14028 +13900 13901 14030 +13900 14030 14029 +13901 13902 14030 +13902 14031 14030 +13902 13903 14032 +13902 14032 14031 +13903 13904 14032 +13904 14033 14032 +13904 13905 14034 +13904 14034 14033 +13905 13906 14034 +13906 14035 14034 +13906 13907 14036 +13906 14036 14035 +13907 13908 14036 +13908 14037 14036 +13908 13909 14038 +13908 14038 14037 +13909 13910 14038 +13910 14039 14038 +13910 13911 14040 +13910 14040 14039 +13911 13912 14040 +13912 14041 14040 +13912 13913 14042 +13912 14042 14041 +13913 13914 14042 +13914 14043 14042 +13914 13915 14044 +13914 14044 14043 +13916 13917 14046 +13916 14046 14045 +13917 13918 14046 +13918 14047 14046 +13918 13919 14048 +13918 14048 14047 +13919 13920 14048 +13920 14049 14048 +13920 13921 14050 +13920 14050 14049 +13921 13922 14050 +13922 14051 14050 +13922 13923 14052 +13922 14052 14051 +13923 13924 14052 +13924 14053 14052 +13924 13925 14054 +13924 14054 14053 +13925 13926 14054 +13926 14055 14054 +13926 13927 14056 +13926 14056 14055 +13927 13928 14056 +13928 14057 14056 +13928 13929 14058 +13928 14058 14057 +13929 13930 14058 +13930 14059 14058 +13930 13931 14060 +13930 14060 14059 +13931 13932 14060 +13932 14061 14060 +13932 13933 14062 +13932 14062 14061 +13933 13934 14062 +13934 14063 14062 +13934 13935 14064 +13934 14064 14063 +13935 13936 14064 +13936 14065 14064 +13936 13937 14066 +13936 14066 14065 +13937 13938 14066 +13938 14067 14066 +13938 13939 14068 +13938 14068 14067 +13939 13940 14068 +13940 14069 14068 +13940 13941 14070 +13940 14070 14069 +13941 13942 14070 +13942 14071 14070 +13942 13943 14072 +13942 14072 14071 +13943 13944 14072 +13944 14073 14072 +13944 13945 14074 +13944 14074 14073 +13945 13946 14074 +13946 14075 14074 +13946 13947 14076 +13946 14076 14075 +13947 13948 14076 +13948 14077 14076 +13948 13949 14078 +13948 14078 14077 +13949 13950 14078 +13950 14079 14078 +13950 13951 14080 +13950 14080 14079 +13951 13952 14080 +13952 14081 14080 +13952 13953 14082 +13952 14082 14081 +13953 13954 14082 +13954 14083 14082 +13954 13955 14084 +13954 14084 14083 +13955 13956 14084 +13956 14085 14084 +13956 13957 14086 +13956 14086 14085 +13957 13958 14086 +13958 14087 14086 +13958 13959 14088 +13958 14088 14087 +13959 13960 14088 +13960 14089 14088 +13960 13961 14090 +13960 14090 14089 +13961 13962 14090 +13962 14091 14090 +13962 13963 14092 +13962 14092 14091 +13963 13964 14092 +13964 14093 14092 +13964 13965 14094 +13964 14094 14093 +13965 13966 14094 +13966 14095 14094 +13966 13967 14096 +13966 14096 14095 +13967 13968 14096 +13968 14097 14096 +13968 13969 14098 +13968 14098 14097 +13969 13970 14098 +13970 14099 14098 +13970 13971 14100 +13970 14100 14099 +13971 13972 14100 +13972 14101 14100 +13972 13973 14102 +13972 14102 14101 +13973 13974 14102 +13974 14103 14102 +13974 13975 14104 +13974 14104 14103 +13975 13976 14104 +13976 14105 14104 +13976 13977 14106 +13976 14106 14105 +13977 13978 14106 +13978 14107 14106 +13978 13979 14108 +13978 14108 14107 +13979 13980 14108 +13980 14109 14108 +13980 13981 14110 +13980 14110 14109 +13981 13982 14110 +13982 14111 14110 +13982 13983 14112 +13982 14112 14111 +13983 13984 14112 +13984 14113 14112 +13984 13985 14114 +13984 14114 14113 +13985 13986 14114 +13986 14115 14114 +13986 13987 14116 +13986 14116 14115 +13987 13988 14116 +13988 14117 14116 +13988 13989 14118 +13988 14118 14117 +13989 13990 14118 +13990 14119 14118 +13990 13991 14120 +13990 14120 14119 +13991 13992 14120 +13992 14121 14120 +13992 13993 14122 +13992 14122 14121 +13993 13994 14122 +13994 14123 14122 +13994 13995 14124 +13994 14124 14123 +13995 13996 14124 +13996 14125 14124 +13996 13997 14126 +13996 14126 14125 +13997 13998 14126 +13998 14127 14126 +13998 13999 14128 +13998 14128 14127 +13999 14000 14128 +14000 14129 14128 +14000 14001 14130 +14000 14130 14129 +14001 14002 14130 +14002 14131 14130 +14002 14003 14132 +14002 14132 14131 +14003 14004 14132 +14004 14133 14132 +14004 14005 14134 +14004 14134 14133 +14005 14006 14134 +14006 14135 14134 +14006 14007 14136 +14006 14136 14135 +14007 14008 14136 +14008 14137 14136 +14008 14009 14138 +14008 14138 14137 +14009 14010 14138 +14010 14139 14138 +14010 14011 14140 +14010 14140 14139 +14011 14012 14140 +14012 14141 14140 +14012 14013 14142 +14012 14142 14141 +14013 14014 14142 +14014 14143 14142 +14014 14015 14144 +14014 14144 14143 +14015 14016 14144 +14016 14145 14144 +14016 14017 14146 +14016 14146 14145 +14017 14018 14146 +14018 14147 14146 +14018 14019 14148 +14018 14148 14147 +14019 14020 14148 +14020 14149 14148 +14020 14021 14150 +14020 14150 14149 +14021 14022 14150 +14022 14151 14150 +14022 14023 14152 +14022 14152 14151 +14023 14024 14152 +14024 14153 14152 +14024 14025 14154 +14024 14154 14153 +14025 14026 14154 +14026 14155 14154 +14026 14027 14156 +14026 14156 14155 +14027 14028 14156 +14028 14157 14156 +14028 14029 14158 +14028 14158 14157 +14029 14030 14158 +14030 14159 14158 +14030 14031 14160 +14030 14160 14159 +14031 14032 14160 +14032 14161 14160 +14032 14033 14162 +14032 14162 14161 +14033 14034 14162 +14034 14163 14162 +14034 14035 14164 +14034 14164 14163 +14035 14036 14164 +14036 14165 14164 +14036 14037 14166 +14036 14166 14165 +14037 14038 14166 +14038 14167 14166 +14038 14039 14168 +14038 14168 14167 +14039 14040 14168 +14040 14169 14168 +14040 14041 14170 +14040 14170 14169 +14041 14042 14170 +14042 14171 14170 +14042 14043 14172 +14042 14172 14171 +14043 14044 14172 +14044 14173 14172 +14045 14046 14174 +14046 14175 14174 +14046 14047 14176 +14046 14176 14175 +14047 14048 14176 +14048 14177 14176 +14048 14049 14178 +14048 14178 14177 +14049 14050 14178 +14050 14179 14178 +14050 14051 14180 +14050 14180 14179 +14051 14052 14180 +14052 14181 14180 +14052 14053 14182 +14052 14182 14181 +14053 14054 14182 +14054 14183 14182 +14054 14055 14184 +14054 14184 14183 +14055 14056 14184 +14056 14185 14184 +14056 14057 14186 +14056 14186 14185 +14057 14058 14186 +14058 14187 14186 +14058 14059 14188 +14058 14188 14187 +14059 14060 14188 +14060 14189 14188 +14060 14061 14190 +14060 14190 14189 +14061 14062 14190 +14062 14191 14190 +14062 14063 14192 +14062 14192 14191 +14063 14064 14192 +14064 14193 14192 +14064 14065 14194 +14064 14194 14193 +14065 14066 14194 +14066 14195 14194 +14066 14067 14196 +14066 14196 14195 +14067 14068 14196 +14068 14197 14196 +14068 14069 14198 +14068 14198 14197 +14069 14070 14198 +14070 14199 14198 +14070 14071 14200 +14070 14200 14199 +14071 14072 14200 +14072 14201 14200 +14072 14073 14202 +14072 14202 14201 +14073 14074 14202 +14074 14203 14202 +14074 14075 14204 +14074 14204 14203 +14075 14076 14204 +14076 14205 14204 +14076 14077 14206 +14076 14206 14205 +14077 14078 14206 +14078 14207 14206 +14078 14079 14208 +14078 14208 14207 +14079 14080 14208 +14080 14209 14208 +14080 14081 14210 +14080 14210 14209 +14081 14082 14210 +14082 14211 14210 +14082 14083 14212 +14082 14212 14211 +14083 14084 14212 +14084 14213 14212 +14084 14085 14214 +14084 14214 14213 +14085 14086 14214 +14086 14215 14214 +14086 14087 14216 +14086 14216 14215 +14087 14088 14216 +14088 14217 14216 +14088 14089 14218 +14088 14218 14217 +14089 14090 14218 +14090 14219 14218 +14090 14091 14220 +14090 14220 14219 +14091 14092 14220 +14092 14221 14220 +14092 14093 14222 +14092 14222 14221 +14093 14094 14222 +14094 14223 14222 +14094 14095 14224 +14094 14224 14223 +14095 14096 14224 +14096 14225 14224 +14096 14097 14226 +14096 14226 14225 +14097 14098 14226 +14098 14227 14226 +14098 14099 14228 +14098 14228 14227 +14099 14100 14228 +14100 14229 14228 +14100 14101 14230 +14100 14230 14229 +14101 14102 14230 +14102 14231 14230 +14102 14103 14232 +14102 14232 14231 +14103 14104 14232 +14104 14233 14232 +14104 14105 14234 +14104 14234 14233 +14105 14106 14234 +14106 14235 14234 +14106 14107 14236 +14106 14236 14235 +14107 14108 14236 +14108 14237 14236 +14108 14109 14238 +14108 14238 14237 +14109 14110 14238 +14110 14239 14238 +14110 14111 14240 +14110 14240 14239 +14111 14112 14240 +14112 14241 14240 +14112 14113 14242 +14112 14242 14241 +14113 14114 14242 +14114 14243 14242 +14114 14115 14244 +14114 14244 14243 +14115 14116 14244 +14116 14245 14244 +14116 14117 14246 +14116 14246 14245 +14117 14118 14246 +14118 14247 14246 +14118 14119 14248 +14118 14248 14247 +14119 14120 14248 +14120 14249 14248 +14120 14121 14250 +14120 14250 14249 +14121 14122 14250 +14122 14251 14250 +14122 14123 14252 +14122 14252 14251 +14123 14124 14252 +14124 14253 14252 +14124 14125 14254 +14124 14254 14253 +14125 14126 14254 +14126 14255 14254 +14126 14127 14256 +14126 14256 14255 +14127 14128 14256 +14128 14257 14256 +14128 14129 14258 +14128 14258 14257 +14129 14130 14258 +14130 14259 14258 +14130 14131 14260 +14130 14260 14259 +14131 14132 14260 +14132 14261 14260 +14132 14133 14262 +14132 14262 14261 +14133 14134 14262 +14134 14263 14262 +14134 14135 14264 +14134 14264 14263 +14135 14136 14264 +14136 14265 14264 +14136 14137 14266 +14136 14266 14265 +14137 14138 14266 +14138 14267 14266 +14138 14139 14268 +14138 14268 14267 +14139 14140 14268 +14140 14269 14268 +14140 14141 14270 +14140 14270 14269 +14141 14142 14270 +14142 14271 14270 +14142 14143 14272 +14142 14272 14271 +14143 14144 14272 +14144 14273 14272 +14144 14145 14274 +14144 14274 14273 +14145 14146 14274 +14146 14275 14274 +14146 14147 14276 +14146 14276 14275 +14147 14148 14276 +14148 14277 14276 +14148 14149 14278 +14148 14278 14277 +14149 14150 14278 +14150 14279 14278 +14150 14151 14280 +14150 14280 14279 +14151 14152 14280 +14152 14281 14280 +14152 14153 14282 +14152 14282 14281 +14153 14154 14282 +14154 14283 14282 +14154 14155 14284 +14154 14284 14283 +14155 14156 14284 +14156 14285 14284 +14156 14157 14286 +14156 14286 14285 +14157 14158 14286 +14158 14287 14286 +14158 14159 14288 +14158 14288 14287 +14159 14160 14288 +14160 14289 14288 +14160 14161 14290 +14160 14290 14289 +14161 14162 14290 +14162 14291 14290 +14162 14163 14292 +14162 14292 14291 +14163 14164 14292 +14164 14293 14292 +14164 14165 14294 +14164 14294 14293 +14165 14166 14294 +14166 14295 14294 +14166 14167 14296 +14166 14296 14295 +14167 14168 14296 +14168 14297 14296 +14168 14169 14298 +14168 14298 14297 +14169 14170 14298 +14170 14299 14298 +14170 14171 14300 +14170 14300 14299 +14171 14172 14300 +14172 14301 14300 +14172 14173 14302 +14172 14302 14301 +14174 14175 14304 +14174 14304 14303 +14175 14176 14304 +14176 14305 14304 +14176 14177 14306 +14176 14306 14305 +14177 14178 14306 +14178 14307 14306 +14178 14179 14308 +14178 14308 14307 +14179 14180 14308 +14180 14309 14308 +14180 14181 14310 +14180 14310 14309 +14181 14182 14310 +14182 14311 14310 +14182 14183 14312 +14182 14312 14311 +14183 14184 14312 +14184 14313 14312 +14184 14185 14314 +14184 14314 14313 +14185 14186 14314 +14186 14315 14314 +14186 14187 14316 +14186 14316 14315 +14187 14188 14316 +14188 14317 14316 +14188 14189 14318 +14188 14318 14317 +14189 14190 14318 +14190 14319 14318 +14190 14191 14320 +14190 14320 14319 +14191 14192 14320 +14192 14321 14320 +14192 14193 14322 +14192 14322 14321 +14193 14194 14322 +14194 14323 14322 +14194 14195 14324 +14194 14324 14323 +14195 14196 14324 +14196 14325 14324 +14196 14197 14326 +14196 14326 14325 +14197 14198 14326 +14198 14327 14326 +14198 14199 14328 +14198 14328 14327 +14199 14200 14328 +14200 14329 14328 +14200 14201 14330 +14200 14330 14329 +14201 14202 14330 +14202 14331 14330 +14202 14203 14332 +14202 14332 14331 +14203 14204 14332 +14204 14333 14332 +14204 14205 14334 +14204 14334 14333 +14205 14206 14334 +14206 14335 14334 +14206 14207 14336 +14206 14336 14335 +14207 14208 14336 +14208 14337 14336 +14208 14209 14338 +14208 14338 14337 +14209 14210 14338 +14210 14339 14338 +14210 14211 14340 +14210 14340 14339 +14211 14212 14340 +14212 14341 14340 +14212 14213 14342 +14212 14342 14341 +14213 14214 14342 +14214 14343 14342 +14214 14215 14344 +14214 14344 14343 +14215 14216 14344 +14216 14345 14344 +14216 14217 14346 +14216 14346 14345 +14217 14218 14346 +14218 14347 14346 +14218 14219 14348 +14218 14348 14347 +14219 14220 14348 +14220 14349 14348 +14220 14221 14350 +14220 14350 14349 +14221 14222 14350 +14222 14351 14350 +14222 14223 14352 +14222 14352 14351 +14223 14224 14352 +14224 14353 14352 +14224 14225 14354 +14224 14354 14353 +14225 14226 14354 +14226 14355 14354 +14226 14227 14356 +14226 14356 14355 +14227 14228 14356 +14228 14357 14356 +14228 14229 14358 +14228 14358 14357 +14229 14230 14358 +14230 14359 14358 +14230 14231 14360 +14230 14360 14359 +14231 14232 14360 +14232 14361 14360 +14232 14233 14362 +14232 14362 14361 +14233 14234 14362 +14234 14363 14362 +14234 14235 14364 +14234 14364 14363 +14235 14236 14364 +14236 14365 14364 +14236 14237 14366 +14236 14366 14365 +14237 14238 14366 +14238 14367 14366 +14238 14239 14368 +14238 14368 14367 +14239 14240 14368 +14240 14369 14368 +14240 14241 14370 +14240 14370 14369 +14241 14242 14370 +14242 14371 14370 +14242 14243 14372 +14242 14372 14371 +14243 14244 14372 +14244 14373 14372 +14244 14245 14374 +14244 14374 14373 +14245 14246 14374 +14246 14375 14374 +14246 14247 14376 +14246 14376 14375 +14247 14248 14376 +14248 14377 14376 +14248 14249 14378 +14248 14378 14377 +14249 14250 14378 +14250 14379 14378 +14250 14251 14380 +14250 14380 14379 +14251 14252 14380 +14252 14381 14380 +14252 14253 14382 +14252 14382 14381 +14253 14254 14382 +14254 14383 14382 +14254 14255 14384 +14254 14384 14383 +14255 14256 14384 +14256 14385 14384 +14256 14257 14386 +14256 14386 14385 +14257 14258 14386 +14258 14387 14386 +14258 14259 14388 +14258 14388 14387 +14259 14260 14388 +14260 14389 14388 +14260 14261 14390 +14260 14390 14389 +14261 14262 14390 +14262 14391 14390 +14262 14263 14392 +14262 14392 14391 +14263 14264 14392 +14264 14393 14392 +14264 14265 14394 +14264 14394 14393 +14265 14266 14394 +14266 14395 14394 +14266 14267 14396 +14266 14396 14395 +14267 14268 14396 +14268 14397 14396 +14268 14269 14398 +14268 14398 14397 +14269 14270 14398 +14270 14399 14398 +14270 14271 14400 +14270 14400 14399 +14271 14272 14400 +14272 14401 14400 +14272 14273 14402 +14272 14402 14401 +14273 14274 14402 +14274 14403 14402 +14274 14275 14404 +14274 14404 14403 +14275 14276 14404 +14276 14405 14404 +14276 14277 14406 +14276 14406 14405 +14277 14278 14406 +14278 14407 14406 +14278 14279 14408 +14278 14408 14407 +14279 14280 14408 +14280 14409 14408 +14280 14281 14410 +14280 14410 14409 +14281 14282 14410 +14282 14411 14410 +14282 14283 14412 +14282 14412 14411 +14283 14284 14412 +14284 14413 14412 +14284 14285 14414 +14284 14414 14413 +14285 14286 14414 +14286 14415 14414 +14286 14287 14416 +14286 14416 14415 +14287 14288 14416 +14288 14417 14416 +14288 14289 14418 +14288 14418 14417 +14289 14290 14418 +14290 14419 14418 +14290 14291 14420 +14290 14420 14419 +14291 14292 14420 +14292 14421 14420 +14292 14293 14422 +14292 14422 14421 +14293 14294 14422 +14294 14423 14422 +14294 14295 14424 +14294 14424 14423 +14295 14296 14424 +14296 14425 14424 +14296 14297 14426 +14296 14426 14425 +14297 14298 14426 +14298 14427 14426 +14298 14299 14428 +14298 14428 14427 +14299 14300 14428 +14300 14429 14428 +14300 14301 14430 +14300 14430 14429 +14301 14302 14430 +14302 14431 14430 +14303 14304 14432 +14304 14433 14432 +14304 14305 14434 +14304 14434 14433 +14305 14306 14434 +14306 14435 14434 +14306 14307 14436 +14306 14436 14435 +14307 14308 14436 +14308 14437 14436 +14308 14309 14438 +14308 14438 14437 +14309 14310 14438 +14310 14439 14438 +14310 14311 14440 +14310 14440 14439 +14311 14312 14440 +14312 14441 14440 +14312 14313 14442 +14312 14442 14441 +14313 14314 14442 +14314 14443 14442 +14314 14315 14444 +14314 14444 14443 +14315 14316 14444 +14316 14445 14444 +14316 14317 14446 +14316 14446 14445 +14317 14318 14446 +14318 14447 14446 +14318 14319 14448 +14318 14448 14447 +14319 14320 14448 +14320 14449 14448 +14320 14321 14450 +14320 14450 14449 +14321 14322 14450 +14322 14451 14450 +14322 14323 14452 +14322 14452 14451 +14323 14324 14452 +14324 14453 14452 +14324 14325 14454 +14324 14454 14453 +14325 14326 14454 +14326 14455 14454 +14326 14327 14456 +14326 14456 14455 +14327 14328 14456 +14328 14457 14456 +14328 14329 14458 +14328 14458 14457 +14329 14330 14458 +14330 14459 14458 +14330 14331 14460 +14330 14460 14459 +14331 14332 14460 +14332 14461 14460 +14332 14333 14462 +14332 14462 14461 +14333 14334 14462 +14334 14463 14462 +14334 14335 14464 +14334 14464 14463 +14335 14336 14464 +14336 14465 14464 +14336 14337 14466 +14336 14466 14465 +14337 14338 14466 +14338 14467 14466 +14338 14339 14468 +14338 14468 14467 +14339 14340 14468 +14340 14469 14468 +14340 14341 14470 +14340 14470 14469 +14341 14342 14470 +14342 14471 14470 +14342 14343 14472 +14342 14472 14471 +14343 14344 14472 +14344 14473 14472 +14344 14345 14474 +14344 14474 14473 +14345 14346 14474 +14346 14475 14474 +14346 14347 14476 +14346 14476 14475 +14347 14348 14476 +14348 14477 14476 +14348 14349 14478 +14348 14478 14477 +14349 14350 14478 +14350 14479 14478 +14350 14351 14480 +14350 14480 14479 +14351 14352 14480 +14352 14481 14480 +14352 14353 14482 +14352 14482 14481 +14353 14354 14482 +14354 14483 14482 +14354 14355 14484 +14354 14484 14483 +14355 14356 14484 +14356 14485 14484 +14356 14357 14486 +14356 14486 14485 +14357 14358 14486 +14358 14487 14486 +14358 14359 14488 +14358 14488 14487 +14359 14360 14488 +14360 14489 14488 +14360 14361 14490 +14360 14490 14489 +14361 14362 14490 +14362 14491 14490 +14362 14363 14492 +14362 14492 14491 +14363 14364 14492 +14364 14493 14492 +14364 14365 14494 +14364 14494 14493 +14365 14366 14494 +14366 14495 14494 +14366 14367 14496 +14366 14496 14495 +14367 14368 14496 +14368 14497 14496 +14368 14369 14498 +14368 14498 14497 +14369 14370 14498 +14370 14499 14498 +14370 14371 14500 +14370 14500 14499 +14371 14372 14500 +14372 14501 14500 +14372 14373 14502 +14372 14502 14501 +14373 14374 14502 +14374 14503 14502 +14374 14375 14504 +14374 14504 14503 +14375 14376 14504 +14376 14505 14504 +14376 14377 14506 +14376 14506 14505 +14377 14378 14506 +14378 14507 14506 +14378 14379 14508 +14378 14508 14507 +14379 14380 14508 +14380 14509 14508 +14380 14381 14510 +14380 14510 14509 +14381 14382 14510 +14382 14511 14510 +14382 14383 14512 +14382 14512 14511 +14383 14384 14512 +14384 14513 14512 +14384 14385 14514 +14384 14514 14513 +14385 14386 14514 +14386 14515 14514 +14386 14387 14516 +14386 14516 14515 +14387 14388 14516 +14388 14517 14516 +14388 14389 14518 +14388 14518 14517 +14389 14390 14518 +14390 14519 14518 +14390 14391 14520 +14390 14520 14519 +14391 14392 14520 +14392 14521 14520 +14392 14393 14522 +14392 14522 14521 +14393 14394 14522 +14394 14523 14522 +14394 14395 14524 +14394 14524 14523 +14395 14396 14524 +14396 14525 14524 +14396 14397 14526 +14396 14526 14525 +14397 14398 14526 +14398 14527 14526 +14398 14399 14528 +14398 14528 14527 +14399 14400 14528 +14400 14529 14528 +14400 14401 14530 +14400 14530 14529 +14401 14402 14530 +14402 14531 14530 +14402 14403 14532 +14402 14532 14531 +14403 14404 14532 +14404 14533 14532 +14404 14405 14534 +14404 14534 14533 +14405 14406 14534 +14406 14535 14534 +14406 14407 14536 +14406 14536 14535 +14407 14408 14536 +14408 14537 14536 +14408 14409 14538 +14408 14538 14537 +14409 14410 14538 +14410 14539 14538 +14410 14411 14540 +14410 14540 14539 +14411 14412 14540 +14412 14541 14540 +14412 14413 14542 +14412 14542 14541 +14413 14414 14542 +14414 14543 14542 +14414 14415 14544 +14414 14544 14543 +14415 14416 14544 +14416 14545 14544 +14416 14417 14546 +14416 14546 14545 +14417 14418 14546 +14418 14547 14546 +14418 14419 14548 +14418 14548 14547 +14419 14420 14548 +14420 14549 14548 +14420 14421 14550 +14420 14550 14549 +14421 14422 14550 +14422 14551 14550 +14422 14423 14552 +14422 14552 14551 +14423 14424 14552 +14424 14553 14552 +14424 14425 14554 +14424 14554 14553 +14425 14426 14554 +14426 14555 14554 +14426 14427 14556 +14426 14556 14555 +14427 14428 14556 +14428 14557 14556 +14428 14429 14558 +14428 14558 14557 +14429 14430 14558 +14430 14559 14558 +14430 14431 14560 +14430 14560 14559 +14432 14433 14562 +14432 14562 14561 +14433 14434 14562 +14434 14563 14562 +14434 14435 14564 +14434 14564 14563 +14435 14436 14564 +14436 14565 14564 +14436 14437 14566 +14436 14566 14565 +14437 14438 14566 +14438 14567 14566 +14438 14439 14568 +14438 14568 14567 +14439 14440 14568 +14440 14569 14568 +14440 14441 14570 +14440 14570 14569 +14441 14442 14570 +14442 14571 14570 +14442 14443 14572 +14442 14572 14571 +14443 14444 14572 +14444 14573 14572 +14444 14445 14574 +14444 14574 14573 +14445 14446 14574 +14446 14575 14574 +14446 14447 14576 +14446 14576 14575 +14447 14448 14576 +14448 14577 14576 +14448 14449 14578 +14448 14578 14577 +14449 14450 14578 +14450 14579 14578 +14450 14451 14580 +14450 14580 14579 +14451 14452 14580 +14452 14581 14580 +14452 14453 14582 +14452 14582 14581 +14453 14454 14582 +14454 14583 14582 +14454 14455 14584 +14454 14584 14583 +14455 14456 14584 +14456 14585 14584 +14456 14457 14586 +14456 14586 14585 +14457 14458 14586 +14458 14587 14586 +14458 14459 14588 +14458 14588 14587 +14459 14460 14588 +14460 14589 14588 +14460 14461 14590 +14460 14590 14589 +14461 14462 14590 +14462 14591 14590 +14462 14463 14592 +14462 14592 14591 +14463 14464 14592 +14464 14593 14592 +14464 14465 14594 +14464 14594 14593 +14465 14466 14594 +14466 14595 14594 +14466 14467 14596 +14466 14596 14595 +14467 14468 14596 +14468 14597 14596 +14468 14469 14598 +14468 14598 14597 +14469 14470 14598 +14470 14599 14598 +14470 14471 14600 +14470 14600 14599 +14471 14472 14600 +14472 14601 14600 +14472 14473 14602 +14472 14602 14601 +14473 14474 14602 +14474 14603 14602 +14474 14475 14604 +14474 14604 14603 +14475 14476 14604 +14476 14605 14604 +14476 14477 14606 +14476 14606 14605 +14477 14478 14606 +14478 14607 14606 +14478 14479 14608 +14478 14608 14607 +14479 14480 14608 +14480 14609 14608 +14480 14481 14610 +14480 14610 14609 +14481 14482 14610 +14482 14611 14610 +14482 14483 14612 +14482 14612 14611 +14483 14484 14612 +14484 14613 14612 +14484 14485 14614 +14484 14614 14613 +14485 14486 14614 +14486 14615 14614 +14486 14487 14616 +14486 14616 14615 +14487 14488 14616 +14488 14617 14616 +14488 14489 14618 +14488 14618 14617 +14489 14490 14618 +14490 14619 14618 +14490 14491 14620 +14490 14620 14619 +14491 14492 14620 +14492 14621 14620 +14492 14493 14622 +14492 14622 14621 +14493 14494 14622 +14494 14623 14622 +14494 14495 14624 +14494 14624 14623 +14495 14496 14624 +14496 14625 14624 +14496 14497 14626 +14496 14626 14625 +14497 14498 14626 +14498 14627 14626 +14498 14499 14628 +14498 14628 14627 +14499 14500 14628 +14500 14629 14628 +14500 14501 14630 +14500 14630 14629 +14501 14502 14630 +14502 14631 14630 +14502 14503 14632 +14502 14632 14631 +14503 14504 14632 +14504 14633 14632 +14504 14505 14634 +14504 14634 14633 +14505 14506 14634 +14506 14635 14634 +14506 14507 14636 +14506 14636 14635 +14507 14508 14636 +14508 14637 14636 +14508 14509 14638 +14508 14638 14637 +14509 14510 14638 +14510 14639 14638 +14510 14511 14640 +14510 14640 14639 +14511 14512 14640 +14512 14641 14640 +14512 14513 14642 +14512 14642 14641 +14513 14514 14642 +14514 14643 14642 +14514 14515 14644 +14514 14644 14643 +14515 14516 14644 +14516 14645 14644 +14516 14517 14646 +14516 14646 14645 +14517 14518 14646 +14518 14647 14646 +14518 14519 14648 +14518 14648 14647 +14519 14520 14648 +14520 14649 14648 +14520 14521 14650 +14520 14650 14649 +14521 14522 14650 +14522 14651 14650 +14522 14523 14652 +14522 14652 14651 +14523 14524 14652 +14524 14653 14652 +14524 14525 14654 +14524 14654 14653 +14525 14526 14654 +14526 14655 14654 +14526 14527 14656 +14526 14656 14655 +14527 14528 14656 +14528 14657 14656 +14528 14529 14658 +14528 14658 14657 +14529 14530 14658 +14530 14659 14658 +14530 14531 14660 +14530 14660 14659 +14531 14532 14660 +14532 14661 14660 +14532 14533 14662 +14532 14662 14661 +14533 14534 14662 +14534 14663 14662 +14534 14535 14664 +14534 14664 14663 +14535 14536 14664 +14536 14665 14664 +14536 14537 14666 +14536 14666 14665 +14537 14538 14666 +14538 14667 14666 +14538 14539 14668 +14538 14668 14667 +14539 14540 14668 +14540 14669 14668 +14540 14541 14670 +14540 14670 14669 +14541 14542 14670 +14542 14671 14670 +14542 14543 14672 +14542 14672 14671 +14543 14544 14672 +14544 14673 14672 +14544 14545 14674 +14544 14674 14673 +14545 14546 14674 +14546 14675 14674 +14546 14547 14676 +14546 14676 14675 +14547 14548 14676 +14548 14677 14676 +14548 14549 14678 +14548 14678 14677 +14549 14550 14678 +14550 14679 14678 +14550 14551 14680 +14550 14680 14679 +14551 14552 14680 +14552 14681 14680 +14552 14553 14682 +14552 14682 14681 +14553 14554 14682 +14554 14683 14682 +14554 14555 14684 +14554 14684 14683 +14555 14556 14684 +14556 14685 14684 +14556 14557 14686 +14556 14686 14685 +14557 14558 14686 +14558 14687 14686 +14558 14559 14688 +14558 14688 14687 +14559 14560 14688 +14560 14689 14688 +14561 14562 14690 +14562 14691 14690 +14562 14563 14692 +14562 14692 14691 +14563 14564 14692 +14564 14693 14692 +14564 14565 14694 +14564 14694 14693 +14565 14566 14694 +14566 14695 14694 +14566 14567 14696 +14566 14696 14695 +14567 14568 14696 +14568 14697 14696 +14568 14569 14698 +14568 14698 14697 +14569 14570 14698 +14570 14699 14698 +14570 14571 14700 +14570 14700 14699 +14571 14572 14700 +14572 14701 14700 +14572 14573 14702 +14572 14702 14701 +14573 14574 14702 +14574 14703 14702 +14574 14575 14704 +14574 14704 14703 +14575 14576 14704 +14576 14705 14704 +14576 14577 14706 +14576 14706 14705 +14577 14578 14706 +14578 14707 14706 +14578 14579 14708 +14578 14708 14707 +14579 14580 14708 +14580 14709 14708 +14580 14581 14710 +14580 14710 14709 +14581 14582 14710 +14582 14711 14710 +14582 14583 14712 +14582 14712 14711 +14583 14584 14712 +14584 14713 14712 +14584 14585 14714 +14584 14714 14713 +14585 14586 14714 +14586 14715 14714 +14586 14587 14716 +14586 14716 14715 +14587 14588 14716 +14588 14717 14716 +14588 14589 14718 +14588 14718 14717 +14589 14590 14718 +14590 14719 14718 +14590 14591 14720 +14590 14720 14719 +14591 14592 14720 +14592 14721 14720 +14592 14593 14722 +14592 14722 14721 +14593 14594 14722 +14594 14723 14722 +14594 14595 14724 +14594 14724 14723 +14595 14596 14724 +14596 14725 14724 +14596 14597 14726 +14596 14726 14725 +14597 14598 14726 +14598 14727 14726 +14598 14599 14728 +14598 14728 14727 +14599 14600 14728 +14600 14729 14728 +14600 14601 14730 +14600 14730 14729 +14601 14602 14730 +14602 14731 14730 +14602 14603 14732 +14602 14732 14731 +14603 14604 14732 +14604 14733 14732 +14604 14605 14734 +14604 14734 14733 +14605 14606 14734 +14606 14735 14734 +14606 14607 14736 +14606 14736 14735 +14607 14608 14736 +14608 14737 14736 +14608 14609 14738 +14608 14738 14737 +14609 14610 14738 +14610 14739 14738 +14610 14611 14740 +14610 14740 14739 +14611 14612 14740 +14612 14741 14740 +14612 14613 14742 +14612 14742 14741 +14613 14614 14742 +14614 14743 14742 +14614 14615 14744 +14614 14744 14743 +14615 14616 14744 +14616 14745 14744 +14616 14617 14746 +14616 14746 14745 +14617 14618 14746 +14618 14747 14746 +14618 14619 14748 +14618 14748 14747 +14619 14620 14748 +14620 14749 14748 +14620 14621 14750 +14620 14750 14749 +14621 14622 14750 +14622 14751 14750 +14622 14623 14752 +14622 14752 14751 +14623 14624 14752 +14624 14753 14752 +14624 14625 14754 +14624 14754 14753 +14625 14626 14754 +14626 14755 14754 +14626 14627 14756 +14626 14756 14755 +14627 14628 14756 +14628 14757 14756 +14628 14629 14758 +14628 14758 14757 +14629 14630 14758 +14630 14759 14758 +14630 14631 14760 +14630 14760 14759 +14631 14632 14760 +14632 14761 14760 +14632 14633 14762 +14632 14762 14761 +14633 14634 14762 +14634 14763 14762 +14634 14635 14764 +14634 14764 14763 +14635 14636 14764 +14636 14765 14764 +14636 14637 14766 +14636 14766 14765 +14637 14638 14766 +14638 14767 14766 +14638 14639 14768 +14638 14768 14767 +14639 14640 14768 +14640 14769 14768 +14640 14641 14770 +14640 14770 14769 +14641 14642 14770 +14642 14771 14770 +14642 14643 14772 +14642 14772 14771 +14643 14644 14772 +14644 14773 14772 +14644 14645 14774 +14644 14774 14773 +14645 14646 14774 +14646 14775 14774 +14646 14647 14776 +14646 14776 14775 +14647 14648 14776 +14648 14777 14776 +14648 14649 14778 +14648 14778 14777 +14649 14650 14778 +14650 14779 14778 +14650 14651 14780 +14650 14780 14779 +14651 14652 14780 +14652 14781 14780 +14652 14653 14782 +14652 14782 14781 +14653 14654 14782 +14654 14783 14782 +14654 14655 14784 +14654 14784 14783 +14655 14656 14784 +14656 14785 14784 +14656 14657 14786 +14656 14786 14785 +14657 14658 14786 +14658 14787 14786 +14658 14659 14788 +14658 14788 14787 +14659 14660 14788 +14660 14789 14788 +14660 14661 14790 +14660 14790 14789 +14661 14662 14790 +14662 14791 14790 +14662 14663 14792 +14662 14792 14791 +14663 14664 14792 +14664 14793 14792 +14664 14665 14794 +14664 14794 14793 +14665 14666 14794 +14666 14795 14794 +14666 14667 14796 +14666 14796 14795 +14667 14668 14796 +14668 14797 14796 +14668 14669 14798 +14668 14798 14797 +14669 14670 14798 +14670 14799 14798 +14670 14671 14800 +14670 14800 14799 +14671 14672 14800 +14672 14801 14800 +14672 14673 14802 +14672 14802 14801 +14673 14674 14802 +14674 14803 14802 +14674 14675 14804 +14674 14804 14803 +14675 14676 14804 +14676 14805 14804 +14676 14677 14806 +14676 14806 14805 +14677 14678 14806 +14678 14807 14806 +14678 14679 14808 +14678 14808 14807 +14679 14680 14808 +14680 14809 14808 +14680 14681 14810 +14680 14810 14809 +14681 14682 14810 +14682 14811 14810 +14682 14683 14812 +14682 14812 14811 +14683 14684 14812 +14684 14813 14812 +14684 14685 14814 +14684 14814 14813 +14685 14686 14814 +14686 14815 14814 +14686 14687 14816 +14686 14816 14815 +14687 14688 14816 +14688 14817 14816 +14688 14689 14818 +14688 14818 14817 +14690 14691 14820 +14690 14820 14819 +14691 14692 14820 +14692 14821 14820 +14692 14693 14822 +14692 14822 14821 +14693 14694 14822 +14694 14823 14822 +14694 14695 14824 +14694 14824 14823 +14695 14696 14824 +14696 14825 14824 +14696 14697 14826 +14696 14826 14825 +14697 14698 14826 +14698 14827 14826 +14698 14699 14828 +14698 14828 14827 +14699 14700 14828 +14700 14829 14828 +14700 14701 14830 +14700 14830 14829 +14701 14702 14830 +14702 14831 14830 +14702 14703 14832 +14702 14832 14831 +14703 14704 14832 +14704 14833 14832 +14704 14705 14834 +14704 14834 14833 +14705 14706 14834 +14706 14835 14834 +14706 14707 14836 +14706 14836 14835 +14707 14708 14836 +14708 14837 14836 +14708 14709 14838 +14708 14838 14837 +14709 14710 14838 +14710 14839 14838 +14710 14711 14840 +14710 14840 14839 +14711 14712 14840 +14712 14841 14840 +14712 14713 14842 +14712 14842 14841 +14713 14714 14842 +14714 14843 14842 +14714 14715 14844 +14714 14844 14843 +14715 14716 14844 +14716 14845 14844 +14716 14717 14846 +14716 14846 14845 +14717 14718 14846 +14718 14847 14846 +14718 14719 14848 +14718 14848 14847 +14719 14720 14848 +14720 14849 14848 +14720 14721 14850 +14720 14850 14849 +14721 14722 14850 +14722 14851 14850 +14722 14723 14852 +14722 14852 14851 +14723 14724 14852 +14724 14853 14852 +14724 14725 14854 +14724 14854 14853 +14725 14726 14854 +14726 14855 14854 +14726 14727 14856 +14726 14856 14855 +14727 14728 14856 +14728 14857 14856 +14728 14729 14858 +14728 14858 14857 +14729 14730 14858 +14730 14859 14858 +14730 14731 14860 +14730 14860 14859 +14731 14732 14860 +14732 14861 14860 +14732 14733 14862 +14732 14862 14861 +14733 14734 14862 +14734 14863 14862 +14734 14735 14864 +14734 14864 14863 +14735 14736 14864 +14736 14865 14864 +14736 14737 14866 +14736 14866 14865 +14737 14738 14866 +14738 14867 14866 +14738 14739 14868 +14738 14868 14867 +14739 14740 14868 +14740 14869 14868 +14740 14741 14870 +14740 14870 14869 +14741 14742 14870 +14742 14871 14870 +14742 14743 14872 +14742 14872 14871 +14743 14744 14872 +14744 14873 14872 +14744 14745 14874 +14744 14874 14873 +14745 14746 14874 +14746 14875 14874 +14746 14747 14876 +14746 14876 14875 +14747 14748 14876 +14748 14877 14876 +14748 14749 14878 +14748 14878 14877 +14749 14750 14878 +14750 14879 14878 +14750 14751 14880 +14750 14880 14879 +14751 14752 14880 +14752 14881 14880 +14752 14753 14882 +14752 14882 14881 +14753 14754 14882 +14754 14883 14882 +14754 14755 14884 +14754 14884 14883 +14755 14756 14884 +14756 14885 14884 +14756 14757 14886 +14756 14886 14885 +14757 14758 14886 +14758 14887 14886 +14758 14759 14888 +14758 14888 14887 +14759 14760 14888 +14760 14889 14888 +14760 14761 14890 +14760 14890 14889 +14761 14762 14890 +14762 14891 14890 +14762 14763 14892 +14762 14892 14891 +14763 14764 14892 +14764 14893 14892 +14764 14765 14894 +14764 14894 14893 +14765 14766 14894 +14766 14895 14894 +14766 14767 14896 +14766 14896 14895 +14767 14768 14896 +14768 14897 14896 +14768 14769 14898 +14768 14898 14897 +14769 14770 14898 +14770 14899 14898 +14770 14771 14900 +14770 14900 14899 +14771 14772 14900 +14772 14901 14900 +14772 14773 14902 +14772 14902 14901 +14773 14774 14902 +14774 14903 14902 +14774 14775 14904 +14774 14904 14903 +14775 14776 14904 +14776 14905 14904 +14776 14777 14906 +14776 14906 14905 +14777 14778 14906 +14778 14907 14906 +14778 14779 14908 +14778 14908 14907 +14779 14780 14908 +14780 14909 14908 +14780 14781 14910 +14780 14910 14909 +14781 14782 14910 +14782 14911 14910 +14782 14783 14912 +14782 14912 14911 +14783 14784 14912 +14784 14913 14912 +14784 14785 14914 +14784 14914 14913 +14785 14786 14914 +14786 14915 14914 +14786 14787 14916 +14786 14916 14915 +14787 14788 14916 +14788 14917 14916 +14788 14789 14918 +14788 14918 14917 +14789 14790 14918 +14790 14919 14918 +14790 14791 14920 +14790 14920 14919 +14791 14792 14920 +14792 14921 14920 +14792 14793 14922 +14792 14922 14921 +14793 14794 14922 +14794 14923 14922 +14794 14795 14924 +14794 14924 14923 +14795 14796 14924 +14796 14925 14924 +14796 14797 14926 +14796 14926 14925 +14797 14798 14926 +14798 14927 14926 +14798 14799 14928 +14798 14928 14927 +14799 14800 14928 +14800 14929 14928 +14800 14801 14930 +14800 14930 14929 +14801 14802 14930 +14802 14931 14930 +14802 14803 14932 +14802 14932 14931 +14803 14804 14932 +14804 14933 14932 +14804 14805 14934 +14804 14934 14933 +14805 14806 14934 +14806 14935 14934 +14806 14807 14936 +14806 14936 14935 +14807 14808 14936 +14808 14937 14936 +14808 14809 14938 +14808 14938 14937 +14809 14810 14938 +14810 14939 14938 +14810 14811 14940 +14810 14940 14939 +14811 14812 14940 +14812 14941 14940 +14812 14813 14942 +14812 14942 14941 +14813 14814 14942 +14814 14943 14942 +14814 14815 14944 +14814 14944 14943 +14815 14816 14944 +14816 14945 14944 +14816 14817 14946 +14816 14946 14945 +14817 14818 14946 +14818 14947 14946 +14819 14820 14948 +14820 14949 14948 +14820 14821 14950 +14820 14950 14949 +14821 14822 14950 +14822 14951 14950 +14822 14823 14952 +14822 14952 14951 +14823 14824 14952 +14824 14953 14952 +14824 14825 14954 +14824 14954 14953 +14825 14826 14954 +14826 14955 14954 +14826 14827 14956 +14826 14956 14955 +14827 14828 14956 +14828 14957 14956 +14828 14829 14958 +14828 14958 14957 +14829 14830 14958 +14830 14959 14958 +14830 14831 14960 +14830 14960 14959 +14831 14832 14960 +14832 14961 14960 +14832 14833 14962 +14832 14962 14961 +14833 14834 14962 +14834 14963 14962 +14834 14835 14964 +14834 14964 14963 +14835 14836 14964 +14836 14965 14964 +14836 14837 14966 +14836 14966 14965 +14837 14838 14966 +14838 14967 14966 +14838 14839 14968 +14838 14968 14967 +14839 14840 14968 +14840 14969 14968 +14840 14841 14970 +14840 14970 14969 +14841 14842 14970 +14842 14971 14970 +14842 14843 14972 +14842 14972 14971 +14843 14844 14972 +14844 14973 14972 +14844 14845 14974 +14844 14974 14973 +14845 14846 14974 +14846 14975 14974 +14846 14847 14976 +14846 14976 14975 +14847 14848 14976 +14848 14977 14976 +14848 14849 14978 +14848 14978 14977 +14849 14850 14978 +14850 14979 14978 +14850 14851 14980 +14850 14980 14979 +14851 14852 14980 +14852 14981 14980 +14852 14853 14982 +14852 14982 14981 +14853 14854 14982 +14854 14983 14982 +14854 14855 14984 +14854 14984 14983 +14855 14856 14984 +14856 14985 14984 +14856 14857 14986 +14856 14986 14985 +14857 14858 14986 +14858 14987 14986 +14858 14859 14988 +14858 14988 14987 +14859 14860 14988 +14860 14989 14988 +14860 14861 14990 +14860 14990 14989 +14861 14862 14990 +14862 14991 14990 +14862 14863 14992 +14862 14992 14991 +14863 14864 14992 +14864 14993 14992 +14864 14865 14994 +14864 14994 14993 +14865 14866 14994 +14866 14995 14994 +14866 14867 14996 +14866 14996 14995 +14867 14868 14996 +14868 14997 14996 +14868 14869 14998 +14868 14998 14997 +14869 14870 14998 +14870 14999 14998 +14870 14871 15000 +14870 15000 14999 +14871 14872 15000 +14872 15001 15000 +14872 14873 15002 +14872 15002 15001 +14873 14874 15002 +14874 15003 15002 +14874 14875 15004 +14874 15004 15003 +14875 14876 15004 +14876 15005 15004 +14876 14877 15006 +14876 15006 15005 +14877 14878 15006 +14878 15007 15006 +14878 14879 15008 +14878 15008 15007 +14879 14880 15008 +14880 15009 15008 +14880 14881 15010 +14880 15010 15009 +14881 14882 15010 +14882 15011 15010 +14882 14883 15012 +14882 15012 15011 +14883 14884 15012 +14884 15013 15012 +14884 14885 15014 +14884 15014 15013 +14885 14886 15014 +14886 15015 15014 +14886 14887 15016 +14886 15016 15015 +14887 14888 15016 +14888 15017 15016 +14888 14889 15018 +14888 15018 15017 +14889 14890 15018 +14890 15019 15018 +14890 14891 15020 +14890 15020 15019 +14891 14892 15020 +14892 15021 15020 +14892 14893 15022 +14892 15022 15021 +14893 14894 15022 +14894 15023 15022 +14894 14895 15024 +14894 15024 15023 +14895 14896 15024 +14896 15025 15024 +14896 14897 15026 +14896 15026 15025 +14897 14898 15026 +14898 15027 15026 +14898 14899 15028 +14898 15028 15027 +14899 14900 15028 +14900 15029 15028 +14900 14901 15030 +14900 15030 15029 +14901 14902 15030 +14902 15031 15030 +14902 14903 15032 +14902 15032 15031 +14903 14904 15032 +14904 15033 15032 +14904 14905 15034 +14904 15034 15033 +14905 14906 15034 +14906 15035 15034 +14906 14907 15036 +14906 15036 15035 +14907 14908 15036 +14908 15037 15036 +14908 14909 15038 +14908 15038 15037 +14909 14910 15038 +14910 15039 15038 +14910 14911 15040 +14910 15040 15039 +14911 14912 15040 +14912 15041 15040 +14912 14913 15042 +14912 15042 15041 +14913 14914 15042 +14914 15043 15042 +14914 14915 15044 +14914 15044 15043 +14915 14916 15044 +14916 15045 15044 +14916 14917 15046 +14916 15046 15045 +14917 14918 15046 +14918 15047 15046 +14918 14919 15048 +14918 15048 15047 +14919 14920 15048 +14920 15049 15048 +14920 14921 15050 +14920 15050 15049 +14921 14922 15050 +14922 15051 15050 +14922 14923 15052 +14922 15052 15051 +14923 14924 15052 +14924 15053 15052 +14924 14925 15054 +14924 15054 15053 +14925 14926 15054 +14926 15055 15054 +14926 14927 15056 +14926 15056 15055 +14927 14928 15056 +14928 15057 15056 +14928 14929 15058 +14928 15058 15057 +14929 14930 15058 +14930 15059 15058 +14930 14931 15060 +14930 15060 15059 +14931 14932 15060 +14932 15061 15060 +14932 14933 15062 +14932 15062 15061 +14933 14934 15062 +14934 15063 15062 +14934 14935 15064 +14934 15064 15063 +14935 14936 15064 +14936 15065 15064 +14936 14937 15066 +14936 15066 15065 +14937 14938 15066 +14938 15067 15066 +14938 14939 15068 +14938 15068 15067 +14939 14940 15068 +14940 15069 15068 +14940 14941 15070 +14940 15070 15069 +14941 14942 15070 +14942 15071 15070 +14942 14943 15072 +14942 15072 15071 +14943 14944 15072 +14944 15073 15072 +14944 14945 15074 +14944 15074 15073 +14945 14946 15074 +14946 15075 15074 +14946 14947 15076 +14946 15076 15075 +14948 14949 15078 +14948 15078 15077 +14949 14950 15078 +14950 15079 15078 +14950 14951 15080 +14950 15080 15079 +14951 14952 15080 +14952 15081 15080 +14952 14953 15082 +14952 15082 15081 +14953 14954 15082 +14954 15083 15082 +14954 14955 15084 +14954 15084 15083 +14955 14956 15084 +14956 15085 15084 +14956 14957 15086 +14956 15086 15085 +14957 14958 15086 +14958 15087 15086 +14958 14959 15088 +14958 15088 15087 +14959 14960 15088 +14960 15089 15088 +14960 14961 15090 +14960 15090 15089 +14961 14962 15090 +14962 15091 15090 +14962 14963 15092 +14962 15092 15091 +14963 14964 15092 +14964 15093 15092 +14964 14965 15094 +14964 15094 15093 +14965 14966 15094 +14966 15095 15094 +14966 14967 15096 +14966 15096 15095 +14967 14968 15096 +14968 15097 15096 +14968 14969 15098 +14968 15098 15097 +14969 14970 15098 +14970 15099 15098 +14970 14971 15100 +14970 15100 15099 +14971 14972 15100 +14972 15101 15100 +14972 14973 15102 +14972 15102 15101 +14973 14974 15102 +14974 15103 15102 +14974 14975 15104 +14974 15104 15103 +14975 14976 15104 +14976 15105 15104 +14976 14977 15106 +14976 15106 15105 +14977 14978 15106 +14978 15107 15106 +14978 14979 15108 +14978 15108 15107 +14979 14980 15108 +14980 15109 15108 +14980 14981 15110 +14980 15110 15109 +14981 14982 15110 +14982 15111 15110 +14982 14983 15112 +14982 15112 15111 +14983 14984 15112 +14984 15113 15112 +14984 14985 15114 +14984 15114 15113 +14985 14986 15114 +14986 15115 15114 +14986 14987 15116 +14986 15116 15115 +14987 14988 15116 +14988 15117 15116 +14988 14989 15118 +14988 15118 15117 +14989 14990 15118 +14990 15119 15118 +14990 14991 15120 +14990 15120 15119 +14991 14992 15120 +14992 15121 15120 +14992 14993 15122 +14992 15122 15121 +14993 14994 15122 +14994 15123 15122 +14994 14995 15124 +14994 15124 15123 +14995 14996 15124 +14996 15125 15124 +14996 14997 15126 +14996 15126 15125 +14997 14998 15126 +14998 15127 15126 +14998 14999 15128 +14998 15128 15127 +14999 15000 15128 +15000 15129 15128 +15000 15001 15130 +15000 15130 15129 +15001 15002 15130 +15002 15131 15130 +15002 15003 15132 +15002 15132 15131 +15003 15004 15132 +15004 15133 15132 +15004 15005 15134 +15004 15134 15133 +15005 15006 15134 +15006 15135 15134 +15006 15007 15136 +15006 15136 15135 +15007 15008 15136 +15008 15137 15136 +15008 15009 15138 +15008 15138 15137 +15009 15010 15138 +15010 15139 15138 +15010 15011 15140 +15010 15140 15139 +15011 15012 15140 +15012 15141 15140 +15012 15013 15142 +15012 15142 15141 +15013 15014 15142 +15014 15143 15142 +15014 15015 15144 +15014 15144 15143 +15015 15016 15144 +15016 15145 15144 +15016 15017 15146 +15016 15146 15145 +15017 15018 15146 +15018 15147 15146 +15018 15019 15148 +15018 15148 15147 +15019 15020 15148 +15020 15149 15148 +15020 15021 15150 +15020 15150 15149 +15021 15022 15150 +15022 15151 15150 +15022 15023 15152 +15022 15152 15151 +15023 15024 15152 +15024 15153 15152 +15024 15025 15154 +15024 15154 15153 +15025 15026 15154 +15026 15155 15154 +15026 15027 15156 +15026 15156 15155 +15027 15028 15156 +15028 15157 15156 +15028 15029 15158 +15028 15158 15157 +15029 15030 15158 +15030 15159 15158 +15030 15031 15160 +15030 15160 15159 +15031 15032 15160 +15032 15161 15160 +15032 15033 15162 +15032 15162 15161 +15033 15034 15162 +15034 15163 15162 +15034 15035 15164 +15034 15164 15163 +15035 15036 15164 +15036 15165 15164 +15036 15037 15166 +15036 15166 15165 +15037 15038 15166 +15038 15167 15166 +15038 15039 15168 +15038 15168 15167 +15039 15040 15168 +15040 15169 15168 +15040 15041 15170 +15040 15170 15169 +15041 15042 15170 +15042 15171 15170 +15042 15043 15172 +15042 15172 15171 +15043 15044 15172 +15044 15173 15172 +15044 15045 15174 +15044 15174 15173 +15045 15046 15174 +15046 15175 15174 +15046 15047 15176 +15046 15176 15175 +15047 15048 15176 +15048 15177 15176 +15048 15049 15178 +15048 15178 15177 +15049 15050 15178 +15050 15179 15178 +15050 15051 15180 +15050 15180 15179 +15051 15052 15180 +15052 15181 15180 +15052 15053 15182 +15052 15182 15181 +15053 15054 15182 +15054 15183 15182 +15054 15055 15184 +15054 15184 15183 +15055 15056 15184 +15056 15185 15184 +15056 15057 15186 +15056 15186 15185 +15057 15058 15186 +15058 15187 15186 +15058 15059 15188 +15058 15188 15187 +15059 15060 15188 +15060 15189 15188 +15060 15061 15190 +15060 15190 15189 +15061 15062 15190 +15062 15191 15190 +15062 15063 15192 +15062 15192 15191 +15063 15064 15192 +15064 15193 15192 +15064 15065 15194 +15064 15194 15193 +15065 15066 15194 +15066 15195 15194 +15066 15067 15196 +15066 15196 15195 +15067 15068 15196 +15068 15197 15196 +15068 15069 15198 +15068 15198 15197 +15069 15070 15198 +15070 15199 15198 +15070 15071 15200 +15070 15200 15199 +15071 15072 15200 +15072 15201 15200 +15072 15073 15202 +15072 15202 15201 +15073 15074 15202 +15074 15203 15202 +15074 15075 15204 +15074 15204 15203 +15075 15076 15204 +15076 15205 15204 +15077 15078 15206 +15078 15207 15206 +15078 15079 15208 +15078 15208 15207 +15079 15080 15208 +15080 15209 15208 +15080 15081 15210 +15080 15210 15209 +15081 15082 15210 +15082 15211 15210 +15082 15083 15212 +15082 15212 15211 +15083 15084 15212 +15084 15213 15212 +15084 15085 15214 +15084 15214 15213 +15085 15086 15214 +15086 15215 15214 +15086 15087 15216 +15086 15216 15215 +15087 15088 15216 +15088 15217 15216 +15088 15089 15218 +15088 15218 15217 +15089 15090 15218 +15090 15219 15218 +15090 15091 15220 +15090 15220 15219 +15091 15092 15220 +15092 15221 15220 +15092 15093 15222 +15092 15222 15221 +15093 15094 15222 +15094 15223 15222 +15094 15095 15224 +15094 15224 15223 +15095 15096 15224 +15096 15225 15224 +15096 15097 15226 +15096 15226 15225 +15097 15098 15226 +15098 15227 15226 +15098 15099 15228 +15098 15228 15227 +15099 15100 15228 +15100 15229 15228 +15100 15101 15230 +15100 15230 15229 +15101 15102 15230 +15102 15231 15230 +15102 15103 15232 +15102 15232 15231 +15103 15104 15232 +15104 15233 15232 +15104 15105 15234 +15104 15234 15233 +15105 15106 15234 +15106 15235 15234 +15106 15107 15236 +15106 15236 15235 +15107 15108 15236 +15108 15237 15236 +15108 15109 15238 +15108 15238 15237 +15109 15110 15238 +15110 15239 15238 +15110 15111 15240 +15110 15240 15239 +15111 15112 15240 +15112 15241 15240 +15112 15113 15242 +15112 15242 15241 +15113 15114 15242 +15114 15243 15242 +15114 15115 15244 +15114 15244 15243 +15115 15116 15244 +15116 15245 15244 +15116 15117 15246 +15116 15246 15245 +15117 15118 15246 +15118 15247 15246 +15118 15119 15248 +15118 15248 15247 +15119 15120 15248 +15120 15249 15248 +15120 15121 15250 +15120 15250 15249 +15121 15122 15250 +15122 15251 15250 +15122 15123 15252 +15122 15252 15251 +15123 15124 15252 +15124 15253 15252 +15124 15125 15254 +15124 15254 15253 +15125 15126 15254 +15126 15255 15254 +15126 15127 15256 +15126 15256 15255 +15127 15128 15256 +15128 15257 15256 +15128 15129 15258 +15128 15258 15257 +15129 15130 15258 +15130 15259 15258 +15130 15131 15260 +15130 15260 15259 +15131 15132 15260 +15132 15261 15260 +15132 15133 15262 +15132 15262 15261 +15133 15134 15262 +15134 15263 15262 +15134 15135 15264 +15134 15264 15263 +15135 15136 15264 +15136 15265 15264 +15136 15137 15266 +15136 15266 15265 +15137 15138 15266 +15138 15267 15266 +15138 15139 15268 +15138 15268 15267 +15139 15140 15268 +15140 15269 15268 +15140 15141 15270 +15140 15270 15269 +15141 15142 15270 +15142 15271 15270 +15142 15143 15272 +15142 15272 15271 +15143 15144 15272 +15144 15273 15272 +15144 15145 15274 +15144 15274 15273 +15145 15146 15274 +15146 15275 15274 +15146 15147 15276 +15146 15276 15275 +15147 15148 15276 +15148 15277 15276 +15148 15149 15278 +15148 15278 15277 +15149 15150 15278 +15150 15279 15278 +15150 15151 15280 +15150 15280 15279 +15151 15152 15280 +15152 15281 15280 +15152 15153 15282 +15152 15282 15281 +15153 15154 15282 +15154 15283 15282 +15154 15155 15284 +15154 15284 15283 +15155 15156 15284 +15156 15285 15284 +15156 15157 15286 +15156 15286 15285 +15157 15158 15286 +15158 15287 15286 +15158 15159 15288 +15158 15288 15287 +15159 15160 15288 +15160 15289 15288 +15160 15161 15290 +15160 15290 15289 +15161 15162 15290 +15162 15291 15290 +15162 15163 15292 +15162 15292 15291 +15163 15164 15292 +15164 15293 15292 +15164 15165 15294 +15164 15294 15293 +15165 15166 15294 +15166 15295 15294 +15166 15167 15296 +15166 15296 15295 +15167 15168 15296 +15168 15297 15296 +15168 15169 15298 +15168 15298 15297 +15169 15170 15298 +15170 15299 15298 +15170 15171 15300 +15170 15300 15299 +15171 15172 15300 +15172 15301 15300 +15172 15173 15302 +15172 15302 15301 +15173 15174 15302 +15174 15303 15302 +15174 15175 15304 +15174 15304 15303 +15175 15176 15304 +15176 15305 15304 +15176 15177 15306 +15176 15306 15305 +15177 15178 15306 +15178 15307 15306 +15178 15179 15308 +15178 15308 15307 +15179 15180 15308 +15180 15309 15308 +15180 15181 15310 +15180 15310 15309 +15181 15182 15310 +15182 15311 15310 +15182 15183 15312 +15182 15312 15311 +15183 15184 15312 +15184 15313 15312 +15184 15185 15314 +15184 15314 15313 +15185 15186 15314 +15186 15315 15314 +15186 15187 15316 +15186 15316 15315 +15187 15188 15316 +15188 15317 15316 +15188 15189 15318 +15188 15318 15317 +15189 15190 15318 +15190 15319 15318 +15190 15191 15320 +15190 15320 15319 +15191 15192 15320 +15192 15321 15320 +15192 15193 15322 +15192 15322 15321 +15193 15194 15322 +15194 15323 15322 +15194 15195 15324 +15194 15324 15323 +15195 15196 15324 +15196 15325 15324 +15196 15197 15326 +15196 15326 15325 +15197 15198 15326 +15198 15327 15326 +15198 15199 15328 +15198 15328 15327 +15199 15200 15328 +15200 15329 15328 +15200 15201 15330 +15200 15330 15329 +15201 15202 15330 +15202 15331 15330 +15202 15203 15332 +15202 15332 15331 +15203 15204 15332 +15204 15333 15332 +15204 15205 15334 +15204 15334 15333 +15206 15207 15336 +15206 15336 15335 +15207 15208 15336 +15208 15337 15336 +15208 15209 15338 +15208 15338 15337 +15209 15210 15338 +15210 15339 15338 +15210 15211 15340 +15210 15340 15339 +15211 15212 15340 +15212 15341 15340 +15212 15213 15342 +15212 15342 15341 +15213 15214 15342 +15214 15343 15342 +15214 15215 15344 +15214 15344 15343 +15215 15216 15344 +15216 15345 15344 +15216 15217 15346 +15216 15346 15345 +15217 15218 15346 +15218 15347 15346 +15218 15219 15348 +15218 15348 15347 +15219 15220 15348 +15220 15349 15348 +15220 15221 15350 +15220 15350 15349 +15221 15222 15350 +15222 15351 15350 +15222 15223 15352 +15222 15352 15351 +15223 15224 15352 +15224 15353 15352 +15224 15225 15354 +15224 15354 15353 +15225 15226 15354 +15226 15355 15354 +15226 15227 15356 +15226 15356 15355 +15227 15228 15356 +15228 15357 15356 +15228 15229 15358 +15228 15358 15357 +15229 15230 15358 +15230 15359 15358 +15230 15231 15360 +15230 15360 15359 +15231 15232 15360 +15232 15361 15360 +15232 15233 15362 +15232 15362 15361 +15233 15234 15362 +15234 15363 15362 +15234 15235 15364 +15234 15364 15363 +15235 15236 15364 +15236 15365 15364 +15236 15237 15366 +15236 15366 15365 +15237 15238 15366 +15238 15367 15366 +15238 15239 15368 +15238 15368 15367 +15239 15240 15368 +15240 15369 15368 +15240 15241 15370 +15240 15370 15369 +15241 15242 15370 +15242 15371 15370 +15242 15243 15372 +15242 15372 15371 +15243 15244 15372 +15244 15373 15372 +15244 15245 15374 +15244 15374 15373 +15245 15246 15374 +15246 15375 15374 +15246 15247 15376 +15246 15376 15375 +15247 15248 15376 +15248 15377 15376 +15248 15249 15378 +15248 15378 15377 +15249 15250 15378 +15250 15379 15378 +15250 15251 15380 +15250 15380 15379 +15251 15252 15380 +15252 15381 15380 +15252 15253 15382 +15252 15382 15381 +15253 15254 15382 +15254 15383 15382 +15254 15255 15384 +15254 15384 15383 +15255 15256 15384 +15256 15385 15384 +15256 15257 15386 +15256 15386 15385 +15257 15258 15386 +15258 15387 15386 +15258 15259 15388 +15258 15388 15387 +15259 15260 15388 +15260 15389 15388 +15260 15261 15390 +15260 15390 15389 +15261 15262 15390 +15262 15391 15390 +15262 15263 15392 +15262 15392 15391 +15263 15264 15392 +15264 15393 15392 +15264 15265 15394 +15264 15394 15393 +15265 15266 15394 +15266 15395 15394 +15266 15267 15396 +15266 15396 15395 +15267 15268 15396 +15268 15397 15396 +15268 15269 15398 +15268 15398 15397 +15269 15270 15398 +15270 15399 15398 +15270 15271 15400 +15270 15400 15399 +15271 15272 15400 +15272 15401 15400 +15272 15273 15402 +15272 15402 15401 +15273 15274 15402 +15274 15403 15402 +15274 15275 15404 +15274 15404 15403 +15275 15276 15404 +15276 15405 15404 +15276 15277 15406 +15276 15406 15405 +15277 15278 15406 +15278 15407 15406 +15278 15279 15408 +15278 15408 15407 +15279 15280 15408 +15280 15409 15408 +15280 15281 15410 +15280 15410 15409 +15281 15282 15410 +15282 15411 15410 +15282 15283 15412 +15282 15412 15411 +15283 15284 15412 +15284 15413 15412 +15284 15285 15414 +15284 15414 15413 +15285 15286 15414 +15286 15415 15414 +15286 15287 15416 +15286 15416 15415 +15287 15288 15416 +15288 15417 15416 +15288 15289 15418 +15288 15418 15417 +15289 15290 15418 +15290 15419 15418 +15290 15291 15420 +15290 15420 15419 +15291 15292 15420 +15292 15421 15420 +15292 15293 15422 +15292 15422 15421 +15293 15294 15422 +15294 15423 15422 +15294 15295 15424 +15294 15424 15423 +15295 15296 15424 +15296 15425 15424 +15296 15297 15426 +15296 15426 15425 +15297 15298 15426 +15298 15427 15426 +15298 15299 15428 +15298 15428 15427 +15299 15300 15428 +15300 15429 15428 +15300 15301 15430 +15300 15430 15429 +15301 15302 15430 +15302 15431 15430 +15302 15303 15432 +15302 15432 15431 +15303 15304 15432 +15304 15433 15432 +15304 15305 15434 +15304 15434 15433 +15305 15306 15434 +15306 15435 15434 +15306 15307 15436 +15306 15436 15435 +15307 15308 15436 +15308 15437 15436 +15308 15309 15438 +15308 15438 15437 +15309 15310 15438 +15310 15439 15438 +15310 15311 15440 +15310 15440 15439 +15311 15312 15440 +15312 15441 15440 +15312 15313 15442 +15312 15442 15441 +15313 15314 15442 +15314 15443 15442 +15314 15315 15444 +15314 15444 15443 +15315 15316 15444 +15316 15445 15444 +15316 15317 15446 +15316 15446 15445 +15317 15318 15446 +15318 15447 15446 +15318 15319 15448 +15318 15448 15447 +15319 15320 15448 +15320 15449 15448 +15320 15321 15450 +15320 15450 15449 +15321 15322 15450 +15322 15451 15450 +15322 15323 15452 +15322 15452 15451 +15323 15324 15452 +15324 15453 15452 +15324 15325 15454 +15324 15454 15453 +15325 15326 15454 +15326 15455 15454 +15326 15327 15456 +15326 15456 15455 +15327 15328 15456 +15328 15457 15456 +15328 15329 15458 +15328 15458 15457 +15329 15330 15458 +15330 15459 15458 +15330 15331 15460 +15330 15460 15459 +15331 15332 15460 +15332 15461 15460 +15332 15333 15462 +15332 15462 15461 +15333 15334 15462 +15334 15463 15462 +15335 15336 15464 +15336 15465 15464 +15336 15337 15466 +15336 15466 15465 +15337 15338 15466 +15338 15467 15466 +15338 15339 15468 +15338 15468 15467 +15339 15340 15468 +15340 15469 15468 +15340 15341 15470 +15340 15470 15469 +15341 15342 15470 +15342 15471 15470 +15342 15343 15472 +15342 15472 15471 +15343 15344 15472 +15344 15473 15472 +15344 15345 15474 +15344 15474 15473 +15345 15346 15474 +15346 15475 15474 +15346 15347 15476 +15346 15476 15475 +15347 15348 15476 +15348 15477 15476 +15348 15349 15478 +15348 15478 15477 +15349 15350 15478 +15350 15479 15478 +15350 15351 15480 +15350 15480 15479 +15351 15352 15480 +15352 15481 15480 +15352 15353 15482 +15352 15482 15481 +15353 15354 15482 +15354 15483 15482 +15354 15355 15484 +15354 15484 15483 +15355 15356 15484 +15356 15485 15484 +15356 15357 15486 +15356 15486 15485 +15357 15358 15486 +15358 15487 15486 +15358 15359 15488 +15358 15488 15487 +15359 15360 15488 +15360 15489 15488 +15360 15361 15490 +15360 15490 15489 +15361 15362 15490 +15362 15491 15490 +15362 15363 15492 +15362 15492 15491 +15363 15364 15492 +15364 15493 15492 +15364 15365 15494 +15364 15494 15493 +15365 15366 15494 +15366 15495 15494 +15366 15367 15496 +15366 15496 15495 +15367 15368 15496 +15368 15497 15496 +15368 15369 15498 +15368 15498 15497 +15369 15370 15498 +15370 15499 15498 +15370 15371 15500 +15370 15500 15499 +15371 15372 15500 +15372 15501 15500 +15372 15373 15502 +15372 15502 15501 +15373 15374 15502 +15374 15503 15502 +15374 15375 15504 +15374 15504 15503 +15375 15376 15504 +15376 15505 15504 +15376 15377 15506 +15376 15506 15505 +15377 15378 15506 +15378 15507 15506 +15378 15379 15508 +15378 15508 15507 +15379 15380 15508 +15380 15509 15508 +15380 15381 15510 +15380 15510 15509 +15381 15382 15510 +15382 15511 15510 +15382 15383 15512 +15382 15512 15511 +15383 15384 15512 +15384 15513 15512 +15384 15385 15514 +15384 15514 15513 +15385 15386 15514 +15386 15515 15514 +15386 15387 15516 +15386 15516 15515 +15387 15388 15516 +15388 15517 15516 +15388 15389 15518 +15388 15518 15517 +15389 15390 15518 +15390 15519 15518 +15390 15391 15520 +15390 15520 15519 +15391 15392 15520 +15392 15521 15520 +15392 15393 15522 +15392 15522 15521 +15393 15394 15522 +15394 15523 15522 +15394 15395 15524 +15394 15524 15523 +15395 15396 15524 +15396 15525 15524 +15396 15397 15526 +15396 15526 15525 +15397 15398 15526 +15398 15527 15526 +15398 15399 15528 +15398 15528 15527 +15399 15400 15528 +15400 15529 15528 +15400 15401 15530 +15400 15530 15529 +15401 15402 15530 +15402 15531 15530 +15402 15403 15532 +15402 15532 15531 +15403 15404 15532 +15404 15533 15532 +15404 15405 15534 +15404 15534 15533 +15405 15406 15534 +15406 15535 15534 +15406 15407 15536 +15406 15536 15535 +15407 15408 15536 +15408 15537 15536 +15408 15409 15538 +15408 15538 15537 +15409 15410 15538 +15410 15539 15538 +15410 15411 15540 +15410 15540 15539 +15411 15412 15540 +15412 15541 15540 +15412 15413 15542 +15412 15542 15541 +15413 15414 15542 +15414 15543 15542 +15414 15415 15544 +15414 15544 15543 +15415 15416 15544 +15416 15545 15544 +15416 15417 15546 +15416 15546 15545 +15417 15418 15546 +15418 15547 15546 +15418 15419 15548 +15418 15548 15547 +15419 15420 15548 +15420 15549 15548 +15420 15421 15550 +15420 15550 15549 +15421 15422 15550 +15422 15551 15550 +15422 15423 15552 +15422 15552 15551 +15423 15424 15552 +15424 15553 15552 +15424 15425 15554 +15424 15554 15553 +15425 15426 15554 +15426 15555 15554 +15426 15427 15556 +15426 15556 15555 +15427 15428 15556 +15428 15557 15556 +15428 15429 15558 +15428 15558 15557 +15429 15430 15558 +15430 15559 15558 +15430 15431 15560 +15430 15560 15559 +15431 15432 15560 +15432 15561 15560 +15432 15433 15562 +15432 15562 15561 +15433 15434 15562 +15434 15563 15562 +15434 15435 15564 +15434 15564 15563 +15435 15436 15564 +15436 15565 15564 +15436 15437 15566 +15436 15566 15565 +15437 15438 15566 +15438 15567 15566 +15438 15439 15568 +15438 15568 15567 +15439 15440 15568 +15440 15569 15568 +15440 15441 15570 +15440 15570 15569 +15441 15442 15570 +15442 15571 15570 +15442 15443 15572 +15442 15572 15571 +15443 15444 15572 +15444 15573 15572 +15444 15445 15574 +15444 15574 15573 +15445 15446 15574 +15446 15575 15574 +15446 15447 15576 +15446 15576 15575 +15447 15448 15576 +15448 15577 15576 +15448 15449 15578 +15448 15578 15577 +15449 15450 15578 +15450 15579 15578 +15450 15451 15580 +15450 15580 15579 +15451 15452 15580 +15452 15581 15580 +15452 15453 15582 +15452 15582 15581 +15453 15454 15582 +15454 15583 15582 +15454 15455 15584 +15454 15584 15583 +15455 15456 15584 +15456 15585 15584 +15456 15457 15586 +15456 15586 15585 +15457 15458 15586 +15458 15587 15586 +15458 15459 15588 +15458 15588 15587 +15459 15460 15588 +15460 15589 15588 +15460 15461 15590 +15460 15590 15589 +15461 15462 15590 +15462 15591 15590 +15462 15463 15592 +15462 15592 15591 +15464 15465 15594 +15464 15594 15593 +15465 15466 15594 +15466 15595 15594 +15466 15467 15596 +15466 15596 15595 +15467 15468 15596 +15468 15597 15596 +15468 15469 15598 +15468 15598 15597 +15469 15470 15598 +15470 15599 15598 +15470 15471 15600 +15470 15600 15599 +15471 15472 15600 +15472 15601 15600 +15472 15473 15602 +15472 15602 15601 +15473 15474 15602 +15474 15603 15602 +15474 15475 15604 +15474 15604 15603 +15475 15476 15604 +15476 15605 15604 +15476 15477 15606 +15476 15606 15605 +15477 15478 15606 +15478 15607 15606 +15478 15479 15608 +15478 15608 15607 +15479 15480 15608 +15480 15609 15608 +15480 15481 15610 +15480 15610 15609 +15481 15482 15610 +15482 15611 15610 +15482 15483 15612 +15482 15612 15611 +15483 15484 15612 +15484 15613 15612 +15484 15485 15614 +15484 15614 15613 +15485 15486 15614 +15486 15615 15614 +15486 15487 15616 +15486 15616 15615 +15487 15488 15616 +15488 15617 15616 +15488 15489 15618 +15488 15618 15617 +15489 15490 15618 +15490 15619 15618 +15490 15491 15620 +15490 15620 15619 +15491 15492 15620 +15492 15621 15620 +15492 15493 15622 +15492 15622 15621 +15493 15494 15622 +15494 15623 15622 +15494 15495 15624 +15494 15624 15623 +15495 15496 15624 +15496 15625 15624 +15496 15497 15626 +15496 15626 15625 +15497 15498 15626 +15498 15627 15626 +15498 15499 15628 +15498 15628 15627 +15499 15500 15628 +15500 15629 15628 +15500 15501 15630 +15500 15630 15629 +15501 15502 15630 +15502 15631 15630 +15502 15503 15632 +15502 15632 15631 +15503 15504 15632 +15504 15633 15632 +15504 15505 15634 +15504 15634 15633 +15505 15506 15634 +15506 15635 15634 +15506 15507 15636 +15506 15636 15635 +15507 15508 15636 +15508 15637 15636 +15508 15509 15638 +15508 15638 15637 +15509 15510 15638 +15510 15639 15638 +15510 15511 15640 +15510 15640 15639 +15511 15512 15640 +15512 15641 15640 +15512 15513 15642 +15512 15642 15641 +15513 15514 15642 +15514 15643 15642 +15514 15515 15644 +15514 15644 15643 +15515 15516 15644 +15516 15645 15644 +15516 15517 15646 +15516 15646 15645 +15517 15518 15646 +15518 15647 15646 +15518 15519 15648 +15518 15648 15647 +15519 15520 15648 +15520 15649 15648 +15520 15521 15650 +15520 15650 15649 +15521 15522 15650 +15522 15651 15650 +15522 15523 15652 +15522 15652 15651 +15523 15524 15652 +15524 15653 15652 +15524 15525 15654 +15524 15654 15653 +15525 15526 15654 +15526 15655 15654 +15526 15527 15656 +15526 15656 15655 +15527 15528 15656 +15528 15657 15656 +15528 15529 15658 +15528 15658 15657 +15529 15530 15658 +15530 15659 15658 +15530 15531 15660 +15530 15660 15659 +15531 15532 15660 +15532 15661 15660 +15532 15533 15662 +15532 15662 15661 +15533 15534 15662 +15534 15663 15662 +15534 15535 15664 +15534 15664 15663 +15535 15536 15664 +15536 15665 15664 +15536 15537 15666 +15536 15666 15665 +15537 15538 15666 +15538 15667 15666 +15538 15539 15668 +15538 15668 15667 +15539 15540 15668 +15540 15669 15668 +15540 15541 15670 +15540 15670 15669 +15541 15542 15670 +15542 15671 15670 +15542 15543 15672 +15542 15672 15671 +15543 15544 15672 +15544 15673 15672 +15544 15545 15674 +15544 15674 15673 +15545 15546 15674 +15546 15675 15674 +15546 15547 15676 +15546 15676 15675 +15547 15548 15676 +15548 15677 15676 +15548 15549 15678 +15548 15678 15677 +15549 15550 15678 +15550 15679 15678 +15550 15551 15680 +15550 15680 15679 +15551 15552 15680 +15552 15681 15680 +15552 15553 15682 +15552 15682 15681 +15553 15554 15682 +15554 15683 15682 +15554 15555 15684 +15554 15684 15683 +15555 15556 15684 +15556 15685 15684 +15556 15557 15686 +15556 15686 15685 +15557 15558 15686 +15558 15687 15686 +15558 15559 15688 +15558 15688 15687 +15559 15560 15688 +15560 15689 15688 +15560 15561 15690 +15560 15690 15689 +15561 15562 15690 +15562 15691 15690 +15562 15563 15692 +15562 15692 15691 +15563 15564 15692 +15564 15693 15692 +15564 15565 15694 +15564 15694 15693 +15565 15566 15694 +15566 15695 15694 +15566 15567 15696 +15566 15696 15695 +15567 15568 15696 +15568 15697 15696 +15568 15569 15698 +15568 15698 15697 +15569 15570 15698 +15570 15699 15698 +15570 15571 15700 +15570 15700 15699 +15571 15572 15700 +15572 15701 15700 +15572 15573 15702 +15572 15702 15701 +15573 15574 15702 +15574 15703 15702 +15574 15575 15704 +15574 15704 15703 +15575 15576 15704 +15576 15705 15704 +15576 15577 15706 +15576 15706 15705 +15577 15578 15706 +15578 15707 15706 +15578 15579 15708 +15578 15708 15707 +15579 15580 15708 +15580 15709 15708 +15580 15581 15710 +15580 15710 15709 +15581 15582 15710 +15582 15711 15710 +15582 15583 15712 +15582 15712 15711 +15583 15584 15712 +15584 15713 15712 +15584 15585 15714 +15584 15714 15713 +15585 15586 15714 +15586 15715 15714 +15586 15587 15716 +15586 15716 15715 +15587 15588 15716 +15588 15717 15716 +15588 15589 15718 +15588 15718 15717 +15589 15590 15718 +15590 15719 15718 +15590 15591 15720 +15590 15720 15719 +15591 15592 15720 +15592 15721 15720 +15593 15594 15722 +15594 15723 15722 +15594 15595 15724 +15594 15724 15723 +15595 15596 15724 +15596 15725 15724 +15596 15597 15726 +15596 15726 15725 +15597 15598 15726 +15598 15727 15726 +15598 15599 15728 +15598 15728 15727 +15599 15600 15728 +15600 15729 15728 +15600 15601 15730 +15600 15730 15729 +15601 15602 15730 +15602 15731 15730 +15602 15603 15732 +15602 15732 15731 +15603 15604 15732 +15604 15733 15732 +15604 15605 15734 +15604 15734 15733 +15605 15606 15734 +15606 15735 15734 +15606 15607 15736 +15606 15736 15735 +15607 15608 15736 +15608 15737 15736 +15608 15609 15738 +15608 15738 15737 +15609 15610 15738 +15610 15739 15738 +15610 15611 15740 +15610 15740 15739 +15611 15612 15740 +15612 15741 15740 +15612 15613 15742 +15612 15742 15741 +15613 15614 15742 +15614 15743 15742 +15614 15615 15744 +15614 15744 15743 +15615 15616 15744 +15616 15745 15744 +15616 15617 15746 +15616 15746 15745 +15617 15618 15746 +15618 15747 15746 +15618 15619 15748 +15618 15748 15747 +15619 15620 15748 +15620 15749 15748 +15620 15621 15750 +15620 15750 15749 +15621 15622 15750 +15622 15751 15750 +15622 15623 15752 +15622 15752 15751 +15623 15624 15752 +15624 15753 15752 +15624 15625 15754 +15624 15754 15753 +15625 15626 15754 +15626 15755 15754 +15626 15627 15756 +15626 15756 15755 +15627 15628 15756 +15628 15757 15756 +15628 15629 15758 +15628 15758 15757 +15629 15630 15758 +15630 15759 15758 +15630 15631 15760 +15630 15760 15759 +15631 15632 15760 +15632 15761 15760 +15632 15633 15762 +15632 15762 15761 +15633 15634 15762 +15634 15763 15762 +15634 15635 15764 +15634 15764 15763 +15635 15636 15764 +15636 15765 15764 +15636 15637 15766 +15636 15766 15765 +15637 15638 15766 +15638 15767 15766 +15638 15639 15768 +15638 15768 15767 +15639 15640 15768 +15640 15769 15768 +15640 15641 15770 +15640 15770 15769 +15641 15642 15770 +15642 15771 15770 +15642 15643 15772 +15642 15772 15771 +15643 15644 15772 +15644 15773 15772 +15644 15645 15774 +15644 15774 15773 +15645 15646 15774 +15646 15775 15774 +15646 15647 15776 +15646 15776 15775 +15647 15648 15776 +15648 15777 15776 +15648 15649 15778 +15648 15778 15777 +15649 15650 15778 +15650 15779 15778 +15650 15651 15780 +15650 15780 15779 +15651 15652 15780 +15652 15781 15780 +15652 15653 15782 +15652 15782 15781 +15653 15654 15782 +15654 15783 15782 +15654 15655 15784 +15654 15784 15783 +15655 15656 15784 +15656 15785 15784 +15656 15657 15786 +15656 15786 15785 +15657 15658 15786 +15658 15787 15786 +15658 15659 15788 +15658 15788 15787 +15659 15660 15788 +15660 15789 15788 +15660 15661 15790 +15660 15790 15789 +15661 15662 15790 +15662 15791 15790 +15662 15663 15792 +15662 15792 15791 +15663 15664 15792 +15664 15793 15792 +15664 15665 15794 +15664 15794 15793 +15665 15666 15794 +15666 15795 15794 +15666 15667 15796 +15666 15796 15795 +15667 15668 15796 +15668 15797 15796 +15668 15669 15798 +15668 15798 15797 +15669 15670 15798 +15670 15799 15798 +15670 15671 15800 +15670 15800 15799 +15671 15672 15800 +15672 15801 15800 +15672 15673 15802 +15672 15802 15801 +15673 15674 15802 +15674 15803 15802 +15674 15675 15804 +15674 15804 15803 +15675 15676 15804 +15676 15805 15804 +15676 15677 15806 +15676 15806 15805 +15677 15678 15806 +15678 15807 15806 +15678 15679 15808 +15678 15808 15807 +15679 15680 15808 +15680 15809 15808 +15680 15681 15810 +15680 15810 15809 +15681 15682 15810 +15682 15811 15810 +15682 15683 15812 +15682 15812 15811 +15683 15684 15812 +15684 15813 15812 +15684 15685 15814 +15684 15814 15813 +15685 15686 15814 +15686 15815 15814 +15686 15687 15816 +15686 15816 15815 +15687 15688 15816 +15688 15817 15816 +15688 15689 15818 +15688 15818 15817 +15689 15690 15818 +15690 15819 15818 +15690 15691 15820 +15690 15820 15819 +15691 15692 15820 +15692 15821 15820 +15692 15693 15822 +15692 15822 15821 +15693 15694 15822 +15694 15823 15822 +15694 15695 15824 +15694 15824 15823 +15695 15696 15824 +15696 15825 15824 +15696 15697 15826 +15696 15826 15825 +15697 15698 15826 +15698 15827 15826 +15698 15699 15828 +15698 15828 15827 +15699 15700 15828 +15700 15829 15828 +15700 15701 15830 +15700 15830 15829 +15701 15702 15830 +15702 15831 15830 +15702 15703 15832 +15702 15832 15831 +15703 15704 15832 +15704 15833 15832 +15704 15705 15834 +15704 15834 15833 +15705 15706 15834 +15706 15835 15834 +15706 15707 15836 +15706 15836 15835 +15707 15708 15836 +15708 15837 15836 +15708 15709 15838 +15708 15838 15837 +15709 15710 15838 +15710 15839 15838 +15710 15711 15840 +15710 15840 15839 +15711 15712 15840 +15712 15841 15840 +15712 15713 15842 +15712 15842 15841 +15713 15714 15842 +15714 15843 15842 +15714 15715 15844 +15714 15844 15843 +15715 15716 15844 +15716 15845 15844 +15716 15717 15846 +15716 15846 15845 +15717 15718 15846 +15718 15847 15846 +15718 15719 15848 +15718 15848 15847 +15719 15720 15848 +15720 15849 15848 +15720 15721 15850 +15720 15850 15849 +15722 15723 15852 +15722 15852 15851 +15723 15724 15852 +15724 15853 15852 +15724 15725 15854 +15724 15854 15853 +15725 15726 15854 +15726 15855 15854 +15726 15727 15856 +15726 15856 15855 +15727 15728 15856 +15728 15857 15856 +15728 15729 15858 +15728 15858 15857 +15729 15730 15858 +15730 15859 15858 +15730 15731 15860 +15730 15860 15859 +15731 15732 15860 +15732 15861 15860 +15732 15733 15862 +15732 15862 15861 +15733 15734 15862 +15734 15863 15862 +15734 15735 15864 +15734 15864 15863 +15735 15736 15864 +15736 15865 15864 +15736 15737 15866 +15736 15866 15865 +15737 15738 15866 +15738 15867 15866 +15738 15739 15868 +15738 15868 15867 +15739 15740 15868 +15740 15869 15868 +15740 15741 15870 +15740 15870 15869 +15741 15742 15870 +15742 15871 15870 +15742 15743 15872 +15742 15872 15871 +15743 15744 15872 +15744 15873 15872 +15744 15745 15874 +15744 15874 15873 +15745 15746 15874 +15746 15875 15874 +15746 15747 15876 +15746 15876 15875 +15747 15748 15876 +15748 15877 15876 +15748 15749 15878 +15748 15878 15877 +15749 15750 15878 +15750 15879 15878 +15750 15751 15880 +15750 15880 15879 +15751 15752 15880 +15752 15881 15880 +15752 15753 15882 +15752 15882 15881 +15753 15754 15882 +15754 15883 15882 +15754 15755 15884 +15754 15884 15883 +15755 15756 15884 +15756 15885 15884 +15756 15757 15886 +15756 15886 15885 +15757 15758 15886 +15758 15887 15886 +15758 15759 15888 +15758 15888 15887 +15759 15760 15888 +15760 15889 15888 +15760 15761 15890 +15760 15890 15889 +15761 15762 15890 +15762 15891 15890 +15762 15763 15892 +15762 15892 15891 +15763 15764 15892 +15764 15893 15892 +15764 15765 15894 +15764 15894 15893 +15765 15766 15894 +15766 15895 15894 +15766 15767 15896 +15766 15896 15895 +15767 15768 15896 +15768 15897 15896 +15768 15769 15898 +15768 15898 15897 +15769 15770 15898 +15770 15899 15898 +15770 15771 15900 +15770 15900 15899 +15771 15772 15900 +15772 15901 15900 +15772 15773 15902 +15772 15902 15901 +15773 15774 15902 +15774 15903 15902 +15774 15775 15904 +15774 15904 15903 +15775 15776 15904 +15776 15905 15904 +15776 15777 15906 +15776 15906 15905 +15777 15778 15906 +15778 15907 15906 +15778 15779 15908 +15778 15908 15907 +15779 15780 15908 +15780 15909 15908 +15780 15781 15910 +15780 15910 15909 +15781 15782 15910 +15782 15911 15910 +15782 15783 15912 +15782 15912 15911 +15783 15784 15912 +15784 15913 15912 +15784 15785 15914 +15784 15914 15913 +15785 15786 15914 +15786 15915 15914 +15786 15787 15916 +15786 15916 15915 +15787 15788 15916 +15788 15917 15916 +15788 15789 15918 +15788 15918 15917 +15789 15790 15918 +15790 15919 15918 +15790 15791 15920 +15790 15920 15919 +15791 15792 15920 +15792 15921 15920 +15792 15793 15922 +15792 15922 15921 +15793 15794 15922 +15794 15923 15922 +15794 15795 15924 +15794 15924 15923 +15795 15796 15924 +15796 15925 15924 +15796 15797 15926 +15796 15926 15925 +15797 15798 15926 +15798 15927 15926 +15798 15799 15928 +15798 15928 15927 +15799 15800 15928 +15800 15929 15928 +15800 15801 15930 +15800 15930 15929 +15801 15802 15930 +15802 15931 15930 +15802 15803 15932 +15802 15932 15931 +15803 15804 15932 +15804 15933 15932 +15804 15805 15934 +15804 15934 15933 +15805 15806 15934 +15806 15935 15934 +15806 15807 15936 +15806 15936 15935 +15807 15808 15936 +15808 15937 15936 +15808 15809 15938 +15808 15938 15937 +15809 15810 15938 +15810 15939 15938 +15810 15811 15940 +15810 15940 15939 +15811 15812 15940 +15812 15941 15940 +15812 15813 15942 +15812 15942 15941 +15813 15814 15942 +15814 15943 15942 +15814 15815 15944 +15814 15944 15943 +15815 15816 15944 +15816 15945 15944 +15816 15817 15946 +15816 15946 15945 +15817 15818 15946 +15818 15947 15946 +15818 15819 15948 +15818 15948 15947 +15819 15820 15948 +15820 15949 15948 +15820 15821 15950 +15820 15950 15949 +15821 15822 15950 +15822 15951 15950 +15822 15823 15952 +15822 15952 15951 +15823 15824 15952 +15824 15953 15952 +15824 15825 15954 +15824 15954 15953 +15825 15826 15954 +15826 15955 15954 +15826 15827 15956 +15826 15956 15955 +15827 15828 15956 +15828 15957 15956 +15828 15829 15958 +15828 15958 15957 +15829 15830 15958 +15830 15959 15958 +15830 15831 15960 +15830 15960 15959 +15831 15832 15960 +15832 15961 15960 +15832 15833 15962 +15832 15962 15961 +15833 15834 15962 +15834 15963 15962 +15834 15835 15964 +15834 15964 15963 +15835 15836 15964 +15836 15965 15964 +15836 15837 15966 +15836 15966 15965 +15837 15838 15966 +15838 15967 15966 +15838 15839 15968 +15838 15968 15967 +15839 15840 15968 +15840 15969 15968 +15840 15841 15970 +15840 15970 15969 +15841 15842 15970 +15842 15971 15970 +15842 15843 15972 +15842 15972 15971 +15843 15844 15972 +15844 15973 15972 +15844 15845 15974 +15844 15974 15973 +15845 15846 15974 +15846 15975 15974 +15846 15847 15976 +15846 15976 15975 +15847 15848 15976 +15848 15977 15976 +15848 15849 15978 +15848 15978 15977 +15849 15850 15978 +15850 15979 15978 +15851 15852 15980 +15852 15981 15980 +15852 15853 15982 +15852 15982 15981 +15853 15854 15982 +15854 15983 15982 +15854 15855 15984 +15854 15984 15983 +15855 15856 15984 +15856 15985 15984 +15856 15857 15986 +15856 15986 15985 +15857 15858 15986 +15858 15987 15986 +15858 15859 15988 +15858 15988 15987 +15859 15860 15988 +15860 15989 15988 +15860 15861 15990 +15860 15990 15989 +15861 15862 15990 +15862 15991 15990 +15862 15863 15992 +15862 15992 15991 +15863 15864 15992 +15864 15993 15992 +15864 15865 15994 +15864 15994 15993 +15865 15866 15994 +15866 15995 15994 +15866 15867 15996 +15866 15996 15995 +15867 15868 15996 +15868 15997 15996 +15868 15869 15998 +15868 15998 15997 +15869 15870 15998 +15870 15999 15998 +15870 15871 16000 +15870 16000 15999 +15871 15872 16000 +15872 16001 16000 +15872 15873 16002 +15872 16002 16001 +15873 15874 16002 +15874 16003 16002 +15874 15875 16004 +15874 16004 16003 +15875 15876 16004 +15876 16005 16004 +15876 15877 16006 +15876 16006 16005 +15877 15878 16006 +15878 16007 16006 +15878 15879 16008 +15878 16008 16007 +15879 15880 16008 +15880 16009 16008 +15880 15881 16010 +15880 16010 16009 +15881 15882 16010 +15882 16011 16010 +15882 15883 16012 +15882 16012 16011 +15883 15884 16012 +15884 16013 16012 +15884 15885 16014 +15884 16014 16013 +15885 15886 16014 +15886 16015 16014 +15886 15887 16016 +15886 16016 16015 +15887 15888 16016 +15888 16017 16016 +15888 15889 16018 +15888 16018 16017 +15889 15890 16018 +15890 16019 16018 +15890 15891 16020 +15890 16020 16019 +15891 15892 16020 +15892 16021 16020 +15892 15893 16022 +15892 16022 16021 +15893 15894 16022 +15894 16023 16022 +15894 15895 16024 +15894 16024 16023 +15895 15896 16024 +15896 16025 16024 +15896 15897 16026 +15896 16026 16025 +15897 15898 16026 +15898 16027 16026 +15898 15899 16028 +15898 16028 16027 +15899 15900 16028 +15900 16029 16028 +15900 15901 16030 +15900 16030 16029 +15901 15902 16030 +15902 16031 16030 +15902 15903 16032 +15902 16032 16031 +15903 15904 16032 +15904 16033 16032 +15904 15905 16034 +15904 16034 16033 +15905 15906 16034 +15906 16035 16034 +15906 15907 16036 +15906 16036 16035 +15907 15908 16036 +15908 16037 16036 +15908 15909 16038 +15908 16038 16037 +15909 15910 16038 +15910 16039 16038 +15910 15911 16040 +15910 16040 16039 +15911 15912 16040 +15912 16041 16040 +15912 15913 16042 +15912 16042 16041 +15913 15914 16042 +15914 16043 16042 +15914 15915 16044 +15914 16044 16043 +15915 15916 16044 +15916 16045 16044 +15916 15917 16046 +15916 16046 16045 +15917 15918 16046 +15918 16047 16046 +15918 15919 16048 +15918 16048 16047 +15919 15920 16048 +15920 16049 16048 +15920 15921 16050 +15920 16050 16049 +15921 15922 16050 +15922 16051 16050 +15922 15923 16052 +15922 16052 16051 +15923 15924 16052 +15924 16053 16052 +15924 15925 16054 +15924 16054 16053 +15925 15926 16054 +15926 16055 16054 +15926 15927 16056 +15926 16056 16055 +15927 15928 16056 +15928 16057 16056 +15928 15929 16058 +15928 16058 16057 +15929 15930 16058 +15930 16059 16058 +15930 15931 16060 +15930 16060 16059 +15931 15932 16060 +15932 16061 16060 +15932 15933 16062 +15932 16062 16061 +15933 15934 16062 +15934 16063 16062 +15934 15935 16064 +15934 16064 16063 +15935 15936 16064 +15936 16065 16064 +15936 15937 16066 +15936 16066 16065 +15937 15938 16066 +15938 16067 16066 +15938 15939 16068 +15938 16068 16067 +15939 15940 16068 +15940 16069 16068 +15940 15941 16070 +15940 16070 16069 +15941 15942 16070 +15942 16071 16070 +15942 15943 16072 +15942 16072 16071 +15943 15944 16072 +15944 16073 16072 +15944 15945 16074 +15944 16074 16073 +15945 15946 16074 +15946 16075 16074 +15946 15947 16076 +15946 16076 16075 +15947 15948 16076 +15948 16077 16076 +15948 15949 16078 +15948 16078 16077 +15949 15950 16078 +15950 16079 16078 +15950 15951 16080 +15950 16080 16079 +15951 15952 16080 +15952 16081 16080 +15952 15953 16082 +15952 16082 16081 +15953 15954 16082 +15954 16083 16082 +15954 15955 16084 +15954 16084 16083 +15955 15956 16084 +15956 16085 16084 +15956 15957 16086 +15956 16086 16085 +15957 15958 16086 +15958 16087 16086 +15958 15959 16088 +15958 16088 16087 +15959 15960 16088 +15960 16089 16088 +15960 15961 16090 +15960 16090 16089 +15961 15962 16090 +15962 16091 16090 +15962 15963 16092 +15962 16092 16091 +15963 15964 16092 +15964 16093 16092 +15964 15965 16094 +15964 16094 16093 +15965 15966 16094 +15966 16095 16094 +15966 15967 16096 +15966 16096 16095 +15967 15968 16096 +15968 16097 16096 +15968 15969 16098 +15968 16098 16097 +15969 15970 16098 +15970 16099 16098 +15970 15971 16100 +15970 16100 16099 +15971 15972 16100 +15972 16101 16100 +15972 15973 16102 +15972 16102 16101 +15973 15974 16102 +15974 16103 16102 +15974 15975 16104 +15974 16104 16103 +15975 15976 16104 +15976 16105 16104 +15976 15977 16106 +15976 16106 16105 +15977 15978 16106 +15978 16107 16106 +15978 15979 16108 +15978 16108 16107 +15980 15981 16110 +15980 16110 16109 +15981 15982 16110 +15982 16111 16110 +15982 15983 16112 +15982 16112 16111 +15983 15984 16112 +15984 16113 16112 +15984 15985 16114 +15984 16114 16113 +15985 15986 16114 +15986 16115 16114 +15986 15987 16116 +15986 16116 16115 +15987 15988 16116 +15988 16117 16116 +15988 15989 16118 +15988 16118 16117 +15989 15990 16118 +15990 16119 16118 +15990 15991 16120 +15990 16120 16119 +15991 15992 16120 +15992 16121 16120 +15992 15993 16122 +15992 16122 16121 +15993 15994 16122 +15994 16123 16122 +15994 15995 16124 +15994 16124 16123 +15995 15996 16124 +15996 16125 16124 +15996 15997 16126 +15996 16126 16125 +15997 15998 16126 +15998 16127 16126 +15998 15999 16128 +15998 16128 16127 +15999 16000 16128 +16000 16129 16128 +16000 16001 16130 +16000 16130 16129 +16001 16002 16130 +16002 16131 16130 +16002 16003 16132 +16002 16132 16131 +16003 16004 16132 +16004 16133 16132 +16004 16005 16134 +16004 16134 16133 +16005 16006 16134 +16006 16135 16134 +16006 16007 16136 +16006 16136 16135 +16007 16008 16136 +16008 16137 16136 +16008 16009 16138 +16008 16138 16137 +16009 16010 16138 +16010 16139 16138 +16010 16011 16140 +16010 16140 16139 +16011 16012 16140 +16012 16141 16140 +16012 16013 16142 +16012 16142 16141 +16013 16014 16142 +16014 16143 16142 +16014 16015 16144 +16014 16144 16143 +16015 16016 16144 +16016 16145 16144 +16016 16017 16146 +16016 16146 16145 +16017 16018 16146 +16018 16147 16146 +16018 16019 16148 +16018 16148 16147 +16019 16020 16148 +16020 16149 16148 +16020 16021 16150 +16020 16150 16149 +16021 16022 16150 +16022 16151 16150 +16022 16023 16152 +16022 16152 16151 +16023 16024 16152 +16024 16153 16152 +16024 16025 16154 +16024 16154 16153 +16025 16026 16154 +16026 16155 16154 +16026 16027 16156 +16026 16156 16155 +16027 16028 16156 +16028 16157 16156 +16028 16029 16158 +16028 16158 16157 +16029 16030 16158 +16030 16159 16158 +16030 16031 16160 +16030 16160 16159 +16031 16032 16160 +16032 16161 16160 +16032 16033 16162 +16032 16162 16161 +16033 16034 16162 +16034 16163 16162 +16034 16035 16164 +16034 16164 16163 +16035 16036 16164 +16036 16165 16164 +16036 16037 16166 +16036 16166 16165 +16037 16038 16166 +16038 16167 16166 +16038 16039 16168 +16038 16168 16167 +16039 16040 16168 +16040 16169 16168 +16040 16041 16170 +16040 16170 16169 +16041 16042 16170 +16042 16171 16170 +16042 16043 16172 +16042 16172 16171 +16043 16044 16172 +16044 16173 16172 +16044 16045 16174 +16044 16174 16173 +16045 16046 16174 +16046 16175 16174 +16046 16047 16176 +16046 16176 16175 +16047 16048 16176 +16048 16177 16176 +16048 16049 16178 +16048 16178 16177 +16049 16050 16178 +16050 16179 16178 +16050 16051 16180 +16050 16180 16179 +16051 16052 16180 +16052 16181 16180 +16052 16053 16182 +16052 16182 16181 +16053 16054 16182 +16054 16183 16182 +16054 16055 16184 +16054 16184 16183 +16055 16056 16184 +16056 16185 16184 +16056 16057 16186 +16056 16186 16185 +16057 16058 16186 +16058 16187 16186 +16058 16059 16188 +16058 16188 16187 +16059 16060 16188 +16060 16189 16188 +16060 16061 16190 +16060 16190 16189 +16061 16062 16190 +16062 16191 16190 +16062 16063 16192 +16062 16192 16191 +16063 16064 16192 +16064 16193 16192 +16064 16065 16194 +16064 16194 16193 +16065 16066 16194 +16066 16195 16194 +16066 16067 16196 +16066 16196 16195 +16067 16068 16196 +16068 16197 16196 +16068 16069 16198 +16068 16198 16197 +16069 16070 16198 +16070 16199 16198 +16070 16071 16200 +16070 16200 16199 +16071 16072 16200 +16072 16201 16200 +16072 16073 16202 +16072 16202 16201 +16073 16074 16202 +16074 16203 16202 +16074 16075 16204 +16074 16204 16203 +16075 16076 16204 +16076 16205 16204 +16076 16077 16206 +16076 16206 16205 +16077 16078 16206 +16078 16207 16206 +16078 16079 16208 +16078 16208 16207 +16079 16080 16208 +16080 16209 16208 +16080 16081 16210 +16080 16210 16209 +16081 16082 16210 +16082 16211 16210 +16082 16083 16212 +16082 16212 16211 +16083 16084 16212 +16084 16213 16212 +16084 16085 16214 +16084 16214 16213 +16085 16086 16214 +16086 16215 16214 +16086 16087 16216 +16086 16216 16215 +16087 16088 16216 +16088 16217 16216 +16088 16089 16218 +16088 16218 16217 +16089 16090 16218 +16090 16219 16218 +16090 16091 16220 +16090 16220 16219 +16091 16092 16220 +16092 16221 16220 +16092 16093 16222 +16092 16222 16221 +16093 16094 16222 +16094 16223 16222 +16094 16095 16224 +16094 16224 16223 +16095 16096 16224 +16096 16225 16224 +16096 16097 16226 +16096 16226 16225 +16097 16098 16226 +16098 16227 16226 +16098 16099 16228 +16098 16228 16227 +16099 16100 16228 +16100 16229 16228 +16100 16101 16230 +16100 16230 16229 +16101 16102 16230 +16102 16231 16230 +16102 16103 16232 +16102 16232 16231 +16103 16104 16232 +16104 16233 16232 +16104 16105 16234 +16104 16234 16233 +16105 16106 16234 +16106 16235 16234 +16106 16107 16236 +16106 16236 16235 +16107 16108 16236 +16108 16237 16236 +16109 16110 21754 +16110 21755 21754 +16110 16111 21756 +16110 21756 21755 +16111 16112 21756 +16112 21757 21756 +16112 16113 21758 +16112 21758 21757 +16113 16114 21758 +16114 21759 21758 +16114 16115 21760 +16114 21760 21759 +16115 16116 21760 +16116 21761 21760 +16116 16117 21762 +16116 21762 21761 +16117 16118 21762 +16118 21763 21762 +16118 16119 21764 +16118 21764 21763 +16119 16120 21764 +16120 21765 21764 +16120 16121 21766 +16120 21766 21765 +16121 16122 21766 +16122 21767 21766 +16122 16123 21768 +16122 21768 21767 +16123 16124 21768 +16124 21769 21768 +16124 16125 21770 +16124 21770 21769 +16125 16126 21770 +16126 21771 21770 +16126 16127 21772 +16126 21772 21771 +16127 16128 21772 +16128 21773 21772 +16128 16129 21774 +16128 21774 21773 +16129 16130 21774 +16130 21775 21774 +16130 16131 21776 +16130 21776 21775 +16131 16132 21776 +16132 21777 21776 +16132 16133 21778 +16132 21778 21777 +16133 16134 21778 +16134 21779 21778 +16134 16135 21780 +16134 21780 21779 +16135 16136 21780 +16136 21781 21780 +16136 16137 21782 +16136 21782 21781 +16137 16138 21782 +16138 21783 21782 +16138 16139 21784 +16138 21784 21783 +16139 16140 21784 +16140 21785 21784 +16140 16141 21786 +16140 21786 21785 +16141 16142 21786 +16142 21787 21786 +16142 16143 21788 +16142 21788 21787 +16143 16144 21788 +16144 21789 21788 +16144 16145 21790 +16144 21790 21789 +16145 16146 21790 +16146 21791 21790 +16146 16147 21792 +16146 21792 21791 +16147 16148 21792 +16148 21793 21792 +16148 16149 21794 +16148 21794 21793 +16149 16150 21794 +16150 21795 21794 +16150 16151 21796 +16150 21796 21795 +16151 16152 21796 +16152 21797 21796 +16152 16153 21798 +16152 21798 21797 +16153 16154 21798 +16154 21799 21798 +16154 16155 21800 +16154 21800 21799 +16155 16156 21800 +16156 21801 21800 +16156 16157 21802 +16156 21802 21801 +16157 16158 21802 +16158 21803 21802 +16158 16159 21804 +16158 21804 21803 +16159 16160 21804 +16160 21805 21804 +16160 16161 21806 +16160 21806 21805 +16161 16162 21806 +16162 21807 21806 +16162 16163 21808 +16162 21808 21807 +16163 16164 21808 +16164 21809 21808 +16164 16165 21810 +16164 21810 21809 +16165 16166 21810 +16166 21811 21810 +16166 16167 21812 +16166 21812 21811 +16167 16168 21812 +16168 21813 21812 +16168 16169 21814 +16168 21814 21813 +16169 16170 21814 +16170 21815 21814 +16170 16171 21816 +16170 21816 21815 +16171 16172 21816 +16172 21817 21816 +16172 16173 21818 +16172 21818 21817 +16173 16174 21818 +16174 21819 21818 +16174 16175 21820 +16174 21820 21819 +16175 16176 21820 +16176 21821 21820 +16176 16177 21822 +16176 21822 21821 +16177 16178 21822 +16178 21823 21822 +16178 16179 21824 +16178 21824 21823 +16179 16180 21824 +16180 21825 21824 +16180 16181 21826 +16180 21826 21825 +16181 16182 21826 +16182 21827 21826 +16182 16183 21828 +16182 21828 21827 +16183 16184 21828 +16184 21829 21828 +16184 16185 21830 +16184 21830 21829 +16185 16186 21830 +16186 21831 21830 +16186 16187 21832 +16186 21832 21831 +16187 16188 21832 +16188 21833 21832 +16188 16189 21834 +16188 21834 21833 +16189 16190 21834 +16190 21835 21834 +16190 16191 21836 +16190 21836 21835 +16191 16192 21836 +16192 21837 21836 +16192 16193 21838 +16192 21838 21837 +16193 16194 21838 +16194 21839 21838 +16194 16195 21840 +16194 21840 21839 +16195 16196 21840 +16196 21841 21840 +16196 16197 21842 +16196 21842 21841 +16197 16198 21842 +16198 21843 21842 +16198 16199 21844 +16198 21844 21843 +16199 16200 21844 +16200 21845 21844 +16200 16201 21846 +16200 21846 21845 +16201 16202 21846 +16202 21847 21846 +16202 16203 21848 +16202 21848 21847 +16203 16204 21848 +16204 21849 21848 +16204 16205 21850 +16204 21850 21849 +16205 16206 21850 +16206 21851 21850 +16206 16207 21852 +16206 21852 21851 +16207 16208 21852 +16208 21853 21852 +16208 16209 21854 +16208 21854 21853 +16209 16210 21854 +16210 21855 21854 +16210 16211 21856 +16210 21856 21855 +16211 16212 21856 +16212 21857 21856 +16212 16213 21858 +16212 21858 21857 +16213 16214 21858 +16214 21859 21858 +16214 16215 21860 +16214 21860 21859 +16215 16216 21860 +16216 21861 21860 +16216 16217 21862 +16216 21862 21861 +16217 16218 21862 +16218 21863 21862 +16218 16219 21864 +16218 21864 21863 +16219 16220 21864 +16220 21865 21864 +16220 16221 21866 +16220 21866 21865 +16221 16222 21866 +16222 21867 21866 +16222 16223 21868 +16222 21868 21867 +16223 16224 21868 +16224 21869 21868 +16224 16225 21870 +16224 21870 21869 +16225 16226 21870 +16226 21871 21870 +16226 16227 21872 +16226 21872 21871 +16227 16228 21872 +16228 21873 21872 +16228 16229 21874 +16228 21874 21873 +16229 16230 21874 +16230 21875 21874 +16230 16231 21876 +16230 21876 21875 +16231 16232 21876 +16232 21877 21876 +16232 16233 21878 +16232 21878 21877 +16233 16234 21878 +16234 21879 21878 +16234 16235 21880 +16234 21880 21879 +16235 16236 21880 +16236 21881 21880 +16236 16237 21882 +16236 21882 21881 +16238 16282 16281 +16238 16239 16283 +16238 16283 16282 +16239 16240 16283 +16240 16284 16283 +16240 16241 16285 +16240 16285 16284 +16241 16242 16285 +16242 16286 16285 +16242 16243 16287 +16242 16287 16286 +16243 16244 16287 +16244 16288 16287 +16244 16245 16289 +16244 16289 16288 +16245 16246 16289 +16246 16290 16289 +16246 16247 16291 +16246 16291 16290 +16247 16248 16291 +16248 16292 16291 +16248 16249 16293 +16248 16293 16292 +16249 16250 16293 +16250 16294 16293 +16250 16251 16295 +16250 16295 16294 +16251 16252 16295 +16252 16296 16295 +16252 16253 16297 +16252 16297 16296 +16253 16254 16297 +16254 16298 16297 +16254 16255 16299 +16254 16299 16298 +16255 16256 16299 +16256 16300 16299 +16256 16257 16301 +16256 16301 16300 +16257 16258 16301 +16258 16302 16301 +16258 16259 16303 +16258 16303 16302 +16259 16260 16303 +16260 16304 16303 +16260 16261 16305 +16260 16305 16304 +16261 16262 16305 +16262 16306 16305 +16262 16263 16307 +16262 16307 16306 +16263 16264 16307 +16264 16308 16307 +16264 16265 16309 +16264 16309 16308 +16265 16266 16309 +16266 16310 16309 +16266 16267 16311 +16266 16311 16310 +16267 16268 16311 +16268 16312 16311 +16268 16269 16313 +16268 16313 16312 +16269 16270 16313 +16270 16314 16313 +16270 16271 16315 +16270 16315 16314 +16271 16272 16315 +16272 16316 16315 +16272 16273 16317 +16272 16317 16316 +16273 16274 16317 +16274 16318 16317 +16274 16275 16319 +16274 16319 16318 +16275 16276 16319 +16276 16320 16319 +16276 16277 16321 +16276 16321 16320 +16277 16278 16321 +16278 16322 16321 +16278 16323 16322 +16279 16326 16325 +16279 16280 16327 +16279 16327 16326 +16280 16281 16327 +16281 16328 16327 +16281 16282 16329 +16281 16329 16328 +16282 16283 16329 +16283 16330 16329 +16283 16284 16331 +16283 16331 16330 +16284 16285 16331 +16285 16332 16331 +16285 16286 16333 +16285 16333 16332 +16286 16287 16333 +16287 16334 16333 +16287 16288 16335 +16287 16335 16334 +16288 16289 16335 +16289 16336 16335 +16289 16290 16337 +16289 16337 16336 +16290 16291 16337 +16291 16338 16337 +16291 16292 16339 +16291 16339 16338 +16292 16293 16339 +16293 16340 16339 +16293 16294 16341 +16293 16341 16340 +16294 16295 16341 +16295 16342 16341 +16295 16296 16343 +16295 16343 16342 +16296 16297 16343 +16297 16344 16343 +16297 16298 16345 +16297 16345 16344 +16298 16299 16345 +16299 16346 16345 +16299 16300 16347 +16299 16347 16346 +16300 16301 16347 +16301 16348 16347 +16301 16302 16349 +16301 16349 16348 +16302 16303 16349 +16303 16350 16349 +16303 16304 16351 +16303 16351 16350 +16304 16305 16351 +16305 16352 16351 +16305 16306 16353 +16305 16353 16352 +16306 16307 16353 +16307 16354 16353 +16307 16308 16355 +16307 16355 16354 +16308 16309 16355 +16309 16356 16355 +16309 16310 16357 +16309 16357 16356 +16310 16311 16357 +16311 16358 16357 +16311 16312 16359 +16311 16359 16358 +16312 16313 16359 +16313 16360 16359 +16313 16314 16361 +16313 16361 16360 +16314 16315 16361 +16315 16362 16361 +16315 16316 16363 +16315 16363 16362 +16316 16317 16363 +16317 16364 16363 +16317 16318 16365 +16317 16365 16364 +16318 16319 16365 +16319 16366 16365 +16319 16320 16367 +16319 16367 16366 +16320 16321 16367 +16321 16368 16367 +16321 16322 16369 +16321 16369 16368 +16322 16323 16369 +16323 16370 16369 +16323 16371 16370 +16324 16325 16397 +16325 16398 16397 +16325 16326 16399 +16325 16399 16398 +16326 16327 16399 +16327 16400 16399 +16327 16328 16401 +16327 16401 16400 +16328 16329 16401 +16329 16402 16401 +16329 16330 16403 +16329 16403 16402 +16330 16331 16403 +16331 16404 16403 +16331 16332 16405 +16331 16405 16404 +16332 16333 16405 +16333 16406 16405 +16333 16334 16407 +16333 16407 16406 +16334 16335 16407 +16335 16408 16407 +16335 16336 16409 +16335 16409 16408 +16336 16337 16409 +16337 16410 16409 +16337 16338 16411 +16337 16411 16410 +16338 16339 16411 +16339 16412 16411 +16339 16340 16413 +16339 16413 16412 +16340 16341 16413 +16341 16414 16413 +16341 16342 16415 +16341 16415 16414 +16342 16343 16415 +16343 16416 16415 +16343 16344 16417 +16343 16417 16416 +16344 16345 16417 +16345 16418 16417 +16345 16346 16419 +16345 16419 16418 +16346 16347 16419 +16347 16420 16419 +16347 16348 16421 +16347 16421 16420 +16348 16349 16421 +16349 16422 16421 +16349 16350 16423 +16349 16423 16422 +16350 16351 16423 +16351 16424 16423 +16351 16352 16425 +16351 16425 16424 +16352 16353 16425 +16353 16426 16425 +16353 16354 16427 +16353 16427 16426 +16354 16355 16427 +16355 16428 16427 +16355 16356 16429 +16355 16429 16428 +16356 16357 16429 +16357 16430 16429 +16357 16358 16431 +16357 16431 16430 +16358 16359 16431 +16359 16432 16431 +16359 16360 16433 +16359 16433 16432 +16360 16361 16433 +16361 16434 16433 +16361 16362 16435 +16361 16435 16434 +16362 16363 16435 +16363 16436 16435 +16363 16364 16437 +16363 16437 16436 +16364 16365 16437 +16365 16438 16437 +16365 16366 16439 +16365 16439 16438 +16366 16367 16439 +16367 16440 16439 +16367 16368 16441 +16367 16441 16440 +16368 16369 16441 +16369 16442 16441 +16369 16370 16443 +16369 16443 16442 +16370 16371 16443 +16371 16444 16443 +16372 16448 16447 +16372 16373 16449 +16372 16449 16448 +16373 16374 16449 +16374 16450 16449 +16374 16375 16451 +16374 16451 16450 +16375 16376 16451 +16376 16452 16451 +16376 16377 16453 +16376 16453 16452 +16377 16378 16453 +16378 16454 16453 +16378 16379 16455 +16378 16455 16454 +16379 16380 16455 +16380 16456 16455 +16380 16381 16457 +16380 16457 16456 +16381 16382 16457 +16382 16458 16457 +16382 16383 16459 +16382 16459 16458 +16383 16384 16459 +16384 16460 16459 +16384 16385 16461 +16384 16461 16460 +16385 16386 16461 +16386 16462 16461 +16386 16387 16463 +16386 16463 16462 +16387 16388 16463 +16388 16464 16463 +16388 16389 16465 +16388 16465 16464 +16389 16390 16465 +16390 16466 16465 +16390 16391 16467 +16390 16467 16466 +16391 16392 16467 +16392 16468 16467 +16392 16393 16469 +16392 16469 16468 +16393 16394 16469 +16394 16470 16469 +16394 16471 16470 +16395 16477 16476 +16395 16396 16478 +16395 16478 16477 +16396 16397 16478 +16397 16479 16478 +16397 16398 16480 +16397 16480 16479 +16398 16399 16480 +16399 16481 16480 +16399 16400 16482 +16399 16482 16481 +16400 16401 16482 +16401 16483 16482 +16401 16402 16484 +16401 16484 16483 +16402 16403 16484 +16403 16485 16484 +16403 16404 16486 +16403 16486 16485 +16404 16405 16486 +16405 16487 16486 +16405 16406 16488 +16405 16488 16487 +16406 16407 16488 +16407 16489 16488 +16407 16408 16490 +16407 16490 16489 +16408 16409 16490 +16409 16491 16490 +16409 16410 16492 +16409 16492 16491 +16410 16411 16492 +16411 16493 16492 +16411 16412 16494 +16411 16494 16493 +16412 16413 16494 +16413 16495 16494 +16413 16414 16496 +16413 16496 16495 +16414 16415 16496 +16415 16497 16496 +16415 16416 16498 +16415 16498 16497 +16416 16417 16498 +16417 16499 16498 +16417 16418 16500 +16417 16500 16499 +16418 16419 16500 +16419 16501 16500 +16419 16420 16502 +16419 16502 16501 +16420 16421 16502 +16421 16503 16502 +16421 16422 16504 +16421 16504 16503 +16422 16423 16504 +16423 16505 16504 +16423 16424 16506 +16423 16506 16505 +16424 16425 16506 +16425 16507 16506 +16425 16426 16508 +16425 16508 16507 +16426 16427 16508 +16427 16509 16508 +16427 16428 16510 +16427 16510 16509 +16428 16429 16510 +16429 16511 16510 +16429 16430 16512 +16429 16512 16511 +16430 16431 16512 +16431 16513 16512 +16431 16432 16514 +16431 16514 16513 +16432 16433 16514 +16433 16515 16514 +16433 16434 16516 +16433 16516 16515 +16434 16435 16516 +16435 16517 16516 +16435 16436 16518 +16435 16518 16517 +16436 16437 16518 +16437 16519 16518 +16437 16438 16520 +16437 16520 16519 +16438 16439 16520 +16439 16521 16520 +16439 16440 16522 +16439 16522 16521 +16440 16441 16522 +16441 16523 16522 +16441 16442 16524 +16441 16524 16523 +16442 16443 16524 +16443 16525 16524 +16443 16444 16526 +16443 16526 16525 +16445 16528 16527 +16445 16446 16529 +16445 16529 16528 +16446 16447 16529 +16447 16530 16529 +16447 16448 16531 +16447 16531 16530 +16448 16449 16531 +16449 16532 16531 +16449 16450 16533 +16449 16533 16532 +16450 16451 16533 +16451 16534 16533 +16451 16452 16535 +16451 16535 16534 +16452 16453 16535 +16453 16536 16535 +16453 16454 16537 +16453 16537 16536 +16454 16455 16537 +16455 16538 16537 +16455 16456 16539 +16455 16539 16538 +16456 16457 16539 +16457 16540 16539 +16457 16458 16541 +16457 16541 16540 +16458 16459 16541 +16459 16542 16541 +16459 16460 16543 +16459 16543 16542 +16460 16461 16543 +16461 16544 16543 +16461 16462 16545 +16461 16545 16544 +16462 16463 16545 +16463 16546 16545 +16463 16464 16547 +16463 16547 16546 +16464 16465 16547 +16465 16548 16547 +16465 16466 16549 +16465 16549 16548 +16466 16467 16549 +16467 16550 16549 +16467 16468 16551 +16467 16551 16550 +16468 16469 16551 +16469 16552 16551 +16469 16470 16553 +16469 16553 16552 +16470 16471 16553 +16471 16554 16553 +16471 16472 16555 +16471 16555 16554 +16472 16473 16555 +16473 16556 16555 +16473 16557 16556 +16474 16563 16562 +16474 16475 16564 +16474 16564 16563 +16475 16476 16564 +16476 16565 16564 +16476 16477 16566 +16476 16566 16565 +16477 16478 16566 +16478 16567 16566 +16478 16479 16568 +16478 16568 16567 +16479 16480 16568 +16480 16569 16568 +16480 16481 16570 +16480 16570 16569 +16481 16482 16570 +16482 16571 16570 +16482 16483 16572 +16482 16572 16571 +16483 16484 16572 +16484 16573 16572 +16484 16485 16574 +16484 16574 16573 +16485 16486 16574 +16486 16575 16574 +16486 16487 16576 +16486 16576 16575 +16487 16488 16576 +16488 16577 16576 +16488 16489 16578 +16488 16578 16577 +16489 16490 16578 +16490 16579 16578 +16490 16491 16580 +16490 16580 16579 +16491 16492 16580 +16492 16581 16580 +16492 16493 16582 +16492 16582 16581 +16493 16494 16582 +16494 16583 16582 +16494 16495 16584 +16494 16584 16583 +16495 16496 16584 +16496 16585 16584 +16496 16497 16586 +16496 16586 16585 +16497 16498 16586 +16498 16587 16586 +16498 16499 16588 +16498 16588 16587 +16499 16500 16588 +16500 16589 16588 +16500 16501 16590 +16500 16590 16589 +16501 16502 16590 +16502 16591 16590 +16502 16503 16592 +16502 16592 16591 +16503 16504 16592 +16504 16593 16592 +16504 16505 16594 +16504 16594 16593 +16505 16506 16594 +16506 16595 16594 +16506 16507 16596 +16506 16596 16595 +16507 16508 16596 +16508 16597 16596 +16508 16509 16598 +16508 16598 16597 +16509 16510 16598 +16510 16599 16598 +16510 16511 16600 +16510 16600 16599 +16511 16512 16600 +16512 16601 16600 +16512 16513 16602 +16512 16602 16601 +16513 16514 16602 +16514 16603 16602 +16514 16515 16604 +16514 16604 16603 +16515 16516 16604 +16516 16605 16604 +16516 16517 16606 +16516 16606 16605 +16517 16518 16606 +16518 16607 16606 +16518 16519 16608 +16518 16608 16607 +16519 16520 16608 +16520 16609 16608 +16520 16521 16610 +16520 16610 16609 +16521 16522 16610 +16522 16611 16610 +16522 16523 16612 +16522 16612 16611 +16523 16524 16612 +16524 16613 16612 +16524 16525 16614 +16524 16614 16613 +16525 16526 16614 +16526 16615 16614 +16527 16619 16618 +16527 16528 16620 +16527 16620 16619 +16528 16529 16620 +16529 16621 16620 +16529 16530 16622 +16529 16622 16621 +16530 16531 16622 +16531 16623 16622 +16531 16532 16624 +16531 16624 16623 +16532 16533 16624 +16533 16625 16624 +16533 16534 16626 +16533 16626 16625 +16534 16535 16626 +16535 16627 16626 +16535 16536 16628 +16535 16628 16627 +16536 16537 16628 +16537 16629 16628 +16537 16538 16630 +16537 16630 16629 +16538 16539 16630 +16539 16631 16630 +16539 16540 16632 +16539 16632 16631 +16540 16541 16632 +16541 16633 16632 +16541 16542 16634 +16541 16634 16633 +16542 16543 16634 +16543 16635 16634 +16543 16544 16636 +16543 16636 16635 +16544 16545 16636 +16545 16637 16636 +16545 16546 16638 +16545 16638 16637 +16546 16547 16638 +16547 16639 16638 +16547 16548 16640 +16547 16640 16639 +16548 16549 16640 +16549 16641 16640 +16549 16550 16642 +16549 16642 16641 +16550 16551 16642 +16551 16643 16642 +16551 16552 16644 +16551 16644 16643 +16552 16553 16644 +16553 16645 16644 +16553 16554 16646 +16553 16646 16645 +16554 16555 16646 +16555 16647 16646 +16555 16556 16648 +16555 16648 16647 +16556 16557 16648 +16557 16649 16648 +16557 16558 16650 +16557 16650 16649 +16558 16559 16650 +16559 16651 16650 +16559 16652 16651 +16560 16681 16680 +16560 16561 16682 +16560 16682 16681 +16561 16562 16682 +16562 16683 16682 +16562 16563 16684 +16562 16684 16683 +16563 16564 16684 +16564 16685 16684 +16564 16565 16686 +16564 16686 16685 +16565 16566 16686 +16566 16687 16686 +16566 16567 16688 +16566 16688 16687 +16567 16568 16688 +16568 16689 16688 +16568 16569 16690 +16568 16690 16689 +16569 16570 16690 +16570 16691 16690 +16570 16571 16692 +16570 16692 16691 +16571 16572 16692 +16572 16693 16692 +16572 16573 16694 +16572 16694 16693 +16573 16574 16694 +16574 16695 16694 +16574 16575 16696 +16574 16696 16695 +16575 16576 16696 +16576 16697 16696 +16576 16577 16698 +16576 16698 16697 +16577 16578 16698 +16578 16699 16698 +16578 16579 16700 +16578 16700 16699 +16579 16580 16700 +16580 16701 16700 +16580 16581 16702 +16580 16702 16701 +16581 16582 16702 +16582 16703 16702 +16582 16583 16704 +16582 16704 16703 +16583 16584 16704 +16584 16705 16704 +16584 16585 16706 +16584 16706 16705 +16585 16586 16706 +16586 16707 16706 +16586 16587 16708 +16586 16708 16707 +16587 16588 16708 +16588 16709 16708 +16588 16589 16710 +16588 16710 16709 +16589 16590 16710 +16590 16711 16710 +16590 16591 16712 +16590 16712 16711 +16591 16592 16712 +16592 16713 16712 +16592 16593 16714 +16592 16714 16713 +16593 16594 16714 +16594 16715 16714 +16594 16595 16716 +16594 16716 16715 +16595 16596 16716 +16596 16717 16716 +16596 16597 16718 +16596 16718 16717 +16597 16598 16718 +16598 16719 16718 +16598 16599 16720 +16598 16720 16719 +16599 16600 16720 +16600 16721 16720 +16600 16601 16722 +16600 16722 16721 +16601 16602 16722 +16602 16723 16722 +16602 16603 16724 +16602 16724 16723 +16603 16604 16724 +16604 16725 16724 +16604 16605 16726 +16604 16726 16725 +16605 16606 16726 +16606 16727 16726 +16606 16607 16728 +16606 16728 16727 +16607 16608 16728 +16608 16729 16728 +16608 16609 16730 +16608 16730 16729 +16609 16610 16730 +16610 16731 16730 +16610 16611 16732 +16610 16732 16731 +16611 16612 16732 +16612 16733 16732 +16612 16613 16734 +16612 16734 16733 +16613 16614 16734 +16614 16735 16734 +16614 16615 16736 +16614 16736 16735 +16616 16738 16737 +16616 16617 16739 +16616 16739 16738 +16617 16618 16739 +16618 16740 16739 +16618 16619 16741 +16618 16741 16740 +16619 16620 16741 +16620 16742 16741 +16620 16621 16743 +16620 16743 16742 +16621 16622 16743 +16622 16744 16743 +16622 16623 16745 +16622 16745 16744 +16623 16624 16745 +16624 16746 16745 +16624 16625 16747 +16624 16747 16746 +16625 16626 16747 +16626 16748 16747 +16626 16627 16749 +16626 16749 16748 +16627 16628 16749 +16628 16750 16749 +16628 16629 16751 +16628 16751 16750 +16629 16630 16751 +16630 16752 16751 +16630 16631 16753 +16630 16753 16752 +16631 16632 16753 +16632 16754 16753 +16632 16633 16755 +16632 16755 16754 +16633 16634 16755 +16634 16756 16755 +16634 16635 16757 +16634 16757 16756 +16635 16636 16757 +16636 16758 16757 +16636 16637 16759 +16636 16759 16758 +16637 16638 16759 +16638 16760 16759 +16638 16639 16761 +16638 16761 16760 +16639 16640 16761 +16640 16762 16761 +16640 16641 16763 +16640 16763 16762 +16641 16642 16763 +16642 16764 16763 +16642 16643 16765 +16642 16765 16764 +16643 16644 16765 +16644 16766 16765 +16644 16645 16767 +16644 16767 16766 +16645 16646 16767 +16646 16768 16767 +16646 16647 16769 +16646 16769 16768 +16647 16648 16769 +16648 16770 16769 +16648 16649 16771 +16648 16771 16770 +16649 16650 16771 +16650 16772 16771 +16650 16651 16773 +16650 16773 16772 +16651 16652 16773 +16652 16774 16773 +16652 16653 16775 +16652 16775 16774 +16653 16654 16775 +16654 16776 16775 +16654 16655 16777 +16654 16777 16776 +16655 16656 16777 +16656 16778 16777 +16656 16657 16779 +16656 16779 16778 +16657 16658 16779 +16658 16780 16779 +16658 16659 16781 +16658 16781 16780 +16659 16660 16781 +16660 16782 16781 +16660 16661 16783 +16660 16783 16782 +16661 16662 16783 +16662 16784 16783 +16662 16663 16785 +16662 16785 16784 +16663 16664 16785 +16664 16786 16785 +16664 16665 16787 +16664 16787 16786 +16665 16666 16787 +16666 16788 16787 +16666 16667 16789 +16666 16789 16788 +16667 16668 16789 +16668 16790 16789 +16668 16669 16791 +16668 16791 16790 +16669 16670 16791 +16670 16792 16791 +16670 16671 16793 +16670 16793 16792 +16671 16672 16793 +16672 16794 16793 +16672 16673 16795 +16672 16795 16794 +16673 16674 16795 +16674 16796 16795 +16674 16675 16797 +16674 16797 16796 +16675 16676 16797 +16676 16798 16797 +16676 16677 16799 +16676 16799 16798 +16677 16678 16799 +16678 16800 16799 +16678 16679 16801 +16678 16801 16800 +16679 16680 16801 +16680 16802 16801 +16680 16681 16803 +16680 16803 16802 +16681 16682 16803 +16682 16804 16803 +16682 16683 16805 +16682 16805 16804 +16683 16684 16805 +16684 16806 16805 +16684 16685 16807 +16684 16807 16806 +16685 16686 16807 +16686 16808 16807 +16686 16687 16809 +16686 16809 16808 +16687 16688 16809 +16688 16810 16809 +16688 16689 16811 +16688 16811 16810 +16689 16690 16811 +16690 16812 16811 +16690 16691 16813 +16690 16813 16812 +16691 16692 16813 +16692 16814 16813 +16692 16693 16815 +16692 16815 16814 +16693 16694 16815 +16694 16816 16815 +16694 16695 16817 +16694 16817 16816 +16695 16696 16817 +16696 16818 16817 +16696 16697 16819 +16696 16819 16818 +16697 16698 16819 +16698 16820 16819 +16698 16699 16821 +16698 16821 16820 +16699 16700 16821 +16700 16822 16821 +16700 16701 16823 +16700 16823 16822 +16701 16702 16823 +16702 16824 16823 +16702 16703 16825 +16702 16825 16824 +16703 16704 16825 +16704 16826 16825 +16704 16705 16827 +16704 16827 16826 +16705 16706 16827 +16706 16828 16827 +16706 16707 16829 +16706 16829 16828 +16707 16708 16829 +16708 16830 16829 +16708 16709 16831 +16708 16831 16830 +16709 16710 16831 +16710 16832 16831 +16710 16711 16833 +16710 16833 16832 +16711 16712 16833 +16712 16834 16833 +16712 16713 16835 +16712 16835 16834 +16713 16714 16835 +16714 16836 16835 +16714 16715 16837 +16714 16837 16836 +16715 16716 16837 +16716 16838 16837 +16716 16717 16839 +16716 16839 16838 +16717 16718 16839 +16718 16840 16839 +16718 16719 16841 +16718 16841 16840 +16719 16720 16841 +16720 16842 16841 +16720 16721 16843 +16720 16843 16842 +16721 16722 16843 +16722 16844 16843 +16722 16723 16845 +16722 16845 16844 +16723 16724 16845 +16724 16846 16845 +16724 16725 16847 +16724 16847 16846 +16725 16726 16847 +16726 16848 16847 +16726 16727 16849 +16726 16849 16848 +16727 16728 16849 +16728 16850 16849 +16728 16729 16851 +16728 16851 16850 +16729 16730 16851 +16730 16852 16851 +16730 16731 16853 +16730 16853 16852 +16731 16732 16853 +16732 16854 16853 +16732 16733 16855 +16732 16855 16854 +16733 16734 16855 +16734 16856 16855 +16734 16735 16857 +16734 16857 16856 +16735 16736 16857 +16736 16858 16857 +16737 16862 16861 +16737 16738 16863 +16737 16863 16862 +16738 16739 16863 +16739 16864 16863 +16739 16740 16865 +16739 16865 16864 +16740 16741 16865 +16741 16866 16865 +16741 16742 16867 +16741 16867 16866 +16742 16743 16867 +16743 16868 16867 +16743 16744 16869 +16743 16869 16868 +16744 16745 16869 +16745 16870 16869 +16745 16746 16871 +16745 16871 16870 +16746 16747 16871 +16747 16872 16871 +16747 16748 16873 +16747 16873 16872 +16748 16749 16873 +16749 16874 16873 +16749 16750 16875 +16749 16875 16874 +16750 16751 16875 +16751 16876 16875 +16751 16752 16877 +16751 16877 16876 +16752 16753 16877 +16753 16878 16877 +16753 16754 16879 +16753 16879 16878 +16754 16755 16879 +16755 16880 16879 +16755 16756 16881 +16755 16881 16880 +16756 16757 16881 +16757 16882 16881 +16757 16758 16883 +16757 16883 16882 +16758 16759 16883 +16759 16884 16883 +16759 16760 16885 +16759 16885 16884 +16760 16761 16885 +16761 16886 16885 +16761 16762 16887 +16761 16887 16886 +16762 16763 16887 +16763 16888 16887 +16763 16764 16889 +16763 16889 16888 +16764 16765 16889 +16765 16890 16889 +16765 16766 16891 +16765 16891 16890 +16766 16767 16891 +16767 16892 16891 +16767 16768 16893 +16767 16893 16892 +16768 16769 16893 +16769 16894 16893 +16769 16770 16895 +16769 16895 16894 +16770 16771 16895 +16771 16896 16895 +16771 16772 16897 +16771 16897 16896 +16772 16773 16897 +16773 16898 16897 +16773 16774 16899 +16773 16899 16898 +16774 16775 16899 +16775 16900 16899 +16775 16776 16901 +16775 16901 16900 +16776 16777 16901 +16777 16902 16901 +16777 16778 16903 +16777 16903 16902 +16778 16779 16903 +16779 16904 16903 +16779 16780 16905 +16779 16905 16904 +16780 16781 16905 +16781 16906 16905 +16781 16782 16907 +16781 16907 16906 +16782 16783 16907 +16783 16908 16907 +16783 16784 16909 +16783 16909 16908 +16784 16785 16909 +16785 16910 16909 +16785 16786 16911 +16785 16911 16910 +16786 16787 16911 +16787 16912 16911 +16787 16788 16913 +16787 16913 16912 +16788 16789 16913 +16789 16914 16913 +16789 16790 16915 +16789 16915 16914 +16790 16791 16915 +16791 16916 16915 +16791 16792 16917 +16791 16917 16916 +16792 16793 16917 +16793 16918 16917 +16793 16794 16919 +16793 16919 16918 +16794 16795 16919 +16795 16920 16919 +16795 16796 16921 +16795 16921 16920 +16796 16797 16921 +16797 16922 16921 +16797 16798 16923 +16797 16923 16922 +16798 16799 16923 +16799 16924 16923 +16799 16800 16925 +16799 16925 16924 +16800 16801 16925 +16801 16926 16925 +16801 16802 16927 +16801 16927 16926 +16802 16803 16927 +16803 16928 16927 +16803 16804 16929 +16803 16929 16928 +16804 16805 16929 +16805 16930 16929 +16805 16806 16931 +16805 16931 16930 +16806 16807 16931 +16807 16932 16931 +16807 16808 16933 +16807 16933 16932 +16808 16809 16933 +16809 16934 16933 +16809 16810 16935 +16809 16935 16934 +16810 16811 16935 +16811 16936 16935 +16811 16812 16937 +16811 16937 16936 +16812 16813 16937 +16813 16938 16937 +16813 16814 16939 +16813 16939 16938 +16814 16815 16939 +16815 16940 16939 +16815 16816 16941 +16815 16941 16940 +16816 16817 16941 +16817 16942 16941 +16817 16818 16943 +16817 16943 16942 +16818 16819 16943 +16819 16944 16943 +16819 16820 16945 +16819 16945 16944 +16820 16821 16945 +16821 16946 16945 +16821 16822 16947 +16821 16947 16946 +16822 16823 16947 +16823 16948 16947 +16823 16824 16949 +16823 16949 16948 +16824 16825 16949 +16825 16950 16949 +16825 16826 16951 +16825 16951 16950 +16826 16827 16951 +16827 16952 16951 +16827 16828 16953 +16827 16953 16952 +16828 16829 16953 +16829 16954 16953 +16829 16830 16955 +16829 16955 16954 +16830 16831 16955 +16831 16956 16955 +16831 16832 16957 +16831 16957 16956 +16832 16833 16957 +16833 16958 16957 +16833 16834 16959 +16833 16959 16958 +16834 16835 16959 +16835 16960 16959 +16835 16836 16961 +16835 16961 16960 +16836 16837 16961 +16837 16962 16961 +16837 16838 16963 +16837 16963 16962 +16838 16839 16963 +16839 16964 16963 +16839 16840 16965 +16839 16965 16964 +16840 16841 16965 +16841 16966 16965 +16841 16842 16967 +16841 16967 16966 +16842 16843 16967 +16843 16968 16967 +16843 16844 16969 +16843 16969 16968 +16844 16845 16969 +16845 16970 16969 +16845 16846 16971 +16845 16971 16970 +16846 16847 16971 +16847 16972 16971 +16847 16848 16973 +16847 16973 16972 +16848 16849 16973 +16849 16974 16973 +16849 16850 16975 +16849 16975 16974 +16850 16851 16975 +16851 16976 16975 +16851 16852 16977 +16851 16977 16976 +16852 16853 16977 +16853 16978 16977 +16853 16854 16979 +16853 16979 16978 +16854 16855 16979 +16855 16980 16979 +16855 16856 16981 +16855 16981 16980 +16856 16857 16981 +16857 16982 16981 +16857 16858 16983 +16857 16983 16982 +16859 16985 16984 +16859 16860 16986 +16859 16986 16985 +16860 16861 16986 +16861 16987 16986 +16861 16862 16988 +16861 16988 16987 +16862 16863 16988 +16863 16989 16988 +16863 16864 16990 +16863 16990 16989 +16864 16865 16990 +16865 16991 16990 +16865 16866 16992 +16865 16992 16991 +16866 16867 16992 +16867 16993 16992 +16867 16868 16994 +16867 16994 16993 +16868 16869 16994 +16869 16995 16994 +16869 16870 16996 +16869 16996 16995 +16870 16871 16996 +16871 16997 16996 +16871 16872 16998 +16871 16998 16997 +16872 16873 16998 +16873 16999 16998 +16873 16874 17000 +16873 17000 16999 +16874 16875 17000 +16875 17001 17000 +16875 16876 17002 +16875 17002 17001 +16876 16877 17002 +16877 17003 17002 +16877 16878 17004 +16877 17004 17003 +16878 16879 17004 +16879 17005 17004 +16879 16880 17006 +16879 17006 17005 +16880 16881 17006 +16881 17007 17006 +16881 16882 17008 +16881 17008 17007 +16882 16883 17008 +16883 17009 17008 +16883 16884 17010 +16883 17010 17009 +16884 16885 17010 +16885 17011 17010 +16885 16886 17012 +16885 17012 17011 +16886 16887 17012 +16887 17013 17012 +16887 16888 17014 +16887 17014 17013 +16888 16889 17014 +16889 17015 17014 +16889 16890 17016 +16889 17016 17015 +16890 16891 17016 +16891 17017 17016 +16891 16892 17018 +16891 17018 17017 +16892 16893 17018 +16893 17019 17018 +16893 16894 17020 +16893 17020 17019 +16894 16895 17020 +16895 17021 17020 +16895 16896 17022 +16895 17022 17021 +16896 16897 17022 +16897 17023 17022 +16897 16898 17024 +16897 17024 17023 +16898 16899 17024 +16899 17025 17024 +16899 16900 17026 +16899 17026 17025 +16900 16901 17026 +16901 17027 17026 +16901 16902 17028 +16901 17028 17027 +16902 16903 17028 +16903 17029 17028 +16903 16904 17030 +16903 17030 17029 +16904 16905 17030 +16905 17031 17030 +16905 16906 17032 +16905 17032 17031 +16906 16907 17032 +16907 17033 17032 +16907 16908 17034 +16907 17034 17033 +16908 16909 17034 +16909 17035 17034 +16909 16910 17036 +16909 17036 17035 +16910 16911 17036 +16911 17037 17036 +16911 16912 17038 +16911 17038 17037 +16912 16913 17038 +16913 17039 17038 +16913 16914 17040 +16913 17040 17039 +16914 16915 17040 +16915 17041 17040 +16915 16916 17042 +16915 17042 17041 +16916 16917 17042 +16917 17043 17042 +16917 16918 17044 +16917 17044 17043 +16918 16919 17044 +16919 17045 17044 +16919 16920 17046 +16919 17046 17045 +16920 16921 17046 +16921 17047 17046 +16921 16922 17048 +16921 17048 17047 +16922 16923 17048 +16923 17049 17048 +16923 16924 17050 +16923 17050 17049 +16924 16925 17050 +16925 17051 17050 +16925 16926 17052 +16925 17052 17051 +16926 16927 17052 +16927 17053 17052 +16927 16928 17054 +16927 17054 17053 +16928 16929 17054 +16929 17055 17054 +16929 16930 17056 +16929 17056 17055 +16930 16931 17056 +16931 17057 17056 +16931 16932 17058 +16931 17058 17057 +16932 16933 17058 +16933 17059 17058 +16933 16934 17060 +16933 17060 17059 +16934 16935 17060 +16935 17061 17060 +16935 16936 17062 +16935 17062 17061 +16936 16937 17062 +16937 17063 17062 +16937 16938 17064 +16937 17064 17063 +16938 16939 17064 +16939 17065 17064 +16939 16940 17066 +16939 17066 17065 +16940 16941 17066 +16941 17067 17066 +16941 16942 17068 +16941 17068 17067 +16942 16943 17068 +16943 17069 17068 +16943 16944 17070 +16943 17070 17069 +16944 16945 17070 +16945 17071 17070 +16945 16946 17072 +16945 17072 17071 +16946 16947 17072 +16947 17073 17072 +16947 16948 17074 +16947 17074 17073 +16948 16949 17074 +16949 17075 17074 +16949 16950 17076 +16949 17076 17075 +16950 16951 17076 +16951 17077 17076 +16951 16952 17078 +16951 17078 17077 +16952 16953 17078 +16953 17079 17078 +16953 16954 17080 +16953 17080 17079 +16954 16955 17080 +16955 17081 17080 +16955 16956 17082 +16955 17082 17081 +16956 16957 17082 +16957 17083 17082 +16957 16958 17084 +16957 17084 17083 +16958 16959 17084 +16959 17085 17084 +16959 16960 17086 +16959 17086 17085 +16960 16961 17086 +16961 17087 17086 +16961 16962 17088 +16961 17088 17087 +16962 16963 17088 +16963 17089 17088 +16963 16964 17090 +16963 17090 17089 +16964 16965 17090 +16965 17091 17090 +16965 16966 17092 +16965 17092 17091 +16966 16967 17092 +16967 17093 17092 +16967 16968 17094 +16967 17094 17093 +16968 16969 17094 +16969 17095 17094 +16969 16970 17096 +16969 17096 17095 +16970 16971 17096 +16971 17097 17096 +16971 16972 17098 +16971 17098 17097 +16972 16973 17098 +16973 17099 17098 +16973 16974 17100 +16973 17100 17099 +16974 16975 17100 +16975 17101 17100 +16975 16976 17102 +16975 17102 17101 +16976 16977 17102 +16977 17103 17102 +16977 16978 17104 +16977 17104 17103 +16978 16979 17104 +16979 17105 17104 +16979 16980 17106 +16979 17106 17105 +16980 16981 17106 +16981 17107 17106 +16981 16982 17108 +16981 17108 17107 +16982 16983 17108 +16983 17109 17108 +16984 17113 17112 +16984 16985 17114 +16984 17114 17113 +16985 16986 17114 +16986 17115 17114 +16986 16987 17116 +16986 17116 17115 +16987 16988 17116 +16988 17117 17116 +16988 16989 17118 +16988 17118 17117 +16989 16990 17118 +16990 17119 17118 +16990 16991 17120 +16990 17120 17119 +16991 16992 17120 +16992 17121 17120 +16992 16993 17122 +16992 17122 17121 +16993 16994 17122 +16994 17123 17122 +16994 16995 17124 +16994 17124 17123 +16995 16996 17124 +16996 17125 17124 +16996 16997 17126 +16996 17126 17125 +16997 16998 17126 +16998 17127 17126 +16998 16999 17128 +16998 17128 17127 +16999 17000 17128 +17000 17129 17128 +17000 17001 17130 +17000 17130 17129 +17001 17002 17130 +17002 17131 17130 +17002 17003 17132 +17002 17132 17131 +17003 17004 17132 +17004 17133 17132 +17004 17005 17134 +17004 17134 17133 +17005 17006 17134 +17006 17135 17134 +17006 17007 17136 +17006 17136 17135 +17007 17008 17136 +17008 17137 17136 +17008 17009 17138 +17008 17138 17137 +17009 17010 17138 +17010 17139 17138 +17010 17011 17140 +17010 17140 17139 +17011 17012 17140 +17012 17141 17140 +17012 17013 17142 +17012 17142 17141 +17013 17014 17142 +17014 17143 17142 +17014 17015 17144 +17014 17144 17143 +17015 17016 17144 +17016 17145 17144 +17016 17017 17146 +17016 17146 17145 +17017 17018 17146 +17018 17147 17146 +17018 17019 17148 +17018 17148 17147 +17019 17020 17148 +17020 17149 17148 +17020 17021 17150 +17020 17150 17149 +17021 17022 17150 +17022 17151 17150 +17022 17023 17152 +17022 17152 17151 +17023 17024 17152 +17024 17153 17152 +17024 17025 17154 +17024 17154 17153 +17025 17026 17154 +17026 17155 17154 +17026 17027 17156 +17026 17156 17155 +17027 17028 17156 +17028 17157 17156 +17028 17029 17158 +17028 17158 17157 +17029 17030 17158 +17030 17159 17158 +17030 17031 17160 +17030 17160 17159 +17031 17032 17160 +17032 17161 17160 +17032 17033 17162 +17032 17162 17161 +17033 17034 17162 +17034 17163 17162 +17034 17035 17164 +17034 17164 17163 +17035 17036 17164 +17036 17165 17164 +17036 17037 17166 +17036 17166 17165 +17037 17038 17166 +17038 17167 17166 +17038 17039 17168 +17038 17168 17167 +17039 17040 17168 +17040 17169 17168 +17040 17041 17170 +17040 17170 17169 +17041 17042 17170 +17042 17171 17170 +17042 17043 17172 +17042 17172 17171 +17043 17044 17172 +17044 17173 17172 +17044 17045 17174 +17044 17174 17173 +17045 17046 17174 +17046 17175 17174 +17046 17047 17176 +17046 17176 17175 +17047 17048 17176 +17048 17177 17176 +17048 17049 17178 +17048 17178 17177 +17049 17050 17178 +17050 17179 17178 +17050 17051 17180 +17050 17180 17179 +17051 17052 17180 +17052 17181 17180 +17052 17053 17182 +17052 17182 17181 +17053 17054 17182 +17054 17183 17182 +17054 17055 17184 +17054 17184 17183 +17055 17056 17184 +17056 17185 17184 +17056 17057 17186 +17056 17186 17185 +17057 17058 17186 +17058 17187 17186 +17058 17059 17188 +17058 17188 17187 +17059 17060 17188 +17060 17189 17188 +17060 17061 17190 +17060 17190 17189 +17061 17062 17190 +17062 17191 17190 +17062 17063 17192 +17062 17192 17191 +17063 17064 17192 +17064 17193 17192 +17064 17065 17194 +17064 17194 17193 +17065 17066 17194 +17066 17195 17194 +17066 17067 17196 +17066 17196 17195 +17067 17068 17196 +17068 17197 17196 +17068 17069 17198 +17068 17198 17197 +17069 17070 17198 +17070 17199 17198 +17070 17071 17200 +17070 17200 17199 +17071 17072 17200 +17072 17201 17200 +17072 17073 17202 +17072 17202 17201 +17073 17074 17202 +17074 17203 17202 +17074 17075 17204 +17074 17204 17203 +17075 17076 17204 +17076 17205 17204 +17076 17077 17206 +17076 17206 17205 +17077 17078 17206 +17078 17207 17206 +17078 17079 17208 +17078 17208 17207 +17079 17080 17208 +17080 17209 17208 +17080 17081 17210 +17080 17210 17209 +17081 17082 17210 +17082 17211 17210 +17082 17083 17212 +17082 17212 17211 +17083 17084 17212 +17084 17213 17212 +17084 17085 17214 +17084 17214 17213 +17085 17086 17214 +17086 17215 17214 +17086 17087 17216 +17086 17216 17215 +17087 17088 17216 +17088 17217 17216 +17088 17089 17218 +17088 17218 17217 +17089 17090 17218 +17090 17219 17218 +17090 17091 17220 +17090 17220 17219 +17091 17092 17220 +17092 17221 17220 +17092 17093 17222 +17092 17222 17221 +17093 17094 17222 +17094 17223 17222 +17094 17095 17224 +17094 17224 17223 +17095 17096 17224 +17096 17225 17224 +17096 17097 17226 +17096 17226 17225 +17097 17098 17226 +17098 17227 17226 +17098 17099 17228 +17098 17228 17227 +17099 17100 17228 +17100 17229 17228 +17100 17101 17230 +17100 17230 17229 +17101 17102 17230 +17102 17231 17230 +17102 17103 17232 +17102 17232 17231 +17103 17104 17232 +17104 17233 17232 +17104 17105 17234 +17104 17234 17233 +17105 17106 17234 +17106 17235 17234 +17106 17107 17236 +17106 17236 17235 +17107 17108 17236 +17108 17237 17236 +17108 17109 17238 +17108 17238 17237 +17110 17111 17240 +17110 17240 17239 +17111 17112 17240 +17112 17241 17240 +17112 17113 17242 +17112 17242 17241 +17113 17114 17242 +17114 17243 17242 +17114 17115 17244 +17114 17244 17243 +17115 17116 17244 +17116 17245 17244 +17116 17117 17246 +17116 17246 17245 +17117 17118 17246 +17118 17247 17246 +17118 17119 17248 +17118 17248 17247 +17119 17120 17248 +17120 17249 17248 +17120 17121 17250 +17120 17250 17249 +17121 17122 17250 +17122 17251 17250 +17122 17123 17252 +17122 17252 17251 +17123 17124 17252 +17124 17253 17252 +17124 17125 17254 +17124 17254 17253 +17125 17126 17254 +17126 17255 17254 +17126 17127 17256 +17126 17256 17255 +17127 17128 17256 +17128 17257 17256 +17128 17129 17258 +17128 17258 17257 +17129 17130 17258 +17130 17259 17258 +17130 17131 17260 +17130 17260 17259 +17131 17132 17260 +17132 17261 17260 +17132 17133 17262 +17132 17262 17261 +17133 17134 17262 +17134 17263 17262 +17134 17135 17264 +17134 17264 17263 +17135 17136 17264 +17136 17265 17264 +17136 17137 17266 +17136 17266 17265 +17137 17138 17266 +17138 17267 17266 +17138 17139 17268 +17138 17268 17267 +17139 17140 17268 +17140 17269 17268 +17140 17141 17270 +17140 17270 17269 +17141 17142 17270 +17142 17271 17270 +17142 17143 17272 +17142 17272 17271 +17143 17144 17272 +17144 17273 17272 +17144 17145 17274 +17144 17274 17273 +17145 17146 17274 +17146 17275 17274 +17146 17147 17276 +17146 17276 17275 +17147 17148 17276 +17148 17277 17276 +17148 17149 17278 +17148 17278 17277 +17149 17150 17278 +17150 17279 17278 +17150 17151 17280 +17150 17280 17279 +17151 17152 17280 +17152 17281 17280 +17152 17153 17282 +17152 17282 17281 +17153 17154 17282 +17154 17283 17282 +17154 17155 17284 +17154 17284 17283 +17155 17156 17284 +17156 17285 17284 +17156 17157 17286 +17156 17286 17285 +17157 17158 17286 +17158 17287 17286 +17158 17159 17288 +17158 17288 17287 +17159 17160 17288 +17160 17289 17288 +17160 17161 17290 +17160 17290 17289 +17161 17162 17290 +17162 17291 17290 +17162 17163 17292 +17162 17292 17291 +17163 17164 17292 +17164 17293 17292 +17164 17165 17294 +17164 17294 17293 +17165 17166 17294 +17166 17295 17294 +17166 17167 17296 +17166 17296 17295 +17167 17168 17296 +17168 17297 17296 +17168 17169 17298 +17168 17298 17297 +17169 17170 17298 +17170 17299 17298 +17170 17171 17300 +17170 17300 17299 +17171 17172 17300 +17172 17301 17300 +17172 17173 17302 +17172 17302 17301 +17173 17174 17302 +17174 17303 17302 +17174 17175 17304 +17174 17304 17303 +17175 17176 17304 +17176 17305 17304 +17176 17177 17306 +17176 17306 17305 +17177 17178 17306 +17178 17307 17306 +17178 17179 17308 +17178 17308 17307 +17179 17180 17308 +17180 17309 17308 +17180 17181 17310 +17180 17310 17309 +17181 17182 17310 +17182 17311 17310 +17182 17183 17312 +17182 17312 17311 +17183 17184 17312 +17184 17313 17312 +17184 17185 17314 +17184 17314 17313 +17185 17186 17314 +17186 17315 17314 +17186 17187 17316 +17186 17316 17315 +17187 17188 17316 +17188 17317 17316 +17188 17189 17318 +17188 17318 17317 +17189 17190 17318 +17190 17319 17318 +17190 17191 17320 +17190 17320 17319 +17191 17192 17320 +17192 17321 17320 +17192 17193 17322 +17192 17322 17321 +17193 17194 17322 +17194 17323 17322 +17194 17195 17324 +17194 17324 17323 +17195 17196 17324 +17196 17325 17324 +17196 17197 17326 +17196 17326 17325 +17197 17198 17326 +17198 17327 17326 +17198 17199 17328 +17198 17328 17327 +17199 17200 17328 +17200 17329 17328 +17200 17201 17330 +17200 17330 17329 +17201 17202 17330 +17202 17331 17330 +17202 17203 17332 +17202 17332 17331 +17203 17204 17332 +17204 17333 17332 +17204 17205 17334 +17204 17334 17333 +17205 17206 17334 +17206 17335 17334 +17206 17207 17336 +17206 17336 17335 +17207 17208 17336 +17208 17337 17336 +17208 17209 17338 +17208 17338 17337 +17209 17210 17338 +17210 17339 17338 +17210 17211 17340 +17210 17340 17339 +17211 17212 17340 +17212 17341 17340 +17212 17213 17342 +17212 17342 17341 +17213 17214 17342 +17214 17343 17342 +17214 17215 17344 +17214 17344 17343 +17215 17216 17344 +17216 17345 17344 +17216 17217 17346 +17216 17346 17345 +17217 17218 17346 +17218 17347 17346 +17218 17219 17348 +17218 17348 17347 +17219 17220 17348 +17220 17349 17348 +17220 17221 17350 +17220 17350 17349 +17221 17222 17350 +17222 17351 17350 +17222 17223 17352 +17222 17352 17351 +17223 17224 17352 +17224 17353 17352 +17224 17225 17354 +17224 17354 17353 +17225 17226 17354 +17226 17355 17354 +17226 17227 17356 +17226 17356 17355 +17227 17228 17356 +17228 17357 17356 +17228 17229 17358 +17228 17358 17357 +17229 17230 17358 +17230 17359 17358 +17230 17231 17360 +17230 17360 17359 +17231 17232 17360 +17232 17361 17360 +17232 17233 17362 +17232 17362 17361 +17233 17234 17362 +17234 17363 17362 +17234 17235 17364 +17234 17364 17363 +17235 17236 17364 +17236 17365 17364 +17236 17237 17366 +17236 17366 17365 +17237 17238 17366 +17238 17367 17366 +17239 17240 17368 +17240 17369 17368 +17240 17241 17370 +17240 17370 17369 +17241 17242 17370 +17242 17371 17370 +17242 17243 17372 +17242 17372 17371 +17243 17244 17372 +17244 17373 17372 +17244 17245 17374 +17244 17374 17373 +17245 17246 17374 +17246 17375 17374 +17246 17247 17376 +17246 17376 17375 +17247 17248 17376 +17248 17377 17376 +17248 17249 17378 +17248 17378 17377 +17249 17250 17378 +17250 17379 17378 +17250 17251 17380 +17250 17380 17379 +17251 17252 17380 +17252 17381 17380 +17252 17253 17382 +17252 17382 17381 +17253 17254 17382 +17254 17383 17382 +17254 17255 17384 +17254 17384 17383 +17255 17256 17384 +17256 17385 17384 +17256 17257 17386 +17256 17386 17385 +17257 17258 17386 +17258 17387 17386 +17258 17259 17388 +17258 17388 17387 +17259 17260 17388 +17260 17389 17388 +17260 17261 17390 +17260 17390 17389 +17261 17262 17390 +17262 17391 17390 +17262 17263 17392 +17262 17392 17391 +17263 17264 17392 +17264 17393 17392 +17264 17265 17394 +17264 17394 17393 +17265 17266 17394 +17266 17395 17394 +17266 17267 17396 +17266 17396 17395 +17267 17268 17396 +17268 17397 17396 +17268 17269 17398 +17268 17398 17397 +17269 17270 17398 +17270 17399 17398 +17270 17271 17400 +17270 17400 17399 +17271 17272 17400 +17272 17401 17400 +17272 17273 17402 +17272 17402 17401 +17273 17274 17402 +17274 17403 17402 +17274 17275 17404 +17274 17404 17403 +17275 17276 17404 +17276 17405 17404 +17276 17277 17406 +17276 17406 17405 +17277 17278 17406 +17278 17407 17406 +17278 17279 17408 +17278 17408 17407 +17279 17280 17408 +17280 17409 17408 +17280 17281 17410 +17280 17410 17409 +17281 17282 17410 +17282 17411 17410 +17282 17283 17412 +17282 17412 17411 +17283 17284 17412 +17284 17413 17412 +17284 17285 17414 +17284 17414 17413 +17285 17286 17414 +17286 17415 17414 +17286 17287 17416 +17286 17416 17415 +17287 17288 17416 +17288 17417 17416 +17288 17289 17418 +17288 17418 17417 +17289 17290 17418 +17290 17419 17418 +17290 17291 17420 +17290 17420 17419 +17291 17292 17420 +17292 17421 17420 +17292 17293 17422 +17292 17422 17421 +17293 17294 17422 +17294 17423 17422 +17294 17295 17424 +17294 17424 17423 +17295 17296 17424 +17296 17425 17424 +17296 17297 17426 +17296 17426 17425 +17297 17298 17426 +17298 17427 17426 +17298 17299 17428 +17298 17428 17427 +17299 17300 17428 +17300 17429 17428 +17300 17301 17430 +17300 17430 17429 +17301 17302 17430 +17302 17431 17430 +17302 17303 17432 +17302 17432 17431 +17303 17304 17432 +17304 17433 17432 +17304 17305 17434 +17304 17434 17433 +17305 17306 17434 +17306 17435 17434 +17306 17307 17436 +17306 17436 17435 +17307 17308 17436 +17308 17437 17436 +17308 17309 17438 +17308 17438 17437 +17309 17310 17438 +17310 17439 17438 +17310 17311 17440 +17310 17440 17439 +17311 17312 17440 +17312 17441 17440 +17312 17313 17442 +17312 17442 17441 +17313 17314 17442 +17314 17443 17442 +17314 17315 17444 +17314 17444 17443 +17315 17316 17444 +17316 17445 17444 +17316 17317 17446 +17316 17446 17445 +17317 17318 17446 +17318 17447 17446 +17318 17319 17448 +17318 17448 17447 +17319 17320 17448 +17320 17449 17448 +17320 17321 17450 +17320 17450 17449 +17321 17322 17450 +17322 17451 17450 +17322 17323 17452 +17322 17452 17451 +17323 17324 17452 +17324 17453 17452 +17324 17325 17454 +17324 17454 17453 +17325 17326 17454 +17326 17455 17454 +17326 17327 17456 +17326 17456 17455 +17327 17328 17456 +17328 17457 17456 +17328 17329 17458 +17328 17458 17457 +17329 17330 17458 +17330 17459 17458 +17330 17331 17460 +17330 17460 17459 +17331 17332 17460 +17332 17461 17460 +17332 17333 17462 +17332 17462 17461 +17333 17334 17462 +17334 17463 17462 +17334 17335 17464 +17334 17464 17463 +17335 17336 17464 +17336 17465 17464 +17336 17337 17466 +17336 17466 17465 +17337 17338 17466 +17338 17467 17466 +17338 17339 17468 +17338 17468 17467 +17339 17340 17468 +17340 17469 17468 +17340 17341 17470 +17340 17470 17469 +17341 17342 17470 +17342 17471 17470 +17342 17343 17472 +17342 17472 17471 +17343 17344 17472 +17344 17473 17472 +17344 17345 17474 +17344 17474 17473 +17345 17346 17474 +17346 17475 17474 +17346 17347 17476 +17346 17476 17475 +17347 17348 17476 +17348 17477 17476 +17348 17349 17478 +17348 17478 17477 +17349 17350 17478 +17350 17479 17478 +17350 17351 17480 +17350 17480 17479 +17351 17352 17480 +17352 17481 17480 +17352 17353 17482 +17352 17482 17481 +17353 17354 17482 +17354 17483 17482 +17354 17355 17484 +17354 17484 17483 +17355 17356 17484 +17356 17485 17484 +17356 17357 17486 +17356 17486 17485 +17357 17358 17486 +17358 17487 17486 +17358 17359 17488 +17358 17488 17487 +17359 17360 17488 +17360 17489 17488 +17360 17361 17490 +17360 17490 17489 +17361 17362 17490 +17362 17491 17490 +17362 17363 17492 +17362 17492 17491 +17363 17364 17492 +17364 17493 17492 +17364 17365 17494 +17364 17494 17493 +17365 17366 17494 +17366 17495 17494 +17366 17367 17496 +17366 17496 17495 +17368 17369 17498 +17368 17498 17497 +17369 17370 17498 +17370 17499 17498 +17370 17371 17500 +17370 17500 17499 +17371 17372 17500 +17372 17501 17500 +17372 17373 17502 +17372 17502 17501 +17373 17374 17502 +17374 17503 17502 +17374 17375 17504 +17374 17504 17503 +17375 17376 17504 +17376 17505 17504 +17376 17377 17506 +17376 17506 17505 +17377 17378 17506 +17378 17507 17506 +17378 17379 17508 +17378 17508 17507 +17379 17380 17508 +17380 17509 17508 +17380 17381 17510 +17380 17510 17509 +17381 17382 17510 +17382 17511 17510 +17382 17383 17512 +17382 17512 17511 +17383 17384 17512 +17384 17513 17512 +17384 17385 17514 +17384 17514 17513 +17385 17386 17514 +17386 17515 17514 +17386 17387 17516 +17386 17516 17515 +17387 17388 17516 +17388 17517 17516 +17388 17389 17518 +17388 17518 17517 +17389 17390 17518 +17390 17519 17518 +17390 17391 17520 +17390 17520 17519 +17391 17392 17520 +17392 17521 17520 +17392 17393 17522 +17392 17522 17521 +17393 17394 17522 +17394 17523 17522 +17394 17395 17524 +17394 17524 17523 +17395 17396 17524 +17396 17525 17524 +17396 17397 17526 +17396 17526 17525 +17397 17398 17526 +17398 17527 17526 +17398 17399 17528 +17398 17528 17527 +17399 17400 17528 +17400 17529 17528 +17400 17401 17530 +17400 17530 17529 +17401 17402 17530 +17402 17531 17530 +17402 17403 17532 +17402 17532 17531 +17403 17404 17532 +17404 17533 17532 +17404 17405 17534 +17404 17534 17533 +17405 17406 17534 +17406 17535 17534 +17406 17407 17536 +17406 17536 17535 +17407 17408 17536 +17408 17537 17536 +17408 17409 17538 +17408 17538 17537 +17409 17410 17538 +17410 17539 17538 +17410 17411 17540 +17410 17540 17539 +17411 17412 17540 +17412 17541 17540 +17412 17413 17542 +17412 17542 17541 +17413 17414 17542 +17414 17543 17542 +17414 17415 17544 +17414 17544 17543 +17415 17416 17544 +17416 17545 17544 +17416 17417 17546 +17416 17546 17545 +17417 17418 17546 +17418 17547 17546 +17418 17419 17548 +17418 17548 17547 +17419 17420 17548 +17420 17549 17548 +17420 17421 17550 +17420 17550 17549 +17421 17422 17550 +17422 17551 17550 +17422 17423 17552 +17422 17552 17551 +17423 17424 17552 +17424 17553 17552 +17424 17425 17554 +17424 17554 17553 +17425 17426 17554 +17426 17555 17554 +17426 17427 17556 +17426 17556 17555 +17427 17428 17556 +17428 17557 17556 +17428 17429 17558 +17428 17558 17557 +17429 17430 17558 +17430 17559 17558 +17430 17431 17560 +17430 17560 17559 +17431 17432 17560 +17432 17561 17560 +17432 17433 17562 +17432 17562 17561 +17433 17434 17562 +17434 17563 17562 +17434 17435 17564 +17434 17564 17563 +17435 17436 17564 +17436 17565 17564 +17436 17437 17566 +17436 17566 17565 +17437 17438 17566 +17438 17567 17566 +17438 17439 17568 +17438 17568 17567 +17439 17440 17568 +17440 17569 17568 +17440 17441 17570 +17440 17570 17569 +17441 17442 17570 +17442 17571 17570 +17442 17443 17572 +17442 17572 17571 +17443 17444 17572 +17444 17573 17572 +17444 17445 17574 +17444 17574 17573 +17445 17446 17574 +17446 17575 17574 +17446 17447 17576 +17446 17576 17575 +17447 17448 17576 +17448 17577 17576 +17448 17449 17578 +17448 17578 17577 +17449 17450 17578 +17450 17579 17578 +17450 17451 17580 +17450 17580 17579 +17451 17452 17580 +17452 17581 17580 +17452 17453 17582 +17452 17582 17581 +17453 17454 17582 +17454 17583 17582 +17454 17455 17584 +17454 17584 17583 +17455 17456 17584 +17456 17585 17584 +17456 17457 17586 +17456 17586 17585 +17457 17458 17586 +17458 17587 17586 +17458 17459 17588 +17458 17588 17587 +17459 17460 17588 +17460 17589 17588 +17460 17461 17590 +17460 17590 17589 +17461 17462 17590 +17462 17591 17590 +17462 17463 17592 +17462 17592 17591 +17463 17464 17592 +17464 17593 17592 +17464 17465 17594 +17464 17594 17593 +17465 17466 17594 +17466 17595 17594 +17466 17467 17596 +17466 17596 17595 +17467 17468 17596 +17468 17597 17596 +17468 17469 17598 +17468 17598 17597 +17469 17470 17598 +17470 17599 17598 +17470 17471 17600 +17470 17600 17599 +17471 17472 17600 +17472 17601 17600 +17472 17473 17602 +17472 17602 17601 +17473 17474 17602 +17474 17603 17602 +17474 17475 17604 +17474 17604 17603 +17475 17476 17604 +17476 17605 17604 +17476 17477 17606 +17476 17606 17605 +17477 17478 17606 +17478 17607 17606 +17478 17479 17608 +17478 17608 17607 +17479 17480 17608 +17480 17609 17608 +17480 17481 17610 +17480 17610 17609 +17481 17482 17610 +17482 17611 17610 +17482 17483 17612 +17482 17612 17611 +17483 17484 17612 +17484 17613 17612 +17484 17485 17614 +17484 17614 17613 +17485 17486 17614 +17486 17615 17614 +17486 17487 17616 +17486 17616 17615 +17487 17488 17616 +17488 17617 17616 +17488 17489 17618 +17488 17618 17617 +17489 17490 17618 +17490 17619 17618 +17490 17491 17620 +17490 17620 17619 +17491 17492 17620 +17492 17621 17620 +17492 17493 17622 +17492 17622 17621 +17493 17494 17622 +17494 17623 17622 +17494 17495 17624 +17494 17624 17623 +17495 17496 17624 +17496 17625 17624 +17497 17498 17626 +17498 17627 17626 +17498 17499 17628 +17498 17628 17627 +17499 17500 17628 +17500 17629 17628 +17500 17501 17630 +17500 17630 17629 +17501 17502 17630 +17502 17631 17630 +17502 17503 17632 +17502 17632 17631 +17503 17504 17632 +17504 17633 17632 +17504 17505 17634 +17504 17634 17633 +17505 17506 17634 +17506 17635 17634 +17506 17507 17636 +17506 17636 17635 +17507 17508 17636 +17508 17637 17636 +17508 17509 17638 +17508 17638 17637 +17509 17510 17638 +17510 17639 17638 +17510 17511 17640 +17510 17640 17639 +17511 17512 17640 +17512 17641 17640 +17512 17513 17642 +17512 17642 17641 +17513 17514 17642 +17514 17643 17642 +17514 17515 17644 +17514 17644 17643 +17515 17516 17644 +17516 17645 17644 +17516 17517 17646 +17516 17646 17645 +17517 17518 17646 +17518 17647 17646 +17518 17519 17648 +17518 17648 17647 +17519 17520 17648 +17520 17649 17648 +17520 17521 17650 +17520 17650 17649 +17521 17522 17650 +17522 17651 17650 +17522 17523 17652 +17522 17652 17651 +17523 17524 17652 +17524 17653 17652 +17524 17525 17654 +17524 17654 17653 +17525 17526 17654 +17526 17655 17654 +17526 17527 17656 +17526 17656 17655 +17527 17528 17656 +17528 17657 17656 +17528 17529 17658 +17528 17658 17657 +17529 17530 17658 +17530 17659 17658 +17530 17531 17660 +17530 17660 17659 +17531 17532 17660 +17532 17661 17660 +17532 17533 17662 +17532 17662 17661 +17533 17534 17662 +17534 17663 17662 +17534 17535 17664 +17534 17664 17663 +17535 17536 17664 +17536 17665 17664 +17536 17537 17666 +17536 17666 17665 +17537 17538 17666 +17538 17667 17666 +17538 17539 17668 +17538 17668 17667 +17539 17540 17668 +17540 17669 17668 +17540 17541 17670 +17540 17670 17669 +17541 17542 17670 +17542 17671 17670 +17542 17543 17672 +17542 17672 17671 +17543 17544 17672 +17544 17673 17672 +17544 17545 17674 +17544 17674 17673 +17545 17546 17674 +17546 17675 17674 +17546 17547 17676 +17546 17676 17675 +17547 17548 17676 +17548 17677 17676 +17548 17549 17678 +17548 17678 17677 +17549 17550 17678 +17550 17679 17678 +17550 17551 17680 +17550 17680 17679 +17551 17552 17680 +17552 17681 17680 +17552 17553 17682 +17552 17682 17681 +17553 17554 17682 +17554 17683 17682 +17554 17555 17684 +17554 17684 17683 +17555 17556 17684 +17556 17685 17684 +17556 17557 17686 +17556 17686 17685 +17557 17558 17686 +17558 17687 17686 +17558 17559 17688 +17558 17688 17687 +17559 17560 17688 +17560 17689 17688 +17560 17561 17690 +17560 17690 17689 +17561 17562 17690 +17562 17691 17690 +17562 17563 17692 +17562 17692 17691 +17563 17564 17692 +17564 17693 17692 +17564 17565 17694 +17564 17694 17693 +17565 17566 17694 +17566 17695 17694 +17566 17567 17696 +17566 17696 17695 +17567 17568 17696 +17568 17697 17696 +17568 17569 17698 +17568 17698 17697 +17569 17570 17698 +17570 17699 17698 +17570 17571 17700 +17570 17700 17699 +17571 17572 17700 +17572 17701 17700 +17572 17573 17702 +17572 17702 17701 +17573 17574 17702 +17574 17703 17702 +17574 17575 17704 +17574 17704 17703 +17575 17576 17704 +17576 17705 17704 +17576 17577 17706 +17576 17706 17705 +17577 17578 17706 +17578 17707 17706 +17578 17579 17708 +17578 17708 17707 +17579 17580 17708 +17580 17709 17708 +17580 17581 17710 +17580 17710 17709 +17581 17582 17710 +17582 17711 17710 +17582 17583 17712 +17582 17712 17711 +17583 17584 17712 +17584 17713 17712 +17584 17585 17714 +17584 17714 17713 +17585 17586 17714 +17586 17715 17714 +17586 17587 17716 +17586 17716 17715 +17587 17588 17716 +17588 17717 17716 +17588 17589 17718 +17588 17718 17717 +17589 17590 17718 +17590 17719 17718 +17590 17591 17720 +17590 17720 17719 +17591 17592 17720 +17592 17721 17720 +17592 17593 17722 +17592 17722 17721 +17593 17594 17722 +17594 17723 17722 +17594 17595 17724 +17594 17724 17723 +17595 17596 17724 +17596 17725 17724 +17596 17597 17726 +17596 17726 17725 +17597 17598 17726 +17598 17727 17726 +17598 17599 17728 +17598 17728 17727 +17599 17600 17728 +17600 17729 17728 +17600 17601 17730 +17600 17730 17729 +17601 17602 17730 +17602 17731 17730 +17602 17603 17732 +17602 17732 17731 +17603 17604 17732 +17604 17733 17732 +17604 17605 17734 +17604 17734 17733 +17605 17606 17734 +17606 17735 17734 +17606 17607 17736 +17606 17736 17735 +17607 17608 17736 +17608 17737 17736 +17608 17609 17738 +17608 17738 17737 +17609 17610 17738 +17610 17739 17738 +17610 17611 17740 +17610 17740 17739 +17611 17612 17740 +17612 17741 17740 +17612 17613 17742 +17612 17742 17741 +17613 17614 17742 +17614 17743 17742 +17614 17615 17744 +17614 17744 17743 +17615 17616 17744 +17616 17745 17744 +17616 17617 17746 +17616 17746 17745 +17617 17618 17746 +17618 17747 17746 +17618 17619 17748 +17618 17748 17747 +17619 17620 17748 +17620 17749 17748 +17620 17621 17750 +17620 17750 17749 +17621 17622 17750 +17622 17751 17750 +17622 17623 17752 +17622 17752 17751 +17623 17624 17752 +17624 17753 17752 +17624 17625 17754 +17624 17754 17753 +17626 17627 17756 +17626 17756 17755 +17627 17628 17756 +17628 17757 17756 +17628 17629 17758 +17628 17758 17757 +17629 17630 17758 +17630 17759 17758 +17630 17631 17760 +17630 17760 17759 +17631 17632 17760 +17632 17761 17760 +17632 17633 17762 +17632 17762 17761 +17633 17634 17762 +17634 17763 17762 +17634 17635 17764 +17634 17764 17763 +17635 17636 17764 +17636 17765 17764 +17636 17637 17766 +17636 17766 17765 +17637 17638 17766 +17638 17767 17766 +17638 17639 17768 +17638 17768 17767 +17639 17640 17768 +17640 17769 17768 +17640 17641 17770 +17640 17770 17769 +17641 17642 17770 +17642 17771 17770 +17642 17643 17772 +17642 17772 17771 +17643 17644 17772 +17644 17773 17772 +17644 17645 17774 +17644 17774 17773 +17645 17646 17774 +17646 17775 17774 +17646 17647 17776 +17646 17776 17775 +17647 17648 17776 +17648 17777 17776 +17648 17649 17778 +17648 17778 17777 +17649 17650 17778 +17650 17779 17778 +17650 17651 17780 +17650 17780 17779 +17651 17652 17780 +17652 17781 17780 +17652 17653 17782 +17652 17782 17781 +17653 17654 17782 +17654 17783 17782 +17654 17655 17784 +17654 17784 17783 +17655 17656 17784 +17656 17785 17784 +17656 17657 17786 +17656 17786 17785 +17657 17658 17786 +17658 17787 17786 +17658 17659 17788 +17658 17788 17787 +17659 17660 17788 +17660 17789 17788 +17660 17661 17790 +17660 17790 17789 +17661 17662 17790 +17662 17791 17790 +17662 17663 17792 +17662 17792 17791 +17663 17664 17792 +17664 17793 17792 +17664 17665 17794 +17664 17794 17793 +17665 17666 17794 +17666 17795 17794 +17666 17667 17796 +17666 17796 17795 +17667 17668 17796 +17668 17797 17796 +17668 17669 17798 +17668 17798 17797 +17669 17670 17798 +17670 17799 17798 +17670 17671 17800 +17670 17800 17799 +17671 17672 17800 +17672 17801 17800 +17672 17673 17802 +17672 17802 17801 +17673 17674 17802 +17674 17803 17802 +17674 17675 17804 +17674 17804 17803 +17675 17676 17804 +17676 17805 17804 +17676 17677 17806 +17676 17806 17805 +17677 17678 17806 +17678 17807 17806 +17678 17679 17808 +17678 17808 17807 +17679 17680 17808 +17680 17809 17808 +17680 17681 17810 +17680 17810 17809 +17681 17682 17810 +17682 17811 17810 +17682 17683 17812 +17682 17812 17811 +17683 17684 17812 +17684 17813 17812 +17684 17685 17814 +17684 17814 17813 +17685 17686 17814 +17686 17815 17814 +17686 17687 17816 +17686 17816 17815 +17687 17688 17816 +17688 17817 17816 +17688 17689 17818 +17688 17818 17817 +17689 17690 17818 +17690 17819 17818 +17690 17691 17820 +17690 17820 17819 +17691 17692 17820 +17692 17821 17820 +17692 17693 17822 +17692 17822 17821 +17693 17694 17822 +17694 17823 17822 +17694 17695 17824 +17694 17824 17823 +17695 17696 17824 +17696 17825 17824 +17696 17697 17826 +17696 17826 17825 +17697 17698 17826 +17698 17827 17826 +17698 17699 17828 +17698 17828 17827 +17699 17700 17828 +17700 17829 17828 +17700 17701 17830 +17700 17830 17829 +17701 17702 17830 +17702 17831 17830 +17702 17703 17832 +17702 17832 17831 +17703 17704 17832 +17704 17833 17832 +17704 17705 17834 +17704 17834 17833 +17705 17706 17834 +17706 17835 17834 +17706 17707 17836 +17706 17836 17835 +17707 17708 17836 +17708 17837 17836 +17708 17709 17838 +17708 17838 17837 +17709 17710 17838 +17710 17839 17838 +17710 17711 17840 +17710 17840 17839 +17711 17712 17840 +17712 17841 17840 +17712 17713 17842 +17712 17842 17841 +17713 17714 17842 +17714 17843 17842 +17714 17715 17844 +17714 17844 17843 +17715 17716 17844 +17716 17845 17844 +17716 17717 17846 +17716 17846 17845 +17717 17718 17846 +17718 17847 17846 +17718 17719 17848 +17718 17848 17847 +17719 17720 17848 +17720 17849 17848 +17720 17721 17850 +17720 17850 17849 +17721 17722 17850 +17722 17851 17850 +17722 17723 17852 +17722 17852 17851 +17723 17724 17852 +17724 17853 17852 +17724 17725 17854 +17724 17854 17853 +17725 17726 17854 +17726 17855 17854 +17726 17727 17856 +17726 17856 17855 +17727 17728 17856 +17728 17857 17856 +17728 17729 17858 +17728 17858 17857 +17729 17730 17858 +17730 17859 17858 +17730 17731 17860 +17730 17860 17859 +17731 17732 17860 +17732 17861 17860 +17732 17733 17862 +17732 17862 17861 +17733 17734 17862 +17734 17863 17862 +17734 17735 17864 +17734 17864 17863 +17735 17736 17864 +17736 17865 17864 +17736 17737 17866 +17736 17866 17865 +17737 17738 17866 +17738 17867 17866 +17738 17739 17868 +17738 17868 17867 +17739 17740 17868 +17740 17869 17868 +17740 17741 17870 +17740 17870 17869 +17741 17742 17870 +17742 17871 17870 +17742 17743 17872 +17742 17872 17871 +17743 17744 17872 +17744 17873 17872 +17744 17745 17874 +17744 17874 17873 +17745 17746 17874 +17746 17875 17874 +17746 17747 17876 +17746 17876 17875 +17747 17748 17876 +17748 17877 17876 +17748 17749 17878 +17748 17878 17877 +17749 17750 17878 +17750 17879 17878 +17750 17751 17880 +17750 17880 17879 +17751 17752 17880 +17752 17881 17880 +17752 17753 17882 +17752 17882 17881 +17753 17754 17882 +17754 17883 17882 +17755 17756 17884 +17756 17885 17884 +17756 17757 17886 +17756 17886 17885 +17757 17758 17886 +17758 17887 17886 +17758 17759 17888 +17758 17888 17887 +17759 17760 17888 +17760 17889 17888 +17760 17761 17890 +17760 17890 17889 +17761 17762 17890 +17762 17891 17890 +17762 17763 17892 +17762 17892 17891 +17763 17764 17892 +17764 17893 17892 +17764 17765 17894 +17764 17894 17893 +17765 17766 17894 +17766 17895 17894 +17766 17767 17896 +17766 17896 17895 +17767 17768 17896 +17768 17897 17896 +17768 17769 17898 +17768 17898 17897 +17769 17770 17898 +17770 17899 17898 +17770 17771 17900 +17770 17900 17899 +17771 17772 17900 +17772 17901 17900 +17772 17773 17902 +17772 17902 17901 +17773 17774 17902 +17774 17903 17902 +17774 17775 17904 +17774 17904 17903 +17775 17776 17904 +17776 17905 17904 +17776 17777 17906 +17776 17906 17905 +17777 17778 17906 +17778 17907 17906 +17778 17779 17908 +17778 17908 17907 +17779 17780 17908 +17780 17909 17908 +17780 17781 17910 +17780 17910 17909 +17781 17782 17910 +17782 17911 17910 +17782 17783 17912 +17782 17912 17911 +17783 17784 17912 +17784 17913 17912 +17784 17785 17914 +17784 17914 17913 +17785 17786 17914 +17786 17915 17914 +17786 17787 17916 +17786 17916 17915 +17787 17788 17916 +17788 17917 17916 +17788 17789 17918 +17788 17918 17917 +17789 17790 17918 +17790 17919 17918 +17790 17791 17920 +17790 17920 17919 +17791 17792 17920 +17792 17921 17920 +17792 17793 17922 +17792 17922 17921 +17793 17794 17922 +17794 17923 17922 +17794 17795 17924 +17794 17924 17923 +17795 17796 17924 +17796 17925 17924 +17796 17797 17926 +17796 17926 17925 +17797 17798 17926 +17798 17927 17926 +17798 17799 17928 +17798 17928 17927 +17799 17800 17928 +17800 17929 17928 +17800 17801 17930 +17800 17930 17929 +17801 17802 17930 +17802 17931 17930 +17802 17803 17932 +17802 17932 17931 +17803 17804 17932 +17804 17933 17932 +17804 17805 17934 +17804 17934 17933 +17805 17806 17934 +17806 17935 17934 +17806 17807 17936 +17806 17936 17935 +17807 17808 17936 +17808 17937 17936 +17808 17809 17938 +17808 17938 17937 +17809 17810 17938 +17810 17939 17938 +17810 17811 17940 +17810 17940 17939 +17811 17812 17940 +17812 17941 17940 +17812 17813 17942 +17812 17942 17941 +17813 17814 17942 +17814 17943 17942 +17814 17815 17944 +17814 17944 17943 +17815 17816 17944 +17816 17945 17944 +17816 17817 17946 +17816 17946 17945 +17817 17818 17946 +17818 17947 17946 +17818 17819 17948 +17818 17948 17947 +17819 17820 17948 +17820 17949 17948 +17820 17821 17950 +17820 17950 17949 +17821 17822 17950 +17822 17951 17950 +17822 17823 17952 +17822 17952 17951 +17823 17824 17952 +17824 17953 17952 +17824 17825 17954 +17824 17954 17953 +17825 17826 17954 +17826 17955 17954 +17826 17827 17956 +17826 17956 17955 +17827 17828 17956 +17828 17957 17956 +17828 17829 17958 +17828 17958 17957 +17829 17830 17958 +17830 17959 17958 +17830 17831 17960 +17830 17960 17959 +17831 17832 17960 +17832 17961 17960 +17832 17833 17962 +17832 17962 17961 +17833 17834 17962 +17834 17963 17962 +17834 17835 17964 +17834 17964 17963 +17835 17836 17964 +17836 17965 17964 +17836 17837 17966 +17836 17966 17965 +17837 17838 17966 +17838 17967 17966 +17838 17839 17968 +17838 17968 17967 +17839 17840 17968 +17840 17969 17968 +17840 17841 17970 +17840 17970 17969 +17841 17842 17970 +17842 17971 17970 +17842 17843 17972 +17842 17972 17971 +17843 17844 17972 +17844 17973 17972 +17844 17845 17974 +17844 17974 17973 +17845 17846 17974 +17846 17975 17974 +17846 17847 17976 +17846 17976 17975 +17847 17848 17976 +17848 17977 17976 +17848 17849 17978 +17848 17978 17977 +17849 17850 17978 +17850 17979 17978 +17850 17851 17980 +17850 17980 17979 +17851 17852 17980 +17852 17981 17980 +17852 17853 17982 +17852 17982 17981 +17853 17854 17982 +17854 17983 17982 +17854 17855 17984 +17854 17984 17983 +17855 17856 17984 +17856 17985 17984 +17856 17857 17986 +17856 17986 17985 +17857 17858 17986 +17858 17987 17986 +17858 17859 17988 +17858 17988 17987 +17859 17860 17988 +17860 17989 17988 +17860 17861 17990 +17860 17990 17989 +17861 17862 17990 +17862 17991 17990 +17862 17863 17992 +17862 17992 17991 +17863 17864 17992 +17864 17993 17992 +17864 17865 17994 +17864 17994 17993 +17865 17866 17994 +17866 17995 17994 +17866 17867 17996 +17866 17996 17995 +17867 17868 17996 +17868 17997 17996 +17868 17869 17998 +17868 17998 17997 +17869 17870 17998 +17870 17999 17998 +17870 17871 18000 +17870 18000 17999 +17871 17872 18000 +17872 18001 18000 +17872 17873 18002 +17872 18002 18001 +17873 17874 18002 +17874 18003 18002 +17874 17875 18004 +17874 18004 18003 +17875 17876 18004 +17876 18005 18004 +17876 17877 18006 +17876 18006 18005 +17877 17878 18006 +17878 18007 18006 +17878 17879 18008 +17878 18008 18007 +17879 17880 18008 +17880 18009 18008 +17880 17881 18010 +17880 18010 18009 +17881 17882 18010 +17882 18011 18010 +17882 17883 18012 +17882 18012 18011 +17884 17885 18014 +17884 18014 18013 +17885 17886 18014 +17886 18015 18014 +17886 17887 18016 +17886 18016 18015 +17887 17888 18016 +17888 18017 18016 +17888 17889 18018 +17888 18018 18017 +17889 17890 18018 +17890 18019 18018 +17890 17891 18020 +17890 18020 18019 +17891 17892 18020 +17892 18021 18020 +17892 17893 18022 +17892 18022 18021 +17893 17894 18022 +17894 18023 18022 +17894 17895 18024 +17894 18024 18023 +17895 17896 18024 +17896 18025 18024 +17896 17897 18026 +17896 18026 18025 +17897 17898 18026 +17898 18027 18026 +17898 17899 18028 +17898 18028 18027 +17899 17900 18028 +17900 18029 18028 +17900 17901 18030 +17900 18030 18029 +17901 17902 18030 +17902 18031 18030 +17902 17903 18032 +17902 18032 18031 +17903 17904 18032 +17904 18033 18032 +17904 17905 18034 +17904 18034 18033 +17905 17906 18034 +17906 18035 18034 +17906 17907 18036 +17906 18036 18035 +17907 17908 18036 +17908 18037 18036 +17908 17909 18038 +17908 18038 18037 +17909 17910 18038 +17910 18039 18038 +17910 17911 18040 +17910 18040 18039 +17911 17912 18040 +17912 18041 18040 +17912 17913 18042 +17912 18042 18041 +17913 17914 18042 +17914 18043 18042 +17914 17915 18044 +17914 18044 18043 +17915 17916 18044 +17916 18045 18044 +17916 17917 18046 +17916 18046 18045 +17917 17918 18046 +17918 18047 18046 +17918 17919 18048 +17918 18048 18047 +17919 17920 18048 +17920 18049 18048 +17920 17921 18050 +17920 18050 18049 +17921 17922 18050 +17922 18051 18050 +17922 17923 18052 +17922 18052 18051 +17923 17924 18052 +17924 18053 18052 +17924 17925 18054 +17924 18054 18053 +17925 17926 18054 +17926 18055 18054 +17926 17927 18056 +17926 18056 18055 +17927 17928 18056 +17928 18057 18056 +17928 17929 18058 +17928 18058 18057 +17929 17930 18058 +17930 18059 18058 +17930 17931 18060 +17930 18060 18059 +17931 17932 18060 +17932 18061 18060 +17932 17933 18062 +17932 18062 18061 +17933 17934 18062 +17934 18063 18062 +17934 17935 18064 +17934 18064 18063 +17935 17936 18064 +17936 18065 18064 +17936 17937 18066 +17936 18066 18065 +17937 17938 18066 +17938 18067 18066 +17938 17939 18068 +17938 18068 18067 +17939 17940 18068 +17940 18069 18068 +17940 17941 18070 +17940 18070 18069 +17941 17942 18070 +17942 18071 18070 +17942 17943 18072 +17942 18072 18071 +17943 17944 18072 +17944 18073 18072 +17944 17945 18074 +17944 18074 18073 +17945 17946 18074 +17946 18075 18074 +17946 17947 18076 +17946 18076 18075 +17947 17948 18076 +17948 18077 18076 +17948 17949 18078 +17948 18078 18077 +17949 17950 18078 +17950 18079 18078 +17950 17951 18080 +17950 18080 18079 +17951 17952 18080 +17952 18081 18080 +17952 17953 18082 +17952 18082 18081 +17953 17954 18082 +17954 18083 18082 +17954 17955 18084 +17954 18084 18083 +17955 17956 18084 +17956 18085 18084 +17956 17957 18086 +17956 18086 18085 +17957 17958 18086 +17958 18087 18086 +17958 17959 18088 +17958 18088 18087 +17959 17960 18088 +17960 18089 18088 +17960 17961 18090 +17960 18090 18089 +17961 17962 18090 +17962 18091 18090 +17962 17963 18092 +17962 18092 18091 +17963 17964 18092 +17964 18093 18092 +17964 17965 18094 +17964 18094 18093 +17965 17966 18094 +17966 18095 18094 +17966 17967 18096 +17966 18096 18095 +17967 17968 18096 +17968 18097 18096 +17968 17969 18098 +17968 18098 18097 +17969 17970 18098 +17970 18099 18098 +17970 17971 18100 +17970 18100 18099 +17971 17972 18100 +17972 18101 18100 +17972 17973 18102 +17972 18102 18101 +17973 17974 18102 +17974 18103 18102 +17974 17975 18104 +17974 18104 18103 +17975 17976 18104 +17976 18105 18104 +17976 17977 18106 +17976 18106 18105 +17977 17978 18106 +17978 18107 18106 +17978 17979 18108 +17978 18108 18107 +17979 17980 18108 +17980 18109 18108 +17980 17981 18110 +17980 18110 18109 +17981 17982 18110 +17982 18111 18110 +17982 17983 18112 +17982 18112 18111 +17983 17984 18112 +17984 18113 18112 +17984 17985 18114 +17984 18114 18113 +17985 17986 18114 +17986 18115 18114 +17986 17987 18116 +17986 18116 18115 +17987 17988 18116 +17988 18117 18116 +17988 17989 18118 +17988 18118 18117 +17989 17990 18118 +17990 18119 18118 +17990 17991 18120 +17990 18120 18119 +17991 17992 18120 +17992 18121 18120 +17992 17993 18122 +17992 18122 18121 +17993 17994 18122 +17994 18123 18122 +17994 17995 18124 +17994 18124 18123 +17995 17996 18124 +17996 18125 18124 +17996 17997 18126 +17996 18126 18125 +17997 17998 18126 +17998 18127 18126 +17998 17999 18128 +17998 18128 18127 +17999 18000 18128 +18000 18129 18128 +18000 18001 18130 +18000 18130 18129 +18001 18002 18130 +18002 18131 18130 +18002 18003 18132 +18002 18132 18131 +18003 18004 18132 +18004 18133 18132 +18004 18005 18134 +18004 18134 18133 +18005 18006 18134 +18006 18135 18134 +18006 18007 18136 +18006 18136 18135 +18007 18008 18136 +18008 18137 18136 +18008 18009 18138 +18008 18138 18137 +18009 18010 18138 +18010 18139 18138 +18010 18011 18140 +18010 18140 18139 +18011 18012 18140 +18012 18141 18140 +18013 18014 18142 +18014 18143 18142 +18014 18015 18144 +18014 18144 18143 +18015 18016 18144 +18016 18145 18144 +18016 18017 18146 +18016 18146 18145 +18017 18018 18146 +18018 18147 18146 +18018 18019 18148 +18018 18148 18147 +18019 18020 18148 +18020 18149 18148 +18020 18021 18150 +18020 18150 18149 +18021 18022 18150 +18022 18151 18150 +18022 18023 18152 +18022 18152 18151 +18023 18024 18152 +18024 18153 18152 +18024 18025 18154 +18024 18154 18153 +18025 18026 18154 +18026 18155 18154 +18026 18027 18156 +18026 18156 18155 +18027 18028 18156 +18028 18157 18156 +18028 18029 18158 +18028 18158 18157 +18029 18030 18158 +18030 18159 18158 +18030 18031 18160 +18030 18160 18159 +18031 18032 18160 +18032 18161 18160 +18032 18033 18162 +18032 18162 18161 +18033 18034 18162 +18034 18163 18162 +18034 18035 18164 +18034 18164 18163 +18035 18036 18164 +18036 18165 18164 +18036 18037 18166 +18036 18166 18165 +18037 18038 18166 +18038 18167 18166 +18038 18039 18168 +18038 18168 18167 +18039 18040 18168 +18040 18169 18168 +18040 18041 18170 +18040 18170 18169 +18041 18042 18170 +18042 18171 18170 +18042 18043 18172 +18042 18172 18171 +18043 18044 18172 +18044 18173 18172 +18044 18045 18174 +18044 18174 18173 +18045 18046 18174 +18046 18175 18174 +18046 18047 18176 +18046 18176 18175 +18047 18048 18176 +18048 18177 18176 +18048 18049 18178 +18048 18178 18177 +18049 18050 18178 +18050 18179 18178 +18050 18051 18180 +18050 18180 18179 +18051 18052 18180 +18052 18181 18180 +18052 18053 18182 +18052 18182 18181 +18053 18054 18182 +18054 18183 18182 +18054 18055 18184 +18054 18184 18183 +18055 18056 18184 +18056 18185 18184 +18056 18057 18186 +18056 18186 18185 +18057 18058 18186 +18058 18187 18186 +18058 18059 18188 +18058 18188 18187 +18059 18060 18188 +18060 18189 18188 +18060 18061 18190 +18060 18190 18189 +18061 18062 18190 +18062 18191 18190 +18062 18063 18192 +18062 18192 18191 +18063 18064 18192 +18064 18193 18192 +18064 18065 18194 +18064 18194 18193 +18065 18066 18194 +18066 18195 18194 +18066 18067 18196 +18066 18196 18195 +18067 18068 18196 +18068 18197 18196 +18068 18069 18198 +18068 18198 18197 +18069 18070 18198 +18070 18199 18198 +18070 18071 18200 +18070 18200 18199 +18071 18072 18200 +18072 18201 18200 +18072 18073 18202 +18072 18202 18201 +18073 18074 18202 +18074 18203 18202 +18074 18075 18204 +18074 18204 18203 +18075 18076 18204 +18076 18205 18204 +18076 18077 18206 +18076 18206 18205 +18077 18078 18206 +18078 18207 18206 +18078 18079 18208 +18078 18208 18207 +18079 18080 18208 +18080 18209 18208 +18080 18081 18210 +18080 18210 18209 +18081 18082 18210 +18082 18211 18210 +18082 18083 18212 +18082 18212 18211 +18083 18084 18212 +18084 18213 18212 +18084 18085 18214 +18084 18214 18213 +18085 18086 18214 +18086 18215 18214 +18086 18087 18216 +18086 18216 18215 +18087 18088 18216 +18088 18217 18216 +18088 18089 18218 +18088 18218 18217 +18089 18090 18218 +18090 18219 18218 +18090 18091 18220 +18090 18220 18219 +18091 18092 18220 +18092 18221 18220 +18092 18093 18222 +18092 18222 18221 +18093 18094 18222 +18094 18223 18222 +18094 18095 18224 +18094 18224 18223 +18095 18096 18224 +18096 18225 18224 +18096 18097 18226 +18096 18226 18225 +18097 18098 18226 +18098 18227 18226 +18098 18099 18228 +18098 18228 18227 +18099 18100 18228 +18100 18229 18228 +18100 18101 18230 +18100 18230 18229 +18101 18102 18230 +18102 18231 18230 +18102 18103 18232 +18102 18232 18231 +18103 18104 18232 +18104 18233 18232 +18104 18105 18234 +18104 18234 18233 +18105 18106 18234 +18106 18235 18234 +18106 18107 18236 +18106 18236 18235 +18107 18108 18236 +18108 18237 18236 +18108 18109 18238 +18108 18238 18237 +18109 18110 18238 +18110 18239 18238 +18110 18111 18240 +18110 18240 18239 +18111 18112 18240 +18112 18241 18240 +18112 18113 18242 +18112 18242 18241 +18113 18114 18242 +18114 18243 18242 +18114 18115 18244 +18114 18244 18243 +18115 18116 18244 +18116 18245 18244 +18116 18117 18246 +18116 18246 18245 +18117 18118 18246 +18118 18247 18246 +18118 18119 18248 +18118 18248 18247 +18119 18120 18248 +18120 18249 18248 +18120 18121 18250 +18120 18250 18249 +18121 18122 18250 +18122 18251 18250 +18122 18123 18252 +18122 18252 18251 +18123 18124 18252 +18124 18253 18252 +18124 18125 18254 +18124 18254 18253 +18125 18126 18254 +18126 18255 18254 +18126 18127 18256 +18126 18256 18255 +18127 18128 18256 +18128 18257 18256 +18128 18129 18258 +18128 18258 18257 +18129 18130 18258 +18130 18259 18258 +18130 18131 18260 +18130 18260 18259 +18131 18132 18260 +18132 18261 18260 +18132 18133 18262 +18132 18262 18261 +18133 18134 18262 +18134 18263 18262 +18134 18135 18264 +18134 18264 18263 +18135 18136 18264 +18136 18265 18264 +18136 18137 18266 +18136 18266 18265 +18137 18138 18266 +18138 18267 18266 +18138 18139 18268 +18138 18268 18267 +18139 18140 18268 +18140 18269 18268 +18140 18141 18270 +18140 18270 18269 +18142 18143 18272 +18142 18272 18271 +18143 18144 18272 +18144 18273 18272 +18144 18145 18274 +18144 18274 18273 +18145 18146 18274 +18146 18275 18274 +18146 18147 18276 +18146 18276 18275 +18147 18148 18276 +18148 18277 18276 +18148 18149 18278 +18148 18278 18277 +18149 18150 18278 +18150 18279 18278 +18150 18151 18280 +18150 18280 18279 +18151 18152 18280 +18152 18281 18280 +18152 18153 18282 +18152 18282 18281 +18153 18154 18282 +18154 18283 18282 +18154 18155 18284 +18154 18284 18283 +18155 18156 18284 +18156 18285 18284 +18156 18157 18286 +18156 18286 18285 +18157 18158 18286 +18158 18287 18286 +18158 18159 18288 +18158 18288 18287 +18159 18160 18288 +18160 18289 18288 +18160 18161 18290 +18160 18290 18289 +18161 18162 18290 +18162 18291 18290 +18162 18163 18292 +18162 18292 18291 +18163 18164 18292 +18164 18293 18292 +18164 18165 18294 +18164 18294 18293 +18165 18166 18294 +18166 18295 18294 +18166 18167 18296 +18166 18296 18295 +18167 18168 18296 +18168 18297 18296 +18168 18169 18298 +18168 18298 18297 +18169 18170 18298 +18170 18299 18298 +18170 18171 18300 +18170 18300 18299 +18171 18172 18300 +18172 18301 18300 +18172 18173 18302 +18172 18302 18301 +18173 18174 18302 +18174 18303 18302 +18174 18175 18304 +18174 18304 18303 +18175 18176 18304 +18176 18305 18304 +18176 18177 18306 +18176 18306 18305 +18177 18178 18306 +18178 18307 18306 +18178 18179 18308 +18178 18308 18307 +18179 18180 18308 +18180 18309 18308 +18180 18181 18310 +18180 18310 18309 +18181 18182 18310 +18182 18311 18310 +18182 18183 18312 +18182 18312 18311 +18183 18184 18312 +18184 18313 18312 +18184 18185 18314 +18184 18314 18313 +18185 18186 18314 +18186 18315 18314 +18186 18187 18316 +18186 18316 18315 +18187 18188 18316 +18188 18317 18316 +18188 18189 18318 +18188 18318 18317 +18189 18190 18318 +18190 18319 18318 +18190 18191 18320 +18190 18320 18319 +18191 18192 18320 +18192 18321 18320 +18192 18193 18322 +18192 18322 18321 +18193 18194 18322 +18194 18323 18322 +18194 18195 18324 +18194 18324 18323 +18195 18196 18324 +18196 18325 18324 +18196 18197 18326 +18196 18326 18325 +18197 18198 18326 +18198 18327 18326 +18198 18199 18328 +18198 18328 18327 +18199 18200 18328 +18200 18329 18328 +18200 18201 18330 +18200 18330 18329 +18201 18202 18330 +18202 18331 18330 +18202 18203 18332 +18202 18332 18331 +18203 18204 18332 +18204 18333 18332 +18204 18205 18334 +18204 18334 18333 +18205 18206 18334 +18206 18335 18334 +18206 18207 18336 +18206 18336 18335 +18207 18208 18336 +18208 18337 18336 +18208 18209 18338 +18208 18338 18337 +18209 18210 18338 +18210 18339 18338 +18210 18211 18340 +18210 18340 18339 +18211 18212 18340 +18212 18341 18340 +18212 18213 18342 +18212 18342 18341 +18213 18214 18342 +18214 18343 18342 +18214 18215 18344 +18214 18344 18343 +18215 18216 18344 +18216 18345 18344 +18216 18217 18346 +18216 18346 18345 +18217 18218 18346 +18218 18347 18346 +18218 18219 18348 +18218 18348 18347 +18219 18220 18348 +18220 18349 18348 +18220 18221 18350 +18220 18350 18349 +18221 18222 18350 +18222 18351 18350 +18222 18223 18352 +18222 18352 18351 +18223 18224 18352 +18224 18353 18352 +18224 18225 18354 +18224 18354 18353 +18225 18226 18354 +18226 18355 18354 +18226 18227 18356 +18226 18356 18355 +18227 18228 18356 +18228 18357 18356 +18228 18229 18358 +18228 18358 18357 +18229 18230 18358 +18230 18359 18358 +18230 18231 18360 +18230 18360 18359 +18231 18232 18360 +18232 18361 18360 +18232 18233 18362 +18232 18362 18361 +18233 18234 18362 +18234 18363 18362 +18234 18235 18364 +18234 18364 18363 +18235 18236 18364 +18236 18365 18364 +18236 18237 18366 +18236 18366 18365 +18237 18238 18366 +18238 18367 18366 +18238 18239 18368 +18238 18368 18367 +18239 18240 18368 +18240 18369 18368 +18240 18241 18370 +18240 18370 18369 +18241 18242 18370 +18242 18371 18370 +18242 18243 18372 +18242 18372 18371 +18243 18244 18372 +18244 18373 18372 +18244 18245 18374 +18244 18374 18373 +18245 18246 18374 +18246 18375 18374 +18246 18247 18376 +18246 18376 18375 +18247 18248 18376 +18248 18377 18376 +18248 18249 18378 +18248 18378 18377 +18249 18250 18378 +18250 18379 18378 +18250 18251 18380 +18250 18380 18379 +18251 18252 18380 +18252 18381 18380 +18252 18253 18382 +18252 18382 18381 +18253 18254 18382 +18254 18383 18382 +18254 18255 18384 +18254 18384 18383 +18255 18256 18384 +18256 18385 18384 +18256 18257 18386 +18256 18386 18385 +18257 18258 18386 +18258 18387 18386 +18258 18259 18388 +18258 18388 18387 +18259 18260 18388 +18260 18389 18388 +18260 18261 18390 +18260 18390 18389 +18261 18262 18390 +18262 18391 18390 +18262 18263 18392 +18262 18392 18391 +18263 18264 18392 +18264 18393 18392 +18264 18265 18394 +18264 18394 18393 +18265 18266 18394 +18266 18395 18394 +18266 18267 18396 +18266 18396 18395 +18267 18268 18396 +18268 18397 18396 +18268 18269 18398 +18268 18398 18397 +18269 18270 18398 +18270 18399 18398 +18271 18272 18400 +18272 18401 18400 +18272 18273 18402 +18272 18402 18401 +18273 18274 18402 +18274 18403 18402 +18274 18275 18404 +18274 18404 18403 +18275 18276 18404 +18276 18405 18404 +18276 18277 18406 +18276 18406 18405 +18277 18278 18406 +18278 18407 18406 +18278 18279 18408 +18278 18408 18407 +18279 18280 18408 +18280 18409 18408 +18280 18281 18410 +18280 18410 18409 +18281 18282 18410 +18282 18411 18410 +18282 18283 18412 +18282 18412 18411 +18283 18284 18412 +18284 18413 18412 +18284 18285 18414 +18284 18414 18413 +18285 18286 18414 +18286 18415 18414 +18286 18287 18416 +18286 18416 18415 +18287 18288 18416 +18288 18417 18416 +18288 18289 18418 +18288 18418 18417 +18289 18290 18418 +18290 18419 18418 +18290 18291 18420 +18290 18420 18419 +18291 18292 18420 +18292 18421 18420 +18292 18293 18422 +18292 18422 18421 +18293 18294 18422 +18294 18423 18422 +18294 18295 18424 +18294 18424 18423 +18295 18296 18424 +18296 18425 18424 +18296 18297 18426 +18296 18426 18425 +18297 18298 18426 +18298 18427 18426 +18298 18299 18428 +18298 18428 18427 +18299 18300 18428 +18300 18429 18428 +18300 18301 18430 +18300 18430 18429 +18301 18302 18430 +18302 18431 18430 +18302 18303 18432 +18302 18432 18431 +18303 18304 18432 +18304 18433 18432 +18304 18305 18434 +18304 18434 18433 +18305 18306 18434 +18306 18435 18434 +18306 18307 18436 +18306 18436 18435 +18307 18308 18436 +18308 18437 18436 +18308 18309 18438 +18308 18438 18437 +18309 18310 18438 +18310 18439 18438 +18310 18311 18440 +18310 18440 18439 +18311 18312 18440 +18312 18441 18440 +18312 18313 18442 +18312 18442 18441 +18313 18314 18442 +18314 18443 18442 +18314 18315 18444 +18314 18444 18443 +18315 18316 18444 +18316 18445 18444 +18316 18317 18446 +18316 18446 18445 +18317 18318 18446 +18318 18447 18446 +18318 18319 18448 +18318 18448 18447 +18319 18320 18448 +18320 18449 18448 +18320 18321 18450 +18320 18450 18449 +18321 18322 18450 +18322 18451 18450 +18322 18323 18452 +18322 18452 18451 +18323 18324 18452 +18324 18453 18452 +18324 18325 18454 +18324 18454 18453 +18325 18326 18454 +18326 18455 18454 +18326 18327 18456 +18326 18456 18455 +18327 18328 18456 +18328 18457 18456 +18328 18329 18458 +18328 18458 18457 +18329 18330 18458 +18330 18459 18458 +18330 18331 18460 +18330 18460 18459 +18331 18332 18460 +18332 18461 18460 +18332 18333 18462 +18332 18462 18461 +18333 18334 18462 +18334 18463 18462 +18334 18335 18464 +18334 18464 18463 +18335 18336 18464 +18336 18465 18464 +18336 18337 18466 +18336 18466 18465 +18337 18338 18466 +18338 18467 18466 +18338 18339 18468 +18338 18468 18467 +18339 18340 18468 +18340 18469 18468 +18340 18341 18470 +18340 18470 18469 +18341 18342 18470 +18342 18471 18470 +18342 18343 18472 +18342 18472 18471 +18343 18344 18472 +18344 18473 18472 +18344 18345 18474 +18344 18474 18473 +18345 18346 18474 +18346 18475 18474 +18346 18347 18476 +18346 18476 18475 +18347 18348 18476 +18348 18477 18476 +18348 18349 18478 +18348 18478 18477 +18349 18350 18478 +18350 18479 18478 +18350 18351 18480 +18350 18480 18479 +18351 18352 18480 +18352 18481 18480 +18352 18353 18482 +18352 18482 18481 +18353 18354 18482 +18354 18483 18482 +18354 18355 18484 +18354 18484 18483 +18355 18356 18484 +18356 18485 18484 +18356 18357 18486 +18356 18486 18485 +18357 18358 18486 +18358 18487 18486 +18358 18359 18488 +18358 18488 18487 +18359 18360 18488 +18360 18489 18488 +18360 18361 18490 +18360 18490 18489 +18361 18362 18490 +18362 18491 18490 +18362 18363 18492 +18362 18492 18491 +18363 18364 18492 +18364 18493 18492 +18364 18365 18494 +18364 18494 18493 +18365 18366 18494 +18366 18495 18494 +18366 18367 18496 +18366 18496 18495 +18367 18368 18496 +18368 18497 18496 +18368 18369 18498 +18368 18498 18497 +18369 18370 18498 +18370 18499 18498 +18370 18371 18500 +18370 18500 18499 +18371 18372 18500 +18372 18501 18500 +18372 18373 18502 +18372 18502 18501 +18373 18374 18502 +18374 18503 18502 +18374 18375 18504 +18374 18504 18503 +18375 18376 18504 +18376 18505 18504 +18376 18377 18506 +18376 18506 18505 +18377 18378 18506 +18378 18507 18506 +18378 18379 18508 +18378 18508 18507 +18379 18380 18508 +18380 18509 18508 +18380 18381 18510 +18380 18510 18509 +18381 18382 18510 +18382 18511 18510 +18382 18383 18512 +18382 18512 18511 +18383 18384 18512 +18384 18513 18512 +18384 18385 18514 +18384 18514 18513 +18385 18386 18514 +18386 18515 18514 +18386 18387 18516 +18386 18516 18515 +18387 18388 18516 +18388 18517 18516 +18388 18389 18518 +18388 18518 18517 +18389 18390 18518 +18390 18519 18518 +18390 18391 18520 +18390 18520 18519 +18391 18392 18520 +18392 18521 18520 +18392 18393 18522 +18392 18522 18521 +18393 18394 18522 +18394 18523 18522 +18394 18395 18524 +18394 18524 18523 +18395 18396 18524 +18396 18525 18524 +18396 18397 18526 +18396 18526 18525 +18397 18398 18526 +18398 18527 18526 +18398 18399 18528 +18398 18528 18527 +18400 18401 18530 +18400 18530 18529 +18401 18402 18530 +18402 18531 18530 +18402 18403 18532 +18402 18532 18531 +18403 18404 18532 +18404 18533 18532 +18404 18405 18534 +18404 18534 18533 +18405 18406 18534 +18406 18535 18534 +18406 18407 18536 +18406 18536 18535 +18407 18408 18536 +18408 18537 18536 +18408 18409 18538 +18408 18538 18537 +18409 18410 18538 +18410 18539 18538 +18410 18411 18540 +18410 18540 18539 +18411 18412 18540 +18412 18541 18540 +18412 18413 18542 +18412 18542 18541 +18413 18414 18542 +18414 18543 18542 +18414 18415 18544 +18414 18544 18543 +18415 18416 18544 +18416 18545 18544 +18416 18417 18546 +18416 18546 18545 +18417 18418 18546 +18418 18547 18546 +18418 18419 18548 +18418 18548 18547 +18419 18420 18548 +18420 18549 18548 +18420 18421 18550 +18420 18550 18549 +18421 18422 18550 +18422 18551 18550 +18422 18423 18552 +18422 18552 18551 +18423 18424 18552 +18424 18553 18552 +18424 18425 18554 +18424 18554 18553 +18425 18426 18554 +18426 18555 18554 +18426 18427 18556 +18426 18556 18555 +18427 18428 18556 +18428 18557 18556 +18428 18429 18558 +18428 18558 18557 +18429 18430 18558 +18430 18559 18558 +18430 18431 18560 +18430 18560 18559 +18431 18432 18560 +18432 18561 18560 +18432 18433 18562 +18432 18562 18561 +18433 18434 18562 +18434 18563 18562 +18434 18435 18564 +18434 18564 18563 +18435 18436 18564 +18436 18565 18564 +18436 18437 18566 +18436 18566 18565 +18437 18438 18566 +18438 18567 18566 +18438 18439 18568 +18438 18568 18567 +18439 18440 18568 +18440 18569 18568 +18440 18441 18570 +18440 18570 18569 +18441 18442 18570 +18442 18571 18570 +18442 18443 18572 +18442 18572 18571 +18443 18444 18572 +18444 18573 18572 +18444 18445 18574 +18444 18574 18573 +18445 18446 18574 +18446 18575 18574 +18446 18447 18576 +18446 18576 18575 +18447 18448 18576 +18448 18577 18576 +18448 18449 18578 +18448 18578 18577 +18449 18450 18578 +18450 18579 18578 +18450 18451 18580 +18450 18580 18579 +18451 18452 18580 +18452 18581 18580 +18452 18453 18582 +18452 18582 18581 +18453 18454 18582 +18454 18583 18582 +18454 18455 18584 +18454 18584 18583 +18455 18456 18584 +18456 18585 18584 +18456 18457 18586 +18456 18586 18585 +18457 18458 18586 +18458 18587 18586 +18458 18459 18588 +18458 18588 18587 +18459 18460 18588 +18460 18589 18588 +18460 18461 18590 +18460 18590 18589 +18461 18462 18590 +18462 18591 18590 +18462 18463 18592 +18462 18592 18591 +18463 18464 18592 +18464 18593 18592 +18464 18465 18594 +18464 18594 18593 +18465 18466 18594 +18466 18595 18594 +18466 18467 18596 +18466 18596 18595 +18467 18468 18596 +18468 18597 18596 +18468 18469 18598 +18468 18598 18597 +18469 18470 18598 +18470 18599 18598 +18470 18471 18600 +18470 18600 18599 +18471 18472 18600 +18472 18601 18600 +18472 18473 18602 +18472 18602 18601 +18473 18474 18602 +18474 18603 18602 +18474 18475 18604 +18474 18604 18603 +18475 18476 18604 +18476 18605 18604 +18476 18477 18606 +18476 18606 18605 +18477 18478 18606 +18478 18607 18606 +18478 18479 18608 +18478 18608 18607 +18479 18480 18608 +18480 18609 18608 +18480 18481 18610 +18480 18610 18609 +18481 18482 18610 +18482 18611 18610 +18482 18483 18612 +18482 18612 18611 +18483 18484 18612 +18484 18613 18612 +18484 18485 18614 +18484 18614 18613 +18485 18486 18614 +18486 18615 18614 +18486 18487 18616 +18486 18616 18615 +18487 18488 18616 +18488 18617 18616 +18488 18489 18618 +18488 18618 18617 +18489 18490 18618 +18490 18619 18618 +18490 18491 18620 +18490 18620 18619 +18491 18492 18620 +18492 18621 18620 +18492 18493 18622 +18492 18622 18621 +18493 18494 18622 +18494 18623 18622 +18494 18495 18624 +18494 18624 18623 +18495 18496 18624 +18496 18625 18624 +18496 18497 18626 +18496 18626 18625 +18497 18498 18626 +18498 18627 18626 +18498 18499 18628 +18498 18628 18627 +18499 18500 18628 +18500 18629 18628 +18500 18501 18630 +18500 18630 18629 +18501 18502 18630 +18502 18631 18630 +18502 18503 18632 +18502 18632 18631 +18503 18504 18632 +18504 18633 18632 +18504 18505 18634 +18504 18634 18633 +18505 18506 18634 +18506 18635 18634 +18506 18507 18636 +18506 18636 18635 +18507 18508 18636 +18508 18637 18636 +18508 18509 18638 +18508 18638 18637 +18509 18510 18638 +18510 18639 18638 +18510 18511 18640 +18510 18640 18639 +18511 18512 18640 +18512 18641 18640 +18512 18513 18642 +18512 18642 18641 +18513 18514 18642 +18514 18643 18642 +18514 18515 18644 +18514 18644 18643 +18515 18516 18644 +18516 18645 18644 +18516 18517 18646 +18516 18646 18645 +18517 18518 18646 +18518 18647 18646 +18518 18519 18648 +18518 18648 18647 +18519 18520 18648 +18520 18649 18648 +18520 18521 18650 +18520 18650 18649 +18521 18522 18650 +18522 18651 18650 +18522 18523 18652 +18522 18652 18651 +18523 18524 18652 +18524 18653 18652 +18524 18525 18654 +18524 18654 18653 +18525 18526 18654 +18526 18655 18654 +18526 18527 18656 +18526 18656 18655 +18527 18528 18656 +18528 18657 18656 +18529 18530 18658 +18530 18659 18658 +18530 18531 18660 +18530 18660 18659 +18531 18532 18660 +18532 18661 18660 +18532 18533 18662 +18532 18662 18661 +18533 18534 18662 +18534 18663 18662 +18534 18535 18664 +18534 18664 18663 +18535 18536 18664 +18536 18665 18664 +18536 18537 18666 +18536 18666 18665 +18537 18538 18666 +18538 18667 18666 +18538 18539 18668 +18538 18668 18667 +18539 18540 18668 +18540 18669 18668 +18540 18541 18670 +18540 18670 18669 +18541 18542 18670 +18542 18671 18670 +18542 18543 18672 +18542 18672 18671 +18543 18544 18672 +18544 18673 18672 +18544 18545 18674 +18544 18674 18673 +18545 18546 18674 +18546 18675 18674 +18546 18547 18676 +18546 18676 18675 +18547 18548 18676 +18548 18677 18676 +18548 18549 18678 +18548 18678 18677 +18549 18550 18678 +18550 18679 18678 +18550 18551 18680 +18550 18680 18679 +18551 18552 18680 +18552 18681 18680 +18552 18553 18682 +18552 18682 18681 +18553 18554 18682 +18554 18683 18682 +18554 18555 18684 +18554 18684 18683 +18555 18556 18684 +18556 18685 18684 +18556 18557 18686 +18556 18686 18685 +18557 18558 18686 +18558 18687 18686 +18558 18559 18688 +18558 18688 18687 +18559 18560 18688 +18560 18689 18688 +18560 18561 18690 +18560 18690 18689 +18561 18562 18690 +18562 18691 18690 +18562 18563 18692 +18562 18692 18691 +18563 18564 18692 +18564 18693 18692 +18564 18565 18694 +18564 18694 18693 +18565 18566 18694 +18566 18695 18694 +18566 18567 18696 +18566 18696 18695 +18567 18568 18696 +18568 18697 18696 +18568 18569 18698 +18568 18698 18697 +18569 18570 18698 +18570 18699 18698 +18570 18571 18700 +18570 18700 18699 +18571 18572 18700 +18572 18701 18700 +18572 18573 18702 +18572 18702 18701 +18573 18574 18702 +18574 18703 18702 +18574 18575 18704 +18574 18704 18703 +18575 18576 18704 +18576 18705 18704 +18576 18577 18706 +18576 18706 18705 +18577 18578 18706 +18578 18707 18706 +18578 18579 18708 +18578 18708 18707 +18579 18580 18708 +18580 18709 18708 +18580 18581 18710 +18580 18710 18709 +18581 18582 18710 +18582 18711 18710 +18582 18583 18712 +18582 18712 18711 +18583 18584 18712 +18584 18713 18712 +18584 18585 18714 +18584 18714 18713 +18585 18586 18714 +18586 18715 18714 +18586 18587 18716 +18586 18716 18715 +18587 18588 18716 +18588 18717 18716 +18588 18589 18718 +18588 18718 18717 +18589 18590 18718 +18590 18719 18718 +18590 18591 18720 +18590 18720 18719 +18591 18592 18720 +18592 18721 18720 +18592 18593 18722 +18592 18722 18721 +18593 18594 18722 +18594 18723 18722 +18594 18595 18724 +18594 18724 18723 +18595 18596 18724 +18596 18725 18724 +18596 18597 18726 +18596 18726 18725 +18597 18598 18726 +18598 18727 18726 +18598 18599 18728 +18598 18728 18727 +18599 18600 18728 +18600 18729 18728 +18600 18601 18730 +18600 18730 18729 +18601 18602 18730 +18602 18731 18730 +18602 18603 18732 +18602 18732 18731 +18603 18604 18732 +18604 18733 18732 +18604 18605 18734 +18604 18734 18733 +18605 18606 18734 +18606 18735 18734 +18606 18607 18736 +18606 18736 18735 +18607 18608 18736 +18608 18737 18736 +18608 18609 18738 +18608 18738 18737 +18609 18610 18738 +18610 18739 18738 +18610 18611 18740 +18610 18740 18739 +18611 18612 18740 +18612 18741 18740 +18612 18613 18742 +18612 18742 18741 +18613 18614 18742 +18614 18743 18742 +18614 18615 18744 +18614 18744 18743 +18615 18616 18744 +18616 18745 18744 +18616 18617 18746 +18616 18746 18745 +18617 18618 18746 +18618 18747 18746 +18618 18619 18748 +18618 18748 18747 +18619 18620 18748 +18620 18749 18748 +18620 18621 18750 +18620 18750 18749 +18621 18622 18750 +18622 18751 18750 +18622 18623 18752 +18622 18752 18751 +18623 18624 18752 +18624 18753 18752 +18624 18625 18754 +18624 18754 18753 +18625 18626 18754 +18626 18755 18754 +18626 18627 18756 +18626 18756 18755 +18627 18628 18756 +18628 18757 18756 +18628 18629 18758 +18628 18758 18757 +18629 18630 18758 +18630 18759 18758 +18630 18631 18760 +18630 18760 18759 +18631 18632 18760 +18632 18761 18760 +18632 18633 18762 +18632 18762 18761 +18633 18634 18762 +18634 18763 18762 +18634 18635 18764 +18634 18764 18763 +18635 18636 18764 +18636 18765 18764 +18636 18637 18766 +18636 18766 18765 +18637 18638 18766 +18638 18767 18766 +18638 18639 18768 +18638 18768 18767 +18639 18640 18768 +18640 18769 18768 +18640 18641 18770 +18640 18770 18769 +18641 18642 18770 +18642 18771 18770 +18642 18643 18772 +18642 18772 18771 +18643 18644 18772 +18644 18773 18772 +18644 18645 18774 +18644 18774 18773 +18645 18646 18774 +18646 18775 18774 +18646 18647 18776 +18646 18776 18775 +18647 18648 18776 +18648 18777 18776 +18648 18649 18778 +18648 18778 18777 +18649 18650 18778 +18650 18779 18778 +18650 18651 18780 +18650 18780 18779 +18651 18652 18780 +18652 18781 18780 +18652 18653 18782 +18652 18782 18781 +18653 18654 18782 +18654 18783 18782 +18654 18655 18784 +18654 18784 18783 +18655 18656 18784 +18656 18785 18784 +18656 18657 18786 +18656 18786 18785 +18658 18659 18788 +18658 18788 18787 +18659 18660 18788 +18660 18789 18788 +18660 18661 18790 +18660 18790 18789 +18661 18662 18790 +18662 18791 18790 +18662 18663 18792 +18662 18792 18791 +18663 18664 18792 +18664 18793 18792 +18664 18665 18794 +18664 18794 18793 +18665 18666 18794 +18666 18795 18794 +18666 18667 18796 +18666 18796 18795 +18667 18668 18796 +18668 18797 18796 +18668 18669 18798 +18668 18798 18797 +18669 18670 18798 +18670 18799 18798 +18670 18671 18800 +18670 18800 18799 +18671 18672 18800 +18672 18801 18800 +18672 18673 18802 +18672 18802 18801 +18673 18674 18802 +18674 18803 18802 +18674 18675 18804 +18674 18804 18803 +18675 18676 18804 +18676 18805 18804 +18676 18677 18806 +18676 18806 18805 +18677 18678 18806 +18678 18807 18806 +18678 18679 18808 +18678 18808 18807 +18679 18680 18808 +18680 18809 18808 +18680 18681 18810 +18680 18810 18809 +18681 18682 18810 +18682 18811 18810 +18682 18683 18812 +18682 18812 18811 +18683 18684 18812 +18684 18813 18812 +18684 18685 18814 +18684 18814 18813 +18685 18686 18814 +18686 18815 18814 +18686 18687 18816 +18686 18816 18815 +18687 18688 18816 +18688 18817 18816 +18688 18689 18818 +18688 18818 18817 +18689 18690 18818 +18690 18819 18818 +18690 18691 18820 +18690 18820 18819 +18691 18692 18820 +18692 18821 18820 +18692 18693 18822 +18692 18822 18821 +18693 18694 18822 +18694 18823 18822 +18694 18695 18824 +18694 18824 18823 +18695 18696 18824 +18696 18825 18824 +18696 18697 18826 +18696 18826 18825 +18697 18698 18826 +18698 18827 18826 +18698 18699 18828 +18698 18828 18827 +18699 18700 18828 +18700 18829 18828 +18700 18701 18830 +18700 18830 18829 +18701 18702 18830 +18702 18831 18830 +18702 18703 18832 +18702 18832 18831 +18703 18704 18832 +18704 18833 18832 +18704 18705 18834 +18704 18834 18833 +18705 18706 18834 +18706 18835 18834 +18706 18707 18836 +18706 18836 18835 +18707 18708 18836 +18708 18837 18836 +18708 18709 18838 +18708 18838 18837 +18709 18710 18838 +18710 18839 18838 +18710 18711 18840 +18710 18840 18839 +18711 18712 18840 +18712 18841 18840 +18712 18713 18842 +18712 18842 18841 +18713 18714 18842 +18714 18843 18842 +18714 18715 18844 +18714 18844 18843 +18715 18716 18844 +18716 18845 18844 +18716 18717 18846 +18716 18846 18845 +18717 18718 18846 +18718 18847 18846 +18718 18719 18848 +18718 18848 18847 +18719 18720 18848 +18720 18849 18848 +18720 18721 18850 +18720 18850 18849 +18721 18722 18850 +18722 18851 18850 +18722 18723 18852 +18722 18852 18851 +18723 18724 18852 +18724 18853 18852 +18724 18725 18854 +18724 18854 18853 +18725 18726 18854 +18726 18855 18854 +18726 18727 18856 +18726 18856 18855 +18727 18728 18856 +18728 18857 18856 +18728 18729 18858 +18728 18858 18857 +18729 18730 18858 +18730 18859 18858 +18730 18731 18860 +18730 18860 18859 +18731 18732 18860 +18732 18861 18860 +18732 18733 18862 +18732 18862 18861 +18733 18734 18862 +18734 18863 18862 +18734 18735 18864 +18734 18864 18863 +18735 18736 18864 +18736 18865 18864 +18736 18737 18866 +18736 18866 18865 +18737 18738 18866 +18738 18867 18866 +18738 18739 18868 +18738 18868 18867 +18739 18740 18868 +18740 18869 18868 +18740 18741 18870 +18740 18870 18869 +18741 18742 18870 +18742 18871 18870 +18742 18743 18872 +18742 18872 18871 +18743 18744 18872 +18744 18873 18872 +18744 18745 18874 +18744 18874 18873 +18745 18746 18874 +18746 18875 18874 +18746 18747 18876 +18746 18876 18875 +18747 18748 18876 +18748 18877 18876 +18748 18749 18878 +18748 18878 18877 +18749 18750 18878 +18750 18879 18878 +18750 18751 18880 +18750 18880 18879 +18751 18752 18880 +18752 18881 18880 +18752 18753 18882 +18752 18882 18881 +18753 18754 18882 +18754 18883 18882 +18754 18755 18884 +18754 18884 18883 +18755 18756 18884 +18756 18885 18884 +18756 18757 18886 +18756 18886 18885 +18757 18758 18886 +18758 18887 18886 +18758 18759 18888 +18758 18888 18887 +18759 18760 18888 +18760 18889 18888 +18760 18761 18890 +18760 18890 18889 +18761 18762 18890 +18762 18891 18890 +18762 18763 18892 +18762 18892 18891 +18763 18764 18892 +18764 18893 18892 +18764 18765 18894 +18764 18894 18893 +18765 18766 18894 +18766 18895 18894 +18766 18767 18896 +18766 18896 18895 +18767 18768 18896 +18768 18897 18896 +18768 18769 18898 +18768 18898 18897 +18769 18770 18898 +18770 18899 18898 +18770 18771 18900 +18770 18900 18899 +18771 18772 18900 +18772 18901 18900 +18772 18773 18902 +18772 18902 18901 +18773 18774 18902 +18774 18903 18902 +18774 18775 18904 +18774 18904 18903 +18775 18776 18904 +18776 18905 18904 +18776 18777 18906 +18776 18906 18905 +18777 18778 18906 +18778 18907 18906 +18778 18779 18908 +18778 18908 18907 +18779 18780 18908 +18780 18909 18908 +18780 18781 18910 +18780 18910 18909 +18781 18782 18910 +18782 18911 18910 +18782 18783 18912 +18782 18912 18911 +18783 18784 18912 +18784 18913 18912 +18784 18785 18914 +18784 18914 18913 +18785 18786 18914 +18786 18915 18914 +18787 18788 18916 +18788 18917 18916 +18788 18789 18918 +18788 18918 18917 +18789 18790 18918 +18790 18919 18918 +18790 18791 18920 +18790 18920 18919 +18791 18792 18920 +18792 18921 18920 +18792 18793 18922 +18792 18922 18921 +18793 18794 18922 +18794 18923 18922 +18794 18795 18924 +18794 18924 18923 +18795 18796 18924 +18796 18925 18924 +18796 18797 18926 +18796 18926 18925 +18797 18798 18926 +18798 18927 18926 +18798 18799 18928 +18798 18928 18927 +18799 18800 18928 +18800 18929 18928 +18800 18801 18930 +18800 18930 18929 +18801 18802 18930 +18802 18931 18930 +18802 18803 18932 +18802 18932 18931 +18803 18804 18932 +18804 18933 18932 +18804 18805 18934 +18804 18934 18933 +18805 18806 18934 +18806 18935 18934 +18806 18807 18936 +18806 18936 18935 +18807 18808 18936 +18808 18937 18936 +18808 18809 18938 +18808 18938 18937 +18809 18810 18938 +18810 18939 18938 +18810 18811 18940 +18810 18940 18939 +18811 18812 18940 +18812 18941 18940 +18812 18813 18942 +18812 18942 18941 +18813 18814 18942 +18814 18943 18942 +18814 18815 18944 +18814 18944 18943 +18815 18816 18944 +18816 18945 18944 +18816 18817 18946 +18816 18946 18945 +18817 18818 18946 +18818 18947 18946 +18818 18819 18948 +18818 18948 18947 +18819 18820 18948 +18820 18949 18948 +18820 18821 18950 +18820 18950 18949 +18821 18822 18950 +18822 18951 18950 +18822 18823 18952 +18822 18952 18951 +18823 18824 18952 +18824 18953 18952 +18824 18825 18954 +18824 18954 18953 +18825 18826 18954 +18826 18955 18954 +18826 18827 18956 +18826 18956 18955 +18827 18828 18956 +18828 18957 18956 +18828 18829 18958 +18828 18958 18957 +18829 18830 18958 +18830 18959 18958 +18830 18831 18960 +18830 18960 18959 +18831 18832 18960 +18832 18961 18960 +18832 18833 18962 +18832 18962 18961 +18833 18834 18962 +18834 18963 18962 +18834 18835 18964 +18834 18964 18963 +18835 18836 18964 +18836 18965 18964 +18836 18837 18966 +18836 18966 18965 +18837 18838 18966 +18838 18967 18966 +18838 18839 18968 +18838 18968 18967 +18839 18840 18968 +18840 18969 18968 +18840 18841 18970 +18840 18970 18969 +18841 18842 18970 +18842 18971 18970 +18842 18843 18972 +18842 18972 18971 +18843 18844 18972 +18844 18973 18972 +18844 18845 18974 +18844 18974 18973 +18845 18846 18974 +18846 18975 18974 +18846 18847 18976 +18846 18976 18975 +18847 18848 18976 +18848 18977 18976 +18848 18849 18978 +18848 18978 18977 +18849 18850 18978 +18850 18979 18978 +18850 18851 18980 +18850 18980 18979 +18851 18852 18980 +18852 18981 18980 +18852 18853 18982 +18852 18982 18981 +18853 18854 18982 +18854 18983 18982 +18854 18855 18984 +18854 18984 18983 +18855 18856 18984 +18856 18985 18984 +18856 18857 18986 +18856 18986 18985 +18857 18858 18986 +18858 18987 18986 +18858 18859 18988 +18858 18988 18987 +18859 18860 18988 +18860 18989 18988 +18860 18861 18990 +18860 18990 18989 +18861 18862 18990 +18862 18991 18990 +18862 18863 18992 +18862 18992 18991 +18863 18864 18992 +18864 18993 18992 +18864 18865 18994 +18864 18994 18993 +18865 18866 18994 +18866 18995 18994 +18866 18867 18996 +18866 18996 18995 +18867 18868 18996 +18868 18997 18996 +18868 18869 18998 +18868 18998 18997 +18869 18870 18998 +18870 18999 18998 +18870 18871 19000 +18870 19000 18999 +18871 18872 19000 +18872 19001 19000 +18872 18873 19002 +18872 19002 19001 +18873 18874 19002 +18874 19003 19002 +18874 18875 19004 +18874 19004 19003 +18875 18876 19004 +18876 19005 19004 +18876 18877 19006 +18876 19006 19005 +18877 18878 19006 +18878 19007 19006 +18878 18879 19008 +18878 19008 19007 +18879 18880 19008 +18880 19009 19008 +18880 18881 19010 +18880 19010 19009 +18881 18882 19010 +18882 19011 19010 +18882 18883 19012 +18882 19012 19011 +18883 18884 19012 +18884 19013 19012 +18884 18885 19014 +18884 19014 19013 +18885 18886 19014 +18886 19015 19014 +18886 18887 19016 +18886 19016 19015 +18887 18888 19016 +18888 19017 19016 +18888 18889 19018 +18888 19018 19017 +18889 18890 19018 +18890 19019 19018 +18890 18891 19020 +18890 19020 19019 +18891 18892 19020 +18892 19021 19020 +18892 18893 19022 +18892 19022 19021 +18893 18894 19022 +18894 19023 19022 +18894 18895 19024 +18894 19024 19023 +18895 18896 19024 +18896 19025 19024 +18896 18897 19026 +18896 19026 19025 +18897 18898 19026 +18898 19027 19026 +18898 18899 19028 +18898 19028 19027 +18899 18900 19028 +18900 19029 19028 +18900 18901 19030 +18900 19030 19029 +18901 18902 19030 +18902 19031 19030 +18902 18903 19032 +18902 19032 19031 +18903 18904 19032 +18904 19033 19032 +18904 18905 19034 +18904 19034 19033 +18905 18906 19034 +18906 19035 19034 +18906 18907 19036 +18906 19036 19035 +18907 18908 19036 +18908 19037 19036 +18908 18909 19038 +18908 19038 19037 +18909 18910 19038 +18910 19039 19038 +18910 18911 19040 +18910 19040 19039 +18911 18912 19040 +18912 19041 19040 +18912 18913 19042 +18912 19042 19041 +18913 18914 19042 +18914 19043 19042 +18914 18915 19044 +18914 19044 19043 +18916 18917 19046 +18916 19046 19045 +18917 18918 19046 +18918 19047 19046 +18918 18919 19048 +18918 19048 19047 +18919 18920 19048 +18920 19049 19048 +18920 18921 19050 +18920 19050 19049 +18921 18922 19050 +18922 19051 19050 +18922 18923 19052 +18922 19052 19051 +18923 18924 19052 +18924 19053 19052 +18924 18925 19054 +18924 19054 19053 +18925 18926 19054 +18926 19055 19054 +18926 18927 19056 +18926 19056 19055 +18927 18928 19056 +18928 19057 19056 +18928 18929 19058 +18928 19058 19057 +18929 18930 19058 +18930 19059 19058 +18930 18931 19060 +18930 19060 19059 +18931 18932 19060 +18932 19061 19060 +18932 18933 19062 +18932 19062 19061 +18933 18934 19062 +18934 19063 19062 +18934 18935 19064 +18934 19064 19063 +18935 18936 19064 +18936 19065 19064 +18936 18937 19066 +18936 19066 19065 +18937 18938 19066 +18938 19067 19066 +18938 18939 19068 +18938 19068 19067 +18939 18940 19068 +18940 19069 19068 +18940 18941 19070 +18940 19070 19069 +18941 18942 19070 +18942 19071 19070 +18942 18943 19072 +18942 19072 19071 +18943 18944 19072 +18944 19073 19072 +18944 18945 19074 +18944 19074 19073 +18945 18946 19074 +18946 19075 19074 +18946 18947 19076 +18946 19076 19075 +18947 18948 19076 +18948 19077 19076 +18948 18949 19078 +18948 19078 19077 +18949 18950 19078 +18950 19079 19078 +18950 18951 19080 +18950 19080 19079 +18951 18952 19080 +18952 19081 19080 +18952 18953 19082 +18952 19082 19081 +18953 18954 19082 +18954 19083 19082 +18954 18955 19084 +18954 19084 19083 +18955 18956 19084 +18956 19085 19084 +18956 18957 19086 +18956 19086 19085 +18957 18958 19086 +18958 19087 19086 +18958 18959 19088 +18958 19088 19087 +18959 18960 19088 +18960 19089 19088 +18960 18961 19090 +18960 19090 19089 +18961 18962 19090 +18962 19091 19090 +18962 18963 19092 +18962 19092 19091 +18963 18964 19092 +18964 19093 19092 +18964 18965 19094 +18964 19094 19093 +18965 18966 19094 +18966 19095 19094 +18966 18967 19096 +18966 19096 19095 +18967 18968 19096 +18968 19097 19096 +18968 18969 19098 +18968 19098 19097 +18969 18970 19098 +18970 19099 19098 +18970 18971 19100 +18970 19100 19099 +18971 18972 19100 +18972 19101 19100 +18972 18973 19102 +18972 19102 19101 +18973 18974 19102 +18974 19103 19102 +18974 18975 19104 +18974 19104 19103 +18975 18976 19104 +18976 19105 19104 +18976 18977 19106 +18976 19106 19105 +18977 18978 19106 +18978 19107 19106 +18978 18979 19108 +18978 19108 19107 +18979 18980 19108 +18980 19109 19108 +18980 18981 19110 +18980 19110 19109 +18981 18982 19110 +18982 19111 19110 +18982 18983 19112 +18982 19112 19111 +18983 18984 19112 +18984 19113 19112 +18984 18985 19114 +18984 19114 19113 +18985 18986 19114 +18986 19115 19114 +18986 18987 19116 +18986 19116 19115 +18987 18988 19116 +18988 19117 19116 +18988 18989 19118 +18988 19118 19117 +18989 18990 19118 +18990 19119 19118 +18990 18991 19120 +18990 19120 19119 +18991 18992 19120 +18992 19121 19120 +18992 18993 19122 +18992 19122 19121 +18993 18994 19122 +18994 19123 19122 +18994 18995 19124 +18994 19124 19123 +18995 18996 19124 +18996 19125 19124 +18996 18997 19126 +18996 19126 19125 +18997 18998 19126 +18998 19127 19126 +18998 18999 19128 +18998 19128 19127 +18999 19000 19128 +19000 19129 19128 +19000 19001 19130 +19000 19130 19129 +19001 19002 19130 +19002 19131 19130 +19002 19003 19132 +19002 19132 19131 +19003 19004 19132 +19004 19133 19132 +19004 19005 19134 +19004 19134 19133 +19005 19006 19134 +19006 19135 19134 +19006 19007 19136 +19006 19136 19135 +19007 19008 19136 +19008 19137 19136 +19008 19009 19138 +19008 19138 19137 +19009 19010 19138 +19010 19139 19138 +19010 19011 19140 +19010 19140 19139 +19011 19012 19140 +19012 19141 19140 +19012 19013 19142 +19012 19142 19141 +19013 19014 19142 +19014 19143 19142 +19014 19015 19144 +19014 19144 19143 +19015 19016 19144 +19016 19145 19144 +19016 19017 19146 +19016 19146 19145 +19017 19018 19146 +19018 19147 19146 +19018 19019 19148 +19018 19148 19147 +19019 19020 19148 +19020 19149 19148 +19020 19021 19150 +19020 19150 19149 +19021 19022 19150 +19022 19151 19150 +19022 19023 19152 +19022 19152 19151 +19023 19024 19152 +19024 19153 19152 +19024 19025 19154 +19024 19154 19153 +19025 19026 19154 +19026 19155 19154 +19026 19027 19156 +19026 19156 19155 +19027 19028 19156 +19028 19157 19156 +19028 19029 19158 +19028 19158 19157 +19029 19030 19158 +19030 19159 19158 +19030 19031 19160 +19030 19160 19159 +19031 19032 19160 +19032 19161 19160 +19032 19033 19162 +19032 19162 19161 +19033 19034 19162 +19034 19163 19162 +19034 19035 19164 +19034 19164 19163 +19035 19036 19164 +19036 19165 19164 +19036 19037 19166 +19036 19166 19165 +19037 19038 19166 +19038 19167 19166 +19038 19039 19168 +19038 19168 19167 +19039 19040 19168 +19040 19169 19168 +19040 19041 19170 +19040 19170 19169 +19041 19042 19170 +19042 19171 19170 +19042 19043 19172 +19042 19172 19171 +19043 19044 19172 +19044 19173 19172 +19045 19046 19174 +19046 19175 19174 +19046 19047 19176 +19046 19176 19175 +19047 19048 19176 +19048 19177 19176 +19048 19049 19178 +19048 19178 19177 +19049 19050 19178 +19050 19179 19178 +19050 19051 19180 +19050 19180 19179 +19051 19052 19180 +19052 19181 19180 +19052 19053 19182 +19052 19182 19181 +19053 19054 19182 +19054 19183 19182 +19054 19055 19184 +19054 19184 19183 +19055 19056 19184 +19056 19185 19184 +19056 19057 19186 +19056 19186 19185 +19057 19058 19186 +19058 19187 19186 +19058 19059 19188 +19058 19188 19187 +19059 19060 19188 +19060 19189 19188 +19060 19061 19190 +19060 19190 19189 +19061 19062 19190 +19062 19191 19190 +19062 19063 19192 +19062 19192 19191 +19063 19064 19192 +19064 19193 19192 +19064 19065 19194 +19064 19194 19193 +19065 19066 19194 +19066 19195 19194 +19066 19067 19196 +19066 19196 19195 +19067 19068 19196 +19068 19197 19196 +19068 19069 19198 +19068 19198 19197 +19069 19070 19198 +19070 19199 19198 +19070 19071 19200 +19070 19200 19199 +19071 19072 19200 +19072 19201 19200 +19072 19073 19202 +19072 19202 19201 +19073 19074 19202 +19074 19203 19202 +19074 19075 19204 +19074 19204 19203 +19075 19076 19204 +19076 19205 19204 +19076 19077 19206 +19076 19206 19205 +19077 19078 19206 +19078 19207 19206 +19078 19079 19208 +19078 19208 19207 +19079 19080 19208 +19080 19209 19208 +19080 19081 19210 +19080 19210 19209 +19081 19082 19210 +19082 19211 19210 +19082 19083 19212 +19082 19212 19211 +19083 19084 19212 +19084 19213 19212 +19084 19085 19214 +19084 19214 19213 +19085 19086 19214 +19086 19215 19214 +19086 19087 19216 +19086 19216 19215 +19087 19088 19216 +19088 19217 19216 +19088 19089 19218 +19088 19218 19217 +19089 19090 19218 +19090 19219 19218 +19090 19091 19220 +19090 19220 19219 +19091 19092 19220 +19092 19221 19220 +19092 19093 19222 +19092 19222 19221 +19093 19094 19222 +19094 19223 19222 +19094 19095 19224 +19094 19224 19223 +19095 19096 19224 +19096 19225 19224 +19096 19097 19226 +19096 19226 19225 +19097 19098 19226 +19098 19227 19226 +19098 19099 19228 +19098 19228 19227 +19099 19100 19228 +19100 19229 19228 +19100 19101 19230 +19100 19230 19229 +19101 19102 19230 +19102 19231 19230 +19102 19103 19232 +19102 19232 19231 +19103 19104 19232 +19104 19233 19232 +19104 19105 19234 +19104 19234 19233 +19105 19106 19234 +19106 19235 19234 +19106 19107 19236 +19106 19236 19235 +19107 19108 19236 +19108 19237 19236 +19108 19109 19238 +19108 19238 19237 +19109 19110 19238 +19110 19239 19238 +19110 19111 19240 +19110 19240 19239 +19111 19112 19240 +19112 19241 19240 +19112 19113 19242 +19112 19242 19241 +19113 19114 19242 +19114 19243 19242 +19114 19115 19244 +19114 19244 19243 +19115 19116 19244 +19116 19245 19244 +19116 19117 19246 +19116 19246 19245 +19117 19118 19246 +19118 19247 19246 +19118 19119 19248 +19118 19248 19247 +19119 19120 19248 +19120 19249 19248 +19120 19121 19250 +19120 19250 19249 +19121 19122 19250 +19122 19251 19250 +19122 19123 19252 +19122 19252 19251 +19123 19124 19252 +19124 19253 19252 +19124 19125 19254 +19124 19254 19253 +19125 19126 19254 +19126 19255 19254 +19126 19127 19256 +19126 19256 19255 +19127 19128 19256 +19128 19257 19256 +19128 19129 19258 +19128 19258 19257 +19129 19130 19258 +19130 19259 19258 +19130 19131 19260 +19130 19260 19259 +19131 19132 19260 +19132 19261 19260 +19132 19133 19262 +19132 19262 19261 +19133 19134 19262 +19134 19263 19262 +19134 19135 19264 +19134 19264 19263 +19135 19136 19264 +19136 19265 19264 +19136 19137 19266 +19136 19266 19265 +19137 19138 19266 +19138 19267 19266 +19138 19139 19268 +19138 19268 19267 +19139 19140 19268 +19140 19269 19268 +19140 19141 19270 +19140 19270 19269 +19141 19142 19270 +19142 19271 19270 +19142 19143 19272 +19142 19272 19271 +19143 19144 19272 +19144 19273 19272 +19144 19145 19274 +19144 19274 19273 +19145 19146 19274 +19146 19275 19274 +19146 19147 19276 +19146 19276 19275 +19147 19148 19276 +19148 19277 19276 +19148 19149 19278 +19148 19278 19277 +19149 19150 19278 +19150 19279 19278 +19150 19151 19280 +19150 19280 19279 +19151 19152 19280 +19152 19281 19280 +19152 19153 19282 +19152 19282 19281 +19153 19154 19282 +19154 19283 19282 +19154 19155 19284 +19154 19284 19283 +19155 19156 19284 +19156 19285 19284 +19156 19157 19286 +19156 19286 19285 +19157 19158 19286 +19158 19287 19286 +19158 19159 19288 +19158 19288 19287 +19159 19160 19288 +19160 19289 19288 +19160 19161 19290 +19160 19290 19289 +19161 19162 19290 +19162 19291 19290 +19162 19163 19292 +19162 19292 19291 +19163 19164 19292 +19164 19293 19292 +19164 19165 19294 +19164 19294 19293 +19165 19166 19294 +19166 19295 19294 +19166 19167 19296 +19166 19296 19295 +19167 19168 19296 +19168 19297 19296 +19168 19169 19298 +19168 19298 19297 +19169 19170 19298 +19170 19299 19298 +19170 19171 19300 +19170 19300 19299 +19171 19172 19300 +19172 19301 19300 +19172 19173 19302 +19172 19302 19301 +19174 19175 19304 +19174 19304 19303 +19175 19176 19304 +19176 19305 19304 +19176 19177 19306 +19176 19306 19305 +19177 19178 19306 +19178 19307 19306 +19178 19179 19308 +19178 19308 19307 +19179 19180 19308 +19180 19309 19308 +19180 19181 19310 +19180 19310 19309 +19181 19182 19310 +19182 19311 19310 +19182 19183 19312 +19182 19312 19311 +19183 19184 19312 +19184 19313 19312 +19184 19185 19314 +19184 19314 19313 +19185 19186 19314 +19186 19315 19314 +19186 19187 19316 +19186 19316 19315 +19187 19188 19316 +19188 19317 19316 +19188 19189 19318 +19188 19318 19317 +19189 19190 19318 +19190 19319 19318 +19190 19191 19320 +19190 19320 19319 +19191 19192 19320 +19192 19321 19320 +19192 19193 19322 +19192 19322 19321 +19193 19194 19322 +19194 19323 19322 +19194 19195 19324 +19194 19324 19323 +19195 19196 19324 +19196 19325 19324 +19196 19197 19326 +19196 19326 19325 +19197 19198 19326 +19198 19327 19326 +19198 19199 19328 +19198 19328 19327 +19199 19200 19328 +19200 19329 19328 +19200 19201 19330 +19200 19330 19329 +19201 19202 19330 +19202 19331 19330 +19202 19203 19332 +19202 19332 19331 +19203 19204 19332 +19204 19333 19332 +19204 19205 19334 +19204 19334 19333 +19205 19206 19334 +19206 19335 19334 +19206 19207 19336 +19206 19336 19335 +19207 19208 19336 +19208 19337 19336 +19208 19209 19338 +19208 19338 19337 +19209 19210 19338 +19210 19339 19338 +19210 19211 19340 +19210 19340 19339 +19211 19212 19340 +19212 19341 19340 +19212 19213 19342 +19212 19342 19341 +19213 19214 19342 +19214 19343 19342 +19214 19215 19344 +19214 19344 19343 +19215 19216 19344 +19216 19345 19344 +19216 19217 19346 +19216 19346 19345 +19217 19218 19346 +19218 19347 19346 +19218 19219 19348 +19218 19348 19347 +19219 19220 19348 +19220 19349 19348 +19220 19221 19350 +19220 19350 19349 +19221 19222 19350 +19222 19351 19350 +19222 19223 19352 +19222 19352 19351 +19223 19224 19352 +19224 19353 19352 +19224 19225 19354 +19224 19354 19353 +19225 19226 19354 +19226 19355 19354 +19226 19227 19356 +19226 19356 19355 +19227 19228 19356 +19228 19357 19356 +19228 19229 19358 +19228 19358 19357 +19229 19230 19358 +19230 19359 19358 +19230 19231 19360 +19230 19360 19359 +19231 19232 19360 +19232 19361 19360 +19232 19233 19362 +19232 19362 19361 +19233 19234 19362 +19234 19363 19362 +19234 19235 19364 +19234 19364 19363 +19235 19236 19364 +19236 19365 19364 +19236 19237 19366 +19236 19366 19365 +19237 19238 19366 +19238 19367 19366 +19238 19239 19368 +19238 19368 19367 +19239 19240 19368 +19240 19369 19368 +19240 19241 19370 +19240 19370 19369 +19241 19242 19370 +19242 19371 19370 +19242 19243 19372 +19242 19372 19371 +19243 19244 19372 +19244 19373 19372 +19244 19245 19374 +19244 19374 19373 +19245 19246 19374 +19246 19375 19374 +19246 19247 19376 +19246 19376 19375 +19247 19248 19376 +19248 19377 19376 +19248 19249 19378 +19248 19378 19377 +19249 19250 19378 +19250 19379 19378 +19250 19251 19380 +19250 19380 19379 +19251 19252 19380 +19252 19381 19380 +19252 19253 19382 +19252 19382 19381 +19253 19254 19382 +19254 19383 19382 +19254 19255 19384 +19254 19384 19383 +19255 19256 19384 +19256 19385 19384 +19256 19257 19386 +19256 19386 19385 +19257 19258 19386 +19258 19387 19386 +19258 19259 19388 +19258 19388 19387 +19259 19260 19388 +19260 19389 19388 +19260 19261 19390 +19260 19390 19389 +19261 19262 19390 +19262 19391 19390 +19262 19263 19392 +19262 19392 19391 +19263 19264 19392 +19264 19393 19392 +19264 19265 19394 +19264 19394 19393 +19265 19266 19394 +19266 19395 19394 +19266 19267 19396 +19266 19396 19395 +19267 19268 19396 +19268 19397 19396 +19268 19269 19398 +19268 19398 19397 +19269 19270 19398 +19270 19399 19398 +19270 19271 19400 +19270 19400 19399 +19271 19272 19400 +19272 19401 19400 +19272 19273 19402 +19272 19402 19401 +19273 19274 19402 +19274 19403 19402 +19274 19275 19404 +19274 19404 19403 +19275 19276 19404 +19276 19405 19404 +19276 19277 19406 +19276 19406 19405 +19277 19278 19406 +19278 19407 19406 +19278 19279 19408 +19278 19408 19407 +19279 19280 19408 +19280 19409 19408 +19280 19281 19410 +19280 19410 19409 +19281 19282 19410 +19282 19411 19410 +19282 19283 19412 +19282 19412 19411 +19283 19284 19412 +19284 19413 19412 +19284 19285 19414 +19284 19414 19413 +19285 19286 19414 +19286 19415 19414 +19286 19287 19416 +19286 19416 19415 +19287 19288 19416 +19288 19417 19416 +19288 19289 19418 +19288 19418 19417 +19289 19290 19418 +19290 19419 19418 +19290 19291 19420 +19290 19420 19419 +19291 19292 19420 +19292 19421 19420 +19292 19293 19422 +19292 19422 19421 +19293 19294 19422 +19294 19423 19422 +19294 19295 19424 +19294 19424 19423 +19295 19296 19424 +19296 19425 19424 +19296 19297 19426 +19296 19426 19425 +19297 19298 19426 +19298 19427 19426 +19298 19299 19428 +19298 19428 19427 +19299 19300 19428 +19300 19429 19428 +19300 19301 19430 +19300 19430 19429 +19301 19302 19430 +19302 19431 19430 +19303 19304 19432 +19304 19433 19432 +19304 19305 19434 +19304 19434 19433 +19305 19306 19434 +19306 19435 19434 +19306 19307 19436 +19306 19436 19435 +19307 19308 19436 +19308 19437 19436 +19308 19309 19438 +19308 19438 19437 +19309 19310 19438 +19310 19439 19438 +19310 19311 19440 +19310 19440 19439 +19311 19312 19440 +19312 19441 19440 +19312 19313 19442 +19312 19442 19441 +19313 19314 19442 +19314 19443 19442 +19314 19315 19444 +19314 19444 19443 +19315 19316 19444 +19316 19445 19444 +19316 19317 19446 +19316 19446 19445 +19317 19318 19446 +19318 19447 19446 +19318 19319 19448 +19318 19448 19447 +19319 19320 19448 +19320 19449 19448 +19320 19321 19450 +19320 19450 19449 +19321 19322 19450 +19322 19451 19450 +19322 19323 19452 +19322 19452 19451 +19323 19324 19452 +19324 19453 19452 +19324 19325 19454 +19324 19454 19453 +19325 19326 19454 +19326 19455 19454 +19326 19327 19456 +19326 19456 19455 +19327 19328 19456 +19328 19457 19456 +19328 19329 19458 +19328 19458 19457 +19329 19330 19458 +19330 19459 19458 +19330 19331 19460 +19330 19460 19459 +19331 19332 19460 +19332 19461 19460 +19332 19333 19462 +19332 19462 19461 +19333 19334 19462 +19334 19463 19462 +19334 19335 19464 +19334 19464 19463 +19335 19336 19464 +19336 19465 19464 +19336 19337 19466 +19336 19466 19465 +19337 19338 19466 +19338 19467 19466 +19338 19339 19468 +19338 19468 19467 +19339 19340 19468 +19340 19469 19468 +19340 19341 19470 +19340 19470 19469 +19341 19342 19470 +19342 19471 19470 +19342 19343 19472 +19342 19472 19471 +19343 19344 19472 +19344 19473 19472 +19344 19345 19474 +19344 19474 19473 +19345 19346 19474 +19346 19475 19474 +19346 19347 19476 +19346 19476 19475 +19347 19348 19476 +19348 19477 19476 +19348 19349 19478 +19348 19478 19477 +19349 19350 19478 +19350 19479 19478 +19350 19351 19480 +19350 19480 19479 +19351 19352 19480 +19352 19481 19480 +19352 19353 19482 +19352 19482 19481 +19353 19354 19482 +19354 19483 19482 +19354 19355 19484 +19354 19484 19483 +19355 19356 19484 +19356 19485 19484 +19356 19357 19486 +19356 19486 19485 +19357 19358 19486 +19358 19487 19486 +19358 19359 19488 +19358 19488 19487 +19359 19360 19488 +19360 19489 19488 +19360 19361 19490 +19360 19490 19489 +19361 19362 19490 +19362 19491 19490 +19362 19363 19492 +19362 19492 19491 +19363 19364 19492 +19364 19493 19492 +19364 19365 19494 +19364 19494 19493 +19365 19366 19494 +19366 19495 19494 +19366 19367 19496 +19366 19496 19495 +19367 19368 19496 +19368 19497 19496 +19368 19369 19498 +19368 19498 19497 +19369 19370 19498 +19370 19499 19498 +19370 19371 19500 +19370 19500 19499 +19371 19372 19500 +19372 19501 19500 +19372 19373 19502 +19372 19502 19501 +19373 19374 19502 +19374 19503 19502 +19374 19375 19504 +19374 19504 19503 +19375 19376 19504 +19376 19505 19504 +19376 19377 19506 +19376 19506 19505 +19377 19378 19506 +19378 19507 19506 +19378 19379 19508 +19378 19508 19507 +19379 19380 19508 +19380 19509 19508 +19380 19381 19510 +19380 19510 19509 +19381 19382 19510 +19382 19511 19510 +19382 19383 19512 +19382 19512 19511 +19383 19384 19512 +19384 19513 19512 +19384 19385 19514 +19384 19514 19513 +19385 19386 19514 +19386 19515 19514 +19386 19387 19516 +19386 19516 19515 +19387 19388 19516 +19388 19517 19516 +19388 19389 19518 +19388 19518 19517 +19389 19390 19518 +19390 19519 19518 +19390 19391 19520 +19390 19520 19519 +19391 19392 19520 +19392 19521 19520 +19392 19393 19522 +19392 19522 19521 +19393 19394 19522 +19394 19523 19522 +19394 19395 19524 +19394 19524 19523 +19395 19396 19524 +19396 19525 19524 +19396 19397 19526 +19396 19526 19525 +19397 19398 19526 +19398 19527 19526 +19398 19399 19528 +19398 19528 19527 +19399 19400 19528 +19400 19529 19528 +19400 19401 19530 +19400 19530 19529 +19401 19402 19530 +19402 19531 19530 +19402 19403 19532 +19402 19532 19531 +19403 19404 19532 +19404 19533 19532 +19404 19405 19534 +19404 19534 19533 +19405 19406 19534 +19406 19535 19534 +19406 19407 19536 +19406 19536 19535 +19407 19408 19536 +19408 19537 19536 +19408 19409 19538 +19408 19538 19537 +19409 19410 19538 +19410 19539 19538 +19410 19411 19540 +19410 19540 19539 +19411 19412 19540 +19412 19541 19540 +19412 19413 19542 +19412 19542 19541 +19413 19414 19542 +19414 19543 19542 +19414 19415 19544 +19414 19544 19543 +19415 19416 19544 +19416 19545 19544 +19416 19417 19546 +19416 19546 19545 +19417 19418 19546 +19418 19547 19546 +19418 19419 19548 +19418 19548 19547 +19419 19420 19548 +19420 19549 19548 +19420 19421 19550 +19420 19550 19549 +19421 19422 19550 +19422 19551 19550 +19422 19423 19552 +19422 19552 19551 +19423 19424 19552 +19424 19553 19552 +19424 19425 19554 +19424 19554 19553 +19425 19426 19554 +19426 19555 19554 +19426 19427 19556 +19426 19556 19555 +19427 19428 19556 +19428 19557 19556 +19428 19429 19558 +19428 19558 19557 +19429 19430 19558 +19430 19559 19558 +19430 19431 19560 +19430 19560 19559 +19432 19433 19562 +19432 19562 19561 +19433 19434 19562 +19434 19563 19562 +19434 19435 19564 +19434 19564 19563 +19435 19436 19564 +19436 19565 19564 +19436 19437 19566 +19436 19566 19565 +19437 19438 19566 +19438 19567 19566 +19438 19439 19568 +19438 19568 19567 +19439 19440 19568 +19440 19569 19568 +19440 19441 19570 +19440 19570 19569 +19441 19442 19570 +19442 19571 19570 +19442 19443 19572 +19442 19572 19571 +19443 19444 19572 +19444 19573 19572 +19444 19445 19574 +19444 19574 19573 +19445 19446 19574 +19446 19575 19574 +19446 19447 19576 +19446 19576 19575 +19447 19448 19576 +19448 19577 19576 +19448 19449 19578 +19448 19578 19577 +19449 19450 19578 +19450 19579 19578 +19450 19451 19580 +19450 19580 19579 +19451 19452 19580 +19452 19581 19580 +19452 19453 19582 +19452 19582 19581 +19453 19454 19582 +19454 19583 19582 +19454 19455 19584 +19454 19584 19583 +19455 19456 19584 +19456 19585 19584 +19456 19457 19586 +19456 19586 19585 +19457 19458 19586 +19458 19587 19586 +19458 19459 19588 +19458 19588 19587 +19459 19460 19588 +19460 19589 19588 +19460 19461 19590 +19460 19590 19589 +19461 19462 19590 +19462 19591 19590 +19462 19463 19592 +19462 19592 19591 +19463 19464 19592 +19464 19593 19592 +19464 19465 19594 +19464 19594 19593 +19465 19466 19594 +19466 19595 19594 +19466 19467 19596 +19466 19596 19595 +19467 19468 19596 +19468 19597 19596 +19468 19469 19598 +19468 19598 19597 +19469 19470 19598 +19470 19599 19598 +19470 19471 19600 +19470 19600 19599 +19471 19472 19600 +19472 19601 19600 +19472 19473 19602 +19472 19602 19601 +19473 19474 19602 +19474 19603 19602 +19474 19475 19604 +19474 19604 19603 +19475 19476 19604 +19476 19605 19604 +19476 19477 19606 +19476 19606 19605 +19477 19478 19606 +19478 19607 19606 +19478 19479 19608 +19478 19608 19607 +19479 19480 19608 +19480 19609 19608 +19480 19481 19610 +19480 19610 19609 +19481 19482 19610 +19482 19611 19610 +19482 19483 19612 +19482 19612 19611 +19483 19484 19612 +19484 19613 19612 +19484 19485 19614 +19484 19614 19613 +19485 19486 19614 +19486 19615 19614 +19486 19487 19616 +19486 19616 19615 +19487 19488 19616 +19488 19617 19616 +19488 19489 19618 +19488 19618 19617 +19489 19490 19618 +19490 19619 19618 +19490 19491 19620 +19490 19620 19619 +19491 19492 19620 +19492 19621 19620 +19492 19493 19622 +19492 19622 19621 +19493 19494 19622 +19494 19623 19622 +19494 19495 19624 +19494 19624 19623 +19495 19496 19624 +19496 19625 19624 +19496 19497 19626 +19496 19626 19625 +19497 19498 19626 +19498 19627 19626 +19498 19499 19628 +19498 19628 19627 +19499 19500 19628 +19500 19629 19628 +19500 19501 19630 +19500 19630 19629 +19501 19502 19630 +19502 19631 19630 +19502 19503 19632 +19502 19632 19631 +19503 19504 19632 +19504 19633 19632 +19504 19505 19634 +19504 19634 19633 +19505 19506 19634 +19506 19635 19634 +19506 19507 19636 +19506 19636 19635 +19507 19508 19636 +19508 19637 19636 +19508 19509 19638 +19508 19638 19637 +19509 19510 19638 +19510 19639 19638 +19510 19511 19640 +19510 19640 19639 +19511 19512 19640 +19512 19641 19640 +19512 19513 19642 +19512 19642 19641 +19513 19514 19642 +19514 19643 19642 +19514 19515 19644 +19514 19644 19643 +19515 19516 19644 +19516 19645 19644 +19516 19517 19646 +19516 19646 19645 +19517 19518 19646 +19518 19647 19646 +19518 19519 19648 +19518 19648 19647 +19519 19520 19648 +19520 19649 19648 +19520 19521 19650 +19520 19650 19649 +19521 19522 19650 +19522 19651 19650 +19522 19523 19652 +19522 19652 19651 +19523 19524 19652 +19524 19653 19652 +19524 19525 19654 +19524 19654 19653 +19525 19526 19654 +19526 19655 19654 +19526 19527 19656 +19526 19656 19655 +19527 19528 19656 +19528 19657 19656 +19528 19529 19658 +19528 19658 19657 +19529 19530 19658 +19530 19659 19658 +19530 19531 19660 +19530 19660 19659 +19531 19532 19660 +19532 19661 19660 +19532 19533 19662 +19532 19662 19661 +19533 19534 19662 +19534 19663 19662 +19534 19535 19664 +19534 19664 19663 +19535 19536 19664 +19536 19665 19664 +19536 19537 19666 +19536 19666 19665 +19537 19538 19666 +19538 19667 19666 +19538 19539 19668 +19538 19668 19667 +19539 19540 19668 +19540 19669 19668 +19540 19541 19670 +19540 19670 19669 +19541 19542 19670 +19542 19671 19670 +19542 19543 19672 +19542 19672 19671 +19543 19544 19672 +19544 19673 19672 +19544 19545 19674 +19544 19674 19673 +19545 19546 19674 +19546 19675 19674 +19546 19547 19676 +19546 19676 19675 +19547 19548 19676 +19548 19677 19676 +19548 19549 19678 +19548 19678 19677 +19549 19550 19678 +19550 19679 19678 +19550 19551 19680 +19550 19680 19679 +19551 19552 19680 +19552 19681 19680 +19552 19553 19682 +19552 19682 19681 +19553 19554 19682 +19554 19683 19682 +19554 19555 19684 +19554 19684 19683 +19555 19556 19684 +19556 19685 19684 +19556 19557 19686 +19556 19686 19685 +19557 19558 19686 +19558 19687 19686 +19558 19559 19688 +19558 19688 19687 +19559 19560 19688 +19560 19689 19688 +19561 19562 19690 +19562 19691 19690 +19562 19563 19692 +19562 19692 19691 +19563 19564 19692 +19564 19693 19692 +19564 19565 19694 +19564 19694 19693 +19565 19566 19694 +19566 19695 19694 +19566 19567 19696 +19566 19696 19695 +19567 19568 19696 +19568 19697 19696 +19568 19569 19698 +19568 19698 19697 +19569 19570 19698 +19570 19699 19698 +19570 19571 19700 +19570 19700 19699 +19571 19572 19700 +19572 19701 19700 +19572 19573 19702 +19572 19702 19701 +19573 19574 19702 +19574 19703 19702 +19574 19575 19704 +19574 19704 19703 +19575 19576 19704 +19576 19705 19704 +19576 19577 19706 +19576 19706 19705 +19577 19578 19706 +19578 19707 19706 +19578 19579 19708 +19578 19708 19707 +19579 19580 19708 +19580 19709 19708 +19580 19581 19710 +19580 19710 19709 +19581 19582 19710 +19582 19711 19710 +19582 19583 19712 +19582 19712 19711 +19583 19584 19712 +19584 19713 19712 +19584 19585 19714 +19584 19714 19713 +19585 19586 19714 +19586 19715 19714 +19586 19587 19716 +19586 19716 19715 +19587 19588 19716 +19588 19717 19716 +19588 19589 19718 +19588 19718 19717 +19589 19590 19718 +19590 19719 19718 +19590 19591 19720 +19590 19720 19719 +19591 19592 19720 +19592 19721 19720 +19592 19593 19722 +19592 19722 19721 +19593 19594 19722 +19594 19723 19722 +19594 19595 19724 +19594 19724 19723 +19595 19596 19724 +19596 19725 19724 +19596 19597 19726 +19596 19726 19725 +19597 19598 19726 +19598 19727 19726 +19598 19599 19728 +19598 19728 19727 +19599 19600 19728 +19600 19729 19728 +19600 19601 19730 +19600 19730 19729 +19601 19602 19730 +19602 19731 19730 +19602 19603 19732 +19602 19732 19731 +19603 19604 19732 +19604 19733 19732 +19604 19605 19734 +19604 19734 19733 +19605 19606 19734 +19606 19735 19734 +19606 19607 19736 +19606 19736 19735 +19607 19608 19736 +19608 19737 19736 +19608 19609 19738 +19608 19738 19737 +19609 19610 19738 +19610 19739 19738 +19610 19611 19740 +19610 19740 19739 +19611 19612 19740 +19612 19741 19740 +19612 19613 19742 +19612 19742 19741 +19613 19614 19742 +19614 19743 19742 +19614 19615 19744 +19614 19744 19743 +19615 19616 19744 +19616 19745 19744 +19616 19617 19746 +19616 19746 19745 +19617 19618 19746 +19618 19747 19746 +19618 19619 19748 +19618 19748 19747 +19619 19620 19748 +19620 19749 19748 +19620 19621 19750 +19620 19750 19749 +19621 19622 19750 +19622 19751 19750 +19622 19623 19752 +19622 19752 19751 +19623 19624 19752 +19624 19753 19752 +19624 19625 19754 +19624 19754 19753 +19625 19626 19754 +19626 19755 19754 +19626 19627 19756 +19626 19756 19755 +19627 19628 19756 +19628 19757 19756 +19628 19629 19758 +19628 19758 19757 +19629 19630 19758 +19630 19759 19758 +19630 19631 19760 +19630 19760 19759 +19631 19632 19760 +19632 19761 19760 +19632 19633 19762 +19632 19762 19761 +19633 19634 19762 +19634 19763 19762 +19634 19635 19764 +19634 19764 19763 +19635 19636 19764 +19636 19765 19764 +19636 19637 19766 +19636 19766 19765 +19637 19638 19766 +19638 19767 19766 +19638 19639 19768 +19638 19768 19767 +19639 19640 19768 +19640 19769 19768 +19640 19641 19770 +19640 19770 19769 +19641 19642 19770 +19642 19771 19770 +19642 19643 19772 +19642 19772 19771 +19643 19644 19772 +19644 19773 19772 +19644 19645 19774 +19644 19774 19773 +19645 19646 19774 +19646 19775 19774 +19646 19647 19776 +19646 19776 19775 +19647 19648 19776 +19648 19777 19776 +19648 19649 19778 +19648 19778 19777 +19649 19650 19778 +19650 19779 19778 +19650 19651 19780 +19650 19780 19779 +19651 19652 19780 +19652 19781 19780 +19652 19653 19782 +19652 19782 19781 +19653 19654 19782 +19654 19783 19782 +19654 19655 19784 +19654 19784 19783 +19655 19656 19784 +19656 19785 19784 +19656 19657 19786 +19656 19786 19785 +19657 19658 19786 +19658 19787 19786 +19658 19659 19788 +19658 19788 19787 +19659 19660 19788 +19660 19789 19788 +19660 19661 19790 +19660 19790 19789 +19661 19662 19790 +19662 19791 19790 +19662 19663 19792 +19662 19792 19791 +19663 19664 19792 +19664 19793 19792 +19664 19665 19794 +19664 19794 19793 +19665 19666 19794 +19666 19795 19794 +19666 19667 19796 +19666 19796 19795 +19667 19668 19796 +19668 19797 19796 +19668 19669 19798 +19668 19798 19797 +19669 19670 19798 +19670 19799 19798 +19670 19671 19800 +19670 19800 19799 +19671 19672 19800 +19672 19801 19800 +19672 19673 19802 +19672 19802 19801 +19673 19674 19802 +19674 19803 19802 +19674 19675 19804 +19674 19804 19803 +19675 19676 19804 +19676 19805 19804 +19676 19677 19806 +19676 19806 19805 +19677 19678 19806 +19678 19807 19806 +19678 19679 19808 +19678 19808 19807 +19679 19680 19808 +19680 19809 19808 +19680 19681 19810 +19680 19810 19809 +19681 19682 19810 +19682 19811 19810 +19682 19683 19812 +19682 19812 19811 +19683 19684 19812 +19684 19813 19812 +19684 19685 19814 +19684 19814 19813 +19685 19686 19814 +19686 19815 19814 +19686 19687 19816 +19686 19816 19815 +19687 19688 19816 +19688 19817 19816 +19688 19689 19818 +19688 19818 19817 +19690 19691 19820 +19690 19820 19819 +19691 19692 19820 +19692 19821 19820 +19692 19693 19822 +19692 19822 19821 +19693 19694 19822 +19694 19823 19822 +19694 19695 19824 +19694 19824 19823 +19695 19696 19824 +19696 19825 19824 +19696 19697 19826 +19696 19826 19825 +19697 19698 19826 +19698 19827 19826 +19698 19699 19828 +19698 19828 19827 +19699 19700 19828 +19700 19829 19828 +19700 19701 19830 +19700 19830 19829 +19701 19702 19830 +19702 19831 19830 +19702 19703 19832 +19702 19832 19831 +19703 19704 19832 +19704 19833 19832 +19704 19705 19834 +19704 19834 19833 +19705 19706 19834 +19706 19835 19834 +19706 19707 19836 +19706 19836 19835 +19707 19708 19836 +19708 19837 19836 +19708 19709 19838 +19708 19838 19837 +19709 19710 19838 +19710 19839 19838 +19710 19711 19840 +19710 19840 19839 +19711 19712 19840 +19712 19841 19840 +19712 19713 19842 +19712 19842 19841 +19713 19714 19842 +19714 19843 19842 +19714 19715 19844 +19714 19844 19843 +19715 19716 19844 +19716 19845 19844 +19716 19717 19846 +19716 19846 19845 +19717 19718 19846 +19718 19847 19846 +19718 19719 19848 +19718 19848 19847 +19719 19720 19848 +19720 19849 19848 +19720 19721 19850 +19720 19850 19849 +19721 19722 19850 +19722 19851 19850 +19722 19723 19852 +19722 19852 19851 +19723 19724 19852 +19724 19853 19852 +19724 19725 19854 +19724 19854 19853 +19725 19726 19854 +19726 19855 19854 +19726 19727 19856 +19726 19856 19855 +19727 19728 19856 +19728 19857 19856 +19728 19729 19858 +19728 19858 19857 +19729 19730 19858 +19730 19859 19858 +19730 19731 19860 +19730 19860 19859 +19731 19732 19860 +19732 19861 19860 +19732 19733 19862 +19732 19862 19861 +19733 19734 19862 +19734 19863 19862 +19734 19735 19864 +19734 19864 19863 +19735 19736 19864 +19736 19865 19864 +19736 19737 19866 +19736 19866 19865 +19737 19738 19866 +19738 19867 19866 +19738 19739 19868 +19738 19868 19867 +19739 19740 19868 +19740 19869 19868 +19740 19741 19870 +19740 19870 19869 +19741 19742 19870 +19742 19871 19870 +19742 19743 19872 +19742 19872 19871 +19743 19744 19872 +19744 19873 19872 +19744 19745 19874 +19744 19874 19873 +19745 19746 19874 +19746 19875 19874 +19746 19747 19876 +19746 19876 19875 +19747 19748 19876 +19748 19877 19876 +19748 19749 19878 +19748 19878 19877 +19749 19750 19878 +19750 19879 19878 +19750 19751 19880 +19750 19880 19879 +19751 19752 19880 +19752 19881 19880 +19752 19753 19882 +19752 19882 19881 +19753 19754 19882 +19754 19883 19882 +19754 19755 19884 +19754 19884 19883 +19755 19756 19884 +19756 19885 19884 +19756 19757 19886 +19756 19886 19885 +19757 19758 19886 +19758 19887 19886 +19758 19759 19888 +19758 19888 19887 +19759 19760 19888 +19760 19889 19888 +19760 19761 19890 +19760 19890 19889 +19761 19762 19890 +19762 19891 19890 +19762 19763 19892 +19762 19892 19891 +19763 19764 19892 +19764 19893 19892 +19764 19765 19894 +19764 19894 19893 +19765 19766 19894 +19766 19895 19894 +19766 19767 19896 +19766 19896 19895 +19767 19768 19896 +19768 19897 19896 +19768 19769 19898 +19768 19898 19897 +19769 19770 19898 +19770 19899 19898 +19770 19771 19900 +19770 19900 19899 +19771 19772 19900 +19772 19901 19900 +19772 19773 19902 +19772 19902 19901 +19773 19774 19902 +19774 19903 19902 +19774 19775 19904 +19774 19904 19903 +19775 19776 19904 +19776 19905 19904 +19776 19777 19906 +19776 19906 19905 +19777 19778 19906 +19778 19907 19906 +19778 19779 19908 +19778 19908 19907 +19779 19780 19908 +19780 19909 19908 +19780 19781 19910 +19780 19910 19909 +19781 19782 19910 +19782 19911 19910 +19782 19783 19912 +19782 19912 19911 +19783 19784 19912 +19784 19913 19912 +19784 19785 19914 +19784 19914 19913 +19785 19786 19914 +19786 19915 19914 +19786 19787 19916 +19786 19916 19915 +19787 19788 19916 +19788 19917 19916 +19788 19789 19918 +19788 19918 19917 +19789 19790 19918 +19790 19919 19918 +19790 19791 19920 +19790 19920 19919 +19791 19792 19920 +19792 19921 19920 +19792 19793 19922 +19792 19922 19921 +19793 19794 19922 +19794 19923 19922 +19794 19795 19924 +19794 19924 19923 +19795 19796 19924 +19796 19925 19924 +19796 19797 19926 +19796 19926 19925 +19797 19798 19926 +19798 19927 19926 +19798 19799 19928 +19798 19928 19927 +19799 19800 19928 +19800 19929 19928 +19800 19801 19930 +19800 19930 19929 +19801 19802 19930 +19802 19931 19930 +19802 19803 19932 +19802 19932 19931 +19803 19804 19932 +19804 19933 19932 +19804 19805 19934 +19804 19934 19933 +19805 19806 19934 +19806 19935 19934 +19806 19807 19936 +19806 19936 19935 +19807 19808 19936 +19808 19937 19936 +19808 19809 19938 +19808 19938 19937 +19809 19810 19938 +19810 19939 19938 +19810 19811 19940 +19810 19940 19939 +19811 19812 19940 +19812 19941 19940 +19812 19813 19942 +19812 19942 19941 +19813 19814 19942 +19814 19943 19942 +19814 19815 19944 +19814 19944 19943 +19815 19816 19944 +19816 19945 19944 +19816 19817 19946 +19816 19946 19945 +19817 19818 19946 +19818 19947 19946 +19819 19820 19948 +19820 19949 19948 +19820 19821 19950 +19820 19950 19949 +19821 19822 19950 +19822 19951 19950 +19822 19823 19952 +19822 19952 19951 +19823 19824 19952 +19824 19953 19952 +19824 19825 19954 +19824 19954 19953 +19825 19826 19954 +19826 19955 19954 +19826 19827 19956 +19826 19956 19955 +19827 19828 19956 +19828 19957 19956 +19828 19829 19958 +19828 19958 19957 +19829 19830 19958 +19830 19959 19958 +19830 19831 19960 +19830 19960 19959 +19831 19832 19960 +19832 19961 19960 +19832 19833 19962 +19832 19962 19961 +19833 19834 19962 +19834 19963 19962 +19834 19835 19964 +19834 19964 19963 +19835 19836 19964 +19836 19965 19964 +19836 19837 19966 +19836 19966 19965 +19837 19838 19966 +19838 19967 19966 +19838 19839 19968 +19838 19968 19967 +19839 19840 19968 +19840 19969 19968 +19840 19841 19970 +19840 19970 19969 +19841 19842 19970 +19842 19971 19970 +19842 19843 19972 +19842 19972 19971 +19843 19844 19972 +19844 19973 19972 +19844 19845 19974 +19844 19974 19973 +19845 19846 19974 +19846 19975 19974 +19846 19847 19976 +19846 19976 19975 +19847 19848 19976 +19848 19977 19976 +19848 19849 19978 +19848 19978 19977 +19849 19850 19978 +19850 19979 19978 +19850 19851 19980 +19850 19980 19979 +19851 19852 19980 +19852 19981 19980 +19852 19853 19982 +19852 19982 19981 +19853 19854 19982 +19854 19983 19982 +19854 19855 19984 +19854 19984 19983 +19855 19856 19984 +19856 19985 19984 +19856 19857 19986 +19856 19986 19985 +19857 19858 19986 +19858 19987 19986 +19858 19859 19988 +19858 19988 19987 +19859 19860 19988 +19860 19989 19988 +19860 19861 19990 +19860 19990 19989 +19861 19862 19990 +19862 19991 19990 +19862 19863 19992 +19862 19992 19991 +19863 19864 19992 +19864 19993 19992 +19864 19865 19994 +19864 19994 19993 +19865 19866 19994 +19866 19995 19994 +19866 19867 19996 +19866 19996 19995 +19867 19868 19996 +19868 19997 19996 +19868 19869 19998 +19868 19998 19997 +19869 19870 19998 +19870 19999 19998 +19870 19871 20000 +19870 20000 19999 +19871 19872 20000 +19872 20001 20000 +19872 19873 20002 +19872 20002 20001 +19873 19874 20002 +19874 20003 20002 +19874 19875 20004 +19874 20004 20003 +19875 19876 20004 +19876 20005 20004 +19876 19877 20006 +19876 20006 20005 +19877 19878 20006 +19878 20007 20006 +19878 19879 20008 +19878 20008 20007 +19879 19880 20008 +19880 20009 20008 +19880 19881 20010 +19880 20010 20009 +19881 19882 20010 +19882 20011 20010 +19882 19883 20012 +19882 20012 20011 +19883 19884 20012 +19884 20013 20012 +19884 19885 20014 +19884 20014 20013 +19885 19886 20014 +19886 20015 20014 +19886 19887 20016 +19886 20016 20015 +19887 19888 20016 +19888 20017 20016 +19888 19889 20018 +19888 20018 20017 +19889 19890 20018 +19890 20019 20018 +19890 19891 20020 +19890 20020 20019 +19891 19892 20020 +19892 20021 20020 +19892 19893 20022 +19892 20022 20021 +19893 19894 20022 +19894 20023 20022 +19894 19895 20024 +19894 20024 20023 +19895 19896 20024 +19896 20025 20024 +19896 19897 20026 +19896 20026 20025 +19897 19898 20026 +19898 20027 20026 +19898 19899 20028 +19898 20028 20027 +19899 19900 20028 +19900 20029 20028 +19900 19901 20030 +19900 20030 20029 +19901 19902 20030 +19902 20031 20030 +19902 19903 20032 +19902 20032 20031 +19903 19904 20032 +19904 20033 20032 +19904 19905 20034 +19904 20034 20033 +19905 19906 20034 +19906 20035 20034 +19906 19907 20036 +19906 20036 20035 +19907 19908 20036 +19908 20037 20036 +19908 19909 20038 +19908 20038 20037 +19909 19910 20038 +19910 20039 20038 +19910 19911 20040 +19910 20040 20039 +19911 19912 20040 +19912 20041 20040 +19912 19913 20042 +19912 20042 20041 +19913 19914 20042 +19914 20043 20042 +19914 19915 20044 +19914 20044 20043 +19915 19916 20044 +19916 20045 20044 +19916 19917 20046 +19916 20046 20045 +19917 19918 20046 +19918 20047 20046 +19918 19919 20048 +19918 20048 20047 +19919 19920 20048 +19920 20049 20048 +19920 19921 20050 +19920 20050 20049 +19921 19922 20050 +19922 20051 20050 +19922 19923 20052 +19922 20052 20051 +19923 19924 20052 +19924 20053 20052 +19924 19925 20054 +19924 20054 20053 +19925 19926 20054 +19926 20055 20054 +19926 19927 20056 +19926 20056 20055 +19927 19928 20056 +19928 20057 20056 +19928 19929 20058 +19928 20058 20057 +19929 19930 20058 +19930 20059 20058 +19930 19931 20060 +19930 20060 20059 +19931 19932 20060 +19932 20061 20060 +19932 19933 20062 +19932 20062 20061 +19933 19934 20062 +19934 20063 20062 +19934 19935 20064 +19934 20064 20063 +19935 19936 20064 +19936 20065 20064 +19936 19937 20066 +19936 20066 20065 +19937 19938 20066 +19938 20067 20066 +19938 19939 20068 +19938 20068 20067 +19939 19940 20068 +19940 20069 20068 +19940 19941 20070 +19940 20070 20069 +19941 19942 20070 +19942 20071 20070 +19942 19943 20072 +19942 20072 20071 +19943 19944 20072 +19944 20073 20072 +19944 19945 20074 +19944 20074 20073 +19945 19946 20074 +19946 20075 20074 +19946 19947 20076 +19946 20076 20075 +19948 19949 20078 +19948 20078 20077 +19949 19950 20078 +19950 20079 20078 +19950 19951 20080 +19950 20080 20079 +19951 19952 20080 +19952 20081 20080 +19952 19953 20082 +19952 20082 20081 +19953 19954 20082 +19954 20083 20082 +19954 19955 20084 +19954 20084 20083 +19955 19956 20084 +19956 20085 20084 +19956 19957 20086 +19956 20086 20085 +19957 19958 20086 +19958 20087 20086 +19958 19959 20088 +19958 20088 20087 +19959 19960 20088 +19960 20089 20088 +19960 19961 20090 +19960 20090 20089 +19961 19962 20090 +19962 20091 20090 +19962 19963 20092 +19962 20092 20091 +19963 19964 20092 +19964 20093 20092 +19964 19965 20094 +19964 20094 20093 +19965 19966 20094 +19966 20095 20094 +19966 19967 20096 +19966 20096 20095 +19967 19968 20096 +19968 20097 20096 +19968 19969 20098 +19968 20098 20097 +19969 19970 20098 +19970 20099 20098 +19970 19971 20100 +19970 20100 20099 +19971 19972 20100 +19972 20101 20100 +19972 19973 20102 +19972 20102 20101 +19973 19974 20102 +19974 20103 20102 +19974 19975 20104 +19974 20104 20103 +19975 19976 20104 +19976 20105 20104 +19976 19977 20106 +19976 20106 20105 +19977 19978 20106 +19978 20107 20106 +19978 19979 20108 +19978 20108 20107 +19979 19980 20108 +19980 20109 20108 +19980 19981 20110 +19980 20110 20109 +19981 19982 20110 +19982 20111 20110 +19982 19983 20112 +19982 20112 20111 +19983 19984 20112 +19984 20113 20112 +19984 19985 20114 +19984 20114 20113 +19985 19986 20114 +19986 20115 20114 +19986 19987 20116 +19986 20116 20115 +19987 19988 20116 +19988 20117 20116 +19988 19989 20118 +19988 20118 20117 +19989 19990 20118 +19990 20119 20118 +19990 19991 20120 +19990 20120 20119 +19991 19992 20120 +19992 20121 20120 +19992 19993 20122 +19992 20122 20121 +19993 19994 20122 +19994 20123 20122 +19994 19995 20124 +19994 20124 20123 +19995 19996 20124 +19996 20125 20124 +19996 19997 20126 +19996 20126 20125 +19997 19998 20126 +19998 20127 20126 +19998 19999 20128 +19998 20128 20127 +19999 20000 20128 +20000 20129 20128 +20000 20001 20130 +20000 20130 20129 +20001 20002 20130 +20002 20131 20130 +20002 20003 20132 +20002 20132 20131 +20003 20004 20132 +20004 20133 20132 +20004 20005 20134 +20004 20134 20133 +20005 20006 20134 +20006 20135 20134 +20006 20007 20136 +20006 20136 20135 +20007 20008 20136 +20008 20137 20136 +20008 20009 20138 +20008 20138 20137 +20009 20010 20138 +20010 20139 20138 +20010 20011 20140 +20010 20140 20139 +20011 20012 20140 +20012 20141 20140 +20012 20013 20142 +20012 20142 20141 +20013 20014 20142 +20014 20143 20142 +20014 20015 20144 +20014 20144 20143 +20015 20016 20144 +20016 20145 20144 +20016 20017 20146 +20016 20146 20145 +20017 20018 20146 +20018 20147 20146 +20018 20019 20148 +20018 20148 20147 +20019 20020 20148 +20020 20149 20148 +20020 20021 20150 +20020 20150 20149 +20021 20022 20150 +20022 20151 20150 +20022 20023 20152 +20022 20152 20151 +20023 20024 20152 +20024 20153 20152 +20024 20025 20154 +20024 20154 20153 +20025 20026 20154 +20026 20155 20154 +20026 20027 20156 +20026 20156 20155 +20027 20028 20156 +20028 20157 20156 +20028 20029 20158 +20028 20158 20157 +20029 20030 20158 +20030 20159 20158 +20030 20031 20160 +20030 20160 20159 +20031 20032 20160 +20032 20161 20160 +20032 20033 20162 +20032 20162 20161 +20033 20034 20162 +20034 20163 20162 +20034 20035 20164 +20034 20164 20163 +20035 20036 20164 +20036 20165 20164 +20036 20037 20166 +20036 20166 20165 +20037 20038 20166 +20038 20167 20166 +20038 20039 20168 +20038 20168 20167 +20039 20040 20168 +20040 20169 20168 +20040 20041 20170 +20040 20170 20169 +20041 20042 20170 +20042 20171 20170 +20042 20043 20172 +20042 20172 20171 +20043 20044 20172 +20044 20173 20172 +20044 20045 20174 +20044 20174 20173 +20045 20046 20174 +20046 20175 20174 +20046 20047 20176 +20046 20176 20175 +20047 20048 20176 +20048 20177 20176 +20048 20049 20178 +20048 20178 20177 +20049 20050 20178 +20050 20179 20178 +20050 20051 20180 +20050 20180 20179 +20051 20052 20180 +20052 20181 20180 +20052 20053 20182 +20052 20182 20181 +20053 20054 20182 +20054 20183 20182 +20054 20055 20184 +20054 20184 20183 +20055 20056 20184 +20056 20185 20184 +20056 20057 20186 +20056 20186 20185 +20057 20058 20186 +20058 20187 20186 +20058 20059 20188 +20058 20188 20187 +20059 20060 20188 +20060 20189 20188 +20060 20061 20190 +20060 20190 20189 +20061 20062 20190 +20062 20191 20190 +20062 20063 20192 +20062 20192 20191 +20063 20064 20192 +20064 20193 20192 +20064 20065 20194 +20064 20194 20193 +20065 20066 20194 +20066 20195 20194 +20066 20067 20196 +20066 20196 20195 +20067 20068 20196 +20068 20197 20196 +20068 20069 20198 +20068 20198 20197 +20069 20070 20198 +20070 20199 20198 +20070 20071 20200 +20070 20200 20199 +20071 20072 20200 +20072 20201 20200 +20072 20073 20202 +20072 20202 20201 +20073 20074 20202 +20074 20203 20202 +20074 20075 20204 +20074 20204 20203 +20075 20076 20204 +20076 20205 20204 +20077 20078 20206 +20078 20207 20206 +20078 20079 20208 +20078 20208 20207 +20079 20080 20208 +20080 20209 20208 +20080 20081 20210 +20080 20210 20209 +20081 20082 20210 +20082 20211 20210 +20082 20083 20212 +20082 20212 20211 +20083 20084 20212 +20084 20213 20212 +20084 20085 20214 +20084 20214 20213 +20085 20086 20214 +20086 20215 20214 +20086 20087 20216 +20086 20216 20215 +20087 20088 20216 +20088 20217 20216 +20088 20089 20218 +20088 20218 20217 +20089 20090 20218 +20090 20219 20218 +20090 20091 20220 +20090 20220 20219 +20091 20092 20220 +20092 20221 20220 +20092 20093 20222 +20092 20222 20221 +20093 20094 20222 +20094 20223 20222 +20094 20095 20224 +20094 20224 20223 +20095 20096 20224 +20096 20225 20224 +20096 20097 20226 +20096 20226 20225 +20097 20098 20226 +20098 20227 20226 +20098 20099 20228 +20098 20228 20227 +20099 20100 20228 +20100 20229 20228 +20100 20101 20230 +20100 20230 20229 +20101 20102 20230 +20102 20231 20230 +20102 20103 20232 +20102 20232 20231 +20103 20104 20232 +20104 20233 20232 +20104 20105 20234 +20104 20234 20233 +20105 20106 20234 +20106 20235 20234 +20106 20107 20236 +20106 20236 20235 +20107 20108 20236 +20108 20237 20236 +20108 20109 20238 +20108 20238 20237 +20109 20110 20238 +20110 20239 20238 +20110 20111 20240 +20110 20240 20239 +20111 20112 20240 +20112 20241 20240 +20112 20113 20242 +20112 20242 20241 +20113 20114 20242 +20114 20243 20242 +20114 20115 20244 +20114 20244 20243 +20115 20116 20244 +20116 20245 20244 +20116 20117 20246 +20116 20246 20245 +20117 20118 20246 +20118 20247 20246 +20118 20119 20248 +20118 20248 20247 +20119 20120 20248 +20120 20249 20248 +20120 20121 20250 +20120 20250 20249 +20121 20122 20250 +20122 20251 20250 +20122 20123 20252 +20122 20252 20251 +20123 20124 20252 +20124 20253 20252 +20124 20125 20254 +20124 20254 20253 +20125 20126 20254 +20126 20255 20254 +20126 20127 20256 +20126 20256 20255 +20127 20128 20256 +20128 20257 20256 +20128 20129 20258 +20128 20258 20257 +20129 20130 20258 +20130 20259 20258 +20130 20131 20260 +20130 20260 20259 +20131 20132 20260 +20132 20261 20260 +20132 20133 20262 +20132 20262 20261 +20133 20134 20262 +20134 20263 20262 +20134 20135 20264 +20134 20264 20263 +20135 20136 20264 +20136 20265 20264 +20136 20137 20266 +20136 20266 20265 +20137 20138 20266 +20138 20267 20266 +20138 20139 20268 +20138 20268 20267 +20139 20140 20268 +20140 20269 20268 +20140 20141 20270 +20140 20270 20269 +20141 20142 20270 +20142 20271 20270 +20142 20143 20272 +20142 20272 20271 +20143 20144 20272 +20144 20273 20272 +20144 20145 20274 +20144 20274 20273 +20145 20146 20274 +20146 20275 20274 +20146 20147 20276 +20146 20276 20275 +20147 20148 20276 +20148 20277 20276 +20148 20149 20278 +20148 20278 20277 +20149 20150 20278 +20150 20279 20278 +20150 20151 20280 +20150 20280 20279 +20151 20152 20280 +20152 20281 20280 +20152 20153 20282 +20152 20282 20281 +20153 20154 20282 +20154 20283 20282 +20154 20155 20284 +20154 20284 20283 +20155 20156 20284 +20156 20285 20284 +20156 20157 20286 +20156 20286 20285 +20157 20158 20286 +20158 20287 20286 +20158 20159 20288 +20158 20288 20287 +20159 20160 20288 +20160 20289 20288 +20160 20161 20290 +20160 20290 20289 +20161 20162 20290 +20162 20291 20290 +20162 20163 20292 +20162 20292 20291 +20163 20164 20292 +20164 20293 20292 +20164 20165 20294 +20164 20294 20293 +20165 20166 20294 +20166 20295 20294 +20166 20167 20296 +20166 20296 20295 +20167 20168 20296 +20168 20297 20296 +20168 20169 20298 +20168 20298 20297 +20169 20170 20298 +20170 20299 20298 +20170 20171 20300 +20170 20300 20299 +20171 20172 20300 +20172 20301 20300 +20172 20173 20302 +20172 20302 20301 +20173 20174 20302 +20174 20303 20302 +20174 20175 20304 +20174 20304 20303 +20175 20176 20304 +20176 20305 20304 +20176 20177 20306 +20176 20306 20305 +20177 20178 20306 +20178 20307 20306 +20178 20179 20308 +20178 20308 20307 +20179 20180 20308 +20180 20309 20308 +20180 20181 20310 +20180 20310 20309 +20181 20182 20310 +20182 20311 20310 +20182 20183 20312 +20182 20312 20311 +20183 20184 20312 +20184 20313 20312 +20184 20185 20314 +20184 20314 20313 +20185 20186 20314 +20186 20315 20314 +20186 20187 20316 +20186 20316 20315 +20187 20188 20316 +20188 20317 20316 +20188 20189 20318 +20188 20318 20317 +20189 20190 20318 +20190 20319 20318 +20190 20191 20320 +20190 20320 20319 +20191 20192 20320 +20192 20321 20320 +20192 20193 20322 +20192 20322 20321 +20193 20194 20322 +20194 20323 20322 +20194 20195 20324 +20194 20324 20323 +20195 20196 20324 +20196 20325 20324 +20196 20197 20326 +20196 20326 20325 +20197 20198 20326 +20198 20327 20326 +20198 20199 20328 +20198 20328 20327 +20199 20200 20328 +20200 20329 20328 +20200 20201 20330 +20200 20330 20329 +20201 20202 20330 +20202 20331 20330 +20202 20203 20332 +20202 20332 20331 +20203 20204 20332 +20204 20333 20332 +20204 20205 20334 +20204 20334 20333 +20206 20207 20336 +20206 20336 20335 +20207 20208 20336 +20208 20337 20336 +20208 20209 20338 +20208 20338 20337 +20209 20210 20338 +20210 20339 20338 +20210 20211 20340 +20210 20340 20339 +20211 20212 20340 +20212 20341 20340 +20212 20213 20342 +20212 20342 20341 +20213 20214 20342 +20214 20343 20342 +20214 20215 20344 +20214 20344 20343 +20215 20216 20344 +20216 20345 20344 +20216 20217 20346 +20216 20346 20345 +20217 20218 20346 +20218 20347 20346 +20218 20219 20348 +20218 20348 20347 +20219 20220 20348 +20220 20349 20348 +20220 20221 20350 +20220 20350 20349 +20221 20222 20350 +20222 20351 20350 +20222 20223 20352 +20222 20352 20351 +20223 20224 20352 +20224 20353 20352 +20224 20225 20354 +20224 20354 20353 +20225 20226 20354 +20226 20355 20354 +20226 20227 20356 +20226 20356 20355 +20227 20228 20356 +20228 20357 20356 +20228 20229 20358 +20228 20358 20357 +20229 20230 20358 +20230 20359 20358 +20230 20231 20360 +20230 20360 20359 +20231 20232 20360 +20232 20361 20360 +20232 20233 20362 +20232 20362 20361 +20233 20234 20362 +20234 20363 20362 +20234 20235 20364 +20234 20364 20363 +20235 20236 20364 +20236 20365 20364 +20236 20237 20366 +20236 20366 20365 +20237 20238 20366 +20238 20367 20366 +20238 20239 20368 +20238 20368 20367 +20239 20240 20368 +20240 20369 20368 +20240 20241 20370 +20240 20370 20369 +20241 20242 20370 +20242 20371 20370 +20242 20243 20372 +20242 20372 20371 +20243 20244 20372 +20244 20373 20372 +20244 20245 20374 +20244 20374 20373 +20245 20246 20374 +20246 20375 20374 +20246 20247 20376 +20246 20376 20375 +20247 20248 20376 +20248 20377 20376 +20248 20249 20378 +20248 20378 20377 +20249 20250 20378 +20250 20379 20378 +20250 20251 20380 +20250 20380 20379 +20251 20252 20380 +20252 20381 20380 +20252 20253 20382 +20252 20382 20381 +20253 20254 20382 +20254 20383 20382 +20254 20255 20384 +20254 20384 20383 +20255 20256 20384 +20256 20385 20384 +20256 20257 20386 +20256 20386 20385 +20257 20258 20386 +20258 20387 20386 +20258 20259 20388 +20258 20388 20387 +20259 20260 20388 +20260 20389 20388 +20260 20261 20390 +20260 20390 20389 +20261 20262 20390 +20262 20391 20390 +20262 20263 20392 +20262 20392 20391 +20263 20264 20392 +20264 20393 20392 +20264 20265 20394 +20264 20394 20393 +20265 20266 20394 +20266 20395 20394 +20266 20267 20396 +20266 20396 20395 +20267 20268 20396 +20268 20397 20396 +20268 20269 20398 +20268 20398 20397 +20269 20270 20398 +20270 20399 20398 +20270 20271 20400 +20270 20400 20399 +20271 20272 20400 +20272 20401 20400 +20272 20273 20402 +20272 20402 20401 +20273 20274 20402 +20274 20403 20402 +20274 20275 20404 +20274 20404 20403 +20275 20276 20404 +20276 20405 20404 +20276 20277 20406 +20276 20406 20405 +20277 20278 20406 +20278 20407 20406 +20278 20279 20408 +20278 20408 20407 +20279 20280 20408 +20280 20409 20408 +20280 20281 20410 +20280 20410 20409 +20281 20282 20410 +20282 20411 20410 +20282 20283 20412 +20282 20412 20411 +20283 20284 20412 +20284 20413 20412 +20284 20285 20414 +20284 20414 20413 +20285 20286 20414 +20286 20415 20414 +20286 20287 20416 +20286 20416 20415 +20287 20288 20416 +20288 20417 20416 +20288 20289 20418 +20288 20418 20417 +20289 20290 20418 +20290 20419 20418 +20290 20291 20420 +20290 20420 20419 +20291 20292 20420 +20292 20421 20420 +20292 20293 20422 +20292 20422 20421 +20293 20294 20422 +20294 20423 20422 +20294 20295 20424 +20294 20424 20423 +20295 20296 20424 +20296 20425 20424 +20296 20297 20426 +20296 20426 20425 +20297 20298 20426 +20298 20427 20426 +20298 20299 20428 +20298 20428 20427 +20299 20300 20428 +20300 20429 20428 +20300 20301 20430 +20300 20430 20429 +20301 20302 20430 +20302 20431 20430 +20302 20303 20432 +20302 20432 20431 +20303 20304 20432 +20304 20433 20432 +20304 20305 20434 +20304 20434 20433 +20305 20306 20434 +20306 20435 20434 +20306 20307 20436 +20306 20436 20435 +20307 20308 20436 +20308 20437 20436 +20308 20309 20438 +20308 20438 20437 +20309 20310 20438 +20310 20439 20438 +20310 20311 20440 +20310 20440 20439 +20311 20312 20440 +20312 20441 20440 +20312 20313 20442 +20312 20442 20441 +20313 20314 20442 +20314 20443 20442 +20314 20315 20444 +20314 20444 20443 +20315 20316 20444 +20316 20445 20444 +20316 20317 20446 +20316 20446 20445 +20317 20318 20446 +20318 20447 20446 +20318 20319 20448 +20318 20448 20447 +20319 20320 20448 +20320 20449 20448 +20320 20321 20450 +20320 20450 20449 +20321 20322 20450 +20322 20451 20450 +20322 20323 20452 +20322 20452 20451 +20323 20324 20452 +20324 20453 20452 +20324 20325 20454 +20324 20454 20453 +20325 20326 20454 +20326 20455 20454 +20326 20327 20456 +20326 20456 20455 +20327 20328 20456 +20328 20457 20456 +20328 20329 20458 +20328 20458 20457 +20329 20330 20458 +20330 20459 20458 +20330 20331 20460 +20330 20460 20459 +20331 20332 20460 +20332 20461 20460 +20332 20333 20462 +20332 20462 20461 +20333 20334 20462 +20334 20463 20462 +20335 20336 20464 +20336 20465 20464 +20336 20337 20466 +20336 20466 20465 +20337 20338 20466 +20338 20467 20466 +20338 20339 20468 +20338 20468 20467 +20339 20340 20468 +20340 20469 20468 +20340 20341 20470 +20340 20470 20469 +20341 20342 20470 +20342 20471 20470 +20342 20343 20472 +20342 20472 20471 +20343 20344 20472 +20344 20473 20472 +20344 20345 20474 +20344 20474 20473 +20345 20346 20474 +20346 20475 20474 +20346 20347 20476 +20346 20476 20475 +20347 20348 20476 +20348 20477 20476 +20348 20349 20478 +20348 20478 20477 +20349 20350 20478 +20350 20479 20478 +20350 20351 20480 +20350 20480 20479 +20351 20352 20480 +20352 20481 20480 +20352 20353 20482 +20352 20482 20481 +20353 20354 20482 +20354 20483 20482 +20354 20355 20484 +20354 20484 20483 +20355 20356 20484 +20356 20485 20484 +20356 20357 20486 +20356 20486 20485 +20357 20358 20486 +20358 20487 20486 +20358 20359 20488 +20358 20488 20487 +20359 20360 20488 +20360 20489 20488 +20360 20361 20490 +20360 20490 20489 +20361 20362 20490 +20362 20491 20490 +20362 20363 20492 +20362 20492 20491 +20363 20364 20492 +20364 20493 20492 +20364 20365 20494 +20364 20494 20493 +20365 20366 20494 +20366 20495 20494 +20366 20367 20496 +20366 20496 20495 +20367 20368 20496 +20368 20497 20496 +20368 20369 20498 +20368 20498 20497 +20369 20370 20498 +20370 20499 20498 +20370 20371 20500 +20370 20500 20499 +20371 20372 20500 +20372 20501 20500 +20372 20373 20502 +20372 20502 20501 +20373 20374 20502 +20374 20503 20502 +20374 20375 20504 +20374 20504 20503 +20375 20376 20504 +20376 20505 20504 +20376 20377 20506 +20376 20506 20505 +20377 20378 20506 +20378 20507 20506 +20378 20379 20508 +20378 20508 20507 +20379 20380 20508 +20380 20509 20508 +20380 20381 20510 +20380 20510 20509 +20381 20382 20510 +20382 20511 20510 +20382 20383 20512 +20382 20512 20511 +20383 20384 20512 +20384 20513 20512 +20384 20385 20514 +20384 20514 20513 +20385 20386 20514 +20386 20515 20514 +20386 20387 20516 +20386 20516 20515 +20387 20388 20516 +20388 20517 20516 +20388 20389 20518 +20388 20518 20517 +20389 20390 20518 +20390 20519 20518 +20390 20391 20520 +20390 20520 20519 +20391 20392 20520 +20392 20521 20520 +20392 20393 20522 +20392 20522 20521 +20393 20394 20522 +20394 20523 20522 +20394 20395 20524 +20394 20524 20523 +20395 20396 20524 +20396 20525 20524 +20396 20397 20526 +20396 20526 20525 +20397 20398 20526 +20398 20527 20526 +20398 20399 20528 +20398 20528 20527 +20399 20400 20528 +20400 20529 20528 +20400 20401 20530 +20400 20530 20529 +20401 20402 20530 +20402 20531 20530 +20402 20403 20532 +20402 20532 20531 +20403 20404 20532 +20404 20533 20532 +20404 20405 20534 +20404 20534 20533 +20405 20406 20534 +20406 20535 20534 +20406 20407 20536 +20406 20536 20535 +20407 20408 20536 +20408 20537 20536 +20408 20409 20538 +20408 20538 20537 +20409 20410 20538 +20410 20539 20538 +20410 20411 20540 +20410 20540 20539 +20411 20412 20540 +20412 20541 20540 +20412 20413 20542 +20412 20542 20541 +20413 20414 20542 +20414 20543 20542 +20414 20415 20544 +20414 20544 20543 +20415 20416 20544 +20416 20545 20544 +20416 20417 20546 +20416 20546 20545 +20417 20418 20546 +20418 20547 20546 +20418 20419 20548 +20418 20548 20547 +20419 20420 20548 +20420 20549 20548 +20420 20421 20550 +20420 20550 20549 +20421 20422 20550 +20422 20551 20550 +20422 20423 20552 +20422 20552 20551 +20423 20424 20552 +20424 20553 20552 +20424 20425 20554 +20424 20554 20553 +20425 20426 20554 +20426 20555 20554 +20426 20427 20556 +20426 20556 20555 +20427 20428 20556 +20428 20557 20556 +20428 20429 20558 +20428 20558 20557 +20429 20430 20558 +20430 20559 20558 +20430 20431 20560 +20430 20560 20559 +20431 20432 20560 +20432 20561 20560 +20432 20433 20562 +20432 20562 20561 +20433 20434 20562 +20434 20563 20562 +20434 20435 20564 +20434 20564 20563 +20435 20436 20564 +20436 20565 20564 +20436 20437 20566 +20436 20566 20565 +20437 20438 20566 +20438 20567 20566 +20438 20439 20568 +20438 20568 20567 +20439 20440 20568 +20440 20569 20568 +20440 20441 20570 +20440 20570 20569 +20441 20442 20570 +20442 20571 20570 +20442 20443 20572 +20442 20572 20571 +20443 20444 20572 +20444 20573 20572 +20444 20445 20574 +20444 20574 20573 +20445 20446 20574 +20446 20575 20574 +20446 20447 20576 +20446 20576 20575 +20447 20448 20576 +20448 20577 20576 +20448 20449 20578 +20448 20578 20577 +20449 20450 20578 +20450 20579 20578 +20450 20451 20580 +20450 20580 20579 +20451 20452 20580 +20452 20581 20580 +20452 20453 20582 +20452 20582 20581 +20453 20454 20582 +20454 20583 20582 +20454 20455 20584 +20454 20584 20583 +20455 20456 20584 +20456 20585 20584 +20456 20457 20586 +20456 20586 20585 +20457 20458 20586 +20458 20587 20586 +20458 20459 20588 +20458 20588 20587 +20459 20460 20588 +20460 20589 20588 +20460 20461 20590 +20460 20590 20589 +20461 20462 20590 +20462 20591 20590 +20462 20463 20592 +20462 20592 20591 +20464 20465 20594 +20464 20594 20593 +20465 20466 20594 +20466 20595 20594 +20466 20467 20596 +20466 20596 20595 +20467 20468 20596 +20468 20597 20596 +20468 20469 20598 +20468 20598 20597 +20469 20470 20598 +20470 20599 20598 +20470 20471 20600 +20470 20600 20599 +20471 20472 20600 +20472 20601 20600 +20472 20473 20602 +20472 20602 20601 +20473 20474 20602 +20474 20603 20602 +20474 20475 20604 +20474 20604 20603 +20475 20476 20604 +20476 20605 20604 +20476 20477 20606 +20476 20606 20605 +20477 20478 20606 +20478 20607 20606 +20478 20479 20608 +20478 20608 20607 +20479 20480 20608 +20480 20609 20608 +20480 20481 20610 +20480 20610 20609 +20481 20482 20610 +20482 20611 20610 +20482 20483 20612 +20482 20612 20611 +20483 20484 20612 +20484 20613 20612 +20484 20485 20614 +20484 20614 20613 +20485 20486 20614 +20486 20615 20614 +20486 20487 20616 +20486 20616 20615 +20487 20488 20616 +20488 20617 20616 +20488 20489 20618 +20488 20618 20617 +20489 20490 20618 +20490 20619 20618 +20490 20491 20620 +20490 20620 20619 +20491 20492 20620 +20492 20621 20620 +20492 20493 20622 +20492 20622 20621 +20493 20494 20622 +20494 20623 20622 +20494 20495 20624 +20494 20624 20623 +20495 20496 20624 +20496 20625 20624 +20496 20497 20626 +20496 20626 20625 +20497 20498 20626 +20498 20627 20626 +20498 20499 20628 +20498 20628 20627 +20499 20500 20628 +20500 20629 20628 +20500 20501 20630 +20500 20630 20629 +20501 20502 20630 +20502 20631 20630 +20502 20503 20632 +20502 20632 20631 +20503 20504 20632 +20504 20633 20632 +20504 20505 20634 +20504 20634 20633 +20505 20506 20634 +20506 20635 20634 +20506 20507 20636 +20506 20636 20635 +20507 20508 20636 +20508 20637 20636 +20508 20509 20638 +20508 20638 20637 +20509 20510 20638 +20510 20639 20638 +20510 20511 20640 +20510 20640 20639 +20511 20512 20640 +20512 20641 20640 +20512 20513 20642 +20512 20642 20641 +20513 20514 20642 +20514 20643 20642 +20514 20515 20644 +20514 20644 20643 +20515 20516 20644 +20516 20645 20644 +20516 20517 20646 +20516 20646 20645 +20517 20518 20646 +20518 20647 20646 +20518 20519 20648 +20518 20648 20647 +20519 20520 20648 +20520 20649 20648 +20520 20521 20650 +20520 20650 20649 +20521 20522 20650 +20522 20651 20650 +20522 20523 20652 +20522 20652 20651 +20523 20524 20652 +20524 20653 20652 +20524 20525 20654 +20524 20654 20653 +20525 20526 20654 +20526 20655 20654 +20526 20527 20656 +20526 20656 20655 +20527 20528 20656 +20528 20657 20656 +20528 20529 20658 +20528 20658 20657 +20529 20530 20658 +20530 20659 20658 +20530 20531 20660 +20530 20660 20659 +20531 20532 20660 +20532 20661 20660 +20532 20533 20662 +20532 20662 20661 +20533 20534 20662 +20534 20663 20662 +20534 20535 20664 +20534 20664 20663 +20535 20536 20664 +20536 20665 20664 +20536 20537 20666 +20536 20666 20665 +20537 20538 20666 +20538 20667 20666 +20538 20539 20668 +20538 20668 20667 +20539 20540 20668 +20540 20669 20668 +20540 20541 20670 +20540 20670 20669 +20541 20542 20670 +20542 20671 20670 +20542 20543 20672 +20542 20672 20671 +20543 20544 20672 +20544 20673 20672 +20544 20545 20674 +20544 20674 20673 +20545 20546 20674 +20546 20675 20674 +20546 20547 20676 +20546 20676 20675 +20547 20548 20676 +20548 20677 20676 +20548 20549 20678 +20548 20678 20677 +20549 20550 20678 +20550 20679 20678 +20550 20551 20680 +20550 20680 20679 +20551 20552 20680 +20552 20681 20680 +20552 20553 20682 +20552 20682 20681 +20553 20554 20682 +20554 20683 20682 +20554 20555 20684 +20554 20684 20683 +20555 20556 20684 +20556 20685 20684 +20556 20557 20686 +20556 20686 20685 +20557 20558 20686 +20558 20687 20686 +20558 20559 20688 +20558 20688 20687 +20559 20560 20688 +20560 20689 20688 +20560 20561 20690 +20560 20690 20689 +20561 20562 20690 +20562 20691 20690 +20562 20563 20692 +20562 20692 20691 +20563 20564 20692 +20564 20693 20692 +20564 20565 20694 +20564 20694 20693 +20565 20566 20694 +20566 20695 20694 +20566 20567 20696 +20566 20696 20695 +20567 20568 20696 +20568 20697 20696 +20568 20569 20698 +20568 20698 20697 +20569 20570 20698 +20570 20699 20698 +20570 20571 20700 +20570 20700 20699 +20571 20572 20700 +20572 20701 20700 +20572 20573 20702 +20572 20702 20701 +20573 20574 20702 +20574 20703 20702 +20574 20575 20704 +20574 20704 20703 +20575 20576 20704 +20576 20705 20704 +20576 20577 20706 +20576 20706 20705 +20577 20578 20706 +20578 20707 20706 +20578 20579 20708 +20578 20708 20707 +20579 20580 20708 +20580 20709 20708 +20580 20581 20710 +20580 20710 20709 +20581 20582 20710 +20582 20711 20710 +20582 20583 20712 +20582 20712 20711 +20583 20584 20712 +20584 20713 20712 +20584 20585 20714 +20584 20714 20713 +20585 20586 20714 +20586 20715 20714 +20586 20587 20716 +20586 20716 20715 +20587 20588 20716 +20588 20717 20716 +20588 20589 20718 +20588 20718 20717 +20589 20590 20718 +20590 20719 20718 +20590 20591 20720 +20590 20720 20719 +20591 20592 20720 +20592 20721 20720 +20593 20594 20722 +20594 20723 20722 +20594 20595 20724 +20594 20724 20723 +20595 20596 20724 +20596 20725 20724 +20596 20597 20726 +20596 20726 20725 +20597 20598 20726 +20598 20727 20726 +20598 20599 20728 +20598 20728 20727 +20599 20600 20728 +20600 20729 20728 +20600 20601 20730 +20600 20730 20729 +20601 20602 20730 +20602 20731 20730 +20602 20603 20732 +20602 20732 20731 +20603 20604 20732 +20604 20733 20732 +20604 20605 20734 +20604 20734 20733 +20605 20606 20734 +20606 20735 20734 +20606 20607 20736 +20606 20736 20735 +20607 20608 20736 +20608 20737 20736 +20608 20609 20738 +20608 20738 20737 +20609 20610 20738 +20610 20739 20738 +20610 20611 20740 +20610 20740 20739 +20611 20612 20740 +20612 20741 20740 +20612 20613 20742 +20612 20742 20741 +20613 20614 20742 +20614 20743 20742 +20614 20615 20744 +20614 20744 20743 +20615 20616 20744 +20616 20745 20744 +20616 20617 20746 +20616 20746 20745 +20617 20618 20746 +20618 20747 20746 +20618 20619 20748 +20618 20748 20747 +20619 20620 20748 +20620 20749 20748 +20620 20621 20750 +20620 20750 20749 +20621 20622 20750 +20622 20751 20750 +20622 20623 20752 +20622 20752 20751 +20623 20624 20752 +20624 20753 20752 +20624 20625 20754 +20624 20754 20753 +20625 20626 20754 +20626 20755 20754 +20626 20627 20756 +20626 20756 20755 +20627 20628 20756 +20628 20757 20756 +20628 20629 20758 +20628 20758 20757 +20629 20630 20758 +20630 20759 20758 +20630 20631 20760 +20630 20760 20759 +20631 20632 20760 +20632 20761 20760 +20632 20633 20762 +20632 20762 20761 +20633 20634 20762 +20634 20763 20762 +20634 20635 20764 +20634 20764 20763 +20635 20636 20764 +20636 20765 20764 +20636 20637 20766 +20636 20766 20765 +20637 20638 20766 +20638 20767 20766 +20638 20639 20768 +20638 20768 20767 +20639 20640 20768 +20640 20769 20768 +20640 20641 20770 +20640 20770 20769 +20641 20642 20770 +20642 20771 20770 +20642 20643 20772 +20642 20772 20771 +20643 20644 20772 +20644 20773 20772 +20644 20645 20774 +20644 20774 20773 +20645 20646 20774 +20646 20775 20774 +20646 20647 20776 +20646 20776 20775 +20647 20648 20776 +20648 20777 20776 +20648 20649 20778 +20648 20778 20777 +20649 20650 20778 +20650 20779 20778 +20650 20651 20780 +20650 20780 20779 +20651 20652 20780 +20652 20781 20780 +20652 20653 20782 +20652 20782 20781 +20653 20654 20782 +20654 20783 20782 +20654 20655 20784 +20654 20784 20783 +20655 20656 20784 +20656 20785 20784 +20656 20657 20786 +20656 20786 20785 +20657 20658 20786 +20658 20787 20786 +20658 20659 20788 +20658 20788 20787 +20659 20660 20788 +20660 20789 20788 +20660 20661 20790 +20660 20790 20789 +20661 20662 20790 +20662 20791 20790 +20662 20663 20792 +20662 20792 20791 +20663 20664 20792 +20664 20793 20792 +20664 20665 20794 +20664 20794 20793 +20665 20666 20794 +20666 20795 20794 +20666 20667 20796 +20666 20796 20795 +20667 20668 20796 +20668 20797 20796 +20668 20669 20798 +20668 20798 20797 +20669 20670 20798 +20670 20799 20798 +20670 20671 20800 +20670 20800 20799 +20671 20672 20800 +20672 20801 20800 +20672 20673 20802 +20672 20802 20801 +20673 20674 20802 +20674 20803 20802 +20674 20675 20804 +20674 20804 20803 +20675 20676 20804 +20676 20805 20804 +20676 20677 20806 +20676 20806 20805 +20677 20678 20806 +20678 20807 20806 +20678 20679 20808 +20678 20808 20807 +20679 20680 20808 +20680 20809 20808 +20680 20681 20810 +20680 20810 20809 +20681 20682 20810 +20682 20811 20810 +20682 20683 20812 +20682 20812 20811 +20683 20684 20812 +20684 20813 20812 +20684 20685 20814 +20684 20814 20813 +20685 20686 20814 +20686 20815 20814 +20686 20687 20816 +20686 20816 20815 +20687 20688 20816 +20688 20817 20816 +20688 20689 20818 +20688 20818 20817 +20689 20690 20818 +20690 20819 20818 +20690 20691 20820 +20690 20820 20819 +20691 20692 20820 +20692 20821 20820 +20692 20693 20822 +20692 20822 20821 +20693 20694 20822 +20694 20823 20822 +20694 20695 20824 +20694 20824 20823 +20695 20696 20824 +20696 20825 20824 +20696 20697 20826 +20696 20826 20825 +20697 20698 20826 +20698 20827 20826 +20698 20699 20828 +20698 20828 20827 +20699 20700 20828 +20700 20829 20828 +20700 20701 20830 +20700 20830 20829 +20701 20702 20830 +20702 20831 20830 +20702 20703 20832 +20702 20832 20831 +20703 20704 20832 +20704 20833 20832 +20704 20705 20834 +20704 20834 20833 +20705 20706 20834 +20706 20835 20834 +20706 20707 20836 +20706 20836 20835 +20707 20708 20836 +20708 20837 20836 +20708 20709 20838 +20708 20838 20837 +20709 20710 20838 +20710 20839 20838 +20710 20711 20840 +20710 20840 20839 +20711 20712 20840 +20712 20841 20840 +20712 20713 20842 +20712 20842 20841 +20713 20714 20842 +20714 20843 20842 +20714 20715 20844 +20714 20844 20843 +20715 20716 20844 +20716 20845 20844 +20716 20717 20846 +20716 20846 20845 +20717 20718 20846 +20718 20847 20846 +20718 20719 20848 +20718 20848 20847 +20719 20720 20848 +20720 20849 20848 +20720 20721 20850 +20720 20850 20849 +20722 20723 20852 +20722 20852 20851 +20723 20724 20852 +20724 20853 20852 +20724 20725 20854 +20724 20854 20853 +20725 20726 20854 +20726 20855 20854 +20726 20727 20856 +20726 20856 20855 +20727 20728 20856 +20728 20857 20856 +20728 20729 20858 +20728 20858 20857 +20729 20730 20858 +20730 20859 20858 +20730 20731 20860 +20730 20860 20859 +20731 20732 20860 +20732 20861 20860 +20732 20733 20862 +20732 20862 20861 +20733 20734 20862 +20734 20863 20862 +20734 20735 20864 +20734 20864 20863 +20735 20736 20864 +20736 20865 20864 +20736 20737 20866 +20736 20866 20865 +20737 20738 20866 +20738 20867 20866 +20738 20739 20868 +20738 20868 20867 +20739 20740 20868 +20740 20869 20868 +20740 20741 20870 +20740 20870 20869 +20741 20742 20870 +20742 20871 20870 +20742 20743 20872 +20742 20872 20871 +20743 20744 20872 +20744 20873 20872 +20744 20745 20874 +20744 20874 20873 +20745 20746 20874 +20746 20875 20874 +20746 20747 20876 +20746 20876 20875 +20747 20748 20876 +20748 20877 20876 +20748 20749 20878 +20748 20878 20877 +20749 20750 20878 +20750 20879 20878 +20750 20751 20880 +20750 20880 20879 +20751 20752 20880 +20752 20881 20880 +20752 20753 20882 +20752 20882 20881 +20753 20754 20882 +20754 20883 20882 +20754 20755 20884 +20754 20884 20883 +20755 20756 20884 +20756 20885 20884 +20756 20757 20886 +20756 20886 20885 +20757 20758 20886 +20758 20887 20886 +20758 20759 20888 +20758 20888 20887 +20759 20760 20888 +20760 20889 20888 +20760 20761 20890 +20760 20890 20889 +20761 20762 20890 +20762 20891 20890 +20762 20763 20892 +20762 20892 20891 +20763 20764 20892 +20764 20893 20892 +20764 20765 20894 +20764 20894 20893 +20765 20766 20894 +20766 20895 20894 +20766 20767 20896 +20766 20896 20895 +20767 20768 20896 +20768 20897 20896 +20768 20769 20898 +20768 20898 20897 +20769 20770 20898 +20770 20899 20898 +20770 20771 20900 +20770 20900 20899 +20771 20772 20900 +20772 20901 20900 +20772 20773 20902 +20772 20902 20901 +20773 20774 20902 +20774 20903 20902 +20774 20775 20904 +20774 20904 20903 +20775 20776 20904 +20776 20905 20904 +20776 20777 20906 +20776 20906 20905 +20777 20778 20906 +20778 20907 20906 +20778 20779 20908 +20778 20908 20907 +20779 20780 20908 +20780 20909 20908 +20780 20781 20910 +20780 20910 20909 +20781 20782 20910 +20782 20911 20910 +20782 20783 20912 +20782 20912 20911 +20783 20784 20912 +20784 20913 20912 +20784 20785 20914 +20784 20914 20913 +20785 20786 20914 +20786 20915 20914 +20786 20787 20916 +20786 20916 20915 +20787 20788 20916 +20788 20917 20916 +20788 20789 20918 +20788 20918 20917 +20789 20790 20918 +20790 20919 20918 +20790 20791 20920 +20790 20920 20919 +20791 20792 20920 +20792 20921 20920 +20792 20793 20922 +20792 20922 20921 +20793 20794 20922 +20794 20923 20922 +20794 20795 20924 +20794 20924 20923 +20795 20796 20924 +20796 20925 20924 +20796 20797 20926 +20796 20926 20925 +20797 20798 20926 +20798 20927 20926 +20798 20799 20928 +20798 20928 20927 +20799 20800 20928 +20800 20929 20928 +20800 20801 20930 +20800 20930 20929 +20801 20802 20930 +20802 20931 20930 +20802 20803 20932 +20802 20932 20931 +20803 20804 20932 +20804 20933 20932 +20804 20805 20934 +20804 20934 20933 +20805 20806 20934 +20806 20935 20934 +20806 20807 20936 +20806 20936 20935 +20807 20808 20936 +20808 20937 20936 +20808 20809 20938 +20808 20938 20937 +20809 20810 20938 +20810 20939 20938 +20810 20811 20940 +20810 20940 20939 +20811 20812 20940 +20812 20941 20940 +20812 20813 20942 +20812 20942 20941 +20813 20814 20942 +20814 20943 20942 +20814 20815 20944 +20814 20944 20943 +20815 20816 20944 +20816 20945 20944 +20816 20817 20946 +20816 20946 20945 +20817 20818 20946 +20818 20947 20946 +20818 20819 20948 +20818 20948 20947 +20819 20820 20948 +20820 20949 20948 +20820 20821 20950 +20820 20950 20949 +20821 20822 20950 +20822 20951 20950 +20822 20823 20952 +20822 20952 20951 +20823 20824 20952 +20824 20953 20952 +20824 20825 20954 +20824 20954 20953 +20825 20826 20954 +20826 20955 20954 +20826 20827 20956 +20826 20956 20955 +20827 20828 20956 +20828 20957 20956 +20828 20829 20958 +20828 20958 20957 +20829 20830 20958 +20830 20959 20958 +20830 20831 20960 +20830 20960 20959 +20831 20832 20960 +20832 20961 20960 +20832 20833 20962 +20832 20962 20961 +20833 20834 20962 +20834 20963 20962 +20834 20835 20964 +20834 20964 20963 +20835 20836 20964 +20836 20965 20964 +20836 20837 20966 +20836 20966 20965 +20837 20838 20966 +20838 20967 20966 +20838 20839 20968 +20838 20968 20967 +20839 20840 20968 +20840 20969 20968 +20840 20841 20970 +20840 20970 20969 +20841 20842 20970 +20842 20971 20970 +20842 20843 20972 +20842 20972 20971 +20843 20844 20972 +20844 20973 20972 +20844 20845 20974 +20844 20974 20973 +20845 20846 20974 +20846 20975 20974 +20846 20847 20976 +20846 20976 20975 +20847 20848 20976 +20848 20977 20976 +20848 20849 20978 +20848 20978 20977 +20849 20850 20978 +20850 20979 20978 +20851 20852 20980 +20852 20981 20980 +20852 20853 20982 +20852 20982 20981 +20853 20854 20982 +20854 20983 20982 +20854 20855 20984 +20854 20984 20983 +20855 20856 20984 +20856 20985 20984 +20856 20857 20986 +20856 20986 20985 +20857 20858 20986 +20858 20987 20986 +20858 20859 20988 +20858 20988 20987 +20859 20860 20988 +20860 20989 20988 +20860 20861 20990 +20860 20990 20989 +20861 20862 20990 +20862 20991 20990 +20862 20863 20992 +20862 20992 20991 +20863 20864 20992 +20864 20993 20992 +20864 20865 20994 +20864 20994 20993 +20865 20866 20994 +20866 20995 20994 +20866 20867 20996 +20866 20996 20995 +20867 20868 20996 +20868 20997 20996 +20868 20869 20998 +20868 20998 20997 +20869 20870 20998 +20870 20999 20998 +20870 20871 21000 +20870 21000 20999 +20871 20872 21000 +20872 21001 21000 +20872 20873 21002 +20872 21002 21001 +20873 20874 21002 +20874 21003 21002 +20874 20875 21004 +20874 21004 21003 +20875 20876 21004 +20876 21005 21004 +20876 20877 21006 +20876 21006 21005 +20877 20878 21006 +20878 21007 21006 +20878 20879 21008 +20878 21008 21007 +20879 20880 21008 +20880 21009 21008 +20880 20881 21010 +20880 21010 21009 +20881 20882 21010 +20882 21011 21010 +20882 20883 21012 +20882 21012 21011 +20883 20884 21012 +20884 21013 21012 +20884 20885 21014 +20884 21014 21013 +20885 20886 21014 +20886 21015 21014 +20886 20887 21016 +20886 21016 21015 +20887 20888 21016 +20888 21017 21016 +20888 20889 21018 +20888 21018 21017 +20889 20890 21018 +20890 21019 21018 +20890 20891 21020 +20890 21020 21019 +20891 20892 21020 +20892 21021 21020 +20892 20893 21022 +20892 21022 21021 +20893 20894 21022 +20894 21023 21022 +20894 20895 21024 +20894 21024 21023 +20895 20896 21024 +20896 21025 21024 +20896 20897 21026 +20896 21026 21025 +20897 20898 21026 +20898 21027 21026 +20898 20899 21028 +20898 21028 21027 +20899 20900 21028 +20900 21029 21028 +20900 20901 21030 +20900 21030 21029 +20901 20902 21030 +20902 21031 21030 +20902 20903 21032 +20902 21032 21031 +20903 20904 21032 +20904 21033 21032 +20904 20905 21034 +20904 21034 21033 +20905 20906 21034 +20906 21035 21034 +20906 20907 21036 +20906 21036 21035 +20907 20908 21036 +20908 21037 21036 +20908 20909 21038 +20908 21038 21037 +20909 20910 21038 +20910 21039 21038 +20910 20911 21040 +20910 21040 21039 +20911 20912 21040 +20912 21041 21040 +20912 20913 21042 +20912 21042 21041 +20913 20914 21042 +20914 21043 21042 +20914 20915 21044 +20914 21044 21043 +20915 20916 21044 +20916 21045 21044 +20916 20917 21046 +20916 21046 21045 +20917 20918 21046 +20918 21047 21046 +20918 20919 21048 +20918 21048 21047 +20919 20920 21048 +20920 21049 21048 +20920 20921 21050 +20920 21050 21049 +20921 20922 21050 +20922 21051 21050 +20922 20923 21052 +20922 21052 21051 +20923 20924 21052 +20924 21053 21052 +20924 20925 21054 +20924 21054 21053 +20925 20926 21054 +20926 21055 21054 +20926 20927 21056 +20926 21056 21055 +20927 20928 21056 +20928 21057 21056 +20928 20929 21058 +20928 21058 21057 +20929 20930 21058 +20930 21059 21058 +20930 20931 21060 +20930 21060 21059 +20931 20932 21060 +20932 21061 21060 +20932 20933 21062 +20932 21062 21061 +20933 20934 21062 +20934 21063 21062 +20934 20935 21064 +20934 21064 21063 +20935 20936 21064 +20936 21065 21064 +20936 20937 21066 +20936 21066 21065 +20937 20938 21066 +20938 21067 21066 +20938 20939 21068 +20938 21068 21067 +20939 20940 21068 +20940 21069 21068 +20940 20941 21070 +20940 21070 21069 +20941 20942 21070 +20942 21071 21070 +20942 20943 21072 +20942 21072 21071 +20943 20944 21072 +20944 21073 21072 +20944 20945 21074 +20944 21074 21073 +20945 20946 21074 +20946 21075 21074 +20946 20947 21076 +20946 21076 21075 +20947 20948 21076 +20948 21077 21076 +20948 20949 21078 +20948 21078 21077 +20949 20950 21078 +20950 21079 21078 +20950 20951 21080 +20950 21080 21079 +20951 20952 21080 +20952 21081 21080 +20952 20953 21082 +20952 21082 21081 +20953 20954 21082 +20954 21083 21082 +20954 20955 21084 +20954 21084 21083 +20955 20956 21084 +20956 21085 21084 +20956 20957 21086 +20956 21086 21085 +20957 20958 21086 +20958 21087 21086 +20958 20959 21088 +20958 21088 21087 +20959 20960 21088 +20960 21089 21088 +20960 20961 21090 +20960 21090 21089 +20961 20962 21090 +20962 21091 21090 +20962 20963 21092 +20962 21092 21091 +20963 20964 21092 +20964 21093 21092 +20964 20965 21094 +20964 21094 21093 +20965 20966 21094 +20966 21095 21094 +20966 20967 21096 +20966 21096 21095 +20967 20968 21096 +20968 21097 21096 +20968 20969 21098 +20968 21098 21097 +20969 20970 21098 +20970 21099 21098 +20970 20971 21100 +20970 21100 21099 +20971 20972 21100 +20972 21101 21100 +20972 20973 21102 +20972 21102 21101 +20973 20974 21102 +20974 21103 21102 +20974 20975 21104 +20974 21104 21103 +20975 20976 21104 +20976 21105 21104 +20976 20977 21106 +20976 21106 21105 +20977 20978 21106 +20978 21107 21106 +20978 20979 21108 +20978 21108 21107 +20980 20981 21110 +20980 21110 21109 +20981 20982 21110 +20982 21111 21110 +20982 20983 21112 +20982 21112 21111 +20983 20984 21112 +20984 21113 21112 +20984 20985 21114 +20984 21114 21113 +20985 20986 21114 +20986 21115 21114 +20986 20987 21116 +20986 21116 21115 +20987 20988 21116 +20988 21117 21116 +20988 20989 21118 +20988 21118 21117 +20989 20990 21118 +20990 21119 21118 +20990 20991 21120 +20990 21120 21119 +20991 20992 21120 +20992 21121 21120 +20992 20993 21122 +20992 21122 21121 +20993 20994 21122 +20994 21123 21122 +20994 20995 21124 +20994 21124 21123 +20995 20996 21124 +20996 21125 21124 +20996 20997 21126 +20996 21126 21125 +20997 20998 21126 +20998 21127 21126 +20998 20999 21128 +20998 21128 21127 +20999 21000 21128 +21000 21129 21128 +21000 21001 21130 +21000 21130 21129 +21001 21002 21130 +21002 21131 21130 +21002 21003 21132 +21002 21132 21131 +21003 21004 21132 +21004 21133 21132 +21004 21005 21134 +21004 21134 21133 +21005 21006 21134 +21006 21135 21134 +21006 21007 21136 +21006 21136 21135 +21007 21008 21136 +21008 21137 21136 +21008 21009 21138 +21008 21138 21137 +21009 21010 21138 +21010 21139 21138 +21010 21011 21140 +21010 21140 21139 +21011 21012 21140 +21012 21141 21140 +21012 21013 21142 +21012 21142 21141 +21013 21014 21142 +21014 21143 21142 +21014 21015 21144 +21014 21144 21143 +21015 21016 21144 +21016 21145 21144 +21016 21017 21146 +21016 21146 21145 +21017 21018 21146 +21018 21147 21146 +21018 21019 21148 +21018 21148 21147 +21019 21020 21148 +21020 21149 21148 +21020 21021 21150 +21020 21150 21149 +21021 21022 21150 +21022 21151 21150 +21022 21023 21152 +21022 21152 21151 +21023 21024 21152 +21024 21153 21152 +21024 21025 21154 +21024 21154 21153 +21025 21026 21154 +21026 21155 21154 +21026 21027 21156 +21026 21156 21155 +21027 21028 21156 +21028 21157 21156 +21028 21029 21158 +21028 21158 21157 +21029 21030 21158 +21030 21159 21158 +21030 21031 21160 +21030 21160 21159 +21031 21032 21160 +21032 21161 21160 +21032 21033 21162 +21032 21162 21161 +21033 21034 21162 +21034 21163 21162 +21034 21035 21164 +21034 21164 21163 +21035 21036 21164 +21036 21165 21164 +21036 21037 21166 +21036 21166 21165 +21037 21038 21166 +21038 21167 21166 +21038 21039 21168 +21038 21168 21167 +21039 21040 21168 +21040 21169 21168 +21040 21041 21170 +21040 21170 21169 +21041 21042 21170 +21042 21171 21170 +21042 21043 21172 +21042 21172 21171 +21043 21044 21172 +21044 21173 21172 +21044 21045 21174 +21044 21174 21173 +21045 21046 21174 +21046 21175 21174 +21046 21047 21176 +21046 21176 21175 +21047 21048 21176 +21048 21177 21176 +21048 21049 21178 +21048 21178 21177 +21049 21050 21178 +21050 21179 21178 +21050 21051 21180 +21050 21180 21179 +21051 21052 21180 +21052 21181 21180 +21052 21053 21182 +21052 21182 21181 +21053 21054 21182 +21054 21183 21182 +21054 21055 21184 +21054 21184 21183 +21055 21056 21184 +21056 21185 21184 +21056 21057 21186 +21056 21186 21185 +21057 21058 21186 +21058 21187 21186 +21058 21059 21188 +21058 21188 21187 +21059 21060 21188 +21060 21189 21188 +21060 21061 21190 +21060 21190 21189 +21061 21062 21190 +21062 21191 21190 +21062 21063 21192 +21062 21192 21191 +21063 21064 21192 +21064 21193 21192 +21064 21065 21194 +21064 21194 21193 +21065 21066 21194 +21066 21195 21194 +21066 21067 21196 +21066 21196 21195 +21067 21068 21196 +21068 21197 21196 +21068 21069 21198 +21068 21198 21197 +21069 21070 21198 +21070 21199 21198 +21070 21071 21200 +21070 21200 21199 +21071 21072 21200 +21072 21201 21200 +21072 21073 21202 +21072 21202 21201 +21073 21074 21202 +21074 21203 21202 +21074 21075 21204 +21074 21204 21203 +21075 21076 21204 +21076 21205 21204 +21076 21077 21206 +21076 21206 21205 +21077 21078 21206 +21078 21207 21206 +21078 21079 21208 +21078 21208 21207 +21079 21080 21208 +21080 21209 21208 +21080 21081 21210 +21080 21210 21209 +21081 21082 21210 +21082 21211 21210 +21082 21083 21212 +21082 21212 21211 +21083 21084 21212 +21084 21213 21212 +21084 21085 21214 +21084 21214 21213 +21085 21086 21214 +21086 21215 21214 +21086 21087 21216 +21086 21216 21215 +21087 21088 21216 +21088 21217 21216 +21088 21089 21218 +21088 21218 21217 +21089 21090 21218 +21090 21219 21218 +21090 21091 21220 +21090 21220 21219 +21091 21092 21220 +21092 21221 21220 +21092 21093 21222 +21092 21222 21221 +21093 21094 21222 +21094 21223 21222 +21094 21095 21224 +21094 21224 21223 +21095 21096 21224 +21096 21225 21224 +21096 21097 21226 +21096 21226 21225 +21097 21098 21226 +21098 21227 21226 +21098 21099 21228 +21098 21228 21227 +21099 21100 21228 +21100 21229 21228 +21100 21101 21230 +21100 21230 21229 +21101 21102 21230 +21102 21231 21230 +21102 21103 21232 +21102 21232 21231 +21103 21104 21232 +21104 21233 21232 +21104 21105 21234 +21104 21234 21233 +21105 21106 21234 +21106 21235 21234 +21106 21107 21236 +21106 21236 21235 +21107 21108 21236 +21108 21237 21236 +21109 21110 21238 +21110 21239 21238 +21110 21111 21240 +21110 21240 21239 +21111 21112 21240 +21112 21241 21240 +21112 21113 21242 +21112 21242 21241 +21113 21114 21242 +21114 21243 21242 +21114 21115 21244 +21114 21244 21243 +21115 21116 21244 +21116 21245 21244 +21116 21117 21246 +21116 21246 21245 +21117 21118 21246 +21118 21247 21246 +21118 21119 21248 +21118 21248 21247 +21119 21120 21248 +21120 21249 21248 +21120 21121 21250 +21120 21250 21249 +21121 21122 21250 +21122 21251 21250 +21122 21123 21252 +21122 21252 21251 +21123 21124 21252 +21124 21253 21252 +21124 21125 21254 +21124 21254 21253 +21125 21126 21254 +21126 21255 21254 +21126 21127 21256 +21126 21256 21255 +21127 21128 21256 +21128 21257 21256 +21128 21129 21258 +21128 21258 21257 +21129 21130 21258 +21130 21259 21258 +21130 21131 21260 +21130 21260 21259 +21131 21132 21260 +21132 21261 21260 +21132 21133 21262 +21132 21262 21261 +21133 21134 21262 +21134 21263 21262 +21134 21135 21264 +21134 21264 21263 +21135 21136 21264 +21136 21265 21264 +21136 21137 21266 +21136 21266 21265 +21137 21138 21266 +21138 21267 21266 +21138 21139 21268 +21138 21268 21267 +21139 21140 21268 +21140 21269 21268 +21140 21141 21270 +21140 21270 21269 +21141 21142 21270 +21142 21271 21270 +21142 21143 21272 +21142 21272 21271 +21143 21144 21272 +21144 21273 21272 +21144 21145 21274 +21144 21274 21273 +21145 21146 21274 +21146 21275 21274 +21146 21147 21276 +21146 21276 21275 +21147 21148 21276 +21148 21277 21276 +21148 21149 21278 +21148 21278 21277 +21149 21150 21278 +21150 21279 21278 +21150 21151 21280 +21150 21280 21279 +21151 21152 21280 +21152 21281 21280 +21152 21153 21282 +21152 21282 21281 +21153 21154 21282 +21154 21283 21282 +21154 21155 21284 +21154 21284 21283 +21155 21156 21284 +21156 21285 21284 +21156 21157 21286 +21156 21286 21285 +21157 21158 21286 +21158 21287 21286 +21158 21159 21288 +21158 21288 21287 +21159 21160 21288 +21160 21289 21288 +21160 21161 21290 +21160 21290 21289 +21161 21162 21290 +21162 21291 21290 +21162 21163 21292 +21162 21292 21291 +21163 21164 21292 +21164 21293 21292 +21164 21165 21294 +21164 21294 21293 +21165 21166 21294 +21166 21295 21294 +21166 21167 21296 +21166 21296 21295 +21167 21168 21296 +21168 21297 21296 +21168 21169 21298 +21168 21298 21297 +21169 21170 21298 +21170 21299 21298 +21170 21171 21300 +21170 21300 21299 +21171 21172 21300 +21172 21301 21300 +21172 21173 21302 +21172 21302 21301 +21173 21174 21302 +21174 21303 21302 +21174 21175 21304 +21174 21304 21303 +21175 21176 21304 +21176 21305 21304 +21176 21177 21306 +21176 21306 21305 +21177 21178 21306 +21178 21307 21306 +21178 21179 21308 +21178 21308 21307 +21179 21180 21308 +21180 21309 21308 +21180 21181 21310 +21180 21310 21309 +21181 21182 21310 +21182 21311 21310 +21182 21183 21312 +21182 21312 21311 +21183 21184 21312 +21184 21313 21312 +21184 21185 21314 +21184 21314 21313 +21185 21186 21314 +21186 21315 21314 +21186 21187 21316 +21186 21316 21315 +21187 21188 21316 +21188 21317 21316 +21188 21189 21318 +21188 21318 21317 +21189 21190 21318 +21190 21319 21318 +21190 21191 21320 +21190 21320 21319 +21191 21192 21320 +21192 21321 21320 +21192 21193 21322 +21192 21322 21321 +21193 21194 21322 +21194 21323 21322 +21194 21195 21324 +21194 21324 21323 +21195 21196 21324 +21196 21325 21324 +21196 21197 21326 +21196 21326 21325 +21197 21198 21326 +21198 21327 21326 +21198 21199 21328 +21198 21328 21327 +21199 21200 21328 +21200 21329 21328 +21200 21201 21330 +21200 21330 21329 +21201 21202 21330 +21202 21331 21330 +21202 21203 21332 +21202 21332 21331 +21203 21204 21332 +21204 21333 21332 +21204 21205 21334 +21204 21334 21333 +21205 21206 21334 +21206 21335 21334 +21206 21207 21336 +21206 21336 21335 +21207 21208 21336 +21208 21337 21336 +21208 21209 21338 +21208 21338 21337 +21209 21210 21338 +21210 21339 21338 +21210 21211 21340 +21210 21340 21339 +21211 21212 21340 +21212 21341 21340 +21212 21213 21342 +21212 21342 21341 +21213 21214 21342 +21214 21343 21342 +21214 21215 21344 +21214 21344 21343 +21215 21216 21344 +21216 21345 21344 +21216 21217 21346 +21216 21346 21345 +21217 21218 21346 +21218 21347 21346 +21218 21219 21348 +21218 21348 21347 +21219 21220 21348 +21220 21349 21348 +21220 21221 21350 +21220 21350 21349 +21221 21222 21350 +21222 21351 21350 +21222 21223 21352 +21222 21352 21351 +21223 21224 21352 +21224 21353 21352 +21224 21225 21354 +21224 21354 21353 +21225 21226 21354 +21226 21355 21354 +21226 21227 21356 +21226 21356 21355 +21227 21228 21356 +21228 21357 21356 +21228 21229 21358 +21228 21358 21357 +21229 21230 21358 +21230 21359 21358 +21230 21231 21360 +21230 21360 21359 +21231 21232 21360 +21232 21361 21360 +21232 21233 21362 +21232 21362 21361 +21233 21234 21362 +21234 21363 21362 +21234 21235 21364 +21234 21364 21363 +21235 21236 21364 +21236 21365 21364 +21236 21237 21366 +21236 21366 21365 +21238 21239 21368 +21238 21368 21367 +21239 21240 21368 +21240 21369 21368 +21240 21241 21370 +21240 21370 21369 +21241 21242 21370 +21242 21371 21370 +21242 21243 21372 +21242 21372 21371 +21243 21244 21372 +21244 21373 21372 +21244 21245 21374 +21244 21374 21373 +21245 21246 21374 +21246 21375 21374 +21246 21247 21376 +21246 21376 21375 +21247 21248 21376 +21248 21377 21376 +21248 21249 21378 +21248 21378 21377 +21249 21250 21378 +21250 21379 21378 +21250 21251 21380 +21250 21380 21379 +21251 21252 21380 +21252 21381 21380 +21252 21253 21382 +21252 21382 21381 +21253 21254 21382 +21254 21383 21382 +21254 21255 21384 +21254 21384 21383 +21255 21256 21384 +21256 21385 21384 +21256 21257 21386 +21256 21386 21385 +21257 21258 21386 +21258 21387 21386 +21258 21259 21388 +21258 21388 21387 +21259 21260 21388 +21260 21389 21388 +21260 21261 21390 +21260 21390 21389 +21261 21262 21390 +21262 21391 21390 +21262 21263 21392 +21262 21392 21391 +21263 21264 21392 +21264 21393 21392 +21264 21265 21394 +21264 21394 21393 +21265 21266 21394 +21266 21395 21394 +21266 21267 21396 +21266 21396 21395 +21267 21268 21396 +21268 21397 21396 +21268 21269 21398 +21268 21398 21397 +21269 21270 21398 +21270 21399 21398 +21270 21271 21400 +21270 21400 21399 +21271 21272 21400 +21272 21401 21400 +21272 21273 21402 +21272 21402 21401 +21273 21274 21402 +21274 21403 21402 +21274 21275 21404 +21274 21404 21403 +21275 21276 21404 +21276 21405 21404 +21276 21277 21406 +21276 21406 21405 +21277 21278 21406 +21278 21407 21406 +21278 21279 21408 +21278 21408 21407 +21279 21280 21408 +21280 21409 21408 +21280 21281 21410 +21280 21410 21409 +21281 21282 21410 +21282 21411 21410 +21282 21283 21412 +21282 21412 21411 +21283 21284 21412 +21284 21413 21412 +21284 21285 21414 +21284 21414 21413 +21285 21286 21414 +21286 21415 21414 +21286 21287 21416 +21286 21416 21415 +21287 21288 21416 +21288 21417 21416 +21288 21289 21418 +21288 21418 21417 +21289 21290 21418 +21290 21419 21418 +21290 21291 21420 +21290 21420 21419 +21291 21292 21420 +21292 21421 21420 +21292 21293 21422 +21292 21422 21421 +21293 21294 21422 +21294 21423 21422 +21294 21295 21424 +21294 21424 21423 +21295 21296 21424 +21296 21425 21424 +21296 21297 21426 +21296 21426 21425 +21297 21298 21426 +21298 21427 21426 +21298 21299 21428 +21298 21428 21427 +21299 21300 21428 +21300 21429 21428 +21300 21301 21430 +21300 21430 21429 +21301 21302 21430 +21302 21431 21430 +21302 21303 21432 +21302 21432 21431 +21303 21304 21432 +21304 21433 21432 +21304 21305 21434 +21304 21434 21433 +21305 21306 21434 +21306 21435 21434 +21306 21307 21436 +21306 21436 21435 +21307 21308 21436 +21308 21437 21436 +21308 21309 21438 +21308 21438 21437 +21309 21310 21438 +21310 21439 21438 +21310 21311 21440 +21310 21440 21439 +21311 21312 21440 +21312 21441 21440 +21312 21313 21442 +21312 21442 21441 +21313 21314 21442 +21314 21443 21442 +21314 21315 21444 +21314 21444 21443 +21315 21316 21444 +21316 21445 21444 +21316 21317 21446 +21316 21446 21445 +21317 21318 21446 +21318 21447 21446 +21318 21319 21448 +21318 21448 21447 +21319 21320 21448 +21320 21449 21448 +21320 21321 21450 +21320 21450 21449 +21321 21322 21450 +21322 21451 21450 +21322 21323 21452 +21322 21452 21451 +21323 21324 21452 +21324 21453 21452 +21324 21325 21454 +21324 21454 21453 +21325 21326 21454 +21326 21455 21454 +21326 21327 21456 +21326 21456 21455 +21327 21328 21456 +21328 21457 21456 +21328 21329 21458 +21328 21458 21457 +21329 21330 21458 +21330 21459 21458 +21330 21331 21460 +21330 21460 21459 +21331 21332 21460 +21332 21461 21460 +21332 21333 21462 +21332 21462 21461 +21333 21334 21462 +21334 21463 21462 +21334 21335 21464 +21334 21464 21463 +21335 21336 21464 +21336 21465 21464 +21336 21337 21466 +21336 21466 21465 +21337 21338 21466 +21338 21467 21466 +21338 21339 21468 +21338 21468 21467 +21339 21340 21468 +21340 21469 21468 +21340 21341 21470 +21340 21470 21469 +21341 21342 21470 +21342 21471 21470 +21342 21343 21472 +21342 21472 21471 +21343 21344 21472 +21344 21473 21472 +21344 21345 21474 +21344 21474 21473 +21345 21346 21474 +21346 21475 21474 +21346 21347 21476 +21346 21476 21475 +21347 21348 21476 +21348 21477 21476 +21348 21349 21478 +21348 21478 21477 +21349 21350 21478 +21350 21479 21478 +21350 21351 21480 +21350 21480 21479 +21351 21352 21480 +21352 21481 21480 +21352 21353 21482 +21352 21482 21481 +21353 21354 21482 +21354 21483 21482 +21354 21355 21484 +21354 21484 21483 +21355 21356 21484 +21356 21485 21484 +21356 21357 21486 +21356 21486 21485 +21357 21358 21486 +21358 21487 21486 +21358 21359 21488 +21358 21488 21487 +21359 21360 21488 +21360 21489 21488 +21360 21361 21490 +21360 21490 21489 +21361 21362 21490 +21362 21491 21490 +21362 21363 21492 +21362 21492 21491 +21363 21364 21492 +21364 21493 21492 +21364 21365 21494 +21364 21494 21493 +21365 21366 21494 +21366 21495 21494 +21367 21368 21496 +21368 21497 21496 +21368 21369 21498 +21368 21498 21497 +21369 21370 21498 +21370 21499 21498 +21370 21371 21500 +21370 21500 21499 +21371 21372 21500 +21372 21501 21500 +21372 21373 21502 +21372 21502 21501 +21373 21374 21502 +21374 21503 21502 +21374 21375 21504 +21374 21504 21503 +21375 21376 21504 +21376 21505 21504 +21376 21377 21506 +21376 21506 21505 +21377 21378 21506 +21378 21507 21506 +21378 21379 21508 +21378 21508 21507 +21379 21380 21508 +21380 21509 21508 +21380 21381 21510 +21380 21510 21509 +21381 21382 21510 +21382 21511 21510 +21382 21383 21512 +21382 21512 21511 +21383 21384 21512 +21384 21513 21512 +21384 21385 21514 +21384 21514 21513 +21385 21386 21514 +21386 21515 21514 +21386 21387 21516 +21386 21516 21515 +21387 21388 21516 +21388 21517 21516 +21388 21389 21518 +21388 21518 21517 +21389 21390 21518 +21390 21519 21518 +21390 21391 21520 +21390 21520 21519 +21391 21392 21520 +21392 21521 21520 +21392 21393 21522 +21392 21522 21521 +21393 21394 21522 +21394 21523 21522 +21394 21395 21524 +21394 21524 21523 +21395 21396 21524 +21396 21525 21524 +21396 21397 21526 +21396 21526 21525 +21397 21398 21526 +21398 21527 21526 +21398 21399 21528 +21398 21528 21527 +21399 21400 21528 +21400 21529 21528 +21400 21401 21530 +21400 21530 21529 +21401 21402 21530 +21402 21531 21530 +21402 21403 21532 +21402 21532 21531 +21403 21404 21532 +21404 21533 21532 +21404 21405 21534 +21404 21534 21533 +21405 21406 21534 +21406 21535 21534 +21406 21407 21536 +21406 21536 21535 +21407 21408 21536 +21408 21537 21536 +21408 21409 21538 +21408 21538 21537 +21409 21410 21538 +21410 21539 21538 +21410 21411 21540 +21410 21540 21539 +21411 21412 21540 +21412 21541 21540 +21412 21413 21542 +21412 21542 21541 +21413 21414 21542 +21414 21543 21542 +21414 21415 21544 +21414 21544 21543 +21415 21416 21544 +21416 21545 21544 +21416 21417 21546 +21416 21546 21545 +21417 21418 21546 +21418 21547 21546 +21418 21419 21548 +21418 21548 21547 +21419 21420 21548 +21420 21549 21548 +21420 21421 21550 +21420 21550 21549 +21421 21422 21550 +21422 21551 21550 +21422 21423 21552 +21422 21552 21551 +21423 21424 21552 +21424 21553 21552 +21424 21425 21554 +21424 21554 21553 +21425 21426 21554 +21426 21555 21554 +21426 21427 21556 +21426 21556 21555 +21427 21428 21556 +21428 21557 21556 +21428 21429 21558 +21428 21558 21557 +21429 21430 21558 +21430 21559 21558 +21430 21431 21560 +21430 21560 21559 +21431 21432 21560 +21432 21561 21560 +21432 21433 21562 +21432 21562 21561 +21433 21434 21562 +21434 21563 21562 +21434 21435 21564 +21434 21564 21563 +21435 21436 21564 +21436 21565 21564 +21436 21437 21566 +21436 21566 21565 +21437 21438 21566 +21438 21567 21566 +21438 21439 21568 +21438 21568 21567 +21439 21440 21568 +21440 21569 21568 +21440 21441 21570 +21440 21570 21569 +21441 21442 21570 +21442 21571 21570 +21442 21443 21572 +21442 21572 21571 +21443 21444 21572 +21444 21573 21572 +21444 21445 21574 +21444 21574 21573 +21445 21446 21574 +21446 21575 21574 +21446 21447 21576 +21446 21576 21575 +21447 21448 21576 +21448 21577 21576 +21448 21449 21578 +21448 21578 21577 +21449 21450 21578 +21450 21579 21578 +21450 21451 21580 +21450 21580 21579 +21451 21452 21580 +21452 21581 21580 +21452 21453 21582 +21452 21582 21581 +21453 21454 21582 +21454 21583 21582 +21454 21455 21584 +21454 21584 21583 +21455 21456 21584 +21456 21585 21584 +21456 21457 21586 +21456 21586 21585 +21457 21458 21586 +21458 21587 21586 +21458 21459 21588 +21458 21588 21587 +21459 21460 21588 +21460 21589 21588 +21460 21461 21590 +21460 21590 21589 +21461 21462 21590 +21462 21591 21590 +21462 21463 21592 +21462 21592 21591 +21463 21464 21592 +21464 21593 21592 +21464 21465 21594 +21464 21594 21593 +21465 21466 21594 +21466 21595 21594 +21466 21467 21596 +21466 21596 21595 +21467 21468 21596 +21468 21597 21596 +21468 21469 21598 +21468 21598 21597 +21469 21470 21598 +21470 21599 21598 +21470 21471 21600 +21470 21600 21599 +21471 21472 21600 +21472 21601 21600 +21472 21473 21602 +21472 21602 21601 +21473 21474 21602 +21474 21603 21602 +21474 21475 21604 +21474 21604 21603 +21475 21476 21604 +21476 21605 21604 +21476 21477 21606 +21476 21606 21605 +21477 21478 21606 +21478 21607 21606 +21478 21479 21608 +21478 21608 21607 +21479 21480 21608 +21480 21609 21608 +21480 21481 21610 +21480 21610 21609 +21481 21482 21610 +21482 21611 21610 +21482 21483 21612 +21482 21612 21611 +21483 21484 21612 +21484 21613 21612 +21484 21485 21614 +21484 21614 21613 +21485 21486 21614 +21486 21615 21614 +21486 21487 21616 +21486 21616 21615 +21487 21488 21616 +21488 21617 21616 +21488 21489 21618 +21488 21618 21617 +21489 21490 21618 +21490 21619 21618 +21490 21491 21620 +21490 21620 21619 +21491 21492 21620 +21492 21621 21620 +21492 21493 21622 +21492 21622 21621 +21493 21494 21622 +21494 21623 21622 +21494 21495 21624 +21494 21624 21623 +21496 21497 21626 +21496 21626 21625 +21497 21498 21626 +21498 21627 21626 +21498 21499 21628 +21498 21628 21627 +21499 21500 21628 +21500 21629 21628 +21500 21501 21630 +21500 21630 21629 +21501 21502 21630 +21502 21631 21630 +21502 21503 21632 +21502 21632 21631 +21503 21504 21632 +21504 21633 21632 +21504 21505 21634 +21504 21634 21633 +21505 21506 21634 +21506 21635 21634 +21506 21507 21636 +21506 21636 21635 +21507 21508 21636 +21508 21637 21636 +21508 21509 21638 +21508 21638 21637 +21509 21510 21638 +21510 21639 21638 +21510 21511 21640 +21510 21640 21639 +21511 21512 21640 +21512 21641 21640 +21512 21513 21642 +21512 21642 21641 +21513 21514 21642 +21514 21643 21642 +21514 21515 21644 +21514 21644 21643 +21515 21516 21644 +21516 21645 21644 +21516 21517 21646 +21516 21646 21645 +21517 21518 21646 +21518 21647 21646 +21518 21519 21648 +21518 21648 21647 +21519 21520 21648 +21520 21649 21648 +21520 21521 21650 +21520 21650 21649 +21521 21522 21650 +21522 21651 21650 +21522 21523 21652 +21522 21652 21651 +21523 21524 21652 +21524 21653 21652 +21524 21525 21654 +21524 21654 21653 +21525 21526 21654 +21526 21655 21654 +21526 21527 21656 +21526 21656 21655 +21527 21528 21656 +21528 21657 21656 +21528 21529 21658 +21528 21658 21657 +21529 21530 21658 +21530 21659 21658 +21530 21531 21660 +21530 21660 21659 +21531 21532 21660 +21532 21661 21660 +21532 21533 21662 +21532 21662 21661 +21533 21534 21662 +21534 21663 21662 +21534 21535 21664 +21534 21664 21663 +21535 21536 21664 +21536 21665 21664 +21536 21537 21666 +21536 21666 21665 +21537 21538 21666 +21538 21667 21666 +21538 21539 21668 +21538 21668 21667 +21539 21540 21668 +21540 21669 21668 +21540 21541 21670 +21540 21670 21669 +21541 21542 21670 +21542 21671 21670 +21542 21543 21672 +21542 21672 21671 +21543 21544 21672 +21544 21673 21672 +21544 21545 21674 +21544 21674 21673 +21545 21546 21674 +21546 21675 21674 +21546 21547 21676 +21546 21676 21675 +21547 21548 21676 +21548 21677 21676 +21548 21549 21678 +21548 21678 21677 +21549 21550 21678 +21550 21679 21678 +21550 21551 21680 +21550 21680 21679 +21551 21552 21680 +21552 21681 21680 +21552 21553 21682 +21552 21682 21681 +21553 21554 21682 +21554 21683 21682 +21554 21555 21684 +21554 21684 21683 +21555 21556 21684 +21556 21685 21684 +21556 21557 21686 +21556 21686 21685 +21557 21558 21686 +21558 21687 21686 +21558 21559 21688 +21558 21688 21687 +21559 21560 21688 +21560 21689 21688 +21560 21561 21690 +21560 21690 21689 +21561 21562 21690 +21562 21691 21690 +21562 21563 21692 +21562 21692 21691 +21563 21564 21692 +21564 21693 21692 +21564 21565 21694 +21564 21694 21693 +21565 21566 21694 +21566 21695 21694 +21566 21567 21696 +21566 21696 21695 +21567 21568 21696 +21568 21697 21696 +21568 21569 21698 +21568 21698 21697 +21569 21570 21698 +21570 21699 21698 +21570 21571 21700 +21570 21700 21699 +21571 21572 21700 +21572 21701 21700 +21572 21573 21702 +21572 21702 21701 +21573 21574 21702 +21574 21703 21702 +21574 21575 21704 +21574 21704 21703 +21575 21576 21704 +21576 21705 21704 +21576 21577 21706 +21576 21706 21705 +21577 21578 21706 +21578 21707 21706 +21578 21579 21708 +21578 21708 21707 +21579 21580 21708 +21580 21709 21708 +21580 21581 21710 +21580 21710 21709 +21581 21582 21710 +21582 21711 21710 +21582 21583 21712 +21582 21712 21711 +21583 21584 21712 +21584 21713 21712 +21584 21585 21714 +21584 21714 21713 +21585 21586 21714 +21586 21715 21714 +21586 21587 21716 +21586 21716 21715 +21587 21588 21716 +21588 21717 21716 +21588 21589 21718 +21588 21718 21717 +21589 21590 21718 +21590 21719 21718 +21590 21591 21720 +21590 21720 21719 +21591 21592 21720 +21592 21721 21720 +21592 21593 21722 +21592 21722 21721 +21593 21594 21722 +21594 21723 21722 +21594 21595 21724 +21594 21724 21723 +21595 21596 21724 +21596 21725 21724 +21596 21597 21726 +21596 21726 21725 +21597 21598 21726 +21598 21727 21726 +21598 21599 21728 +21598 21728 21727 +21599 21600 21728 +21600 21729 21728 +21600 21601 21730 +21600 21730 21729 +21601 21602 21730 +21602 21731 21730 +21602 21603 21732 +21602 21732 21731 +21603 21604 21732 +21604 21733 21732 +21604 21605 21734 +21604 21734 21733 +21605 21606 21734 +21606 21735 21734 +21606 21607 21736 +21606 21736 21735 +21607 21608 21736 +21608 21737 21736 +21608 21609 21738 +21608 21738 21737 +21609 21610 21738 +21610 21739 21738 +21610 21611 21740 +21610 21740 21739 +21611 21612 21740 +21612 21741 21740 +21612 21613 21742 +21612 21742 21741 +21613 21614 21742 +21614 21743 21742 +21614 21615 21744 +21614 21744 21743 +21615 21616 21744 +21616 21745 21744 +21616 21617 21746 +21616 21746 21745 +21617 21618 21746 +21618 21747 21746 +21618 21619 21748 +21618 21748 21747 +21619 21620 21748 +21620 21749 21748 +21620 21621 21750 +21620 21750 21749 +21621 21622 21750 +21622 21751 21750 +21622 21623 21752 +21622 21752 21751 +21623 21624 21752 +21624 21753 21752 +21625 21626 1 +21626 2 1 +21626 21627 3 +21626 3 2 +21627 21628 3 +21628 4 3 +21628 21629 5 +21628 5 4 +21629 21630 5 +21630 6 5 +21630 21631 7 +21630 7 6 +21631 21632 7 +21632 8 7 +21632 21633 9 +21632 9 8 +21633 21634 9 +21634 10 9 +21634 21635 11 +21634 11 10 +21635 21636 11 +21636 12 11 +21636 21637 13 +21636 13 12 +21637 21638 13 +21638 14 13 +21638 21639 15 +21638 15 14 +21639 21640 15 +21640 16 15 +21640 21641 17 +21640 17 16 +21641 21642 17 +21642 18 17 +21642 21643 19 +21642 19 18 +21643 21644 19 +21644 20 19 +21644 21645 21 +21644 21 20 +21645 21646 21 +21646 22 21 +21646 21647 23 +21646 23 22 +21647 21648 23 +21648 24 23 +21648 21649 25 +21648 25 24 +21649 21650 25 +21650 26 25 +21650 21651 27 +21650 27 26 +21651 21652 27 +21652 28 27 +21652 21653 29 +21652 29 28 +21653 21654 29 +21654 30 29 +21654 21655 31 +21654 31 30 +21655 21656 31 +21656 32 31 +21656 21657 33 +21656 33 32 +21657 21658 33 +21658 34 33 +21658 21659 35 +21658 35 34 +21659 21660 35 +21660 36 35 +21660 21661 37 +21660 37 36 +21661 21662 37 +21662 38 37 +21662 21663 39 +21662 39 38 +21663 21664 39 +21664 40 39 +21664 21665 41 +21664 41 40 +21665 21666 41 +21666 42 41 +21666 21667 43 +21666 43 42 +21667 21668 43 +21668 44 43 +21668 21669 45 +21668 45 44 +21669 21670 45 +21670 46 45 +21670 21671 47 +21670 47 46 +21671 21672 47 +21672 48 47 +21672 21673 49 +21672 49 48 +21673 21674 49 +21674 50 49 +21674 21675 51 +21674 51 50 +21675 21676 51 +21676 52 51 +21676 21677 53 +21676 53 52 +21677 21678 53 +21678 54 53 +21678 21679 55 +21678 55 54 +21679 21680 55 +21680 56 55 +21680 21681 57 +21680 57 56 +21681 21682 57 +21682 58 57 +21682 21683 59 +21682 59 58 +21683 21684 59 +21684 60 59 +21684 21685 61 +21684 61 60 +21685 21686 61 +21686 62 61 +21686 21687 63 +21686 63 62 +21687 21688 63 +21688 64 63 +21688 21689 65 +21688 65 64 +21689 21690 65 +21690 66 65 +21690 21691 67 +21690 67 66 +21691 21692 67 +21692 68 67 +21692 21693 69 +21692 69 68 +21693 21694 69 +21694 70 69 +21694 21695 71 +21694 71 70 +21695 21696 71 +21696 72 71 +21696 21697 73 +21696 73 72 +21697 21698 73 +21698 74 73 +21698 21699 75 +21698 75 74 +21699 21700 75 +21700 76 75 +21700 21701 77 +21700 77 76 +21701 21702 77 +21702 78 77 +21702 21703 79 +21702 79 78 +21703 21704 79 +21704 80 79 +21704 21705 81 +21704 81 80 +21705 21706 81 +21706 82 81 +21706 21707 83 +21706 83 82 +21707 21708 83 +21708 84 83 +21708 21709 85 +21708 85 84 +21709 21710 85 +21710 86 85 +21710 21711 87 +21710 87 86 +21711 21712 87 +21712 88 87 +21712 21713 89 +21712 89 88 +21713 21714 89 +21714 90 89 +21714 21715 91 +21714 91 90 +21715 21716 91 +21716 92 91 +21716 21717 93 +21716 93 92 +21717 21718 93 +21718 94 93 +21718 21719 95 +21718 95 94 +21719 21720 95 +21720 96 95 +21720 21721 97 +21720 97 96 +21721 21722 97 +21722 98 97 +21722 21723 99 +21722 99 98 +21723 21724 99 +21724 100 99 +21724 21725 101 +21724 101 100 +21725 21726 101 +21726 102 101 +21726 21727 103 +21726 103 102 +21727 21728 103 +21728 104 103 +21728 21729 105 +21728 105 104 +21729 21730 105 +21730 106 105 +21730 21731 107 +21730 107 106 +21731 21732 107 +21732 108 107 +21732 21733 109 +21732 109 108 +21733 21734 109 +21734 110 109 +21734 21735 111 +21734 111 110 +21735 21736 111 +21736 112 111 +21736 21737 113 +21736 113 112 +21737 21738 113 +21738 114 113 +21738 21739 115 +21738 115 114 +21739 21740 115 +21740 116 115 +21740 21741 117 +21740 117 116 +21741 21742 117 +21742 118 117 +21742 21743 119 +21742 119 118 +21743 21744 119 +21744 120 119 +21744 21745 121 +21744 121 120 +21745 21746 121 +21746 122 121 +21746 21747 123 +21746 123 122 +21747 21748 123 +21748 124 123 +21748 21749 125 +21748 125 124 +21749 21750 125 +21750 126 125 +21750 21751 127 +21750 127 126 +21751 21752 127 +21752 128 127 +21752 21753 129 +21752 129 128 +21754 21755 21884 +21754 21884 21883 +21755 21756 21884 +21756 21885 21884 +21756 21757 21886 +21756 21886 21885 +21757 21758 21886 +21758 21887 21886 +21758 21759 21888 +21758 21888 21887 +21759 21760 21888 +21760 21889 21888 +21760 21761 21890 +21760 21890 21889 +21761 21762 21890 +21762 21891 21890 +21762 21763 21892 +21762 21892 21891 +21763 21764 21892 +21764 21893 21892 +21764 21765 21894 +21764 21894 21893 +21765 21766 21894 +21766 21895 21894 +21766 21767 21896 +21766 21896 21895 +21767 21768 21896 +21768 21897 21896 +21768 21769 21898 +21768 21898 21897 +21769 21770 21898 +21770 21899 21898 +21770 21771 21900 +21770 21900 21899 +21771 21772 21900 +21772 21901 21900 +21772 21773 21902 +21772 21902 21901 +21773 21774 21902 +21774 21903 21902 +21774 21775 21904 +21774 21904 21903 +21775 21776 21904 +21776 21905 21904 +21776 21777 21906 +21776 21906 21905 +21777 21778 21906 +21778 21907 21906 +21778 21779 21908 +21778 21908 21907 +21779 21780 21908 +21780 21909 21908 +21780 21781 21910 +21780 21910 21909 +21781 21782 21910 +21782 21911 21910 +21782 21783 21912 +21782 21912 21911 +21783 21784 21912 +21784 21913 21912 +21784 21785 21914 +21784 21914 21913 +21785 21786 21914 +21786 21915 21914 +21786 21787 21916 +21786 21916 21915 +21787 21788 21916 +21788 21917 21916 +21788 21789 21918 +21788 21918 21917 +21789 21790 21918 +21790 21919 21918 +21790 21791 21920 +21790 21920 21919 +21791 21792 21920 +21792 21921 21920 +21792 21793 21922 +21792 21922 21921 +21793 21794 21922 +21794 21923 21922 +21794 21795 21924 +21794 21924 21923 +21795 21796 21924 +21796 21925 21924 +21796 21797 21926 +21796 21926 21925 +21797 21798 21926 +21798 21927 21926 +21798 21799 21928 +21798 21928 21927 +21799 21800 21928 +21800 21929 21928 +21800 21801 21930 +21800 21930 21929 +21801 21802 21930 +21802 21931 21930 +21802 21803 21932 +21802 21932 21931 +21803 21804 21932 +21804 21933 21932 +21804 21805 21934 +21804 21934 21933 +21805 21806 21934 +21806 21935 21934 +21806 21807 21936 +21806 21936 21935 +21807 21808 21936 +21808 21937 21936 +21808 21809 21938 +21808 21938 21937 +21809 21810 21938 +21810 21939 21938 +21810 21811 21940 +21810 21940 21939 +21811 21812 21940 +21812 21941 21940 +21812 21813 21942 +21812 21942 21941 +21813 21814 21942 +21814 21943 21942 +21814 21815 21944 +21814 21944 21943 +21815 21816 21944 +21816 21945 21944 +21816 21817 21946 +21816 21946 21945 +21817 21818 21946 +21818 21947 21946 +21818 21819 21948 +21818 21948 21947 +21819 21820 21948 +21820 21949 21948 +21820 21821 21950 +21820 21950 21949 +21821 21822 21950 +21822 21951 21950 +21822 21823 21952 +21822 21952 21951 +21823 21824 21952 +21824 21953 21952 +21824 21825 21954 +21824 21954 21953 +21825 21826 21954 +21826 21955 21954 +21826 21827 21956 +21826 21956 21955 +21827 21828 21956 +21828 21957 21956 +21828 21829 21958 +21828 21958 21957 +21829 21830 21958 +21830 21959 21958 +21830 21831 21960 +21830 21960 21959 +21831 21832 21960 +21832 21961 21960 +21832 21833 21962 +21832 21962 21961 +21833 21834 21962 +21834 21963 21962 +21834 21835 21964 +21834 21964 21963 +21835 21836 21964 +21836 21965 21964 +21836 21837 21966 +21836 21966 21965 +21837 21838 21966 +21838 21967 21966 +21838 21839 21968 +21838 21968 21967 +21839 21840 21968 +21840 21969 21968 +21840 21841 21970 +21840 21970 21969 +21841 21842 21970 +21842 21971 21970 +21842 21843 21972 +21842 21972 21971 +21843 21844 21972 +21844 21973 21972 +21844 21845 21974 +21844 21974 21973 +21845 21846 21974 +21846 21975 21974 +21846 21847 21976 +21846 21976 21975 +21847 21848 21976 +21848 21977 21976 +21848 21849 21978 +21848 21978 21977 +21849 21850 21978 +21850 21979 21978 +21850 21851 21980 +21850 21980 21979 +21851 21852 21980 +21852 21981 21980 +21852 21853 21982 +21852 21982 21981 +21853 21854 21982 +21854 21983 21982 +21854 21855 21984 +21854 21984 21983 +21855 21856 21984 +21856 21985 21984 +21856 21857 21986 +21856 21986 21985 +21857 21858 21986 +21858 21987 21986 +21858 21859 21988 +21858 21988 21987 +21859 21860 21988 +21860 21989 21988 +21860 21861 21990 +21860 21990 21989 +21861 21862 21990 +21862 21991 21990 +21862 21863 21992 +21862 21992 21991 +21863 21864 21992 +21864 21993 21992 +21864 21865 21994 +21864 21994 21993 +21865 21866 21994 +21866 21995 21994 +21866 21867 21996 +21866 21996 21995 +21867 21868 21996 +21868 21997 21996 +21868 21869 21998 +21868 21998 21997 +21869 21870 21998 +21870 21999 21998 +21870 21871 22000 +21870 22000 21999 +21871 21872 22000 +21872 22001 22000 +21872 21873 22002 +21872 22002 22001 +21873 21874 22002 +21874 22003 22002 +21874 21875 22004 +21874 22004 22003 +21875 21876 22004 +21876 22005 22004 +21876 21877 22006 +21876 22006 22005 +21877 21878 22006 +21878 22007 22006 +21878 21879 22008 +21878 22008 22007 +21879 21880 22008 +21880 22009 22008 +21880 21881 22010 +21880 22010 22009 +21881 21882 22010 +21882 22011 22010 +21883 21884 22012 +21884 22013 22012 +21884 21885 22014 +21884 22014 22013 +21885 21886 22014 +21886 22015 22014 +21886 21887 22016 +21886 22016 22015 +21887 21888 22016 +21888 22017 22016 +21888 21889 22018 +21888 22018 22017 +21889 21890 22018 +21890 22019 22018 +21890 21891 22020 +21890 22020 22019 +21891 21892 22020 +21892 22021 22020 +21892 21893 22022 +21892 22022 22021 +21893 21894 22022 +21894 22023 22022 +21894 21895 22024 +21894 22024 22023 +21895 21896 22024 +21896 22025 22024 +21896 21897 22026 +21896 22026 22025 +21897 21898 22026 +21898 22027 22026 +21898 21899 22028 +21898 22028 22027 +21899 21900 22028 +21900 22029 22028 +21900 21901 22030 +21900 22030 22029 +21901 21902 22030 +21902 22031 22030 +21902 21903 22032 +21902 22032 22031 +21903 21904 22032 +21904 22033 22032 +21904 21905 22034 +21904 22034 22033 +21905 21906 22034 +21906 22035 22034 +21906 21907 22036 +21906 22036 22035 +21907 21908 22036 +21908 22037 22036 +21908 21909 22038 +21908 22038 22037 +21909 21910 22038 +21910 22039 22038 +21910 21911 22040 +21910 22040 22039 +21911 21912 22040 +21912 22041 22040 +21912 21913 22042 +21912 22042 22041 +21913 21914 22042 +21914 22043 22042 +21914 21915 22044 +21914 22044 22043 +21915 21916 22044 +21916 22045 22044 +21916 21917 22046 +21916 22046 22045 +21917 21918 22046 +21918 22047 22046 +21918 21919 22048 +21918 22048 22047 +21919 21920 22048 +21920 22049 22048 +21920 21921 22050 +21920 22050 22049 +21921 21922 22050 +21922 22051 22050 +21922 21923 22052 +21922 22052 22051 +21923 21924 22052 +21924 22053 22052 +21924 21925 22054 +21924 22054 22053 +21925 21926 22054 +21926 22055 22054 +21926 21927 22056 +21926 22056 22055 +21927 21928 22056 +21928 22057 22056 +21928 21929 22058 +21928 22058 22057 +21929 21930 22058 +21930 22059 22058 +21930 21931 22060 +21930 22060 22059 +21931 21932 22060 +21932 22061 22060 +21932 21933 22062 +21932 22062 22061 +21933 21934 22062 +21934 22063 22062 +21934 21935 22064 +21934 22064 22063 +21935 21936 22064 +21936 22065 22064 +21936 21937 22066 +21936 22066 22065 +21937 21938 22066 +21938 22067 22066 +21938 21939 22068 +21938 22068 22067 +21939 21940 22068 +21940 22069 22068 +21940 21941 22070 +21940 22070 22069 +21941 21942 22070 +21942 22071 22070 +21942 21943 22072 +21942 22072 22071 +21943 21944 22072 +21944 22073 22072 +21944 21945 22074 +21944 22074 22073 +21945 21946 22074 +21946 22075 22074 +21946 21947 22076 +21946 22076 22075 +21947 21948 22076 +21948 22077 22076 +21948 21949 22078 +21948 22078 22077 +21949 21950 22078 +21950 22079 22078 +21950 21951 22080 +21950 22080 22079 +21951 21952 22080 +21952 22081 22080 +21952 21953 22082 +21952 22082 22081 +21953 21954 22082 +21954 22083 22082 +21954 21955 22084 +21954 22084 22083 +21955 21956 22084 +21956 22085 22084 +21956 21957 22086 +21956 22086 22085 +21957 21958 22086 +21958 22087 22086 +21958 21959 22088 +21958 22088 22087 +21959 21960 22088 +21960 22089 22088 +21960 21961 22090 +21960 22090 22089 +21961 21962 22090 +21962 22091 22090 +21962 21963 22092 +21962 22092 22091 +21963 21964 22092 +21964 22093 22092 +21964 21965 22094 +21964 22094 22093 +21965 21966 22094 +21966 22095 22094 +21966 21967 22096 +21966 22096 22095 +21967 21968 22096 +21968 22097 22096 +21968 21969 22098 +21968 22098 22097 +21969 21970 22098 +21970 22099 22098 +21970 21971 22100 +21970 22100 22099 +21971 21972 22100 +21972 22101 22100 +21972 21973 22102 +21972 22102 22101 +21973 21974 22102 +21974 22103 22102 +21974 21975 22104 +21974 22104 22103 +21975 21976 22104 +21976 22105 22104 +21976 21977 22106 +21976 22106 22105 +21977 21978 22106 +21978 22107 22106 +21978 21979 22108 +21978 22108 22107 +21979 21980 22108 +21980 22109 22108 +21980 21981 22110 +21980 22110 22109 +21981 21982 22110 +21982 22111 22110 +21982 21983 22112 +21982 22112 22111 +21983 21984 22112 +21984 22113 22112 +21984 21985 22114 +21984 22114 22113 +21985 21986 22114 +21986 22115 22114 +21986 21987 22116 +21986 22116 22115 +21987 21988 22116 +21988 22117 22116 +21988 21989 22118 +21988 22118 22117 +21989 21990 22118 +21990 22119 22118 +21990 21991 22120 +21990 22120 22119 +21991 21992 22120 +21992 22121 22120 +21992 21993 22122 +21992 22122 22121 +21993 21994 22122 +21994 22123 22122 +21994 21995 22124 +21994 22124 22123 +21995 21996 22124 +21996 22125 22124 +21996 21997 22126 +21996 22126 22125 +21997 21998 22126 +21998 22127 22126 +21998 21999 22128 +21998 22128 22127 +21999 22000 22128 +22000 22129 22128 +22000 22001 22130 +22000 22130 22129 +22001 22002 22130 +22002 22131 22130 +22002 22003 22132 +22002 22132 22131 +22003 22004 22132 +22004 22133 22132 +22004 22005 22134 +22004 22134 22133 +22005 22006 22134 +22006 22135 22134 +22006 22007 22136 +22006 22136 22135 +22007 22008 22136 +22008 22137 22136 +22008 22009 22138 +22008 22138 22137 +22009 22010 22138 +22010 22139 22138 +22010 22011 22140 +22010 22140 22139 +22012 22013 22142 +22012 22142 22141 +22013 22014 22142 +22014 22143 22142 +22014 22015 22144 +22014 22144 22143 +22015 22016 22144 +22016 22145 22144 +22016 22017 22146 +22016 22146 22145 +22017 22018 22146 +22018 22147 22146 +22018 22019 22148 +22018 22148 22147 +22019 22020 22148 +22020 22149 22148 +22020 22021 22150 +22020 22150 22149 +22021 22022 22150 +22022 22151 22150 +22022 22023 22152 +22022 22152 22151 +22023 22024 22152 +22024 22153 22152 +22024 22025 22154 +22024 22154 22153 +22025 22026 22154 +22026 22155 22154 +22026 22027 22156 +22026 22156 22155 +22027 22028 22156 +22028 22157 22156 +22028 22029 22158 +22028 22158 22157 +22029 22030 22158 +22030 22159 22158 +22030 22031 22160 +22030 22160 22159 +22031 22032 22160 +22032 22161 22160 +22032 22033 22162 +22032 22162 22161 +22033 22034 22162 +22034 22163 22162 +22034 22035 22164 +22034 22164 22163 +22035 22036 22164 +22036 22165 22164 +22036 22037 22166 +22036 22166 22165 +22037 22038 22166 +22038 22167 22166 +22038 22039 22168 +22038 22168 22167 +22039 22040 22168 +22040 22169 22168 +22040 22041 22170 +22040 22170 22169 +22041 22042 22170 +22042 22171 22170 +22042 22043 22172 +22042 22172 22171 +22043 22044 22172 +22044 22173 22172 +22044 22045 22174 +22044 22174 22173 +22045 22046 22174 +22046 22175 22174 +22046 22047 22176 +22046 22176 22175 +22047 22048 22176 +22048 22177 22176 +22048 22049 22178 +22048 22178 22177 +22049 22050 22178 +22050 22179 22178 +22050 22051 22180 +22050 22180 22179 +22051 22052 22180 +22052 22181 22180 +22052 22053 22182 +22052 22182 22181 +22053 22054 22182 +22054 22183 22182 +22054 22055 22184 +22054 22184 22183 +22055 22056 22184 +22056 22185 22184 +22056 22057 22186 +22056 22186 22185 +22057 22058 22186 +22058 22187 22186 +22058 22059 22188 +22058 22188 22187 +22059 22060 22188 +22060 22189 22188 +22060 22061 22190 +22060 22190 22189 +22061 22062 22190 +22062 22191 22190 +22062 22063 22192 +22062 22192 22191 +22063 22064 22192 +22064 22193 22192 +22064 22065 22194 +22064 22194 22193 +22065 22066 22194 +22066 22195 22194 +22066 22067 22196 +22066 22196 22195 +22067 22068 22196 +22068 22197 22196 +22068 22069 22198 +22068 22198 22197 +22069 22070 22198 +22070 22199 22198 +22070 22071 22200 +22070 22200 22199 +22071 22072 22200 +22072 22201 22200 +22072 22073 22202 +22072 22202 22201 +22073 22074 22202 +22074 22203 22202 +22074 22075 22204 +22074 22204 22203 +22075 22076 22204 +22076 22205 22204 +22076 22077 22206 +22076 22206 22205 +22077 22078 22206 +22078 22207 22206 +22078 22079 22208 +22078 22208 22207 +22079 22080 22208 +22080 22209 22208 +22080 22081 22210 +22080 22210 22209 +22081 22082 22210 +22082 22211 22210 +22082 22083 22212 +22082 22212 22211 +22083 22084 22212 +22084 22213 22212 +22084 22085 22214 +22084 22214 22213 +22085 22086 22214 +22086 22215 22214 +22086 22087 22216 +22086 22216 22215 +22087 22088 22216 +22088 22217 22216 +22088 22089 22218 +22088 22218 22217 +22089 22090 22218 +22090 22219 22218 +22090 22091 22220 +22090 22220 22219 +22091 22092 22220 +22092 22221 22220 +22092 22093 22222 +22092 22222 22221 +22093 22094 22222 +22094 22223 22222 +22094 22095 22224 +22094 22224 22223 +22095 22096 22224 +22096 22225 22224 +22096 22097 22226 +22096 22226 22225 +22097 22098 22226 +22098 22227 22226 +22098 22099 22228 +22098 22228 22227 +22099 22100 22228 +22100 22229 22228 +22100 22101 22230 +22100 22230 22229 +22101 22102 22230 +22102 22231 22230 +22102 22103 22232 +22102 22232 22231 +22103 22104 22232 +22104 22233 22232 +22104 22105 22234 +22104 22234 22233 +22105 22106 22234 +22106 22235 22234 +22106 22107 22236 +22106 22236 22235 +22107 22108 22236 +22108 22237 22236 +22108 22109 22238 +22108 22238 22237 +22109 22110 22238 +22110 22239 22238 +22110 22111 22240 +22110 22240 22239 +22111 22112 22240 +22112 22241 22240 +22112 22113 22242 +22112 22242 22241 +22113 22114 22242 +22114 22243 22242 +22114 22115 22244 +22114 22244 22243 +22115 22116 22244 +22116 22245 22244 +22116 22117 22246 +22116 22246 22245 +22117 22118 22246 +22118 22247 22246 +22118 22119 22248 +22118 22248 22247 +22119 22120 22248 +22120 22249 22248 +22120 22121 22250 +22120 22250 22249 +22121 22122 22250 +22122 22251 22250 +22122 22123 22252 +22122 22252 22251 +22123 22124 22252 +22124 22253 22252 +22124 22125 22254 +22124 22254 22253 +22125 22126 22254 +22126 22255 22254 +22126 22127 22256 +22126 22256 22255 +22127 22128 22256 +22128 22257 22256 +22128 22129 22258 +22128 22258 22257 +22129 22130 22258 +22130 22259 22258 +22130 22131 22260 +22130 22260 22259 +22131 22132 22260 +22132 22261 22260 +22132 22133 22262 +22132 22262 22261 +22133 22134 22262 +22134 22263 22262 +22134 22135 22264 +22134 22264 22263 +22135 22136 22264 +22136 22265 22264 +22136 22137 22266 +22136 22266 22265 +22137 22138 22266 +22138 22267 22266 +22138 22139 22268 +22138 22268 22267 +22139 22140 22268 +22140 22269 22268 +22141 22142 22270 +22142 22271 22270 +22142 22143 22272 +22142 22272 22271 +22143 22144 22272 +22144 22273 22272 +22144 22145 22274 +22144 22274 22273 +22145 22146 22274 +22146 22275 22274 +22146 22147 22276 +22146 22276 22275 +22147 22148 22276 +22148 22277 22276 +22148 22149 22278 +22148 22278 22277 +22149 22150 22278 +22150 22279 22278 +22150 22151 22280 +22150 22280 22279 +22151 22152 22280 +22152 22281 22280 +22152 22153 22282 +22152 22282 22281 +22153 22154 22282 +22154 22283 22282 +22154 22155 22284 +22154 22284 22283 +22155 22156 22284 +22156 22285 22284 +22156 22157 22286 +22156 22286 22285 +22157 22158 22286 +22158 22287 22286 +22158 22159 22288 +22158 22288 22287 +22159 22160 22288 +22160 22289 22288 +22160 22161 22290 +22160 22290 22289 +22161 22162 22290 +22162 22291 22290 +22162 22163 22292 +22162 22292 22291 +22163 22164 22292 +22164 22293 22292 +22164 22165 22294 +22164 22294 22293 +22165 22166 22294 +22166 22295 22294 +22166 22167 22296 +22166 22296 22295 +22167 22168 22296 +22168 22297 22296 +22168 22169 22298 +22168 22298 22297 +22169 22170 22298 +22170 22299 22298 +22170 22171 22300 +22170 22300 22299 +22171 22172 22300 +22172 22301 22300 +22172 22173 22302 +22172 22302 22301 +22173 22174 22302 +22174 22303 22302 +22174 22175 22304 +22174 22304 22303 +22175 22176 22304 +22176 22305 22304 +22176 22177 22306 +22176 22306 22305 +22177 22178 22306 +22178 22307 22306 +22178 22179 22308 +22178 22308 22307 +22179 22180 22308 +22180 22309 22308 +22180 22181 22310 +22180 22310 22309 +22181 22182 22310 +22182 22311 22310 +22182 22183 22312 +22182 22312 22311 +22183 22184 22312 +22184 22313 22312 +22184 22185 22314 +22184 22314 22313 +22185 22186 22314 +22186 22315 22314 +22186 22187 22316 +22186 22316 22315 +22187 22188 22316 +22188 22317 22316 +22188 22189 22318 +22188 22318 22317 +22189 22190 22318 +22190 22319 22318 +22190 22191 22320 +22190 22320 22319 +22191 22192 22320 +22192 22321 22320 +22192 22193 22322 +22192 22322 22321 +22193 22194 22322 +22194 22323 22322 +22194 22195 22324 +22194 22324 22323 +22195 22196 22324 +22196 22325 22324 +22196 22197 22326 +22196 22326 22325 +22197 22198 22326 +22198 22327 22326 +22198 22199 22328 +22198 22328 22327 +22199 22200 22328 +22200 22329 22328 +22200 22201 22330 +22200 22330 22329 +22201 22202 22330 +22202 22331 22330 +22202 22203 22332 +22202 22332 22331 +22203 22204 22332 +22204 22333 22332 +22204 22205 22334 +22204 22334 22333 +22205 22206 22334 +22206 22335 22334 +22206 22207 22336 +22206 22336 22335 +22207 22208 22336 +22208 22337 22336 +22208 22209 22338 +22208 22338 22337 +22209 22210 22338 +22210 22339 22338 +22210 22211 22340 +22210 22340 22339 +22211 22212 22340 +22212 22341 22340 +22212 22213 22342 +22212 22342 22341 +22213 22214 22342 +22214 22343 22342 +22214 22215 22344 +22214 22344 22343 +22215 22216 22344 +22216 22345 22344 +22216 22217 22346 +22216 22346 22345 +22217 22218 22346 +22218 22347 22346 +22218 22219 22348 +22218 22348 22347 +22219 22220 22348 +22220 22349 22348 +22220 22221 22350 +22220 22350 22349 +22221 22222 22350 +22222 22351 22350 +22222 22223 22352 +22222 22352 22351 +22223 22224 22352 +22224 22353 22352 +22224 22225 22354 +22224 22354 22353 +22225 22226 22354 +22226 22355 22354 +22226 22227 22356 +22226 22356 22355 +22227 22228 22356 +22228 22357 22356 +22228 22229 22358 +22228 22358 22357 +22229 22230 22358 +22230 22359 22358 +22230 22231 22360 +22230 22360 22359 +22231 22232 22360 +22232 22361 22360 +22232 22233 22362 +22232 22362 22361 +22233 22234 22362 +22234 22363 22362 +22234 22235 22364 +22234 22364 22363 +22235 22236 22364 +22236 22365 22364 +22236 22237 22366 +22236 22366 22365 +22237 22238 22366 +22238 22367 22366 +22238 22239 22368 +22238 22368 22367 +22239 22240 22368 +22240 22369 22368 +22240 22241 22370 +22240 22370 22369 +22241 22242 22370 +22242 22371 22370 +22242 22243 22372 +22242 22372 22371 +22243 22244 22372 +22244 22373 22372 +22244 22245 22374 +22244 22374 22373 +22245 22246 22374 +22246 22375 22374 +22246 22247 22376 +22246 22376 22375 +22247 22248 22376 +22248 22377 22376 +22248 22249 22378 +22248 22378 22377 +22249 22250 22378 +22250 22379 22378 +22250 22251 22380 +22250 22380 22379 +22251 22252 22380 +22252 22381 22380 +22252 22253 22382 +22252 22382 22381 +22253 22254 22382 +22254 22383 22382 +22254 22255 22384 +22254 22384 22383 +22255 22256 22384 +22256 22385 22384 +22256 22257 22386 +22256 22386 22385 +22257 22258 22386 +22258 22387 22386 +22258 22259 22388 +22258 22388 22387 +22259 22260 22388 +22260 22389 22388 +22260 22261 22390 +22260 22390 22389 +22261 22262 22390 +22262 22391 22390 +22262 22263 22392 +22262 22392 22391 +22263 22264 22392 +22264 22393 22392 +22264 22265 22394 +22264 22394 22393 +22265 22266 22394 +22266 22395 22394 +22266 22267 22396 +22266 22396 22395 +22267 22268 22396 +22268 22397 22396 +22268 22269 22398 +22268 22398 22397 +22270 22271 22400 +22270 22400 22399 +22271 22272 22400 +22272 22401 22400 +22272 22273 22402 +22272 22402 22401 +22273 22274 22402 +22274 22403 22402 +22274 22275 22404 +22274 22404 22403 +22275 22276 22404 +22276 22405 22404 +22276 22277 22406 +22276 22406 22405 +22277 22278 22406 +22278 22407 22406 +22278 22279 22408 +22278 22408 22407 +22279 22280 22408 +22280 22409 22408 +22280 22281 22410 +22280 22410 22409 +22281 22282 22410 +22282 22411 22410 +22282 22283 22412 +22282 22412 22411 +22283 22284 22412 +22284 22413 22412 +22284 22285 22414 +22284 22414 22413 +22285 22286 22414 +22286 22415 22414 +22286 22287 22416 +22286 22416 22415 +22287 22288 22416 +22288 22417 22416 +22288 22289 22418 +22288 22418 22417 +22289 22290 22418 +22290 22419 22418 +22290 22291 22420 +22290 22420 22419 +22291 22292 22420 +22292 22421 22420 +22292 22293 22422 +22292 22422 22421 +22293 22294 22422 +22294 22423 22422 +22294 22295 22424 +22294 22424 22423 +22295 22296 22424 +22296 22425 22424 +22296 22297 22426 +22296 22426 22425 +22297 22298 22426 +22298 22427 22426 +22298 22299 22428 +22298 22428 22427 +22299 22300 22428 +22300 22429 22428 +22300 22301 22430 +22300 22430 22429 +22301 22302 22430 +22302 22431 22430 +22302 22303 22432 +22302 22432 22431 +22303 22304 22432 +22304 22433 22432 +22304 22305 22434 +22304 22434 22433 +22305 22306 22434 +22306 22435 22434 +22306 22307 22436 +22306 22436 22435 +22307 22308 22436 +22308 22437 22436 +22308 22309 22438 +22308 22438 22437 +22309 22310 22438 +22310 22439 22438 +22310 22311 22440 +22310 22440 22439 +22311 22312 22440 +22312 22441 22440 +22312 22313 22442 +22312 22442 22441 +22313 22314 22442 +22314 22443 22442 +22314 22315 22444 +22314 22444 22443 +22315 22316 22444 +22316 22445 22444 +22316 22317 22446 +22316 22446 22445 +22317 22318 22446 +22318 22447 22446 +22318 22319 22448 +22318 22448 22447 +22319 22320 22448 +22320 22449 22448 +22320 22321 22450 +22320 22450 22449 +22321 22322 22450 +22322 22451 22450 +22322 22323 22452 +22322 22452 22451 +22323 22324 22452 +22324 22453 22452 +22324 22325 22454 +22324 22454 22453 +22325 22326 22454 +22326 22455 22454 +22326 22327 22456 +22326 22456 22455 +22327 22328 22456 +22328 22457 22456 +22328 22329 22458 +22328 22458 22457 +22329 22330 22458 +22330 22459 22458 +22330 22331 22460 +22330 22460 22459 +22331 22332 22460 +22332 22461 22460 +22332 22333 22462 +22332 22462 22461 +22333 22334 22462 +22334 22463 22462 +22334 22335 22464 +22334 22464 22463 +22335 22336 22464 +22336 22465 22464 +22336 22337 22466 +22336 22466 22465 +22337 22338 22466 +22338 22467 22466 +22338 22339 22468 +22338 22468 22467 +22339 22340 22468 +22340 22469 22468 +22340 22341 22470 +22340 22470 22469 +22341 22342 22470 +22342 22471 22470 +22342 22343 22472 +22342 22472 22471 +22343 22344 22472 +22344 22473 22472 +22344 22345 22474 +22344 22474 22473 +22345 22346 22474 +22346 22475 22474 +22346 22347 22476 +22346 22476 22475 +22347 22348 22476 +22348 22477 22476 +22348 22349 22478 +22348 22478 22477 +22349 22350 22478 +22350 22479 22478 +22350 22351 22480 +22350 22480 22479 +22351 22352 22480 +22352 22481 22480 +22352 22353 22482 +22352 22482 22481 +22353 22354 22482 +22354 22483 22482 +22354 22355 22484 +22354 22484 22483 +22355 22356 22484 +22356 22485 22484 +22356 22357 22486 +22356 22486 22485 +22357 22358 22486 +22358 22487 22486 +22358 22359 22488 +22358 22488 22487 +22359 22360 22488 +22360 22489 22488 +22360 22361 22490 +22360 22490 22489 +22361 22362 22490 +22362 22491 22490 +22362 22363 22492 +22362 22492 22491 +22363 22364 22492 +22364 22493 22492 +22364 22365 22494 +22364 22494 22493 +22365 22366 22494 +22366 22495 22494 +22366 22367 22496 +22366 22496 22495 +22367 22368 22496 +22368 22497 22496 +22368 22369 22498 +22368 22498 22497 +22369 22370 22498 +22370 22499 22498 +22370 22371 22500 +22370 22500 22499 +22371 22372 22500 +22372 22501 22500 +22372 22373 22502 +22372 22502 22501 +22373 22374 22502 +22374 22503 22502 +22374 22375 22504 +22374 22504 22503 +22375 22376 22504 +22376 22505 22504 +22376 22377 22506 +22376 22506 22505 +22377 22378 22506 +22378 22507 22506 +22378 22379 22508 +22378 22508 22507 +22379 22380 22508 +22380 22509 22508 +22380 22381 22510 +22380 22510 22509 +22381 22382 22510 +22382 22511 22510 +22382 22383 22512 +22382 22512 22511 +22383 22384 22512 +22384 22513 22512 +22384 22385 22514 +22384 22514 22513 +22385 22386 22514 +22386 22515 22514 +22386 22387 22516 +22386 22516 22515 +22387 22388 22516 +22388 22517 22516 +22388 22389 22518 +22388 22518 22517 +22389 22390 22518 +22390 22519 22518 +22390 22391 22520 +22390 22520 22519 +22391 22392 22520 +22392 22521 22520 +22392 22393 22522 +22392 22522 22521 +22393 22394 22522 +22394 22523 22522 +22394 22395 22524 +22394 22524 22523 +22395 22396 22524 +22396 22525 22524 +22396 22397 22526 +22396 22526 22525 +22397 22398 22526 +22398 22527 22526 +22399 22400 22528 +22400 22529 22528 +22400 22401 22530 +22400 22530 22529 +22401 22402 22530 +22402 22531 22530 +22402 22403 22532 +22402 22532 22531 +22403 22404 22532 +22404 22533 22532 +22404 22405 22534 +22404 22534 22533 +22405 22406 22534 +22406 22535 22534 +22406 22407 22536 +22406 22536 22535 +22407 22408 22536 +22408 22537 22536 +22408 22409 22538 +22408 22538 22537 +22409 22410 22538 +22410 22539 22538 +22410 22411 22540 +22410 22540 22539 +22411 22412 22540 +22412 22541 22540 +22412 22413 22542 +22412 22542 22541 +22413 22414 22542 +22414 22543 22542 +22414 22415 22544 +22414 22544 22543 +22415 22416 22544 +22416 22545 22544 +22416 22417 22546 +22416 22546 22545 +22417 22418 22546 +22418 22547 22546 +22418 22419 22548 +22418 22548 22547 +22419 22420 22548 +22420 22549 22548 +22420 22421 22550 +22420 22550 22549 +22421 22422 22550 +22422 22551 22550 +22422 22423 22552 +22422 22552 22551 +22423 22424 22552 +22424 22553 22552 +22424 22425 22554 +22424 22554 22553 +22425 22426 22554 +22426 22555 22554 +22426 22427 22556 +22426 22556 22555 +22427 22428 22556 +22428 22557 22556 +22428 22429 22558 +22428 22558 22557 +22429 22430 22558 +22430 22559 22558 +22430 22431 22560 +22430 22560 22559 +22431 22432 22560 +22432 22561 22560 +22432 22433 22562 +22432 22562 22561 +22433 22434 22562 +22434 22563 22562 +22434 22435 22564 +22434 22564 22563 +22435 22436 22564 +22436 22565 22564 +22436 22437 22566 +22436 22566 22565 +22437 22438 22566 +22438 22567 22566 +22438 22439 22568 +22438 22568 22567 +22439 22440 22568 +22440 22569 22568 +22440 22441 22570 +22440 22570 22569 +22441 22442 22570 +22442 22571 22570 +22442 22443 22572 +22442 22572 22571 +22443 22444 22572 +22444 22573 22572 +22444 22445 22574 +22444 22574 22573 +22445 22446 22574 +22446 22575 22574 +22446 22447 22576 +22446 22576 22575 +22447 22448 22576 +22448 22577 22576 +22448 22449 22578 +22448 22578 22577 +22449 22450 22578 +22450 22579 22578 +22450 22451 22580 +22450 22580 22579 +22451 22452 22580 +22452 22581 22580 +22452 22453 22582 +22452 22582 22581 +22453 22454 22582 +22454 22583 22582 +22454 22455 22584 +22454 22584 22583 +22455 22456 22584 +22456 22585 22584 +22456 22457 22586 +22456 22586 22585 +22457 22458 22586 +22458 22587 22586 +22458 22459 22588 +22458 22588 22587 +22459 22460 22588 +22460 22589 22588 +22460 22461 22590 +22460 22590 22589 +22461 22462 22590 +22462 22591 22590 +22462 22463 22592 +22462 22592 22591 +22463 22464 22592 +22464 22593 22592 +22464 22465 22594 +22464 22594 22593 +22465 22466 22594 +22466 22595 22594 +22466 22467 22596 +22466 22596 22595 +22467 22468 22596 +22468 22597 22596 +22468 22469 22598 +22468 22598 22597 +22469 22470 22598 +22470 22599 22598 +22470 22471 22600 +22470 22600 22599 +22471 22472 22600 +22472 22601 22600 +22472 22473 22602 +22472 22602 22601 +22473 22474 22602 +22474 22603 22602 +22474 22475 22604 +22474 22604 22603 +22475 22476 22604 +22476 22605 22604 +22476 22477 22606 +22476 22606 22605 +22477 22478 22606 +22478 22607 22606 +22478 22479 22608 +22478 22608 22607 +22479 22480 22608 +22480 22609 22608 +22480 22481 22610 +22480 22610 22609 +22481 22482 22610 +22482 22611 22610 +22482 22483 22612 +22482 22612 22611 +22483 22484 22612 +22484 22613 22612 +22484 22485 22614 +22484 22614 22613 +22485 22486 22614 +22486 22615 22614 +22486 22487 22616 +22486 22616 22615 +22487 22488 22616 +22488 22617 22616 +22488 22489 22618 +22488 22618 22617 +22489 22490 22618 +22490 22619 22618 +22490 22491 22620 +22490 22620 22619 +22491 22492 22620 +22492 22621 22620 +22492 22493 22622 +22492 22622 22621 +22493 22494 22622 +22494 22623 22622 +22494 22495 22624 +22494 22624 22623 +22495 22496 22624 +22496 22625 22624 +22496 22497 22626 +22496 22626 22625 +22497 22498 22626 +22498 22627 22626 +22498 22499 22628 +22498 22628 22627 +22499 22500 22628 +22500 22629 22628 +22500 22501 22630 +22500 22630 22629 +22501 22502 22630 +22502 22631 22630 +22502 22503 22632 +22502 22632 22631 +22503 22504 22632 +22504 22633 22632 +22504 22505 22634 +22504 22634 22633 +22505 22506 22634 +22506 22635 22634 +22506 22507 22636 +22506 22636 22635 +22507 22508 22636 +22508 22637 22636 +22508 22509 22638 +22508 22638 22637 +22509 22510 22638 +22510 22639 22638 +22510 22511 22640 +22510 22640 22639 +22511 22512 22640 +22512 22641 22640 +22512 22513 22642 +22512 22642 22641 +22513 22514 22642 +22514 22643 22642 +22514 22515 22644 +22514 22644 22643 +22515 22516 22644 +22516 22645 22644 +22516 22517 22646 +22516 22646 22645 +22517 22518 22646 +22518 22647 22646 +22518 22519 22648 +22518 22648 22647 +22519 22520 22648 +22520 22649 22648 +22520 22521 22650 +22520 22650 22649 +22521 22522 22650 +22522 22651 22650 +22522 22523 22652 +22522 22652 22651 +22523 22524 22652 +22524 22653 22652 +22524 22525 22654 +22524 22654 22653 +22525 22526 22654 +22526 22655 22654 +22526 22527 22656 +22526 22656 22655 +22528 22529 22658 +22528 22658 22657 +22529 22530 22658 +22530 22659 22658 +22530 22531 22660 +22530 22660 22659 +22531 22532 22660 +22532 22661 22660 +22532 22533 22662 +22532 22662 22661 +22533 22534 22662 +22534 22663 22662 +22534 22535 22664 +22534 22664 22663 +22535 22536 22664 +22536 22665 22664 +22536 22537 22666 +22536 22666 22665 +22537 22538 22666 +22538 22667 22666 +22538 22539 22668 +22538 22668 22667 +22539 22540 22668 +22540 22669 22668 +22540 22541 22670 +22540 22670 22669 +22541 22542 22670 +22542 22671 22670 +22542 22543 22672 +22542 22672 22671 +22543 22544 22672 +22544 22673 22672 +22544 22545 22674 +22544 22674 22673 +22545 22546 22674 +22546 22675 22674 +22546 22547 22676 +22546 22676 22675 +22547 22548 22676 +22548 22677 22676 +22548 22549 22678 +22548 22678 22677 +22549 22550 22678 +22550 22679 22678 +22550 22551 22680 +22550 22680 22679 +22551 22552 22680 +22552 22681 22680 +22552 22553 22682 +22552 22682 22681 +22553 22554 22682 +22554 22683 22682 +22554 22555 22684 +22554 22684 22683 +22555 22556 22684 +22556 22685 22684 +22556 22557 22686 +22556 22686 22685 +22557 22558 22686 +22558 22687 22686 +22558 22559 22688 +22558 22688 22687 +22559 22560 22688 +22560 22689 22688 +22560 22561 22690 +22560 22690 22689 +22561 22562 22690 +22562 22691 22690 +22562 22563 22692 +22562 22692 22691 +22563 22564 22692 +22564 22693 22692 +22564 22565 22694 +22564 22694 22693 +22565 22566 22694 +22566 22695 22694 +22566 22567 22696 +22566 22696 22695 +22567 22568 22696 +22568 22697 22696 +22568 22569 22698 +22568 22698 22697 +22569 22570 22698 +22570 22699 22698 +22570 22571 22700 +22570 22700 22699 +22571 22572 22700 +22572 22701 22700 +22572 22573 22702 +22572 22702 22701 +22573 22574 22702 +22574 22703 22702 +22574 22575 22704 +22574 22704 22703 +22575 22576 22704 +22576 22705 22704 +22576 22577 22706 +22576 22706 22705 +22577 22578 22706 +22578 22707 22706 +22578 22579 22708 +22578 22708 22707 +22579 22580 22708 +22580 22709 22708 +22580 22581 22710 +22580 22710 22709 +22581 22582 22710 +22582 22711 22710 +22582 22583 22712 +22582 22712 22711 +22583 22584 22712 +22584 22713 22712 +22584 22585 22714 +22584 22714 22713 +22585 22586 22714 +22586 22715 22714 +22586 22587 22716 +22586 22716 22715 +22587 22588 22716 +22588 22717 22716 +22588 22589 22718 +22588 22718 22717 +22589 22590 22718 +22590 22719 22718 +22590 22591 22720 +22590 22720 22719 +22591 22592 22720 +22592 22721 22720 +22592 22593 22722 +22592 22722 22721 +22593 22594 22722 +22594 22723 22722 +22594 22595 22724 +22594 22724 22723 +22595 22596 22724 +22596 22725 22724 +22596 22597 22726 +22596 22726 22725 +22597 22598 22726 +22598 22727 22726 +22598 22599 22728 +22598 22728 22727 +22599 22600 22728 +22600 22729 22728 +22600 22601 22730 +22600 22730 22729 +22601 22602 22730 +22602 22731 22730 +22602 22603 22732 +22602 22732 22731 +22603 22604 22732 +22604 22733 22732 +22604 22605 22734 +22604 22734 22733 +22605 22606 22734 +22606 22735 22734 +22606 22607 22736 +22606 22736 22735 +22607 22608 22736 +22608 22737 22736 +22608 22609 22738 +22608 22738 22737 +22609 22610 22738 +22610 22739 22738 +22610 22611 22740 +22610 22740 22739 +22611 22612 22740 +22612 22741 22740 +22612 22613 22742 +22612 22742 22741 +22613 22614 22742 +22614 22743 22742 +22614 22615 22744 +22614 22744 22743 +22615 22616 22744 +22616 22745 22744 +22616 22617 22746 +22616 22746 22745 +22617 22618 22746 +22618 22747 22746 +22618 22619 22748 +22618 22748 22747 +22619 22620 22748 +22620 22749 22748 +22620 22621 22750 +22620 22750 22749 +22621 22622 22750 +22622 22751 22750 +22622 22623 22752 +22622 22752 22751 +22623 22624 22752 +22624 22753 22752 +22624 22625 22754 +22624 22754 22753 +22625 22626 22754 +22626 22755 22754 +22626 22627 22756 +22626 22756 22755 +22627 22628 22756 +22628 22757 22756 +22628 22629 22758 +22628 22758 22757 +22629 22630 22758 +22630 22759 22758 +22630 22631 22760 +22630 22760 22759 +22631 22632 22760 +22632 22761 22760 +22632 22633 22762 +22632 22762 22761 +22633 22634 22762 +22634 22763 22762 +22634 22635 22764 +22634 22764 22763 +22635 22636 22764 +22636 22765 22764 +22636 22637 22766 +22636 22766 22765 +22637 22638 22766 +22638 22767 22766 +22638 22639 22768 +22638 22768 22767 +22639 22640 22768 +22640 22769 22768 +22640 22641 22770 +22640 22770 22769 +22641 22642 22770 +22642 22771 22770 +22642 22643 22772 +22642 22772 22771 +22643 22644 22772 +22644 22773 22772 +22644 22645 22774 +22644 22774 22773 +22645 22646 22774 +22646 22775 22774 +22646 22647 22776 +22646 22776 22775 +22647 22648 22776 +22648 22777 22776 +22648 22649 22778 +22648 22778 22777 +22649 22650 22778 +22650 22779 22778 +22650 22651 22780 +22650 22780 22779 +22651 22652 22780 +22652 22781 22780 +22652 22653 22782 +22652 22782 22781 +22653 22654 22782 +22654 22783 22782 +22654 22655 22784 +22654 22784 22783 +22655 22656 22784 +22656 22785 22784 +22657 22658 22786 +22658 22787 22786 +22658 22659 22788 +22658 22788 22787 +22659 22660 22788 +22660 22789 22788 +22660 22661 22790 +22660 22790 22789 +22661 22662 22790 +22662 22791 22790 +22662 22663 22792 +22662 22792 22791 +22663 22664 22792 +22664 22793 22792 +22664 22665 22794 +22664 22794 22793 +22665 22666 22794 +22666 22795 22794 +22666 22667 22796 +22666 22796 22795 +22667 22668 22796 +22668 22797 22796 +22668 22669 22798 +22668 22798 22797 +22669 22670 22798 +22670 22799 22798 +22670 22671 22800 +22670 22800 22799 +22671 22672 22800 +22672 22801 22800 +22672 22673 22802 +22672 22802 22801 +22673 22674 22802 +22674 22803 22802 +22674 22675 22804 +22674 22804 22803 +22675 22676 22804 +22676 22805 22804 +22676 22677 22806 +22676 22806 22805 +22677 22678 22806 +22678 22807 22806 +22678 22679 22808 +22678 22808 22807 +22679 22680 22808 +22680 22809 22808 +22680 22681 22810 +22680 22810 22809 +22681 22682 22810 +22682 22811 22810 +22682 22683 22812 +22682 22812 22811 +22683 22684 22812 +22684 22813 22812 +22684 22685 22814 +22684 22814 22813 +22685 22686 22814 +22686 22815 22814 +22686 22687 22816 +22686 22816 22815 +22687 22688 22816 +22688 22817 22816 +22688 22689 22818 +22688 22818 22817 +22689 22690 22818 +22690 22819 22818 +22690 22691 22820 +22690 22820 22819 +22691 22692 22820 +22692 22821 22820 +22692 22693 22822 +22692 22822 22821 +22693 22694 22822 +22694 22823 22822 +22694 22695 22824 +22694 22824 22823 +22695 22696 22824 +22696 22825 22824 +22696 22697 22826 +22696 22826 22825 +22697 22698 22826 +22698 22827 22826 +22698 22699 22828 +22698 22828 22827 +22699 22700 22828 +22700 22829 22828 +22700 22701 22830 +22700 22830 22829 +22701 22702 22830 +22702 22831 22830 +22702 22703 22832 +22702 22832 22831 +22703 22704 22832 +22704 22833 22832 +22704 22705 22834 +22704 22834 22833 +22705 22706 22834 +22706 22835 22834 +22706 22707 22836 +22706 22836 22835 +22707 22708 22836 +22708 22837 22836 +22708 22709 22838 +22708 22838 22837 +22709 22710 22838 +22710 22839 22838 +22710 22711 22840 +22710 22840 22839 +22711 22712 22840 +22712 22841 22840 +22712 22713 22842 +22712 22842 22841 +22713 22714 22842 +22714 22843 22842 +22714 22715 22844 +22714 22844 22843 +22715 22716 22844 +22716 22845 22844 +22716 22717 22846 +22716 22846 22845 +22717 22718 22846 +22718 22847 22846 +22718 22719 22848 +22718 22848 22847 +22719 22720 22848 +22720 22849 22848 +22720 22721 22850 +22720 22850 22849 +22721 22722 22850 +22722 22851 22850 +22722 22723 22852 +22722 22852 22851 +22723 22724 22852 +22724 22853 22852 +22724 22725 22854 +22724 22854 22853 +22725 22726 22854 +22726 22855 22854 +22726 22727 22856 +22726 22856 22855 +22727 22728 22856 +22728 22857 22856 +22728 22729 22858 +22728 22858 22857 +22729 22730 22858 +22730 22859 22858 +22730 22731 22860 +22730 22860 22859 +22731 22732 22860 +22732 22861 22860 +22732 22733 22862 +22732 22862 22861 +22733 22734 22862 +22734 22863 22862 +22734 22735 22864 +22734 22864 22863 +22735 22736 22864 +22736 22865 22864 +22736 22737 22866 +22736 22866 22865 +22737 22738 22866 +22738 22867 22866 +22738 22739 22868 +22738 22868 22867 +22739 22740 22868 +22740 22869 22868 +22740 22741 22870 +22740 22870 22869 +22741 22742 22870 +22742 22871 22870 +22742 22743 22872 +22742 22872 22871 +22743 22744 22872 +22744 22873 22872 +22744 22745 22874 +22744 22874 22873 +22745 22746 22874 +22746 22875 22874 +22746 22747 22876 +22746 22876 22875 +22747 22748 22876 +22748 22877 22876 +22748 22749 22878 +22748 22878 22877 +22749 22750 22878 +22750 22879 22878 +22750 22751 22880 +22750 22880 22879 +22751 22752 22880 +22752 22881 22880 +22752 22753 22882 +22752 22882 22881 +22753 22754 22882 +22754 22883 22882 +22754 22755 22884 +22754 22884 22883 +22755 22756 22884 +22756 22885 22884 +22756 22757 22886 +22756 22886 22885 +22757 22758 22886 +22758 22887 22886 +22758 22759 22888 +22758 22888 22887 +22759 22760 22888 +22760 22889 22888 +22760 22761 22890 +22760 22890 22889 +22761 22762 22890 +22762 22891 22890 +22762 22763 22892 +22762 22892 22891 +22763 22764 22892 +22764 22893 22892 +22764 22765 22894 +22764 22894 22893 +22765 22766 22894 +22766 22895 22894 +22766 22767 22896 +22766 22896 22895 +22767 22768 22896 +22768 22897 22896 +22768 22769 22898 +22768 22898 22897 +22769 22770 22898 +22770 22899 22898 +22770 22771 22900 +22770 22900 22899 +22771 22772 22900 +22772 22901 22900 +22772 22773 22902 +22772 22902 22901 +22773 22774 22902 +22774 22903 22902 +22774 22775 22904 +22774 22904 22903 +22775 22776 22904 +22776 22905 22904 +22776 22777 22906 +22776 22906 22905 +22777 22778 22906 +22778 22907 22906 +22778 22779 22908 +22778 22908 22907 +22779 22780 22908 +22780 22909 22908 +22780 22781 22910 +22780 22910 22909 +22781 22782 22910 +22782 22911 22910 +22782 22783 22912 +22782 22912 22911 +22783 22784 22912 +22784 22913 22912 +22784 22785 22914 +22784 22914 22913 +22786 22787 22916 +22786 22916 22915 +22787 22788 22916 +22788 22917 22916 +22788 22789 22918 +22788 22918 22917 +22789 22790 22918 +22790 22919 22918 +22790 22791 22920 +22790 22920 22919 +22791 22792 22920 +22792 22921 22920 +22792 22793 22922 +22792 22922 22921 +22793 22794 22922 +22794 22923 22922 +22794 22795 22924 +22794 22924 22923 +22795 22796 22924 +22796 22925 22924 +22796 22797 22926 +22796 22926 22925 +22797 22798 22926 +22798 22927 22926 +22798 22799 22928 +22798 22928 22927 +22799 22800 22928 +22800 22929 22928 +22800 22801 22930 +22800 22930 22929 +22801 22802 22930 +22802 22931 22930 +22802 22803 22932 +22802 22932 22931 +22803 22804 22932 +22804 22933 22932 +22804 22805 22934 +22804 22934 22933 +22805 22806 22934 +22806 22935 22934 +22806 22807 22936 +22806 22936 22935 +22807 22808 22936 +22808 22937 22936 +22808 22809 22938 +22808 22938 22937 +22809 22810 22938 +22810 22939 22938 +22810 22811 22940 +22810 22940 22939 +22811 22812 22940 +22812 22941 22940 +22812 22813 22942 +22812 22942 22941 +22813 22814 22942 +22814 22943 22942 +22814 22815 22944 +22814 22944 22943 +22815 22816 22944 +22816 22945 22944 +22816 22817 22946 +22816 22946 22945 +22817 22818 22946 +22818 22947 22946 +22818 22819 22948 +22818 22948 22947 +22819 22820 22948 +22820 22949 22948 +22820 22821 22950 +22820 22950 22949 +22821 22822 22950 +22822 22951 22950 +22822 22823 22952 +22822 22952 22951 +22823 22824 22952 +22824 22953 22952 +22824 22825 22954 +22824 22954 22953 +22825 22826 22954 +22826 22955 22954 +22826 22827 22956 +22826 22956 22955 +22827 22828 22956 +22828 22957 22956 +22828 22829 22958 +22828 22958 22957 +22829 22830 22958 +22830 22959 22958 +22830 22831 22960 +22830 22960 22959 +22831 22832 22960 +22832 22961 22960 +22832 22833 22962 +22832 22962 22961 +22833 22834 22962 +22834 22963 22962 +22834 22835 22964 +22834 22964 22963 +22835 22836 22964 +22836 22965 22964 +22836 22837 22966 +22836 22966 22965 +22837 22838 22966 +22838 22967 22966 +22838 22839 22968 +22838 22968 22967 +22839 22840 22968 +22840 22969 22968 +22840 22841 22970 +22840 22970 22969 +22841 22842 22970 +22842 22971 22970 +22842 22843 22972 +22842 22972 22971 +22843 22844 22972 +22844 22973 22972 +22844 22845 22974 +22844 22974 22973 +22845 22846 22974 +22846 22975 22974 +22846 22847 22976 +22846 22976 22975 +22847 22848 22976 +22848 22977 22976 +22848 22849 22978 +22848 22978 22977 +22849 22850 22978 +22850 22979 22978 +22850 22851 22980 +22850 22980 22979 +22851 22852 22980 +22852 22981 22980 +22852 22853 22982 +22852 22982 22981 +22853 22854 22982 +22854 22983 22982 +22854 22855 22984 +22854 22984 22983 +22855 22856 22984 +22856 22985 22984 +22856 22857 22986 +22856 22986 22985 +22857 22858 22986 +22858 22987 22986 +22858 22859 22988 +22858 22988 22987 +22859 22860 22988 +22860 22989 22988 +22860 22861 22990 +22860 22990 22989 +22861 22862 22990 +22862 22991 22990 +22862 22863 22992 +22862 22992 22991 +22863 22864 22992 +22864 22993 22992 +22864 22865 22994 +22864 22994 22993 +22865 22866 22994 +22866 22995 22994 +22866 22867 22996 +22866 22996 22995 +22867 22868 22996 +22868 22997 22996 +22868 22869 22998 +22868 22998 22997 +22869 22870 22998 +22870 22999 22998 +22870 22871 23000 +22870 23000 22999 +22871 22872 23000 +22872 23001 23000 +22872 22873 23002 +22872 23002 23001 +22873 22874 23002 +22874 23003 23002 +22874 22875 23004 +22874 23004 23003 +22875 22876 23004 +22876 23005 23004 +22876 22877 23006 +22876 23006 23005 +22877 22878 23006 +22878 23007 23006 +22878 22879 23008 +22878 23008 23007 +22879 22880 23008 +22880 23009 23008 +22880 22881 23010 +22880 23010 23009 +22881 22882 23010 +22882 23011 23010 +22882 22883 23012 +22882 23012 23011 +22883 22884 23012 +22884 23013 23012 +22884 22885 23014 +22884 23014 23013 +22885 22886 23014 +22886 23015 23014 +22886 22887 23016 +22886 23016 23015 +22887 22888 23016 +22888 23017 23016 +22888 22889 23018 +22888 23018 23017 +22889 22890 23018 +22890 23019 23018 +22890 22891 23020 +22890 23020 23019 +22891 22892 23020 +22892 23021 23020 +22892 22893 23022 +22892 23022 23021 +22893 22894 23022 +22894 23023 23022 +22894 22895 23024 +22894 23024 23023 +22895 22896 23024 +22896 23025 23024 +22896 22897 23026 +22896 23026 23025 +22897 22898 23026 +22898 23027 23026 +22898 22899 23028 +22898 23028 23027 +22899 22900 23028 +22900 23029 23028 +22900 22901 23030 +22900 23030 23029 +22901 22902 23030 +22902 23031 23030 +22902 22903 23032 +22902 23032 23031 +22903 22904 23032 +22904 23033 23032 +22904 22905 23034 +22904 23034 23033 +22905 22906 23034 +22906 23035 23034 +22906 22907 23036 +22906 23036 23035 +22907 22908 23036 +22908 23037 23036 +22908 22909 23038 +22908 23038 23037 +22909 22910 23038 +22910 23039 23038 +22910 22911 23040 +22910 23040 23039 +22911 22912 23040 +22912 23041 23040 +22912 22913 23042 +22912 23042 23041 +22913 22914 23042 +22914 23043 23042 +22915 22916 23044 +22916 23045 23044 +22916 22917 23046 +22916 23046 23045 +22917 22918 23046 +22918 23047 23046 +22918 22919 23048 +22918 23048 23047 +22919 22920 23048 +22920 23049 23048 +22920 22921 23050 +22920 23050 23049 +22921 22922 23050 +22922 23051 23050 +22922 22923 23052 +22922 23052 23051 +22923 22924 23052 +22924 23053 23052 +22924 22925 23054 +22924 23054 23053 +22925 22926 23054 +22926 23055 23054 +22926 22927 23056 +22926 23056 23055 +22927 22928 23056 +22928 23057 23056 +22928 22929 23058 +22928 23058 23057 +22929 22930 23058 +22930 23059 23058 +22930 22931 23060 +22930 23060 23059 +22931 22932 23060 +22932 23061 23060 +22932 22933 23062 +22932 23062 23061 +22933 22934 23062 +22934 23063 23062 +22934 22935 23064 +22934 23064 23063 +22935 22936 23064 +22936 23065 23064 +22936 22937 23066 +22936 23066 23065 +22937 22938 23066 +22938 23067 23066 +22938 22939 23068 +22938 23068 23067 +22939 22940 23068 +22940 23069 23068 +22940 22941 23070 +22940 23070 23069 +22941 22942 23070 +22942 23071 23070 +22942 22943 23072 +22942 23072 23071 +22943 22944 23072 +22944 23073 23072 +22944 22945 23074 +22944 23074 23073 +22945 22946 23074 +22946 23075 23074 +22946 22947 23076 +22946 23076 23075 +22947 22948 23076 +22948 23077 23076 +22948 22949 23078 +22948 23078 23077 +22949 22950 23078 +22950 23079 23078 +22950 22951 23080 +22950 23080 23079 +22951 22952 23080 +22952 23081 23080 +22952 22953 23082 +22952 23082 23081 +22953 22954 23082 +22954 23083 23082 +22954 22955 23084 +22954 23084 23083 +22955 22956 23084 +22956 23085 23084 +22956 22957 23086 +22956 23086 23085 +22957 22958 23086 +22958 23087 23086 +22958 22959 23088 +22958 23088 23087 +22959 22960 23088 +22960 23089 23088 +22960 22961 23090 +22960 23090 23089 +22961 22962 23090 +22962 23091 23090 +22962 22963 23092 +22962 23092 23091 +22963 22964 23092 +22964 23093 23092 +22964 22965 23094 +22964 23094 23093 +22965 22966 23094 +22966 23095 23094 +22966 22967 23096 +22966 23096 23095 +22967 22968 23096 +22968 23097 23096 +22968 22969 23098 +22968 23098 23097 +22969 22970 23098 +22970 23099 23098 +22970 22971 23100 +22970 23100 23099 +22971 22972 23100 +22972 23101 23100 +22972 22973 23102 +22972 23102 23101 +22973 22974 23102 +22974 23103 23102 +22974 22975 23104 +22974 23104 23103 +22975 22976 23104 +22976 23105 23104 +22976 22977 23106 +22976 23106 23105 +22977 22978 23106 +22978 23107 23106 +22978 22979 23108 +22978 23108 23107 +22979 22980 23108 +22980 23109 23108 +22980 22981 23110 +22980 23110 23109 +22981 22982 23110 +22982 23111 23110 +22982 22983 23112 +22982 23112 23111 +22983 22984 23112 +22984 23113 23112 +22984 22985 23114 +22984 23114 23113 +22985 22986 23114 +22986 23115 23114 +22986 22987 23116 +22986 23116 23115 +22987 22988 23116 +22988 23117 23116 +22988 22989 23118 +22988 23118 23117 +22989 22990 23118 +22990 23119 23118 +22990 22991 23120 +22990 23120 23119 +22991 22992 23120 +22992 23121 23120 +22992 22993 23122 +22992 23122 23121 +22993 22994 23122 +22994 23123 23122 +22994 22995 23124 +22994 23124 23123 +22995 22996 23124 +22996 23125 23124 +22996 22997 23126 +22996 23126 23125 +22997 22998 23126 +22998 23127 23126 +22998 22999 23128 +22998 23128 23127 +22999 23000 23128 +23000 23129 23128 +23000 23001 23130 +23000 23130 23129 +23001 23002 23130 +23002 23131 23130 +23002 23003 23132 +23002 23132 23131 +23003 23004 23132 +23004 23133 23132 +23004 23005 23134 +23004 23134 23133 +23005 23006 23134 +23006 23135 23134 +23006 23007 23136 +23006 23136 23135 +23007 23008 23136 +23008 23137 23136 +23008 23009 23138 +23008 23138 23137 +23009 23010 23138 +23010 23139 23138 +23010 23011 23140 +23010 23140 23139 +23011 23012 23140 +23012 23141 23140 +23012 23013 23142 +23012 23142 23141 +23013 23014 23142 +23014 23143 23142 +23014 23015 23144 +23014 23144 23143 +23015 23016 23144 +23016 23145 23144 +23016 23017 23146 +23016 23146 23145 +23017 23018 23146 +23018 23147 23146 +23018 23019 23148 +23018 23148 23147 +23019 23020 23148 +23020 23149 23148 +23020 23021 23150 +23020 23150 23149 +23021 23022 23150 +23022 23151 23150 +23022 23023 23152 +23022 23152 23151 +23023 23024 23152 +23024 23153 23152 +23024 23025 23154 +23024 23154 23153 +23025 23026 23154 +23026 23155 23154 +23026 23027 23156 +23026 23156 23155 +23027 23028 23156 +23028 23157 23156 +23028 23029 23158 +23028 23158 23157 +23029 23030 23158 +23030 23159 23158 +23030 23031 23160 +23030 23160 23159 +23031 23032 23160 +23032 23161 23160 +23032 23033 23162 +23032 23162 23161 +23033 23034 23162 +23034 23163 23162 +23034 23035 23164 +23034 23164 23163 +23035 23036 23164 +23036 23165 23164 +23036 23037 23166 +23036 23166 23165 +23037 23038 23166 +23038 23167 23166 +23038 23039 23168 +23038 23168 23167 +23039 23040 23168 +23040 23169 23168 +23040 23041 23170 +23040 23170 23169 +23041 23042 23170 +23042 23171 23170 +23042 23043 23172 +23042 23172 23171 +23044 23045 23174 +23044 23174 23173 +23045 23046 23174 +23046 23175 23174 +23046 23047 23176 +23046 23176 23175 +23047 23048 23176 +23048 23177 23176 +23048 23049 23178 +23048 23178 23177 +23049 23050 23178 +23050 23179 23178 +23050 23051 23180 +23050 23180 23179 +23051 23052 23180 +23052 23181 23180 +23052 23053 23182 +23052 23182 23181 +23053 23054 23182 +23054 23183 23182 +23054 23055 23184 +23054 23184 23183 +23055 23056 23184 +23056 23185 23184 +23056 23057 23186 +23056 23186 23185 +23057 23058 23186 +23058 23187 23186 +23058 23059 23188 +23058 23188 23187 +23059 23060 23188 +23060 23189 23188 +23060 23061 23190 +23060 23190 23189 +23061 23062 23190 +23062 23191 23190 +23062 23063 23192 +23062 23192 23191 +23063 23064 23192 +23064 23193 23192 +23064 23065 23194 +23064 23194 23193 +23065 23066 23194 +23066 23195 23194 +23066 23067 23196 +23066 23196 23195 +23067 23068 23196 +23068 23197 23196 +23068 23069 23198 +23068 23198 23197 +23069 23070 23198 +23070 23199 23198 +23070 23071 23200 +23070 23200 23199 +23071 23072 23200 +23072 23201 23200 +23072 23073 23202 +23072 23202 23201 +23073 23074 23202 +23074 23203 23202 +23074 23075 23204 +23074 23204 23203 +23075 23076 23204 +23076 23205 23204 +23076 23077 23206 +23076 23206 23205 +23077 23078 23206 +23078 23207 23206 +23078 23079 23208 +23078 23208 23207 +23079 23080 23208 +23080 23209 23208 +23080 23081 23210 +23080 23210 23209 +23081 23082 23210 +23082 23211 23210 +23082 23083 23212 +23082 23212 23211 +23083 23084 23212 +23084 23213 23212 +23084 23085 23214 +23084 23214 23213 +23085 23086 23214 +23086 23215 23214 +23086 23087 23216 +23086 23216 23215 +23087 23088 23216 +23088 23217 23216 +23088 23089 23218 +23088 23218 23217 +23089 23090 23218 +23090 23219 23218 +23090 23091 23220 +23090 23220 23219 +23091 23092 23220 +23092 23221 23220 +23092 23093 23222 +23092 23222 23221 +23093 23094 23222 +23094 23223 23222 +23094 23095 23224 +23094 23224 23223 +23095 23096 23224 +23096 23225 23224 +23096 23097 23226 +23096 23226 23225 +23097 23098 23226 +23098 23227 23226 +23098 23099 23228 +23098 23228 23227 +23099 23100 23228 +23100 23229 23228 +23100 23101 23230 +23100 23230 23229 +23101 23102 23230 +23102 23231 23230 +23102 23103 23232 +23102 23232 23231 +23103 23104 23232 +23104 23233 23232 +23104 23105 23234 +23104 23234 23233 +23105 23106 23234 +23106 23235 23234 +23106 23107 23236 +23106 23236 23235 +23107 23108 23236 +23108 23237 23236 +23108 23109 23238 +23108 23238 23237 +23109 23110 23238 +23110 23239 23238 +23110 23111 23240 +23110 23240 23239 +23111 23112 23240 +23112 23241 23240 +23112 23113 23242 +23112 23242 23241 +23113 23114 23242 +23114 23243 23242 +23114 23115 23244 +23114 23244 23243 +23115 23116 23244 +23116 23245 23244 +23116 23117 23246 +23116 23246 23245 +23117 23118 23246 +23118 23247 23246 +23118 23119 23248 +23118 23248 23247 +23119 23120 23248 +23120 23249 23248 +23120 23121 23250 +23120 23250 23249 +23121 23122 23250 +23122 23251 23250 +23122 23123 23252 +23122 23252 23251 +23123 23124 23252 +23124 23253 23252 +23124 23125 23254 +23124 23254 23253 +23125 23126 23254 +23126 23255 23254 +23126 23127 23256 +23126 23256 23255 +23127 23128 23256 +23128 23257 23256 +23128 23129 23258 +23128 23258 23257 +23129 23130 23258 +23130 23259 23258 +23130 23131 23260 +23130 23260 23259 +23131 23132 23260 +23132 23261 23260 +23132 23133 23262 +23132 23262 23261 +23133 23134 23262 +23134 23263 23262 +23134 23135 23264 +23134 23264 23263 +23135 23136 23264 +23136 23265 23264 +23136 23137 23266 +23136 23266 23265 +23137 23138 23266 +23138 23267 23266 +23138 23139 23268 +23138 23268 23267 +23139 23140 23268 +23140 23269 23268 +23140 23141 23270 +23140 23270 23269 +23141 23142 23270 +23142 23271 23270 +23142 23143 23272 +23142 23272 23271 +23143 23144 23272 +23144 23273 23272 +23144 23145 23274 +23144 23274 23273 +23145 23146 23274 +23146 23275 23274 +23146 23147 23276 +23146 23276 23275 +23147 23148 23276 +23148 23277 23276 +23148 23149 23278 +23148 23278 23277 +23149 23150 23278 +23150 23279 23278 +23150 23151 23280 +23150 23280 23279 +23151 23152 23280 +23152 23281 23280 +23152 23153 23282 +23152 23282 23281 +23153 23154 23282 +23154 23283 23282 +23154 23155 23284 +23154 23284 23283 +23155 23156 23284 +23156 23285 23284 +23156 23157 23286 +23156 23286 23285 +23157 23158 23286 +23158 23287 23286 +23158 23159 23288 +23158 23288 23287 +23159 23160 23288 +23160 23289 23288 +23160 23161 23290 +23160 23290 23289 +23161 23162 23290 +23162 23291 23290 +23162 23163 23292 +23162 23292 23291 +23163 23164 23292 +23164 23293 23292 +23164 23165 23294 +23164 23294 23293 +23165 23166 23294 +23166 23295 23294 +23166 23167 23296 +23166 23296 23295 +23167 23168 23296 +23168 23297 23296 +23168 23169 23298 +23168 23298 23297 +23169 23170 23298 +23170 23299 23298 +23170 23171 23300 +23170 23300 23299 +23171 23172 23300 +23172 23301 23300 +23173 23174 23302 +23174 23303 23302 +23174 23175 23304 +23174 23304 23303 +23175 23176 23304 +23176 23305 23304 +23176 23177 23306 +23176 23306 23305 +23177 23178 23306 +23178 23307 23306 +23178 23179 23308 +23178 23308 23307 +23179 23180 23308 +23180 23309 23308 +23180 23181 23310 +23180 23310 23309 +23181 23182 23310 +23182 23311 23310 +23182 23183 23312 +23182 23312 23311 +23183 23184 23312 +23184 23313 23312 +23184 23185 23314 +23184 23314 23313 +23185 23186 23314 +23186 23315 23314 +23186 23187 23316 +23186 23316 23315 +23187 23188 23316 +23188 23317 23316 +23188 23189 23318 +23188 23318 23317 +23189 23190 23318 +23190 23319 23318 +23190 23191 23320 +23190 23320 23319 +23191 23192 23320 +23192 23321 23320 +23192 23193 23322 +23192 23322 23321 +23193 23194 23322 +23194 23323 23322 +23194 23195 23324 +23194 23324 23323 +23195 23196 23324 +23196 23325 23324 +23196 23197 23326 +23196 23326 23325 +23197 23198 23326 +23198 23327 23326 +23198 23199 23328 +23198 23328 23327 +23199 23200 23328 +23200 23329 23328 +23200 23201 23330 +23200 23330 23329 +23201 23202 23330 +23202 23331 23330 +23202 23203 23332 +23202 23332 23331 +23203 23204 23332 +23204 23333 23332 +23204 23205 23334 +23204 23334 23333 +23205 23206 23334 +23206 23335 23334 +23206 23207 23336 +23206 23336 23335 +23207 23208 23336 +23208 23337 23336 +23208 23209 23338 +23208 23338 23337 +23209 23210 23338 +23210 23339 23338 +23210 23211 23340 +23210 23340 23339 +23211 23212 23340 +23212 23341 23340 +23212 23213 23342 +23212 23342 23341 +23213 23214 23342 +23214 23343 23342 +23214 23215 23344 +23214 23344 23343 +23215 23216 23344 +23216 23345 23344 +23216 23217 23346 +23216 23346 23345 +23217 23218 23346 +23218 23347 23346 +23218 23219 23348 +23218 23348 23347 +23219 23220 23348 +23220 23349 23348 +23220 23221 23350 +23220 23350 23349 +23221 23222 23350 +23222 23351 23350 +23222 23223 23352 +23222 23352 23351 +23223 23224 23352 +23224 23353 23352 +23224 23225 23354 +23224 23354 23353 +23225 23226 23354 +23226 23355 23354 +23226 23227 23356 +23226 23356 23355 +23227 23228 23356 +23228 23357 23356 +23228 23229 23358 +23228 23358 23357 +23229 23230 23358 +23230 23359 23358 +23230 23231 23360 +23230 23360 23359 +23231 23232 23360 +23232 23361 23360 +23232 23233 23362 +23232 23362 23361 +23233 23234 23362 +23234 23363 23362 +23234 23235 23364 +23234 23364 23363 +23235 23236 23364 +23236 23365 23364 +23236 23237 23366 +23236 23366 23365 +23237 23238 23366 +23238 23367 23366 +23238 23239 23368 +23238 23368 23367 +23239 23240 23368 +23240 23369 23368 +23240 23241 23370 +23240 23370 23369 +23241 23242 23370 +23242 23371 23370 +23242 23243 23372 +23242 23372 23371 +23243 23244 23372 +23244 23373 23372 +23244 23245 23374 +23244 23374 23373 +23245 23246 23374 +23246 23375 23374 +23246 23247 23376 +23246 23376 23375 +23247 23248 23376 +23248 23377 23376 +23248 23249 23378 +23248 23378 23377 +23249 23250 23378 +23250 23379 23378 +23250 23251 23380 +23250 23380 23379 +23251 23252 23380 +23252 23381 23380 +23252 23253 23382 +23252 23382 23381 +23253 23254 23382 +23254 23383 23382 +23254 23255 23384 +23254 23384 23383 +23255 23256 23384 +23256 23385 23384 +23256 23257 23386 +23256 23386 23385 +23257 23258 23386 +23258 23387 23386 +23258 23259 23388 +23258 23388 23387 +23259 23260 23388 +23260 23389 23388 +23260 23261 23390 +23260 23390 23389 +23261 23262 23390 +23262 23391 23390 +23262 23263 23392 +23262 23392 23391 +23263 23264 23392 +23264 23393 23392 +23264 23265 23394 +23264 23394 23393 +23265 23266 23394 +23266 23395 23394 +23266 23267 23396 +23266 23396 23395 +23267 23268 23396 +23268 23397 23396 +23268 23269 23398 +23268 23398 23397 +23269 23270 23398 +23270 23399 23398 +23270 23271 23400 +23270 23400 23399 +23271 23272 23400 +23272 23401 23400 +23272 23273 23402 +23272 23402 23401 +23273 23274 23402 +23274 23403 23402 +23274 23275 23404 +23274 23404 23403 +23275 23276 23404 +23276 23405 23404 +23276 23277 23406 +23276 23406 23405 +23277 23278 23406 +23278 23407 23406 +23278 23279 23408 +23278 23408 23407 +23279 23280 23408 +23280 23409 23408 +23280 23281 23410 +23280 23410 23409 +23281 23282 23410 +23282 23411 23410 +23282 23283 23412 +23282 23412 23411 +23283 23284 23412 +23284 23413 23412 +23284 23285 23414 +23284 23414 23413 +23285 23286 23414 +23286 23415 23414 +23286 23287 23416 +23286 23416 23415 +23287 23288 23416 +23288 23417 23416 +23288 23289 23418 +23288 23418 23417 +23289 23290 23418 +23290 23419 23418 +23290 23291 23420 +23290 23420 23419 +23291 23292 23420 +23292 23421 23420 +23292 23293 23422 +23292 23422 23421 +23293 23294 23422 +23294 23423 23422 +23294 23295 23424 +23294 23424 23423 +23295 23296 23424 +23296 23425 23424 +23296 23297 23426 +23296 23426 23425 +23297 23298 23426 +23298 23427 23426 +23298 23299 23428 +23298 23428 23427 +23299 23300 23428 +23300 23429 23428 +23300 23301 23430 +23300 23430 23429 +23302 23303 23432 +23302 23432 23431 +23303 23304 23432 +23304 23433 23432 +23304 23305 23434 +23304 23434 23433 +23305 23306 23434 +23306 23435 23434 +23306 23307 23436 +23306 23436 23435 +23307 23308 23436 +23308 23437 23436 +23308 23309 23438 +23308 23438 23437 +23309 23310 23438 +23310 23439 23438 +23310 23311 23440 +23310 23440 23439 +23311 23312 23440 +23312 23441 23440 +23312 23313 23442 +23312 23442 23441 +23313 23314 23442 +23314 23443 23442 +23314 23315 23444 +23314 23444 23443 +23315 23316 23444 +23316 23445 23444 +23316 23317 23446 +23316 23446 23445 +23317 23318 23446 +23318 23447 23446 +23318 23319 23448 +23318 23448 23447 +23319 23320 23448 +23320 23449 23448 +23320 23321 23450 +23320 23450 23449 +23321 23322 23450 +23322 23451 23450 +23322 23323 23452 +23322 23452 23451 +23323 23324 23452 +23324 23453 23452 +23324 23325 23454 +23324 23454 23453 +23325 23326 23454 +23326 23455 23454 +23326 23327 23456 +23326 23456 23455 +23327 23328 23456 +23328 23457 23456 +23328 23329 23458 +23328 23458 23457 +23329 23330 23458 +23330 23459 23458 +23330 23331 23460 +23330 23460 23459 +23331 23332 23460 +23332 23461 23460 +23332 23333 23462 +23332 23462 23461 +23333 23334 23462 +23334 23463 23462 +23334 23335 23464 +23334 23464 23463 +23335 23336 23464 +23336 23465 23464 +23336 23337 23466 +23336 23466 23465 +23337 23338 23466 +23338 23467 23466 +23338 23339 23468 +23338 23468 23467 +23339 23340 23468 +23340 23469 23468 +23340 23341 23470 +23340 23470 23469 +23341 23342 23470 +23342 23471 23470 +23342 23343 23472 +23342 23472 23471 +23343 23344 23472 +23344 23473 23472 +23344 23345 23474 +23344 23474 23473 +23345 23346 23474 +23346 23475 23474 +23346 23347 23476 +23346 23476 23475 +23347 23348 23476 +23348 23477 23476 +23348 23349 23478 +23348 23478 23477 +23349 23350 23478 +23350 23479 23478 +23350 23351 23480 +23350 23480 23479 +23351 23352 23480 +23352 23481 23480 +23352 23353 23482 +23352 23482 23481 +23353 23354 23482 +23354 23483 23482 +23354 23355 23484 +23354 23484 23483 +23355 23356 23484 +23356 23485 23484 +23356 23357 23486 +23356 23486 23485 +23357 23358 23486 +23358 23487 23486 +23358 23359 23488 +23358 23488 23487 +23359 23360 23488 +23360 23489 23488 +23360 23361 23490 +23360 23490 23489 +23361 23362 23490 +23362 23491 23490 +23362 23363 23492 +23362 23492 23491 +23363 23364 23492 +23364 23493 23492 +23364 23365 23494 +23364 23494 23493 +23365 23366 23494 +23366 23495 23494 +23366 23367 23496 +23366 23496 23495 +23367 23368 23496 +23368 23497 23496 +23368 23369 23498 +23368 23498 23497 +23369 23370 23498 +23370 23499 23498 +23370 23371 23500 +23370 23500 23499 +23371 23372 23500 +23372 23501 23500 +23372 23373 23502 +23372 23502 23501 +23373 23374 23502 +23374 23503 23502 +23374 23375 23504 +23374 23504 23503 +23375 23376 23504 +23376 23505 23504 +23376 23377 23506 +23376 23506 23505 +23377 23378 23506 +23378 23507 23506 +23378 23379 23508 +23378 23508 23507 +23379 23380 23508 +23380 23509 23508 +23380 23381 23510 +23380 23510 23509 +23381 23382 23510 +23382 23511 23510 +23382 23383 23512 +23382 23512 23511 +23383 23384 23512 +23384 23513 23512 +23384 23385 23514 +23384 23514 23513 +23385 23386 23514 +23386 23515 23514 +23386 23387 23516 +23386 23516 23515 +23387 23388 23516 +23388 23517 23516 +23388 23389 23518 +23388 23518 23517 +23389 23390 23518 +23390 23519 23518 +23390 23391 23520 +23390 23520 23519 +23391 23392 23520 +23392 23521 23520 +23392 23393 23522 +23392 23522 23521 +23393 23394 23522 +23394 23523 23522 +23394 23395 23524 +23394 23524 23523 +23395 23396 23524 +23396 23525 23524 +23396 23397 23526 +23396 23526 23525 +23397 23398 23526 +23398 23527 23526 +23398 23399 23528 +23398 23528 23527 +23399 23400 23528 +23400 23529 23528 +23400 23401 23530 +23400 23530 23529 +23401 23402 23530 +23402 23531 23530 +23402 23403 23532 +23402 23532 23531 +23403 23404 23532 +23404 23533 23532 +23404 23405 23534 +23404 23534 23533 +23405 23406 23534 +23406 23535 23534 +23406 23407 23536 +23406 23536 23535 +23407 23408 23536 +23408 23537 23536 +23408 23409 23538 +23408 23538 23537 +23409 23410 23538 +23410 23539 23538 +23410 23411 23540 +23410 23540 23539 +23411 23412 23540 +23412 23541 23540 +23412 23413 23542 +23412 23542 23541 +23413 23414 23542 +23414 23543 23542 +23414 23415 23544 +23414 23544 23543 +23415 23416 23544 +23416 23545 23544 +23416 23417 23546 +23416 23546 23545 +23417 23418 23546 +23418 23547 23546 +23418 23419 23548 +23418 23548 23547 +23419 23420 23548 +23420 23549 23548 +23420 23421 23550 +23420 23550 23549 +23421 23422 23550 +23422 23551 23550 +23422 23423 23552 +23422 23552 23551 +23423 23424 23552 +23424 23553 23552 +23424 23425 23554 +23424 23554 23553 +23425 23426 23554 +23426 23555 23554 +23426 23427 23556 +23426 23556 23555 +23427 23428 23556 +23428 23557 23556 +23428 23429 23558 +23428 23558 23557 +23429 23430 23558 +23430 23559 23558 +23431 23432 23560 +23432 23561 23560 +23432 23433 23562 +23432 23562 23561 +23433 23434 23562 +23434 23563 23562 +23434 23435 23564 +23434 23564 23563 +23435 23436 23564 +23436 23565 23564 +23436 23437 23566 +23436 23566 23565 +23437 23438 23566 +23438 23567 23566 +23438 23439 23568 +23438 23568 23567 +23439 23440 23568 +23440 23569 23568 +23440 23441 23570 +23440 23570 23569 +23441 23442 23570 +23442 23571 23570 +23442 23443 23572 +23442 23572 23571 +23443 23444 23572 +23444 23573 23572 +23444 23445 23574 +23444 23574 23573 +23445 23446 23574 +23446 23575 23574 +23446 23447 23576 +23446 23576 23575 +23447 23448 23576 +23448 23577 23576 +23448 23449 23578 +23448 23578 23577 +23449 23450 23578 +23450 23579 23578 +23450 23451 23580 +23450 23580 23579 +23451 23452 23580 +23452 23581 23580 +23452 23453 23582 +23452 23582 23581 +23453 23454 23582 +23454 23583 23582 +23454 23455 23584 +23454 23584 23583 +23455 23456 23584 +23456 23585 23584 +23456 23457 23586 +23456 23586 23585 +23457 23458 23586 +23458 23587 23586 +23458 23459 23588 +23458 23588 23587 +23459 23460 23588 +23460 23589 23588 +23460 23461 23590 +23460 23590 23589 +23461 23462 23590 +23462 23591 23590 +23462 23463 23592 +23462 23592 23591 +23463 23464 23592 +23464 23593 23592 +23464 23465 23594 +23464 23594 23593 +23465 23466 23594 +23466 23595 23594 +23466 23467 23596 +23466 23596 23595 +23467 23468 23596 +23468 23597 23596 +23468 23469 23598 +23468 23598 23597 +23469 23470 23598 +23470 23599 23598 +23470 23471 23600 +23470 23600 23599 +23471 23472 23600 +23472 23601 23600 +23472 23473 23602 +23472 23602 23601 +23473 23474 23602 +23474 23603 23602 +23474 23475 23604 +23474 23604 23603 +23475 23476 23604 +23476 23605 23604 +23476 23477 23606 +23476 23606 23605 +23477 23478 23606 +23478 23607 23606 +23478 23479 23608 +23478 23608 23607 +23479 23480 23608 +23480 23609 23608 +23480 23481 23610 +23480 23610 23609 +23481 23482 23610 +23482 23611 23610 +23482 23483 23612 +23482 23612 23611 +23483 23484 23612 +23484 23613 23612 +23484 23485 23614 +23484 23614 23613 +23485 23486 23614 +23486 23615 23614 +23486 23487 23616 +23486 23616 23615 +23487 23488 23616 +23488 23617 23616 +23488 23489 23618 +23488 23618 23617 +23489 23490 23618 +23490 23619 23618 +23490 23491 23620 +23490 23620 23619 +23491 23492 23620 +23492 23621 23620 +23492 23493 23622 +23492 23622 23621 +23493 23494 23622 +23494 23623 23622 +23494 23495 23624 +23494 23624 23623 +23495 23496 23624 +23496 23625 23624 +23496 23497 23626 +23496 23626 23625 +23497 23498 23626 +23498 23627 23626 +23498 23499 23628 +23498 23628 23627 +23499 23500 23628 +23500 23629 23628 +23500 23501 23630 +23500 23630 23629 +23501 23502 23630 +23502 23631 23630 +23502 23503 23632 +23502 23632 23631 +23503 23504 23632 +23504 23633 23632 +23504 23505 23634 +23504 23634 23633 +23505 23506 23634 +23506 23635 23634 +23506 23507 23636 +23506 23636 23635 +23507 23508 23636 +23508 23637 23636 +23508 23509 23638 +23508 23638 23637 +23509 23510 23638 +23510 23639 23638 +23510 23511 23640 +23510 23640 23639 +23511 23512 23640 +23512 23641 23640 +23512 23513 23642 +23512 23642 23641 +23513 23514 23642 +23514 23643 23642 +23514 23515 23644 +23514 23644 23643 +23515 23516 23644 +23516 23645 23644 +23516 23517 23646 +23516 23646 23645 +23517 23518 23646 +23518 23647 23646 +23518 23519 23648 +23518 23648 23647 +23519 23520 23648 +23520 23649 23648 +23520 23521 23650 +23520 23650 23649 +23521 23522 23650 +23522 23651 23650 +23522 23523 23652 +23522 23652 23651 +23523 23524 23652 +23524 23653 23652 +23524 23525 23654 +23524 23654 23653 +23525 23526 23654 +23526 23655 23654 +23526 23527 23656 +23526 23656 23655 +23527 23528 23656 +23528 23657 23656 +23528 23529 23658 +23528 23658 23657 +23529 23530 23658 +23530 23659 23658 +23530 23531 23660 +23530 23660 23659 +23531 23532 23660 +23532 23661 23660 +23532 23533 23662 +23532 23662 23661 +23533 23534 23662 +23534 23663 23662 +23534 23535 23664 +23534 23664 23663 +23535 23536 23664 +23536 23665 23664 +23536 23537 23666 +23536 23666 23665 +23537 23538 23666 +23538 23667 23666 +23538 23539 23668 +23538 23668 23667 +23539 23540 23668 +23540 23669 23668 +23540 23541 23670 +23540 23670 23669 +23541 23542 23670 +23542 23671 23670 +23542 23543 23672 +23542 23672 23671 +23543 23544 23672 +23544 23673 23672 +23544 23545 23674 +23544 23674 23673 +23545 23546 23674 +23546 23675 23674 +23546 23547 23676 +23546 23676 23675 +23547 23548 23676 +23548 23677 23676 +23548 23549 23678 +23548 23678 23677 +23549 23550 23678 +23550 23679 23678 +23550 23551 23680 +23550 23680 23679 +23551 23552 23680 +23552 23681 23680 +23552 23553 23682 +23552 23682 23681 +23553 23554 23682 +23554 23683 23682 +23554 23555 23684 +23554 23684 23683 +23555 23556 23684 +23556 23685 23684 +23556 23557 23686 +23556 23686 23685 +23557 23558 23686 +23558 23687 23686 +23558 23559 23688 +23558 23688 23687 +23560 23561 23690 +23560 23690 23689 +23561 23562 23690 +23562 23691 23690 +23562 23563 23692 +23562 23692 23691 +23563 23564 23692 +23564 23693 23692 +23564 23565 23694 +23564 23694 23693 +23565 23566 23694 +23566 23695 23694 +23566 23567 23696 +23566 23696 23695 +23567 23568 23696 +23568 23697 23696 +23568 23569 23698 +23568 23698 23697 +23569 23570 23698 +23570 23699 23698 +23570 23571 23700 +23570 23700 23699 +23571 23572 23700 +23572 23701 23700 +23572 23573 23702 +23572 23702 23701 +23573 23574 23702 +23574 23703 23702 +23574 23575 23704 +23574 23704 23703 +23575 23576 23704 +23576 23705 23704 +23576 23577 23706 +23576 23706 23705 +23577 23578 23706 +23578 23707 23706 +23578 23579 23708 +23578 23708 23707 +23579 23580 23708 +23580 23709 23708 +23580 23581 23710 +23580 23710 23709 +23581 23582 23710 +23582 23711 23710 +23582 23583 23712 +23582 23712 23711 +23583 23584 23712 +23584 23713 23712 +23584 23585 23714 +23584 23714 23713 +23585 23586 23714 +23586 23715 23714 +23586 23587 23716 +23586 23716 23715 +23587 23588 23716 +23588 23717 23716 +23588 23589 23718 +23588 23718 23717 +23589 23590 23718 +23590 23719 23718 +23590 23591 23720 +23590 23720 23719 +23591 23592 23720 +23592 23721 23720 +23592 23593 23722 +23592 23722 23721 +23593 23594 23722 +23594 23723 23722 +23594 23595 23724 +23594 23724 23723 +23595 23596 23724 +23596 23725 23724 +23596 23597 23726 +23596 23726 23725 +23597 23598 23726 +23598 23727 23726 +23598 23599 23728 +23598 23728 23727 +23599 23600 23728 +23600 23729 23728 +23600 23601 23730 +23600 23730 23729 +23601 23602 23730 +23602 23731 23730 +23602 23603 23732 +23602 23732 23731 +23603 23604 23732 +23604 23733 23732 +23604 23605 23734 +23604 23734 23733 +23605 23606 23734 +23606 23735 23734 +23606 23607 23736 +23606 23736 23735 +23607 23608 23736 +23608 23737 23736 +23608 23609 23738 +23608 23738 23737 +23609 23610 23738 +23610 23739 23738 +23610 23611 23740 +23610 23740 23739 +23611 23612 23740 +23612 23741 23740 +23612 23613 23742 +23612 23742 23741 +23613 23614 23742 +23614 23743 23742 +23614 23615 23744 +23614 23744 23743 +23615 23616 23744 +23616 23745 23744 +23616 23617 23746 +23616 23746 23745 +23617 23618 23746 +23618 23747 23746 +23618 23619 23748 +23618 23748 23747 +23619 23620 23748 +23620 23749 23748 +23620 23621 23750 +23620 23750 23749 +23621 23622 23750 +23622 23751 23750 +23622 23623 23752 +23622 23752 23751 +23623 23624 23752 +23624 23753 23752 +23624 23625 23754 +23624 23754 23753 +23625 23626 23754 +23626 23755 23754 +23626 23627 23756 +23626 23756 23755 +23627 23628 23756 +23628 23757 23756 +23628 23629 23758 +23628 23758 23757 +23629 23630 23758 +23630 23759 23758 +23630 23631 23760 +23630 23760 23759 +23631 23632 23760 +23632 23761 23760 +23632 23633 23762 +23632 23762 23761 +23633 23634 23762 +23634 23763 23762 +23634 23635 23764 +23634 23764 23763 +23635 23636 23764 +23636 23765 23764 +23636 23637 23766 +23636 23766 23765 +23637 23638 23766 +23638 23767 23766 +23638 23639 23768 +23638 23768 23767 +23639 23640 23768 +23640 23769 23768 +23640 23641 23770 +23640 23770 23769 +23641 23642 23770 +23642 23771 23770 +23642 23643 23772 +23642 23772 23771 +23643 23644 23772 +23644 23773 23772 +23644 23645 23774 +23644 23774 23773 +23645 23646 23774 +23646 23775 23774 +23646 23647 23776 +23646 23776 23775 +23647 23648 23776 +23648 23777 23776 +23648 23649 23778 +23648 23778 23777 +23649 23650 23778 +23650 23779 23778 +23650 23651 23780 +23650 23780 23779 +23651 23652 23780 +23652 23781 23780 +23652 23653 23782 +23652 23782 23781 +23653 23654 23782 +23654 23783 23782 +23654 23655 23784 +23654 23784 23783 +23655 23656 23784 +23656 23785 23784 +23656 23657 23786 +23656 23786 23785 +23657 23658 23786 +23658 23787 23786 +23658 23659 23788 +23658 23788 23787 +23659 23660 23788 +23660 23789 23788 +23660 23661 23790 +23660 23790 23789 +23661 23662 23790 +23662 23791 23790 +23662 23663 23792 +23662 23792 23791 +23663 23664 23792 +23664 23793 23792 +23664 23665 23794 +23664 23794 23793 +23665 23666 23794 +23666 23795 23794 +23666 23667 23796 +23666 23796 23795 +23667 23668 23796 +23668 23797 23796 +23668 23669 23798 +23668 23798 23797 +23669 23670 23798 +23670 23799 23798 +23670 23671 23800 +23670 23800 23799 +23671 23672 23800 +23672 23801 23800 +23672 23673 23802 +23672 23802 23801 +23673 23674 23802 +23674 23803 23802 +23674 23675 23804 +23674 23804 23803 +23675 23676 23804 +23676 23805 23804 +23676 23677 23806 +23676 23806 23805 +23677 23678 23806 +23678 23807 23806 +23678 23679 23808 +23678 23808 23807 +23679 23680 23808 +23680 23809 23808 +23680 23681 23810 +23680 23810 23809 +23681 23682 23810 +23682 23811 23810 +23682 23683 23812 +23682 23812 23811 +23683 23684 23812 +23684 23813 23812 +23684 23685 23814 +23684 23814 23813 +23685 23686 23814 +23686 23815 23814 +23686 23687 23816 +23686 23816 23815 +23687 23688 23816 +23688 23817 23816 +23689 23690 23818 +23690 23819 23818 +23690 23691 23820 +23690 23820 23819 +23691 23692 23820 +23692 23821 23820 +23692 23693 23822 +23692 23822 23821 +23693 23694 23822 +23694 23823 23822 +23694 23695 23824 +23694 23824 23823 +23695 23696 23824 +23696 23825 23824 +23696 23697 23826 +23696 23826 23825 +23697 23698 23826 +23698 23827 23826 +23698 23699 23828 +23698 23828 23827 +23699 23700 23828 +23700 23829 23828 +23700 23701 23830 +23700 23830 23829 +23701 23702 23830 +23702 23831 23830 +23702 23703 23832 +23702 23832 23831 +23703 23704 23832 +23704 23833 23832 +23704 23705 23834 +23704 23834 23833 +23705 23706 23834 +23706 23835 23834 +23706 23707 23836 +23706 23836 23835 +23707 23708 23836 +23708 23837 23836 +23708 23709 23838 +23708 23838 23837 +23709 23710 23838 +23710 23839 23838 +23710 23711 23840 +23710 23840 23839 +23711 23712 23840 +23712 23841 23840 +23712 23713 23842 +23712 23842 23841 +23713 23714 23842 +23714 23843 23842 +23714 23715 23844 +23714 23844 23843 +23715 23716 23844 +23716 23845 23844 +23716 23717 23846 +23716 23846 23845 +23717 23718 23846 +23718 23847 23846 +23718 23719 23848 +23718 23848 23847 +23719 23720 23848 +23720 23849 23848 +23720 23721 23850 +23720 23850 23849 +23721 23722 23850 +23722 23851 23850 +23722 23723 23852 +23722 23852 23851 +23723 23724 23852 +23724 23853 23852 +23724 23725 23854 +23724 23854 23853 +23725 23726 23854 +23726 23855 23854 +23726 23727 23856 +23726 23856 23855 +23727 23728 23856 +23728 23857 23856 +23728 23729 23858 +23728 23858 23857 +23729 23730 23858 +23730 23859 23858 +23730 23731 23860 +23730 23860 23859 +23731 23732 23860 +23732 23861 23860 +23732 23733 23862 +23732 23862 23861 +23733 23734 23862 +23734 23863 23862 +23734 23735 23864 +23734 23864 23863 +23735 23736 23864 +23736 23865 23864 +23736 23737 23866 +23736 23866 23865 +23737 23738 23866 +23738 23867 23866 +23738 23739 23868 +23738 23868 23867 +23739 23740 23868 +23740 23869 23868 +23740 23741 23870 +23740 23870 23869 +23741 23742 23870 +23742 23871 23870 +23742 23743 23872 +23742 23872 23871 +23743 23744 23872 +23744 23873 23872 +23744 23745 23874 +23744 23874 23873 +23745 23746 23874 +23746 23875 23874 +23746 23747 23876 +23746 23876 23875 +23747 23748 23876 +23748 23877 23876 +23748 23749 23878 +23748 23878 23877 +23749 23750 23878 +23750 23879 23878 +23750 23751 23880 +23750 23880 23879 +23751 23752 23880 +23752 23881 23880 +23752 23753 23882 +23752 23882 23881 +23753 23754 23882 +23754 23883 23882 +23754 23755 23884 +23754 23884 23883 +23755 23756 23884 +23756 23885 23884 +23756 23757 23886 +23756 23886 23885 +23757 23758 23886 +23758 23887 23886 +23758 23759 23888 +23758 23888 23887 +23759 23760 23888 +23760 23889 23888 +23760 23761 23890 +23760 23890 23889 +23761 23762 23890 +23762 23891 23890 +23762 23763 23892 +23762 23892 23891 +23763 23764 23892 +23764 23893 23892 +23764 23765 23894 +23764 23894 23893 +23765 23766 23894 +23766 23895 23894 +23766 23767 23896 +23766 23896 23895 +23767 23768 23896 +23768 23897 23896 +23768 23769 23898 +23768 23898 23897 +23769 23770 23898 +23770 23899 23898 +23770 23771 23900 +23770 23900 23899 +23771 23772 23900 +23772 23901 23900 +23772 23773 23902 +23772 23902 23901 +23773 23774 23902 +23774 23903 23902 +23774 23775 23904 +23774 23904 23903 +23775 23776 23904 +23776 23905 23904 +23776 23777 23906 +23776 23906 23905 +23777 23778 23906 +23778 23907 23906 +23778 23779 23908 +23778 23908 23907 +23779 23780 23908 +23780 23909 23908 +23780 23781 23910 +23780 23910 23909 +23781 23782 23910 +23782 23911 23910 +23782 23783 23912 +23782 23912 23911 +23783 23784 23912 +23784 23913 23912 +23784 23785 23914 +23784 23914 23913 +23785 23786 23914 +23786 23915 23914 +23786 23787 23916 +23786 23916 23915 +23787 23788 23916 +23788 23917 23916 +23788 23789 23918 +23788 23918 23917 +23789 23790 23918 +23790 23919 23918 +23790 23791 23920 +23790 23920 23919 +23791 23792 23920 +23792 23921 23920 +23792 23793 23922 +23792 23922 23921 +23793 23794 23922 +23794 23923 23922 +23794 23795 23924 +23794 23924 23923 +23795 23796 23924 +23796 23925 23924 +23796 23797 23926 +23796 23926 23925 +23797 23798 23926 +23798 23927 23926 +23798 23799 23928 +23798 23928 23927 +23799 23800 23928 +23800 23929 23928 +23800 23801 23930 +23800 23930 23929 +23801 23802 23930 +23802 23931 23930 +23802 23803 23932 +23802 23932 23931 +23803 23804 23932 +23804 23933 23932 +23804 23805 23934 +23804 23934 23933 +23805 23806 23934 +23806 23935 23934 +23806 23807 23936 +23806 23936 23935 +23807 23808 23936 +23808 23937 23936 +23808 23809 23938 +23808 23938 23937 +23809 23810 23938 +23810 23939 23938 +23810 23811 23940 +23810 23940 23939 +23811 23812 23940 +23812 23941 23940 +23812 23813 23942 +23812 23942 23941 +23813 23814 23942 +23814 23943 23942 +23814 23815 23944 +23814 23944 23943 +23815 23816 23944 +23816 23945 23944 +23816 23817 23946 +23816 23946 23945 +23818 23819 23948 +23818 23948 23947 +23819 23820 23948 +23820 23949 23948 +23820 23821 23950 +23820 23950 23949 +23821 23822 23950 +23822 23951 23950 +23822 23823 23952 +23822 23952 23951 +23823 23824 23952 +23824 23953 23952 +23824 23825 23954 +23824 23954 23953 +23825 23826 23954 +23826 23955 23954 +23826 23827 23956 +23826 23956 23955 +23827 23828 23956 +23828 23957 23956 +23828 23829 23958 +23828 23958 23957 +23829 23830 23958 +23830 23959 23958 +23830 23831 23960 +23830 23960 23959 +23831 23832 23960 +23832 23961 23960 +23832 23833 23962 +23832 23962 23961 +23833 23834 23962 +23834 23963 23962 +23834 23835 23964 +23834 23964 23963 +23835 23836 23964 +23836 23965 23964 +23836 23837 23966 +23836 23966 23965 +23837 23838 23966 +23838 23967 23966 +23838 23839 23968 +23838 23968 23967 +23839 23840 23968 +23840 23969 23968 +23840 23841 23970 +23840 23970 23969 +23841 23842 23970 +23842 23971 23970 +23842 23843 23972 +23842 23972 23971 +23843 23844 23972 +23844 23973 23972 +23844 23845 23974 +23844 23974 23973 +23845 23846 23974 +23846 23975 23974 +23846 23847 23976 +23846 23976 23975 +23847 23848 23976 +23848 23977 23976 +23848 23849 23978 +23848 23978 23977 +23849 23850 23978 +23850 23979 23978 +23850 23851 23980 +23850 23980 23979 +23851 23852 23980 +23852 23981 23980 +23852 23853 23982 +23852 23982 23981 +23853 23854 23982 +23854 23983 23982 +23854 23855 23984 +23854 23984 23983 +23855 23856 23984 +23856 23985 23984 +23856 23857 23986 +23856 23986 23985 +23857 23858 23986 +23858 23987 23986 +23858 23859 23988 +23858 23988 23987 +23859 23860 23988 +23860 23989 23988 +23860 23861 23990 +23860 23990 23989 +23861 23862 23990 +23862 23991 23990 +23862 23863 23992 +23862 23992 23991 +23863 23864 23992 +23864 23993 23992 +23864 23865 23994 +23864 23994 23993 +23865 23866 23994 +23866 23995 23994 +23866 23867 23996 +23866 23996 23995 +23867 23868 23996 +23868 23997 23996 +23868 23869 23998 +23868 23998 23997 +23869 23870 23998 +23870 23999 23998 +23870 23871 24000 +23870 24000 23999 +23871 23872 24000 +23872 24001 24000 +23872 23873 24002 +23872 24002 24001 +23873 23874 24002 +23874 24003 24002 +23874 23875 24004 +23874 24004 24003 +23875 23876 24004 +23876 24005 24004 +23876 23877 24006 +23876 24006 24005 +23877 23878 24006 +23878 24007 24006 +23878 23879 24008 +23878 24008 24007 +23879 23880 24008 +23880 24009 24008 +23880 23881 24010 +23880 24010 24009 +23881 23882 24010 +23882 24011 24010 +23882 23883 24012 +23882 24012 24011 +23883 23884 24012 +23884 24013 24012 +23884 23885 24014 +23884 24014 24013 +23885 23886 24014 +23886 24015 24014 +23886 23887 24016 +23886 24016 24015 +23887 23888 24016 +23888 24017 24016 +23888 23889 24018 +23888 24018 24017 +23889 23890 24018 +23890 24019 24018 +23890 23891 24020 +23890 24020 24019 +23891 23892 24020 +23892 24021 24020 +23892 23893 24022 +23892 24022 24021 +23893 23894 24022 +23894 24023 24022 +23894 23895 24024 +23894 24024 24023 +23895 23896 24024 +23896 24025 24024 +23896 23897 24026 +23896 24026 24025 +23897 23898 24026 +23898 24027 24026 +23898 23899 24028 +23898 24028 24027 +23899 23900 24028 +23900 24029 24028 +23900 23901 24030 +23900 24030 24029 +23901 23902 24030 +23902 24031 24030 +23902 23903 24032 +23902 24032 24031 +23903 23904 24032 +23904 24033 24032 +23904 23905 24034 +23904 24034 24033 +23905 23906 24034 +23906 24035 24034 +23906 23907 24036 +23906 24036 24035 +23907 23908 24036 +23908 24037 24036 +23908 23909 24038 +23908 24038 24037 +23909 23910 24038 +23910 24039 24038 +23910 23911 24040 +23910 24040 24039 +23911 23912 24040 +23912 24041 24040 +23912 23913 24042 +23912 24042 24041 +23913 23914 24042 +23914 24043 24042 +23914 23915 24044 +23914 24044 24043 +23915 23916 24044 +23916 24045 24044 +23916 23917 24046 +23916 24046 24045 +23917 23918 24046 +23918 24047 24046 +23918 23919 24048 +23918 24048 24047 +23919 23920 24048 +23920 24049 24048 +23920 23921 24050 +23920 24050 24049 +23921 23922 24050 +23922 24051 24050 +23922 23923 24052 +23922 24052 24051 +23923 23924 24052 +23924 24053 24052 +23924 23925 24054 +23924 24054 24053 +23925 23926 24054 +23926 24055 24054 +23926 23927 24056 +23926 24056 24055 +23927 23928 24056 +23928 24057 24056 +23928 23929 24058 +23928 24058 24057 +23929 23930 24058 +23930 24059 24058 +23930 23931 24060 +23930 24060 24059 +23931 23932 24060 +23932 24061 24060 +23932 23933 24062 +23932 24062 24061 +23933 23934 24062 +23934 24063 24062 +23934 23935 24064 +23934 24064 24063 +23935 23936 24064 +23936 24065 24064 +23936 23937 24066 +23936 24066 24065 +23937 23938 24066 +23938 24067 24066 +23938 23939 24068 +23938 24068 24067 +23939 23940 24068 +23940 24069 24068 +23940 23941 24070 +23940 24070 24069 +23941 23942 24070 +23942 24071 24070 +23942 23943 24072 +23942 24072 24071 +23943 23944 24072 +23944 24073 24072 +23944 23945 24074 +23944 24074 24073 +23945 23946 24074 +23946 24075 24074 +23947 23948 24076 +23948 24077 24076 +23948 23949 24078 +23948 24078 24077 +23949 23950 24078 +23950 24079 24078 +23950 23951 24080 +23950 24080 24079 +23951 23952 24080 +23952 24081 24080 +23952 23953 24082 +23952 24082 24081 +23953 23954 24082 +23954 24083 24082 +23954 23955 24084 +23954 24084 24083 +23955 23956 24084 +23956 24085 24084 +23956 23957 24086 +23956 24086 24085 +23957 23958 24086 +23958 24087 24086 +23958 23959 24088 +23958 24088 24087 +23959 23960 24088 +23960 24089 24088 +23960 23961 24090 +23960 24090 24089 +23961 23962 24090 +23962 24091 24090 +23962 23963 24092 +23962 24092 24091 +23963 23964 24092 +23964 24093 24092 +23964 23965 24094 +23964 24094 24093 +23965 23966 24094 +23966 24095 24094 +23966 23967 24096 +23966 24096 24095 +23967 23968 24096 +23968 24097 24096 +23968 23969 24098 +23968 24098 24097 +23969 23970 24098 +23970 24099 24098 +23970 23971 24100 +23970 24100 24099 +23971 23972 24100 +23972 24101 24100 +23972 23973 24102 +23972 24102 24101 +23973 23974 24102 +23974 24103 24102 +23974 23975 24104 +23974 24104 24103 +23975 23976 24104 +23976 24105 24104 +23976 23977 24106 +23976 24106 24105 +23977 23978 24106 +23978 24107 24106 +23978 23979 24108 +23978 24108 24107 +23979 23980 24108 +23980 24109 24108 +23980 23981 24110 +23980 24110 24109 +23981 23982 24110 +23982 24111 24110 +23982 23983 24112 +23982 24112 24111 +23983 23984 24112 +23984 24113 24112 +23984 23985 24114 +23984 24114 24113 +23985 23986 24114 +23986 24115 24114 +23986 23987 24116 +23986 24116 24115 +23987 23988 24116 +23988 24117 24116 +23988 23989 24118 +23988 24118 24117 +23989 23990 24118 +23990 24119 24118 +23990 23991 24120 +23990 24120 24119 +23991 23992 24120 +23992 24121 24120 +23992 23993 24122 +23992 24122 24121 +23993 23994 24122 +23994 24123 24122 +23994 23995 24124 +23994 24124 24123 +23995 23996 24124 +23996 24125 24124 +23996 23997 24126 +23996 24126 24125 +23997 23998 24126 +23998 24127 24126 +23998 23999 24128 +23998 24128 24127 +23999 24000 24128 +24000 24129 24128 +24000 24001 24130 +24000 24130 24129 +24001 24002 24130 +24002 24131 24130 +24002 24003 24132 +24002 24132 24131 +24003 24004 24132 +24004 24133 24132 +24004 24005 24134 +24004 24134 24133 +24005 24006 24134 +24006 24135 24134 +24006 24007 24136 +24006 24136 24135 +24007 24008 24136 +24008 24137 24136 +24008 24009 24138 +24008 24138 24137 +24009 24010 24138 +24010 24139 24138 +24010 24011 24140 +24010 24140 24139 +24011 24012 24140 +24012 24141 24140 +24012 24013 24142 +24012 24142 24141 +24013 24014 24142 +24014 24143 24142 +24014 24015 24144 +24014 24144 24143 +24015 24016 24144 +24016 24145 24144 +24016 24017 24146 +24016 24146 24145 +24017 24018 24146 +24018 24147 24146 +24018 24019 24148 +24018 24148 24147 +24019 24020 24148 +24020 24149 24148 +24020 24021 24150 +24020 24150 24149 +24021 24022 24150 +24022 24151 24150 +24022 24023 24152 +24022 24152 24151 +24023 24024 24152 +24024 24153 24152 +24024 24025 24154 +24024 24154 24153 +24025 24026 24154 +24026 24155 24154 +24026 24027 24156 +24026 24156 24155 +24027 24028 24156 +24028 24157 24156 +24028 24029 24158 +24028 24158 24157 +24029 24030 24158 +24030 24159 24158 +24030 24031 24160 +24030 24160 24159 +24031 24032 24160 +24032 24161 24160 +24032 24033 24162 +24032 24162 24161 +24033 24034 24162 +24034 24163 24162 +24034 24035 24164 +24034 24164 24163 +24035 24036 24164 +24036 24165 24164 +24036 24037 24166 +24036 24166 24165 +24037 24038 24166 +24038 24167 24166 +24038 24039 24168 +24038 24168 24167 +24039 24040 24168 +24040 24169 24168 +24040 24041 24170 +24040 24170 24169 +24041 24042 24170 +24042 24171 24170 +24042 24043 24172 +24042 24172 24171 +24043 24044 24172 +24044 24173 24172 +24044 24045 24174 +24044 24174 24173 +24045 24046 24174 +24046 24175 24174 +24046 24047 24176 +24046 24176 24175 +24047 24048 24176 +24048 24177 24176 +24048 24049 24178 +24048 24178 24177 +24049 24050 24178 +24050 24179 24178 +24050 24051 24180 +24050 24180 24179 +24051 24052 24180 +24052 24181 24180 +24052 24053 24182 +24052 24182 24181 +24053 24054 24182 +24054 24183 24182 +24054 24055 24184 +24054 24184 24183 +24055 24056 24184 +24056 24185 24184 +24056 24057 24186 +24056 24186 24185 +24057 24058 24186 +24058 24187 24186 +24058 24059 24188 +24058 24188 24187 +24059 24060 24188 +24060 24189 24188 +24060 24061 24190 +24060 24190 24189 +24061 24062 24190 +24062 24191 24190 +24062 24063 24192 +24062 24192 24191 +24063 24064 24192 +24064 24193 24192 +24064 24065 24194 +24064 24194 24193 +24065 24066 24194 +24066 24195 24194 +24066 24067 24196 +24066 24196 24195 +24067 24068 24196 +24068 24197 24196 +24068 24069 24198 +24068 24198 24197 +24069 24070 24198 +24070 24199 24198 +24070 24071 24200 +24070 24200 24199 +24071 24072 24200 +24072 24201 24200 +24072 24073 24202 +24072 24202 24201 +24073 24074 24202 +24074 24203 24202 +24074 24075 24204 +24074 24204 24203 +24076 24077 24206 +24076 24206 24205 +24077 24078 24206 +24078 24207 24206 +24078 24079 24208 +24078 24208 24207 +24079 24080 24208 +24080 24209 24208 +24080 24081 24210 +24080 24210 24209 +24081 24082 24210 +24082 24211 24210 +24082 24083 24212 +24082 24212 24211 +24083 24084 24212 +24084 24213 24212 +24084 24085 24214 +24084 24214 24213 +24085 24086 24214 +24086 24215 24214 +24086 24087 24216 +24086 24216 24215 +24087 24088 24216 +24088 24217 24216 +24088 24089 24218 +24088 24218 24217 +24089 24090 24218 +24090 24219 24218 +24090 24091 24220 +24090 24220 24219 +24091 24092 24220 +24092 24221 24220 +24092 24093 24222 +24092 24222 24221 +24093 24094 24222 +24094 24223 24222 +24094 24095 24224 +24094 24224 24223 +24095 24096 24224 +24096 24225 24224 +24096 24097 24226 +24096 24226 24225 +24097 24098 24226 +24098 24227 24226 +24098 24099 24228 +24098 24228 24227 +24099 24100 24228 +24100 24229 24228 +24100 24101 24230 +24100 24230 24229 +24101 24102 24230 +24102 24231 24230 +24102 24103 24232 +24102 24232 24231 +24103 24104 24232 +24104 24233 24232 +24104 24105 24234 +24104 24234 24233 +24105 24106 24234 +24106 24235 24234 +24106 24107 24236 +24106 24236 24235 +24107 24108 24236 +24108 24237 24236 +24108 24109 24238 +24108 24238 24237 +24109 24110 24238 +24110 24239 24238 +24110 24111 24240 +24110 24240 24239 +24111 24112 24240 +24112 24241 24240 +24112 24113 24242 +24112 24242 24241 +24113 24114 24242 +24114 24243 24242 +24114 24115 24244 +24114 24244 24243 +24115 24116 24244 +24116 24245 24244 +24116 24117 24246 +24116 24246 24245 +24117 24118 24246 +24118 24247 24246 +24118 24119 24248 +24118 24248 24247 +24119 24120 24248 +24120 24249 24248 +24120 24121 24250 +24120 24250 24249 +24121 24122 24250 +24122 24251 24250 +24122 24123 24252 +24122 24252 24251 +24123 24124 24252 +24124 24253 24252 +24124 24125 24254 +24124 24254 24253 +24125 24126 24254 +24126 24255 24254 +24126 24127 24256 +24126 24256 24255 +24127 24128 24256 +24128 24257 24256 +24128 24129 24258 +24128 24258 24257 +24129 24130 24258 +24130 24259 24258 +24130 24131 24260 +24130 24260 24259 +24131 24132 24260 +24132 24261 24260 +24132 24133 24262 +24132 24262 24261 +24133 24134 24262 +24134 24263 24262 +24134 24135 24264 +24134 24264 24263 +24135 24136 24264 +24136 24265 24264 +24136 24137 24266 +24136 24266 24265 +24137 24138 24266 +24138 24267 24266 +24138 24139 24268 +24138 24268 24267 +24139 24140 24268 +24140 24269 24268 +24140 24141 24270 +24140 24270 24269 +24141 24142 24270 +24142 24271 24270 +24142 24143 24272 +24142 24272 24271 +24143 24144 24272 +24144 24273 24272 +24144 24145 24274 +24144 24274 24273 +24145 24146 24274 +24146 24275 24274 +24146 24147 24276 +24146 24276 24275 +24147 24148 24276 +24148 24277 24276 +24148 24149 24278 +24148 24278 24277 +24149 24150 24278 +24150 24279 24278 +24150 24151 24280 +24150 24280 24279 +24151 24152 24280 +24152 24281 24280 +24152 24153 24282 +24152 24282 24281 +24153 24154 24282 +24154 24283 24282 +24154 24155 24284 +24154 24284 24283 +24155 24156 24284 +24156 24285 24284 +24156 24157 24286 +24156 24286 24285 +24157 24158 24286 +24158 24287 24286 +24158 24159 24288 +24158 24288 24287 +24159 24160 24288 +24160 24289 24288 +24160 24161 24290 +24160 24290 24289 +24161 24162 24290 +24162 24291 24290 +24162 24163 24292 +24162 24292 24291 +24163 24164 24292 +24164 24293 24292 +24164 24165 24294 +24164 24294 24293 +24165 24166 24294 +24166 24295 24294 +24166 24167 24296 +24166 24296 24295 +24167 24168 24296 +24168 24297 24296 +24168 24169 24298 +24168 24298 24297 +24169 24170 24298 +24170 24299 24298 +24170 24171 24300 +24170 24300 24299 +24171 24172 24300 +24172 24301 24300 +24172 24173 24302 +24172 24302 24301 +24173 24174 24302 +24174 24303 24302 +24174 24175 24304 +24174 24304 24303 +24175 24176 24304 +24176 24305 24304 +24176 24177 24306 +24176 24306 24305 +24177 24178 24306 +24178 24307 24306 +24178 24179 24308 +24178 24308 24307 +24179 24180 24308 +24180 24309 24308 +24180 24181 24310 +24180 24310 24309 +24181 24182 24310 +24182 24311 24310 +24182 24183 24312 +24182 24312 24311 +24183 24184 24312 +24184 24313 24312 +24184 24185 24314 +24184 24314 24313 +24185 24186 24314 +24186 24315 24314 +24186 24187 24316 +24186 24316 24315 +24187 24188 24316 +24188 24317 24316 +24188 24189 24318 +24188 24318 24317 +24189 24190 24318 +24190 24319 24318 +24190 24191 24320 +24190 24320 24319 +24191 24192 24320 +24192 24321 24320 +24192 24193 24322 +24192 24322 24321 +24193 24194 24322 +24194 24323 24322 +24194 24195 24324 +24194 24324 24323 +24195 24196 24324 +24196 24325 24324 +24196 24197 24326 +24196 24326 24325 +24197 24198 24326 +24198 24327 24326 +24198 24199 24328 +24198 24328 24327 +24199 24200 24328 +24200 24329 24328 +24200 24201 24330 +24200 24330 24329 +24201 24202 24330 +24202 24331 24330 +24202 24203 24332 +24202 24332 24331 +24203 24204 24332 +24204 24333 24332 +24205 24206 24334 +24206 24335 24334 +24206 24207 24336 +24206 24336 24335 +24207 24208 24336 +24208 24337 24336 +24208 24209 24338 +24208 24338 24337 +24209 24210 24338 +24210 24339 24338 +24210 24211 24340 +24210 24340 24339 +24211 24212 24340 +24212 24341 24340 +24212 24213 24342 +24212 24342 24341 +24213 24214 24342 +24214 24343 24342 +24214 24215 24344 +24214 24344 24343 +24215 24216 24344 +24216 24345 24344 +24216 24217 24346 +24216 24346 24345 +24217 24218 24346 +24218 24347 24346 +24218 24219 24348 +24218 24348 24347 +24219 24220 24348 +24220 24349 24348 +24220 24221 24350 +24220 24350 24349 +24221 24222 24350 +24222 24351 24350 +24222 24223 24352 +24222 24352 24351 +24223 24224 24352 +24224 24353 24352 +24224 24225 24354 +24224 24354 24353 +24225 24226 24354 +24226 24355 24354 +24226 24227 24356 +24226 24356 24355 +24227 24228 24356 +24228 24357 24356 +24228 24229 24358 +24228 24358 24357 +24229 24230 24358 +24230 24359 24358 +24230 24231 24360 +24230 24360 24359 +24231 24232 24360 +24232 24361 24360 +24232 24233 24362 +24232 24362 24361 +24233 24234 24362 +24234 24363 24362 +24234 24235 24364 +24234 24364 24363 +24235 24236 24364 +24236 24365 24364 +24236 24237 24366 +24236 24366 24365 +24237 24238 24366 +24238 24367 24366 +24238 24239 24368 +24238 24368 24367 +24239 24240 24368 +24240 24369 24368 +24240 24241 24370 +24240 24370 24369 +24241 24242 24370 +24242 24371 24370 +24242 24243 24372 +24242 24372 24371 +24243 24244 24372 +24244 24373 24372 +24244 24245 24374 +24244 24374 24373 +24245 24246 24374 +24246 24375 24374 +24246 24247 24376 +24246 24376 24375 +24247 24248 24376 +24248 24377 24376 +24248 24249 24378 +24248 24378 24377 +24249 24250 24378 +24250 24379 24378 +24250 24251 24380 +24250 24380 24379 +24251 24252 24380 +24252 24381 24380 +24252 24253 24382 +24252 24382 24381 +24253 24254 24382 +24254 24383 24382 +24254 24255 24384 +24254 24384 24383 +24255 24256 24384 +24256 24385 24384 +24256 24257 24386 +24256 24386 24385 +24257 24258 24386 +24258 24387 24386 +24258 24259 24388 +24258 24388 24387 +24259 24260 24388 +24260 24389 24388 +24260 24261 24390 +24260 24390 24389 +24261 24262 24390 +24262 24391 24390 +24262 24263 24392 +24262 24392 24391 +24263 24264 24392 +24264 24393 24392 +24264 24265 24394 +24264 24394 24393 +24265 24266 24394 +24266 24395 24394 +24266 24267 24396 +24266 24396 24395 +24267 24268 24396 +24268 24397 24396 +24268 24269 24398 +24268 24398 24397 +24269 24270 24398 +24270 24399 24398 +24270 24271 24400 +24270 24400 24399 +24271 24272 24400 +24272 24401 24400 +24272 24273 24402 +24272 24402 24401 +24273 24274 24402 +24274 24403 24402 +24274 24275 24404 +24274 24404 24403 +24275 24276 24404 +24276 24405 24404 +24276 24277 24406 +24276 24406 24405 +24277 24278 24406 +24278 24407 24406 +24278 24279 24408 +24278 24408 24407 +24279 24280 24408 +24280 24409 24408 +24280 24281 24410 +24280 24410 24409 +24281 24282 24410 +24282 24411 24410 +24282 24283 24412 +24282 24412 24411 +24283 24284 24412 +24284 24413 24412 +24284 24285 24414 +24284 24414 24413 +24285 24286 24414 +24286 24415 24414 +24286 24287 24416 +24286 24416 24415 +24287 24288 24416 +24288 24417 24416 +24288 24289 24418 +24288 24418 24417 +24289 24290 24418 +24290 24419 24418 +24290 24291 24420 +24290 24420 24419 +24291 24292 24420 +24292 24421 24420 +24292 24293 24422 +24292 24422 24421 +24293 24294 24422 +24294 24423 24422 +24294 24295 24424 +24294 24424 24423 +24295 24296 24424 +24296 24425 24424 +24296 24297 24426 +24296 24426 24425 +24297 24298 24426 +24298 24427 24426 +24298 24299 24428 +24298 24428 24427 +24299 24300 24428 +24300 24429 24428 +24300 24301 24430 +24300 24430 24429 +24301 24302 24430 +24302 24431 24430 +24302 24303 24432 +24302 24432 24431 +24303 24304 24432 +24304 24433 24432 +24304 24305 24434 +24304 24434 24433 +24305 24306 24434 +24306 24435 24434 +24306 24307 24436 +24306 24436 24435 +24307 24308 24436 +24308 24437 24436 +24308 24309 24438 +24308 24438 24437 +24309 24310 24438 +24310 24439 24438 +24310 24311 24440 +24310 24440 24439 +24311 24312 24440 +24312 24441 24440 +24312 24313 24442 +24312 24442 24441 +24313 24314 24442 +24314 24443 24442 +24314 24315 24444 +24314 24444 24443 +24315 24316 24444 +24316 24445 24444 +24316 24317 24446 +24316 24446 24445 +24317 24318 24446 +24318 24447 24446 +24318 24319 24448 +24318 24448 24447 +24319 24320 24448 +24320 24449 24448 +24320 24321 24450 +24320 24450 24449 +24321 24322 24450 +24322 24451 24450 +24322 24323 24452 +24322 24452 24451 +24323 24324 24452 +24324 24453 24452 +24324 24325 24454 +24324 24454 24453 +24325 24326 24454 +24326 24455 24454 +24326 24327 24456 +24326 24456 24455 +24327 24328 24456 +24328 24457 24456 +24328 24329 24458 +24328 24458 24457 +24329 24330 24458 +24330 24459 24458 +24330 24331 24460 +24330 24460 24459 +24331 24332 24460 +24332 24461 24460 +24332 24333 24462 +24332 24462 24461 +24334 24335 24464 +24334 24464 24463 +24335 24336 24464 +24336 24465 24464 +24336 24337 24466 +24336 24466 24465 +24337 24338 24466 +24338 24467 24466 +24338 24339 24468 +24338 24468 24467 +24339 24340 24468 +24340 24469 24468 +24340 24341 24470 +24340 24470 24469 +24341 24342 24470 +24342 24471 24470 +24342 24343 24472 +24342 24472 24471 +24343 24344 24472 +24344 24473 24472 +24344 24345 24474 +24344 24474 24473 +24345 24346 24474 +24346 24475 24474 +24346 24347 24476 +24346 24476 24475 +24347 24348 24476 +24348 24477 24476 +24348 24349 24478 +24348 24478 24477 +24349 24350 24478 +24350 24479 24478 +24350 24351 24480 +24350 24480 24479 +24351 24352 24480 +24352 24481 24480 +24352 24353 24482 +24352 24482 24481 +24353 24354 24482 +24354 24483 24482 +24354 24355 24484 +24354 24484 24483 +24355 24356 24484 +24356 24485 24484 +24356 24357 24486 +24356 24486 24485 +24357 24358 24486 +24358 24487 24486 +24358 24359 24488 +24358 24488 24487 +24359 24360 24488 +24360 24489 24488 +24360 24361 24490 +24360 24490 24489 +24361 24362 24490 +24362 24491 24490 +24362 24363 24492 +24362 24492 24491 +24363 24364 24492 +24364 24493 24492 +24364 24365 24494 +24364 24494 24493 +24365 24366 24494 +24366 24495 24494 +24366 24367 24496 +24366 24496 24495 +24367 24368 24496 +24368 24497 24496 +24368 24369 24498 +24368 24498 24497 +24369 24370 24498 +24370 24499 24498 +24370 24371 24500 +24370 24500 24499 +24371 24372 24500 +24372 24501 24500 +24372 24373 24502 +24372 24502 24501 +24373 24374 24502 +24374 24503 24502 +24374 24375 24504 +24374 24504 24503 +24375 24376 24504 +24376 24505 24504 +24376 24377 24506 +24376 24506 24505 +24377 24378 24506 +24378 24507 24506 +24378 24379 24508 +24378 24508 24507 +24379 24380 24508 +24380 24509 24508 +24380 24381 24510 +24380 24510 24509 +24381 24382 24510 +24382 24511 24510 +24382 24383 24512 +24382 24512 24511 +24383 24384 24512 +24384 24513 24512 +24384 24385 24514 +24384 24514 24513 +24385 24386 24514 +24386 24515 24514 +24386 24387 24516 +24386 24516 24515 +24387 24388 24516 +24388 24517 24516 +24388 24389 24518 +24388 24518 24517 +24389 24390 24518 +24390 24519 24518 +24390 24391 24520 +24390 24520 24519 +24391 24392 24520 +24392 24521 24520 +24392 24393 24522 +24392 24522 24521 +24393 24394 24522 +24394 24523 24522 +24394 24395 24524 +24394 24524 24523 +24395 24396 24524 +24396 24525 24524 +24396 24397 24526 +24396 24526 24525 +24397 24398 24526 +24398 24527 24526 +24398 24399 24528 +24398 24528 24527 +24399 24400 24528 +24400 24529 24528 +24400 24401 24530 +24400 24530 24529 +24401 24402 24530 +24402 24531 24530 +24402 24403 24532 +24402 24532 24531 +24403 24404 24532 +24404 24533 24532 +24404 24405 24534 +24404 24534 24533 +24405 24406 24534 +24406 24535 24534 +24406 24407 24536 +24406 24536 24535 +24407 24408 24536 +24408 24537 24536 +24408 24409 24538 +24408 24538 24537 +24409 24410 24538 +24410 24539 24538 +24410 24411 24540 +24410 24540 24539 +24411 24412 24540 +24412 24541 24540 +24412 24413 24542 +24412 24542 24541 +24413 24414 24542 +24414 24543 24542 +24414 24415 24544 +24414 24544 24543 +24415 24416 24544 +24416 24545 24544 +24416 24417 24546 +24416 24546 24545 +24417 24418 24546 +24418 24547 24546 +24418 24419 24548 +24418 24548 24547 +24419 24420 24548 +24420 24549 24548 +24420 24421 24550 +24420 24550 24549 +24421 24422 24550 +24422 24551 24550 +24422 24423 24552 +24422 24552 24551 +24423 24424 24552 +24424 24553 24552 +24424 24425 24554 +24424 24554 24553 +24425 24426 24554 +24426 24555 24554 +24426 24427 24556 +24426 24556 24555 +24427 24428 24556 +24428 24557 24556 +24428 24429 24558 +24428 24558 24557 +24429 24430 24558 +24430 24559 24558 +24430 24431 24560 +24430 24560 24559 +24431 24432 24560 +24432 24561 24560 +24432 24433 24562 +24432 24562 24561 +24433 24434 24562 +24434 24563 24562 +24434 24435 24564 +24434 24564 24563 +24435 24436 24564 +24436 24565 24564 +24436 24437 24566 +24436 24566 24565 +24437 24438 24566 +24438 24567 24566 +24438 24439 24568 +24438 24568 24567 +24439 24440 24568 +24440 24569 24568 +24440 24441 24570 +24440 24570 24569 +24441 24442 24570 +24442 24571 24570 +24442 24443 24572 +24442 24572 24571 +24443 24444 24572 +24444 24573 24572 +24444 24445 24574 +24444 24574 24573 +24445 24446 24574 +24446 24575 24574 +24446 24447 24576 +24446 24576 24575 +24447 24448 24576 +24448 24577 24576 +24448 24449 24578 +24448 24578 24577 +24449 24450 24578 +24450 24579 24578 +24450 24451 24580 +24450 24580 24579 +24451 24452 24580 +24452 24581 24580 +24452 24453 24582 +24452 24582 24581 +24453 24454 24582 +24454 24583 24582 +24454 24455 24584 +24454 24584 24583 +24455 24456 24584 +24456 24585 24584 +24456 24457 24586 +24456 24586 24585 +24457 24458 24586 +24458 24587 24586 +24458 24459 24588 +24458 24588 24587 +24459 24460 24588 +24460 24589 24588 +24460 24461 24590 +24460 24590 24589 +24461 24462 24590 +24462 24591 24590 +24463 24464 24592 +24464 24593 24592 +24464 24465 24594 +24464 24594 24593 +24465 24466 24594 +24466 24595 24594 +24466 24467 24596 +24466 24596 24595 +24467 24468 24596 +24468 24597 24596 +24468 24469 24598 +24468 24598 24597 +24469 24470 24598 +24470 24599 24598 +24470 24471 24600 +24470 24600 24599 +24471 24472 24600 +24472 24601 24600 +24472 24473 24602 +24472 24602 24601 +24473 24474 24602 +24474 24603 24602 +24474 24475 24604 +24474 24604 24603 +24475 24476 24604 +24476 24605 24604 +24476 24477 24606 +24476 24606 24605 +24477 24478 24606 +24478 24607 24606 +24478 24479 24608 +24478 24608 24607 +24479 24480 24608 +24480 24609 24608 +24480 24481 24610 +24480 24610 24609 +24481 24482 24610 +24482 24611 24610 +24482 24483 24612 +24482 24612 24611 +24483 24484 24612 +24484 24613 24612 +24484 24485 24614 +24484 24614 24613 +24485 24486 24614 +24486 24615 24614 +24486 24487 24616 +24486 24616 24615 +24487 24488 24616 +24488 24617 24616 +24488 24489 24618 +24488 24618 24617 +24489 24490 24618 +24490 24619 24618 +24490 24491 24620 +24490 24620 24619 +24491 24492 24620 +24492 24621 24620 +24492 24493 24622 +24492 24622 24621 +24493 24494 24622 +24494 24623 24622 +24494 24495 24624 +24494 24624 24623 +24495 24496 24624 +24496 24625 24624 +24496 24497 24626 +24496 24626 24625 +24497 24498 24626 +24498 24627 24626 +24498 24499 24628 +24498 24628 24627 +24499 24500 24628 +24500 24629 24628 +24500 24501 24630 +24500 24630 24629 +24501 24502 24630 +24502 24631 24630 +24502 24503 24632 +24502 24632 24631 +24503 24504 24632 +24504 24633 24632 +24504 24505 24634 +24504 24634 24633 +24505 24506 24634 +24506 24635 24634 +24506 24507 24636 +24506 24636 24635 +24507 24508 24636 +24508 24637 24636 +24508 24509 24638 +24508 24638 24637 +24509 24510 24638 +24510 24639 24638 +24510 24511 24640 +24510 24640 24639 +24511 24512 24640 +24512 24641 24640 +24512 24513 24642 +24512 24642 24641 +24513 24514 24642 +24514 24643 24642 +24514 24515 24644 +24514 24644 24643 +24515 24516 24644 +24516 24645 24644 +24516 24517 24646 +24516 24646 24645 +24517 24518 24646 +24518 24647 24646 +24518 24519 24648 +24518 24648 24647 +24519 24520 24648 +24520 24649 24648 +24520 24521 24650 +24520 24650 24649 +24521 24522 24650 +24522 24651 24650 +24522 24523 24652 +24522 24652 24651 +24523 24524 24652 +24524 24653 24652 +24524 24525 24654 +24524 24654 24653 +24525 24526 24654 +24526 24655 24654 +24526 24527 24656 +24526 24656 24655 +24527 24528 24656 +24528 24657 24656 +24528 24529 24658 +24528 24658 24657 +24529 24530 24658 +24530 24659 24658 +24530 24531 24660 +24530 24660 24659 +24531 24532 24660 +24532 24661 24660 +24532 24533 24662 +24532 24662 24661 +24533 24534 24662 +24534 24663 24662 +24534 24535 24664 +24534 24664 24663 +24535 24536 24664 +24536 24665 24664 +24536 24537 24666 +24536 24666 24665 +24537 24538 24666 +24538 24667 24666 +24538 24539 24668 +24538 24668 24667 +24539 24540 24668 +24540 24669 24668 +24540 24541 24670 +24540 24670 24669 +24541 24542 24670 +24542 24671 24670 +24542 24543 24672 +24542 24672 24671 +24543 24544 24672 +24544 24673 24672 +24544 24545 24674 +24544 24674 24673 +24545 24546 24674 +24546 24675 24674 +24546 24547 24676 +24546 24676 24675 +24547 24548 24676 +24548 24677 24676 +24548 24549 24678 +24548 24678 24677 +24549 24550 24678 +24550 24679 24678 +24550 24551 24680 +24550 24680 24679 +24551 24552 24680 +24552 24681 24680 +24552 24553 24682 +24552 24682 24681 +24553 24554 24682 +24554 24683 24682 +24554 24555 24684 +24554 24684 24683 +24555 24556 24684 +24556 24685 24684 +24556 24557 24686 +24556 24686 24685 +24557 24558 24686 +24558 24687 24686 +24558 24559 24688 +24558 24688 24687 +24559 24560 24688 +24560 24689 24688 +24560 24561 24690 +24560 24690 24689 +24561 24562 24690 +24562 24691 24690 +24562 24563 24692 +24562 24692 24691 +24563 24564 24692 +24564 24693 24692 +24564 24565 24694 +24564 24694 24693 +24565 24566 24694 +24566 24695 24694 +24566 24567 24696 +24566 24696 24695 +24567 24568 24696 +24568 24697 24696 +24568 24569 24698 +24568 24698 24697 +24569 24570 24698 +24570 24699 24698 +24570 24571 24700 +24570 24700 24699 +24571 24572 24700 +24572 24701 24700 +24572 24573 24702 +24572 24702 24701 +24573 24574 24702 +24574 24703 24702 +24574 24575 24704 +24574 24704 24703 +24575 24576 24704 +24576 24705 24704 +24576 24577 24706 +24576 24706 24705 +24577 24578 24706 +24578 24707 24706 +24578 24579 24708 +24578 24708 24707 +24579 24580 24708 +24580 24709 24708 +24580 24581 24710 +24580 24710 24709 +24581 24582 24710 +24582 24711 24710 +24582 24583 24712 +24582 24712 24711 +24583 24584 24712 +24584 24713 24712 +24584 24585 24714 +24584 24714 24713 +24585 24586 24714 +24586 24715 24714 +24586 24587 24716 +24586 24716 24715 +24587 24588 24716 +24588 24717 24716 +24588 24589 24718 +24588 24718 24717 +24589 24590 24718 +24590 24719 24718 +24590 24591 24720 +24590 24720 24719 +24592 24593 24722 +24592 24722 24721 +24593 24594 24722 +24594 24723 24722 +24594 24595 24724 +24594 24724 24723 +24595 24596 24724 +24596 24725 24724 +24596 24597 24726 +24596 24726 24725 +24597 24598 24726 +24598 24727 24726 +24598 24599 24728 +24598 24728 24727 +24599 24600 24728 +24600 24729 24728 +24600 24601 24730 +24600 24730 24729 +24601 24602 24730 +24602 24731 24730 +24602 24603 24732 +24602 24732 24731 +24603 24604 24732 +24604 24733 24732 +24604 24605 24734 +24604 24734 24733 +24605 24606 24734 +24606 24735 24734 +24606 24607 24736 +24606 24736 24735 +24607 24608 24736 +24608 24737 24736 +24608 24609 24738 +24608 24738 24737 +24609 24610 24738 +24610 24739 24738 +24610 24611 24740 +24610 24740 24739 +24611 24612 24740 +24612 24741 24740 +24612 24613 24742 +24612 24742 24741 +24613 24614 24742 +24614 24743 24742 +24614 24615 24744 +24614 24744 24743 +24615 24616 24744 +24616 24745 24744 +24616 24617 24746 +24616 24746 24745 +24617 24618 24746 +24618 24747 24746 +24618 24619 24748 +24618 24748 24747 +24619 24620 24748 +24620 24749 24748 +24620 24621 24750 +24620 24750 24749 +24621 24622 24750 +24622 24751 24750 +24622 24623 24752 +24622 24752 24751 +24623 24624 24752 +24624 24753 24752 +24624 24625 24754 +24624 24754 24753 +24625 24626 24754 +24626 24755 24754 +24626 24627 24756 +24626 24756 24755 +24627 24628 24756 +24628 24757 24756 +24628 24629 24758 +24628 24758 24757 +24629 24630 24758 +24630 24759 24758 +24630 24631 24760 +24630 24760 24759 +24631 24632 24760 +24632 24761 24760 +24632 24633 24762 +24632 24762 24761 +24633 24634 24762 +24634 24763 24762 +24634 24635 24764 +24634 24764 24763 +24635 24636 24764 +24636 24765 24764 +24636 24637 24766 +24636 24766 24765 +24637 24638 24766 +24638 24767 24766 +24638 24639 24768 +24638 24768 24767 +24639 24640 24768 +24640 24769 24768 +24640 24641 24770 +24640 24770 24769 +24641 24642 24770 +24642 24771 24770 +24642 24643 24772 +24642 24772 24771 +24643 24644 24772 +24644 24773 24772 +24644 24645 24774 +24644 24774 24773 +24645 24646 24774 +24646 24775 24774 +24646 24647 24776 +24646 24776 24775 +24647 24648 24776 +24648 24777 24776 +24648 24649 24778 +24648 24778 24777 +24649 24650 24778 +24650 24779 24778 +24650 24651 24780 +24650 24780 24779 +24651 24652 24780 +24652 24781 24780 +24652 24653 24782 +24652 24782 24781 +24653 24654 24782 +24654 24783 24782 +24654 24655 24784 +24654 24784 24783 +24655 24656 24784 +24656 24785 24784 +24656 24657 24786 +24656 24786 24785 +24657 24658 24786 +24658 24787 24786 +24658 24659 24788 +24658 24788 24787 +24659 24660 24788 +24660 24789 24788 +24660 24661 24790 +24660 24790 24789 +24661 24662 24790 +24662 24791 24790 +24662 24663 24792 +24662 24792 24791 +24663 24664 24792 +24664 24793 24792 +24664 24665 24794 +24664 24794 24793 +24665 24666 24794 +24666 24795 24794 +24666 24667 24796 +24666 24796 24795 +24667 24668 24796 +24668 24797 24796 +24668 24669 24798 +24668 24798 24797 +24669 24670 24798 +24670 24799 24798 +24670 24671 24800 +24670 24800 24799 +24671 24672 24800 +24672 24801 24800 +24672 24673 24802 +24672 24802 24801 +24673 24674 24802 +24674 24803 24802 +24674 24675 24804 +24674 24804 24803 +24675 24676 24804 +24676 24805 24804 +24676 24677 24806 +24676 24806 24805 +24677 24678 24806 +24678 24807 24806 +24678 24679 24808 +24678 24808 24807 +24679 24680 24808 +24680 24809 24808 +24680 24681 24810 +24680 24810 24809 +24681 24682 24810 +24682 24811 24810 +24682 24683 24812 +24682 24812 24811 +24683 24684 24812 +24684 24813 24812 +24684 24685 24814 +24684 24814 24813 +24685 24686 24814 +24686 24815 24814 +24686 24687 24816 +24686 24816 24815 +24687 24688 24816 +24688 24817 24816 +24688 24689 24818 +24688 24818 24817 +24689 24690 24818 +24690 24819 24818 +24690 24691 24820 +24690 24820 24819 +24691 24692 24820 +24692 24821 24820 +24692 24693 24822 +24692 24822 24821 +24693 24694 24822 +24694 24823 24822 +24694 24695 24824 +24694 24824 24823 +24695 24696 24824 +24696 24825 24824 +24696 24697 24826 +24696 24826 24825 +24697 24698 24826 +24698 24827 24826 +24698 24699 24828 +24698 24828 24827 +24699 24700 24828 +24700 24829 24828 +24700 24701 24830 +24700 24830 24829 +24701 24702 24830 +24702 24831 24830 +24702 24703 24832 +24702 24832 24831 +24703 24704 24832 +24704 24833 24832 +24704 24705 24834 +24704 24834 24833 +24705 24706 24834 +24706 24835 24834 +24706 24707 24836 +24706 24836 24835 +24707 24708 24836 +24708 24837 24836 +24708 24709 24838 +24708 24838 24837 +24709 24710 24838 +24710 24839 24838 +24710 24711 24840 +24710 24840 24839 +24711 24712 24840 +24712 24841 24840 +24712 24713 24842 +24712 24842 24841 +24713 24714 24842 +24714 24843 24842 +24714 24715 24844 +24714 24844 24843 +24715 24716 24844 +24716 24845 24844 +24716 24717 24846 +24716 24846 24845 +24717 24718 24846 +24718 24847 24846 +24718 24719 24848 +24718 24848 24847 +24719 24720 24848 +24720 24849 24848 +24721 24722 24850 +24722 24851 24850 +24722 24723 24852 +24722 24852 24851 +24723 24724 24852 +24724 24853 24852 +24724 24725 24854 +24724 24854 24853 +24725 24726 24854 +24726 24855 24854 +24726 24727 24856 +24726 24856 24855 +24727 24728 24856 +24728 24857 24856 +24728 24729 24858 +24728 24858 24857 +24729 24730 24858 +24730 24859 24858 +24730 24731 24860 +24730 24860 24859 +24731 24732 24860 +24732 24861 24860 +24732 24733 24862 +24732 24862 24861 +24733 24734 24862 +24734 24863 24862 +24734 24735 24864 +24734 24864 24863 +24735 24736 24864 +24736 24865 24864 +24736 24737 24866 +24736 24866 24865 +24737 24738 24866 +24738 24867 24866 +24738 24739 24868 +24738 24868 24867 +24739 24740 24868 +24740 24869 24868 +24740 24741 24870 +24740 24870 24869 +24741 24742 24870 +24742 24871 24870 +24742 24743 24872 +24742 24872 24871 +24743 24744 24872 +24744 24873 24872 +24744 24745 24874 +24744 24874 24873 +24745 24746 24874 +24746 24875 24874 +24746 24747 24876 +24746 24876 24875 +24747 24748 24876 +24748 24877 24876 +24748 24749 24878 +24748 24878 24877 +24749 24750 24878 +24750 24879 24878 +24750 24751 24880 +24750 24880 24879 +24751 24752 24880 +24752 24881 24880 +24752 24753 24882 +24752 24882 24881 +24753 24754 24882 +24754 24883 24882 +24754 24755 24884 +24754 24884 24883 +24755 24756 24884 +24756 24885 24884 +24756 24757 24886 +24756 24886 24885 +24757 24758 24886 +24758 24887 24886 +24758 24759 24888 +24758 24888 24887 +24759 24760 24888 +24760 24889 24888 +24760 24761 24890 +24760 24890 24889 +24761 24762 24890 +24762 24891 24890 +24762 24763 24892 +24762 24892 24891 +24763 24764 24892 +24764 24893 24892 +24764 24765 24894 +24764 24894 24893 +24765 24766 24894 +24766 24895 24894 +24766 24767 24896 +24766 24896 24895 +24767 24768 24896 +24768 24897 24896 +24768 24769 24898 +24768 24898 24897 +24769 24770 24898 +24770 24899 24898 +24770 24771 24900 +24770 24900 24899 +24771 24772 24900 +24772 24901 24900 +24772 24773 24902 +24772 24902 24901 +24773 24774 24902 +24774 24903 24902 +24774 24775 24904 +24774 24904 24903 +24775 24776 24904 +24776 24905 24904 +24776 24777 24906 +24776 24906 24905 +24777 24778 24906 +24778 24907 24906 +24778 24779 24908 +24778 24908 24907 +24779 24780 24908 +24780 24909 24908 +24780 24781 24910 +24780 24910 24909 +24781 24782 24910 +24782 24911 24910 +24782 24783 24912 +24782 24912 24911 +24783 24784 24912 +24784 24913 24912 +24784 24785 24914 +24784 24914 24913 +24785 24786 24914 +24786 24915 24914 +24786 24787 24916 +24786 24916 24915 +24787 24788 24916 +24788 24917 24916 +24788 24789 24918 +24788 24918 24917 +24789 24790 24918 +24790 24919 24918 +24790 24791 24920 +24790 24920 24919 +24791 24792 24920 +24792 24921 24920 +24792 24793 24922 +24792 24922 24921 +24793 24794 24922 +24794 24923 24922 +24794 24795 24924 +24794 24924 24923 +24795 24796 24924 +24796 24925 24924 +24796 24797 24926 +24796 24926 24925 +24797 24798 24926 +24798 24927 24926 +24798 24799 24928 +24798 24928 24927 +24799 24800 24928 +24800 24929 24928 +24800 24801 24930 +24800 24930 24929 +24801 24802 24930 +24802 24931 24930 +24802 24803 24932 +24802 24932 24931 +24803 24804 24932 +24804 24933 24932 +24804 24805 24934 +24804 24934 24933 +24805 24806 24934 +24806 24935 24934 +24806 24807 24936 +24806 24936 24935 +24807 24808 24936 +24808 24937 24936 +24808 24809 24938 +24808 24938 24937 +24809 24810 24938 +24810 24939 24938 +24810 24811 24940 +24810 24940 24939 +24811 24812 24940 +24812 24941 24940 +24812 24813 24942 +24812 24942 24941 +24813 24814 24942 +24814 24943 24942 +24814 24815 24944 +24814 24944 24943 +24815 24816 24944 +24816 24945 24944 +24816 24817 24946 +24816 24946 24945 +24817 24818 24946 +24818 24947 24946 +24818 24819 24948 +24818 24948 24947 +24819 24820 24948 +24820 24949 24948 +24820 24821 24950 +24820 24950 24949 +24821 24822 24950 +24822 24951 24950 +24822 24823 24952 +24822 24952 24951 +24823 24824 24952 +24824 24953 24952 +24824 24825 24954 +24824 24954 24953 +24825 24826 24954 +24826 24955 24954 +24826 24827 24956 +24826 24956 24955 +24827 24828 24956 +24828 24957 24956 +24828 24829 24958 +24828 24958 24957 +24829 24830 24958 +24830 24959 24958 +24830 24831 24960 +24830 24960 24959 +24831 24832 24960 +24832 24961 24960 +24832 24833 24962 +24832 24962 24961 +24833 24834 24962 +24834 24963 24962 +24834 24835 24964 +24834 24964 24963 +24835 24836 24964 +24836 24965 24964 +24836 24837 24966 +24836 24966 24965 +24837 24838 24966 +24838 24967 24966 +24838 24839 24968 +24838 24968 24967 +24839 24840 24968 +24840 24969 24968 +24840 24841 24970 +24840 24970 24969 +24841 24842 24970 +24842 24971 24970 +24842 24843 24972 +24842 24972 24971 +24843 24844 24972 +24844 24973 24972 +24844 24845 24974 +24844 24974 24973 +24845 24846 24974 +24846 24975 24974 +24846 24847 24976 +24846 24976 24975 +24847 24848 24976 +24848 24977 24976 +24848 24849 24978 +24848 24978 24977 +24850 24851 24980 +24850 24980 24979 +24851 24852 24980 +24852 24981 24980 +24852 24853 24982 +24852 24982 24981 +24853 24854 24982 +24854 24983 24982 +24854 24855 24984 +24854 24984 24983 +24855 24856 24984 +24856 24985 24984 +24856 24857 24986 +24856 24986 24985 +24857 24858 24986 +24858 24987 24986 +24858 24859 24988 +24858 24988 24987 +24859 24860 24988 +24860 24989 24988 +24860 24861 24990 +24860 24990 24989 +24861 24862 24990 +24862 24991 24990 +24862 24863 24992 +24862 24992 24991 +24863 24864 24992 +24864 24993 24992 +24864 24865 24994 +24864 24994 24993 +24865 24866 24994 +24866 24995 24994 +24866 24867 24996 +24866 24996 24995 +24867 24868 24996 +24868 24997 24996 +24868 24869 24998 +24868 24998 24997 +24869 24870 24998 +24870 24999 24998 +24870 24871 25000 +24870 25000 24999 +24871 24872 25000 +24872 25001 25000 +24872 24873 25002 +24872 25002 25001 +24873 24874 25002 +24874 25003 25002 +24874 24875 25004 +24874 25004 25003 +24875 24876 25004 +24876 25005 25004 +24876 24877 25006 +24876 25006 25005 +24877 24878 25006 +24878 25007 25006 +24878 24879 25008 +24878 25008 25007 +24879 24880 25008 +24880 25009 25008 +24880 24881 25010 +24880 25010 25009 +24881 24882 25010 +24882 25011 25010 +24882 24883 25012 +24882 25012 25011 +24883 24884 25012 +24884 25013 25012 +24884 24885 25014 +24884 25014 25013 +24885 24886 25014 +24886 25015 25014 +24886 24887 25016 +24886 25016 25015 +24887 24888 25016 +24888 25017 25016 +24888 24889 25018 +24888 25018 25017 +24889 24890 25018 +24890 25019 25018 +24890 24891 25020 +24890 25020 25019 +24891 24892 25020 +24892 25021 25020 +24892 24893 25022 +24892 25022 25021 +24893 24894 25022 +24894 25023 25022 +24894 24895 25024 +24894 25024 25023 +24895 24896 25024 +24896 25025 25024 +24896 24897 25026 +24896 25026 25025 +24897 24898 25026 +24898 25027 25026 +24898 24899 25028 +24898 25028 25027 +24899 24900 25028 +24900 25029 25028 +24900 24901 25030 +24900 25030 25029 +24901 24902 25030 +24902 25031 25030 +24902 24903 25032 +24902 25032 25031 +24903 24904 25032 +24904 25033 25032 +24904 24905 25034 +24904 25034 25033 +24905 24906 25034 +24906 25035 25034 +24906 24907 25036 +24906 25036 25035 +24907 24908 25036 +24908 25037 25036 +24908 24909 25038 +24908 25038 25037 +24909 24910 25038 +24910 25039 25038 +24910 24911 25040 +24910 25040 25039 +24911 24912 25040 +24912 25041 25040 +24912 24913 25042 +24912 25042 25041 +24913 24914 25042 +24914 25043 25042 +24914 24915 25044 +24914 25044 25043 +24915 24916 25044 +24916 25045 25044 +24916 24917 25046 +24916 25046 25045 +24917 24918 25046 +24918 25047 25046 +24918 24919 25048 +24918 25048 25047 +24919 24920 25048 +24920 25049 25048 +24920 24921 25050 +24920 25050 25049 +24921 24922 25050 +24922 25051 25050 +24922 24923 25052 +24922 25052 25051 +24923 24924 25052 +24924 25053 25052 +24924 24925 25054 +24924 25054 25053 +24925 24926 25054 +24926 25055 25054 +24926 24927 25056 +24926 25056 25055 +24927 24928 25056 +24928 25057 25056 +24928 24929 25058 +24928 25058 25057 +24929 24930 25058 +24930 25059 25058 +24930 24931 25060 +24930 25060 25059 +24931 24932 25060 +24932 25061 25060 +24932 24933 25062 +24932 25062 25061 +24933 24934 25062 +24934 25063 25062 +24934 24935 25064 +24934 25064 25063 +24935 24936 25064 +24936 25065 25064 +24936 24937 25066 +24936 25066 25065 +24937 24938 25066 +24938 25067 25066 +24938 24939 25068 +24938 25068 25067 +24939 24940 25068 +24940 25069 25068 +24940 24941 25070 +24940 25070 25069 +24941 24942 25070 +24942 25071 25070 +24942 24943 25072 +24942 25072 25071 +24943 24944 25072 +24944 25073 25072 +24944 24945 25074 +24944 25074 25073 +24945 24946 25074 +24946 25075 25074 +24946 24947 25076 +24946 25076 25075 +24947 24948 25076 +24948 25077 25076 +24948 24949 25078 +24948 25078 25077 +24949 24950 25078 +24950 25079 25078 +24950 24951 25080 +24950 25080 25079 +24951 24952 25080 +24952 25081 25080 +24952 24953 25082 +24952 25082 25081 +24953 24954 25082 +24954 25083 25082 +24954 24955 25084 +24954 25084 25083 +24955 24956 25084 +24956 25085 25084 +24956 24957 25086 +24956 25086 25085 +24957 24958 25086 +24958 25087 25086 +24958 24959 25088 +24958 25088 25087 +24959 24960 25088 +24960 25089 25088 +24960 24961 25090 +24960 25090 25089 +24961 24962 25090 +24962 25091 25090 +24962 24963 25092 +24962 25092 25091 +24963 24964 25092 +24964 25093 25092 +24964 24965 25094 +24964 25094 25093 +24965 24966 25094 +24966 25095 25094 +24966 24967 25096 +24966 25096 25095 +24967 24968 25096 +24968 25097 25096 +24968 24969 25098 +24968 25098 25097 +24969 24970 25098 +24970 25099 25098 +24970 24971 25100 +24970 25100 25099 +24971 24972 25100 +24972 25101 25100 +24972 24973 25102 +24972 25102 25101 +24973 24974 25102 +24974 25103 25102 +24974 24975 25104 +24974 25104 25103 +24975 24976 25104 +24976 25105 25104 +24976 24977 25106 +24976 25106 25105 +24977 24978 25106 +24978 25107 25106 +24979 24980 25108 +24980 25109 25108 +24980 24981 25110 +24980 25110 25109 +24981 24982 25110 +24982 25111 25110 +24982 24983 25112 +24982 25112 25111 +24983 24984 25112 +24984 25113 25112 +24984 24985 25114 +24984 25114 25113 +24985 24986 25114 +24986 25115 25114 +24986 24987 25116 +24986 25116 25115 +24987 24988 25116 +24988 25117 25116 +24988 24989 25118 +24988 25118 25117 +24989 24990 25118 +24990 25119 25118 +24990 24991 25120 +24990 25120 25119 +24991 24992 25120 +24992 25121 25120 +24992 24993 25122 +24992 25122 25121 +24993 24994 25122 +24994 25123 25122 +24994 24995 25124 +24994 25124 25123 +24995 24996 25124 +24996 25125 25124 +24996 24997 25126 +24996 25126 25125 +24997 24998 25126 +24998 25127 25126 +24998 24999 25128 +24998 25128 25127 +24999 25000 25128 +25000 25129 25128 +25000 25001 25130 +25000 25130 25129 +25001 25002 25130 +25002 25131 25130 +25002 25003 25132 +25002 25132 25131 +25003 25004 25132 +25004 25133 25132 +25004 25005 25134 +25004 25134 25133 +25005 25006 25134 +25006 25135 25134 +25006 25007 25136 +25006 25136 25135 +25007 25008 25136 +25008 25137 25136 +25008 25009 25138 +25008 25138 25137 +25009 25010 25138 +25010 25139 25138 +25010 25011 25140 +25010 25140 25139 +25011 25012 25140 +25012 25141 25140 +25012 25013 25142 +25012 25142 25141 +25013 25014 25142 +25014 25143 25142 +25014 25015 25144 +25014 25144 25143 +25015 25016 25144 +25016 25145 25144 +25016 25017 25146 +25016 25146 25145 +25017 25018 25146 +25018 25147 25146 +25018 25019 25148 +25018 25148 25147 +25019 25020 25148 +25020 25149 25148 +25020 25021 25150 +25020 25150 25149 +25021 25022 25150 +25022 25151 25150 +25022 25023 25152 +25022 25152 25151 +25023 25024 25152 +25024 25153 25152 +25024 25025 25154 +25024 25154 25153 +25025 25026 25154 +25026 25155 25154 +25026 25027 25156 +25026 25156 25155 +25027 25028 25156 +25028 25157 25156 +25028 25029 25158 +25028 25158 25157 +25029 25030 25158 +25030 25159 25158 +25030 25031 25160 +25030 25160 25159 +25031 25032 25160 +25032 25161 25160 +25032 25033 25162 +25032 25162 25161 +25033 25034 25162 +25034 25163 25162 +25034 25035 25164 +25034 25164 25163 +25035 25036 25164 +25036 25165 25164 +25036 25037 25166 +25036 25166 25165 +25037 25038 25166 +25038 25167 25166 +25038 25039 25168 +25038 25168 25167 +25039 25040 25168 +25040 25169 25168 +25040 25041 25170 +25040 25170 25169 +25041 25042 25170 +25042 25171 25170 +25042 25043 25172 +25042 25172 25171 +25043 25044 25172 +25044 25173 25172 +25044 25045 25174 +25044 25174 25173 +25045 25046 25174 +25046 25175 25174 +25046 25047 25176 +25046 25176 25175 +25047 25048 25176 +25048 25177 25176 +25048 25049 25178 +25048 25178 25177 +25049 25050 25178 +25050 25179 25178 +25050 25051 25180 +25050 25180 25179 +25051 25052 25180 +25052 25181 25180 +25052 25053 25182 +25052 25182 25181 +25053 25054 25182 +25054 25183 25182 +25054 25055 25184 +25054 25184 25183 +25055 25056 25184 +25056 25185 25184 +25056 25057 25186 +25056 25186 25185 +25057 25058 25186 +25058 25187 25186 +25058 25059 25188 +25058 25188 25187 +25059 25060 25188 +25060 25189 25188 +25060 25061 25190 +25060 25190 25189 +25061 25062 25190 +25062 25191 25190 +25062 25063 25192 +25062 25192 25191 +25063 25064 25192 +25064 25193 25192 +25064 25065 25194 +25064 25194 25193 +25065 25066 25194 +25066 25195 25194 +25066 25067 25196 +25066 25196 25195 +25067 25068 25196 +25068 25197 25196 +25068 25069 25198 +25068 25198 25197 +25069 25070 25198 +25070 25199 25198 +25070 25071 25200 +25070 25200 25199 +25071 25072 25200 +25072 25201 25200 +25072 25073 25202 +25072 25202 25201 +25073 25074 25202 +25074 25203 25202 +25074 25075 25204 +25074 25204 25203 +25075 25076 25204 +25076 25205 25204 +25076 25077 25206 +25076 25206 25205 +25077 25078 25206 +25078 25207 25206 +25078 25079 25208 +25078 25208 25207 +25079 25080 25208 +25080 25209 25208 +25080 25081 25210 +25080 25210 25209 +25081 25082 25210 +25082 25211 25210 +25082 25083 25212 +25082 25212 25211 +25083 25084 25212 +25084 25213 25212 +25084 25085 25214 +25084 25214 25213 +25085 25086 25214 +25086 25215 25214 +25086 25087 25216 +25086 25216 25215 +25087 25088 25216 +25088 25217 25216 +25088 25089 25218 +25088 25218 25217 +25089 25090 25218 +25090 25219 25218 +25090 25091 25220 +25090 25220 25219 +25091 25092 25220 +25092 25221 25220 +25092 25093 25222 +25092 25222 25221 +25093 25094 25222 +25094 25223 25222 +25094 25095 25224 +25094 25224 25223 +25095 25096 25224 +25096 25225 25224 +25096 25097 25226 +25096 25226 25225 +25097 25098 25226 +25098 25227 25226 +25098 25099 25228 +25098 25228 25227 +25099 25100 25228 +25100 25229 25228 +25100 25101 25230 +25100 25230 25229 +25101 25102 25230 +25102 25231 25230 +25102 25103 25232 +25102 25232 25231 +25103 25104 25232 +25104 25233 25232 +25104 25105 25234 +25104 25234 25233 +25105 25106 25234 +25106 25235 25234 +25106 25107 25236 +25106 25236 25235 +25108 25109 25238 +25108 25238 25237 +25109 25110 25238 +25110 25239 25238 +25110 25111 25240 +25110 25240 25239 +25111 25112 25240 +25112 25241 25240 +25112 25113 25242 +25112 25242 25241 +25113 25114 25242 +25114 25243 25242 +25114 25115 25244 +25114 25244 25243 +25115 25116 25244 +25116 25245 25244 +25116 25117 25246 +25116 25246 25245 +25117 25118 25246 +25118 25247 25246 +25118 25119 25248 +25118 25248 25247 +25119 25120 25248 +25120 25249 25248 +25120 25121 25250 +25120 25250 25249 +25121 25122 25250 +25122 25251 25250 +25122 25123 25252 +25122 25252 25251 +25123 25124 25252 +25124 25253 25252 +25124 25125 25254 +25124 25254 25253 +25125 25126 25254 +25126 25255 25254 +25126 25127 25256 +25126 25256 25255 +25127 25128 25256 +25128 25257 25256 +25128 25129 25258 +25128 25258 25257 +25129 25130 25258 +25130 25259 25258 +25130 25131 25260 +25130 25260 25259 +25131 25132 25260 +25132 25261 25260 +25132 25133 25262 +25132 25262 25261 +25133 25134 25262 +25134 25263 25262 +25134 25135 25264 +25134 25264 25263 +25135 25136 25264 +25136 25265 25264 +25136 25137 25266 +25136 25266 25265 +25137 25138 25266 +25138 25267 25266 +25138 25139 25268 +25138 25268 25267 +25139 25140 25268 +25140 25269 25268 +25140 25141 25270 +25140 25270 25269 +25141 25142 25270 +25142 25271 25270 +25142 25143 25272 +25142 25272 25271 +25143 25144 25272 +25144 25273 25272 +25144 25145 25274 +25144 25274 25273 +25145 25146 25274 +25146 25275 25274 +25146 25147 25276 +25146 25276 25275 +25147 25148 25276 +25148 25277 25276 +25148 25149 25278 +25148 25278 25277 +25149 25150 25278 +25150 25279 25278 +25150 25151 25280 +25150 25280 25279 +25151 25152 25280 +25152 25281 25280 +25152 25153 25282 +25152 25282 25281 +25153 25154 25282 +25154 25283 25282 +25154 25155 25284 +25154 25284 25283 +25155 25156 25284 +25156 25285 25284 +25156 25157 25286 +25156 25286 25285 +25157 25158 25286 +25158 25287 25286 +25158 25159 25288 +25158 25288 25287 +25159 25160 25288 +25160 25289 25288 +25160 25161 25290 +25160 25290 25289 +25161 25162 25290 +25162 25291 25290 +25162 25163 25292 +25162 25292 25291 +25163 25164 25292 +25164 25293 25292 +25164 25165 25294 +25164 25294 25293 +25165 25166 25294 +25166 25295 25294 +25166 25167 25296 +25166 25296 25295 +25167 25168 25296 +25168 25297 25296 +25168 25169 25298 +25168 25298 25297 +25169 25170 25298 +25170 25299 25298 +25170 25171 25300 +25170 25300 25299 +25171 25172 25300 +25172 25301 25300 +25172 25173 25302 +25172 25302 25301 +25173 25174 25302 +25174 25303 25302 +25174 25175 25304 +25174 25304 25303 +25175 25176 25304 +25176 25305 25304 +25176 25177 25306 +25176 25306 25305 +25177 25178 25306 +25178 25307 25306 +25178 25179 25308 +25178 25308 25307 +25179 25180 25308 +25180 25309 25308 +25180 25181 25310 +25180 25310 25309 +25181 25182 25310 +25182 25311 25310 +25182 25183 25312 +25182 25312 25311 +25183 25184 25312 +25184 25313 25312 +25184 25185 25314 +25184 25314 25313 +25185 25186 25314 +25186 25315 25314 +25186 25187 25316 +25186 25316 25315 +25187 25188 25316 +25188 25317 25316 +25188 25189 25318 +25188 25318 25317 +25189 25190 25318 +25190 25319 25318 +25190 25191 25320 +25190 25320 25319 +25191 25192 25320 +25192 25321 25320 +25192 25193 25322 +25192 25322 25321 +25193 25194 25322 +25194 25323 25322 +25194 25195 25324 +25194 25324 25323 +25195 25196 25324 +25196 25325 25324 +25196 25197 25326 +25196 25326 25325 +25197 25198 25326 +25198 25327 25326 +25198 25199 25328 +25198 25328 25327 +25199 25200 25328 +25200 25329 25328 +25200 25201 25330 +25200 25330 25329 +25201 25202 25330 +25202 25331 25330 +25202 25203 25332 +25202 25332 25331 +25203 25204 25332 +25204 25333 25332 +25204 25205 25334 +25204 25334 25333 +25205 25206 25334 +25206 25335 25334 +25206 25207 25336 +25206 25336 25335 +25207 25208 25336 +25208 25337 25336 +25208 25209 25338 +25208 25338 25337 +25209 25210 25338 +25210 25339 25338 +25210 25211 25340 +25210 25340 25339 +25211 25212 25340 +25212 25341 25340 +25212 25213 25342 +25212 25342 25341 +25213 25214 25342 +25214 25343 25342 +25214 25215 25344 +25214 25344 25343 +25215 25216 25344 +25216 25345 25344 +25216 25217 25346 +25216 25346 25345 +25217 25218 25346 +25218 25347 25346 +25218 25219 25348 +25218 25348 25347 +25219 25220 25348 +25220 25349 25348 +25220 25221 25350 +25220 25350 25349 +25221 25222 25350 +25222 25351 25350 +25222 25223 25352 +25222 25352 25351 +25223 25224 25352 +25224 25353 25352 +25224 25225 25354 +25224 25354 25353 +25225 25226 25354 +25226 25355 25354 +25226 25227 25356 +25226 25356 25355 +25227 25228 25356 +25228 25357 25356 +25228 25229 25358 +25228 25358 25357 +25229 25230 25358 +25230 25359 25358 +25230 25231 25360 +25230 25360 25359 +25231 25232 25360 +25232 25361 25360 +25232 25233 25362 +25232 25362 25361 +25233 25234 25362 +25234 25363 25362 +25234 25235 25364 +25234 25364 25363 +25235 25236 25364 +25236 25365 25364 +25237 25238 25366 +25238 25367 25366 +25238 25239 25368 +25238 25368 25367 +25239 25240 25368 +25240 25369 25368 +25240 25241 25370 +25240 25370 25369 +25241 25242 25370 +25242 25371 25370 +25242 25243 25372 +25242 25372 25371 +25243 25244 25372 +25244 25373 25372 +25244 25245 25374 +25244 25374 25373 +25245 25246 25374 +25246 25375 25374 +25246 25247 25376 +25246 25376 25375 +25247 25248 25376 +25248 25377 25376 +25248 25249 25378 +25248 25378 25377 +25249 25250 25378 +25250 25379 25378 +25250 25251 25380 +25250 25380 25379 +25251 25252 25380 +25252 25381 25380 +25252 25253 25382 +25252 25382 25381 +25253 25254 25382 +25254 25383 25382 +25254 25255 25384 +25254 25384 25383 +25255 25256 25384 +25256 25385 25384 +25256 25257 25386 +25256 25386 25385 +25257 25258 25386 +25258 25387 25386 +25258 25259 25388 +25258 25388 25387 +25259 25260 25388 +25260 25389 25388 +25260 25261 25390 +25260 25390 25389 +25261 25262 25390 +25262 25391 25390 +25262 25263 25392 +25262 25392 25391 +25263 25264 25392 +25264 25393 25392 +25264 25265 25394 +25264 25394 25393 +25265 25266 25394 +25266 25395 25394 +25266 25267 25396 +25266 25396 25395 +25267 25268 25396 +25268 25397 25396 +25268 25269 25398 +25268 25398 25397 +25269 25270 25398 +25270 25399 25398 +25270 25271 25400 +25270 25400 25399 +25271 25272 25400 +25272 25401 25400 +25272 25273 25402 +25272 25402 25401 +25273 25274 25402 +25274 25403 25402 +25274 25275 25404 +25274 25404 25403 +25275 25276 25404 +25276 25405 25404 +25276 25277 25406 +25276 25406 25405 +25277 25278 25406 +25278 25407 25406 +25278 25279 25408 +25278 25408 25407 +25279 25280 25408 +25280 25409 25408 +25280 25281 25410 +25280 25410 25409 +25281 25282 25410 +25282 25411 25410 +25282 25283 25412 +25282 25412 25411 +25283 25284 25412 +25284 25413 25412 +25284 25285 25414 +25284 25414 25413 +25285 25286 25414 +25286 25415 25414 +25286 25287 25416 +25286 25416 25415 +25287 25288 25416 +25288 25417 25416 +25288 25289 25418 +25288 25418 25417 +25289 25290 25418 +25290 25419 25418 +25290 25291 25420 +25290 25420 25419 +25291 25292 25420 +25292 25421 25420 +25292 25293 25422 +25292 25422 25421 +25293 25294 25422 +25294 25423 25422 +25294 25295 25424 +25294 25424 25423 +25295 25296 25424 +25296 25425 25424 +25296 25297 25426 +25296 25426 25425 +25297 25298 25426 +25298 25427 25426 +25298 25299 25428 +25298 25428 25427 +25299 25300 25428 +25300 25429 25428 +25300 25301 25430 +25300 25430 25429 +25301 25302 25430 +25302 25431 25430 +25302 25303 25432 +25302 25432 25431 +25303 25304 25432 +25304 25433 25432 +25304 25305 25434 +25304 25434 25433 +25305 25306 25434 +25306 25435 25434 +25306 25307 25436 +25306 25436 25435 +25307 25308 25436 +25308 25437 25436 +25308 25309 25438 +25308 25438 25437 +25309 25310 25438 +25310 25439 25438 +25310 25311 25440 +25310 25440 25439 +25311 25312 25440 +25312 25441 25440 +25312 25313 25442 +25312 25442 25441 +25313 25314 25442 +25314 25443 25442 +25314 25315 25444 +25314 25444 25443 +25315 25316 25444 +25316 25445 25444 +25316 25317 25446 +25316 25446 25445 +25317 25318 25446 +25318 25447 25446 +25318 25319 25448 +25318 25448 25447 +25319 25320 25448 +25320 25449 25448 +25320 25321 25450 +25320 25450 25449 +25321 25322 25450 +25322 25451 25450 +25322 25323 25452 +25322 25452 25451 +25323 25324 25452 +25324 25453 25452 +25324 25325 25454 +25324 25454 25453 +25325 25326 25454 +25326 25455 25454 +25326 25327 25456 +25326 25456 25455 +25327 25328 25456 +25328 25457 25456 +25328 25329 25458 +25328 25458 25457 +25329 25330 25458 +25330 25459 25458 +25330 25331 25460 +25330 25460 25459 +25331 25332 25460 +25332 25461 25460 +25332 25333 25462 +25332 25462 25461 +25333 25334 25462 +25334 25463 25462 +25334 25335 25464 +25334 25464 25463 +25335 25336 25464 +25336 25465 25464 +25336 25337 25466 +25336 25466 25465 +25337 25338 25466 +25338 25467 25466 +25338 25339 25468 +25338 25468 25467 +25339 25340 25468 +25340 25469 25468 +25340 25341 25470 +25340 25470 25469 +25341 25342 25470 +25342 25471 25470 +25342 25343 25472 +25342 25472 25471 +25343 25344 25472 +25344 25473 25472 +25344 25345 25474 +25344 25474 25473 +25345 25346 25474 +25346 25475 25474 +25346 25347 25476 +25346 25476 25475 +25347 25348 25476 +25348 25477 25476 +25348 25349 25478 +25348 25478 25477 +25349 25350 25478 +25350 25479 25478 +25350 25351 25480 +25350 25480 25479 +25351 25352 25480 +25352 25481 25480 +25352 25353 25482 +25352 25482 25481 +25353 25354 25482 +25354 25483 25482 +25354 25355 25484 +25354 25484 25483 +25355 25356 25484 +25356 25485 25484 +25356 25357 25486 +25356 25486 25485 +25357 25358 25486 +25358 25487 25486 +25358 25359 25488 +25358 25488 25487 +25359 25360 25488 +25360 25489 25488 +25360 25361 25490 +25360 25490 25489 +25361 25362 25490 +25362 25491 25490 +25362 25363 25492 +25362 25492 25491 +25363 25364 25492 +25364 25493 25492 +25364 25365 25494 +25364 25494 25493 +25366 25367 25496 +25366 25496 25495 +25367 25368 25496 +25368 25497 25496 +25368 25369 25498 +25368 25498 25497 +25369 25370 25498 +25370 25499 25498 +25370 25371 25500 +25370 25500 25499 +25371 25372 25500 +25372 25501 25500 +25372 25373 25502 +25372 25502 25501 +25373 25374 25502 +25374 25503 25502 +25374 25375 25504 +25374 25504 25503 +25375 25376 25504 +25376 25505 25504 +25376 25377 25506 +25376 25506 25505 +25377 25378 25506 +25378 25507 25506 +25378 25379 25508 +25378 25508 25507 +25379 25380 25508 +25380 25509 25508 +25380 25381 25510 +25380 25510 25509 +25381 25382 25510 +25382 25511 25510 +25382 25383 25512 +25382 25512 25511 +25383 25384 25512 +25384 25513 25512 +25384 25385 25514 +25384 25514 25513 +25385 25386 25514 +25386 25515 25514 +25386 25387 25516 +25386 25516 25515 +25387 25388 25516 +25388 25517 25516 +25388 25389 25518 +25388 25518 25517 +25389 25390 25518 +25390 25519 25518 +25390 25391 25520 +25390 25520 25519 +25391 25392 25520 +25392 25521 25520 +25392 25393 25522 +25392 25522 25521 +25393 25394 25522 +25394 25523 25522 +25394 25395 25524 +25394 25524 25523 +25395 25396 25524 +25396 25525 25524 +25396 25397 25526 +25396 25526 25525 +25397 25398 25526 +25398 25527 25526 +25398 25399 25528 +25398 25528 25527 +25399 25400 25528 +25400 25529 25528 +25400 25401 25530 +25400 25530 25529 +25401 25402 25530 +25402 25531 25530 +25402 25403 25532 +25402 25532 25531 +25403 25404 25532 +25404 25533 25532 +25404 25405 25534 +25404 25534 25533 +25405 25406 25534 +25406 25535 25534 +25406 25407 25536 +25406 25536 25535 +25407 25408 25536 +25408 25537 25536 +25408 25409 25538 +25408 25538 25537 +25409 25410 25538 +25410 25539 25538 +25410 25411 25540 +25410 25540 25539 +25411 25412 25540 +25412 25541 25540 +25412 25413 25542 +25412 25542 25541 +25413 25414 25542 +25414 25543 25542 +25414 25415 25544 +25414 25544 25543 +25415 25416 25544 +25416 25545 25544 +25416 25417 25546 +25416 25546 25545 +25417 25418 25546 +25418 25547 25546 +25418 25419 25548 +25418 25548 25547 +25419 25420 25548 +25420 25549 25548 +25420 25421 25550 +25420 25550 25549 +25421 25422 25550 +25422 25551 25550 +25422 25423 25552 +25422 25552 25551 +25423 25424 25552 +25424 25553 25552 +25424 25425 25554 +25424 25554 25553 +25425 25426 25554 +25426 25555 25554 +25426 25427 25556 +25426 25556 25555 +25427 25428 25556 +25428 25557 25556 +25428 25429 25558 +25428 25558 25557 +25429 25430 25558 +25430 25559 25558 +25430 25431 25560 +25430 25560 25559 +25431 25432 25560 +25432 25561 25560 +25432 25433 25562 +25432 25562 25561 +25433 25434 25562 +25434 25563 25562 +25434 25435 25564 +25434 25564 25563 +25435 25436 25564 +25436 25565 25564 +25436 25437 25566 +25436 25566 25565 +25437 25438 25566 +25438 25567 25566 +25438 25439 25568 +25438 25568 25567 +25439 25440 25568 +25440 25569 25568 +25440 25441 25570 +25440 25570 25569 +25441 25442 25570 +25442 25571 25570 +25442 25443 25572 +25442 25572 25571 +25443 25444 25572 +25444 25573 25572 +25444 25445 25574 +25444 25574 25573 +25445 25446 25574 +25446 25575 25574 +25446 25447 25576 +25446 25576 25575 +25447 25448 25576 +25448 25577 25576 +25448 25449 25578 +25448 25578 25577 +25449 25450 25578 +25450 25579 25578 +25450 25451 25580 +25450 25580 25579 +25451 25452 25580 +25452 25581 25580 +25452 25453 25582 +25452 25582 25581 +25453 25454 25582 +25454 25583 25582 +25454 25455 25584 +25454 25584 25583 +25455 25456 25584 +25456 25585 25584 +25456 25457 25586 +25456 25586 25585 +25457 25458 25586 +25458 25587 25586 +25458 25459 25588 +25458 25588 25587 +25459 25460 25588 +25460 25589 25588 +25460 25461 25590 +25460 25590 25589 +25461 25462 25590 +25462 25591 25590 +25462 25463 25592 +25462 25592 25591 +25463 25464 25592 +25464 25593 25592 +25464 25465 25594 +25464 25594 25593 +25465 25466 25594 +25466 25595 25594 +25466 25467 25596 +25466 25596 25595 +25467 25468 25596 +25468 25597 25596 +25468 25469 25598 +25468 25598 25597 +25469 25470 25598 +25470 25599 25598 +25470 25471 25600 +25470 25600 25599 +25471 25472 25600 +25472 25601 25600 +25472 25473 25602 +25472 25602 25601 +25473 25474 25602 +25474 25603 25602 +25474 25475 25604 +25474 25604 25603 +25475 25476 25604 +25476 25605 25604 +25476 25477 25606 +25476 25606 25605 +25477 25478 25606 +25478 25607 25606 +25478 25479 25608 +25478 25608 25607 +25479 25480 25608 +25480 25609 25608 +25480 25481 25610 +25480 25610 25609 +25481 25482 25610 +25482 25611 25610 +25482 25483 25612 +25482 25612 25611 +25483 25484 25612 +25484 25613 25612 +25484 25485 25614 +25484 25614 25613 +25485 25486 25614 +25486 25615 25614 +25486 25487 25616 +25486 25616 25615 +25487 25488 25616 +25488 25617 25616 +25488 25489 25618 +25488 25618 25617 +25489 25490 25618 +25490 25619 25618 +25490 25491 25620 +25490 25620 25619 +25491 25492 25620 +25492 25621 25620 +25492 25493 25622 +25492 25622 25621 +25493 25494 25622 +25494 25623 25622 +25495 25496 25624 +25496 25625 25624 +25496 25497 25626 +25496 25626 25625 +25497 25498 25626 +25498 25627 25626 +25498 25499 25628 +25498 25628 25627 +25499 25500 25628 +25500 25629 25628 +25500 25501 25630 +25500 25630 25629 +25501 25502 25630 +25502 25631 25630 +25502 25503 25632 +25502 25632 25631 +25503 25504 25632 +25504 25633 25632 +25504 25505 25634 +25504 25634 25633 +25505 25506 25634 +25506 25635 25634 +25506 25507 25636 +25506 25636 25635 +25507 25508 25636 +25508 25637 25636 +25508 25509 25638 +25508 25638 25637 +25509 25510 25638 +25510 25639 25638 +25510 25511 25640 +25510 25640 25639 +25511 25512 25640 +25512 25641 25640 +25512 25513 25642 +25512 25642 25641 +25513 25514 25642 +25514 25643 25642 +25514 25515 25644 +25514 25644 25643 +25515 25516 25644 +25516 25645 25644 +25516 25517 25646 +25516 25646 25645 +25517 25518 25646 +25518 25647 25646 +25518 25519 25648 +25518 25648 25647 +25519 25520 25648 +25520 25649 25648 +25520 25521 25650 +25520 25650 25649 +25521 25522 25650 +25522 25651 25650 +25522 25523 25652 +25522 25652 25651 +25523 25524 25652 +25524 25653 25652 +25524 25525 25654 +25524 25654 25653 +25525 25526 25654 +25526 25655 25654 +25526 25527 25656 +25526 25656 25655 +25527 25528 25656 +25528 25657 25656 +25528 25529 25658 +25528 25658 25657 +25529 25530 25658 +25530 25659 25658 +25530 25531 25660 +25530 25660 25659 +25531 25532 25660 +25532 25661 25660 +25532 25533 25662 +25532 25662 25661 +25533 25534 25662 +25534 25663 25662 +25534 25535 25664 +25534 25664 25663 +25535 25536 25664 +25536 25665 25664 +25536 25537 25666 +25536 25666 25665 +25537 25538 25666 +25538 25667 25666 +25538 25539 25668 +25538 25668 25667 +25539 25540 25668 +25540 25669 25668 +25540 25541 25670 +25540 25670 25669 +25541 25542 25670 +25542 25671 25670 +25542 25543 25672 +25542 25672 25671 +25543 25544 25672 +25544 25673 25672 +25544 25545 25674 +25544 25674 25673 +25545 25546 25674 +25546 25675 25674 +25546 25547 25676 +25546 25676 25675 +25547 25548 25676 +25548 25677 25676 +25548 25549 25678 +25548 25678 25677 +25549 25550 25678 +25550 25679 25678 +25550 25551 25680 +25550 25680 25679 +25551 25552 25680 +25552 25681 25680 +25552 25553 25682 +25552 25682 25681 +25553 25554 25682 +25554 25683 25682 +25554 25555 25684 +25554 25684 25683 +25555 25556 25684 +25556 25685 25684 +25556 25557 25686 +25556 25686 25685 +25557 25558 25686 +25558 25687 25686 +25558 25559 25688 +25558 25688 25687 +25559 25560 25688 +25560 25689 25688 +25560 25561 25690 +25560 25690 25689 +25561 25562 25690 +25562 25691 25690 +25562 25563 25692 +25562 25692 25691 +25563 25564 25692 +25564 25693 25692 +25564 25565 25694 +25564 25694 25693 +25565 25566 25694 +25566 25695 25694 +25566 25567 25696 +25566 25696 25695 +25567 25568 25696 +25568 25697 25696 +25568 25569 25698 +25568 25698 25697 +25569 25570 25698 +25570 25699 25698 +25570 25571 25700 +25570 25700 25699 +25571 25572 25700 +25572 25701 25700 +25572 25573 25702 +25572 25702 25701 +25573 25574 25702 +25574 25703 25702 +25574 25575 25704 +25574 25704 25703 +25575 25576 25704 +25576 25705 25704 +25576 25577 25706 +25576 25706 25705 +25577 25578 25706 +25578 25707 25706 +25578 25579 25708 +25578 25708 25707 +25579 25580 25708 +25580 25709 25708 +25580 25581 25710 +25580 25710 25709 +25581 25582 25710 +25582 25711 25710 +25582 25583 25712 +25582 25712 25711 +25583 25584 25712 +25584 25713 25712 +25584 25585 25714 +25584 25714 25713 +25585 25586 25714 +25586 25715 25714 +25586 25587 25716 +25586 25716 25715 +25587 25588 25716 +25588 25717 25716 +25588 25589 25718 +25588 25718 25717 +25589 25590 25718 +25590 25719 25718 +25590 25591 25720 +25590 25720 25719 +25591 25592 25720 +25592 25721 25720 +25592 25593 25722 +25592 25722 25721 +25593 25594 25722 +25594 25723 25722 +25594 25595 25724 +25594 25724 25723 +25595 25596 25724 +25596 25725 25724 +25596 25597 25726 +25596 25726 25725 +25597 25598 25726 +25598 25727 25726 +25598 25599 25728 +25598 25728 25727 +25599 25600 25728 +25600 25729 25728 +25600 25601 25730 +25600 25730 25729 +25601 25602 25730 +25602 25731 25730 +25602 25603 25732 +25602 25732 25731 +25603 25604 25732 +25604 25733 25732 +25604 25605 25734 +25604 25734 25733 +25605 25606 25734 +25606 25735 25734 +25606 25607 25736 +25606 25736 25735 +25607 25608 25736 +25608 25737 25736 +25608 25609 25738 +25608 25738 25737 +25609 25610 25738 +25610 25739 25738 +25610 25611 25740 +25610 25740 25739 +25611 25612 25740 +25612 25741 25740 +25612 25613 25742 +25612 25742 25741 +25613 25614 25742 +25614 25743 25742 +25614 25615 25744 +25614 25744 25743 +25615 25616 25744 +25616 25745 25744 +25616 25617 25746 +25616 25746 25745 +25617 25618 25746 +25618 25747 25746 +25618 25619 25748 +25618 25748 25747 +25619 25620 25748 +25620 25749 25748 +25620 25621 25750 +25620 25750 25749 +25621 25622 25750 +25622 25751 25750 +25622 25623 25752 +25622 25752 25751 +25624 25625 25754 +25624 25754 25753 +25625 25626 25754 +25626 25755 25754 +25626 25627 25756 +25626 25756 25755 +25627 25628 25756 +25628 25757 25756 +25628 25629 25758 +25628 25758 25757 +25629 25630 25758 +25630 25759 25758 +25630 25631 25760 +25630 25760 25759 +25631 25632 25760 +25632 25761 25760 +25632 25633 25762 +25632 25762 25761 +25633 25634 25762 +25634 25763 25762 +25634 25635 25764 +25634 25764 25763 +25635 25636 25764 +25636 25765 25764 +25636 25637 25766 +25636 25766 25765 +25637 25638 25766 +25638 25767 25766 +25638 25639 25768 +25638 25768 25767 +25639 25640 25768 +25640 25769 25768 +25640 25641 25770 +25640 25770 25769 +25641 25642 25770 +25642 25771 25770 +25642 25643 25772 +25642 25772 25771 +25643 25644 25772 +25644 25773 25772 +25644 25645 25774 +25644 25774 25773 +25645 25646 25774 +25646 25775 25774 +25646 25647 25776 +25646 25776 25775 +25647 25648 25776 +25648 25777 25776 +25648 25649 25778 +25648 25778 25777 +25649 25650 25778 +25650 25779 25778 +25650 25651 25780 +25650 25780 25779 +25651 25652 25780 +25652 25781 25780 +25652 25653 25782 +25652 25782 25781 +25653 25654 25782 +25654 25783 25782 +25654 25655 25784 +25654 25784 25783 +25655 25656 25784 +25656 25785 25784 +25656 25657 25786 +25656 25786 25785 +25657 25658 25786 +25658 25787 25786 +25658 25659 25788 +25658 25788 25787 +25659 25660 25788 +25660 25789 25788 +25660 25661 25790 +25660 25790 25789 +25661 25662 25790 +25662 25791 25790 +25662 25663 25792 +25662 25792 25791 +25663 25664 25792 +25664 25793 25792 +25664 25665 25794 +25664 25794 25793 +25665 25666 25794 +25666 25795 25794 +25666 25667 25796 +25666 25796 25795 +25667 25668 25796 +25668 25797 25796 +25668 25669 25798 +25668 25798 25797 +25669 25670 25798 +25670 25799 25798 +25670 25671 25800 +25670 25800 25799 +25671 25672 25800 +25672 25801 25800 +25672 25673 25802 +25672 25802 25801 +25673 25674 25802 +25674 25803 25802 +25674 25675 25804 +25674 25804 25803 +25675 25676 25804 +25676 25805 25804 +25676 25677 25806 +25676 25806 25805 +25677 25678 25806 +25678 25807 25806 +25678 25679 25808 +25678 25808 25807 +25679 25680 25808 +25680 25809 25808 +25680 25681 25810 +25680 25810 25809 +25681 25682 25810 +25682 25811 25810 +25682 25683 25812 +25682 25812 25811 +25683 25684 25812 +25684 25813 25812 +25684 25685 25814 +25684 25814 25813 +25685 25686 25814 +25686 25815 25814 +25686 25687 25816 +25686 25816 25815 +25687 25688 25816 +25688 25817 25816 +25688 25689 25818 +25688 25818 25817 +25689 25690 25818 +25690 25819 25818 +25690 25691 25820 +25690 25820 25819 +25691 25692 25820 +25692 25821 25820 +25692 25693 25822 +25692 25822 25821 +25693 25694 25822 +25694 25823 25822 +25694 25695 25824 +25694 25824 25823 +25695 25696 25824 +25696 25825 25824 +25696 25697 25826 +25696 25826 25825 +25697 25698 25826 +25698 25827 25826 +25698 25699 25828 +25698 25828 25827 +25699 25700 25828 +25700 25829 25828 +25700 25701 25830 +25700 25830 25829 +25701 25702 25830 +25702 25831 25830 +25702 25703 25832 +25702 25832 25831 +25703 25704 25832 +25704 25833 25832 +25704 25705 25834 +25704 25834 25833 +25705 25706 25834 +25706 25835 25834 +25706 25707 25836 +25706 25836 25835 +25707 25708 25836 +25708 25837 25836 +25708 25709 25838 +25708 25838 25837 +25709 25710 25838 +25710 25839 25838 +25710 25711 25840 +25710 25840 25839 +25711 25712 25840 +25712 25841 25840 +25712 25713 25842 +25712 25842 25841 +25713 25714 25842 +25714 25843 25842 +25714 25715 25844 +25714 25844 25843 +25715 25716 25844 +25716 25845 25844 +25716 25717 25846 +25716 25846 25845 +25717 25718 25846 +25718 25847 25846 +25718 25719 25848 +25718 25848 25847 +25719 25720 25848 +25720 25849 25848 +25720 25721 25850 +25720 25850 25849 +25721 25722 25850 +25722 25851 25850 +25722 25723 25852 +25722 25852 25851 +25723 25724 25852 +25724 25853 25852 +25724 25725 25854 +25724 25854 25853 +25725 25726 25854 +25726 25855 25854 +25726 25727 25856 +25726 25856 25855 +25727 25728 25856 +25728 25857 25856 +25728 25729 25858 +25728 25858 25857 +25729 25730 25858 +25730 25859 25858 +25730 25731 25860 +25730 25860 25859 +25731 25732 25860 +25732 25861 25860 +25732 25733 25862 +25732 25862 25861 +25733 25734 25862 +25734 25863 25862 +25734 25735 25864 +25734 25864 25863 +25735 25736 25864 +25736 25865 25864 +25736 25737 25866 +25736 25866 25865 +25737 25738 25866 +25738 25867 25866 +25738 25739 25868 +25738 25868 25867 +25739 25740 25868 +25740 25869 25868 +25740 25741 25870 +25740 25870 25869 +25741 25742 25870 +25742 25871 25870 +25742 25743 25872 +25742 25872 25871 +25743 25744 25872 +25744 25873 25872 +25744 25745 25874 +25744 25874 25873 +25745 25746 25874 +25746 25875 25874 +25746 25747 25876 +25746 25876 25875 +25747 25748 25876 +25748 25877 25876 +25748 25749 25878 +25748 25878 25877 +25749 25750 25878 +25750 25879 25878 +25750 25751 25880 +25750 25880 25879 +25751 25752 25880 +25752 25881 25880 +25753 25754 25882 +25754 25883 25882 +25754 25755 25884 +25754 25884 25883 +25755 25756 25884 +25756 25885 25884 +25756 25757 25886 +25756 25886 25885 +25757 25758 25886 +25758 25887 25886 +25758 25759 25888 +25758 25888 25887 +25759 25760 25888 +25760 25889 25888 +25760 25761 25890 +25760 25890 25889 +25761 25762 25890 +25762 25891 25890 +25762 25763 25892 +25762 25892 25891 +25763 25764 25892 +25764 25893 25892 +25764 25765 25894 +25764 25894 25893 +25765 25766 25894 +25766 25895 25894 +25766 25767 25896 +25766 25896 25895 +25767 25768 25896 +25768 25897 25896 +25768 25769 25898 +25768 25898 25897 +25769 25770 25898 +25770 25899 25898 +25770 25771 25900 +25770 25900 25899 +25771 25772 25900 +25772 25901 25900 +25772 25773 25902 +25772 25902 25901 +25773 25774 25902 +25774 25903 25902 +25774 25775 25904 +25774 25904 25903 +25775 25776 25904 +25776 25905 25904 +25776 25777 25906 +25776 25906 25905 +25777 25778 25906 +25778 25907 25906 +25778 25779 25908 +25778 25908 25907 +25779 25780 25908 +25780 25909 25908 +25780 25781 25910 +25780 25910 25909 +25781 25782 25910 +25782 25911 25910 +25782 25783 25912 +25782 25912 25911 +25783 25784 25912 +25784 25913 25912 +25784 25785 25914 +25784 25914 25913 +25785 25786 25914 +25786 25915 25914 +25786 25787 25916 +25786 25916 25915 +25787 25788 25916 +25788 25917 25916 +25788 25789 25918 +25788 25918 25917 +25789 25790 25918 +25790 25919 25918 +25790 25791 25920 +25790 25920 25919 +25791 25792 25920 +25792 25921 25920 +25792 25793 25922 +25792 25922 25921 +25793 25794 25922 +25794 25923 25922 +25794 25795 25924 +25794 25924 25923 +25795 25796 25924 +25796 25925 25924 +25796 25797 25926 +25796 25926 25925 +25797 25798 25926 +25798 25927 25926 +25798 25799 25928 +25798 25928 25927 +25799 25800 25928 +25800 25929 25928 +25800 25801 25930 +25800 25930 25929 +25801 25802 25930 +25802 25931 25930 +25802 25803 25932 +25802 25932 25931 +25803 25804 25932 +25804 25933 25932 +25804 25805 25934 +25804 25934 25933 +25805 25806 25934 +25806 25935 25934 +25806 25807 25936 +25806 25936 25935 +25807 25808 25936 +25808 25937 25936 +25808 25809 25938 +25808 25938 25937 +25809 25810 25938 +25810 25939 25938 +25810 25811 25940 +25810 25940 25939 +25811 25812 25940 +25812 25941 25940 +25812 25813 25942 +25812 25942 25941 +25813 25814 25942 +25814 25943 25942 +25814 25815 25944 +25814 25944 25943 +25815 25816 25944 +25816 25945 25944 +25816 25817 25946 +25816 25946 25945 +25817 25818 25946 +25818 25947 25946 +25818 25819 25948 +25818 25948 25947 +25819 25820 25948 +25820 25949 25948 +25820 25821 25950 +25820 25950 25949 +25821 25822 25950 +25822 25951 25950 +25822 25823 25952 +25822 25952 25951 +25823 25824 25952 +25824 25953 25952 +25824 25825 25954 +25824 25954 25953 +25825 25826 25954 +25826 25955 25954 +25826 25827 25956 +25826 25956 25955 +25827 25828 25956 +25828 25957 25956 +25828 25829 25958 +25828 25958 25957 +25829 25830 25958 +25830 25959 25958 +25830 25831 25960 +25830 25960 25959 +25831 25832 25960 +25832 25961 25960 +25832 25833 25962 +25832 25962 25961 +25833 25834 25962 +25834 25963 25962 +25834 25835 25964 +25834 25964 25963 +25835 25836 25964 +25836 25965 25964 +25836 25837 25966 +25836 25966 25965 +25837 25838 25966 +25838 25967 25966 +25838 25839 25968 +25838 25968 25967 +25839 25840 25968 +25840 25969 25968 +25840 25841 25970 +25840 25970 25969 +25841 25842 25970 +25842 25971 25970 +25842 25843 25972 +25842 25972 25971 +25843 25844 25972 +25844 25973 25972 +25844 25845 25974 +25844 25974 25973 +25845 25846 25974 +25846 25975 25974 +25846 25847 25976 +25846 25976 25975 +25847 25848 25976 +25848 25977 25976 +25848 25849 25978 +25848 25978 25977 +25849 25850 25978 +25850 25979 25978 +25850 25851 25980 +25850 25980 25979 +25851 25852 25980 +25852 25981 25980 +25852 25853 25982 +25852 25982 25981 +25853 25854 25982 +25854 25983 25982 +25854 25855 25984 +25854 25984 25983 +25855 25856 25984 +25856 25985 25984 +25856 25857 25986 +25856 25986 25985 +25857 25858 25986 +25858 25987 25986 +25858 25859 25988 +25858 25988 25987 +25859 25860 25988 +25860 25989 25988 +25860 25861 25990 +25860 25990 25989 +25861 25862 25990 +25862 25991 25990 +25862 25863 25992 +25862 25992 25991 +25863 25864 25992 +25864 25993 25992 +25864 25865 25994 +25864 25994 25993 +25865 25866 25994 +25866 25995 25994 +25866 25867 25996 +25866 25996 25995 +25867 25868 25996 +25868 25997 25996 +25868 25869 25998 +25868 25998 25997 +25869 25870 25998 +25870 25999 25998 +25870 25871 26000 +25870 26000 25999 +25871 25872 26000 +25872 26001 26000 +25872 25873 26002 +25872 26002 26001 +25873 25874 26002 +25874 26003 26002 +25874 25875 26004 +25874 26004 26003 +25875 25876 26004 +25876 26005 26004 +25876 25877 26006 +25876 26006 26005 +25877 25878 26006 +25878 26007 26006 +25878 25879 26008 +25878 26008 26007 +25879 25880 26008 +25880 26009 26008 +25880 25881 26010 +25880 26010 26009 +25882 25883 26012 +25882 26012 26011 +25883 25884 26012 +25884 26013 26012 +25884 25885 26014 +25884 26014 26013 +25885 25886 26014 +25886 26015 26014 +25886 25887 26016 +25886 26016 26015 +25887 25888 26016 +25888 26017 26016 +25888 25889 26018 +25888 26018 26017 +25889 25890 26018 +25890 26019 26018 +25890 25891 26020 +25890 26020 26019 +25891 25892 26020 +25892 26021 26020 +25892 25893 26022 +25892 26022 26021 +25893 25894 26022 +25894 26023 26022 +25894 25895 26024 +25894 26024 26023 +25895 25896 26024 +25896 26025 26024 +25896 25897 26026 +25896 26026 26025 +25897 25898 26026 +25898 26027 26026 +25898 25899 26028 +25898 26028 26027 +25899 25900 26028 +25900 26029 26028 +25900 25901 26030 +25900 26030 26029 +25901 25902 26030 +25902 26031 26030 +25902 25903 26032 +25902 26032 26031 +25903 25904 26032 +25904 26033 26032 +25904 25905 26034 +25904 26034 26033 +25905 25906 26034 +25906 26035 26034 +25906 25907 26036 +25906 26036 26035 +25907 25908 26036 +25908 26037 26036 +25908 25909 26038 +25908 26038 26037 +25909 25910 26038 +25910 26039 26038 +25910 25911 26040 +25910 26040 26039 +25911 25912 26040 +25912 26041 26040 +25912 25913 26042 +25912 26042 26041 +25913 25914 26042 +25914 26043 26042 +25914 25915 26044 +25914 26044 26043 +25915 25916 26044 +25916 26045 26044 +25916 25917 26046 +25916 26046 26045 +25917 25918 26046 +25918 26047 26046 +25918 25919 26048 +25918 26048 26047 +25919 25920 26048 +25920 26049 26048 +25920 25921 26050 +25920 26050 26049 +25921 25922 26050 +25922 26051 26050 +25922 25923 26052 +25922 26052 26051 +25923 25924 26052 +25924 26053 26052 +25924 25925 26054 +25924 26054 26053 +25925 25926 26054 +25926 26055 26054 +25926 25927 26056 +25926 26056 26055 +25927 25928 26056 +25928 26057 26056 +25928 25929 26058 +25928 26058 26057 +25929 25930 26058 +25930 26059 26058 +25930 25931 26060 +25930 26060 26059 +25931 25932 26060 +25932 26061 26060 +25932 25933 26062 +25932 26062 26061 +25933 25934 26062 +25934 26063 26062 +25934 25935 26064 +25934 26064 26063 +25935 25936 26064 +25936 26065 26064 +25936 25937 26066 +25936 26066 26065 +25937 25938 26066 +25938 26067 26066 +25938 25939 26068 +25938 26068 26067 +25939 25940 26068 +25940 26069 26068 +25940 25941 26070 +25940 26070 26069 +25941 25942 26070 +25942 26071 26070 +25942 25943 26072 +25942 26072 26071 +25943 25944 26072 +25944 26073 26072 +25944 25945 26074 +25944 26074 26073 +25945 25946 26074 +25946 26075 26074 +25946 25947 26076 +25946 26076 26075 +25947 25948 26076 +25948 26077 26076 +25948 25949 26078 +25948 26078 26077 +25949 25950 26078 +25950 26079 26078 +25950 25951 26080 +25950 26080 26079 +25951 25952 26080 +25952 26081 26080 +25952 25953 26082 +25952 26082 26081 +25953 25954 26082 +25954 26083 26082 +25954 25955 26084 +25954 26084 26083 +25955 25956 26084 +25956 26085 26084 +25956 25957 26086 +25956 26086 26085 +25957 25958 26086 +25958 26087 26086 +25958 25959 26088 +25958 26088 26087 +25959 25960 26088 +25960 26089 26088 +25960 25961 26090 +25960 26090 26089 +25961 25962 26090 +25962 26091 26090 +25962 25963 26092 +25962 26092 26091 +25963 25964 26092 +25964 26093 26092 +25964 25965 26094 +25964 26094 26093 +25965 25966 26094 +25966 26095 26094 +25966 25967 26096 +25966 26096 26095 +25967 25968 26096 +25968 26097 26096 +25968 25969 26098 +25968 26098 26097 +25969 25970 26098 +25970 26099 26098 +25970 25971 26100 +25970 26100 26099 +25971 25972 26100 +25972 26101 26100 +25972 25973 26102 +25972 26102 26101 +25973 25974 26102 +25974 26103 26102 +25974 25975 26104 +25974 26104 26103 +25975 25976 26104 +25976 26105 26104 +25976 25977 26106 +25976 26106 26105 +25977 25978 26106 +25978 26107 26106 +25978 25979 26108 +25978 26108 26107 +25979 25980 26108 +25980 26109 26108 +25980 25981 26110 +25980 26110 26109 +25981 25982 26110 +25982 26111 26110 +25982 25983 26112 +25982 26112 26111 +25983 25984 26112 +25984 26113 26112 +25984 25985 26114 +25984 26114 26113 +25985 25986 26114 +25986 26115 26114 +25986 25987 26116 +25986 26116 26115 +25987 25988 26116 +25988 26117 26116 +25988 25989 26118 +25988 26118 26117 +25989 25990 26118 +25990 26119 26118 +25990 25991 26120 +25990 26120 26119 +25991 25992 26120 +25992 26121 26120 +25992 25993 26122 +25992 26122 26121 +25993 25994 26122 +25994 26123 26122 +25994 25995 26124 +25994 26124 26123 +25995 25996 26124 +25996 26125 26124 +25996 25997 26126 +25996 26126 26125 +25997 25998 26126 +25998 26127 26126 +25998 25999 26128 +25998 26128 26127 +25999 26000 26128 +26000 26129 26128 +26000 26001 26130 +26000 26130 26129 +26001 26002 26130 +26002 26131 26130 +26002 26003 26132 +26002 26132 26131 +26003 26004 26132 +26004 26133 26132 +26004 26005 26134 +26004 26134 26133 +26005 26006 26134 +26006 26135 26134 +26006 26007 26136 +26006 26136 26135 +26007 26008 26136 +26008 26137 26136 +26008 26009 26138 +26008 26138 26137 +26009 26010 26138 +26010 26139 26138 +26011 26012 26140 +26012 26141 26140 +26012 26013 26142 +26012 26142 26141 +26013 26014 26142 +26014 26143 26142 +26014 26015 26144 +26014 26144 26143 +26015 26016 26144 +26016 26145 26144 +26016 26017 26146 +26016 26146 26145 +26017 26018 26146 +26018 26147 26146 +26018 26019 26148 +26018 26148 26147 +26019 26020 26148 +26020 26149 26148 +26020 26021 26150 +26020 26150 26149 +26021 26022 26150 +26022 26151 26150 +26022 26023 26152 +26022 26152 26151 +26023 26024 26152 +26024 26153 26152 +26024 26025 26154 +26024 26154 26153 +26025 26026 26154 +26026 26155 26154 +26026 26027 26156 +26026 26156 26155 +26027 26028 26156 +26028 26157 26156 +26028 26029 26158 +26028 26158 26157 +26029 26030 26158 +26030 26159 26158 +26030 26031 26160 +26030 26160 26159 +26031 26032 26160 +26032 26161 26160 +26032 26033 26162 +26032 26162 26161 +26033 26034 26162 +26034 26163 26162 +26034 26035 26164 +26034 26164 26163 +26035 26036 26164 +26036 26165 26164 +26036 26037 26166 +26036 26166 26165 +26037 26038 26166 +26038 26167 26166 +26038 26039 26168 +26038 26168 26167 +26039 26040 26168 +26040 26169 26168 +26040 26041 26170 +26040 26170 26169 +26041 26042 26170 +26042 26171 26170 +26042 26043 26172 +26042 26172 26171 +26043 26044 26172 +26044 26173 26172 +26044 26045 26174 +26044 26174 26173 +26045 26046 26174 +26046 26175 26174 +26046 26047 26176 +26046 26176 26175 +26047 26048 26176 +26048 26177 26176 +26048 26049 26178 +26048 26178 26177 +26049 26050 26178 +26050 26179 26178 +26050 26051 26180 +26050 26180 26179 +26051 26052 26180 +26052 26181 26180 +26052 26053 26182 +26052 26182 26181 +26053 26054 26182 +26054 26183 26182 +26054 26055 26184 +26054 26184 26183 +26055 26056 26184 +26056 26185 26184 +26056 26057 26186 +26056 26186 26185 +26057 26058 26186 +26058 26187 26186 +26058 26059 26188 +26058 26188 26187 +26059 26060 26188 +26060 26189 26188 +26060 26061 26190 +26060 26190 26189 +26061 26062 26190 +26062 26191 26190 +26062 26063 26192 +26062 26192 26191 +26063 26064 26192 +26064 26193 26192 +26064 26065 26194 +26064 26194 26193 +26065 26066 26194 +26066 26195 26194 +26066 26067 26196 +26066 26196 26195 +26067 26068 26196 +26068 26197 26196 +26068 26069 26198 +26068 26198 26197 +26069 26070 26198 +26070 26199 26198 +26070 26071 26200 +26070 26200 26199 +26071 26072 26200 +26072 26201 26200 +26072 26073 26202 +26072 26202 26201 +26073 26074 26202 +26074 26203 26202 +26074 26075 26204 +26074 26204 26203 +26075 26076 26204 +26076 26205 26204 +26076 26077 26206 +26076 26206 26205 +26077 26078 26206 +26078 26207 26206 +26078 26079 26208 +26078 26208 26207 +26079 26080 26208 +26080 26209 26208 +26080 26081 26210 +26080 26210 26209 +26081 26082 26210 +26082 26211 26210 +26082 26083 26212 +26082 26212 26211 +26083 26084 26212 +26084 26213 26212 +26084 26085 26214 +26084 26214 26213 +26085 26086 26214 +26086 26215 26214 +26086 26087 26216 +26086 26216 26215 +26087 26088 26216 +26088 26217 26216 +26088 26089 26218 +26088 26218 26217 +26089 26090 26218 +26090 26219 26218 +26090 26091 26220 +26090 26220 26219 +26091 26092 26220 +26092 26221 26220 +26092 26093 26222 +26092 26222 26221 +26093 26094 26222 +26094 26223 26222 +26094 26095 26224 +26094 26224 26223 +26095 26096 26224 +26096 26225 26224 +26096 26097 26226 +26096 26226 26225 +26097 26098 26226 +26098 26227 26226 +26098 26099 26228 +26098 26228 26227 +26099 26100 26228 +26100 26229 26228 +26100 26101 26230 +26100 26230 26229 +26101 26102 26230 +26102 26231 26230 +26102 26103 26232 +26102 26232 26231 +26103 26104 26232 +26104 26233 26232 +26104 26105 26234 +26104 26234 26233 +26105 26106 26234 +26106 26235 26234 +26106 26107 26236 +26106 26236 26235 +26107 26108 26236 +26108 26237 26236 +26108 26109 26238 +26108 26238 26237 +26109 26110 26238 +26110 26239 26238 +26110 26111 26240 +26110 26240 26239 +26111 26112 26240 +26112 26241 26240 +26112 26113 26242 +26112 26242 26241 +26113 26114 26242 +26114 26243 26242 +26114 26115 26244 +26114 26244 26243 +26115 26116 26244 +26116 26245 26244 +26116 26117 26246 +26116 26246 26245 +26117 26118 26246 +26118 26247 26246 +26118 26119 26248 +26118 26248 26247 +26119 26120 26248 +26120 26249 26248 +26120 26121 26250 +26120 26250 26249 +26121 26122 26250 +26122 26251 26250 +26122 26123 26252 +26122 26252 26251 +26123 26124 26252 +26124 26253 26252 +26124 26125 26254 +26124 26254 26253 +26125 26126 26254 +26126 26255 26254 +26126 26127 26256 +26126 26256 26255 +26127 26128 26256 +26128 26257 26256 +26128 26129 26258 +26128 26258 26257 +26129 26130 26258 +26130 26259 26258 +26130 26131 26260 +26130 26260 26259 +26131 26132 26260 +26132 26261 26260 +26132 26133 26262 +26132 26262 26261 +26133 26134 26262 +26134 26263 26262 +26134 26135 26264 +26134 26264 26263 +26135 26136 26264 +26136 26265 26264 +26136 26137 26266 +26136 26266 26265 +26137 26138 26266 +26138 26267 26266 +26138 26139 26268 +26138 26268 26267 +26140 26141 26270 +26140 26270 26269 +26141 26142 26270 +26142 26271 26270 +26142 26143 26272 +26142 26272 26271 +26143 26144 26272 +26144 26273 26272 +26144 26145 26274 +26144 26274 26273 +26145 26146 26274 +26146 26275 26274 +26146 26147 26276 +26146 26276 26275 +26147 26148 26276 +26148 26277 26276 +26148 26149 26278 +26148 26278 26277 +26149 26150 26278 +26150 26279 26278 +26150 26151 26280 +26150 26280 26279 +26151 26152 26280 +26152 26281 26280 +26152 26153 26282 +26152 26282 26281 +26153 26154 26282 +26154 26283 26282 +26154 26155 26284 +26154 26284 26283 +26155 26156 26284 +26156 26285 26284 +26156 26157 26286 +26156 26286 26285 +26157 26158 26286 +26158 26287 26286 +26158 26159 26288 +26158 26288 26287 +26159 26160 26288 +26160 26289 26288 +26160 26161 26290 +26160 26290 26289 +26161 26162 26290 +26162 26291 26290 +26162 26163 26292 +26162 26292 26291 +26163 26164 26292 +26164 26293 26292 +26164 26165 26294 +26164 26294 26293 +26165 26166 26294 +26166 26295 26294 +26166 26167 26296 +26166 26296 26295 +26167 26168 26296 +26168 26297 26296 +26168 26169 26298 +26168 26298 26297 +26169 26170 26298 +26170 26299 26298 +26170 26171 26300 +26170 26300 26299 +26171 26172 26300 +26172 26301 26300 +26172 26173 26302 +26172 26302 26301 +26173 26174 26302 +26174 26303 26302 +26174 26175 26304 +26174 26304 26303 +26175 26176 26304 +26176 26305 26304 +26176 26177 26306 +26176 26306 26305 +26177 26178 26306 +26178 26307 26306 +26178 26179 26308 +26178 26308 26307 +26179 26180 26308 +26180 26309 26308 +26180 26181 26310 +26180 26310 26309 +26181 26182 26310 +26182 26311 26310 +26182 26183 26312 +26182 26312 26311 +26183 26184 26312 +26184 26313 26312 +26184 26185 26314 +26184 26314 26313 +26185 26186 26314 +26186 26315 26314 +26186 26187 26316 +26186 26316 26315 +26187 26188 26316 +26188 26317 26316 +26188 26189 26318 +26188 26318 26317 +26189 26190 26318 +26190 26319 26318 +26190 26191 26320 +26190 26320 26319 +26191 26192 26320 +26192 26321 26320 +26192 26193 26322 +26192 26322 26321 +26193 26194 26322 +26194 26323 26322 +26194 26195 26324 +26194 26324 26323 +26195 26196 26324 +26196 26325 26324 +26196 26197 26326 +26196 26326 26325 +26197 26198 26326 +26198 26327 26326 +26198 26199 26328 +26198 26328 26327 +26199 26200 26328 +26200 26329 26328 +26200 26201 26330 +26200 26330 26329 +26201 26202 26330 +26202 26331 26330 +26202 26203 26332 +26202 26332 26331 +26203 26204 26332 +26204 26333 26332 +26204 26205 26334 +26204 26334 26333 +26205 26206 26334 +26206 26335 26334 +26206 26207 26336 +26206 26336 26335 +26207 26208 26336 +26208 26337 26336 +26208 26209 26338 +26208 26338 26337 +26209 26210 26338 +26210 26339 26338 +26210 26211 26340 +26210 26340 26339 +26211 26212 26340 +26212 26341 26340 +26212 26213 26342 +26212 26342 26341 +26213 26214 26342 +26214 26343 26342 +26214 26215 26344 +26214 26344 26343 +26215 26216 26344 +26216 26345 26344 +26216 26217 26346 +26216 26346 26345 +26217 26218 26346 +26218 26347 26346 +26218 26219 26348 +26218 26348 26347 +26219 26220 26348 +26220 26349 26348 +26220 26221 26350 +26220 26350 26349 +26221 26222 26350 +26222 26351 26350 +26222 26223 26352 +26222 26352 26351 +26223 26224 26352 +26224 26353 26352 +26224 26225 26354 +26224 26354 26353 +26225 26226 26354 +26226 26355 26354 +26226 26227 26356 +26226 26356 26355 +26227 26228 26356 +26228 26357 26356 +26228 26229 26358 +26228 26358 26357 +26229 26230 26358 +26230 26359 26358 +26230 26231 26360 +26230 26360 26359 +26231 26232 26360 +26232 26361 26360 +26232 26233 26362 +26232 26362 26361 +26233 26234 26362 +26234 26363 26362 +26234 26235 26364 +26234 26364 26363 +26235 26236 26364 +26236 26365 26364 +26236 26237 26366 +26236 26366 26365 +26237 26238 26366 +26238 26367 26366 +26238 26239 26368 +26238 26368 26367 +26239 26240 26368 +26240 26369 26368 +26240 26241 26370 +26240 26370 26369 +26241 26242 26370 +26242 26371 26370 +26242 26243 26372 +26242 26372 26371 +26243 26244 26372 +26244 26373 26372 +26244 26245 26374 +26244 26374 26373 +26245 26246 26374 +26246 26375 26374 +26246 26247 26376 +26246 26376 26375 +26247 26248 26376 +26248 26377 26376 +26248 26249 26378 +26248 26378 26377 +26249 26250 26378 +26250 26379 26378 +26250 26251 26380 +26250 26380 26379 +26251 26252 26380 +26252 26381 26380 +26252 26253 26382 +26252 26382 26381 +26253 26254 26382 +26254 26383 26382 +26254 26255 26384 +26254 26384 26383 +26255 26256 26384 +26256 26385 26384 +26256 26257 26386 +26256 26386 26385 +26257 26258 26386 +26258 26387 26386 +26258 26259 26388 +26258 26388 26387 +26259 26260 26388 +26260 26389 26388 +26260 26261 26390 +26260 26390 26389 +26261 26262 26390 +26262 26391 26390 +26262 26263 26392 +26262 26392 26391 +26263 26264 26392 +26264 26393 26392 +26264 26265 26394 +26264 26394 26393 +26265 26266 26394 +26266 26395 26394 +26266 26267 26396 +26266 26396 26395 +26267 26268 26396 +26268 26397 26396 +26269 26270 26398 +26270 26399 26398 +26270 26271 26400 +26270 26400 26399 +26271 26272 26400 +26272 26401 26400 +26272 26273 26402 +26272 26402 26401 +26273 26274 26402 +26274 26403 26402 +26274 26275 26404 +26274 26404 26403 +26275 26276 26404 +26276 26405 26404 +26276 26277 26406 +26276 26406 26405 +26277 26278 26406 +26278 26407 26406 +26278 26279 26408 +26278 26408 26407 +26279 26280 26408 +26280 26409 26408 +26280 26281 26410 +26280 26410 26409 +26281 26282 26410 +26282 26411 26410 +26282 26283 26412 +26282 26412 26411 +26283 26284 26412 +26284 26413 26412 +26284 26285 26414 +26284 26414 26413 +26285 26286 26414 +26286 26415 26414 +26286 26287 26416 +26286 26416 26415 +26287 26288 26416 +26288 26417 26416 +26288 26289 26418 +26288 26418 26417 +26289 26290 26418 +26290 26419 26418 +26290 26291 26420 +26290 26420 26419 +26291 26292 26420 +26292 26421 26420 +26292 26293 26422 +26292 26422 26421 +26293 26294 26422 +26294 26423 26422 +26294 26295 26424 +26294 26424 26423 +26295 26296 26424 +26296 26425 26424 +26296 26297 26426 +26296 26426 26425 +26297 26298 26426 +26298 26427 26426 +26298 26299 26428 +26298 26428 26427 +26299 26300 26428 +26300 26429 26428 +26300 26301 26430 +26300 26430 26429 +26301 26302 26430 +26302 26431 26430 +26302 26303 26432 +26302 26432 26431 +26303 26304 26432 +26304 26433 26432 +26304 26305 26434 +26304 26434 26433 +26305 26306 26434 +26306 26435 26434 +26306 26307 26436 +26306 26436 26435 +26307 26308 26436 +26308 26437 26436 +26308 26309 26438 +26308 26438 26437 +26309 26310 26438 +26310 26439 26438 +26310 26311 26440 +26310 26440 26439 +26311 26312 26440 +26312 26441 26440 +26312 26313 26442 +26312 26442 26441 +26313 26314 26442 +26314 26443 26442 +26314 26315 26444 +26314 26444 26443 +26315 26316 26444 +26316 26445 26444 +26316 26317 26446 +26316 26446 26445 +26317 26318 26446 +26318 26447 26446 +26318 26319 26448 +26318 26448 26447 +26319 26320 26448 +26320 26449 26448 +26320 26321 26450 +26320 26450 26449 +26321 26322 26450 +26322 26451 26450 +26322 26323 26452 +26322 26452 26451 +26323 26324 26452 +26324 26453 26452 +26324 26325 26454 +26324 26454 26453 +26325 26326 26454 +26326 26455 26454 +26326 26327 26456 +26326 26456 26455 +26327 26328 26456 +26328 26457 26456 +26328 26329 26458 +26328 26458 26457 +26329 26330 26458 +26330 26459 26458 +26330 26331 26460 +26330 26460 26459 +26331 26332 26460 +26332 26461 26460 +26332 26333 26462 +26332 26462 26461 +26333 26334 26462 +26334 26463 26462 +26334 26335 26464 +26334 26464 26463 +26335 26336 26464 +26336 26465 26464 +26336 26337 26466 +26336 26466 26465 +26337 26338 26466 +26338 26467 26466 +26338 26339 26468 +26338 26468 26467 +26339 26340 26468 +26340 26469 26468 +26340 26341 26470 +26340 26470 26469 +26341 26342 26470 +26342 26471 26470 +26342 26343 26472 +26342 26472 26471 +26343 26344 26472 +26344 26473 26472 +26344 26345 26474 +26344 26474 26473 +26345 26346 26474 +26346 26475 26474 +26346 26347 26476 +26346 26476 26475 +26347 26348 26476 +26348 26477 26476 +26348 26349 26478 +26348 26478 26477 +26349 26350 26478 +26350 26479 26478 +26350 26351 26480 +26350 26480 26479 +26351 26352 26480 +26352 26481 26480 +26352 26353 26482 +26352 26482 26481 +26353 26354 26482 +26354 26483 26482 +26354 26355 26484 +26354 26484 26483 +26355 26356 26484 +26356 26485 26484 +26356 26357 26486 +26356 26486 26485 +26357 26358 26486 +26358 26487 26486 +26358 26359 26488 +26358 26488 26487 +26359 26360 26488 +26360 26489 26488 +26360 26361 26490 +26360 26490 26489 +26361 26362 26490 +26362 26491 26490 +26362 26363 26492 +26362 26492 26491 +26363 26364 26492 +26364 26493 26492 +26364 26365 26494 +26364 26494 26493 +26365 26366 26494 +26366 26495 26494 +26366 26367 26496 +26366 26496 26495 +26367 26368 26496 +26368 26497 26496 +26368 26369 26498 +26368 26498 26497 +26369 26370 26498 +26370 26499 26498 +26370 26371 26500 +26370 26500 26499 +26371 26372 26500 +26372 26501 26500 +26372 26373 26502 +26372 26502 26501 +26373 26374 26502 +26374 26503 26502 +26374 26375 26504 +26374 26504 26503 +26375 26376 26504 +26376 26505 26504 +26376 26377 26506 +26376 26506 26505 +26377 26378 26506 +26378 26507 26506 +26378 26379 26508 +26378 26508 26507 +26379 26380 26508 +26380 26509 26508 +26380 26381 26510 +26380 26510 26509 +26381 26382 26510 +26382 26511 26510 +26382 26383 26512 +26382 26512 26511 +26383 26384 26512 +26384 26513 26512 +26384 26385 26514 +26384 26514 26513 +26385 26386 26514 +26386 26515 26514 +26386 26387 26516 +26386 26516 26515 +26387 26388 26516 +26388 26517 26516 +26388 26389 26518 +26388 26518 26517 +26389 26390 26518 +26390 26519 26518 +26390 26391 26520 +26390 26520 26519 +26391 26392 26520 +26392 26521 26520 +26392 26393 26522 +26392 26522 26521 +26393 26394 26522 +26394 26523 26522 +26394 26395 26524 +26394 26524 26523 +26395 26396 26524 +26396 26525 26524 +26396 26397 26526 +26396 26526 26525 +26400 26401 26527 +26401 26402 26527 +26402 26528 26527 +26402 26403 26529 +26402 26529 26528 +26403 26404 26529 +26404 26530 26529 +26404 26405 26531 +26404 26531 26530 +26405 26406 26531 +26406 26532 26531 +26406 26407 26533 +26406 26533 26532 +26407 26408 26533 +26408 26534 26533 +26408 26409 26535 +26408 26535 26534 +26409 26410 26535 +26410 26536 26535 +26410 26411 26537 +26410 26537 26536 +26411 26412 26537 +26412 26538 26537 +26412 26413 26539 +26412 26539 26538 +26413 26414 26539 +26414 26540 26539 +26414 26415 26541 +26414 26541 26540 +26415 26416 26541 +26416 26542 26541 +26416 26417 26543 +26416 26543 26542 +26417 26418 26543 +26418 26544 26543 +26418 26419 26545 +26418 26545 26544 +26419 26420 26545 +26420 26546 26545 +26420 26421 26547 +26420 26547 26546 +26421 26422 26547 +26422 26548 26547 +26422 26423 26549 +26422 26549 26548 +26423 26424 26549 +26424 26550 26549 +26424 26425 26551 +26424 26551 26550 +26425 26426 26551 +26426 26552 26551 +26426 26427 26553 +26426 26553 26552 +26427 26428 26553 +26428 26554 26553 +26428 26429 26555 +26428 26555 26554 +26429 26430 26555 +26430 26556 26555 +26430 26431 26557 +26430 26557 26556 +26431 26432 26557 +26432 26558 26557 +26432 26433 26559 +26432 26559 26558 +26433 26434 26559 +26434 26560 26559 +26434 26435 26561 +26434 26561 26560 +26435 26436 26561 +26436 26562 26561 +26436 26437 26563 +26436 26563 26562 +26437 26438 26563 +26438 26564 26563 +26438 26439 26565 +26438 26565 26564 +26439 26440 26565 +26440 26566 26565 +26440 26441 26567 +26440 26567 26566 +26441 26442 26567 +26442 26568 26567 +26442 26443 26569 +26442 26569 26568 +26443 26444 26569 +26444 26570 26569 +26444 26445 26571 +26444 26571 26570 +26445 26446 26571 +26446 26572 26571 +26446 26447 26573 +26446 26573 26572 +26447 26448 26573 +26448 26574 26573 +26448 26449 26575 +26448 26575 26574 +26449 26450 26575 +26450 26576 26575 +26450 26451 26577 +26450 26577 26576 +26451 26452 26577 +26452 26578 26577 +26452 26453 26579 +26452 26579 26578 +26453 26454 26579 +26454 26580 26579 +26454 26455 26581 +26454 26581 26580 +26455 26456 26581 +26456 26582 26581 +26456 26457 26583 +26456 26583 26582 +26457 26458 26583 +26458 26584 26583 +26458 26459 26585 +26458 26585 26584 +26459 26460 26585 +26460 26586 26585 +26460 26461 26587 +26460 26587 26586 +26461 26462 26587 +26462 26588 26587 +26462 26463 26589 +26462 26589 26588 +26463 26464 26589 +26464 26590 26589 +26464 26465 26591 +26464 26591 26590 +26465 26466 26591 +26466 26592 26591 +26466 26467 26593 +26466 26593 26592 +26467 26468 26593 +26468 26594 26593 +26468 26469 26595 +26468 26595 26594 +26469 26470 26595 +26470 26596 26595 +26470 26471 26597 +26470 26597 26596 +26471 26472 26597 +26472 26598 26597 +26472 26473 26599 +26472 26599 26598 +26473 26474 26599 +26474 26600 26599 +26474 26475 26601 +26474 26601 26600 +26475 26476 26601 +26476 26602 26601 +26476 26477 26603 +26476 26603 26602 +26477 26478 26603 +26478 26604 26603 +26478 26479 26605 +26478 26605 26604 +26479 26480 26605 +26480 26606 26605 +26480 26481 26607 +26480 26607 26606 +26481 26482 26607 +26482 26608 26607 +26482 26483 26609 +26482 26609 26608 +26483 26484 26609 +26484 26610 26609 +26484 26485 26611 +26484 26611 26610 +26485 26486 26611 +26486 26612 26611 +26486 26487 26613 +26486 26613 26612 +26487 26488 26613 +26488 26614 26613 +26488 26489 26615 +26488 26615 26614 +26489 26490 26615 +26490 26616 26615 +26490 26491 26617 +26490 26617 26616 +26491 26492 26617 +26492 26618 26617 +26492 26493 26619 +26492 26619 26618 +26493 26494 26619 +26494 26620 26619 +26494 26495 26621 +26494 26621 26620 +26495 26496 26621 +26496 26622 26621 +26496 26497 26623 +26496 26623 26622 +26497 26498 26623 +26498 26624 26623 +26498 26499 26625 +26498 26625 26624 +26499 26500 26625 +26500 26626 26625 +26500 26501 26627 +26500 26627 26626 +26501 26502 26627 +26502 26628 26627 +26502 26503 26629 +26502 26629 26628 +26503 26504 26629 +26504 26630 26629 +26504 26505 26631 +26504 26631 26630 +26505 26506 26631 +26506 26632 26631 +26506 26507 26633 +26506 26633 26632 +26507 26508 26633 +26508 26634 26633 +26508 26509 26635 +26508 26635 26634 +26509 26510 26635 +26510 26636 26635 +26510 26511 26637 +26510 26637 26636 +26511 26512 26637 +26512 26638 26637 +26512 26513 26639 +26512 26639 26638 +26513 26514 26639 +26514 26640 26639 +26514 26515 26641 +26514 26641 26640 +26515 26516 26641 +26516 26642 26641 +26516 26517 26643 +26516 26643 26642 +26517 26518 26643 +26518 26644 26643 +26518 26519 26645 +26518 26645 26644 +26519 26520 26645 +26520 26646 26645 +26520 26521 26647 +26520 26647 26646 +26521 26522 26647 +26522 26648 26647 +26522 26523 26649 +26522 26649 26648 +26523 26524 26649 +26524 26650 26649 +26524 26525 26651 +26524 26651 26650 +26525 26526 26651 +26526 26652 26651 +26527 26528 26653 +26528 26529 26653 +26529 26654 26653 +26529 26530 26655 +26529 26655 26654 +26530 26531 26655 +26531 26656 26655 +26531 26532 26657 +26531 26657 26656 +26532 26533 26657 +26533 26658 26657 +26533 26534 26659 +26533 26659 26658 +26534 26535 26659 +26535 26660 26659 +26535 26536 26661 +26535 26661 26660 +26536 26537 26661 +26537 26662 26661 +26537 26538 26663 +26537 26663 26662 +26538 26539 26663 +26539 26664 26663 +26539 26540 26665 +26539 26665 26664 +26540 26541 26665 +26541 26666 26665 +26541 26542 26667 +26541 26667 26666 +26542 26543 26667 +26543 26668 26667 +26543 26544 26669 +26543 26669 26668 +26544 26545 26669 +26545 26670 26669 +26545 26546 26671 +26545 26671 26670 +26546 26547 26671 +26547 26672 26671 +26547 26548 26673 +26547 26673 26672 +26548 26549 26673 +26549 26674 26673 +26549 26550 26675 +26549 26675 26674 +26550 26551 26675 +26551 26676 26675 +26551 26552 26677 +26551 26677 26676 +26552 26553 26677 +26553 26678 26677 +26553 26554 26679 +26553 26679 26678 +26554 26555 26679 +26555 26680 26679 +26555 26556 26681 +26555 26681 26680 +26556 26557 26681 +26557 26682 26681 +26557 26558 26683 +26557 26683 26682 +26558 26559 26683 +26559 26684 26683 +26559 26560 26685 +26559 26685 26684 +26560 26561 26685 +26561 26686 26685 +26561 26562 26687 +26561 26687 26686 +26562 26563 26687 +26563 26688 26687 +26563 26564 26689 +26563 26689 26688 +26564 26565 26689 +26565 26690 26689 +26565 26566 26691 +26565 26691 26690 +26566 26567 26691 +26567 26692 26691 +26567 26568 26693 +26567 26693 26692 +26568 26569 26693 +26569 26694 26693 +26569 26570 26695 +26569 26695 26694 +26570 26571 26695 +26571 26696 26695 +26571 26572 26697 +26571 26697 26696 +26572 26573 26697 +26573 26698 26697 +26573 26574 26699 +26573 26699 26698 +26574 26575 26699 +26575 26700 26699 +26575 26576 26701 +26575 26701 26700 +26576 26577 26701 +26577 26702 26701 +26577 26578 26703 +26577 26703 26702 +26578 26579 26703 +26579 26704 26703 +26579 26580 26705 +26579 26705 26704 +26580 26581 26705 +26581 26706 26705 +26581 26582 26707 +26581 26707 26706 +26582 26583 26707 +26583 26708 26707 +26583 26584 26709 +26583 26709 26708 +26584 26585 26709 +26585 26710 26709 +26585 26586 26711 +26585 26711 26710 +26586 26587 26711 +26587 26712 26711 +26587 26588 26713 +26587 26713 26712 +26588 26589 26713 +26589 26714 26713 +26589 26590 26715 +26589 26715 26714 +26590 26591 26715 +26591 26716 26715 +26591 26592 26717 +26591 26717 26716 +26592 26593 26717 +26593 26718 26717 +26593 26594 26719 +26593 26719 26718 +26594 26595 26719 +26595 26720 26719 +26595 26596 26721 +26595 26721 26720 +26596 26597 26721 +26597 26722 26721 +26597 26598 26723 +26597 26723 26722 +26598 26599 26723 +26599 26724 26723 +26599 26600 26725 +26599 26725 26724 +26600 26601 26725 +26601 26726 26725 +26601 26602 26727 +26601 26727 26726 +26602 26603 26727 +26603 26728 26727 +26603 26604 26729 +26603 26729 26728 +26604 26605 26729 +26605 26730 26729 +26605 26606 26731 +26605 26731 26730 +26606 26607 26731 +26607 26732 26731 +26607 26608 26733 +26607 26733 26732 +26608 26609 26733 +26609 26734 26733 +26609 26610 26735 +26609 26735 26734 +26610 26611 26735 +26611 26736 26735 +26611 26612 26737 +26611 26737 26736 +26612 26613 26737 +26613 26738 26737 +26613 26614 26739 +26613 26739 26738 +26614 26615 26739 +26615 26740 26739 +26615 26616 26741 +26615 26741 26740 +26616 26617 26741 +26617 26742 26741 +26617 26618 26743 +26617 26743 26742 +26618 26619 26743 +26619 26744 26743 +26619 26620 26745 +26619 26745 26744 +26620 26621 26745 +26621 26746 26745 +26621 26622 26747 +26621 26747 26746 +26622 26623 26747 +26623 26748 26747 +26623 26624 26749 +26623 26749 26748 +26624 26625 26749 +26625 26750 26749 +26625 26626 26751 +26625 26751 26750 +26626 26627 26751 +26627 26752 26751 +26627 26628 26753 +26627 26753 26752 +26628 26629 26753 +26629 26754 26753 +26629 26630 26755 +26629 26755 26754 +26630 26631 26755 +26631 26756 26755 +26631 26632 26757 +26631 26757 26756 +26632 26633 26757 +26633 26758 26757 +26633 26634 26759 +26633 26759 26758 +26634 26635 26759 +26635 26760 26759 +26635 26636 26761 +26635 26761 26760 +26636 26637 26761 +26637 26762 26761 +26637 26638 26763 +26637 26763 26762 +26638 26639 26763 +26639 26764 26763 +26639 26640 26765 +26639 26765 26764 +26640 26641 26765 +26641 26766 26765 +26641 26642 26767 +26641 26767 26766 +26642 26643 26767 +26643 26768 26767 +26643 26644 26769 +26643 26769 26768 +26644 26645 26769 +26645 26770 26769 +26645 26646 26771 +26645 26771 26770 +26646 26647 26771 +26647 26772 26771 +26647 26648 26773 +26647 26773 26772 +26648 26649 26773 +26649 26774 26773 +26649 26650 26775 +26649 26775 26774 +26650 26651 26775 +26651 26776 26775 +26651 26652 26777 +26651 26777 26776 +26655 26656 26778 +26656 26657 26778 +26657 26779 26778 +26657 26658 26780 +26657 26780 26779 +26658 26659 26780 +26659 26781 26780 +26659 26660 26782 +26659 26782 26781 +26660 26661 26782 +26661 26783 26782 +26661 26662 26784 +26661 26784 26783 +26662 26663 26784 +26663 26785 26784 +26663 26664 26786 +26663 26786 26785 +26664 26665 26786 +26665 26787 26786 +26665 26666 26788 +26665 26788 26787 +26666 26667 26788 +26667 26789 26788 +26667 26668 26790 +26667 26790 26789 +26668 26669 26790 +26669 26791 26790 +26669 26670 26792 +26669 26792 26791 +26670 26671 26792 +26671 26793 26792 +26671 26672 26794 +26671 26794 26793 +26672 26673 26794 +26673 26795 26794 +26673 26674 26796 +26673 26796 26795 +26674 26675 26796 +26675 26797 26796 +26675 26676 26798 +26675 26798 26797 +26676 26677 26798 +26677 26799 26798 +26677 26678 26800 +26677 26800 26799 +26678 26679 26800 +26679 26801 26800 +26679 26680 26802 +26679 26802 26801 +26680 26681 26802 +26681 26803 26802 +26681 26682 26804 +26681 26804 26803 +26682 26683 26804 +26683 26805 26804 +26683 26684 26806 +26683 26806 26805 +26684 26685 26806 +26685 26807 26806 +26685 26686 26808 +26685 26808 26807 +26686 26687 26808 +26687 26809 26808 +26687 26688 26810 +26687 26810 26809 +26688 26689 26810 +26689 26811 26810 +26689 26690 26812 +26689 26812 26811 +26690 26691 26812 +26691 26813 26812 +26691 26692 26814 +26691 26814 26813 +26692 26693 26814 +26693 26815 26814 +26693 26694 26816 +26693 26816 26815 +26694 26695 26816 +26695 26817 26816 +26695 26696 26818 +26695 26818 26817 +26696 26697 26818 +26697 26819 26818 +26697 26698 26820 +26697 26820 26819 +26698 26699 26820 +26699 26821 26820 +26699 26700 26822 +26699 26822 26821 +26700 26701 26822 +26701 26823 26822 +26701 26702 26824 +26701 26824 26823 +26702 26703 26824 +26703 26825 26824 +26703 26704 26826 +26703 26826 26825 +26704 26705 26826 +26705 26827 26826 +26705 26706 26828 +26705 26828 26827 +26706 26707 26828 +26707 26829 26828 +26707 26708 26830 +26707 26830 26829 +26708 26709 26830 +26709 26831 26830 +26709 26710 26832 +26709 26832 26831 +26710 26711 26832 +26711 26833 26832 +26711 26712 26834 +26711 26834 26833 +26712 26713 26834 +26713 26835 26834 +26713 26714 26836 +26713 26836 26835 +26714 26715 26836 +26715 26837 26836 +26715 26716 26838 +26715 26838 26837 +26716 26717 26838 +26717 26839 26838 +26717 26718 26840 +26717 26840 26839 +26718 26719 26840 +26719 26841 26840 +26719 26720 26842 +26719 26842 26841 +26720 26721 26842 +26721 26843 26842 +26721 26722 26844 +26721 26844 26843 +26722 26723 26844 +26723 26845 26844 +26723 26724 26846 +26723 26846 26845 +26724 26725 26846 +26725 26847 26846 +26725 26726 26848 +26725 26848 26847 +26726 26727 26848 +26727 26849 26848 +26727 26728 26850 +26727 26850 26849 +26728 26729 26850 +26729 26851 26850 +26729 26730 26852 +26729 26852 26851 +26730 26731 26852 +26731 26853 26852 +26731 26732 26854 +26731 26854 26853 +26732 26733 26854 +26733 26855 26854 +26733 26734 26856 +26733 26856 26855 +26734 26735 26856 +26735 26857 26856 +26735 26736 26858 +26735 26858 26857 +26736 26737 26858 +26737 26859 26858 +26737 26738 26860 +26737 26860 26859 +26738 26739 26860 +26739 26861 26860 +26739 26740 26862 +26739 26862 26861 +26740 26741 26862 +26741 26863 26862 +26741 26742 26864 +26741 26864 26863 +26742 26743 26864 +26743 26865 26864 +26743 26744 26866 +26743 26866 26865 +26744 26745 26866 +26745 26867 26866 +26745 26746 26868 +26745 26868 26867 +26746 26747 26868 +26747 26869 26868 +26747 26748 26870 +26747 26870 26869 +26748 26749 26870 +26749 26871 26870 +26749 26750 26872 +26749 26872 26871 +26750 26751 26872 +26751 26873 26872 +26751 26752 26874 +26751 26874 26873 +26752 26753 26874 +26753 26875 26874 +26753 26754 26876 +26753 26876 26875 +26754 26755 26876 +26755 26877 26876 +26755 26756 26878 +26755 26878 26877 +26756 26757 26878 +26757 26879 26878 +26757 26758 26880 +26757 26880 26879 +26758 26759 26880 +26759 26881 26880 +26759 26760 26882 +26759 26882 26881 +26760 26761 26882 +26761 26883 26882 +26761 26762 26884 +26761 26884 26883 +26762 26763 26884 +26763 26885 26884 +26763 26764 26886 +26763 26886 26885 +26764 26765 26886 +26765 26887 26886 +26765 26766 26888 +26765 26888 26887 +26766 26767 26888 +26767 26889 26888 +26767 26768 26890 +26767 26890 26889 +26768 26769 26890 +26769 26891 26890 +26769 26770 26892 +26769 26892 26891 +26770 26771 26892 +26771 26893 26892 +26771 26772 26894 +26771 26894 26893 +26772 26773 26894 +26773 26895 26894 +26773 26774 26896 +26773 26896 26895 +26774 26775 26896 +26775 26897 26896 +26775 26776 26898 +26775 26898 26897 +26776 26777 26898 +26777 26899 26898 +26778 26779 26900 +26779 26780 26900 +26780 26901 26900 +26780 26781 26902 +26780 26902 26901 +26781 26782 26902 +26782 26903 26902 +26782 26783 26904 +26782 26904 26903 +26783 26784 26904 +26784 26905 26904 +26784 26785 26906 +26784 26906 26905 +26785 26786 26906 +26786 26907 26906 +26786 26787 26908 +26786 26908 26907 +26787 26788 26908 +26788 26909 26908 +26788 26789 26910 +26788 26910 26909 +26789 26790 26910 +26790 26911 26910 +26790 26791 26912 +26790 26912 26911 +26791 26792 26912 +26792 26913 26912 +26792 26793 26914 +26792 26914 26913 +26793 26794 26914 +26794 26915 26914 +26794 26795 26916 +26794 26916 26915 +26795 26796 26916 +26796 26917 26916 +26796 26797 26918 +26796 26918 26917 +26797 26798 26918 +26798 26919 26918 +26798 26799 26920 +26798 26920 26919 +26799 26800 26920 +26800 26921 26920 +26800 26801 26922 +26800 26922 26921 +26801 26802 26922 +26802 26923 26922 +26802 26803 26924 +26802 26924 26923 +26803 26804 26924 +26804 26925 26924 +26804 26805 26926 +26804 26926 26925 +26805 26806 26926 +26806 26927 26926 +26806 26807 26928 +26806 26928 26927 +26807 26808 26928 +26808 26929 26928 +26808 26809 26930 +26808 26930 26929 +26809 26810 26930 +26810 26931 26930 +26810 26811 26932 +26810 26932 26931 +26811 26812 26932 +26812 26933 26932 +26812 26813 26934 +26812 26934 26933 +26813 26814 26934 +26814 26935 26934 +26814 26815 26936 +26814 26936 26935 +26815 26816 26936 +26816 26937 26936 +26816 26817 26938 +26816 26938 26937 +26817 26818 26938 +26818 26939 26938 +26818 26819 26940 +26818 26940 26939 +26819 26820 26940 +26820 26941 26940 +26820 26821 26942 +26820 26942 26941 +26821 26822 26942 +26822 26943 26942 +26822 26823 26944 +26822 26944 26943 +26823 26824 26944 +26824 26945 26944 +26824 26825 26946 +26824 26946 26945 +26825 26826 26946 +26826 26947 26946 +26826 26827 26948 +26826 26948 26947 +26827 26828 26948 +26828 26949 26948 +26828 26829 26950 +26828 26950 26949 +26829 26830 26950 +26830 26951 26950 +26830 26831 26952 +26830 26952 26951 +26831 26832 26952 +26832 26953 26952 +26832 26833 26954 +26832 26954 26953 +26833 26834 26954 +26834 26955 26954 +26834 26835 26956 +26834 26956 26955 +26835 26836 26956 +26836 26957 26956 +26836 26837 26958 +26836 26958 26957 +26837 26838 26958 +26838 26959 26958 +26838 26839 26960 +26838 26960 26959 +26839 26840 26960 +26840 26961 26960 +26840 26841 26962 +26840 26962 26961 +26841 26842 26962 +26842 26963 26962 +26842 26843 26964 +26842 26964 26963 +26843 26844 26964 +26844 26965 26964 +26844 26845 26966 +26844 26966 26965 +26845 26846 26966 +26846 26967 26966 +26846 26847 26968 +26846 26968 26967 +26847 26848 26968 +26848 26969 26968 +26848 26849 26970 +26848 26970 26969 +26849 26850 26970 +26850 26971 26970 +26850 26851 26972 +26850 26972 26971 +26851 26852 26972 +26852 26973 26972 +26852 26853 26974 +26852 26974 26973 +26853 26854 26974 +26854 26975 26974 +26854 26855 26976 +26854 26976 26975 +26855 26856 26976 +26856 26977 26976 +26856 26857 26978 +26856 26978 26977 +26857 26858 26978 +26858 26979 26978 +26858 26859 26980 +26858 26980 26979 +26859 26860 26980 +26860 26981 26980 +26860 26861 26982 +26860 26982 26981 +26861 26862 26982 +26862 26983 26982 +26862 26863 26984 +26862 26984 26983 +26863 26864 26984 +26864 26985 26984 +26864 26865 26986 +26864 26986 26985 +26865 26866 26986 +26866 26987 26986 +26866 26867 26988 +26866 26988 26987 +26867 26868 26988 +26868 26989 26988 +26868 26869 26990 +26868 26990 26989 +26869 26870 26990 +26870 26991 26990 +26870 26871 26992 +26870 26992 26991 +26871 26872 26992 +26872 26993 26992 +26872 26873 26994 +26872 26994 26993 +26873 26874 26994 +26874 26995 26994 +26874 26875 26996 +26874 26996 26995 +26875 26876 26996 +26876 26997 26996 +26876 26877 26998 +26876 26998 26997 +26877 26878 26998 +26878 26999 26998 +26878 26879 27000 +26878 27000 26999 +26879 26880 27000 +26880 27001 27000 +26880 26881 27002 +26880 27002 27001 +26881 26882 27002 +26882 27003 27002 +26882 26883 27004 +26882 27004 27003 +26883 26884 27004 +26884 27005 27004 +26884 26885 27006 +26884 27006 27005 +26885 26886 27006 +26886 27007 27006 +26886 26887 27008 +26886 27008 27007 +26887 26888 27008 +26888 27009 27008 +26888 26889 27010 +26888 27010 27009 +26889 26890 27010 +26890 27011 27010 +26890 26891 27012 +26890 27012 27011 +26891 26892 27012 +26892 27013 27012 +26892 26893 27014 +26892 27014 27013 +26893 26894 27014 +26894 27015 27014 +26894 26895 27016 +26894 27016 27015 +26895 26896 27016 +26896 27017 27016 +26896 26897 27018 +26896 27018 27017 +26897 26898 27018 +26898 27019 27018 +26898 26899 27020 +26898 27020 27019 +26902 26903 27021 +26903 26904 27021 +26904 27022 27021 +26904 26905 27023 +26904 27023 27022 +26905 26906 27023 +26906 27024 27023 +26906 26907 27025 +26906 27025 27024 +26907 26908 27025 +26908 27026 27025 +26908 26909 27027 +26908 27027 27026 +26909 26910 27027 +26910 27028 27027 +26910 26911 27029 +26910 27029 27028 +26911 26912 27029 +26912 27030 27029 +26912 26913 27031 +26912 27031 27030 +26913 26914 27031 +26914 27032 27031 +26914 26915 27033 +26914 27033 27032 +26915 26916 27033 +26916 27034 27033 +26916 26917 27035 +26916 27035 27034 +26917 26918 27035 +26918 27036 27035 +26918 26919 27037 +26918 27037 27036 +26919 26920 27037 +26920 27038 27037 +26920 26921 27039 +26920 27039 27038 +26921 26922 27039 +26922 27040 27039 +26922 26923 27041 +26922 27041 27040 +26923 26924 27041 +26924 27042 27041 +26924 26925 27043 +26924 27043 27042 +26925 26926 27043 +26926 27044 27043 +26926 26927 27045 +26926 27045 27044 +26927 26928 27045 +26928 27046 27045 +26928 26929 27047 +26928 27047 27046 +26929 26930 27047 +26930 27048 27047 +26930 26931 27049 +26930 27049 27048 +26931 26932 27049 +26932 27050 27049 +26932 26933 27051 +26932 27051 27050 +26933 26934 27051 +26934 27052 27051 +26934 26935 27053 +26934 27053 27052 +26935 26936 27053 +26964 26965 27054 +26965 26966 27054 +26966 27055 27054 +26966 26967 27056 +26966 27056 27055 +26967 26968 27056 +26968 27057 27056 +26968 26969 27058 +26968 27058 27057 +26969 26970 27058 +26970 27059 27058 +26970 26971 27060 +26970 27060 27059 +26971 26972 27060 +26972 27061 27060 +26972 26973 27062 +26972 27062 27061 +26973 26974 27062 +26974 27063 27062 +26974 26975 27064 +26974 27064 27063 +26975 26976 27064 +26976 27065 27064 +26976 26977 27066 +26976 27066 27065 +26977 26978 27066 +26978 27067 27066 +26978 26979 27068 +26978 27068 27067 +26979 26980 27068 +26980 27069 27068 +26980 26981 27070 +26980 27070 27069 +26981 26982 27070 +26982 27071 27070 +26982 26983 27072 +26982 27072 27071 +26983 26984 27072 +26984 27073 27072 +26984 26985 27074 +26984 27074 27073 +26985 26986 27074 +26986 27075 27074 +26986 26987 27076 +26986 27076 27075 +26987 26988 27076 +26988 27077 27076 +26988 26989 27078 +26988 27078 27077 +26989 26990 27078 +26990 27079 27078 +26990 26991 27080 +26990 27080 27079 +26991 26992 27080 +26992 27081 27080 +26992 26993 27082 +26992 27082 27081 +26993 26994 27082 +26994 27083 27082 +26994 26995 27084 +26994 27084 27083 +26995 26996 27084 +26996 27085 27084 +26996 26997 27086 +26996 27086 27085 +26997 26998 27086 +26998 27087 27086 +26998 26999 27088 +26998 27088 27087 +26999 27000 27088 +27000 27089 27088 +27000 27001 27090 +27000 27090 27089 +27001 27002 27090 +27002 27091 27090 +27002 27003 27092 +27002 27092 27091 +27003 27004 27092 +27004 27093 27092 +27004 27005 27094 +27004 27094 27093 +27005 27006 27094 +27006 27095 27094 +27006 27007 27096 +27006 27096 27095 +27007 27008 27096 +27008 27097 27096 +27008 27009 27098 +27008 27098 27097 +27009 27010 27098 +27010 27099 27098 +27010 27011 27100 +27010 27100 27099 +27011 27012 27100 +27012 27101 27100 +27012 27013 27102 +27012 27102 27101 +27013 27014 27102 +27014 27103 27102 +27014 27015 27104 +27014 27104 27103 +27015 27016 27104 +27016 27105 27104 +27016 27017 27106 +27016 27106 27105 +27017 27018 27106 +27018 27107 27106 +27018 27019 27108 +27018 27108 27107 +27019 27020 27108 +27020 27109 27108 +27021 27022 27110 +27022 27023 27110 +27023 27111 27110 +27023 27024 27112 +27023 27112 27111 +27024 27025 27112 +27025 27113 27112 +27025 27026 27114 +27025 27114 27113 +27026 27027 27114 +27027 27115 27114 +27027 27028 27116 +27027 27116 27115 +27028 27029 27116 +27029 27117 27116 +27029 27030 27118 +27029 27118 27117 +27030 27031 27118 +27031 27119 27118 +27031 27032 27120 +27031 27120 27119 +27032 27033 27120 +27033 27121 27120 +27033 27034 27122 +27033 27122 27121 +27034 27035 27122 +27035 27123 27122 +27035 27036 27124 +27035 27124 27123 +27036 27037 27124 +27037 27125 27124 +27037 27038 27126 +27037 27126 27125 +27038 27039 27126 +27039 27127 27126 +27039 27040 27128 +27039 27128 27127 +27040 27041 27128 +27041 27129 27128 +27041 27042 27130 +27041 27130 27129 +27042 27043 27130 +27043 27131 27130 +27043 27044 27132 +27043 27132 27131 +27044 27045 27132 +27045 27133 27132 +27045 27046 27134 +27045 27134 27133 +27046 27047 27134 +27047 27135 27134 +27047 27048 27136 +27047 27136 27135 +27048 27049 27136 +27049 27137 27136 +27049 27050 27138 +27049 27138 27137 +27050 27051 27138 +27056 27057 27139 +27057 27058 27139 +27058 27140 27139 +27058 27059 27141 +27058 27141 27140 +27059 27060 27141 +27060 27142 27141 +27060 27061 27143 +27060 27143 27142 +27061 27062 27143 +27062 27144 27143 +27062 27063 27145 +27062 27145 27144 +27063 27064 27145 +27064 27146 27145 +27064 27065 27147 +27064 27147 27146 +27065 27066 27147 +27066 27148 27147 +27066 27067 27149 +27066 27149 27148 +27067 27068 27149 +27068 27150 27149 +27068 27069 27151 +27068 27151 27150 +27069 27070 27151 +27070 27152 27151 +27070 27071 27153 +27070 27153 27152 +27071 27072 27153 +27072 27154 27153 +27072 27073 27155 +27072 27155 27154 +27073 27074 27155 +27074 27156 27155 +27074 27075 27157 +27074 27157 27156 +27075 27076 27157 +27076 27158 27157 +27076 27077 27159 +27076 27159 27158 +27077 27078 27159 +27078 27160 27159 +27078 27079 27161 +27078 27161 27160 +27079 27080 27161 +27080 27162 27161 +27080 27081 27163 +27080 27163 27162 +27081 27082 27163 +27082 27164 27163 +27082 27083 27165 +27082 27165 27164 +27083 27084 27165 +27084 27166 27165 +27084 27085 27167 +27084 27167 27166 +27085 27086 27167 +27086 27168 27167 +27086 27087 27169 +27086 27169 27168 +27087 27088 27169 +27088 27170 27169 +27088 27089 27171 +27088 27171 27170 +27089 27090 27171 +27090 27172 27171 +27090 27091 27173 +27090 27173 27172 +27091 27092 27173 +27092 27174 27173 +27092 27093 27175 +27092 27175 27174 +27093 27094 27175 +27094 27176 27175 +27094 27095 27177 +27094 27177 27176 +27095 27096 27177 +27096 27178 27177 +27096 27097 27179 +27096 27179 27178 +27097 27098 27179 +27098 27180 27179 +27098 27099 27181 +27098 27181 27180 +27099 27100 27181 +27100 27182 27181 +27100 27101 27183 +27100 27183 27182 +27101 27102 27183 +27102 27184 27183 +27102 27103 27185 +27102 27185 27184 +27103 27104 27185 +27104 27186 27185 +27104 27105 27187 +27104 27187 27186 +27105 27106 27187 +27106 27188 27187 +27106 27107 27189 +27106 27189 27188 +27107 27108 27189 +27108 27190 27189 +27108 27109 27191 +27108 27191 27190 +27112 27113 27192 +27113 27114 27192 +27114 27193 27192 +27114 27115 27194 +27114 27194 27193 +27115 27116 27194 +27116 27195 27194 +27116 27117 27196 +27116 27196 27195 +27117 27118 27196 +27118 27197 27196 +27118 27119 27198 +27118 27198 27197 +27119 27120 27198 +27120 27199 27198 +27120 27121 27200 +27120 27200 27199 +27121 27122 27200 +27122 27201 27200 +27122 27123 27202 +27122 27202 27201 +27123 27124 27202 +27124 27203 27202 +27124 27125 27204 +27124 27204 27203 +27125 27126 27204 +27126 27205 27204 +27126 27127 27206 +27126 27206 27205 +27127 27128 27206 +27128 27207 27206 +27128 27129 27208 +27128 27208 27207 +27129 27130 27208 +27130 27209 27208 +27130 27131 27210 +27130 27210 27209 +27131 27132 27210 +27132 27211 27210 +27132 27133 27212 +27132 27212 27211 +27133 27134 27212 +27134 27213 27212 +27134 27135 27214 +27134 27214 27213 +27135 27136 27214 +27141 27142 27215 +27142 27143 27215 +27143 27216 27215 +27143 27144 27217 +27143 27217 27216 +27144 27145 27217 +27145 27218 27217 +27145 27146 27219 +27145 27219 27218 +27146 27147 27219 +27147 27220 27219 +27147 27148 27221 +27147 27221 27220 +27148 27149 27221 +27149 27222 27221 +27149 27150 27223 +27149 27223 27222 +27150 27151 27223 +27151 27224 27223 +27151 27152 27225 +27151 27225 27224 +27152 27153 27225 +27153 27226 27225 +27153 27154 27227 +27153 27227 27226 +27154 27155 27227 +27155 27228 27227 +27155 27156 27229 +27155 27229 27228 +27156 27157 27229 +27157 27230 27229 +27157 27158 27231 +27157 27231 27230 +27158 27159 27231 +27159 27232 27231 +27159 27160 27233 +27159 27233 27232 +27160 27161 27233 +27161 27234 27233 +27161 27162 27235 +27161 27235 27234 +27162 27163 27235 +27163 27236 27235 +27163 27164 27237 +27163 27237 27236 +27164 27165 27237 +27165 27238 27237 +27165 27166 27239 +27165 27239 27238 +27166 27167 27239 +27167 27240 27239 +27167 27168 27241 +27167 27241 27240 +27168 27169 27241 +27169 27242 27241 +27169 27170 27243 +27169 27243 27242 +27170 27171 27243 +27171 27244 27243 +27171 27172 27245 +27171 27245 27244 +27172 27173 27245 +27173 27246 27245 +27173 27174 27247 +27173 27247 27246 +27174 27175 27247 +27175 27248 27247 +27175 27176 27249 +27175 27249 27248 +27176 27177 27249 +27177 27250 27249 +27177 27178 27251 +27177 27251 27250 +27178 27179 27251 +27179 27252 27251 +27179 27180 27253 +27179 27253 27252 +27180 27181 27253 +27181 27254 27253 +27181 27182 27255 +27181 27255 27254 +27182 27183 27255 +27183 27256 27255 +27183 27184 27257 +27183 27257 27256 +27184 27185 27257 +27185 27258 27257 +27185 27186 27259 +27185 27259 27258 +27186 27187 27259 +27187 27260 27259 +27187 27188 27261 +27187 27261 27260 +27188 27189 27261 +27189 27262 27261 +27189 27190 27263 +27189 27263 27262 +27190 27191 27263 +27191 27264 27263 +27217 27218 27266 +27217 27266 27265 +27218 27219 27266 +27219 27267 27266 +27219 27220 27268 +27219 27268 27267 +27220 27221 27268 +27221 27269 27268 +27221 27222 27270 +27221 27270 27269 +27222 27223 27270 +27223 27271 27270 +27223 27224 27272 +27223 27272 27271 +27224 27225 27272 +27225 27273 27272 +27225 27226 27274 +27225 27274 27273 +27226 27227 27274 +27227 27275 27274 +27227 27228 27276 +27227 27276 27275 +27228 27229 27276 +27229 27277 27276 +27229 27230 27278 +27229 27278 27277 +27230 27231 27278 +27231 27279 27278 +27231 27232 27280 +27231 27280 27279 +27232 27233 27280 +27233 27281 27280 +27233 27234 27282 +27233 27282 27281 +27234 27235 27282 +27235 27283 27282 +27235 27236 27284 +27235 27284 27283 +27236 27237 27284 +27237 27285 27284 +27237 27238 27286 +27237 27286 27285 +27238 27239 27286 +27239 27287 27286 +27239 27240 27288 +27239 27288 27287 +27240 27241 27288 +27241 27289 27288 +27241 27242 27290 +27241 27290 27289 +27242 27243 27290 +27243 27291 27290 +27243 27244 27292 +27243 27292 27291 +27244 27245 27292 +27245 27293 27292 +27245 27246 27294 +27245 27294 27293 +27246 27247 27294 +27247 27295 27294 +27247 27248 27296 +27247 27296 27295 +27248 27249 27296 +27249 27297 27296 +27249 27250 27298 +27249 27298 27297 +27250 27251 27298 +27251 27299 27298 +27251 27252 27300 +27251 27300 27299 +27252 27253 27300 +27253 27301 27300 +27253 27254 27302 +27253 27302 27301 +27254 27255 27302 +27255 27303 27302 +27255 27256 27304 +27255 27304 27303 +27256 27257 27304 +27257 27305 27304 +27257 27258 27306 +27257 27306 27305 +27258 27259 27306 +27259 27307 27306 +27259 27260 27308 +27259 27308 27307 +27260 27261 27308 +27261 27309 27308 +27261 27262 27310 +27261 27310 27309 +27262 27263 27310 +27263 27311 27310 +27263 27264 27312 +27263 27312 27311 +27266 27267 27313 +27267 27268 27313 +27268 27314 27313 +27268 27269 27315 +27268 27315 27314 +27269 27270 27315 +27270 27316 27315 +27270 27271 27317 +27270 27317 27316 +27271 27272 27317 +27272 27318 27317 +27272 27273 27319 +27272 27319 27318 +27273 27274 27319 +27274 27320 27319 +27274 27275 27321 +27274 27321 27320 +27275 27276 27321 +27276 27322 27321 +27276 27277 27323 +27276 27323 27322 +27277 27278 27323 +27278 27324 27323 +27278 27279 27325 +27278 27325 27324 +27279 27280 27325 +27280 27326 27325 +27280 27281 27327 +27280 27327 27326 +27281 27282 27327 +27282 27328 27327 +27282 27283 27329 +27282 27329 27328 +27283 27284 27329 +27284 27330 27329 +27284 27285 27331 +27284 27331 27330 +27285 27286 27331 +27286 27332 27331 +27286 27287 27333 +27286 27333 27332 +27287 27288 27333 +27288 27334 27333 +27288 27289 27335 +27288 27335 27334 +27289 27290 27335 +27290 27336 27335 +27290 27291 27337 +27290 27337 27336 +27291 27292 27337 +27292 27338 27337 +27292 27293 27339 +27292 27339 27338 +27293 27294 27339 +27294 27340 27339 +27294 27295 27341 +27294 27341 27340 +27295 27296 27341 +27296 27342 27341 +27296 27297 27343 +27296 27343 27342 +27297 27298 27343 +27298 27344 27343 +27298 27299 27345 +27298 27345 27344 +27299 27300 27345 +27300 27346 27345 +27300 27301 27347 +27300 27347 27346 +27301 27302 27347 +27302 27348 27347 +27302 27303 27349 +27302 27349 27348 +27303 27304 27349 +27304 27350 27349 +27304 27305 27351 +27304 27351 27350 +27305 27306 27351 +27306 27352 27351 +27306 27307 27353 +27306 27353 27352 +27307 27308 27353 +27308 27354 27353 +27308 27309 27355 +27308 27355 27354 +27309 27310 27355 +27310 27356 27355 +27310 27311 27357 +27310 27357 27356 +27311 27312 27357 +27315 27316 27358 +27316 27317 27358 +27317 27359 27358 +27317 27318 27360 +27317 27360 27359 +27318 27319 27360 +27319 27361 27360 +27319 27320 27362 +27319 27362 27361 +27320 27321 27362 +27321 27363 27362 +27321 27322 27364 +27321 27364 27363 +27322 27323 27364 +27323 27365 27364 +27323 27324 27366 +27323 27366 27365 +27324 27325 27366 +27325 27367 27366 +27325 27326 27368 +27325 27368 27367 +27326 27327 27368 +27327 27369 27368 +27327 27328 27370 +27327 27370 27369 +27328 27329 27370 +27329 27371 27370 +27329 27330 27372 +27329 27372 27371 +27330 27331 27372 +27331 27373 27372 +27331 27332 27374 +27331 27374 27373 +27332 27333 27374 +27333 27375 27374 +27333 27334 27376 +27333 27376 27375 +27334 27335 27376 +27335 27377 27376 +27335 27336 27378 +27335 27378 27377 +27336 27337 27378 +27337 27379 27378 +27337 27338 27380 +27337 27380 27379 +27338 27339 27380 +27339 27381 27380 +27339 27340 27382 +27339 27382 27381 +27340 27341 27382 +27341 27383 27382 +27341 27342 27384 +27341 27384 27383 +27342 27343 27384 +27343 27385 27384 +27343 27344 27386 +27343 27386 27385 +27344 27345 27386 +27345 27387 27386 +27345 27346 27388 +27345 27388 27387 +27346 27347 27388 +27347 27389 27388 +27347 27348 27390 +27347 27390 27389 +27348 27349 27390 +27349 27391 27390 +27349 27350 27392 +27349 27392 27391 +27350 27351 27392 +27351 27393 27392 +27351 27352 27394 +27351 27394 27393 +27352 27353 27394 +27353 27395 27394 +27353 27354 27396 +27353 27396 27395 +27354 27355 27396 +27355 27397 27396 +27355 27356 27398 +27355 27398 27397 +27356 27357 27398 +17110 17239 27399 +17239 17368 27399 +17368 27400 27399 +17368 17497 27401 +17368 27401 27400 +17497 17626 27401 +17626 27402 27401 +17626 17755 27403 +17626 27403 27402 +17755 17884 27403 +17884 27404 27403 +17884 18013 27405 +17884 27405 27404 +18013 18142 27405 +18142 27406 27405 +18142 18271 27407 +18142 27407 27406 +18271 18400 27407 +18400 27408 27407 +18400 18529 27409 +18400 27409 27408 +18529 18658 27409 +18658 27410 27409 +18658 18787 27411 +18658 27411 27410 +18787 18916 27411 +18916 27412 27411 +18916 19045 27413 +18916 27413 27412 +19045 19174 27413 +19174 27414 27413 +19174 19303 27415 +19174 27415 27414 +19303 19432 27415 +19432 27416 27415 +19432 19561 27417 +19432 27417 27416 +19561 19690 27417 +19690 27418 27417 +19690 19819 27419 +19690 27419 27418 +19819 19948 27419 +19948 27420 27419 +19948 20077 27421 +19948 27421 27420 +20077 20206 27421 +20206 27422 27421 +20206 20335 27423 +20206 27423 27422 +20335 20464 27423 +20464 27424 27423 +20464 20593 27425 +20464 27425 27424 +20593 20722 27425 +20722 27426 27425 +20722 20851 27427 +20722 27427 27426 +20851 20980 27427 +20980 27428 27427 +20980 21109 27429 +20980 27429 27428 +21109 21238 27429 +21238 27430 27429 +21238 21367 27431 +21238 27431 27430 +21367 21496 27431 +21496 27432 27431 +21496 21625 27433 +21496 27433 27432 +21625 1 27433 +1 130 27433 +27399 27400 27435 +27399 27435 27434 +27400 27401 27435 +27401 27436 27435 +27401 27402 27437 +27401 27437 27436 +27402 27403 27437 +27403 27438 27437 +27403 27404 27439 +27403 27439 27438 +27404 27405 27439 +27405 27440 27439 +27405 27406 27441 +27405 27441 27440 +27406 27407 27441 +27407 27442 27441 +27407 27408 27443 +27407 27443 27442 +27408 27409 27443 +27409 27444 27443 +27409 27410 27445 +27409 27445 27444 +27410 27411 27445 +27411 27446 27445 +27411 27412 27447 +27411 27447 27446 +27412 27413 27447 +27413 27448 27447 +27413 27414 27449 +27413 27449 27448 +27414 27415 27449 +27415 27450 27449 +27415 27416 27451 +27415 27451 27450 +27416 27417 27451 +27417 27452 27451 +27417 27418 27453 +27417 27453 27452 +27418 27419 27453 +27419 27454 27453 +27419 27420 27455 +27419 27455 27454 +27420 27421 27455 +27421 27456 27455 +27421 27422 27457 +27421 27457 27456 +27422 27423 27457 +27423 27458 27457 +27423 27424 27459 +27423 27459 27458 +27424 27425 27459 +27425 27460 27459 +27425 27426 27461 +27425 27461 27460 +27426 27427 27461 +27427 27462 27461 +27427 27428 27463 +27427 27463 27462 +27428 27429 27463 +27429 27464 27463 +27429 27430 27465 +27429 27465 27464 +27430 27431 27465 +27431 27466 27465 +27431 27432 27467 +27431 27467 27466 +27432 27433 27467 +27433 27468 27467 +27433 130 259 +27433 259 27468 +27434 27435 27469 +27435 27470 27469 +27435 27436 27471 +27435 27471 27470 +27436 27437 27471 +27437 27472 27471 +27437 27438 27473 +27437 27473 27472 +27438 27439 27473 +27439 27474 27473 +27439 27440 27475 +27439 27475 27474 +27440 27441 27475 +27441 27476 27475 +27441 27442 27477 +27441 27477 27476 +27442 27443 27477 +27443 27478 27477 +27443 27444 27479 +27443 27479 27478 +27444 27445 27479 +27445 27480 27479 +27445 27446 27481 +27445 27481 27480 +27446 27447 27481 +27447 27482 27481 +27447 27448 27483 +27447 27483 27482 +27448 27449 27483 +27449 27484 27483 +27449 27450 27485 +27449 27485 27484 +27450 27451 27485 +27451 27486 27485 +27451 27452 27487 +27451 27487 27486 +27452 27453 27487 +27453 27488 27487 +27453 27454 27489 +27453 27489 27488 +27454 27455 27489 +27455 27490 27489 +27455 27456 27491 +27455 27491 27490 +27456 27457 27491 +27457 27492 27491 +27457 27458 27493 +27457 27493 27492 +27458 27459 27493 +27459 27494 27493 +27459 27460 27495 +27459 27495 27494 +27460 27461 27495 +27461 27496 27495 +27461 27462 27497 +27461 27497 27496 +27462 27463 27497 +27463 27498 27497 +27463 27464 27499 +27463 27499 27498 +27464 27465 27499 +27465 27500 27499 +27465 27466 27501 +27465 27501 27500 +27466 27467 27501 +27467 27502 27501 +27467 27468 27503 +27467 27503 27502 +27468 259 27503 +259 388 27503 +27469 27470 27505 +27469 27505 27504 +27470 27471 27505 +27471 27506 27505 +27471 27472 27507 +27471 27507 27506 +27472 27473 27507 +27473 27508 27507 +27473 27474 27509 +27473 27509 27508 +27474 27475 27509 +27475 27510 27509 +27475 27476 27511 +27475 27511 27510 +27476 27477 27511 +27477 27512 27511 +27477 27478 27513 +27477 27513 27512 +27478 27479 27513 +27479 27514 27513 +27479 27480 27515 +27479 27515 27514 +27480 27481 27515 +27481 27516 27515 +27481 27482 27517 +27481 27517 27516 +27482 27483 27517 +27483 27518 27517 +27483 27484 27519 +27483 27519 27518 +27484 27485 27519 +27485 27520 27519 +27485 27486 27521 +27485 27521 27520 +27486 27487 27521 +27487 27522 27521 +27487 27488 27523 +27487 27523 27522 +27488 27489 27523 +27489 27524 27523 +27489 27490 27525 +27489 27525 27524 +27490 27491 27525 +27491 27526 27525 +27491 27492 27527 +27491 27527 27526 +27492 27493 27527 +27493 27528 27527 +27493 27494 27529 +27493 27529 27528 +27494 27495 27529 +27495 27530 27529 +27495 27496 27531 +27495 27531 27530 +27496 27497 27531 +27497 27532 27531 +27497 27498 27533 +27497 27533 27532 +27498 27499 27533 +27499 27534 27533 +27499 27500 27535 +27499 27535 27534 +27500 27501 27535 +27501 27536 27535 +27501 27502 27537 +27501 27537 27536 +27502 27503 27537 +27503 27538 27537 +27503 388 517 +27503 517 27538 +27504 27505 27539 +27505 27540 27539 +27505 27506 27541 +27505 27541 27540 +27506 27507 27541 +27507 27542 27541 +27507 27508 27543 +27507 27543 27542 +27508 27509 27543 +27509 27544 27543 +27509 27510 27545 +27509 27545 27544 +27510 27511 27545 +27511 27546 27545 +27511 27512 27547 +27511 27547 27546 +27512 27513 27547 +27513 27548 27547 +27513 27514 27549 +27513 27549 27548 +27514 27515 27549 +27515 27550 27549 +27515 27516 27551 +27515 27551 27550 +27516 27517 27551 +27517 27552 27551 +27517 27518 27553 +27517 27553 27552 +27518 27519 27553 +27519 27554 27553 +27519 27520 27555 +27519 27555 27554 +27520 27521 27555 +27521 27556 27555 +27521 27522 27557 +27521 27557 27556 +27522 27523 27557 +27523 27558 27557 +27523 27524 27559 +27523 27559 27558 +27524 27525 27559 +27525 27560 27559 +27525 27526 27561 +27525 27561 27560 +27526 27527 27561 +27527 27562 27561 +27527 27528 27563 +27527 27563 27562 +27528 27529 27563 +27529 27564 27563 +27529 27530 27565 +27529 27565 27564 +27530 27531 27565 +27531 27566 27565 +27531 27532 27567 +27531 27567 27566 +27532 27533 27567 +27533 27568 27567 +27533 27534 27569 +27533 27569 27568 +27534 27535 27569 +27535 27570 27569 +27535 27536 27571 +27535 27571 27570 +27536 27537 27571 +27537 27572 27571 +27537 27538 27573 +27537 27573 27572 +27538 517 27573 +517 646 27573 +27539 27540 27575 +27539 27575 27574 +27540 27541 27575 +27541 27576 27575 +27541 27542 27577 +27541 27577 27576 +27542 27543 27577 +27543 27578 27577 +27543 27544 27579 +27543 27579 27578 +27544 27545 27579 +27545 27580 27579 +27545 27546 27581 +27545 27581 27580 +27546 27547 27581 +27547 27582 27581 +27547 27548 27583 +27547 27583 27582 +27548 27549 27583 +27549 27584 27583 +27549 27550 27585 +27549 27585 27584 +27550 27551 27585 +27551 27586 27585 +27551 27552 27587 +27551 27587 27586 +27552 27553 27587 +27553 27588 27587 +27553 27554 27589 +27553 27589 27588 +27554 27555 27589 +27555 27590 27589 +27555 27556 27591 +27555 27591 27590 +27556 27557 27591 +27557 27592 27591 +27557 27558 27593 +27557 27593 27592 +27558 27559 27593 +27559 27594 27593 +27559 27560 27595 +27559 27595 27594 +27560 27561 27595 +27561 27596 27595 +27561 27562 27597 +27561 27597 27596 +27562 27563 27597 +27563 27598 27597 +27563 27564 27599 +27563 27599 27598 +27564 27565 27599 +27565 27600 27599 +27565 27566 27601 +27565 27601 27600 +27566 27567 27601 +27567 27602 27601 +27567 27568 27603 +27567 27603 27602 +27568 27569 27603 +27569 27604 27603 +27569 27570 27605 +27569 27605 27604 +27570 27571 27605 +27571 27606 27605 +27571 27572 27607 +27571 27607 27606 +27572 27573 27607 +27573 27608 27607 +27573 646 775 +27573 775 27608 +27574 27575 27609 +27575 27610 27609 +27575 27576 27611 +27575 27611 27610 +27576 27577 27611 +27577 27612 27611 +27577 27578 27613 +27577 27613 27612 +27578 27579 27613 +27579 27614 27613 +27579 27580 27615 +27579 27615 27614 +27580 27581 27615 +27581 27616 27615 +27581 27582 27617 +27581 27617 27616 +27582 27583 27617 +27583 27618 27617 +27583 27584 27619 +27583 27619 27618 +27584 27585 27619 +27585 27620 27619 +27585 27586 27621 +27585 27621 27620 +27586 27587 27621 +27587 27622 27621 +27587 27588 27623 +27587 27623 27622 +27588 27589 27623 +27589 27624 27623 +27589 27590 27625 +27589 27625 27624 +27590 27591 27625 +27591 27626 27625 +27591 27592 27627 +27591 27627 27626 +27592 27593 27627 +27593 27628 27627 +27593 27594 27629 +27593 27629 27628 +27594 27595 27629 +27595 27630 27629 +27595 27596 27631 +27595 27631 27630 +27596 27597 27631 +27597 27632 27631 +27597 27598 27633 +27597 27633 27632 +27598 27599 27633 +27599 27634 27633 +27599 27600 27635 +27599 27635 27634 +27600 27601 27635 +27601 27636 27635 +27601 27602 27637 +27601 27637 27636 +27602 27603 27637 +27603 27638 27637 +27603 27604 27639 +27603 27639 27638 +27604 27605 27639 +27605 27640 27639 +27605 27606 27641 +27605 27641 27640 +27606 27607 27641 +27607 27642 27641 +27607 27608 27643 +27607 27643 27642 +27608 775 27643 +775 904 27643 +27609 27610 27644 +27610 27611 27644 +27611 27645 27644 +27611 27612 27646 +27611 27646 27645 +27612 27613 27646 +27613 27647 27646 +27613 27614 27648 +27613 27648 27647 +27614 27615 27648 +27615 27649 27648 +27615 27616 27650 +27615 27650 27649 +27616 27617 27650 +27617 27651 27650 +27617 27618 27652 +27617 27652 27651 +27618 27619 27652 +27619 27653 27652 +27619 27620 27654 +27619 27654 27653 +27620 27621 27654 +27621 27655 27654 +27621 27622 27656 +27621 27656 27655 +27622 27623 27656 +27623 27657 27656 +27623 27624 27658 +27623 27658 27657 +27624 27625 27658 +27625 27659 27658 +27625 27626 27660 +27625 27660 27659 +27626 27627 27660 +27627 27661 27660 +27627 27628 27662 +27627 27662 27661 +27628 27629 27662 +27629 27663 27662 +27629 27630 27664 +27629 27664 27663 +27630 27631 27664 +27631 27665 27664 +27631 27632 27666 +27631 27666 27665 +27632 27633 27666 +27633 27667 27666 +27633 27634 27668 +27633 27668 27667 +27634 27635 27668 +27635 27669 27668 +27635 27636 27670 +27635 27670 27669 +27636 27637 27670 +27637 27671 27670 +27637 27638 27672 +27637 27672 27671 +27638 27639 27672 +27639 27673 27672 +27639 27640 27674 +27639 27674 27673 +27640 27641 27674 +27641 27675 27674 +27641 27642 27676 +27641 27676 27675 +27642 27643 27676 +27643 27677 27676 +27643 904 1033 +27643 1033 27677 +27644 27645 27679 +27644 27679 27678 +27645 27646 27679 +27646 27680 27679 +27646 27647 27681 +27646 27681 27680 +27647 27648 27681 +27648 27682 27681 +27648 27649 27683 +27648 27683 27682 +27649 27650 27683 +27650 27684 27683 +27650 27651 27685 +27650 27685 27684 +27651 27652 27685 +27652 27686 27685 +27652 27653 27687 +27652 27687 27686 +27653 27654 27687 +27654 27688 27687 +27654 27655 27689 +27654 27689 27688 +27655 27656 27689 +27656 27690 27689 +27656 27657 27691 +27656 27691 27690 +27657 27658 27691 +27658 27692 27691 +27658 27659 27693 +27658 27693 27692 +27659 27660 27693 +27660 27694 27693 +27660 27661 27695 +27660 27695 27694 +27661 27662 27695 +27662 27696 27695 +27662 27663 27697 +27662 27697 27696 +27663 27664 27697 +27664 27698 27697 +27664 27665 27699 +27664 27699 27698 +27665 27666 27699 +27666 27700 27699 +27666 27667 27701 +27666 27701 27700 +27667 27668 27701 +27668 27702 27701 +27668 27669 27703 +27668 27703 27702 +27669 27670 27703 +27670 27704 27703 +27670 27671 27705 +27670 27705 27704 +27671 27672 27705 +27672 27706 27705 +27672 27673 27707 +27672 27707 27706 +27673 27674 27707 +27674 27708 27707 +27674 27675 27709 +27674 27709 27708 +27675 27676 27709 +27676 27710 27709 +27676 27677 27711 +27676 27711 27710 +27677 1033 27711 +1033 1162 27711 +27678 27679 27712 +27679 27713 27712 +27679 27680 27714 +27679 27714 27713 +27680 27681 27714 +27681 27715 27714 +27681 27682 27716 +27681 27716 27715 +27682 27683 27716 +27683 27717 27716 +27683 27684 27718 +27683 27718 27717 +27684 27685 27718 +27685 27719 27718 +27685 27686 27720 +27685 27720 27719 +27686 27687 27720 +27687 27721 27720 +27687 27688 27722 +27687 27722 27721 +27688 27689 27722 +27689 27723 27722 +27689 27690 27724 +27689 27724 27723 +27690 27691 27724 +27691 27725 27724 +27691 27692 27726 +27691 27726 27725 +27692 27693 27726 +27693 27727 27726 +27693 27694 27728 +27693 27728 27727 +27694 27695 27728 +27695 27729 27728 +27695 27696 27730 +27695 27730 27729 +27696 27697 27730 +27697 27731 27730 +27697 27698 27732 +27697 27732 27731 +27698 27699 27732 +27699 27733 27732 +27699 27700 27734 +27699 27734 27733 +27700 27701 27734 +27701 27735 27734 +27701 27702 27736 +27701 27736 27735 +27702 27703 27736 +27703 27737 27736 +27703 27704 27738 +27703 27738 27737 +27704 27705 27738 +27705 27739 27738 +27705 27706 27740 +27705 27740 27739 +27706 27707 27740 +27707 27741 27740 +27707 27708 27742 +27707 27742 27741 +27708 27709 27742 +27709 27743 27742 +27709 27710 27744 +27709 27744 27743 +27710 27711 27744 +27711 27745 27744 +27711 1162 1291 +27711 1291 27745 +27712 27713 27746 +27713 27714 27746 +27714 27747 27746 +27714 27715 27748 +27714 27748 27747 +27715 27716 27748 +27716 27749 27748 +27716 27717 27750 +27716 27750 27749 +27717 27718 27750 +27718 27751 27750 +27718 27719 27752 +27718 27752 27751 +27719 27720 27752 +27720 27753 27752 +27720 27721 27754 +27720 27754 27753 +27721 27722 27754 +27722 27755 27754 +27722 27723 27756 +27722 27756 27755 +27723 27724 27756 +27724 27757 27756 +27724 27725 27758 +27724 27758 27757 +27725 27726 27758 +27726 27759 27758 +27726 27727 27760 +27726 27760 27759 +27727 27728 27760 +27728 27761 27760 +27728 27729 27762 +27728 27762 27761 +27729 27730 27762 +27730 27763 27762 +27730 27731 27764 +27730 27764 27763 +27731 27732 27764 +27732 27765 27764 +27732 27733 27766 +27732 27766 27765 +27733 27734 27766 +27734 27767 27766 +27734 27735 27768 +27734 27768 27767 +27735 27736 27768 +27736 27769 27768 +27736 27737 27770 +27736 27770 27769 +27737 27738 27770 +27738 27771 27770 +27738 27739 27772 +27738 27772 27771 +27739 27740 27772 +27740 27773 27772 +27740 27741 27774 +27740 27774 27773 +27741 27742 27774 +27742 27775 27774 +27742 27743 27776 +27742 27776 27775 +27743 27744 27776 +27744 27777 27776 +27744 27745 27778 +27744 27778 27777 +27745 1291 27778 +1291 1420 27778 +27746 27747 27779 +27747 27748 27779 +27748 27780 27779 +27748 27749 27781 +27748 27781 27780 +27749 27750 27781 +27750 27782 27781 +27750 27751 27783 +27750 27783 27782 +27751 27752 27783 +27752 27784 27783 +27752 27753 27785 +27752 27785 27784 +27753 27754 27785 +27754 27786 27785 +27754 27755 27787 +27754 27787 27786 +27755 27756 27787 +27756 27788 27787 +27756 27757 27789 +27756 27789 27788 +27757 27758 27789 +27758 27790 27789 +27758 27759 27791 +27758 27791 27790 +27759 27760 27791 +27760 27792 27791 +27760 27761 27793 +27760 27793 27792 +27761 27762 27793 +27762 27794 27793 +27762 27763 27795 +27762 27795 27794 +27763 27764 27795 +27764 27796 27795 +27764 27765 27797 +27764 27797 27796 +27765 27766 27797 +27766 27798 27797 +27766 27767 27799 +27766 27799 27798 +27767 27768 27799 +27768 27800 27799 +27768 27769 27801 +27768 27801 27800 +27769 27770 27801 +27770 27802 27801 +27770 27771 27803 +27770 27803 27802 +27771 27772 27803 +27772 27804 27803 +27772 27773 27805 +27772 27805 27804 +27773 27774 27805 +27774 27806 27805 +27774 27775 27807 +27774 27807 27806 +27775 27776 27807 +27776 27808 27807 +27776 27777 27809 +27776 27809 27808 +27777 27778 27809 +27778 27810 27809 +27778 1420 1549 +27778 1549 27810 +27779 27780 27812 +27779 27812 27811 +27780 27781 27812 +27781 27813 27812 +27781 27782 27814 +27781 27814 27813 +27782 27783 27814 +27783 27815 27814 +27783 27784 27816 +27783 27816 27815 +27784 27785 27816 +27785 27817 27816 +27785 27786 27818 +27785 27818 27817 +27786 27787 27818 +27787 27819 27818 +27787 27788 27820 +27787 27820 27819 +27788 27789 27820 +27789 27821 27820 +27789 27790 27822 +27789 27822 27821 +27790 27791 27822 +27791 27823 27822 +27791 27792 27824 +27791 27824 27823 +27792 27793 27824 +27793 27825 27824 +27793 27794 27826 +27793 27826 27825 +27794 27795 27826 +27795 27827 27826 +27795 27796 27828 +27795 27828 27827 +27796 27797 27828 +27797 27829 27828 +27797 27798 27830 +27797 27830 27829 +27798 27799 27830 +27799 27831 27830 +27799 27800 27832 +27799 27832 27831 +27800 27801 27832 +27801 27833 27832 +27801 27802 27834 +27801 27834 27833 +27802 27803 27834 +27803 27835 27834 +27803 27804 27836 +27803 27836 27835 +27804 27805 27836 +27805 27837 27836 +27805 27806 27838 +27805 27838 27837 +27806 27807 27838 +27807 27839 27838 +27807 27808 27840 +27807 27840 27839 +27808 27809 27840 +27809 27841 27840 +27809 27810 27842 +27809 27842 27841 +27810 1549 27842 +1549 1678 27842 +27811 27812 27843 +27812 27844 27843 +27812 27813 27845 +27812 27845 27844 +27813 27814 27845 +27814 27846 27845 +27814 27815 27847 +27814 27847 27846 +27815 27816 27847 +27816 27848 27847 +27816 27817 27849 +27816 27849 27848 +27817 27818 27849 +27818 27850 27849 +27818 27819 27851 +27818 27851 27850 +27819 27820 27851 +27820 27852 27851 +27820 27821 27853 +27820 27853 27852 +27821 27822 27853 +27822 27854 27853 +27822 27823 27855 +27822 27855 27854 +27823 27824 27855 +27824 27856 27855 +27824 27825 27857 +27824 27857 27856 +27825 27826 27857 +27826 27858 27857 +27826 27827 27859 +27826 27859 27858 +27827 27828 27859 +27828 27860 27859 +27828 27829 27861 +27828 27861 27860 +27829 27830 27861 +27830 27862 27861 +27830 27831 27863 +27830 27863 27862 +27831 27832 27863 +27832 27864 27863 +27832 27833 27865 +27832 27865 27864 +27833 27834 27865 +27834 27866 27865 +27834 27835 27867 +27834 27867 27866 +27835 27836 27867 +27836 27868 27867 +27836 27837 27869 +27836 27869 27868 +27837 27838 27869 +27838 27870 27869 +27838 27839 27871 +27838 27871 27870 +27839 27840 27871 +27840 27872 27871 +27840 27841 27873 +27840 27873 27872 +27841 27842 27873 +27842 27874 27873 +27842 1678 1807 +27842 1807 27874 +27843 27844 27875 +27844 27845 27875 +27845 27876 27875 +27845 27846 27877 +27845 27877 27876 +27846 27847 27877 +27847 27878 27877 +27847 27848 27879 +27847 27879 27878 +27848 27849 27879 +27849 27880 27879 +27849 27850 27881 +27849 27881 27880 +27850 27851 27881 +27851 27882 27881 +27851 27852 27883 +27851 27883 27882 +27852 27853 27883 +27853 27884 27883 +27853 27854 27885 +27853 27885 27884 +27854 27855 27885 +27855 27886 27885 +27855 27856 27887 +27855 27887 27886 +27856 27857 27887 +27857 27888 27887 +27857 27858 27889 +27857 27889 27888 +27858 27859 27889 +27859 27890 27889 +27859 27860 27891 +27859 27891 27890 +27860 27861 27891 +27861 27892 27891 +27861 27862 27893 +27861 27893 27892 +27862 27863 27893 +27863 27894 27893 +27863 27864 27895 +27863 27895 27894 +27864 27865 27895 +27865 27896 27895 +27865 27866 27897 +27865 27897 27896 +27866 27867 27897 +27867 27898 27897 +27867 27868 27899 +27867 27899 27898 +27868 27869 27899 +27869 27900 27899 +27869 27870 27901 +27869 27901 27900 +27870 27871 27901 +27871 27902 27901 +27871 27872 27903 +27871 27903 27902 +27872 27873 27903 +27873 27904 27903 +27873 27874 27905 +27873 27905 27904 +27874 1807 27905 +1807 1936 27905 +27875 27876 27907 +27875 27907 27906 +27876 27877 27907 +27877 27908 27907 +27877 27878 27909 +27877 27909 27908 +27878 27879 27909 +27879 27910 27909 +27879 27880 27911 +27879 27911 27910 +27880 27881 27911 +27881 27912 27911 +27881 27882 27913 +27881 27913 27912 +27882 27883 27913 +27883 27914 27913 +27883 27884 27915 +27883 27915 27914 +27884 27885 27915 +27885 27916 27915 +27885 27886 27917 +27885 27917 27916 +27886 27887 27917 +27887 27918 27917 +27887 27888 27919 +27887 27919 27918 +27888 27889 27919 +27889 27920 27919 +27889 27890 27921 +27889 27921 27920 +27890 27891 27921 +27891 27922 27921 +27891 27892 27923 +27891 27923 27922 +27892 27893 27923 +27893 27924 27923 +27893 27894 27925 +27893 27925 27924 +27894 27895 27925 +27895 27926 27925 +27895 27896 27927 +27895 27927 27926 +27896 27897 27927 +27897 27928 27927 +27897 27898 27929 +27897 27929 27928 +27898 27899 27929 +27899 27930 27929 +27899 27900 27931 +27899 27931 27930 +27900 27901 27931 +27901 27932 27931 +27901 27902 27933 +27901 27933 27932 +27902 27903 27933 +27903 27934 27933 +27903 27904 27935 +27903 27935 27934 +27904 27905 27935 +27905 27936 27935 +27905 1936 2065 +27905 2065 27936 +27906 27907 27937 +27907 27938 27937 +27907 27908 27939 +27907 27939 27938 +27908 27909 27939 +27909 27940 27939 +27909 27910 27941 +27909 27941 27940 +27910 27911 27941 +27911 27942 27941 +27911 27912 27943 +27911 27943 27942 +27912 27913 27943 +27913 27944 27943 +27913 27914 27945 +27913 27945 27944 +27914 27915 27945 +27915 27946 27945 +27915 27916 27947 +27915 27947 27946 +27916 27917 27947 +27917 27948 27947 +27917 27918 27949 +27917 27949 27948 +27918 27919 27949 +27919 27950 27949 +27919 27920 27951 +27919 27951 27950 +27920 27921 27951 +27921 27952 27951 +27921 27922 27953 +27921 27953 27952 +27922 27923 27953 +27923 27954 27953 +27923 27924 27955 +27923 27955 27954 +27924 27925 27955 +27925 27956 27955 +27925 27926 27957 +27925 27957 27956 +27926 27927 27957 +27927 27958 27957 +27927 27928 27959 +27927 27959 27958 +27928 27929 27959 +27929 27960 27959 +27929 27930 27961 +27929 27961 27960 +27930 27931 27961 +27931 27962 27961 +27931 27932 27963 +27931 27963 27962 +27932 27933 27963 +27933 27964 27963 +27933 27934 27965 +27933 27965 27964 +27934 27935 27965 +27935 27966 27965 +27935 27936 27967 +27935 27967 27966 +27936 2065 27967 +2065 2194 27967 +27937 27938 27969 +27937 27969 27968 +27938 27939 27969 +27939 27970 27969 +27939 27940 27971 +27939 27971 27970 +27940 27941 27971 +27941 27972 27971 +27941 27942 27973 +27941 27973 27972 +27942 27943 27973 +27943 27974 27973 +27943 27944 27975 +27943 27975 27974 +27944 27945 27975 +27945 27976 27975 +27945 27946 27977 +27945 27977 27976 +27946 27947 27977 +27947 27978 27977 +27947 27948 27979 +27947 27979 27978 +27948 27949 27979 +27949 27980 27979 +27949 27950 27981 +27949 27981 27980 +27950 27951 27981 +27951 27982 27981 +27951 27952 27983 +27951 27983 27982 +27952 27953 27983 +27953 27984 27983 +27953 27954 27985 +27953 27985 27984 +27954 27955 27985 +27955 27986 27985 +27955 27956 27987 +27955 27987 27986 +27956 27957 27987 +27957 27988 27987 +27957 27958 27989 +27957 27989 27988 +27958 27959 27989 +27959 27990 27989 +27959 27960 27991 +27959 27991 27990 +27960 27961 27991 +27961 27992 27991 +27961 27962 27993 +27961 27993 27992 +27962 27963 27993 +27963 27994 27993 +27963 27964 27995 +27963 27995 27994 +27964 27965 27995 +27965 27996 27995 +27965 27966 27997 +27965 27997 27996 +27966 27967 27997 +27967 27998 27997 +27967 2194 2323 +27967 2323 27998 +27968 27969 27999 +27969 28000 27999 +27969 27970 28001 +27969 28001 28000 +27970 27971 28001 +27971 28002 28001 +27971 27972 28003 +27971 28003 28002 +27972 27973 28003 +27973 28004 28003 +27973 27974 28005 +27973 28005 28004 +27974 27975 28005 +27975 28006 28005 +27975 27976 28007 +27975 28007 28006 +27976 27977 28007 +27977 28008 28007 +27977 27978 28009 +27977 28009 28008 +27978 27979 28009 +27979 28010 28009 +27979 27980 28011 +27979 28011 28010 +27980 27981 28011 +27981 28012 28011 +27981 27982 28013 +27981 28013 28012 +27982 27983 28013 +27983 28014 28013 +27983 27984 28015 +27983 28015 28014 +27984 27985 28015 +27985 28016 28015 +27985 27986 28017 +27985 28017 28016 +27986 27987 28017 +27987 28018 28017 +27987 27988 28019 +27987 28019 28018 +27988 27989 28019 +27989 28020 28019 +27989 27990 28021 +27989 28021 28020 +27990 27991 28021 +27991 28022 28021 +27991 27992 28023 +27991 28023 28022 +27992 27993 28023 +27993 28024 28023 +27993 27994 28025 +27993 28025 28024 +27994 27995 28025 +27995 28026 28025 +27995 27996 28027 +27995 28027 28026 +27996 27997 28027 +27997 28028 28027 +27997 27998 28029 +27997 28029 28028 +27998 2323 28029 +2323 2452 28029 +27999 28000 28031 +27999 28031 28030 +28000 28001 28031 +28001 28032 28031 +28001 28002 28033 +28001 28033 28032 +28002 28003 28033 +28003 28034 28033 +28003 28004 28035 +28003 28035 28034 +28004 28005 28035 +28005 28036 28035 +28005 28006 28037 +28005 28037 28036 +28006 28007 28037 +28007 28038 28037 +28007 28008 28039 +28007 28039 28038 +28008 28009 28039 +28009 28040 28039 +28009 28010 28041 +28009 28041 28040 +28010 28011 28041 +28011 28042 28041 +28011 28012 28043 +28011 28043 28042 +28012 28013 28043 +28013 28044 28043 +28013 28014 28045 +28013 28045 28044 +28014 28015 28045 +28015 28046 28045 +28015 28016 28047 +28015 28047 28046 +28016 28017 28047 +28017 28048 28047 +28017 28018 28049 +28017 28049 28048 +28018 28019 28049 +28019 28050 28049 +28019 28020 28051 +28019 28051 28050 +28020 28021 28051 +28021 28052 28051 +28021 28022 28053 +28021 28053 28052 +28022 28023 28053 +28023 28054 28053 +28023 28024 28055 +28023 28055 28054 +28024 28025 28055 +28025 28056 28055 +28025 28026 28057 +28025 28057 28056 +28026 28027 28057 +28027 28058 28057 +28027 28028 28059 +28027 28059 28058 +28028 28029 28059 +28029 28060 28059 +28029 2452 2581 +28029 2581 28060 +28030 28031 28061 +28031 28062 28061 +28031 28032 28063 +28031 28063 28062 +28032 28033 28063 +28033 28064 28063 +28033 28034 28065 +28033 28065 28064 +28034 28035 28065 +28035 28066 28065 +28035 28036 28067 +28035 28067 28066 +28036 28037 28067 +28037 28068 28067 +28037 28038 28069 +28037 28069 28068 +28038 28039 28069 +28039 28070 28069 +28039 28040 28071 +28039 28071 28070 +28040 28041 28071 +28041 28072 28071 +28041 28042 28073 +28041 28073 28072 +28042 28043 28073 +28043 28074 28073 +28043 28044 28075 +28043 28075 28074 +28044 28045 28075 +28045 28076 28075 +28045 28046 28077 +28045 28077 28076 +28046 28047 28077 +28047 28078 28077 +28047 28048 28079 +28047 28079 28078 +28048 28049 28079 +28049 28080 28079 +28049 28050 28081 +28049 28081 28080 +28050 28051 28081 +28051 28082 28081 +28051 28052 28083 +28051 28083 28082 +28052 28053 28083 +28053 28084 28083 +28053 28054 28085 +28053 28085 28084 +28054 28055 28085 +28055 28086 28085 +28055 28056 28087 +28055 28087 28086 +28056 28057 28087 +28057 28088 28087 +28057 28058 28089 +28057 28089 28088 +28058 28059 28089 +28059 28090 28089 +28059 28060 28091 +28059 28091 28090 +28060 2581 28091 +2581 2710 28091 +28061 28062 28093 +28061 28093 28092 +28062 28063 28093 +28063 28094 28093 +28063 28064 28095 +28063 28095 28094 +28064 28065 28095 +28065 28096 28095 +28065 28066 28097 +28065 28097 28096 +28066 28067 28097 +28067 28098 28097 +28067 28068 28099 +28067 28099 28098 +28068 28069 28099 +28069 28100 28099 +28069 28070 28101 +28069 28101 28100 +28070 28071 28101 +28071 28102 28101 +28071 28072 28103 +28071 28103 28102 +28072 28073 28103 +28073 28104 28103 +28073 28074 28105 +28073 28105 28104 +28074 28075 28105 +28075 28106 28105 +28075 28076 28107 +28075 28107 28106 +28076 28077 28107 +28077 28108 28107 +28077 28078 28109 +28077 28109 28108 +28078 28079 28109 +28079 28110 28109 +28079 28080 28111 +28079 28111 28110 +28080 28081 28111 +28081 28112 28111 +28081 28082 28113 +28081 28113 28112 +28082 28083 28113 +28083 28114 28113 +28083 28084 28115 +28083 28115 28114 +28084 28085 28115 +28085 28116 28115 +28085 28086 28117 +28085 28117 28116 +28086 28087 28117 +28087 28118 28117 +28087 28088 28119 +28087 28119 28118 +28088 28089 28119 +28089 28120 28119 +28089 28090 28121 +28089 28121 28120 +28090 28091 28121 +28091 28122 28121 +28091 2710 2839 +28091 2839 28122 +28092 28093 28123 +28093 28124 28123 +28093 28094 28125 +28093 28125 28124 +28094 28095 28125 +28095 28126 28125 +28095 28096 28127 +28095 28127 28126 +28096 28097 28127 +28097 28128 28127 +28097 28098 28129 +28097 28129 28128 +28098 28099 28129 +28099 28130 28129 +28099 28100 28131 +28099 28131 28130 +28100 28101 28131 +28101 28132 28131 +28101 28102 28133 +28101 28133 28132 +28102 28103 28133 +28103 28134 28133 +28103 28104 28135 +28103 28135 28134 +28104 28105 28135 +28105 28136 28135 +28105 28106 28137 +28105 28137 28136 +28106 28107 28137 +28107 28138 28137 +28107 28108 28139 +28107 28139 28138 +28108 28109 28139 +28109 28140 28139 +28109 28110 28141 +28109 28141 28140 +28110 28111 28141 +28111 28142 28141 +28111 28112 28143 +28111 28143 28142 +28112 28113 28143 +28113 28144 28143 +28113 28114 28145 +28113 28145 28144 +28114 28115 28145 +28115 28146 28145 +28115 28116 28147 +28115 28147 28146 +28116 28117 28147 +28117 28148 28147 +28117 28118 28149 +28117 28149 28148 +28118 28119 28149 +28119 28150 28149 +28119 28120 28151 +28119 28151 28150 +28120 28121 28151 +28121 28152 28151 +28121 28122 28153 +28121 28153 28152 +28122 2839 28153 +2839 2968 28153 +28123 28124 28155 +28123 28155 28154 +28124 28125 28155 +28125 28156 28155 +28125 28126 28157 +28125 28157 28156 +28126 28127 28157 +28127 28158 28157 +28127 28128 28159 +28127 28159 28158 +28128 28129 28159 +28129 28160 28159 +28129 28130 28161 +28129 28161 28160 +28130 28131 28161 +28131 28162 28161 +28131 28132 28163 +28131 28163 28162 +28132 28133 28163 +28133 28164 28163 +28133 28134 28165 +28133 28165 28164 +28134 28135 28165 +28135 28166 28165 +28135 28136 28167 +28135 28167 28166 +28136 28137 28167 +28137 28168 28167 +28137 28138 28169 +28137 28169 28168 +28138 28139 28169 +28139 28170 28169 +28139 28140 28171 +28139 28171 28170 +28140 28141 28171 +28141 28172 28171 +28141 28142 28173 +28141 28173 28172 +28142 28143 28173 +28143 28174 28173 +28143 28144 28175 +28143 28175 28174 +28144 28145 28175 +28145 28176 28175 +28145 28146 28177 +28145 28177 28176 +28146 28147 28177 +28147 28178 28177 +28147 28148 28179 +28147 28179 28178 +28148 28149 28179 +28149 28180 28179 +28149 28150 28181 +28149 28181 28180 +28150 28151 28181 +28151 28182 28181 +28151 28152 28183 +28151 28183 28182 +28152 28153 28183 +28153 28184 28183 +28153 2968 3097 +28153 3097 28184 +28154 28155 28185 +28155 28186 28185 +28155 28156 28187 +28155 28187 28186 +28156 28157 28187 +28157 28188 28187 +28157 28158 28189 +28157 28189 28188 +28158 28159 28189 +28159 28190 28189 +28159 28160 28191 +28159 28191 28190 +28160 28161 28191 +28161 28192 28191 +28161 28162 28193 +28161 28193 28192 +28162 28163 28193 +28163 28194 28193 +28163 28164 28195 +28163 28195 28194 +28164 28165 28195 +28165 28196 28195 +28165 28166 28197 +28165 28197 28196 +28166 28167 28197 +28167 28198 28197 +28167 28168 28199 +28167 28199 28198 +28168 28169 28199 +28169 28200 28199 +28169 28170 28201 +28169 28201 28200 +28170 28171 28201 +28171 28202 28201 +28171 28172 28203 +28171 28203 28202 +28172 28173 28203 +28173 28204 28203 +28173 28174 28205 +28173 28205 28204 +28174 28175 28205 +28175 28206 28205 +28175 28176 28207 +28175 28207 28206 +28176 28177 28207 +28177 28208 28207 +28177 28178 28209 +28177 28209 28208 +28178 28179 28209 +28179 28210 28209 +28179 28180 28211 +28179 28211 28210 +28180 28181 28211 +28181 28212 28211 +28181 28182 28213 +28181 28213 28212 +28182 28183 28213 +28183 28214 28213 +28183 28184 28215 +28183 28215 28214 +28184 3097 28215 +3097 3226 28215 +28185 28186 28216 +28186 28187 28216 +28187 28217 28216 +28187 28188 28218 +28187 28218 28217 +28188 28189 28218 +28189 28219 28218 +28189 28190 28220 +28189 28220 28219 +28190 28191 28220 +28191 28221 28220 +28191 28192 28222 +28191 28222 28221 +28192 28193 28222 +28193 28223 28222 +28193 28194 28224 +28193 28224 28223 +28194 28195 28224 +28195 28225 28224 +28195 28196 28226 +28195 28226 28225 +28196 28197 28226 +28197 28227 28226 +28197 28198 28228 +28197 28228 28227 +28198 28199 28228 +28199 28229 28228 +28199 28200 28230 +28199 28230 28229 +28200 28201 28230 +28201 28231 28230 +28201 28202 28232 +28201 28232 28231 +28202 28203 28232 +28203 28233 28232 +28203 28204 28234 +28203 28234 28233 +28204 28205 28234 +28205 28235 28234 +28205 28206 28236 +28205 28236 28235 +28206 28207 28236 +28207 28237 28236 +28207 28208 28238 +28207 28238 28237 +28208 28209 28238 +28209 28239 28238 +28209 28210 28240 +28209 28240 28239 +28210 28211 28240 +28211 28241 28240 +28211 28212 28242 +28211 28242 28241 +28212 28213 28242 +28213 28243 28242 +28213 28214 28244 +28213 28244 28243 +28214 28215 28244 +28215 28245 28244 +28215 3226 3355 +28215 3355 28245 +28216 28217 28247 +28216 28247 28246 +28217 28218 28247 +28218 28248 28247 +28218 28219 28249 +28218 28249 28248 +28219 28220 28249 +28220 28250 28249 +28220 28221 28251 +28220 28251 28250 +28221 28222 28251 +28222 28252 28251 +28222 28223 28253 +28222 28253 28252 +28223 28224 28253 +28224 28254 28253 +28224 28225 28255 +28224 28255 28254 +28225 28226 28255 +28226 28256 28255 +28226 28227 28257 +28226 28257 28256 +28227 28228 28257 +28228 28258 28257 +28228 28229 28259 +28228 28259 28258 +28229 28230 28259 +28230 28260 28259 +28230 28231 28261 +28230 28261 28260 +28231 28232 28261 +28232 28262 28261 +28232 28233 28263 +28232 28263 28262 +28233 28234 28263 +28234 28264 28263 +28234 28235 28265 +28234 28265 28264 +28235 28236 28265 +28236 28266 28265 +28236 28237 28267 +28236 28267 28266 +28237 28238 28267 +28238 28268 28267 +28238 28239 28269 +28238 28269 28268 +28239 28240 28269 +28240 28270 28269 +28240 28241 28271 +28240 28271 28270 +28241 28242 28271 +28242 28272 28271 +28242 28243 28273 +28242 28273 28272 +28243 28244 28273 +28244 28274 28273 +28244 28245 28275 +28244 28275 28274 +28245 3355 28275 +3355 3484 28275 +28246 28247 28276 +28247 28277 28276 +28247 28248 28278 +28247 28278 28277 +28248 28249 28278 +28249 28279 28278 +28249 28250 28280 +28249 28280 28279 +28250 28251 28280 +28251 28281 28280 +28251 28252 28282 +28251 28282 28281 +28252 28253 28282 +28253 28283 28282 +28253 28254 28284 +28253 28284 28283 +28254 28255 28284 +28255 28285 28284 +28255 28256 28286 +28255 28286 28285 +28256 28257 28286 +28257 28287 28286 +28257 28258 28288 +28257 28288 28287 +28258 28259 28288 +28259 28289 28288 +28259 28260 28290 +28259 28290 28289 +28260 28261 28290 +28261 28291 28290 +28261 28262 28292 +28261 28292 28291 +28262 28263 28292 +28263 28293 28292 +28263 28264 28294 +28263 28294 28293 +28264 28265 28294 +28265 28295 28294 +28265 28266 28296 +28265 28296 28295 +28266 28267 28296 +28267 28297 28296 +28267 28268 28298 +28267 28298 28297 +28268 28269 28298 +28269 28299 28298 +28269 28270 28300 +28269 28300 28299 +28270 28271 28300 +28271 28301 28300 +28271 28272 28302 +28271 28302 28301 +28272 28273 28302 +28273 28303 28302 +28273 28274 28304 +28273 28304 28303 +28274 28275 28304 +28275 28305 28304 +28275 3484 3613 +28275 3613 28305 +28276 28277 28306 +28277 28278 28306 +28278 28307 28306 +28278 28279 28308 +28278 28308 28307 +28279 28280 28308 +28280 28309 28308 +28280 28281 28310 +28280 28310 28309 +28281 28282 28310 +28282 28311 28310 +28282 28283 28312 +28282 28312 28311 +28283 28284 28312 +28284 28313 28312 +28284 28285 28314 +28284 28314 28313 +28285 28286 28314 +28286 28315 28314 +28286 28287 28316 +28286 28316 28315 +28287 28288 28316 +28288 28317 28316 +28288 28289 28318 +28288 28318 28317 +28289 28290 28318 +28290 28319 28318 +28290 28291 28320 +28290 28320 28319 +28291 28292 28320 +28292 28321 28320 +28292 28293 28322 +28292 28322 28321 +28293 28294 28322 +28294 28323 28322 +28294 28295 28324 +28294 28324 28323 +28295 28296 28324 +28296 28325 28324 +28296 28297 28326 +28296 28326 28325 +28297 28298 28326 +28298 28327 28326 +28298 28299 28328 +28298 28328 28327 +28299 28300 28328 +28300 28329 28328 +28300 28301 28330 +28300 28330 28329 +28301 28302 28330 +28302 28331 28330 +28302 28303 28332 +28302 28332 28331 +28303 28304 28332 +28304 28333 28332 +28304 28305 28334 +28304 28334 28333 +28305 3613 28334 +3613 3742 28334 +28306 28307 28335 +28307 28308 28335 +28308 28336 28335 +28308 28309 28337 +28308 28337 28336 +28309 28310 28337 +28310 28338 28337 +28310 28311 28339 +28310 28339 28338 +28311 28312 28339 +28312 28340 28339 +28312 28313 28341 +28312 28341 28340 +28313 28314 28341 +28314 28342 28341 +28314 28315 28343 +28314 28343 28342 +28315 28316 28343 +28316 28344 28343 +28316 28317 28345 +28316 28345 28344 +28317 28318 28345 +28318 28346 28345 +28318 28319 28347 +28318 28347 28346 +28319 28320 28347 +28320 28348 28347 +28320 28321 28349 +28320 28349 28348 +28321 28322 28349 +28322 28350 28349 +28322 28323 28351 +28322 28351 28350 +28323 28324 28351 +28324 28352 28351 +28324 28325 28353 +28324 28353 28352 +28325 28326 28353 +28326 28354 28353 +28326 28327 28355 +28326 28355 28354 +28327 28328 28355 +28328 28356 28355 +28328 28329 28357 +28328 28357 28356 +28329 28330 28357 +28330 28358 28357 +28330 28331 28359 +28330 28359 28358 +28331 28332 28359 +28332 28360 28359 +28332 28333 28361 +28332 28361 28360 +28333 28334 28361 +28334 28362 28361 +28334 3742 3871 +28334 3871 28362 +28335 28336 28364 +28335 28364 28363 +28336 28337 28364 +28337 28365 28364 +28337 28338 28366 +28337 28366 28365 +28338 28339 28366 +28339 28367 28366 +28339 28340 28368 +28339 28368 28367 +28340 28341 28368 +28341 28369 28368 +28341 28342 28370 +28341 28370 28369 +28342 28343 28370 +28343 28371 28370 +28343 28344 28372 +28343 28372 28371 +28344 28345 28372 +28345 28373 28372 +28345 28346 28374 +28345 28374 28373 +28346 28347 28374 +28347 28375 28374 +28347 28348 28376 +28347 28376 28375 +28348 28349 28376 +28349 28377 28376 +28349 28350 28378 +28349 28378 28377 +28350 28351 28378 +28351 28379 28378 +28351 28352 28380 +28351 28380 28379 +28352 28353 28380 +28353 28381 28380 +28353 28354 28382 +28353 28382 28381 +28354 28355 28382 +28355 28383 28382 +28355 28356 28384 +28355 28384 28383 +28356 28357 28384 +28357 28385 28384 +28357 28358 28386 +28357 28386 28385 +28358 28359 28386 +28359 28387 28386 +28359 28360 28388 +28359 28388 28387 +28360 28361 28388 +28361 28389 28388 +28361 28362 28390 +28361 28390 28389 +28362 3871 28390 +3871 4000 28390 +28363 28364 28391 +28364 28392 28391 +28364 28365 28393 +28364 28393 28392 +28365 28366 28393 +28366 28394 28393 +28366 28367 28395 +28366 28395 28394 +28367 28368 28395 +28368 28396 28395 +28368 28369 28397 +28368 28397 28396 +28369 28370 28397 +28370 28398 28397 +28370 28371 28399 +28370 28399 28398 +28371 28372 28399 +28372 28400 28399 +28372 28373 28401 +28372 28401 28400 +28373 28374 28401 +28374 28402 28401 +28374 28375 28403 +28374 28403 28402 +28375 28376 28403 +28376 28404 28403 +28376 28377 28405 +28376 28405 28404 +28377 28378 28405 +28378 28406 28405 +28378 28379 28407 +28378 28407 28406 +28379 28380 28407 +28380 28408 28407 +28380 28381 28409 +28380 28409 28408 +28381 28382 28409 +28382 28410 28409 +28382 28383 28411 +28382 28411 28410 +28383 28384 28411 +28384 28412 28411 +28384 28385 28413 +28384 28413 28412 +28385 28386 28413 +28386 28414 28413 +28386 28387 28415 +28386 28415 28414 +28387 28388 28415 +28388 28416 28415 +28388 28389 28417 +28388 28417 28416 +28389 28390 28417 +28390 28418 28417 +28390 4000 4129 +28390 4129 28418 +28391 28392 28420 +28391 28420 28419 +28392 28393 28420 +28393 28421 28420 +28393 28394 28422 +28393 28422 28421 +28394 28395 28422 +28395 28423 28422 +28395 28396 28424 +28395 28424 28423 +28396 28397 28424 +28397 28425 28424 +28397 28398 28426 +28397 28426 28425 +28398 28399 28426 +28399 28427 28426 +28399 28400 28428 +28399 28428 28427 +28400 28401 28428 +28401 28429 28428 +28401 28402 28430 +28401 28430 28429 +28402 28403 28430 +28403 28431 28430 +28403 28404 28432 +28403 28432 28431 +28404 28405 28432 +28405 28433 28432 +28405 28406 28434 +28405 28434 28433 +28406 28407 28434 +28407 28435 28434 +28407 28408 28436 +28407 28436 28435 +28408 28409 28436 +28409 28437 28436 +28409 28410 28438 +28409 28438 28437 +28410 28411 28438 +28411 28439 28438 +28411 28412 28440 +28411 28440 28439 +28412 28413 28440 +28413 28441 28440 +28413 28414 28442 +28413 28442 28441 +28414 28415 28442 +28415 28443 28442 +28415 28416 28444 +28415 28444 28443 +28416 28417 28444 +28417 28445 28444 +28417 28418 28446 +28417 28446 28445 +28418 4129 28446 +4129 4258 28446 +28419 28420 28447 +28420 28448 28447 +28420 28421 28449 +28420 28449 28448 +28421 28422 28449 +28422 28450 28449 +28422 28423 28451 +28422 28451 28450 +28423 28424 28451 +28424 28452 28451 +28424 28425 28453 +28424 28453 28452 +28425 28426 28453 +28426 28454 28453 +28426 28427 28455 +28426 28455 28454 +28427 28428 28455 +28428 28456 28455 +28428 28429 28457 +28428 28457 28456 +28429 28430 28457 +28430 28458 28457 +28430 28431 28459 +28430 28459 28458 +28431 28432 28459 +28432 28460 28459 +28432 28433 28461 +28432 28461 28460 +28433 28434 28461 +28434 28462 28461 +28434 28435 28463 +28434 28463 28462 +28435 28436 28463 +28436 28464 28463 +28436 28437 28465 +28436 28465 28464 +28437 28438 28465 +28438 28466 28465 +28438 28439 28467 +28438 28467 28466 +28439 28440 28467 +28440 28468 28467 +28440 28441 28469 +28440 28469 28468 +28441 28442 28469 +28442 28470 28469 +28442 28443 28471 +28442 28471 28470 +28443 28444 28471 +28444 28472 28471 +28444 28445 28473 +28444 28473 28472 +28445 28446 28473 +28446 28474 28473 +28446 4258 4387 +28446 4387 28474 +28447 28448 28476 +28447 28476 28475 +28448 28449 28476 +28449 28477 28476 +28449 28450 28478 +28449 28478 28477 +28450 28451 28478 +28451 28479 28478 +28451 28452 28480 +28451 28480 28479 +28452 28453 28480 +28453 28481 28480 +28453 28454 28482 +28453 28482 28481 +28454 28455 28482 +28455 28483 28482 +28455 28456 28484 +28455 28484 28483 +28456 28457 28484 +28457 28485 28484 +28457 28458 28486 +28457 28486 28485 +28458 28459 28486 +28459 28487 28486 +28459 28460 28488 +28459 28488 28487 +28460 28461 28488 +28461 28489 28488 +28461 28462 28490 +28461 28490 28489 +28462 28463 28490 +28463 28491 28490 +28463 28464 28492 +28463 28492 28491 +28464 28465 28492 +28465 28493 28492 +28465 28466 28494 +28465 28494 28493 +28466 28467 28494 +28467 28495 28494 +28467 28468 28496 +28467 28496 28495 +28468 28469 28496 +28469 28497 28496 +28469 28470 28498 +28469 28498 28497 +28470 28471 28498 +28471 28499 28498 +28471 28472 28500 +28471 28500 28499 +28472 28473 28500 +28473 28501 28500 +28473 28474 28502 +28473 28502 28501 +28474 4387 28502 +4387 4516 28502 +28475 28476 28503 +28476 28504 28503 +28476 28477 28505 +28476 28505 28504 +28477 28478 28505 +28478 28506 28505 +28478 28479 28507 +28478 28507 28506 +28479 28480 28507 +28480 28508 28507 +28480 28481 28509 +28480 28509 28508 +28481 28482 28509 +28482 28510 28509 +28482 28483 28511 +28482 28511 28510 +28483 28484 28511 +28484 28512 28511 +28484 28485 28513 +28484 28513 28512 +28485 28486 28513 +28486 28514 28513 +28486 28487 28515 +28486 28515 28514 +28487 28488 28515 +28488 28516 28515 +28488 28489 28517 +28488 28517 28516 +28489 28490 28517 +28490 28518 28517 +28490 28491 28519 +28490 28519 28518 +28491 28492 28519 +28492 28520 28519 +28492 28493 28521 +28492 28521 28520 +28493 28494 28521 +28494 28522 28521 +28494 28495 28523 +28494 28523 28522 +28495 28496 28523 +28496 28524 28523 +28496 28497 28525 +28496 28525 28524 +28497 28498 28525 +28498 28526 28525 +28498 28499 28527 +28498 28527 28526 +28499 28500 28527 +28500 28528 28527 +28500 28501 28529 +28500 28529 28528 +28501 28502 28529 +28502 28530 28529 +28502 4516 4645 +28502 4645 28530 +28503 28504 28532 +28503 28532 28531 +28504 28505 28532 +28505 28533 28532 +28505 28506 28534 +28505 28534 28533 +28506 28507 28534 +28507 28535 28534 +28507 28508 28536 +28507 28536 28535 +28508 28509 28536 +28509 28537 28536 +28509 28510 28538 +28509 28538 28537 +28510 28511 28538 +28511 28539 28538 +28511 28512 28540 +28511 28540 28539 +28512 28513 28540 +28513 28541 28540 +28513 28514 28542 +28513 28542 28541 +28514 28515 28542 +28515 28543 28542 +28515 28516 28544 +28515 28544 28543 +28516 28517 28544 +28517 28545 28544 +28517 28518 28546 +28517 28546 28545 +28518 28519 28546 +28519 28547 28546 +28519 28520 28548 +28519 28548 28547 +28520 28521 28548 +28521 28549 28548 +28521 28522 28550 +28521 28550 28549 +28522 28523 28550 +28523 28551 28550 +28523 28524 28552 +28523 28552 28551 +28524 28525 28552 +28525 28553 28552 +28525 28526 28554 +28525 28554 28553 +28526 28527 28554 +28527 28555 28554 +28527 28528 28556 +28527 28556 28555 +28528 28529 28556 +28529 28557 28556 +28529 28530 28558 +28529 28558 28557 +28530 4645 28558 +4645 4774 28558 +28531 28532 28559 +28532 28560 28559 +28532 28533 28561 +28532 28561 28560 +28533 28534 28561 +28534 28562 28561 +28534 28535 28563 +28534 28563 28562 +28535 28536 28563 +28536 28564 28563 +28536 28537 28565 +28536 28565 28564 +28537 28538 28565 +28538 28566 28565 +28538 28539 28567 +28538 28567 28566 +28539 28540 28567 +28540 28568 28567 +28540 28541 28569 +28540 28569 28568 +28541 28542 28569 +28542 28570 28569 +28542 28543 28571 +28542 28571 28570 +28543 28544 28571 +28544 28572 28571 +28544 28545 28573 +28544 28573 28572 +28545 28546 28573 +28546 28574 28573 +28546 28547 28575 +28546 28575 28574 +28547 28548 28575 +28548 28576 28575 +28548 28549 28577 +28548 28577 28576 +28549 28550 28577 +28550 28578 28577 +28550 28551 28579 +28550 28579 28578 +28551 28552 28579 +28552 28580 28579 +28552 28553 28581 +28552 28581 28580 +28553 28554 28581 +28554 28582 28581 +28554 28555 28583 +28554 28583 28582 +28555 28556 28583 +28556 28584 28583 +28556 28557 28585 +28556 28585 28584 +28557 28558 28585 +28558 28586 28585 +28558 4774 4903 +28558 4903 28586 +28559 28560 28588 +28559 28588 28587 +28560 28561 28588 +28561 28589 28588 +28561 28562 28590 +28561 28590 28589 +28562 28563 28590 +28563 28591 28590 +28563 28564 28592 +28563 28592 28591 +28564 28565 28592 +28565 28593 28592 +28565 28566 28594 +28565 28594 28593 +28566 28567 28594 +28567 28595 28594 +28567 28568 28596 +28567 28596 28595 +28568 28569 28596 +28569 28597 28596 +28569 28570 28598 +28569 28598 28597 +28570 28571 28598 +28571 28599 28598 +28571 28572 28600 +28571 28600 28599 +28572 28573 28600 +28573 28601 28600 +28573 28574 28602 +28573 28602 28601 +28574 28575 28602 +28575 28603 28602 +28575 28576 28604 +28575 28604 28603 +28576 28577 28604 +28577 28605 28604 +28577 28578 28606 +28577 28606 28605 +28578 28579 28606 +28579 28607 28606 +28579 28580 28608 +28579 28608 28607 +28580 28581 28608 +28581 28609 28608 +28581 28582 28610 +28581 28610 28609 +28582 28583 28610 +28583 28611 28610 +28583 28584 28612 +28583 28612 28611 +28584 28585 28612 +28585 28613 28612 +28585 28586 28614 +28585 28614 28613 +28586 4903 28614 +4903 5032 28614 +28587 28588 28615 +28588 28616 28615 +28588 28589 28617 +28588 28617 28616 +28589 28590 28617 +28590 28618 28617 +28590 28591 28619 +28590 28619 28618 +28591 28592 28619 +28592 28620 28619 +28592 28593 28621 +28592 28621 28620 +28593 28594 28621 +28594 28622 28621 +28594 28595 28623 +28594 28623 28622 +28595 28596 28623 +28596 28624 28623 +28596 28597 28625 +28596 28625 28624 +28597 28598 28625 +28598 28626 28625 +28598 28599 28627 +28598 28627 28626 +28599 28600 28627 +28600 28628 28627 +28600 28601 28629 +28600 28629 28628 +28601 28602 28629 +28602 28630 28629 +28602 28603 28631 +28602 28631 28630 +28603 28604 28631 +28604 28632 28631 +28604 28605 28633 +28604 28633 28632 +28605 28606 28633 +28606 28634 28633 +28606 28607 28635 +28606 28635 28634 +28607 28608 28635 +28608 28636 28635 +28608 28609 28637 +28608 28637 28636 +28609 28610 28637 +28610 28638 28637 +28610 28611 28639 +28610 28639 28638 +28611 28612 28639 +28612 28640 28639 +28612 28613 28641 +28612 28641 28640 +28613 28614 28641 +28614 28642 28641 +28614 5032 5161 +28614 5161 28642 +28615 28616 28643 +28616 28617 28643 +28617 28644 28643 +28617 28618 28645 +28617 28645 28644 +28618 28619 28645 +28619 28646 28645 +28619 28620 28647 +28619 28647 28646 +28620 28621 28647 +28621 28648 28647 +28621 28622 28649 +28621 28649 28648 +28622 28623 28649 +28623 28650 28649 +28623 28624 28651 +28623 28651 28650 +28624 28625 28651 +28625 28652 28651 +28625 28626 28653 +28625 28653 28652 +28626 28627 28653 +28627 28654 28653 +28627 28628 28655 +28627 28655 28654 +28628 28629 28655 +28629 28656 28655 +28629 28630 28657 +28629 28657 28656 +28630 28631 28657 +28631 28658 28657 +28631 28632 28659 +28631 28659 28658 +28632 28633 28659 +28633 28660 28659 +28633 28634 28661 +28633 28661 28660 +28634 28635 28661 +28635 28662 28661 +28635 28636 28663 +28635 28663 28662 +28636 28637 28663 +28637 28664 28663 +28637 28638 28665 +28637 28665 28664 +28638 28639 28665 +28639 28666 28665 +28639 28640 28667 +28639 28667 28666 +28640 28641 28667 +28641 28668 28667 +28641 28642 28669 +28641 28669 28668 +28642 5161 28669 +5161 5290 28669 +28643 28644 28671 +28643 28671 28670 +28644 28645 28671 +28645 28672 28671 +28645 28646 28673 +28645 28673 28672 +28646 28647 28673 +28647 28674 28673 +28647 28648 28675 +28647 28675 28674 +28648 28649 28675 +28649 28676 28675 +28649 28650 28677 +28649 28677 28676 +28650 28651 28677 +28651 28678 28677 +28651 28652 28679 +28651 28679 28678 +28652 28653 28679 +28653 28680 28679 +28653 28654 28681 +28653 28681 28680 +28654 28655 28681 +28655 28682 28681 +28655 28656 28683 +28655 28683 28682 +28656 28657 28683 +28657 28684 28683 +28657 28658 28685 +28657 28685 28684 +28658 28659 28685 +28659 28686 28685 +28659 28660 28687 +28659 28687 28686 +28660 28661 28687 +28661 28688 28687 +28661 28662 28689 +28661 28689 28688 +28662 28663 28689 +28663 28690 28689 +28663 28664 28691 +28663 28691 28690 +28664 28665 28691 +28665 28692 28691 +28665 28666 28693 +28665 28693 28692 +28666 28667 28693 +28667 28694 28693 +28667 28668 28695 +28667 28695 28694 +28668 28669 28695 +28669 28696 28695 +28669 5290 5419 +28669 5419 28696 +28670 28671 28697 +28671 28698 28697 +28671 28672 28699 +28671 28699 28698 +28672 28673 28699 +28673 28700 28699 +28673 28674 28701 +28673 28701 28700 +28674 28675 28701 +28675 28702 28701 +28675 28676 28703 +28675 28703 28702 +28676 28677 28703 +28677 28704 28703 +28677 28678 28705 +28677 28705 28704 +28678 28679 28705 +28679 28706 28705 +28679 28680 28707 +28679 28707 28706 +28680 28681 28707 +28681 28708 28707 +28681 28682 28709 +28681 28709 28708 +28682 28683 28709 +28683 28710 28709 +28683 28684 28711 +28683 28711 28710 +28684 28685 28711 +28685 28712 28711 +28685 28686 28713 +28685 28713 28712 +28686 28687 28713 +28687 28714 28713 +28687 28688 28715 +28687 28715 28714 +28688 28689 28715 +28689 28716 28715 +28689 28690 28717 +28689 28717 28716 +28690 28691 28717 +28691 28718 28717 +28691 28692 28719 +28691 28719 28718 +28692 28693 28719 +28693 28720 28719 +28693 28694 28721 +28693 28721 28720 +28694 28695 28721 +28695 28722 28721 +28695 28696 28723 +28695 28723 28722 +28696 5419 28723 +5419 5548 28723 +28697 28698 28725 +28697 28725 28724 +28698 28699 28725 +28699 28726 28725 +28699 28700 28727 +28699 28727 28726 +28700 28701 28727 +28701 28728 28727 +28701 28702 28729 +28701 28729 28728 +28702 28703 28729 +28703 28730 28729 +28703 28704 28731 +28703 28731 28730 +28704 28705 28731 +28705 28732 28731 +28705 28706 28733 +28705 28733 28732 +28706 28707 28733 +28707 28734 28733 +28707 28708 28735 +28707 28735 28734 +28708 28709 28735 +28709 28736 28735 +28709 28710 28737 +28709 28737 28736 +28710 28711 28737 +28711 28738 28737 +28711 28712 28739 +28711 28739 28738 +28712 28713 28739 +28713 28740 28739 +28713 28714 28741 +28713 28741 28740 +28714 28715 28741 +28715 28742 28741 +28715 28716 28743 +28715 28743 28742 +28716 28717 28743 +28717 28744 28743 +28717 28718 28745 +28717 28745 28744 +28718 28719 28745 +28719 28746 28745 +28719 28720 28747 +28719 28747 28746 +28720 28721 28747 +28721 28748 28747 +28721 28722 28749 +28721 28749 28748 +28722 28723 28749 +28723 28750 28749 +28723 5548 5677 +28723 5677 28750 +28724 28725 28751 +28725 28752 28751 +28725 28726 28753 +28725 28753 28752 +28726 28727 28753 +28727 28754 28753 +28727 28728 28755 +28727 28755 28754 +28728 28729 28755 +28729 28756 28755 +28729 28730 28757 +28729 28757 28756 +28730 28731 28757 +28731 28758 28757 +28731 28732 28759 +28731 28759 28758 +28732 28733 28759 +28733 28760 28759 +28733 28734 28761 +28733 28761 28760 +28734 28735 28761 +28735 28762 28761 +28735 28736 28763 +28735 28763 28762 +28736 28737 28763 +28737 28764 28763 +28737 28738 28765 +28737 28765 28764 +28738 28739 28765 +28739 28766 28765 +28739 28740 28767 +28739 28767 28766 +28740 28741 28767 +28741 28768 28767 +28741 28742 28769 +28741 28769 28768 +28742 28743 28769 +28743 28770 28769 +28743 28744 28771 +28743 28771 28770 +28744 28745 28771 +28745 28772 28771 +28745 28746 28773 +28745 28773 28772 +28746 28747 28773 +28747 28774 28773 +28747 28748 28775 +28747 28775 28774 +28748 28749 28775 +28749 28776 28775 +28749 28750 28777 +28749 28777 28776 +28750 5677 28777 +5677 5806 28777 +28751 28752 28779 +28751 28779 28778 +28752 28753 28779 +28753 28780 28779 +28753 28754 28781 +28753 28781 28780 +28754 28755 28781 +28755 28782 28781 +28755 28756 28783 +28755 28783 28782 +28756 28757 28783 +28757 28784 28783 +28757 28758 28785 +28757 28785 28784 +28758 28759 28785 +28759 28786 28785 +28759 28760 28787 +28759 28787 28786 +28760 28761 28787 +28761 28788 28787 +28761 28762 28789 +28761 28789 28788 +28762 28763 28789 +28763 28790 28789 +28763 28764 28791 +28763 28791 28790 +28764 28765 28791 +28765 28792 28791 +28765 28766 28793 +28765 28793 28792 +28766 28767 28793 +28767 28794 28793 +28767 28768 28795 +28767 28795 28794 +28768 28769 28795 +28769 28796 28795 +28769 28770 28797 +28769 28797 28796 +28770 28771 28797 +28771 28798 28797 +28771 28772 28799 +28771 28799 28798 +28772 28773 28799 +28773 28800 28799 +28773 28774 28801 +28773 28801 28800 +28774 28775 28801 +28775 28802 28801 +28775 28776 28803 +28775 28803 28802 +28776 28777 28803 +28777 28804 28803 +28777 5806 5935 +28777 5935 28804 +28778 28779 28805 +28779 28806 28805 +28779 28780 28807 +28779 28807 28806 +28780 28781 28807 +28781 28808 28807 +28781 28782 28809 +28781 28809 28808 +28782 28783 28809 +28783 28810 28809 +28783 28784 28811 +28783 28811 28810 +28784 28785 28811 +28785 28812 28811 +28785 28786 28813 +28785 28813 28812 +28786 28787 28813 +28787 28814 28813 +28787 28788 28815 +28787 28815 28814 +28788 28789 28815 +28789 28816 28815 +28789 28790 28817 +28789 28817 28816 +28790 28791 28817 +28791 28818 28817 +28791 28792 28819 +28791 28819 28818 +28792 28793 28819 +28793 28820 28819 +28793 28794 28821 +28793 28821 28820 +28794 28795 28821 +28795 28822 28821 +28795 28796 28823 +28795 28823 28822 +28796 28797 28823 +28797 28824 28823 +28797 28798 28825 +28797 28825 28824 +28798 28799 28825 +28799 28826 28825 +28799 28800 28827 +28799 28827 28826 +28800 28801 28827 +28801 28828 28827 +28801 28802 28829 +28801 28829 28828 +28802 28803 28829 +28803 28830 28829 +28803 28804 28831 +28803 28831 28830 +28804 5935 28831 +5935 6064 28831 +28805 28806 28833 +28805 28833 28832 +28806 28807 28833 +28807 28834 28833 +28807 28808 28835 +28807 28835 28834 +28808 28809 28835 +28809 28836 28835 +28809 28810 28837 +28809 28837 28836 +28810 28811 28837 +28811 28838 28837 +28811 28812 28839 +28811 28839 28838 +28812 28813 28839 +28813 28840 28839 +28813 28814 28841 +28813 28841 28840 +28814 28815 28841 +28815 28842 28841 +28815 28816 28843 +28815 28843 28842 +28816 28817 28843 +28817 28844 28843 +28817 28818 28845 +28817 28845 28844 +28818 28819 28845 +28819 28846 28845 +28819 28820 28847 +28819 28847 28846 +28820 28821 28847 +28821 28848 28847 +28821 28822 28849 +28821 28849 28848 +28822 28823 28849 +28823 28850 28849 +28823 28824 28851 +28823 28851 28850 +28824 28825 28851 +28825 28852 28851 +28825 28826 28853 +28825 28853 28852 +28826 28827 28853 +28827 28854 28853 +28827 28828 28855 +28827 28855 28854 +28828 28829 28855 +28829 28856 28855 +28829 28830 28857 +28829 28857 28856 +28830 28831 28857 +28831 28858 28857 +28831 6064 6192 +28831 6192 28858 +28832 28833 28859 +28833 28860 28859 +28833 28834 28861 +28833 28861 28860 +28834 28835 28861 +28835 28862 28861 +28835 28836 28863 +28835 28863 28862 +28836 28837 28863 +28837 28864 28863 +28837 28838 28865 +28837 28865 28864 +28838 28839 28865 +28839 28866 28865 +28839 28840 28867 +28839 28867 28866 +28840 28841 28867 +28841 28868 28867 +28841 28842 28869 +28841 28869 28868 +28842 28843 28869 +28843 28870 28869 +28843 28844 28871 +28843 28871 28870 +28844 28845 28871 +28845 28872 28871 +28845 28846 28873 +28845 28873 28872 +28846 28847 28873 +28847 28874 28873 +28847 28848 28875 +28847 28875 28874 +28848 28849 28875 +28849 28876 28875 +28849 28850 28877 +28849 28877 28876 +28850 28851 28877 +28851 28878 28877 +28851 28852 28879 +28851 28879 28878 +28852 28853 28879 +28853 28880 28879 +28853 28854 28881 +28853 28881 28880 +28854 28855 28881 +28855 28882 28881 +28855 28856 28883 +28855 28883 28882 +28856 28857 28883 +28857 28884 28883 +28857 28858 28885 +28857 28885 28884 +28858 6192 28885 +6192 6318 28885 +28859 28860 28887 +28859 28887 28886 +28860 28861 28887 +28861 28888 28887 +28861 28862 28889 +28861 28889 28888 +28862 28863 28889 +28863 28890 28889 +28863 28864 28891 +28863 28891 28890 +28864 28865 28891 +28865 28892 28891 +28865 28866 28893 +28865 28893 28892 +28866 28867 28893 +28867 28894 28893 +28867 28868 28895 +28867 28895 28894 +28868 28869 28895 +28869 28896 28895 +28869 28870 28897 +28869 28897 28896 +28870 28871 28897 +28871 28898 28897 +28871 28872 28899 +28871 28899 28898 +28872 28873 28899 +28873 28900 28899 +28873 28874 28901 +28873 28901 28900 +28874 28875 28901 +28875 28902 28901 +28875 28876 28903 +28875 28903 28902 +28876 28877 28903 +28877 28904 28903 +28877 28878 28905 +28877 28905 28904 +28878 28879 28905 +28879 28906 28905 +28879 28880 28907 +28879 28907 28906 +28880 28881 28907 +28881 28908 28907 +28881 28882 28909 +28881 28909 28908 +28882 28883 28909 +28883 28910 28909 +28883 28884 28911 +28883 28911 28910 +28884 28885 28911 +28885 28912 28911 +28885 6318 6441 +28885 6441 28912 +28886 28887 28913 +28887 28914 28913 +28887 28888 28915 +28887 28915 28914 +28888 28889 28915 +28889 28916 28915 +28889 28890 28917 +28889 28917 28916 +28890 28891 28917 +28891 28918 28917 +28891 28892 28919 +28891 28919 28918 +28892 28893 28919 +28893 28920 28919 +28893 28894 28921 +28893 28921 28920 +28894 28895 28921 +28895 28922 28921 +28895 28896 28923 +28895 28923 28922 +28896 28897 28923 +28897 28924 28923 +28897 28898 28925 +28897 28925 28924 +28898 28899 28925 +28899 28926 28925 +28899 28900 28927 +28899 28927 28926 +28900 28901 28927 +28901 28928 28927 +28901 28902 28929 +28901 28929 28928 +28902 28903 28929 +28903 28930 28929 +28903 28904 28931 +28903 28931 28930 +28904 28905 28931 +28905 28932 28931 +28905 28906 28933 +28905 28933 28932 +28906 28907 28933 +28907 28934 28933 +28907 28908 28935 +28907 28935 28934 +28908 28909 28935 +28909 28936 28935 +28909 28910 28937 +28909 28937 28936 +28910 28911 28937 +28911 28938 28937 +28911 28912 28939 +28911 28939 28938 +28912 6441 28939 +6441 6563 28939 +28913 28914 28941 +28913 28941 28940 +28914 28915 28941 +28915 28942 28941 +28915 28916 28943 +28915 28943 28942 +28916 28917 28943 +28917 28944 28943 +28917 28918 28945 +28917 28945 28944 +28918 28919 28945 +28919 28946 28945 +28919 28920 28947 +28919 28947 28946 +28920 28921 28947 +28921 28948 28947 +28921 28922 28949 +28921 28949 28948 +28922 28923 28949 +28923 28950 28949 +28923 28924 28951 +28923 28951 28950 +28924 28925 28951 +28925 28952 28951 +28925 28926 28953 +28925 28953 28952 +28926 28927 28953 +28927 28954 28953 +28927 28928 28955 +28927 28955 28954 +28928 28929 28955 +28929 28956 28955 +28929 28930 28957 +28929 28957 28956 +28930 28931 28957 +28931 28958 28957 +28931 28932 28959 +28931 28959 28958 +28932 28933 28959 +28933 28960 28959 +28933 28934 28961 +28933 28961 28960 +28934 28935 28961 +28935 28962 28961 +28935 28936 28963 +28935 28963 28962 +28936 28937 28963 +28937 28964 28963 +28937 28938 28965 +28937 28965 28964 +28938 28939 28965 +28939 28966 28965 +28939 6563 6685 +28939 6685 28966 +28940 28941 28967 +28941 28968 28967 +28941 28942 28969 +28941 28969 28968 +28942 28943 28969 +28943 28970 28969 +28943 28944 28971 +28943 28971 28970 +28944 28945 28971 +28945 28972 28971 +28945 28946 28973 +28945 28973 28972 +28946 28947 28973 +28947 28974 28973 +28947 28948 28975 +28947 28975 28974 +28948 28949 28975 +28949 28976 28975 +28949 28950 28977 +28949 28977 28976 +28950 28951 28977 +28951 28978 28977 +28951 28952 28979 +28951 28979 28978 +28952 28953 28979 +28953 28980 28979 +28953 28954 28981 +28953 28981 28980 +28954 28955 28981 +28955 28982 28981 +28955 28956 28983 +28955 28983 28982 +28956 28957 28983 +28957 28984 28983 +28957 28958 28985 +28957 28985 28984 +28958 28959 28985 +28959 28986 28985 +28959 28960 28987 +28959 28987 28986 +28960 28961 28987 +28961 28988 28987 +28961 28962 28989 +28961 28989 28988 +28962 28963 28989 +28963 28990 28989 +28963 28964 28991 +28963 28991 28990 +28964 28965 28991 +28965 28992 28991 +28965 28966 28993 +28965 28993 28992 +28966 6685 28993 +6685 6807 28993 +28967 28968 28995 +28967 28995 28994 +28968 28969 28995 +28969 28996 28995 +28969 28970 28997 +28969 28997 28996 +28970 28971 28997 +28971 28998 28997 +28971 28972 28999 +28971 28999 28998 +28972 28973 28999 +28973 29000 28999 +28973 28974 29001 +28973 29001 29000 +28974 28975 29001 +28975 29002 29001 +28975 28976 29003 +28975 29003 29002 +28976 28977 29003 +28977 29004 29003 +28977 28978 29005 +28977 29005 29004 +28978 28979 29005 +28979 29006 29005 +28979 28980 29007 +28979 29007 29006 +28980 28981 29007 +28981 29008 29007 +28981 28982 29009 +28981 29009 29008 +28982 28983 29009 +28983 29010 29009 +28983 28984 29011 +28983 29011 29010 +28984 28985 29011 +28985 29012 29011 +28985 28986 29013 +28985 29013 29012 +28986 28987 29013 +28987 29014 29013 +28987 28988 29015 +28987 29015 29014 +28988 28989 29015 +28989 29016 29015 +28989 28990 29017 +28989 29017 29016 +28990 28991 29017 +28991 29018 29017 +28991 28992 29019 +28991 29019 29018 +28992 28993 29019 +28993 29020 29019 +28993 6807 6928 +28993 6928 29020 +28994 28995 29021 +28995 29022 29021 +28995 28996 29023 +28995 29023 29022 +28996 28997 29023 +28997 29024 29023 +28997 28998 29025 +28997 29025 29024 +28998 28999 29025 +28999 29026 29025 +28999 29000 29027 +28999 29027 29026 +29000 29001 29027 +29001 29028 29027 +29001 29002 29029 +29001 29029 29028 +29002 29003 29029 +29003 29030 29029 +29003 29004 29031 +29003 29031 29030 +29004 29005 29031 +29005 29032 29031 +29005 29006 29033 +29005 29033 29032 +29006 29007 29033 +29007 29034 29033 +29007 29008 29035 +29007 29035 29034 +29008 29009 29035 +29009 29036 29035 +29009 29010 29037 +29009 29037 29036 +29010 29011 29037 +29011 29038 29037 +29011 29012 29039 +29011 29039 29038 +29012 29013 29039 +29013 29040 29039 +29013 29014 29041 +29013 29041 29040 +29014 29015 29041 +29015 29042 29041 +29015 29016 29043 +29015 29043 29042 +29016 29017 29043 +29017 29044 29043 +29017 29018 29045 +29017 29045 29044 +29018 29019 29045 +29019 29046 29045 +29019 29020 29047 +29019 29047 29046 +29020 6928 29047 +6928 7048 29047 +29021 29022 29048 +29022 29023 29048 +29023 29049 29048 +29023 29024 29050 +29023 29050 29049 +29024 29025 29050 +29025 29051 29050 +29025 29026 29052 +29025 29052 29051 +29026 29027 29052 +29027 29053 29052 +29027 29028 29054 +29027 29054 29053 +29028 29029 29054 +29029 29055 29054 +29029 29030 29056 +29029 29056 29055 +29030 29031 29056 +29031 29057 29056 +29031 29032 29058 +29031 29058 29057 +29032 29033 29058 +29033 29059 29058 +29033 29034 29060 +29033 29060 29059 +29034 29035 29060 +29035 29061 29060 +29035 29036 29062 +29035 29062 29061 +29036 29037 29062 +29037 29063 29062 +29037 29038 29064 +29037 29064 29063 +29038 29039 29064 +29039 29065 29064 +29039 29040 29066 +29039 29066 29065 +29040 29041 29066 +29041 29067 29066 +29041 29042 29068 +29041 29068 29067 +29042 29043 29068 +29043 29069 29068 +29043 29044 29070 +29043 29070 29069 +29044 29045 29070 +29045 29071 29070 +29045 29046 29072 +29045 29072 29071 +29046 29047 29072 +29047 29073 29072 +29047 7048 7168 +29047 7168 29073 +29048 29049 29075 +29048 29075 29074 +29049 29050 29075 +29050 29076 29075 +29050 29051 29077 +29050 29077 29076 +29051 29052 29077 +29052 29078 29077 +29052 29053 29079 +29052 29079 29078 +29053 29054 29079 +29054 29080 29079 +29054 29055 29081 +29054 29081 29080 +29055 29056 29081 +29056 29082 29081 +29056 29057 29083 +29056 29083 29082 +29057 29058 29083 +29058 29084 29083 +29058 29059 29085 +29058 29085 29084 +29059 29060 29085 +29060 29086 29085 +29060 29061 29087 +29060 29087 29086 +29061 29062 29087 +29062 29088 29087 +29062 29063 29089 +29062 29089 29088 +29063 29064 29089 +29064 29090 29089 +29064 29065 29091 +29064 29091 29090 +29065 29066 29091 +29066 29092 29091 +29066 29067 29093 +29066 29093 29092 +29067 29068 29093 +29068 29094 29093 +29068 29069 29095 +29068 29095 29094 +29069 29070 29095 +29070 29096 29095 +29070 29071 29097 +29070 29097 29096 +29071 29072 29097 +29072 29098 29097 +29072 29073 29099 +29072 29099 29098 +29073 7168 29099 +7168 7288 29099 +29074 29075 29100 +29075 29101 29100 +29075 29076 29102 +29075 29102 29101 +29076 29077 29102 +29077 29103 29102 +29077 29078 29104 +29077 29104 29103 +29078 29079 29104 +29079 29105 29104 +29079 29080 29106 +29079 29106 29105 +29080 29081 29106 +29081 29107 29106 +29081 29082 29108 +29081 29108 29107 +29082 29083 29108 +29083 29109 29108 +29083 29084 29110 +29083 29110 29109 +29084 29085 29110 +29085 29111 29110 +29085 29086 29112 +29085 29112 29111 +29086 29087 29112 +29087 29113 29112 +29087 29088 29114 +29087 29114 29113 +29088 29089 29114 +29089 29115 29114 +29089 29090 29116 +29089 29116 29115 +29090 29091 29116 +29091 29117 29116 +29091 29092 29118 +29091 29118 29117 +29092 29093 29118 +29093 29119 29118 +29093 29094 29120 +29093 29120 29119 +29094 29095 29120 +29095 29121 29120 +29095 29096 29122 +29095 29122 29121 +29096 29097 29122 +29097 29123 29122 +29097 29098 29124 +29097 29124 29123 +29098 29099 29124 +29099 29125 29124 +29099 7288 7408 +29099 7408 29125 +29100 29101 29127 +29100 29127 29126 +29101 29102 29127 +29102 29128 29127 +29102 29103 29129 +29102 29129 29128 +29103 29104 29129 +29104 29130 29129 +29104 29105 29131 +29104 29131 29130 +29105 29106 29131 +29106 29132 29131 +29106 29107 29133 +29106 29133 29132 +29107 29108 29133 +29108 29134 29133 +29108 29109 29135 +29108 29135 29134 +29109 29110 29135 +29110 29136 29135 +29110 29111 29137 +29110 29137 29136 +29111 29112 29137 +29112 29138 29137 +29112 29113 29139 +29112 29139 29138 +29113 29114 29139 +29114 29140 29139 +29114 29115 29141 +29114 29141 29140 +29115 29116 29141 +29116 29142 29141 +29116 29117 29143 +29116 29143 29142 +29117 29118 29143 +29118 29144 29143 +29118 29119 29145 +29118 29145 29144 +29119 29120 29145 +29120 29146 29145 +29120 29121 29147 +29120 29147 29146 +29121 29122 29147 +29122 29148 29147 +29122 29123 29149 +29122 29149 29148 +29123 29124 29149 +29124 29150 29149 +29124 29125 29151 +29124 29151 29150 +29125 7408 29151 +7408 7528 29151 +29126 29127 29152 +29127 29153 29152 +29127 29128 29154 +29127 29154 29153 +29128 29129 29154 +29129 29155 29154 +29129 29130 29156 +29129 29156 29155 +29130 29131 29156 +29131 29157 29156 +29131 29132 29158 +29131 29158 29157 +29132 29133 29158 +29133 29159 29158 +29133 29134 29160 +29133 29160 29159 +29134 29135 29160 +29135 29161 29160 +29135 29136 29162 +29135 29162 29161 +29136 29137 29162 +29137 29163 29162 +29137 29138 29164 +29137 29164 29163 +29138 29139 29164 +29139 29165 29164 +29139 29140 29166 +29139 29166 29165 +29140 29141 29166 +29141 29167 29166 +29141 29142 29168 +29141 29168 29167 +29142 29143 29168 +29143 29169 29168 +29143 29144 29170 +29143 29170 29169 +29144 29145 29170 +29145 29171 29170 +29145 29146 29172 +29145 29172 29171 +29146 29147 29172 +29147 29173 29172 +29147 29148 29174 +29147 29174 29173 +29148 29149 29174 +29149 29175 29174 +29149 29150 29176 +29149 29176 29175 +29150 29151 29176 +29151 29177 29176 +29151 7528 7648 +29151 7648 29177 +29152 29153 29179 +29152 29179 29178 +29153 29154 29179 +29154 29180 29179 +29154 29155 29181 +29154 29181 29180 +29155 29156 29181 +29156 29182 29181 +29156 29157 29183 +29156 29183 29182 +29157 29158 29183 +29158 29184 29183 +29158 29159 29185 +29158 29185 29184 +29159 29160 29185 +29160 29186 29185 +29160 29161 29187 +29160 29187 29186 +29161 29162 29187 +29162 29188 29187 +29162 29163 29189 +29162 29189 29188 +29163 29164 29189 +29164 29190 29189 +29164 29165 29191 +29164 29191 29190 +29165 29166 29191 +29166 29192 29191 +29166 29167 29193 +29166 29193 29192 +29167 29168 29193 +29168 29194 29193 +29168 29169 29195 +29168 29195 29194 +29169 29170 29195 +29170 29196 29195 +29170 29171 29197 +29170 29197 29196 +29171 29172 29197 +29172 29198 29197 +29172 29173 29199 +29172 29199 29198 +29173 29174 29199 +29174 29200 29199 +29174 29175 29201 +29174 29201 29200 +29175 29176 29201 +29176 29202 29201 +29176 29177 29203 +29176 29203 29202 +29177 7648 29203 +7648 7768 29203 +29178 29179 29204 +29179 29205 29204 +29179 29180 29206 +29179 29206 29205 +29180 29181 29206 +29181 29207 29206 +29181 29182 29208 +29181 29208 29207 +29182 29183 29208 +29183 29209 29208 +29183 29184 29210 +29183 29210 29209 +29184 29185 29210 +29185 29211 29210 +29185 29186 29212 +29185 29212 29211 +29186 29187 29212 +29187 29213 29212 +29187 29188 29214 +29187 29214 29213 +29188 29189 29214 +29189 29215 29214 +29189 29190 29216 +29189 29216 29215 +29190 29191 29216 +29191 29217 29216 +29191 29192 29218 +29191 29218 29217 +29192 29193 29218 +29193 29219 29218 +29193 29194 29220 +29193 29220 29219 +29194 29195 29220 +29195 29221 29220 +29195 29196 29222 +29195 29222 29221 +29196 29197 29222 +29197 29223 29222 +29197 29198 29224 +29197 29224 29223 +29198 29199 29224 +29199 29225 29224 +29199 29200 29226 +29199 29226 29225 +29200 29201 29226 +29201 29227 29226 +29201 29202 29228 +29201 29228 29227 +29202 29203 29228 +29203 29229 29228 +29203 7768 7888 +29203 7888 29229 +29204 29205 29231 +29204 29231 29230 +29205 29206 29231 +29206 29232 29231 +29206 29207 29233 +29206 29233 29232 +29207 29208 29233 +29208 29234 29233 +29208 29209 29235 +29208 29235 29234 +29209 29210 29235 +29210 29236 29235 +29210 29211 29237 +29210 29237 29236 +29211 29212 29237 +29212 29238 29237 +29212 29213 29239 +29212 29239 29238 +29213 29214 29239 +29214 29240 29239 +29214 29215 29241 +29214 29241 29240 +29215 29216 29241 +29216 29242 29241 +29216 29217 29243 +29216 29243 29242 +29217 29218 29243 +29218 29244 29243 +29218 29219 29245 +29218 29245 29244 +29219 29220 29245 +29220 29246 29245 +29220 29221 29247 +29220 29247 29246 +29221 29222 29247 +29222 29248 29247 +29222 29223 29249 +29222 29249 29248 +29223 29224 29249 +29224 29250 29249 +29224 29225 29251 +29224 29251 29250 +29225 29226 29251 +29226 29252 29251 +29226 29227 29253 +29226 29253 29252 +29227 29228 29253 +29228 29254 29253 +29228 29229 29255 +29228 29255 29254 +29229 7888 29255 +7888 8008 29255 +29230 29231 29256 +29231 29257 29256 +29231 29232 29258 +29231 29258 29257 +29232 29233 29258 +29233 29259 29258 +29233 29234 29260 +29233 29260 29259 +29234 29235 29260 +29235 29261 29260 +29235 29236 29262 +29235 29262 29261 +29236 29237 29262 +29237 29263 29262 +29237 29238 29264 +29237 29264 29263 +29238 29239 29264 +29239 29265 29264 +29239 29240 29266 +29239 29266 29265 +29240 29241 29266 +29241 29267 29266 +29241 29242 29268 +29241 29268 29267 +29242 29243 29268 +29243 29269 29268 +29243 29244 29270 +29243 29270 29269 +29244 29245 29270 +29245 29271 29270 +29245 29246 29272 +29245 29272 29271 +29246 29247 29272 +29247 29273 29272 +29247 29248 29274 +29247 29274 29273 +29248 29249 29274 +29249 29275 29274 +29249 29250 29276 +29249 29276 29275 +29250 29251 29276 +29251 29277 29276 +29251 29252 29278 +29251 29278 29277 +29252 29253 29278 +29253 29279 29278 +29253 29254 29280 +29253 29280 29279 +29254 29255 29280 +29255 29281 29280 +29255 8008 8128 +29255 8128 29281 +29256 29257 29283 +29256 29283 29282 +29257 29258 29283 +29258 29284 29283 +29258 29259 29285 +29258 29285 29284 +29259 29260 29285 +29260 29286 29285 +29260 29261 29287 +29260 29287 29286 +29261 29262 29287 +29262 29288 29287 +29262 29263 29289 +29262 29289 29288 +29263 29264 29289 +29264 29290 29289 +29264 29265 29291 +29264 29291 29290 +29265 29266 29291 +29266 29292 29291 +29266 29267 29293 +29266 29293 29292 +29267 29268 29293 +29268 29294 29293 +29268 29269 29295 +29268 29295 29294 +29269 29270 29295 +29270 29296 29295 +29270 29271 29297 +29270 29297 29296 +29271 29272 29297 +29272 29298 29297 +29272 29273 29299 +29272 29299 29298 +29273 29274 29299 +29274 29300 29299 +29274 29275 29301 +29274 29301 29300 +29275 29276 29301 +29276 29302 29301 +29276 29277 29303 +29276 29303 29302 +29277 29278 29303 +29278 29304 29303 +29278 29279 29305 +29278 29305 29304 +29279 29280 29305 +29280 29306 29305 +29280 29281 29307 +29280 29307 29306 +29281 8128 29307 +8128 8248 29307 +29282 29283 29308 +29283 29309 29308 +29283 29284 29310 +29283 29310 29309 +29284 29285 29310 +29285 29311 29310 +29285 29286 29312 +29285 29312 29311 +29286 29287 29312 +29287 29313 29312 +29287 29288 29314 +29287 29314 29313 +29288 29289 29314 +29289 29315 29314 +29289 29290 29316 +29289 29316 29315 +29290 29291 29316 +29291 29317 29316 +29291 29292 29318 +29291 29318 29317 +29292 29293 29318 +29293 29319 29318 +29293 29294 29320 +29293 29320 29319 +29294 29295 29320 +29295 29321 29320 +29295 29296 29322 +29295 29322 29321 +29296 29297 29322 +29297 29323 29322 +29297 29298 29324 +29297 29324 29323 +29298 29299 29324 +29299 29325 29324 +29299 29300 29326 +29299 29326 29325 +29300 29301 29326 +29301 29327 29326 +29301 29302 29328 +29301 29328 29327 +29302 29303 29328 +29303 29329 29328 +29303 29304 29330 +29303 29330 29329 +29304 29305 29330 +29305 29331 29330 +29305 29306 29332 +29305 29332 29331 +29306 29307 29332 +29307 29333 29332 +29307 8248 8368 +29307 8368 29333 +29308 29309 29335 +29308 29335 29334 +29309 29310 29335 +29310 29336 29335 +29310 29311 29337 +29310 29337 29336 +29311 29312 29337 +29312 29338 29337 +29312 29313 29339 +29312 29339 29338 +29313 29314 29339 +29314 29340 29339 +29314 29315 29341 +29314 29341 29340 +29315 29316 29341 +29316 29342 29341 +29316 29317 29343 +29316 29343 29342 +29317 29318 29343 +29318 29344 29343 +29318 29319 29345 +29318 29345 29344 +29319 29320 29345 +29320 29346 29345 +29320 29321 29347 +29320 29347 29346 +29321 29322 29347 +29322 29348 29347 +29322 29323 29349 +29322 29349 29348 +29323 29324 29349 +29324 29350 29349 +29324 29325 29351 +29324 29351 29350 +29325 29326 29351 +29326 29352 29351 +29326 29327 29353 +29326 29353 29352 +29327 29328 29353 +29328 29354 29353 +29328 29329 29355 +29328 29355 29354 +29329 29330 29355 +29330 29356 29355 +29330 29331 29357 +29330 29357 29356 +29331 29332 29357 +29332 29358 29357 +29332 29333 29359 +29332 29359 29358 +29333 8368 29359 +8368 8488 29359 +29334 29335 29360 +29335 29361 29360 +29335 29336 29362 +29335 29362 29361 +29336 29337 29362 +29337 29363 29362 +29337 29338 29364 +29337 29364 29363 +29338 29339 29364 +29339 29365 29364 +29339 29340 29366 +29339 29366 29365 +29340 29341 29366 +29341 29367 29366 +29341 29342 29368 +29341 29368 29367 +29342 29343 29368 +29343 29369 29368 +29343 29344 29370 +29343 29370 29369 +29344 29345 29370 +29345 29371 29370 +29345 29346 29372 +29345 29372 29371 +29346 29347 29372 +29347 29373 29372 +29347 29348 29374 +29347 29374 29373 +29348 29349 29374 +29349 29375 29374 +29349 29350 29376 +29349 29376 29375 +29350 29351 29376 +29351 29377 29376 +29351 29352 29378 +29351 29378 29377 +29352 29353 29378 +29353 29379 29378 +29353 29354 29380 +29353 29380 29379 +29354 29355 29380 +29355 29381 29380 +29355 29356 29382 +29355 29382 29381 +29356 29357 29382 +29357 29383 29382 +29357 29358 29384 +29357 29384 29383 +29358 29359 29384 +29359 29385 29384 +29359 8488 8608 +29359 8608 29385 +29360 29361 29387 +29360 29387 29386 +29361 29362 29387 +29362 29388 29387 +29362 29363 29389 +29362 29389 29388 +29363 29364 29389 +29364 29390 29389 +29364 29365 29391 +29364 29391 29390 +29365 29366 29391 +29366 29392 29391 +29366 29367 29393 +29366 29393 29392 +29367 29368 29393 +29368 29394 29393 +29368 29369 29395 +29368 29395 29394 +29369 29370 29395 +29370 29396 29395 +29370 29371 29397 +29370 29397 29396 +29371 29372 29397 +29372 29398 29397 +29372 29373 29399 +29372 29399 29398 +29373 29374 29399 +29374 29400 29399 +29374 29375 29401 +29374 29401 29400 +29375 29376 29401 +29376 29402 29401 +29376 29377 29403 +29376 29403 29402 +29377 29378 29403 +29378 29404 29403 +29378 29379 29405 +29378 29405 29404 +29379 29380 29405 +29380 29406 29405 +29380 29381 29407 +29380 29407 29406 +29381 29382 29407 +29382 29408 29407 +29382 29383 29409 +29382 29409 29408 +29383 29384 29409 +29384 29410 29409 +29384 29385 29411 +29384 29411 29410 +29385 8608 29411 +8608 8728 29411 +29386 29387 29412 +29387 29413 29412 +29387 29388 29414 +29387 29414 29413 +29388 29389 29414 +29389 29415 29414 +29389 29390 29416 +29389 29416 29415 +29390 29391 29416 +29391 29417 29416 +29391 29392 29418 +29391 29418 29417 +29392 29393 29418 +29393 29419 29418 +29393 29394 29420 +29393 29420 29419 +29394 29395 29420 +29395 29421 29420 +29395 29396 29422 +29395 29422 29421 +29396 29397 29422 +29397 29423 29422 +29397 29398 29424 +29397 29424 29423 +29398 29399 29424 +29399 29425 29424 +29399 29400 29426 +29399 29426 29425 +29400 29401 29426 +29401 29427 29426 +29401 29402 29428 +29401 29428 29427 +29402 29403 29428 +29403 29429 29428 +29403 29404 29430 +29403 29430 29429 +29404 29405 29430 +29405 29431 29430 +29405 29406 29432 +29405 29432 29431 +29406 29407 29432 +29407 29433 29432 +29407 29408 29434 +29407 29434 29433 +29408 29409 29434 +29409 29435 29434 +29409 29410 29436 +29409 29436 29435 +29410 29411 29436 +29411 29437 29436 +29411 8728 8848 +29411 8848 29437 +29412 29413 29439 +29412 29439 29438 +29413 29414 29439 +29414 29440 29439 +29414 29415 29441 +29414 29441 29440 +29415 29416 29441 +29416 29442 29441 +29416 29417 29443 +29416 29443 29442 +29417 29418 29443 +29418 29444 29443 +29418 29419 29445 +29418 29445 29444 +29419 29420 29445 +29420 29446 29445 +29420 29421 29447 +29420 29447 29446 +29421 29422 29447 +29422 29448 29447 +29422 29423 29449 +29422 29449 29448 +29423 29424 29449 +29424 29450 29449 +29424 29425 29451 +29424 29451 29450 +29425 29426 29451 +29426 29452 29451 +29426 29427 29453 +29426 29453 29452 +29427 29428 29453 +29428 29454 29453 +29428 29429 29455 +29428 29455 29454 +29429 29430 29455 +29430 29456 29455 +29430 29431 29457 +29430 29457 29456 +29431 29432 29457 +29432 29458 29457 +29432 29433 29459 +29432 29459 29458 +29433 29434 29459 +29434 29460 29459 +29434 29435 29461 +29434 29461 29460 +29435 29436 29461 +29436 29462 29461 +29436 29437 29463 +29436 29463 29462 +29437 8848 29463 +8848 8968 29463 +29438 29439 29464 +29439 29465 29464 +29439 29440 29466 +29439 29466 29465 +29440 29441 29466 +29441 29467 29466 +29441 29442 29468 +29441 29468 29467 +29442 29443 29468 +29443 29469 29468 +29443 29444 29470 +29443 29470 29469 +29444 29445 29470 +29445 29471 29470 +29445 29446 29472 +29445 29472 29471 +29446 29447 29472 +29447 29473 29472 +29447 29448 29474 +29447 29474 29473 +29448 29449 29474 +29449 29475 29474 +29449 29450 29476 +29449 29476 29475 +29450 29451 29476 +29451 29477 29476 +29451 29452 29478 +29451 29478 29477 +29452 29453 29478 +29453 29479 29478 +29453 29454 29480 +29453 29480 29479 +29454 29455 29480 +29455 29481 29480 +29455 29456 29482 +29455 29482 29481 +29456 29457 29482 +29457 29483 29482 +29457 29458 29484 +29457 29484 29483 +29458 29459 29484 +29459 29485 29484 +29459 29460 29486 +29459 29486 29485 +29460 29461 29486 +29461 29487 29486 +29461 29462 29488 +29461 29488 29487 +29462 29463 29488 +29463 29489 29488 +29463 8968 9088 +29463 9088 29489 +29464 29491 29490 +29464 29465 29492 +29464 29492 29491 +29465 29466 29492 +29466 29493 29492 +29466 29467 29494 +29466 29494 29493 +29467 29468 29494 +29468 29495 29494 +29468 29469 29496 +29468 29496 29495 +29469 29470 29496 +29470 29497 29496 +29470 29471 29498 +29470 29498 29497 +29471 29472 29498 +29472 29499 29498 +29472 29473 29500 +29472 29500 29499 +29473 29474 29500 +29474 29501 29500 +29474 29475 29502 +29474 29502 29501 +29475 29476 29502 +29476 29503 29502 +29476 29477 29504 +29476 29504 29503 +29477 29478 29504 +29478 29505 29504 +29478 29479 29506 +29478 29506 29505 +29479 29480 29506 +29480 29507 29506 +29480 29481 29508 +29480 29508 29507 +29481 29482 29508 +29482 29509 29508 +29482 29483 29510 +29482 29510 29509 +29483 29484 29510 +29484 29511 29510 +29484 29485 29512 +29484 29512 29511 +29485 29486 29512 +29486 29513 29512 +29486 29487 29514 +29486 29514 29513 +29487 29488 29514 +29488 29515 29514 +29488 29489 29516 +29488 29516 29515 +29489 9088 29516 +9088 9208 29516 +29490 29491 29518 +29490 29518 29517 +29491 29492 29518 +29492 29519 29518 +29492 29493 29520 +29492 29520 29519 +29493 29494 29520 +29494 29521 29520 +29494 29495 29522 +29494 29522 29521 +29495 29496 29522 +29496 29523 29522 +29496 29497 29524 +29496 29524 29523 +29497 29498 29524 +29498 29525 29524 +29498 29499 29526 +29498 29526 29525 +29499 29500 29526 +29500 29527 29526 +29500 29501 29528 +29500 29528 29527 +29501 29502 29528 +29502 29529 29528 +29502 29503 29530 +29502 29530 29529 +29503 29504 29530 +29504 29531 29530 +29504 29505 29532 +29504 29532 29531 +29505 29506 29532 +29506 29533 29532 +29506 29507 29534 +29506 29534 29533 +29507 29508 29534 +29508 29535 29534 +29508 29509 29536 +29508 29536 29535 +29509 29510 29536 +29510 29537 29536 +29510 29511 29538 +29510 29538 29537 +29511 29512 29538 +29512 29539 29538 +29512 29513 29540 +29512 29540 29539 +29513 29514 29540 +29514 29541 29540 +29514 29515 29542 +29514 29542 29541 +29515 29516 29542 +29516 29543 29542 +29516 9208 9328 +29516 9328 29543 +29517 29518 29544 +29518 29545 29544 +29518 29519 29546 +29518 29546 29545 +29519 29520 29546 +29520 29547 29546 +29520 29521 29548 +29520 29548 29547 +29521 29522 29548 +29522 29549 29548 +29522 29523 29550 +29522 29550 29549 +29523 29524 29550 +29524 29551 29550 +29524 29525 29552 +29524 29552 29551 +29525 29526 29552 +29526 29553 29552 +29526 29527 29554 +29526 29554 29553 +29527 29528 29554 +29528 29555 29554 +29528 29529 29556 +29528 29556 29555 +29529 29530 29556 +29530 29557 29556 +29530 29531 29558 +29530 29558 29557 +29531 29532 29558 +29532 29559 29558 +29532 29533 29560 +29532 29560 29559 +29533 29534 29560 +29534 29561 29560 +29534 29535 29562 +29534 29562 29561 +29535 29536 29562 +29536 29563 29562 +29536 29537 29564 +29536 29564 29563 +29537 29538 29564 +29538 29565 29564 +29538 29539 29566 +29538 29566 29565 +29539 29540 29566 +29540 29567 29566 +29540 29541 29568 +29540 29568 29567 +29541 29542 29568 +29542 29569 29568 +29542 29543 29570 +29542 29570 29569 +29543 9328 29570 +9328 9448 29570 +29544 29545 29572 +29544 29572 29571 +29545 29546 29572 +29546 29573 29572 +29546 29547 29574 +29546 29574 29573 +29547 29548 29574 +29548 29575 29574 +29548 29549 29576 +29548 29576 29575 +29549 29550 29576 +29550 29577 29576 +29550 29551 29578 +29550 29578 29577 +29551 29552 29578 +29552 29579 29578 +29552 29553 29580 +29552 29580 29579 +29553 29554 29580 +29554 29581 29580 +29554 29555 29582 +29554 29582 29581 +29555 29556 29582 +29556 29583 29582 +29556 29557 29584 +29556 29584 29583 +29557 29558 29584 +29558 29585 29584 +29558 29559 29586 +29558 29586 29585 +29559 29560 29586 +29560 29587 29586 +29560 29561 29588 +29560 29588 29587 +29561 29562 29588 +29562 29589 29588 +29562 29563 29590 +29562 29590 29589 +29563 29564 29590 +29564 29591 29590 +29564 29565 29592 +29564 29592 29591 +29565 29566 29592 +29566 29593 29592 +29566 29567 29594 +29566 29594 29593 +29567 29568 29594 +29568 29595 29594 +29568 29569 29596 +29568 29596 29595 +29569 29570 29596 +29570 29597 29596 +29570 9448 9568 +29570 9568 29597 +29571 29572 29598 +29572 29599 29598 +29572 29573 29600 +29572 29600 29599 +29573 29574 29600 +29574 29601 29600 +29574 29575 29602 +29574 29602 29601 +29575 29576 29602 +29576 29603 29602 +29576 29577 29604 +29576 29604 29603 +29577 29578 29604 +29578 29605 29604 +29578 29579 29606 +29578 29606 29605 +29579 29580 29606 +29580 29607 29606 +29580 29581 29608 +29580 29608 29607 +29581 29582 29608 +29582 29609 29608 +29582 29583 29610 +29582 29610 29609 +29583 29584 29610 +29584 29611 29610 +29584 29585 29612 +29584 29612 29611 +29585 29586 29612 +29586 29613 29612 +29586 29587 29614 +29586 29614 29613 +29587 29588 29614 +29588 29615 29614 +29588 29589 29616 +29588 29616 29615 +29589 29590 29616 +29590 29617 29616 +29590 29591 29618 +29590 29618 29617 +29591 29592 29618 +29592 29619 29618 +29592 29593 29620 +29592 29620 29619 +29593 29594 29620 +29594 29621 29620 +29594 29595 29622 +29594 29622 29621 +29595 29596 29622 +29596 29623 29622 +29596 29597 29624 +29596 29624 29623 +29597 9568 29624 +9568 9688 29624 +29598 29599 29626 +29598 29626 29625 +29599 29600 29626 +29600 29627 29626 +29600 29601 29628 +29600 29628 29627 +29601 29602 29628 +29602 29629 29628 +29602 29603 29630 +29602 29630 29629 +29603 29604 29630 +29604 29631 29630 +29604 29605 29632 +29604 29632 29631 +29605 29606 29632 +29606 29633 29632 +29606 29607 29634 +29606 29634 29633 +29607 29608 29634 +29608 29635 29634 +29608 29609 29636 +29608 29636 29635 +29609 29610 29636 +29610 29637 29636 +29610 29611 29638 +29610 29638 29637 +29611 29612 29638 +29612 29639 29638 +29612 29613 29640 +29612 29640 29639 +29613 29614 29640 +29614 29641 29640 +29614 29615 29642 +29614 29642 29641 +29615 29616 29642 +29616 29643 29642 +29616 29617 29644 +29616 29644 29643 +29617 29618 29644 +29618 29645 29644 +29618 29619 29646 +29618 29646 29645 +29619 29620 29646 +29620 29647 29646 +29620 29621 29648 +29620 29648 29647 +29621 29622 29648 +29622 29649 29648 +29622 29623 29650 +29622 29650 29649 +29623 29624 29650 +29624 29651 29650 +29624 9688 9809 +29624 9809 29651 +29625 29626 29652 +29626 29653 29652 +29626 29627 29654 +29626 29654 29653 +29627 29628 29654 +29628 29655 29654 +29628 29629 29656 +29628 29656 29655 +29629 29630 29656 +29630 29657 29656 +29630 29631 29658 +29630 29658 29657 +29631 29632 29658 +29632 29659 29658 +29632 29633 29660 +29632 29660 29659 +29633 29634 29660 +29634 29661 29660 +29634 29635 29662 +29634 29662 29661 +29635 29636 29662 +29636 29663 29662 +29636 29637 29664 +29636 29664 29663 +29637 29638 29664 +29638 29665 29664 +29638 29639 29666 +29638 29666 29665 +29639 29640 29666 +29640 29667 29666 +29640 29641 29668 +29640 29668 29667 +29641 29642 29668 +29642 29669 29668 +29642 29643 29670 +29642 29670 29669 +29643 29644 29670 +29644 29671 29670 +29644 29645 29672 +29644 29672 29671 +29645 29646 29672 +29646 29673 29672 +29646 29647 29674 +29646 29674 29673 +29647 29648 29674 +29648 29675 29674 +29648 29649 29676 +29648 29676 29675 +29649 29650 29676 +29650 29677 29676 +29650 29651 29678 +29650 29678 29677 +29651 9809 29678 +9809 9931 29678 +29652 29653 29680 +29652 29680 29679 +29653 29654 29680 +29654 29681 29680 +29654 29655 29682 +29654 29682 29681 +29655 29656 29682 +29656 29683 29682 +29656 29657 29684 +29656 29684 29683 +29657 29658 29684 +29658 29685 29684 +29658 29659 29686 +29658 29686 29685 +29659 29660 29686 +29660 29687 29686 +29660 29661 29688 +29660 29688 29687 +29661 29662 29688 +29662 29689 29688 +29662 29663 29690 +29662 29690 29689 +29663 29664 29690 +29664 29691 29690 +29664 29665 29692 +29664 29692 29691 +29665 29666 29692 +29666 29693 29692 +29666 29667 29694 +29666 29694 29693 +29667 29668 29694 +29668 29695 29694 +29668 29669 29696 +29668 29696 29695 +29669 29670 29696 +29670 29697 29696 +29670 29671 29698 +29670 29698 29697 +29671 29672 29698 +29672 29699 29698 +29672 29673 29700 +29672 29700 29699 +29673 29674 29700 +29674 29701 29700 +29674 29675 29702 +29674 29702 29701 +29675 29676 29702 +29676 29703 29702 +29676 29677 29704 +29676 29704 29703 +29677 29678 29704 +29678 29705 29704 +29678 9931 10054 +29678 10054 29705 +29679 29680 29706 +29680 29707 29706 +29680 29681 29708 +29680 29708 29707 +29681 29682 29708 +29682 29709 29708 +29682 29683 29710 +29682 29710 29709 +29683 29684 29710 +29684 29711 29710 +29684 29685 29712 +29684 29712 29711 +29685 29686 29712 +29686 29713 29712 +29686 29687 29714 +29686 29714 29713 +29687 29688 29714 +29688 29715 29714 +29688 29689 29716 +29688 29716 29715 +29689 29690 29716 +29690 29717 29716 +29690 29691 29718 +29690 29718 29717 +29691 29692 29718 +29692 29719 29718 +29692 29693 29720 +29692 29720 29719 +29693 29694 29720 +29694 29721 29720 +29694 29695 29722 +29694 29722 29721 +29695 29696 29722 +29696 29723 29722 +29696 29697 29724 +29696 29724 29723 +29697 29698 29724 +29698 29725 29724 +29698 29699 29726 +29698 29726 29725 +29699 29700 29726 +29700 29727 29726 +29700 29701 29728 +29700 29728 29727 +29701 29702 29728 +29702 29729 29728 +29702 29703 29730 +29702 29730 29729 +29703 29704 29730 +29704 29731 29730 +29704 29705 29732 +29704 29732 29731 +29705 10054 29732 +10054 10179 29732 +29706 29707 29734 +29706 29734 29733 +29707 29708 29734 +29708 29735 29734 +29708 29709 29736 +29708 29736 29735 +29709 29710 29736 +29710 29737 29736 +29710 29711 29738 +29710 29738 29737 +29711 29712 29738 +29712 29739 29738 +29712 29713 29740 +29712 29740 29739 +29713 29714 29740 +29714 29741 29740 +29714 29715 29742 +29714 29742 29741 +29715 29716 29742 +29716 29743 29742 +29716 29717 29744 +29716 29744 29743 +29717 29718 29744 +29718 29745 29744 +29718 29719 29746 +29718 29746 29745 +29719 29720 29746 +29720 29747 29746 +29720 29721 29748 +29720 29748 29747 +29721 29722 29748 +29722 29749 29748 +29722 29723 29750 +29722 29750 29749 +29723 29724 29750 +29724 29751 29750 +29724 29725 29752 +29724 29752 29751 +29725 29726 29752 +29726 29753 29752 +29726 29727 29754 +29726 29754 29753 +29727 29728 29754 +29728 29755 29754 +29728 29729 29756 +29728 29756 29755 +29729 29730 29756 +29730 29757 29756 +29730 29731 29758 +29730 29758 29757 +29731 29732 29758 +29732 29759 29758 +29732 10179 10305 +29732 10305 29759 +29733 29734 29760 +29734 29761 29760 +29734 29735 29762 +29734 29762 29761 +29735 29736 29762 +29736 29763 29762 +29736 29737 29764 +29736 29764 29763 +29737 29738 29764 +29738 29765 29764 +29738 29739 29766 +29738 29766 29765 +29739 29740 29766 +29740 29767 29766 +29740 29741 29768 +29740 29768 29767 +29741 29742 29768 +29742 29769 29768 +29742 29743 29770 +29742 29770 29769 +29743 29744 29770 +29744 29771 29770 +29744 29745 29772 +29744 29772 29771 +29745 29746 29772 +29746 29773 29772 +29746 29747 29774 +29746 29774 29773 +29747 29748 29774 +29748 29775 29774 +29748 29749 29776 +29748 29776 29775 +29749 29750 29776 +29750 29777 29776 +29750 29751 29778 +29750 29778 29777 +29751 29752 29778 +29752 29779 29778 +29752 29753 29780 +29752 29780 29779 +29753 29754 29780 +29754 29781 29780 +29754 29755 29782 +29754 29782 29781 +29755 29756 29782 +29756 29783 29782 +29756 29757 29784 +29756 29784 29783 +29757 29758 29784 +29758 29785 29784 +29758 29759 29786 +29758 29786 29785 +29759 10305 29786 +10305 10433 29786 +29760 29761 29788 +29760 29788 29787 +29761 29762 29788 +29762 29789 29788 +29762 29763 29790 +29762 29790 29789 +29763 29764 29790 +29764 29791 29790 +29764 29765 29792 +29764 29792 29791 +29765 29766 29792 +29766 29793 29792 +29766 29767 29794 +29766 29794 29793 +29767 29768 29794 +29768 29795 29794 +29768 29769 29796 +29768 29796 29795 +29769 29770 29796 +29770 29797 29796 +29770 29771 29798 +29770 29798 29797 +29771 29772 29798 +29772 29799 29798 +29772 29773 29800 +29772 29800 29799 +29773 29774 29800 +29774 29801 29800 +29774 29775 29802 +29774 29802 29801 +29775 29776 29802 +29776 29803 29802 +29776 29777 29804 +29776 29804 29803 +29777 29778 29804 +29778 29805 29804 +29778 29779 29806 +29778 29806 29805 +29779 29780 29806 +29780 29807 29806 +29780 29781 29808 +29780 29808 29807 +29781 29782 29808 +29782 29809 29808 +29782 29783 29810 +29782 29810 29809 +29783 29784 29810 +29784 29811 29810 +29784 29785 29812 +29784 29812 29811 +29785 29786 29812 +29786 29813 29812 +29786 10433 10562 +29786 10562 29813 +29787 29788 29814 +29788 29815 29814 +29788 29789 29816 +29788 29816 29815 +29789 29790 29816 +29790 29817 29816 +29790 29791 29818 +29790 29818 29817 +29791 29792 29818 +29792 29819 29818 +29792 29793 29820 +29792 29820 29819 +29793 29794 29820 +29794 29821 29820 +29794 29795 29822 +29794 29822 29821 +29795 29796 29822 +29796 29823 29822 +29796 29797 29824 +29796 29824 29823 +29797 29798 29824 +29798 29825 29824 +29798 29799 29826 +29798 29826 29825 +29799 29800 29826 +29800 29827 29826 +29800 29801 29828 +29800 29828 29827 +29801 29802 29828 +29802 29829 29828 +29802 29803 29830 +29802 29830 29829 +29803 29804 29830 +29804 29831 29830 +29804 29805 29832 +29804 29832 29831 +29805 29806 29832 +29806 29833 29832 +29806 29807 29834 +29806 29834 29833 +29807 29808 29834 +29808 29835 29834 +29808 29809 29836 +29808 29836 29835 +29809 29810 29836 +29810 29837 29836 +29810 29811 29838 +29810 29838 29837 +29811 29812 29838 +29812 29839 29838 +29812 29813 29840 +29812 29840 29839 +29813 10562 29840 +10562 10691 29840 +29814 29815 29842 +29814 29842 29841 +29815 29816 29842 +29816 29843 29842 +29816 29817 29844 +29816 29844 29843 +29817 29818 29844 +29818 29845 29844 +29818 29819 29846 +29818 29846 29845 +29819 29820 29846 +29820 29847 29846 +29820 29821 29848 +29820 29848 29847 +29821 29822 29848 +29822 29849 29848 +29822 29823 29850 +29822 29850 29849 +29823 29824 29850 +29824 29851 29850 +29824 29825 29852 +29824 29852 29851 +29825 29826 29852 +29826 29853 29852 +29826 29827 29854 +29826 29854 29853 +29827 29828 29854 +29828 29855 29854 +29828 29829 29856 +29828 29856 29855 +29829 29830 29856 +29830 29857 29856 +29830 29831 29858 +29830 29858 29857 +29831 29832 29858 +29832 29859 29858 +29832 29833 29860 +29832 29860 29859 +29833 29834 29860 +29834 29861 29860 +29834 29835 29862 +29834 29862 29861 +29835 29836 29862 +29836 29863 29862 +29836 29837 29864 +29836 29864 29863 +29837 29838 29864 +29838 29865 29864 +29838 29839 29866 +29838 29866 29865 +29839 29840 29866 +29840 29867 29866 +29840 10691 10820 +29840 10820 29867 +29841 29842 29868 +29842 29869 29868 +29842 29843 29870 +29842 29870 29869 +29843 29844 29870 +29844 29871 29870 +29844 29845 29872 +29844 29872 29871 +29845 29846 29872 +29846 29873 29872 +29846 29847 29874 +29846 29874 29873 +29847 29848 29874 +29848 29875 29874 +29848 29849 29876 +29848 29876 29875 +29849 29850 29876 +29850 29877 29876 +29850 29851 29878 +29850 29878 29877 +29851 29852 29878 +29852 29879 29878 +29852 29853 29880 +29852 29880 29879 +29853 29854 29880 +29854 29881 29880 +29854 29855 29882 +29854 29882 29881 +29855 29856 29882 +29856 29883 29882 +29856 29857 29884 +29856 29884 29883 +29857 29858 29884 +29858 29885 29884 +29858 29859 29886 +29858 29886 29885 +29859 29860 29886 +29860 29887 29886 +29860 29861 29888 +29860 29888 29887 +29861 29862 29888 +29862 29889 29888 +29862 29863 29890 +29862 29890 29889 +29863 29864 29890 +29864 29891 29890 +29864 29865 29892 +29864 29892 29891 +29865 29866 29892 +29866 29893 29892 +29866 29867 29894 +29866 29894 29893 +29867 10820 29894 +10820 10949 29894 +29868 29896 29895 +29868 29869 29897 +29868 29897 29896 +29869 29870 29897 +29870 29898 29897 +29870 29871 29899 +29870 29899 29898 +29871 29872 29899 +29872 29900 29899 +29872 29873 29901 +29872 29901 29900 +29873 29874 29901 +29874 29902 29901 +29874 29875 29903 +29874 29903 29902 +29875 29876 29903 +29876 29904 29903 +29876 29877 29905 +29876 29905 29904 +29877 29878 29905 +29878 29906 29905 +29878 29879 29907 +29878 29907 29906 +29879 29880 29907 +29880 29908 29907 +29880 29881 29909 +29880 29909 29908 +29881 29882 29909 +29882 29910 29909 +29882 29883 29911 +29882 29911 29910 +29883 29884 29911 +29884 29912 29911 +29884 29885 29913 +29884 29913 29912 +29885 29886 29913 +29886 29914 29913 +29886 29887 29915 +29886 29915 29914 +29887 29888 29915 +29888 29916 29915 +29888 29889 29917 +29888 29917 29916 +29889 29890 29917 +29890 29918 29917 +29890 29891 29919 +29890 29919 29918 +29891 29892 29919 +29892 29920 29919 +29892 29893 29921 +29892 29921 29920 +29893 29894 29921 +29894 29922 29921 +29894 10949 11078 +29894 11078 29922 +29895 29896 29924 +29895 29924 29923 +29896 29897 29924 +29897 29925 29924 +29897 29898 29926 +29897 29926 29925 +29898 29899 29926 +29899 29927 29926 +29899 29900 29928 +29899 29928 29927 +29900 29901 29928 +29901 29929 29928 +29901 29902 29930 +29901 29930 29929 +29902 29903 29930 +29903 29931 29930 +29903 29904 29932 +29903 29932 29931 +29904 29905 29932 +29905 29933 29932 +29905 29906 29934 +29905 29934 29933 +29906 29907 29934 +29907 29935 29934 +29907 29908 29936 +29907 29936 29935 +29908 29909 29936 +29909 29937 29936 +29909 29910 29938 +29909 29938 29937 +29910 29911 29938 +29911 29939 29938 +29911 29912 29940 +29911 29940 29939 +29912 29913 29940 +29913 29941 29940 +29913 29914 29942 +29913 29942 29941 +29914 29915 29942 +29915 29943 29942 +29915 29916 29944 +29915 29944 29943 +29916 29917 29944 +29917 29945 29944 +29917 29918 29946 +29917 29946 29945 +29918 29919 29946 +29919 29947 29946 +29919 29920 29948 +29919 29948 29947 +29920 29921 29948 +29921 29949 29948 +29921 29922 29950 +29921 29950 29949 +29922 11078 29950 +11078 11207 29950 +29923 29924 29951 +29924 29952 29951 +29924 29925 29953 +29924 29953 29952 +29925 29926 29953 +29926 29954 29953 +29926 29927 29955 +29926 29955 29954 +29927 29928 29955 +29928 29956 29955 +29928 29929 29957 +29928 29957 29956 +29929 29930 29957 +29930 29958 29957 +29930 29931 29959 +29930 29959 29958 +29931 29932 29959 +29932 29960 29959 +29932 29933 29961 +29932 29961 29960 +29933 29934 29961 +29934 29962 29961 +29934 29935 29963 +29934 29963 29962 +29935 29936 29963 +29936 29964 29963 +29936 29937 29965 +29936 29965 29964 +29937 29938 29965 +29938 29966 29965 +29938 29939 29967 +29938 29967 29966 +29939 29940 29967 +29940 29968 29967 +29940 29941 29969 +29940 29969 29968 +29941 29942 29969 +29942 29970 29969 +29942 29943 29971 +29942 29971 29970 +29943 29944 29971 +29944 29972 29971 +29944 29945 29973 +29944 29973 29972 +29945 29946 29973 +29946 29974 29973 +29946 29947 29975 +29946 29975 29974 +29947 29948 29975 +29948 29976 29975 +29948 29949 29977 +29948 29977 29976 +29949 29950 29977 +29950 29978 29977 +29950 11207 11336 +29950 11336 29978 +29951 29952 29980 +29951 29980 29979 +29952 29953 29980 +29953 29981 29980 +29953 29954 29982 +29953 29982 29981 +29954 29955 29982 +29955 29983 29982 +29955 29956 29984 +29955 29984 29983 +29956 29957 29984 +29957 29985 29984 +29957 29958 29986 +29957 29986 29985 +29958 29959 29986 +29959 29987 29986 +29959 29960 29988 +29959 29988 29987 +29960 29961 29988 +29961 29989 29988 +29961 29962 29990 +29961 29990 29989 +29962 29963 29990 +29963 29991 29990 +29963 29964 29992 +29963 29992 29991 +29964 29965 29992 +29965 29993 29992 +29965 29966 29994 +29965 29994 29993 +29966 29967 29994 +29967 29995 29994 +29967 29968 29996 +29967 29996 29995 +29968 29969 29996 +29969 29997 29996 +29969 29970 29998 +29969 29998 29997 +29970 29971 29998 +29971 29999 29998 +29971 29972 30000 +29971 30000 29999 +29972 29973 30000 +29973 30001 30000 +29973 29974 30002 +29973 30002 30001 +29974 29975 30002 +29975 30003 30002 +29975 29976 30004 +29975 30004 30003 +29976 29977 30004 +29977 30005 30004 +29977 29978 30006 +29977 30006 30005 +29978 11336 30006 +11336 11465 30006 +29979 29980 30007 +29980 30008 30007 +29980 29981 30009 +29980 30009 30008 +29981 29982 30009 +29982 30010 30009 +29982 29983 30011 +29982 30011 30010 +29983 29984 30011 +29984 30012 30011 +29984 29985 30013 +29984 30013 30012 +29985 29986 30013 +29986 30014 30013 +29986 29987 30015 +29986 30015 30014 +29987 29988 30015 +29988 30016 30015 +29988 29989 30017 +29988 30017 30016 +29989 29990 30017 +29990 30018 30017 +29990 29991 30019 +29990 30019 30018 +29991 29992 30019 +29992 30020 30019 +29992 29993 30021 +29992 30021 30020 +29993 29994 30021 +29994 30022 30021 +29994 29995 30023 +29994 30023 30022 +29995 29996 30023 +29996 30024 30023 +29996 29997 30025 +29996 30025 30024 +29997 29998 30025 +29998 30026 30025 +29998 29999 30027 +29998 30027 30026 +29999 30000 30027 +30000 30028 30027 +30000 30001 30029 +30000 30029 30028 +30001 30002 30029 +30002 30030 30029 +30002 30003 30031 +30002 30031 30030 +30003 30004 30031 +30004 30032 30031 +30004 30005 30033 +30004 30033 30032 +30005 30006 30033 +30006 30034 30033 +30006 11465 11594 +30006 11594 30034 +30007 30008 30036 +30007 30036 30035 +30008 30009 30036 +30009 30037 30036 +30009 30010 30038 +30009 30038 30037 +30010 30011 30038 +30011 30039 30038 +30011 30012 30040 +30011 30040 30039 +30012 30013 30040 +30013 30041 30040 +30013 30014 30042 +30013 30042 30041 +30014 30015 30042 +30015 30043 30042 +30015 30016 30044 +30015 30044 30043 +30016 30017 30044 +30017 30045 30044 +30017 30018 30046 +30017 30046 30045 +30018 30019 30046 +30019 30047 30046 +30019 30020 30048 +30019 30048 30047 +30020 30021 30048 +30021 30049 30048 +30021 30022 30050 +30021 30050 30049 +30022 30023 30050 +30023 30051 30050 +30023 30024 30052 +30023 30052 30051 +30024 30025 30052 +30025 30053 30052 +30025 30026 30054 +30025 30054 30053 +30026 30027 30054 +30027 30055 30054 +30027 30028 30056 +30027 30056 30055 +30028 30029 30056 +30029 30057 30056 +30029 30030 30058 +30029 30058 30057 +30030 30031 30058 +30031 30059 30058 +30031 30032 30060 +30031 30060 30059 +30032 30033 30060 +30033 30061 30060 +30033 30034 30062 +30033 30062 30061 +30034 11594 30062 +11594 11723 30062 +30035 30036 30063 +30036 30064 30063 +30036 30037 30065 +30036 30065 30064 +30037 30038 30065 +30038 30066 30065 +30038 30039 30067 +30038 30067 30066 +30039 30040 30067 +30040 30068 30067 +30040 30041 30069 +30040 30069 30068 +30041 30042 30069 +30042 30070 30069 +30042 30043 30071 +30042 30071 30070 +30043 30044 30071 +30044 30072 30071 +30044 30045 30073 +30044 30073 30072 +30045 30046 30073 +30046 30074 30073 +30046 30047 30075 +30046 30075 30074 +30047 30048 30075 +30048 30076 30075 +30048 30049 30077 +30048 30077 30076 +30049 30050 30077 +30050 30078 30077 +30050 30051 30079 +30050 30079 30078 +30051 30052 30079 +30052 30080 30079 +30052 30053 30081 +30052 30081 30080 +30053 30054 30081 +30054 30082 30081 +30054 30055 30083 +30054 30083 30082 +30055 30056 30083 +30056 30084 30083 +30056 30057 30085 +30056 30085 30084 +30057 30058 30085 +30058 30086 30085 +30058 30059 30087 +30058 30087 30086 +30059 30060 30087 +30060 30088 30087 +30060 30061 30089 +30060 30089 30088 +30061 30062 30089 +30062 30090 30089 +30062 11723 11852 +30062 11852 30090 +30063 30064 30092 +30063 30092 30091 +30064 30065 30092 +30065 30093 30092 +30065 30066 30094 +30065 30094 30093 +30066 30067 30094 +30067 30095 30094 +30067 30068 30096 +30067 30096 30095 +30068 30069 30096 +30069 30097 30096 +30069 30070 30098 +30069 30098 30097 +30070 30071 30098 +30071 30099 30098 +30071 30072 30100 +30071 30100 30099 +30072 30073 30100 +30073 30101 30100 +30073 30074 30102 +30073 30102 30101 +30074 30075 30102 +30075 30103 30102 +30075 30076 30104 +30075 30104 30103 +30076 30077 30104 +30077 30105 30104 +30077 30078 30106 +30077 30106 30105 +30078 30079 30106 +30079 30107 30106 +30079 30080 30108 +30079 30108 30107 +30080 30081 30108 +30081 30109 30108 +30081 30082 30110 +30081 30110 30109 +30082 30083 30110 +30083 30111 30110 +30083 30084 30112 +30083 30112 30111 +30084 30085 30112 +30085 30113 30112 +30085 30086 30114 +30085 30114 30113 +30086 30087 30114 +30087 30115 30114 +30087 30088 30116 +30087 30116 30115 +30088 30089 30116 +30089 30117 30116 +30089 30090 30118 +30089 30118 30117 +30090 11852 30118 +11852 11981 30118 +30091 30092 30119 +30092 30120 30119 +30092 30093 30121 +30092 30121 30120 +30093 30094 30121 +30094 30122 30121 +30094 30095 30123 +30094 30123 30122 +30095 30096 30123 +30096 30124 30123 +30096 30097 30125 +30096 30125 30124 +30097 30098 30125 +30098 30126 30125 +30098 30099 30127 +30098 30127 30126 +30099 30100 30127 +30100 30128 30127 +30100 30101 30129 +30100 30129 30128 +30101 30102 30129 +30102 30130 30129 +30102 30103 30131 +30102 30131 30130 +30103 30104 30131 +30104 30132 30131 +30104 30105 30133 +30104 30133 30132 +30105 30106 30133 +30106 30134 30133 +30106 30107 30135 +30106 30135 30134 +30107 30108 30135 +30108 30136 30135 +30108 30109 30137 +30108 30137 30136 +30109 30110 30137 +30110 30138 30137 +30110 30111 30139 +30110 30139 30138 +30111 30112 30139 +30112 30140 30139 +30112 30113 30141 +30112 30141 30140 +30113 30114 30141 +30114 30142 30141 +30114 30115 30143 +30114 30143 30142 +30115 30116 30143 +30116 30144 30143 +30116 30117 30145 +30116 30145 30144 +30117 30118 30145 +30118 30146 30145 +30118 11981 12110 +30118 12110 30146 +30119 30120 30148 +30119 30148 30147 +30120 30121 30148 +30121 30149 30148 +30121 30122 30150 +30121 30150 30149 +30122 30123 30150 +30123 30151 30150 +30123 30124 30152 +30123 30152 30151 +30124 30125 30152 +30125 30153 30152 +30125 30126 30154 +30125 30154 30153 +30126 30127 30154 +30127 30155 30154 +30127 30128 30156 +30127 30156 30155 +30128 30129 30156 +30129 30157 30156 +30129 30130 30158 +30129 30158 30157 +30130 30131 30158 +30131 30159 30158 +30131 30132 30160 +30131 30160 30159 +30132 30133 30160 +30133 30161 30160 +30133 30134 30162 +30133 30162 30161 +30134 30135 30162 +30135 30163 30162 +30135 30136 30164 +30135 30164 30163 +30136 30137 30164 +30137 30165 30164 +30137 30138 30166 +30137 30166 30165 +30138 30139 30166 +30139 30167 30166 +30139 30140 30168 +30139 30168 30167 +30140 30141 30168 +30141 30169 30168 +30141 30142 30170 +30141 30170 30169 +30142 30143 30170 +30143 30171 30170 +30143 30144 30172 +30143 30172 30171 +30144 30145 30172 +30145 30173 30172 +30145 30146 30174 +30145 30174 30173 +30146 12110 30174 +12110 12239 30174 +30147 30148 30175 +30148 30176 30175 +30148 30149 30177 +30148 30177 30176 +30149 30150 30177 +30150 30178 30177 +30150 30151 30179 +30150 30179 30178 +30151 30152 30179 +30152 30180 30179 +30152 30153 30181 +30152 30181 30180 +30153 30154 30181 +30154 30182 30181 +30154 30155 30183 +30154 30183 30182 +30155 30156 30183 +30156 30184 30183 +30156 30157 30185 +30156 30185 30184 +30157 30158 30185 +30158 30186 30185 +30158 30159 30187 +30158 30187 30186 +30159 30160 30187 +30160 30188 30187 +30160 30161 30189 +30160 30189 30188 +30161 30162 30189 +30162 30190 30189 +30162 30163 30191 +30162 30191 30190 +30163 30164 30191 +30164 30192 30191 +30164 30165 30193 +30164 30193 30192 +30165 30166 30193 +30166 30194 30193 +30166 30167 30195 +30166 30195 30194 +30167 30168 30195 +30168 30196 30195 +30168 30169 30197 +30168 30197 30196 +30169 30170 30197 +30170 30198 30197 +30170 30171 30199 +30170 30199 30198 +30171 30172 30199 +30172 30200 30199 +30172 30173 30201 +30172 30201 30200 +30173 30174 30201 +30174 30202 30201 +30174 12239 12368 +30174 12368 30202 +30175 30204 30203 +30175 30176 30205 +30175 30205 30204 +30176 30177 30205 +30177 30206 30205 +30177 30178 30207 +30177 30207 30206 +30178 30179 30207 +30179 30208 30207 +30179 30180 30209 +30179 30209 30208 +30180 30181 30209 +30181 30210 30209 +30181 30182 30211 +30181 30211 30210 +30182 30183 30211 +30183 30212 30211 +30183 30184 30213 +30183 30213 30212 +30184 30185 30213 +30185 30214 30213 +30185 30186 30215 +30185 30215 30214 +30186 30187 30215 +30187 30216 30215 +30187 30188 30217 +30187 30217 30216 +30188 30189 30217 +30189 30218 30217 +30189 30190 30219 +30189 30219 30218 +30190 30191 30219 +30191 30220 30219 +30191 30192 30221 +30191 30221 30220 +30192 30193 30221 +30193 30222 30221 +30193 30194 30223 +30193 30223 30222 +30194 30195 30223 +30195 30224 30223 +30195 30196 30225 +30195 30225 30224 +30196 30197 30225 +30197 30226 30225 +30197 30198 30227 +30197 30227 30226 +30198 30199 30227 +30199 30228 30227 +30199 30200 30229 +30199 30229 30228 +30200 30201 30229 +30201 30230 30229 +30201 30202 30231 +30201 30231 30230 +30202 12368 30231 +12368 12497 30231 +30203 30233 30232 +30203 30204 30234 +30203 30234 30233 +30204 30205 30234 +30205 30235 30234 +30205 30206 30236 +30205 30236 30235 +30206 30207 30236 +30207 30237 30236 +30207 30208 30238 +30207 30238 30237 +30208 30209 30238 +30209 30239 30238 +30209 30210 30240 +30209 30240 30239 +30210 30211 30240 +30211 30241 30240 +30211 30212 30242 +30211 30242 30241 +30212 30213 30242 +30213 30243 30242 +30213 30214 30244 +30213 30244 30243 +30214 30215 30244 +30215 30245 30244 +30215 30216 30246 +30215 30246 30245 +30216 30217 30246 +30217 30247 30246 +30217 30218 30248 +30217 30248 30247 +30218 30219 30248 +30219 30249 30248 +30219 30220 30250 +30219 30250 30249 +30220 30221 30250 +30221 30251 30250 +30221 30222 30252 +30221 30252 30251 +30222 30223 30252 +30223 30253 30252 +30223 30224 30254 +30223 30254 30253 +30224 30225 30254 +30225 30255 30254 +30225 30226 30256 +30225 30256 30255 +30226 30227 30256 +30227 30257 30256 +30227 30228 30258 +30227 30258 30257 +30228 30229 30258 +30229 30259 30258 +30229 30230 30260 +30229 30260 30259 +30230 30231 30260 +30231 30261 30260 +30231 12497 12626 +30231 12626 30261 +30232 30233 30263 +30232 30263 30262 +30233 30234 30263 +30234 30264 30263 +30234 30235 30265 +30234 30265 30264 +30235 30236 30265 +30236 30266 30265 +30236 30237 30267 +30236 30267 30266 +30237 30238 30267 +30238 30268 30267 +30238 30239 30269 +30238 30269 30268 +30239 30240 30269 +30240 30270 30269 +30240 30241 30271 +30240 30271 30270 +30241 30242 30271 +30242 30272 30271 +30242 30243 30273 +30242 30273 30272 +30243 30244 30273 +30244 30274 30273 +30244 30245 30275 +30244 30275 30274 +30245 30246 30275 +30246 30276 30275 +30246 30247 30277 +30246 30277 30276 +30247 30248 30277 +30248 30278 30277 +30248 30249 30279 +30248 30279 30278 +30249 30250 30279 +30250 30280 30279 +30250 30251 30281 +30250 30281 30280 +30251 30252 30281 +30252 30282 30281 +30252 30253 30283 +30252 30283 30282 +30253 30254 30283 +30254 30284 30283 +30254 30255 30285 +30254 30285 30284 +30255 30256 30285 +30256 30286 30285 +30256 30257 30287 +30256 30287 30286 +30257 30258 30287 +30258 30288 30287 +30258 30259 30289 +30258 30289 30288 +30259 30260 30289 +30260 30290 30289 +30260 30261 30291 +30260 30291 30290 +30261 12626 30291 +12626 12755 30291 +30262 30263 30292 +30263 30293 30292 +30263 30264 30294 +30263 30294 30293 +30264 30265 30294 +30265 30295 30294 +30265 30266 30296 +30265 30296 30295 +30266 30267 30296 +30267 30297 30296 +30267 30268 30298 +30267 30298 30297 +30268 30269 30298 +30269 30299 30298 +30269 30270 30300 +30269 30300 30299 +30270 30271 30300 +30271 30301 30300 +30271 30272 30302 +30271 30302 30301 +30272 30273 30302 +30273 30303 30302 +30273 30274 30304 +30273 30304 30303 +30274 30275 30304 +30275 30305 30304 +30275 30276 30306 +30275 30306 30305 +30276 30277 30306 +30277 30307 30306 +30277 30278 30308 +30277 30308 30307 +30278 30279 30308 +30279 30309 30308 +30279 30280 30310 +30279 30310 30309 +30280 30281 30310 +30281 30311 30310 +30281 30282 30312 +30281 30312 30311 +30282 30283 30312 +30283 30313 30312 +30283 30284 30314 +30283 30314 30313 +30284 30285 30314 +30285 30315 30314 +30285 30286 30316 +30285 30316 30315 +30286 30287 30316 +30287 30317 30316 +30287 30288 30318 +30287 30318 30317 +30288 30289 30318 +30289 30319 30318 +30289 30290 30320 +30289 30320 30319 +30290 30291 30320 +30291 30321 30320 +30291 12755 12884 +30291 12884 30321 +30292 30323 30322 +30292 30293 30324 +30292 30324 30323 +30293 30294 30324 +30294 30325 30324 +30294 30295 30326 +30294 30326 30325 +30295 30296 30326 +30296 30327 30326 +30296 30297 30328 +30296 30328 30327 +30297 30298 30328 +30298 30329 30328 +30298 30299 30330 +30298 30330 30329 +30299 30300 30330 +30300 30331 30330 +30300 30301 30332 +30300 30332 30331 +30301 30302 30332 +30302 30333 30332 +30302 30303 30334 +30302 30334 30333 +30303 30304 30334 +30304 30335 30334 +30304 30305 30336 +30304 30336 30335 +30305 30306 30336 +30306 30337 30336 +30306 30307 30338 +30306 30338 30337 +30307 30308 30338 +30308 30339 30338 +30308 30309 30340 +30308 30340 30339 +30309 30310 30340 +30310 30341 30340 +30310 30311 30342 +30310 30342 30341 +30311 30312 30342 +30312 30343 30342 +30312 30313 30344 +30312 30344 30343 +30313 30314 30344 +30314 30345 30344 +30314 30315 30346 +30314 30346 30345 +30315 30316 30346 +30316 30347 30346 +30316 30317 30348 +30316 30348 30347 +30317 30318 30348 +30318 30349 30348 +30318 30319 30350 +30318 30350 30349 +30319 30320 30350 +30320 30351 30350 +30320 30321 30352 +30320 30352 30351 +30321 12884 30352 +12884 13013 30352 +30322 30323 30354 +30322 30354 30353 +30323 30324 30354 +30324 30355 30354 +30324 30325 30356 +30324 30356 30355 +30325 30326 30356 +30326 30357 30356 +30326 30327 30358 +30326 30358 30357 +30327 30328 30358 +30328 30359 30358 +30328 30329 30360 +30328 30360 30359 +30329 30330 30360 +30330 30361 30360 +30330 30331 30362 +30330 30362 30361 +30331 30332 30362 +30332 30363 30362 +30332 30333 30364 +30332 30364 30363 +30333 30334 30364 +30334 30365 30364 +30334 30335 30366 +30334 30366 30365 +30335 30336 30366 +30336 30367 30366 +30336 30337 30368 +30336 30368 30367 +30337 30338 30368 +30338 30369 30368 +30338 30339 30370 +30338 30370 30369 +30339 30340 30370 +30340 30371 30370 +30340 30341 30372 +30340 30372 30371 +30341 30342 30372 +30342 30373 30372 +30342 30343 30374 +30342 30374 30373 +30343 30344 30374 +30344 30375 30374 +30344 30345 30376 +30344 30376 30375 +30345 30346 30376 +30346 30377 30376 +30346 30347 30378 +30346 30378 30377 +30347 30348 30378 +30348 30379 30378 +30348 30349 30380 +30348 30380 30379 +30349 30350 30380 +30350 30381 30380 +30350 30351 30382 +30350 30382 30381 +30351 30352 30382 +30352 30383 30382 +30352 13013 13142 +30352 13142 30383 +30353 30354 30384 +30354 30385 30384 +30354 30355 30386 +30354 30386 30385 +30355 30356 30386 +30356 30387 30386 +30356 30357 30388 +30356 30388 30387 +30357 30358 30388 +30358 30389 30388 +30358 30359 30390 +30358 30390 30389 +30359 30360 30390 +30360 30391 30390 +30360 30361 30392 +30360 30392 30391 +30361 30362 30392 +30362 30393 30392 +30362 30363 30394 +30362 30394 30393 +30363 30364 30394 +30364 30395 30394 +30364 30365 30396 +30364 30396 30395 +30365 30366 30396 +30366 30397 30396 +30366 30367 30398 +30366 30398 30397 +30367 30368 30398 +30368 30399 30398 +30368 30369 30400 +30368 30400 30399 +30369 30370 30400 +30370 30401 30400 +30370 30371 30402 +30370 30402 30401 +30371 30372 30402 +30372 30403 30402 +30372 30373 30404 +30372 30404 30403 +30373 30374 30404 +30374 30405 30404 +30374 30375 30406 +30374 30406 30405 +30375 30376 30406 +30376 30407 30406 +30376 30377 30408 +30376 30408 30407 +30377 30378 30408 +30378 30409 30408 +30378 30379 30410 +30378 30410 30409 +30379 30380 30410 +30380 30411 30410 +30380 30381 30412 +30380 30412 30411 +30381 30382 30412 +30382 30413 30412 +30382 30383 30414 +30382 30414 30413 +30383 13142 30414 +13142 13271 30414 +30384 30385 30416 +30384 30416 30415 +30385 30386 30416 +30386 30417 30416 +30386 30387 30418 +30386 30418 30417 +30387 30388 30418 +30388 30419 30418 +30388 30389 30420 +30388 30420 30419 +30389 30390 30420 +30390 30421 30420 +30390 30391 30422 +30390 30422 30421 +30391 30392 30422 +30392 30423 30422 +30392 30393 30424 +30392 30424 30423 +30393 30394 30424 +30394 30425 30424 +30394 30395 30426 +30394 30426 30425 +30395 30396 30426 +30396 30427 30426 +30396 30397 30428 +30396 30428 30427 +30397 30398 30428 +30398 30429 30428 +30398 30399 30430 +30398 30430 30429 +30399 30400 30430 +30400 30431 30430 +30400 30401 30432 +30400 30432 30431 +30401 30402 30432 +30402 30433 30432 +30402 30403 30434 +30402 30434 30433 +30403 30404 30434 +30404 30435 30434 +30404 30405 30436 +30404 30436 30435 +30405 30406 30436 +30406 30437 30436 +30406 30407 30438 +30406 30438 30437 +30407 30408 30438 +30408 30439 30438 +30408 30409 30440 +30408 30440 30439 +30409 30410 30440 +30410 30441 30440 +30410 30411 30442 +30410 30442 30441 +30411 30412 30442 +30412 30443 30442 +30412 30413 30444 +30412 30444 30443 +30413 30414 30444 +30414 30445 30444 +30414 13271 13400 +30414 13400 30445 +30415 30416 30446 +30416 30447 30446 +30416 30417 30448 +30416 30448 30447 +30417 30418 30448 +30418 30449 30448 +30418 30419 30450 +30418 30450 30449 +30419 30420 30450 +30420 30451 30450 +30420 30421 30452 +30420 30452 30451 +30421 30422 30452 +30422 30453 30452 +30422 30423 30454 +30422 30454 30453 +30423 30424 30454 +30424 30455 30454 +30424 30425 30456 +30424 30456 30455 +30425 30426 30456 +30426 30457 30456 +30426 30427 30458 +30426 30458 30457 +30427 30428 30458 +30428 30459 30458 +30428 30429 30460 +30428 30460 30459 +30429 30430 30460 +30430 30461 30460 +30430 30431 30462 +30430 30462 30461 +30431 30432 30462 +30432 30463 30462 +30432 30433 30464 +30432 30464 30463 +30433 30434 30464 +30434 30465 30464 +30434 30435 30466 +30434 30466 30465 +30435 30436 30466 +30436 30467 30466 +30436 30437 30468 +30436 30468 30467 +30437 30438 30468 +30438 30469 30468 +30438 30439 30470 +30438 30470 30469 +30439 30440 30470 +30440 30471 30470 +30440 30441 30472 +30440 30472 30471 +30441 30442 30472 +30442 30473 30472 +30442 30443 30474 +30442 30474 30473 +30443 30444 30474 +30444 30475 30474 +30444 30445 30476 +30444 30476 30475 +30445 13400 30476 +13400 13529 30476 +30446 30447 30478 +30446 30478 30477 +30447 30448 30478 +30448 30479 30478 +30448 30449 30480 +30448 30480 30479 +30449 30450 30480 +30450 30481 30480 +30450 30451 30482 +30450 30482 30481 +30451 30452 30482 +30452 30483 30482 +30452 30453 30484 +30452 30484 30483 +30453 30454 30484 +30454 30485 30484 +30454 30455 30486 +30454 30486 30485 +30455 30456 30486 +30456 30487 30486 +30456 30457 30488 +30456 30488 30487 +30457 30458 30488 +30458 30489 30488 +30458 30459 30490 +30458 30490 30489 +30459 30460 30490 +30460 30491 30490 +30460 30461 30492 +30460 30492 30491 +30461 30462 30492 +30462 30493 30492 +30462 30463 30494 +30462 30494 30493 +30463 30464 30494 +30464 30495 30494 +30464 30465 30496 +30464 30496 30495 +30465 30466 30496 +30466 30497 30496 +30466 30467 30498 +30466 30498 30497 +30467 30468 30498 +30468 30499 30498 +30468 30469 30500 +30468 30500 30499 +30469 30470 30500 +30470 30501 30500 +30470 30471 30502 +30470 30502 30501 +30471 30472 30502 +30472 30503 30502 +30472 30473 30504 +30472 30504 30503 +30473 30474 30504 +30474 30505 30504 +30474 30475 30506 +30474 30506 30505 +30475 30476 30506 +30476 30507 30506 +30476 13529 13658 +30476 13658 30507 +30477 30478 30508 +30478 30509 30508 +30478 30479 30510 +30478 30510 30509 +30479 30480 30510 +30480 30511 30510 +30480 30481 30512 +30480 30512 30511 +30481 30482 30512 +30482 30513 30512 +30482 30483 30514 +30482 30514 30513 +30483 30484 30514 +30484 30515 30514 +30484 30485 30516 +30484 30516 30515 +30485 30486 30516 +30486 30517 30516 +30486 30487 30518 +30486 30518 30517 +30487 30488 30518 +30488 30519 30518 +30488 30489 30520 +30488 30520 30519 +30489 30490 30520 +30490 30521 30520 +30490 30491 30522 +30490 30522 30521 +30491 30492 30522 +30492 30523 30522 +30492 30493 30524 +30492 30524 30523 +30493 30494 30524 +30494 30525 30524 +30494 30495 30526 +30494 30526 30525 +30495 30496 30526 +30496 30527 30526 +30496 30497 30528 +30496 30528 30527 +30497 30498 30528 +30498 30529 30528 +30498 30499 30530 +30498 30530 30529 +30499 30500 30530 +30500 30531 30530 +30500 30501 30532 +30500 30532 30531 +30501 30502 30532 +30502 30533 30532 +30502 30503 30534 +30502 30534 30533 +30503 30504 30534 +30504 30535 30534 +30504 30505 30536 +30504 30536 30535 +30505 30506 30536 +30506 30537 30536 +30506 30507 30538 +30506 30538 30537 +30507 13658 30538 +13658 13787 30538 +30508 30509 30540 +30508 30540 30539 +30509 30510 30540 +30510 30541 30540 +30510 30511 30542 +30510 30542 30541 +30511 30512 30542 +30512 30543 30542 +30512 30513 30544 +30512 30544 30543 +30513 30514 30544 +30514 30545 30544 +30514 30515 30546 +30514 30546 30545 +30515 30516 30546 +30516 30547 30546 +30516 30517 30548 +30516 30548 30547 +30517 30518 30548 +30518 30549 30548 +30518 30519 30550 +30518 30550 30549 +30519 30520 30550 +30520 30551 30550 +30520 30521 30552 +30520 30552 30551 +30521 30522 30552 +30522 30553 30552 +30522 30523 30554 +30522 30554 30553 +30523 30524 30554 +30524 30555 30554 +30524 30525 30556 +30524 30556 30555 +30525 30526 30556 +30526 30557 30556 +30526 30527 30558 +30526 30558 30557 +30527 30528 30558 +30528 30559 30558 +30528 30529 30560 +30528 30560 30559 +30529 30530 30560 +30530 30561 30560 +30530 30531 30562 +30530 30562 30561 +30531 30532 30562 +30532 30563 30562 +30532 30533 30564 +30532 30564 30563 +30533 30534 30564 +30534 30565 30564 +30534 30535 30566 +30534 30566 30565 +30535 30536 30566 +30536 30567 30566 +30536 30537 30568 +30536 30568 30567 +30537 30538 30568 +30538 30569 30568 +30538 13787 13916 +30538 13916 30569 +30539 30540 30570 +30540 30571 30570 +30540 30541 30572 +30540 30572 30571 +30541 30542 30572 +30542 30573 30572 +30542 30543 30574 +30542 30574 30573 +30543 30544 30574 +30544 30575 30574 +30544 30545 30576 +30544 30576 30575 +30545 30546 30576 +30546 30577 30576 +30546 30547 30578 +30546 30578 30577 +30547 30548 30578 +30548 30579 30578 +30548 30549 30580 +30548 30580 30579 +30549 30550 30580 +30550 30581 30580 +30550 30551 30582 +30550 30582 30581 +30551 30552 30582 +30552 30583 30582 +30552 30553 30584 +30552 30584 30583 +30553 30554 30584 +30554 30585 30584 +30554 30555 30586 +30554 30586 30585 +30555 30556 30586 +30556 30587 30586 +30556 30557 30588 +30556 30588 30587 +30557 30558 30588 +30558 30589 30588 +30558 30559 30590 +30558 30590 30589 +30559 30560 30590 +30560 30591 30590 +30560 30561 30592 +30560 30592 30591 +30561 30562 30592 +30562 30593 30592 +30562 30563 30594 +30562 30594 30593 +30563 30564 30594 +30564 30595 30594 +30564 30565 30596 +30564 30596 30595 +30565 30566 30596 +30566 30597 30596 +30566 30567 30598 +30566 30598 30597 +30567 30568 30598 +30568 30599 30598 +30568 30569 30600 +30568 30600 30599 +30569 13916 30600 +13916 14045 30600 +30570 30571 30602 +30570 30602 30601 +30571 30572 30602 +30572 30603 30602 +30572 30573 30604 +30572 30604 30603 +30573 30574 30604 +30574 30605 30604 +30574 30575 30606 +30574 30606 30605 +30575 30576 30606 +30576 30607 30606 +30576 30577 30608 +30576 30608 30607 +30577 30578 30608 +30578 30609 30608 +30578 30579 30610 +30578 30610 30609 +30579 30580 30610 +30580 30611 30610 +30580 30581 30612 +30580 30612 30611 +30581 30582 30612 +30582 30613 30612 +30582 30583 30614 +30582 30614 30613 +30583 30584 30614 +30584 30615 30614 +30584 30585 30616 +30584 30616 30615 +30585 30586 30616 +30586 30617 30616 +30586 30587 30618 +30586 30618 30617 +30587 30588 30618 +30588 30619 30618 +30588 30589 30620 +30588 30620 30619 +30589 30590 30620 +30590 30621 30620 +30590 30591 30622 +30590 30622 30621 +30591 30592 30622 +30592 30623 30622 +30592 30593 30624 +30592 30624 30623 +30593 30594 30624 +30594 30625 30624 +30594 30595 30626 +30594 30626 30625 +30595 30596 30626 +30596 30627 30626 +30596 30597 30628 +30596 30628 30627 +30597 30598 30628 +30598 30629 30628 +30598 30599 30630 +30598 30630 30629 +30599 30600 30630 +30600 30631 30630 +30600 14045 14174 +30600 14174 30631 +30601 30602 30632 +30602 30633 30632 +30602 30603 30634 +30602 30634 30633 +30603 30604 30634 +30604 30635 30634 +30604 30605 30636 +30604 30636 30635 +30605 30606 30636 +30606 30637 30636 +30606 30607 30638 +30606 30638 30637 +30607 30608 30638 +30608 30639 30638 +30608 30609 30640 +30608 30640 30639 +30609 30610 30640 +30610 30641 30640 +30610 30611 30642 +30610 30642 30641 +30611 30612 30642 +30612 30643 30642 +30612 30613 30644 +30612 30644 30643 +30613 30614 30644 +30614 30645 30644 +30614 30615 30646 +30614 30646 30645 +30615 30616 30646 +30616 30647 30646 +30616 30617 30648 +30616 30648 30647 +30617 30618 30648 +30618 30649 30648 +30618 30619 30650 +30618 30650 30649 +30619 30620 30650 +30620 30651 30650 +30620 30621 30652 +30620 30652 30651 +30621 30622 30652 +30622 30653 30652 +30622 30623 30654 +30622 30654 30653 +30623 30624 30654 +30624 30655 30654 +30624 30625 30656 +30624 30656 30655 +30625 30626 30656 +30626 30657 30656 +30626 30627 30658 +30626 30658 30657 +30627 30628 30658 +30628 30659 30658 +30628 30629 30660 +30628 30660 30659 +30629 30630 30660 +30630 30661 30660 +30630 30631 30662 +30630 30662 30661 +30631 14174 30662 +14174 14303 30662 +30632 30664 30663 +30632 30633 30665 +30632 30665 30664 +30633 30634 30665 +30634 30666 30665 +30634 30635 30667 +30634 30667 30666 +30635 30636 30667 +30636 30668 30667 +30636 30637 30669 +30636 30669 30668 +30637 30638 30669 +30638 30670 30669 +30638 30639 30671 +30638 30671 30670 +30639 30640 30671 +30640 30672 30671 +30640 30641 30673 +30640 30673 30672 +30641 30642 30673 +30642 30674 30673 +30642 30643 30675 +30642 30675 30674 +30643 30644 30675 +30644 30676 30675 +30644 30645 30677 +30644 30677 30676 +30645 30646 30677 +30646 30678 30677 +30646 30647 30679 +30646 30679 30678 +30647 30648 30679 +30648 30680 30679 +30648 30649 30681 +30648 30681 30680 +30649 30650 30681 +30650 30682 30681 +30650 30651 30683 +30650 30683 30682 +30651 30652 30683 +30652 30684 30683 +30652 30653 30685 +30652 30685 30684 +30653 30654 30685 +30654 30686 30685 +30654 30655 30687 +30654 30687 30686 +30655 30656 30687 +30656 30688 30687 +30656 30657 30689 +30656 30689 30688 +30657 30658 30689 +30658 30690 30689 +30658 30659 30691 +30658 30691 30690 +30659 30660 30691 +30660 30692 30691 +30660 30661 30693 +30660 30693 30692 +30661 30662 30693 +30662 30694 30693 +30662 14303 14432 +30662 14432 30694 +30663 30664 30696 +30663 30696 30695 +30664 30665 30696 +30665 30697 30696 +30665 30666 30698 +30665 30698 30697 +30666 30667 30698 +30667 30699 30698 +30667 30668 30700 +30667 30700 30699 +30668 30669 30700 +30669 30701 30700 +30669 30670 30702 +30669 30702 30701 +30670 30671 30702 +30671 30703 30702 +30671 30672 30704 +30671 30704 30703 +30672 30673 30704 +30673 30705 30704 +30673 30674 30706 +30673 30706 30705 +30674 30675 30706 +30675 30707 30706 +30675 30676 30708 +30675 30708 30707 +30676 30677 30708 +30677 30709 30708 +30677 30678 30710 +30677 30710 30709 +30678 30679 30710 +30679 30711 30710 +30679 30680 30712 +30679 30712 30711 +30680 30681 30712 +30681 30713 30712 +30681 30682 30714 +30681 30714 30713 +30682 30683 30714 +30683 30715 30714 +30683 30684 30716 +30683 30716 30715 +30684 30685 30716 +30685 30717 30716 +30685 30686 30718 +30685 30718 30717 +30686 30687 30718 +30687 30719 30718 +30687 30688 30720 +30687 30720 30719 +30688 30689 30720 +30689 30721 30720 +30689 30690 30722 +30689 30722 30721 +30690 30691 30722 +30691 30723 30722 +30691 30692 30724 +30691 30724 30723 +30692 30693 30724 +30693 30725 30724 +30693 30694 30726 +30693 30726 30725 +30694 14432 30726 +14432 14561 30726 +30695 30696 30727 +30696 30728 30727 +30696 30697 30729 +30696 30729 30728 +30697 30698 30729 +30698 30730 30729 +30698 30699 30731 +30698 30731 30730 +30699 30700 30731 +30700 30732 30731 +30700 30701 30733 +30700 30733 30732 +30701 30702 30733 +30702 30734 30733 +30702 30703 30735 +30702 30735 30734 +30703 30704 30735 +30704 30736 30735 +30704 30705 30737 +30704 30737 30736 +30705 30706 30737 +30706 30738 30737 +30706 30707 30739 +30706 30739 30738 +30707 30708 30739 +30708 30740 30739 +30708 30709 30741 +30708 30741 30740 +30709 30710 30741 +30710 30742 30741 +30710 30711 30743 +30710 30743 30742 +30711 30712 30743 +30712 30744 30743 +30712 30713 30745 +30712 30745 30744 +30713 30714 30745 +30714 30746 30745 +30714 30715 30747 +30714 30747 30746 +30715 30716 30747 +30716 30748 30747 +30716 30717 30749 +30716 30749 30748 +30717 30718 30749 +30718 30750 30749 +30718 30719 30751 +30718 30751 30750 +30719 30720 30751 +30720 30752 30751 +30720 30721 30753 +30720 30753 30752 +30721 30722 30753 +30722 30754 30753 +30722 30723 30755 +30722 30755 30754 +30723 30724 30755 +30724 30756 30755 +30724 30725 30757 +30724 30757 30756 +30725 30726 30757 +30726 30758 30757 +30726 14561 14690 +30726 14690 30758 +30727 30760 30759 +30727 30728 30761 +30727 30761 30760 +30728 30729 30761 +30729 30762 30761 +30729 30730 30763 +30729 30763 30762 +30730 30731 30763 +30731 30764 30763 +30731 30732 30765 +30731 30765 30764 +30732 30733 30765 +30733 30766 30765 +30733 30734 30767 +30733 30767 30766 +30734 30735 30767 +30735 30768 30767 +30735 30736 30769 +30735 30769 30768 +30736 30737 30769 +30737 30770 30769 +30737 30738 30771 +30737 30771 30770 +30738 30739 30771 +30739 30772 30771 +30739 30740 30773 +30739 30773 30772 +30740 30741 30773 +30741 30774 30773 +30741 30742 30775 +30741 30775 30774 +30742 30743 30775 +30743 30776 30775 +30743 30744 30777 +30743 30777 30776 +30744 30745 30777 +30745 30778 30777 +30745 30746 30779 +30745 30779 30778 +30746 30747 30779 +30747 30780 30779 +30747 30748 30781 +30747 30781 30780 +30748 30749 30781 +30749 30782 30781 +30749 30750 30783 +30749 30783 30782 +30750 30751 30783 +30751 30784 30783 +30751 30752 30785 +30751 30785 30784 +30752 30753 30785 +30753 30786 30785 +30753 30754 30787 +30753 30787 30786 +30754 30755 30787 +30755 30788 30787 +30755 30756 30789 +30755 30789 30788 +30756 30757 30789 +30757 30790 30789 +30757 30758 30791 +30757 30791 30790 +30758 14690 30791 +14690 14819 30791 +30759 30793 30792 +30759 30760 30794 +30759 30794 30793 +30760 30761 30794 +30761 30795 30794 +30761 30762 30796 +30761 30796 30795 +30762 30763 30796 +30763 30797 30796 +30763 30764 30798 +30763 30798 30797 +30764 30765 30798 +30765 30799 30798 +30765 30766 30800 +30765 30800 30799 +30766 30767 30800 +30767 30801 30800 +30767 30768 30802 +30767 30802 30801 +30768 30769 30802 +30769 30803 30802 +30769 30770 30804 +30769 30804 30803 +30770 30771 30804 +30771 30805 30804 +30771 30772 30806 +30771 30806 30805 +30772 30773 30806 +30773 30807 30806 +30773 30774 30808 +30773 30808 30807 +30774 30775 30808 +30775 30809 30808 +30775 30776 30810 +30775 30810 30809 +30776 30777 30810 +30777 30811 30810 +30777 30778 30812 +30777 30812 30811 +30778 30779 30812 +30779 30813 30812 +30779 30780 30814 +30779 30814 30813 +30780 30781 30814 +30781 30815 30814 +30781 30782 30816 +30781 30816 30815 +30782 30783 30816 +30783 30817 30816 +30783 30784 30818 +30783 30818 30817 +30784 30785 30818 +30785 30819 30818 +30785 30786 30820 +30785 30820 30819 +30786 30787 30820 +30787 30821 30820 +30787 30788 30822 +30787 30822 30821 +30788 30789 30822 +30789 30823 30822 +30789 30790 30824 +30789 30824 30823 +30790 30791 30824 +30791 30825 30824 +30791 14819 14948 +30791 14948 30825 +30792 30793 30827 +30792 30827 30826 +30793 30794 30827 +30794 30828 30827 +30794 30795 30829 +30794 30829 30828 +30795 30796 30829 +30796 30830 30829 +30796 30797 30831 +30796 30831 30830 +30797 30798 30831 +30798 30832 30831 +30798 30799 30833 +30798 30833 30832 +30799 30800 30833 +30800 30834 30833 +30800 30801 30835 +30800 30835 30834 +30801 30802 30835 +30802 30836 30835 +30802 30803 30837 +30802 30837 30836 +30803 30804 30837 +30804 30838 30837 +30804 30805 30839 +30804 30839 30838 +30805 30806 30839 +30806 30840 30839 +30806 30807 30841 +30806 30841 30840 +30807 30808 30841 +30808 30842 30841 +30808 30809 30843 +30808 30843 30842 +30809 30810 30843 +30810 30844 30843 +30810 30811 30845 +30810 30845 30844 +30811 30812 30845 +30812 30846 30845 +30812 30813 30847 +30812 30847 30846 +30813 30814 30847 +30814 30848 30847 +30814 30815 30849 +30814 30849 30848 +30815 30816 30849 +30816 30850 30849 +30816 30817 30851 +30816 30851 30850 +30817 30818 30851 +30818 30852 30851 +30818 30819 30853 +30818 30853 30852 +30819 30820 30853 +30820 30854 30853 +30820 30821 30855 +30820 30855 30854 +30821 30822 30855 +30822 30856 30855 +30822 30823 30857 +30822 30857 30856 +30823 30824 30857 +30824 30858 30857 +30824 30825 30859 +30824 30859 30858 +30825 14948 30859 +14948 15077 30859 +30826 30827 30860 +30827 30861 30860 +30827 30828 30862 +30827 30862 30861 +30828 30829 30862 +30829 30863 30862 +30829 30830 30864 +30829 30864 30863 +30830 30831 30864 +30831 30865 30864 +30831 30832 30866 +30831 30866 30865 +30832 30833 30866 +30833 30867 30866 +30833 30834 30868 +30833 30868 30867 +30834 30835 30868 +30835 30869 30868 +30835 30836 30870 +30835 30870 30869 +30836 30837 30870 +30837 30871 30870 +30837 30838 30872 +30837 30872 30871 +30838 30839 30872 +30839 30873 30872 +30839 30840 30874 +30839 30874 30873 +30840 30841 30874 +30841 30875 30874 +30841 30842 30876 +30841 30876 30875 +30842 30843 30876 +30843 30877 30876 +30843 30844 30878 +30843 30878 30877 +30844 30845 30878 +30845 30879 30878 +30845 30846 30880 +30845 30880 30879 +30846 30847 30880 +30847 30881 30880 +30847 30848 30882 +30847 30882 30881 +30848 30849 30882 +30849 30883 30882 +30849 30850 30884 +30849 30884 30883 +30850 30851 30884 +30851 30885 30884 +30851 30852 30886 +30851 30886 30885 +30852 30853 30886 +30853 30887 30886 +30853 30854 30888 +30853 30888 30887 +30854 30855 30888 +30855 30889 30888 +30855 30856 30890 +30855 30890 30889 +30856 30857 30890 +30857 30891 30890 +30857 30858 30892 +30857 30892 30891 +30858 30859 30892 +30859 30893 30892 +30859 15077 15206 +30859 15206 30893 +30860 30895 30894 +30860 30861 30896 +30860 30896 30895 +30861 30862 30896 +30862 30897 30896 +30862 30863 30898 +30862 30898 30897 +30863 30864 30898 +30864 30899 30898 +30864 30865 30900 +30864 30900 30899 +30865 30866 30900 +30866 30901 30900 +30866 30867 30902 +30866 30902 30901 +30867 30868 30902 +30868 30903 30902 +30868 30869 30904 +30868 30904 30903 +30869 30870 30904 +30870 30905 30904 +30870 30871 30906 +30870 30906 30905 +30871 30872 30906 +30872 30907 30906 +30872 30873 30908 +30872 30908 30907 +30873 30874 30908 +30874 30909 30908 +30874 30875 30910 +30874 30910 30909 +30875 30876 30910 +30876 30911 30910 +30876 30877 30912 +30876 30912 30911 +30877 30878 30912 +30878 30913 30912 +30878 30879 30914 +30878 30914 30913 +30879 30880 30914 +30880 30915 30914 +30880 30881 30916 +30880 30916 30915 +30881 30882 30916 +30882 30917 30916 +30882 30883 30918 +30882 30918 30917 +30883 30884 30918 +30884 30919 30918 +30884 30885 30920 +30884 30920 30919 +30885 30886 30920 +30886 30921 30920 +30886 30887 30922 +30886 30922 30921 +30887 30888 30922 +30888 30923 30922 +30888 30889 30924 +30888 30924 30923 +30889 30890 30924 +30890 30925 30924 +30890 30891 30926 +30890 30926 30925 +30891 30892 30926 +30892 30927 30926 +30892 30893 30928 +30892 30928 30927 +30893 15206 30928 +15206 15335 30928 +30894 30895 30930 +30894 30930 30929 +30895 30896 30930 +30896 30931 30930 +30896 30897 30932 +30896 30932 30931 +30897 30898 30932 +30898 30933 30932 +30898 30899 30934 +30898 30934 30933 +30899 30900 30934 +30900 30935 30934 +30900 30901 30936 +30900 30936 30935 +30901 30902 30936 +30902 30937 30936 +30902 30903 30938 +30902 30938 30937 +30903 30904 30938 +30904 30939 30938 +30904 30905 30940 +30904 30940 30939 +30905 30906 30940 +30906 30941 30940 +30906 30907 30942 +30906 30942 30941 +30907 30908 30942 +30908 30943 30942 +30908 30909 30944 +30908 30944 30943 +30909 30910 30944 +30910 30945 30944 +30910 30911 30946 +30910 30946 30945 +30911 30912 30946 +30912 30947 30946 +30912 30913 30948 +30912 30948 30947 +30913 30914 30948 +30914 30949 30948 +30914 30915 30950 +30914 30950 30949 +30915 30916 30950 +30916 30951 30950 +30916 30917 30952 +30916 30952 30951 +30917 30918 30952 +30918 30953 30952 +30918 30919 30954 +30918 30954 30953 +30919 30920 30954 +30920 30955 30954 +30920 30921 30956 +30920 30956 30955 +30921 30922 30956 +30922 30957 30956 +30922 30923 30958 +30922 30958 30957 +30923 30924 30958 +30924 30959 30958 +30924 30925 30960 +30924 30960 30959 +30925 30926 30960 +30926 30961 30960 +30926 30927 30962 +30926 30962 30961 +30927 30928 30962 +30928 30963 30962 +30928 15335 15464 +30928 15464 30963 +30929 30930 30964 +30930 30965 30964 +30930 30931 30966 +30930 30966 30965 +30931 30932 30966 +30932 30967 30966 +30932 30933 30968 +30932 30968 30967 +30933 30934 30968 +30934 30969 30968 +30934 30935 30970 +30934 30970 30969 +30935 30936 30970 +30936 30971 30970 +30936 30937 30972 +30936 30972 30971 +30937 30938 30972 +30938 30973 30972 +30938 30939 30974 +30938 30974 30973 +30939 30940 30974 +30940 30975 30974 +30940 30941 30976 +30940 30976 30975 +30941 30942 30976 +30942 30977 30976 +30942 30943 30978 +30942 30978 30977 +30943 30944 30978 +30944 30979 30978 +30944 30945 30980 +30944 30980 30979 +30945 30946 30980 +30946 30981 30980 +30946 30947 30982 +30946 30982 30981 +30947 30948 30982 +30948 30983 30982 +30948 30949 30984 +30948 30984 30983 +30949 30950 30984 +30950 30985 30984 +30950 30951 30986 +30950 30986 30985 +30951 30952 30986 +30952 30987 30986 +30952 30953 30988 +30952 30988 30987 +30953 30954 30988 +30954 30989 30988 +30954 30955 30990 +30954 30990 30989 +30955 30956 30990 +30956 30991 30990 +30956 30957 30992 +30956 30992 30991 +30957 30958 30992 +30958 30993 30992 +30958 30959 30994 +30958 30994 30993 +30959 30960 30994 +30960 30995 30994 +30960 30961 30996 +30960 30996 30995 +30961 30962 30996 +30962 30997 30996 +30962 30963 30998 +30962 30998 30997 +30963 15464 30998 +15464 15593 30998 +30964 30965 31000 +30964 31000 30999 +30965 30966 31000 +30966 31001 31000 +30966 30967 31002 +30966 31002 31001 +30967 30968 31002 +30968 31003 31002 +30968 30969 31004 +30968 31004 31003 +30969 30970 31004 +30970 31005 31004 +30970 30971 31006 +30970 31006 31005 +30971 30972 31006 +30972 31007 31006 +30972 30973 31008 +30972 31008 31007 +30973 30974 31008 +30974 31009 31008 +30974 30975 31010 +30974 31010 31009 +30975 30976 31010 +30976 31011 31010 +30976 30977 31012 +30976 31012 31011 +30977 30978 31012 +30978 31013 31012 +30978 30979 31014 +30978 31014 31013 +30979 30980 31014 +30980 31015 31014 +30980 30981 31016 +30980 31016 31015 +30981 30982 31016 +30982 31017 31016 +30982 30983 31018 +30982 31018 31017 +30983 30984 31018 +30984 31019 31018 +30984 30985 31020 +30984 31020 31019 +30985 30986 31020 +30986 31021 31020 +30986 30987 31022 +30986 31022 31021 +30987 30988 31022 +30988 31023 31022 +30988 30989 31024 +30988 31024 31023 +30989 30990 31024 +30990 31025 31024 +30990 30991 31026 +30990 31026 31025 +30991 30992 31026 +30992 31027 31026 +30992 30993 31028 +30992 31028 31027 +30993 30994 31028 +30994 31029 31028 +30994 30995 31030 +30994 31030 31029 +30995 30996 31030 +30996 31031 31030 +30996 30997 31032 +30996 31032 31031 +30997 30998 31032 +30998 31033 31032 +30998 15593 15722 +30998 15722 31033 +30999 31000 31034 +31000 31035 31034 +31000 31001 31036 +31000 31036 31035 +31001 31002 31036 +31002 31037 31036 +31002 31003 31038 +31002 31038 31037 +31003 31004 31038 +31004 31039 31038 +31004 31005 31040 +31004 31040 31039 +31005 31006 31040 +31006 31041 31040 +31006 31007 31042 +31006 31042 31041 +31007 31008 31042 +31008 31043 31042 +31008 31009 31044 +31008 31044 31043 +31009 31010 31044 +31010 31045 31044 +31010 31011 31046 +31010 31046 31045 +31011 31012 31046 +31012 31047 31046 +31012 31013 31048 +31012 31048 31047 +31013 31014 31048 +31014 31049 31048 +31014 31015 31050 +31014 31050 31049 +31015 31016 31050 +31016 31051 31050 +31016 31017 31052 +31016 31052 31051 +31017 31018 31052 +31018 31053 31052 +31018 31019 31054 +31018 31054 31053 +31019 31020 31054 +31020 31055 31054 +31020 31021 31056 +31020 31056 31055 +31021 31022 31056 +31022 31057 31056 +31022 31023 31058 +31022 31058 31057 +31023 31024 31058 +31024 31059 31058 +31024 31025 31060 +31024 31060 31059 +31025 31026 31060 +31026 31061 31060 +31026 31027 31062 +31026 31062 31061 +31027 31028 31062 +31028 31063 31062 +31028 31029 31064 +31028 31064 31063 +31029 31030 31064 +31030 31065 31064 +31030 31031 31066 +31030 31066 31065 +31031 31032 31066 +31032 31067 31066 +31032 31033 31068 +31032 31068 31067 +31033 15722 31068 +15722 15851 31068 +31034 31035 31070 +31034 31070 31069 +31035 31036 31070 +31036 31071 31070 +31036 31037 31072 +31036 31072 31071 +31037 31038 31072 +31038 31073 31072 +31038 31039 31074 +31038 31074 31073 +31039 31040 31074 +31040 31075 31074 +31040 31041 31076 +31040 31076 31075 +31041 31042 31076 +31042 31077 31076 +31042 31043 31078 +31042 31078 31077 +31043 31044 31078 +31044 31079 31078 +31044 31045 31080 +31044 31080 31079 +31045 31046 31080 +31046 31081 31080 +31046 31047 31082 +31046 31082 31081 +31047 31048 31082 +31048 31083 31082 +31048 31049 31084 +31048 31084 31083 +31049 31050 31084 +31050 31085 31084 +31050 31051 31086 +31050 31086 31085 +31051 31052 31086 +31052 31087 31086 +31052 31053 31088 +31052 31088 31087 +31053 31054 31088 +31054 31089 31088 +31054 31055 31090 +31054 31090 31089 +31055 31056 31090 +31056 31091 31090 +31056 31057 31092 +31056 31092 31091 +31057 31058 31092 +31058 31093 31092 +31058 31059 31094 +31058 31094 31093 +31059 31060 31094 +31060 31095 31094 +31060 31061 31096 +31060 31096 31095 +31061 31062 31096 +31062 31097 31096 +31062 31063 31098 +31062 31098 31097 +31063 31064 31098 +31064 31099 31098 +31064 31065 31100 +31064 31100 31099 +31065 31066 31100 +31066 31101 31100 +31066 31067 31102 +31066 31102 31101 +31067 31068 31102 +31068 31103 31102 +31068 15851 15980 +31068 15980 31103 +31069 31070 31104 +31070 31105 31104 +31070 31071 31106 +31070 31106 31105 +31071 31072 31106 +31072 31107 31106 +31072 31073 31108 +31072 31108 31107 +31073 31074 31108 +31074 31109 31108 +31074 31075 31110 +31074 31110 31109 +31075 31076 31110 +31076 31111 31110 +31076 31077 31112 +31076 31112 31111 +31077 31078 31112 +31078 31113 31112 +31078 31079 31114 +31078 31114 31113 +31079 31080 31114 +31080 31115 31114 +31080 31081 31116 +31080 31116 31115 +31081 31082 31116 +31082 31117 31116 +31082 31083 31118 +31082 31118 31117 +31083 31084 31118 +31084 31119 31118 +31084 31085 31120 +31084 31120 31119 +31085 31086 31120 +31086 31121 31120 +31086 31087 31122 +31086 31122 31121 +31087 31088 31122 +31088 31123 31122 +31088 31089 31124 +31088 31124 31123 +31089 31090 31124 +31090 31125 31124 +31090 31091 31126 +31090 31126 31125 +31091 31092 31126 +31092 31127 31126 +31092 31093 31128 +31092 31128 31127 +31093 31094 31128 +31094 31129 31128 +31094 31095 31130 +31094 31130 31129 +31095 31096 31130 +31096 31131 31130 +31096 31097 31132 +31096 31132 31131 +31097 31098 31132 +31098 31133 31132 +31098 31099 31134 +31098 31134 31133 +31099 31100 31134 +31100 31135 31134 +31100 31101 31136 +31100 31136 31135 +31101 31102 31136 +31102 31137 31136 +31102 31103 31138 +31102 31138 31137 +31103 15980 31138 +15980 16109 31138 +31104 26269 26398 +31104 31105 26140 +31104 26140 26269 +31105 31106 26140 +31106 26011 26140 +31106 31107 25882 +31106 25882 26011 +31107 31108 25882 +31108 25753 25882 +31108 31109 25624 +31108 25624 25753 +31109 31110 25624 +31110 25495 25624 +31110 31111 25366 +31110 25366 25495 +31111 31112 25366 +31112 25237 25366 +31112 31113 25108 +31112 25108 25237 +31113 31114 25108 +31114 24979 25108 +31114 31115 24850 +31114 24850 24979 +31115 31116 24850 +31116 24721 24850 +31116 31117 24592 +31116 24592 24721 +31117 31118 24592 +31118 24463 24592 +31118 31119 24334 +31118 24334 24463 +31119 31120 24334 +31120 24205 24334 +31120 31121 24076 +31120 24076 24205 +31121 31122 24076 +31122 23947 24076 +31122 31123 23818 +31122 23818 23947 +31123 31124 23818 +31124 23689 23818 +31124 31125 23560 +31124 23560 23689 +31125 31126 23560 +31126 23431 23560 +31126 31127 23302 +31126 23302 23431 +31127 31128 23302 +31128 23173 23302 +31128 31129 23044 +31128 23044 23173 +31129 31130 23044 +31130 22915 23044 +31130 31131 22786 +31130 22786 22915 +31131 31132 22786 +31132 22657 22786 +31132 31133 22528 +31132 22528 22657 +31133 31134 22528 +31134 22399 22528 +31134 31135 22270 +31134 22270 22399 +31135 31136 22270 +31136 22141 22270 +31136 31137 22012 +31136 22012 22141 +31137 31138 22012 +31138 21883 22012 +31138 16109 21754 +31138 21754 21883 +129 21753 31139 +129 31139 258 +21753 21624 31139 +21624 31140 31139 +21624 21495 31141 +21624 31141 31140 +21495 21366 31141 +21366 31142 31141 +21366 21237 31143 +21366 31143 31142 +21237 21108 31143 +21108 31144 31143 +21108 20979 31145 +21108 31145 31144 +20979 20850 31145 +20850 31146 31145 +20850 20721 31147 +20850 31147 31146 +20721 20592 31147 +20592 31148 31147 +20592 20463 31149 +20592 31149 31148 +20463 20334 31149 +20334 31150 31149 +20334 20205 31151 +20334 31151 31150 +20205 20076 31151 +20076 31152 31151 +20076 19947 31153 +20076 31153 31152 +19947 19818 31153 +19818 31154 31153 +19818 19689 31155 +19818 31155 31154 +19689 19560 31155 +19560 31156 31155 +19560 19431 31157 +19560 31157 31156 +19431 19302 31157 +19302 31158 31157 +19302 19173 31159 +19302 31159 31158 +19173 19044 31159 +19044 31160 31159 +19044 18915 31161 +19044 31161 31160 +18915 18786 31161 +18786 31162 31161 +18786 18657 31163 +18786 31163 31162 +18657 18528 31163 +18528 31164 31163 +18528 18399 31165 +18528 31165 31164 +18399 18270 31165 +18270 31166 31165 +18270 18141 31167 +18270 31167 31166 +18141 18012 31167 +18012 31168 31167 +18012 17883 31169 +18012 31169 31168 +17883 17754 31169 +17754 31170 31169 +17754 17625 31171 +17754 31171 31170 +17625 17496 31171 +17496 31172 31171 +17496 17367 31173 +17496 31173 31172 +17367 17238 31173 +17238 31174 31173 +17238 17109 31175 +17238 31175 31174 +17109 16983 31175 +16983 31176 31175 +16983 16858 31177 +16983 31177 31176 +16858 16736 31177 +16736 31178 31177 +16736 16615 31179 +16736 31179 31178 +16615 16526 31179 +16526 31180 31179 +16526 16444 31181 +16526 31181 31180 +16444 16371 31181 +258 31139 387 +31139 31182 387 +31139 31140 31183 +31139 31183 31182 +31140 31141 31183 +31141 31184 31183 +31141 31142 31185 +31141 31185 31184 +31142 31143 31185 +31143 31186 31185 +31143 31144 31187 +31143 31187 31186 +31144 31145 31187 +31145 31188 31187 +31145 31146 31189 +31145 31189 31188 +31146 31147 31189 +31147 31190 31189 +31147 31148 31191 +31147 31191 31190 +31148 31149 31191 +31149 31192 31191 +31149 31150 31193 +31149 31193 31192 +31150 31151 31193 +31151 31194 31193 +31151 31152 31195 +31151 31195 31194 +31152 31153 31195 +31153 31196 31195 +31153 31154 31197 +31153 31197 31196 +31154 31155 31197 +31155 31198 31197 +31155 31156 31199 +31155 31199 31198 +31156 31157 31199 +31157 31200 31199 +31157 31158 31201 +31157 31201 31200 +31158 31159 31201 +31159 31202 31201 +31159 31160 31203 +31159 31203 31202 +31160 31161 31203 +31161 31204 31203 +31161 31162 31205 +31161 31205 31204 +31162 31163 31205 +31163 31206 31205 +31163 31164 31207 +31163 31207 31206 +31164 31165 31207 +31165 31208 31207 +31165 31166 31209 +31165 31209 31208 +31166 31167 31209 +31167 31210 31209 +31167 31168 31211 +31167 31211 31210 +31168 31169 31211 +31169 31212 31211 +31169 31170 31213 +31169 31213 31212 +31170 31171 31213 +31171 31214 31213 +31171 31172 31215 +31171 31215 31214 +31172 31173 31215 +31173 31216 31215 +31173 31174 31217 +31173 31217 31216 +31174 31175 31217 +31175 31218 31217 +31175 31176 31219 +31175 31219 31218 +31176 31177 31219 +31177 31220 31219 +31177 31178 31221 +31177 31221 31220 +31178 31179 31221 +31179 31222 31221 +31179 31180 31223 +31179 31223 31222 +31180 31181 31223 +387 31182 31224 +387 31224 516 +31182 31183 31224 +31183 31225 31224 +31183 31184 31226 +31183 31226 31225 +31184 31185 31226 +31185 31227 31226 +31185 31186 31228 +31185 31228 31227 +31186 31187 31228 +31187 31229 31228 +31187 31188 31230 +31187 31230 31229 +31188 31189 31230 +31189 31231 31230 +31189 31190 31232 +31189 31232 31231 +31190 31191 31232 +31191 31233 31232 +31191 31192 31234 +31191 31234 31233 +31192 31193 31234 +31193 31235 31234 +31193 31194 31236 +31193 31236 31235 +31194 31195 31236 +31195 31237 31236 +31195 31196 31238 +31195 31238 31237 +31196 31197 31238 +31197 31239 31238 +31197 31198 31240 +31197 31240 31239 +31198 31199 31240 +31199 31241 31240 +31199 31200 31242 +31199 31242 31241 +31200 31201 31242 +31201 31243 31242 +31201 31202 31244 +31201 31244 31243 +31202 31203 31244 +31203 31245 31244 +31203 31204 31246 +31203 31246 31245 +31204 31205 31246 +31205 31247 31246 +31205 31206 31248 +31205 31248 31247 +31206 31207 31248 +31207 31249 31248 +31207 31208 31250 +31207 31250 31249 +31208 31209 31250 +31209 31251 31250 +31209 31210 31252 +31209 31252 31251 +31210 31211 31252 +31211 31253 31252 +31211 31212 31254 +31211 31254 31253 +31212 31213 31254 +31213 31255 31254 +31213 31214 31256 +31213 31256 31255 +31214 31215 31256 +31215 31257 31256 +31215 31216 31258 +31215 31258 31257 +31216 31217 31258 +31217 31259 31258 +31217 31218 31260 +31217 31260 31259 +31218 31219 31260 +31219 31261 31260 +31219 31220 31262 +31219 31262 31261 +31220 31221 31262 +31221 31263 31262 +31221 31222 31264 +31221 31264 31263 +31222 31223 31264 +516 31224 645 +31224 31265 645 +31224 31225 31266 +31224 31266 31265 +31225 31226 31266 +31226 31267 31266 +31226 31227 31268 +31226 31268 31267 +31227 31228 31268 +31228 31269 31268 +31228 31229 31270 +31228 31270 31269 +31229 31230 31270 +31230 31271 31270 +31230 31231 31272 +31230 31272 31271 +31231 31232 31272 +31232 31273 31272 +31232 31233 31274 +31232 31274 31273 +31233 31234 31274 +31234 31275 31274 +31234 31235 31276 +31234 31276 31275 +31235 31236 31276 +31236 31277 31276 +31236 31237 31278 +31236 31278 31277 +31237 31238 31278 +31238 31279 31278 +31238 31239 31280 +31238 31280 31279 +31239 31240 31280 +31240 31281 31280 +31240 31241 31282 +31240 31282 31281 +31241 31242 31282 +31242 31283 31282 +31242 31243 31284 +31242 31284 31283 +31243 31244 31284 +31244 31285 31284 +31244 31245 31286 +31244 31286 31285 +31245 31246 31286 +31246 31287 31286 +31246 31247 31288 +31246 31288 31287 +31247 31248 31288 +31248 31289 31288 +31248 31249 31290 +31248 31290 31289 +31249 31250 31290 +31250 31291 31290 +31250 31251 31292 +31250 31292 31291 +31251 31252 31292 +31252 31293 31292 +31252 31253 31294 +31252 31294 31293 +31253 31254 31294 +31254 31295 31294 +31254 31255 31296 +31254 31296 31295 +31255 31256 31296 +31256 31297 31296 +31256 31257 31298 +31256 31298 31297 +31257 31258 31298 +31258 31299 31298 +31258 31259 31300 +31258 31300 31299 +31259 31260 31300 +31260 31301 31300 +31260 31261 31302 +31260 31302 31301 +31261 31262 31302 +31262 31303 31302 +31262 31263 31304 +31262 31304 31303 +31263 31264 31304 +645 31265 31305 +645 31305 774 +31265 31266 31305 +31266 31306 31305 +31266 31267 31307 +31266 31307 31306 +31267 31268 31307 +31268 31308 31307 +31268 31269 31309 +31268 31309 31308 +31269 31270 31309 +31270 31310 31309 +31270 31271 31311 +31270 31311 31310 +31271 31272 31311 +31272 31312 31311 +31272 31273 31313 +31272 31313 31312 +31273 31274 31313 +31274 31314 31313 +31274 31275 31315 +31274 31315 31314 +31275 31276 31315 +31276 31316 31315 +31276 31277 31317 +31276 31317 31316 +31277 31278 31317 +31278 31318 31317 +31278 31279 31319 +31278 31319 31318 +31279 31280 31319 +31280 31320 31319 +31280 31281 31321 +31280 31321 31320 +31281 31282 31321 +31282 31322 31321 +31282 31283 31323 +31282 31323 31322 +31283 31284 31323 +31284 31324 31323 +31284 31285 31325 +31284 31325 31324 +31285 31286 31325 +31286 31326 31325 +31286 31287 31327 +31286 31327 31326 +31287 31288 31327 +31288 31328 31327 +31288 31289 31329 +31288 31329 31328 +31289 31290 31329 +31290 31330 31329 +31290 31291 31331 +31290 31331 31330 +31291 31292 31331 +31292 31332 31331 +31292 31293 31333 +31292 31333 31332 +31293 31294 31333 +31294 31334 31333 +31294 31295 31335 +31294 31335 31334 +31295 31296 31335 +31296 31336 31335 +31296 31297 31337 +31296 31337 31336 +31297 31298 31337 +31298 31338 31337 +31298 31299 31339 +31298 31339 31338 +31299 31300 31339 +31300 31340 31339 +31300 31301 31341 +31300 31341 31340 +31301 31302 31341 +31302 31342 31341 +31302 31303 31343 +31302 31343 31342 +31303 31304 31343 +31304 31344 31343 +774 31305 903 +31305 31345 903 +31305 31306 31346 +31305 31346 31345 +31306 31307 31346 +31307 31347 31346 +31307 31308 31348 +31307 31348 31347 +31308 31309 31348 +31309 31349 31348 +31309 31310 31350 +31309 31350 31349 +31310 31311 31350 +31311 31351 31350 +31311 31312 31352 +31311 31352 31351 +31312 31313 31352 +31313 31353 31352 +31313 31314 31354 +31313 31354 31353 +31314 31315 31354 +31315 31355 31354 +31315 31316 31356 +31315 31356 31355 +31316 31317 31356 +31317 31357 31356 +31317 31318 31358 +31317 31358 31357 +31318 31319 31358 +31319 31359 31358 +31319 31320 31360 +31319 31360 31359 +31320 31321 31360 +31321 31361 31360 +31321 31322 31362 +31321 31362 31361 +31322 31323 31362 +31323 31363 31362 +31323 31324 31364 +31323 31364 31363 +31324 31325 31364 +31325 31365 31364 +31325 31326 31366 +31325 31366 31365 +31326 31327 31366 +31327 31367 31366 +31327 31328 31368 +31327 31368 31367 +31328 31329 31368 +31329 31369 31368 +31329 31330 31370 +31329 31370 31369 +31330 31331 31370 +31331 31371 31370 +31331 31332 31372 +31331 31372 31371 +31332 31333 31372 +31333 31373 31372 +31333 31334 31374 +31333 31374 31373 +31334 31335 31374 +31335 31375 31374 +31335 31336 31376 +31335 31376 31375 +31336 31337 31376 +31337 31377 31376 +31337 31338 31378 +31337 31378 31377 +31338 31339 31378 +31339 31379 31378 +31339 31340 31380 +31339 31380 31379 +31340 31341 31380 +31341 31381 31380 +31341 31342 31382 +31341 31382 31381 +31342 31343 31382 +31343 31383 31382 +31343 31344 31384 +31343 31384 31383 +903 31345 31385 +903 31385 1032 +31345 31346 31385 +31346 31386 31385 +31346 31347 31387 +31346 31387 31386 +31347 31348 31387 +31348 31388 31387 +31348 31349 31389 +31348 31389 31388 +31349 31350 31389 +31350 31390 31389 +31350 31351 31391 +31350 31391 31390 +31351 31352 31391 +31352 31392 31391 +31352 31353 31393 +31352 31393 31392 +31353 31354 31393 +31354 31394 31393 +31354 31355 31395 +31354 31395 31394 +31355 31356 31395 +31356 31396 31395 +31356 31357 31397 +31356 31397 31396 +31357 31358 31397 +31358 31398 31397 +31358 31359 31399 +31358 31399 31398 +31359 31360 31399 +31360 31400 31399 +31360 31361 31401 +31360 31401 31400 +31361 31362 31401 +31362 31402 31401 +31362 31363 31403 +31362 31403 31402 +31363 31364 31403 +31364 31404 31403 +31364 31365 31405 +31364 31405 31404 +31365 31366 31405 +31366 31406 31405 +31366 31367 31407 +31366 31407 31406 +31367 31368 31407 +31368 31408 31407 +31368 31369 31409 +31368 31409 31408 +31369 31370 31409 +31370 31410 31409 +31370 31371 31411 +31370 31411 31410 +31371 31372 31411 +31372 31412 31411 +31372 31373 31413 +31372 31413 31412 +31373 31374 31413 +31374 31414 31413 +31374 31375 31415 +31374 31415 31414 +31375 31376 31415 +31376 31416 31415 +31376 31377 31417 +31376 31417 31416 +31377 31378 31417 +31378 31418 31417 +31378 31379 31419 +31378 31419 31418 +31379 31380 31419 +31380 31420 31419 +31380 31381 31421 +31380 31421 31420 +31381 31382 31421 +31382 31422 31421 +31382 31383 31423 +31382 31423 31422 +31383 31384 31423 +1032 31385 1161 +31385 31424 1161 +31385 31386 31425 +31385 31425 31424 +31386 31387 31425 +31387 31426 31425 +31387 31388 31427 +31387 31427 31426 +31388 31389 31427 +31389 31428 31427 +31389 31390 31429 +31389 31429 31428 +31390 31391 31429 +31391 31430 31429 +31391 31392 31431 +31391 31431 31430 +31392 31393 31431 +31393 31432 31431 +31393 31394 31433 +31393 31433 31432 +31394 31395 31433 +31395 31434 31433 +31395 31396 31435 +31395 31435 31434 +31396 31397 31435 +31397 31436 31435 +31397 31398 31437 +31397 31437 31436 +31398 31399 31437 +31399 31438 31437 +31399 31400 31439 +31399 31439 31438 +31400 31401 31439 +31401 31440 31439 +31401 31402 31441 +31401 31441 31440 +31402 31403 31441 +31403 31442 31441 +31403 31404 31443 +31403 31443 31442 +31404 31405 31443 +31405 31444 31443 +31405 31406 31445 +31405 31445 31444 +31406 31407 31445 +31407 31446 31445 +31407 31408 31447 +31407 31447 31446 +31408 31409 31447 +31409 31448 31447 +31409 31410 31449 +31409 31449 31448 +31410 31411 31449 +31411 31450 31449 +31411 31412 31451 +31411 31451 31450 +31412 31413 31451 +31413 31452 31451 +31413 31414 31453 +31413 31453 31452 +31414 31415 31453 +31415 31454 31453 +31415 31416 31455 +31415 31455 31454 +31416 31417 31455 +31417 31456 31455 +31417 31418 31457 +31417 31457 31456 +31418 31419 31457 +31419 31458 31457 +31419 31420 31459 +31419 31459 31458 +31420 31421 31459 +31421 31460 31459 +31421 31422 31461 +31421 31461 31460 +31422 31423 31461 +31423 31462 31461 +1161 31424 31463 +1161 31463 1290 +31424 31425 31463 +31425 31464 31463 +31425 31426 31465 +31425 31465 31464 +31426 31427 31465 +31427 31466 31465 +31427 31428 31467 +31427 31467 31466 +31428 31429 31467 +31429 31468 31467 +31429 31430 31469 +31429 31469 31468 +31430 31431 31469 +31431 31470 31469 +31431 31432 31471 +31431 31471 31470 +31432 31433 31471 +31433 31472 31471 +31433 31434 31473 +31433 31473 31472 +31434 31435 31473 +31435 31474 31473 +31435 31436 31475 +31435 31475 31474 +31436 31437 31475 +31437 31476 31475 +31437 31438 31477 +31437 31477 31476 +31438 31439 31477 +31439 31478 31477 +31439 31440 31479 +31439 31479 31478 +31440 31441 31479 +31441 31480 31479 +31441 31442 31481 +31441 31481 31480 +31442 31443 31481 +31443 31482 31481 +31443 31444 31483 +31443 31483 31482 +31444 31445 31483 +31445 31484 31483 +31445 31446 31485 +31445 31485 31484 +31446 31447 31485 +31447 31486 31485 +31447 31448 31487 +31447 31487 31486 +31448 31449 31487 +31449 31488 31487 +31449 31450 31489 +31449 31489 31488 +31450 31451 31489 +31451 31490 31489 +31451 31452 31491 +31451 31491 31490 +31452 31453 31491 +31453 31492 31491 +31453 31454 31493 +31453 31493 31492 +31454 31455 31493 +31455 31494 31493 +31455 31456 31495 +31455 31495 31494 +31456 31457 31495 +31457 31496 31495 +31457 31458 31497 +31457 31497 31496 +31458 31459 31497 +31459 31498 31497 +31459 31460 31499 +31459 31499 31498 +31460 31461 31499 +31461 31500 31499 +31461 31462 31501 +31461 31501 31500 +1290 31463 1419 +31463 31502 1419 +31463 31464 31503 +31463 31503 31502 +31464 31465 31503 +31465 31504 31503 +31465 31466 31505 +31465 31505 31504 +31466 31467 31505 +31467 31506 31505 +31467 31468 31507 +31467 31507 31506 +31468 31469 31507 +31469 31508 31507 +31469 31470 31509 +31469 31509 31508 +31470 31471 31509 +31471 31510 31509 +31471 31472 31511 +31471 31511 31510 +31472 31473 31511 +31473 31512 31511 +31473 31474 31513 +31473 31513 31512 +31474 31475 31513 +31475 31514 31513 +31475 31476 31515 +31475 31515 31514 +31476 31477 31515 +31477 31516 31515 +31477 31478 31517 +31477 31517 31516 +31478 31479 31517 +31479 31518 31517 +31479 31480 31519 +31479 31519 31518 +31480 31481 31519 +31481 31520 31519 +31481 31482 31521 +31481 31521 31520 +31482 31483 31521 +31483 31522 31521 +31483 31484 31523 +31483 31523 31522 +31484 31485 31523 +31485 31524 31523 +31485 31486 31525 +31485 31525 31524 +31486 31487 31525 +31487 31526 31525 +31487 31488 31527 +31487 31527 31526 +31488 31489 31527 +31489 31528 31527 +31489 31490 31529 +31489 31529 31528 +31490 31491 31529 +31491 31530 31529 +31491 31492 31531 +31491 31531 31530 +31492 31493 31531 +31493 31532 31531 +31493 31494 31533 +31493 31533 31532 +31494 31495 31533 +31495 31534 31533 +31495 31496 31535 +31495 31535 31534 +31496 31497 31535 +31497 31536 31535 +31497 31498 31537 +31497 31537 31536 +31498 31499 31537 +31499 31538 31537 +31499 31500 31539 +31499 31539 31538 +31500 31501 31539 +1419 31502 31540 +1419 31540 1548 +31502 31503 31540 +31503 31541 31540 +31503 31504 31542 +31503 31542 31541 +31504 31505 31542 +31505 31543 31542 +31505 31506 31544 +31505 31544 31543 +31506 31507 31544 +31507 31545 31544 +31507 31508 31546 +31507 31546 31545 +31508 31509 31546 +31509 31547 31546 +31509 31510 31548 +31509 31548 31547 +31510 31511 31548 +31511 31549 31548 +31511 31512 31550 +31511 31550 31549 +31512 31513 31550 +31513 31551 31550 +31513 31514 31552 +31513 31552 31551 +31514 31515 31552 +31515 31553 31552 +31515 31516 31554 +31515 31554 31553 +31516 31517 31554 +31517 31555 31554 +31517 31518 31556 +31517 31556 31555 +31518 31519 31556 +31519 31557 31556 +31519 31520 31558 +31519 31558 31557 +31520 31521 31558 +31521 31559 31558 +31521 31522 31560 +31521 31560 31559 +31522 31523 31560 +31523 31561 31560 +31523 31524 31562 +31523 31562 31561 +31524 31525 31562 +31525 31563 31562 +31525 31526 31564 +31525 31564 31563 +31526 31527 31564 +31527 31565 31564 +31527 31528 31566 +31527 31566 31565 +31528 31529 31566 +31529 31567 31566 +31529 31530 31568 +31529 31568 31567 +31530 31531 31568 +31531 31569 31568 +31531 31532 31570 +31531 31570 31569 +31532 31533 31570 +31533 31571 31570 +31533 31534 31572 +31533 31572 31571 +31534 31535 31572 +31535 31573 31572 +31535 31536 31574 +31535 31574 31573 +31536 31537 31574 +31537 31575 31574 +31537 31538 31576 +31537 31576 31575 +31538 31539 31576 +31539 31577 31576 +1548 31540 1677 +31540 31578 1677 +31540 31541 31579 +31540 31579 31578 +31541 31542 31579 +31542 31580 31579 +31542 31543 31581 +31542 31581 31580 +31543 31544 31581 +31544 31582 31581 +31544 31545 31583 +31544 31583 31582 +31545 31546 31583 +31546 31584 31583 +31546 31547 31585 +31546 31585 31584 +31547 31548 31585 +31548 31586 31585 +31548 31549 31587 +31548 31587 31586 +31549 31550 31587 +31550 31588 31587 +31550 31551 31589 +31550 31589 31588 +31551 31552 31589 +31552 31590 31589 +31552 31553 31591 +31552 31591 31590 +31553 31554 31591 +31554 31592 31591 +31554 31555 31593 +31554 31593 31592 +31555 31556 31593 +31556 31594 31593 +31556 31557 31595 +31556 31595 31594 +31557 31558 31595 +31558 31596 31595 +31558 31559 31597 +31558 31597 31596 +31559 31560 31597 +31560 31598 31597 +31560 31561 31599 +31560 31599 31598 +31561 31562 31599 +31562 31600 31599 +31562 31563 31601 +31562 31601 31600 +31563 31564 31601 +31564 31602 31601 +31564 31565 31603 +31564 31603 31602 +31565 31566 31603 +31566 31604 31603 +31566 31567 31605 +31566 31605 31604 +31567 31568 31605 +31568 31606 31605 +31568 31569 31607 +31568 31607 31606 +31569 31570 31607 +31570 31608 31607 +31570 31571 31609 +31570 31609 31608 +31571 31572 31609 +31572 31610 31609 +31572 31573 31611 +31572 31611 31610 +31573 31574 31611 +31574 31612 31611 +31574 31575 31613 +31574 31613 31612 +31575 31576 31613 +31576 31614 31613 +31576 31577 31615 +31576 31615 31614 +1677 31578 31616 +1677 31616 1806 +31578 31579 31616 +31579 31617 31616 +31579 31580 31618 +31579 31618 31617 +31580 31581 31618 +31581 31619 31618 +31581 31582 31620 +31581 31620 31619 +31582 31583 31620 +31583 31621 31620 +31583 31584 31622 +31583 31622 31621 +31584 31585 31622 +31585 31623 31622 +31585 31586 31624 +31585 31624 31623 +31586 31587 31624 +31587 31625 31624 +31587 31588 31626 +31587 31626 31625 +31588 31589 31626 +31589 31627 31626 +31589 31590 31628 +31589 31628 31627 +31590 31591 31628 +31591 31629 31628 +31591 31592 31630 +31591 31630 31629 +31592 31593 31630 +31593 31631 31630 +31593 31594 31632 +31593 31632 31631 +31594 31595 31632 +31595 31633 31632 +31595 31596 31634 +31595 31634 31633 +31596 31597 31634 +31597 31635 31634 +31597 31598 31636 +31597 31636 31635 +31598 31599 31636 +31599 31637 31636 +31599 31600 31638 +31599 31638 31637 +31600 31601 31638 +31601 31639 31638 +31601 31602 31640 +31601 31640 31639 +31602 31603 31640 +31603 31641 31640 +31603 31604 31642 +31603 31642 31641 +31604 31605 31642 +31605 31643 31642 +31605 31606 31644 +31605 31644 31643 +31606 31607 31644 +31607 31645 31644 +31607 31608 31646 +31607 31646 31645 +31608 31609 31646 +31609 31647 31646 +31609 31610 31648 +31609 31648 31647 +31610 31611 31648 +31611 31649 31648 +31611 31612 31650 +31611 31650 31649 +31612 31613 31650 +31613 31651 31650 +31613 31614 31652 +31613 31652 31651 +31614 31615 31652 +1806 31616 1935 +31616 31653 1935 +31616 31617 31654 +31616 31654 31653 +31617 31618 31654 +31618 31655 31654 +31618 31619 31656 +31618 31656 31655 +31619 31620 31656 +31620 31657 31656 +31620 31621 31658 +31620 31658 31657 +31621 31622 31658 +31622 31659 31658 +31622 31623 31660 +31622 31660 31659 +31623 31624 31660 +31624 31661 31660 +31624 31625 31662 +31624 31662 31661 +31625 31626 31662 +31626 31663 31662 +31626 31627 31664 +31626 31664 31663 +31627 31628 31664 +31628 31665 31664 +31628 31629 31666 +31628 31666 31665 +31629 31630 31666 +31630 31667 31666 +31630 31631 31668 +31630 31668 31667 +31631 31632 31668 +31632 31669 31668 +31632 31633 31670 +31632 31670 31669 +31633 31634 31670 +31634 31671 31670 +31634 31635 31672 +31634 31672 31671 +31635 31636 31672 +31636 31673 31672 +31636 31637 31674 +31636 31674 31673 +31637 31638 31674 +31638 31675 31674 +31638 31639 31676 +31638 31676 31675 +31639 31640 31676 +31640 31677 31676 +31640 31641 31678 +31640 31678 31677 +31641 31642 31678 +31642 31679 31678 +31642 31643 31680 +31642 31680 31679 +31643 31644 31680 +31644 31681 31680 +31644 31645 31682 +31644 31682 31681 +31645 31646 31682 +31646 31683 31682 +31646 31647 31684 +31646 31684 31683 +31647 31648 31684 +31648 31685 31684 +31648 31649 31686 +31648 31686 31685 +31649 31650 31686 +31650 31687 31686 +31650 31651 31688 +31650 31688 31687 +31651 31652 31688 +1935 31653 31689 +1935 31689 2064 +31653 31654 31689 +31654 31690 31689 +31654 31655 31691 +31654 31691 31690 +31655 31656 31691 +31656 31692 31691 +31656 31657 31693 +31656 31693 31692 +31657 31658 31693 +31658 31694 31693 +31658 31659 31695 +31658 31695 31694 +31659 31660 31695 +31660 31696 31695 +31660 31661 31697 +31660 31697 31696 +31661 31662 31697 +31662 31698 31697 +31662 31663 31699 +31662 31699 31698 +31663 31664 31699 +31664 31700 31699 +31664 31665 31701 +31664 31701 31700 +31665 31666 31701 +31666 31702 31701 +31666 31667 31703 +31666 31703 31702 +31667 31668 31703 +31668 31704 31703 +31668 31669 31705 +31668 31705 31704 +31669 31670 31705 +31670 31706 31705 +31670 31671 31707 +31670 31707 31706 +31671 31672 31707 +31672 31708 31707 +31672 31673 31709 +31672 31709 31708 +31673 31674 31709 +31674 31710 31709 +31674 31675 31711 +31674 31711 31710 +31675 31676 31711 +31676 31712 31711 +31676 31677 31713 +31676 31713 31712 +31677 31678 31713 +31678 31714 31713 +31678 31679 31715 +31678 31715 31714 +31679 31680 31715 +31680 31716 31715 +31680 31681 31717 +31680 31717 31716 +31681 31682 31717 +31682 31718 31717 +31682 31683 31719 +31682 31719 31718 +31683 31684 31719 +31684 31720 31719 +31684 31685 31721 +31684 31721 31720 +31685 31686 31721 +31686 31722 31721 +31686 31687 31723 +31686 31723 31722 +31687 31688 31723 +31688 31724 31723 +2064 31689 2193 +31689 31725 2193 +31689 31690 31726 +31689 31726 31725 +31690 31691 31726 +31691 31727 31726 +31691 31692 31728 +31691 31728 31727 +31692 31693 31728 +31693 31729 31728 +31693 31694 31730 +31693 31730 31729 +31694 31695 31730 +31695 31731 31730 +31695 31696 31732 +31695 31732 31731 +31696 31697 31732 +31697 31733 31732 +31697 31698 31734 +31697 31734 31733 +31698 31699 31734 +31699 31735 31734 +31699 31700 31736 +31699 31736 31735 +31700 31701 31736 +31701 31737 31736 +31701 31702 31738 +31701 31738 31737 +31702 31703 31738 +31703 31739 31738 +31703 31704 31740 +31703 31740 31739 +31704 31705 31740 +31705 31741 31740 +31705 31706 31742 +31705 31742 31741 +31706 31707 31742 +31707 31743 31742 +31707 31708 31744 +31707 31744 31743 +31708 31709 31744 +31709 31745 31744 +31709 31710 31746 +31709 31746 31745 +31710 31711 31746 +31711 31747 31746 +31711 31712 31748 +31711 31748 31747 +31712 31713 31748 +31713 31749 31748 +31713 31714 31750 +31713 31750 31749 +31714 31715 31750 +31715 31751 31750 +31715 31716 31752 +31715 31752 31751 +31716 31717 31752 +31717 31753 31752 +31717 31718 31754 +31717 31754 31753 +31718 31719 31754 +31719 31755 31754 +31719 31720 31756 +31719 31756 31755 +31720 31721 31756 +31721 31757 31756 +31721 31722 31758 +31721 31758 31757 +31722 31723 31758 +31723 31759 31758 +31723 31724 31760 +31723 31760 31759 +2193 31725 31761 +2193 31761 2322 +31725 31726 31761 +31726 31762 31761 +31726 31727 31763 +31726 31763 31762 +31727 31728 31763 +31728 31764 31763 +31728 31729 31765 +31728 31765 31764 +31729 31730 31765 +31730 31766 31765 +31730 31731 31767 +31730 31767 31766 +31731 31732 31767 +31732 31768 31767 +31732 31733 31769 +31732 31769 31768 +31733 31734 31769 +31734 31770 31769 +31734 31735 31771 +31734 31771 31770 +31735 31736 31771 +31736 31772 31771 +31736 31737 31773 +31736 31773 31772 +31737 31738 31773 +31738 31774 31773 +31738 31739 31775 +31738 31775 31774 +31739 31740 31775 +31740 31776 31775 +31740 31741 31777 +31740 31777 31776 +31741 31742 31777 +31742 31778 31777 +31742 31743 31779 +31742 31779 31778 +31743 31744 31779 +31744 31780 31779 +31744 31745 31781 +31744 31781 31780 +31745 31746 31781 +31746 31782 31781 +31746 31747 31783 +31746 31783 31782 +31747 31748 31783 +31748 31784 31783 +31748 31749 31785 +31748 31785 31784 +31749 31750 31785 +31750 31786 31785 +31750 31751 31787 +31750 31787 31786 +31751 31752 31787 +31752 31788 31787 +31752 31753 31789 +31752 31789 31788 +31753 31754 31789 +31754 31790 31789 +31754 31755 31791 +31754 31791 31790 +31755 31756 31791 +31756 31792 31791 +31756 31757 31793 +31756 31793 31792 +31757 31758 31793 +31758 31794 31793 +31758 31759 31795 +31758 31795 31794 +31759 31760 31795 +2322 31761 2451 +31761 31796 2451 +31761 31762 31797 +31761 31797 31796 +31762 31763 31797 +31763 31798 31797 +31763 31764 31799 +31763 31799 31798 +31764 31765 31799 +31765 31800 31799 +31765 31766 31801 +31765 31801 31800 +31766 31767 31801 +31767 31802 31801 +31767 31768 31803 +31767 31803 31802 +31768 31769 31803 +31769 31804 31803 +31769 31770 31805 +31769 31805 31804 +31770 31771 31805 +31771 31806 31805 +31771 31772 31807 +31771 31807 31806 +31772 31773 31807 +31773 31808 31807 +31773 31774 31809 +31773 31809 31808 +31774 31775 31809 +31775 31810 31809 +31775 31776 31811 +31775 31811 31810 +31776 31777 31811 +31777 31812 31811 +31777 31778 31813 +31777 31813 31812 +31778 31779 31813 +31779 31814 31813 +31779 31780 31815 +31779 31815 31814 +31780 31781 31815 +31781 31816 31815 +31781 31782 31817 +31781 31817 31816 +31782 31783 31817 +31783 31818 31817 +31783 31784 31819 +31783 31819 31818 +31784 31785 31819 +31785 31820 31819 +31785 31786 31821 +31785 31821 31820 +31786 31787 31821 +31787 31822 31821 +31787 31788 31823 +31787 31823 31822 +31788 31789 31823 +31789 31824 31823 +31789 31790 31825 +31789 31825 31824 +31790 31791 31825 +31791 31826 31825 +31791 31792 31827 +31791 31827 31826 +31792 31793 31827 +31793 31828 31827 +31793 31794 31829 +31793 31829 31828 +31794 31795 31829 +2451 31796 31830 +2451 31830 2580 +31796 31797 31830 +31797 31831 31830 +31797 31798 31832 +31797 31832 31831 +31798 31799 31832 +31799 31833 31832 +31799 31800 31834 +31799 31834 31833 +31800 31801 31834 +31801 31835 31834 +31801 31802 31836 +31801 31836 31835 +31802 31803 31836 +31803 31837 31836 +31803 31804 31838 +31803 31838 31837 +31804 31805 31838 +31805 31839 31838 +31805 31806 31840 +31805 31840 31839 +31806 31807 31840 +31807 31841 31840 +31807 31808 31842 +31807 31842 31841 +31808 31809 31842 +31809 31843 31842 +31809 31810 31844 +31809 31844 31843 +31810 31811 31844 +31811 31845 31844 +31811 31812 31846 +31811 31846 31845 +31812 31813 31846 +31813 31847 31846 +31813 31814 31848 +31813 31848 31847 +31814 31815 31848 +31815 31849 31848 +31815 31816 31850 +31815 31850 31849 +31816 31817 31850 +31817 31851 31850 +31817 31818 31852 +31817 31852 31851 +31818 31819 31852 +31819 31853 31852 +31819 31820 31854 +31819 31854 31853 +31820 31821 31854 +31821 31855 31854 +31821 31822 31856 +31821 31856 31855 +31822 31823 31856 +31823 31857 31856 +31823 31824 31858 +31823 31858 31857 +31824 31825 31858 +31825 31859 31858 +31825 31826 31860 +31825 31860 31859 +31826 31827 31860 +31827 31861 31860 +31827 31828 31862 +31827 31862 31861 +31828 31829 31862 +2580 31830 2709 +31830 31863 2709 +31830 31831 31864 +31830 31864 31863 +31831 31832 31864 +31832 31865 31864 +31832 31833 31866 +31832 31866 31865 +31833 31834 31866 +31834 31867 31866 +31834 31835 31868 +31834 31868 31867 +31835 31836 31868 +31836 31869 31868 +31836 31837 31870 +31836 31870 31869 +31837 31838 31870 +31838 31871 31870 +31838 31839 31872 +31838 31872 31871 +31839 31840 31872 +31840 31873 31872 +31840 31841 31874 +31840 31874 31873 +31841 31842 31874 +31842 31875 31874 +31842 31843 31876 +31842 31876 31875 +31843 31844 31876 +31844 31877 31876 +31844 31845 31878 +31844 31878 31877 +31845 31846 31878 +31846 31879 31878 +31846 31847 31880 +31846 31880 31879 +31847 31848 31880 +31848 31881 31880 +31848 31849 31882 +31848 31882 31881 +31849 31850 31882 +31850 31883 31882 +31850 31851 31884 +31850 31884 31883 +31851 31852 31884 +31852 31885 31884 +31852 31853 31886 +31852 31886 31885 +31853 31854 31886 +31854 31887 31886 +31854 31855 31888 +31854 31888 31887 +31855 31856 31888 +31856 31889 31888 +31856 31857 31890 +31856 31890 31889 +31857 31858 31890 +31858 31891 31890 +31858 31859 31892 +31858 31892 31891 +31859 31860 31892 +31860 31893 31892 +31860 31861 31894 +31860 31894 31893 +31861 31862 31894 +2709 31863 31895 +2709 31895 2838 +31863 31864 31895 +31864 31896 31895 +31864 31865 31897 +31864 31897 31896 +31865 31866 31897 +31866 31898 31897 +31866 31867 31899 +31866 31899 31898 +31867 31868 31899 +31868 31900 31899 +31868 31869 31901 +31868 31901 31900 +31869 31870 31901 +31870 31902 31901 +31870 31871 31903 +31870 31903 31902 +31871 31872 31903 +31872 31904 31903 +31872 31873 31905 +31872 31905 31904 +31873 31874 31905 +31874 31906 31905 +31874 31875 31907 +31874 31907 31906 +31875 31876 31907 +31876 31908 31907 +31876 31877 31909 +31876 31909 31908 +31877 31878 31909 +31878 31910 31909 +31878 31879 31911 +31878 31911 31910 +31879 31880 31911 +31880 31912 31911 +31880 31881 31913 +31880 31913 31912 +31881 31882 31913 +31882 31914 31913 +31882 31883 31915 +31882 31915 31914 +31883 31884 31915 +31884 31916 31915 +31884 31885 31917 +31884 31917 31916 +31885 31886 31917 +31886 31918 31917 +31886 31887 31919 +31886 31919 31918 +31887 31888 31919 +31888 31920 31919 +31888 31889 31921 +31888 31921 31920 +31889 31890 31921 +31890 31922 31921 +31890 31891 31923 +31890 31923 31922 +31891 31892 31923 +31892 31924 31923 +31892 31893 31925 +31892 31925 31924 +31893 31894 31925 +31894 31926 31925 +2838 31895 2967 +31895 31927 2967 +31895 31896 31928 +31895 31928 31927 +31896 31897 31928 +31897 31929 31928 +31897 31898 31930 +31897 31930 31929 +31898 31899 31930 +31899 31931 31930 +31899 31900 31932 +31899 31932 31931 +31900 31901 31932 +31901 31933 31932 +31901 31902 31934 +31901 31934 31933 +31902 31903 31934 +31903 31935 31934 +31903 31904 31936 +31903 31936 31935 +31904 31905 31936 +31905 31937 31936 +31905 31906 31938 +31905 31938 31937 +31906 31907 31938 +31907 31939 31938 +31907 31908 31940 +31907 31940 31939 +31908 31909 31940 +31909 31941 31940 +31909 31910 31942 +31909 31942 31941 +31910 31911 31942 +31911 31943 31942 +31911 31912 31944 +31911 31944 31943 +31912 31913 31944 +31913 31945 31944 +31913 31914 31946 +31913 31946 31945 +31914 31915 31946 +31915 31947 31946 +31915 31916 31948 +31915 31948 31947 +31916 31917 31948 +31917 31949 31948 +31917 31918 31950 +31917 31950 31949 +31918 31919 31950 +31919 31951 31950 +31919 31920 31952 +31919 31952 31951 +31920 31921 31952 +31921 31953 31952 +31921 31922 31954 +31921 31954 31953 +31922 31923 31954 +31923 31955 31954 +31923 31924 31956 +31923 31956 31955 +31924 31925 31956 +31925 31957 31956 +31925 31926 31958 +31925 31958 31957 +2967 31927 31959 +2967 31959 3096 +31927 31928 31959 +31928 31960 31959 +31928 31929 31961 +31928 31961 31960 +31929 31930 31961 +31930 31962 31961 +31930 31931 31963 +31930 31963 31962 +31931 31932 31963 +31932 31964 31963 +31932 31933 31965 +31932 31965 31964 +31933 31934 31965 +31934 31966 31965 +31934 31935 31967 +31934 31967 31966 +31935 31936 31967 +31936 31968 31967 +31936 31937 31969 +31936 31969 31968 +31937 31938 31969 +31938 31970 31969 +31938 31939 31971 +31938 31971 31970 +31939 31940 31971 +31940 31972 31971 +31940 31941 31973 +31940 31973 31972 +31941 31942 31973 +31942 31974 31973 +31942 31943 31975 +31942 31975 31974 +31943 31944 31975 +31944 31976 31975 +31944 31945 31977 +31944 31977 31976 +31945 31946 31977 +31946 31978 31977 +31946 31947 31979 +31946 31979 31978 +31947 31948 31979 +31948 31980 31979 +31948 31949 31981 +31948 31981 31980 +31949 31950 31981 +31950 31982 31981 +31950 31951 31983 +31950 31983 31982 +31951 31952 31983 +31952 31984 31983 +31952 31953 31985 +31952 31985 31984 +31953 31954 31985 +31954 31986 31985 +31954 31955 31987 +31954 31987 31986 +31955 31956 31987 +31956 31988 31987 +31956 31957 31989 +31956 31989 31988 +31957 31958 31989 +3096 31959 3225 +31959 31990 3225 +31959 31960 31991 +31959 31991 31990 +31960 31961 31991 +31961 31992 31991 +31961 31962 31993 +31961 31993 31992 +31962 31963 31993 +31963 31994 31993 +31963 31964 31995 +31963 31995 31994 +31964 31965 31995 +31965 31996 31995 +31965 31966 31997 +31965 31997 31996 +31966 31967 31997 +31967 31998 31997 +31967 31968 31999 +31967 31999 31998 +31968 31969 31999 +31969 32000 31999 +31969 31970 32001 +31969 32001 32000 +31970 31971 32001 +31971 32002 32001 +31971 31972 32003 +31971 32003 32002 +31972 31973 32003 +31973 32004 32003 +31973 31974 32005 +31973 32005 32004 +31974 31975 32005 +31975 32006 32005 +31975 31976 32007 +31975 32007 32006 +31976 31977 32007 +31977 32008 32007 +31977 31978 32009 +31977 32009 32008 +31978 31979 32009 +31979 32010 32009 +31979 31980 32011 +31979 32011 32010 +31980 31981 32011 +31981 32012 32011 +31981 31982 32013 +31981 32013 32012 +31982 31983 32013 +31983 32014 32013 +31983 31984 32015 +31983 32015 32014 +31984 31985 32015 +31985 32016 32015 +31985 31986 32017 +31985 32017 32016 +31986 31987 32017 +31987 32018 32017 +31987 31988 32019 +31987 32019 32018 +31988 31989 32019 +31989 32020 32019 +3225 31990 32021 +3225 32021 3354 +31990 31991 32021 +31991 32022 32021 +31991 31992 32023 +31991 32023 32022 +31992 31993 32023 +31993 32024 32023 +31993 31994 32025 +31993 32025 32024 +31994 31995 32025 +31995 32026 32025 +31995 31996 32027 +31995 32027 32026 +31996 31997 32027 +31997 32028 32027 +31997 31998 32029 +31997 32029 32028 +31998 31999 32029 +31999 32030 32029 +31999 32000 32031 +31999 32031 32030 +32000 32001 32031 +32001 32032 32031 +32001 32002 32033 +32001 32033 32032 +32002 32003 32033 +32003 32034 32033 +32003 32004 32035 +32003 32035 32034 +32004 32005 32035 +32005 32036 32035 +32005 32006 32037 +32005 32037 32036 +32006 32007 32037 +32007 32038 32037 +32007 32008 32039 +32007 32039 32038 +32008 32009 32039 +32009 32040 32039 +32009 32010 32041 +32009 32041 32040 +32010 32011 32041 +32011 32042 32041 +32011 32012 32043 +32011 32043 32042 +32012 32013 32043 +32013 32044 32043 +32013 32014 32045 +32013 32045 32044 +32014 32015 32045 +32015 32046 32045 +32015 32016 32047 +32015 32047 32046 +32016 32017 32047 +32017 32048 32047 +32017 32018 32049 +32017 32049 32048 +32018 32019 32049 +32019 32050 32049 +32019 32020 32051 +32019 32051 32050 +3354 32021 3483 +32021 32052 3483 +32021 32022 32053 +32021 32053 32052 +32022 32023 32053 +32023 32054 32053 +32023 32024 32055 +32023 32055 32054 +32024 32025 32055 +32025 32056 32055 +32025 32026 32057 +32025 32057 32056 +32026 32027 32057 +32027 32058 32057 +32027 32028 32059 +32027 32059 32058 +32028 32029 32059 +32029 32060 32059 +32029 32030 32061 +32029 32061 32060 +32030 32031 32061 +32031 32062 32061 +32031 32032 32063 +32031 32063 32062 +32032 32033 32063 +32033 32064 32063 +32033 32034 32065 +32033 32065 32064 +32034 32035 32065 +32035 32066 32065 +32035 32036 32067 +32035 32067 32066 +32036 32037 32067 +32037 32068 32067 +32037 32038 32069 +32037 32069 32068 +32038 32039 32069 +32039 32070 32069 +32039 32040 32071 +32039 32071 32070 +32040 32041 32071 +32041 32072 32071 +32041 32042 32073 +32041 32073 32072 +32042 32043 32073 +32043 32074 32073 +32043 32044 32075 +32043 32075 32074 +32044 32045 32075 +32045 32076 32075 +32045 32046 32077 +32045 32077 32076 +32046 32047 32077 +32047 32078 32077 +32047 32048 32079 +32047 32079 32078 +32048 32049 32079 +32049 32080 32079 +32049 32050 32081 +32049 32081 32080 +32050 32051 32081 +3483 32052 32082 +3483 32082 3612 +32052 32053 32082 +32053 32083 32082 +32053 32054 32084 +32053 32084 32083 +32054 32055 32084 +32055 32085 32084 +32055 32056 32086 +32055 32086 32085 +32056 32057 32086 +32057 32087 32086 +32057 32058 32088 +32057 32088 32087 +32058 32059 32088 +32059 32089 32088 +32059 32060 32090 +32059 32090 32089 +32060 32061 32090 +32061 32091 32090 +32061 32062 32092 +32061 32092 32091 +32062 32063 32092 +32063 32093 32092 +32063 32064 32094 +32063 32094 32093 +32064 32065 32094 +32065 32095 32094 +32065 32066 32096 +32065 32096 32095 +32066 32067 32096 +32067 32097 32096 +32067 32068 32098 +32067 32098 32097 +32068 32069 32098 +32069 32099 32098 +32069 32070 32100 +32069 32100 32099 +32070 32071 32100 +32071 32101 32100 +32071 32072 32102 +32071 32102 32101 +32072 32073 32102 +32073 32103 32102 +32073 32074 32104 +32073 32104 32103 +32074 32075 32104 +32075 32105 32104 +32075 32076 32106 +32075 32106 32105 +32076 32077 32106 +32077 32107 32106 +32077 32078 32108 +32077 32108 32107 +32078 32079 32108 +32079 32109 32108 +32079 32080 32110 +32079 32110 32109 +32080 32081 32110 +32081 32111 32110 +3612 32082 3741 +32082 32112 3741 +32082 32083 32113 +32082 32113 32112 +32083 32084 32113 +32084 32114 32113 +32084 32085 32115 +32084 32115 32114 +32085 32086 32115 +32086 32116 32115 +32086 32087 32117 +32086 32117 32116 +32087 32088 32117 +32088 32118 32117 +32088 32089 32119 +32088 32119 32118 +32089 32090 32119 +32090 32120 32119 +32090 32091 32121 +32090 32121 32120 +32091 32092 32121 +32092 32122 32121 +32092 32093 32123 +32092 32123 32122 +32093 32094 32123 +32094 32124 32123 +32094 32095 32125 +32094 32125 32124 +32095 32096 32125 +32096 32126 32125 +32096 32097 32127 +32096 32127 32126 +32097 32098 32127 +32098 32128 32127 +32098 32099 32129 +32098 32129 32128 +32099 32100 32129 +32100 32130 32129 +32100 32101 32131 +32100 32131 32130 +32101 32102 32131 +32102 32132 32131 +32102 32103 32133 +32102 32133 32132 +32103 32104 32133 +32104 32134 32133 +32104 32105 32135 +32104 32135 32134 +32105 32106 32135 +32106 32136 32135 +32106 32107 32137 +32106 32137 32136 +32107 32108 32137 +32108 32138 32137 +32108 32109 32139 +32108 32139 32138 +32109 32110 32139 +32110 32140 32139 +32110 32111 32141 +32110 32141 32140 +3741 32112 32142 +3741 32142 3870 +32112 32113 32142 +32113 32143 32142 +32113 32114 32144 +32113 32144 32143 +32114 32115 32144 +32115 32145 32144 +32115 32116 32146 +32115 32146 32145 +32116 32117 32146 +32117 32147 32146 +32117 32118 32148 +32117 32148 32147 +32118 32119 32148 +32119 32149 32148 +32119 32120 32150 +32119 32150 32149 +32120 32121 32150 +32121 32151 32150 +32121 32122 32152 +32121 32152 32151 +32122 32123 32152 +32123 32153 32152 +32123 32124 32154 +32123 32154 32153 +32124 32125 32154 +32125 32155 32154 +32125 32126 32156 +32125 32156 32155 +32126 32127 32156 +32127 32157 32156 +32127 32128 32158 +32127 32158 32157 +32128 32129 32158 +32129 32159 32158 +32129 32130 32160 +32129 32160 32159 +32130 32131 32160 +32131 32161 32160 +32131 32132 32162 +32131 32162 32161 +32132 32133 32162 +32133 32163 32162 +32133 32134 32164 +32133 32164 32163 +32134 32135 32164 +32135 32165 32164 +32135 32136 32166 +32135 32166 32165 +32136 32137 32166 +32137 32167 32166 +32137 32138 32168 +32137 32168 32167 +32138 32139 32168 +32139 32169 32168 +32139 32140 32170 +32139 32170 32169 +32140 32141 32170 +3870 32142 3999 +32142 32171 3999 +32142 32143 32172 +32142 32172 32171 +32143 32144 32172 +32144 32173 32172 +32144 32145 32174 +32144 32174 32173 +32145 32146 32174 +32146 32175 32174 +32146 32147 32176 +32146 32176 32175 +32147 32148 32176 +32148 32177 32176 +32148 32149 32178 +32148 32178 32177 +32149 32150 32178 +32150 32179 32178 +32150 32151 32180 +32150 32180 32179 +32151 32152 32180 +32152 32181 32180 +32152 32153 32182 +32152 32182 32181 +32153 32154 32182 +32154 32183 32182 +32154 32155 32184 +32154 32184 32183 +32155 32156 32184 +32156 32185 32184 +32156 32157 32186 +32156 32186 32185 +32157 32158 32186 +32158 32187 32186 +32158 32159 32188 +32158 32188 32187 +32159 32160 32188 +32160 32189 32188 +32160 32161 32190 +32160 32190 32189 +32161 32162 32190 +32162 32191 32190 +32162 32163 32192 +32162 32192 32191 +32163 32164 32192 +32164 32193 32192 +32164 32165 32194 +32164 32194 32193 +32165 32166 32194 +32166 32195 32194 +32166 32167 32196 +32166 32196 32195 +32167 32168 32196 +32168 32197 32196 +32168 32169 32198 +32168 32198 32197 +32169 32170 32198 +3999 32171 32199 +3999 32199 4128 +32171 32172 32199 +32172 32200 32199 +32172 32173 32201 +32172 32201 32200 +32173 32174 32201 +32174 32202 32201 +32174 32175 32203 +32174 32203 32202 +32175 32176 32203 +32176 32204 32203 +32176 32177 32205 +32176 32205 32204 +32177 32178 32205 +32178 32206 32205 +32178 32179 32207 +32178 32207 32206 +32179 32180 32207 +32180 32208 32207 +32180 32181 32209 +32180 32209 32208 +32181 32182 32209 +32182 32210 32209 +32182 32183 32211 +32182 32211 32210 +32183 32184 32211 +32184 32212 32211 +32184 32185 32213 +32184 32213 32212 +32185 32186 32213 +32186 32214 32213 +32186 32187 32215 +32186 32215 32214 +32187 32188 32215 +32188 32216 32215 +32188 32189 32217 +32188 32217 32216 +32189 32190 32217 +32190 32218 32217 +32190 32191 32219 +32190 32219 32218 +32191 32192 32219 +32192 32220 32219 +32192 32193 32221 +32192 32221 32220 +32193 32194 32221 +32194 32222 32221 +32194 32195 32223 +32194 32223 32222 +32195 32196 32223 +32196 32224 32223 +32196 32197 32225 +32196 32225 32224 +32197 32198 32225 +32198 32226 32225 +4128 32199 4257 +32199 32227 4257 +32199 32200 32228 +32199 32228 32227 +32200 32201 32228 +32201 32229 32228 +32201 32202 32230 +32201 32230 32229 +32202 32203 32230 +32203 32231 32230 +32203 32204 32232 +32203 32232 32231 +32204 32205 32232 +32205 32233 32232 +32205 32206 32234 +32205 32234 32233 +32206 32207 32234 +32207 32235 32234 +32207 32208 32236 +32207 32236 32235 +32208 32209 32236 +32209 32237 32236 +32209 32210 32238 +32209 32238 32237 +32210 32211 32238 +32211 32239 32238 +32211 32212 32240 +32211 32240 32239 +32212 32213 32240 +32213 32241 32240 +32213 32214 32242 +32213 32242 32241 +32214 32215 32242 +32215 32243 32242 +32215 32216 32244 +32215 32244 32243 +32216 32217 32244 +32217 32245 32244 +32217 32218 32246 +32217 32246 32245 +32218 32219 32246 +32219 32247 32246 +32219 32220 32248 +32219 32248 32247 +32220 32221 32248 +32221 32249 32248 +32221 32222 32250 +32221 32250 32249 +32222 32223 32250 +32223 32251 32250 +32223 32224 32252 +32223 32252 32251 +32224 32225 32252 +32225 32253 32252 +32225 32226 32254 +32225 32254 32253 +4257 32227 32255 +4257 32255 4386 +32227 32228 32255 +32228 32256 32255 +32228 32229 32257 +32228 32257 32256 +32229 32230 32257 +32230 32258 32257 +32230 32231 32259 +32230 32259 32258 +32231 32232 32259 +32232 32260 32259 +32232 32233 32261 +32232 32261 32260 +32233 32234 32261 +32234 32262 32261 +32234 32235 32263 +32234 32263 32262 +32235 32236 32263 +32236 32264 32263 +32236 32237 32265 +32236 32265 32264 +32237 32238 32265 +32238 32266 32265 +32238 32239 32267 +32238 32267 32266 +32239 32240 32267 +32240 32268 32267 +32240 32241 32269 +32240 32269 32268 +32241 32242 32269 +32242 32270 32269 +32242 32243 32271 +32242 32271 32270 +32243 32244 32271 +32244 32272 32271 +32244 32245 32273 +32244 32273 32272 +32245 32246 32273 +32246 32274 32273 +32246 32247 32275 +32246 32275 32274 +32247 32248 32275 +32248 32276 32275 +32248 32249 32277 +32248 32277 32276 +32249 32250 32277 +32250 32278 32277 +32250 32251 32279 +32250 32279 32278 +32251 32252 32279 +32252 32280 32279 +32252 32253 32281 +32252 32281 32280 +32253 32254 32281 +4386 32255 4515 +32255 32282 4515 +32255 32256 32283 +32255 32283 32282 +32256 32257 32283 +32257 32284 32283 +32257 32258 32285 +32257 32285 32284 +32258 32259 32285 +32259 32286 32285 +32259 32260 32287 +32259 32287 32286 +32260 32261 32287 +32261 32288 32287 +32261 32262 32289 +32261 32289 32288 +32262 32263 32289 +32263 32290 32289 +32263 32264 32291 +32263 32291 32290 +32264 32265 32291 +32265 32292 32291 +32265 32266 32293 +32265 32293 32292 +32266 32267 32293 +32267 32294 32293 +32267 32268 32295 +32267 32295 32294 +32268 32269 32295 +32269 32296 32295 +32269 32270 32297 +32269 32297 32296 +32270 32271 32297 +32271 32298 32297 +32271 32272 32299 +32271 32299 32298 +32272 32273 32299 +32273 32300 32299 +32273 32274 32301 +32273 32301 32300 +32274 32275 32301 +32275 32302 32301 +32275 32276 32303 +32275 32303 32302 +32276 32277 32303 +32277 32304 32303 +32277 32278 32305 +32277 32305 32304 +32278 32279 32305 +32279 32306 32305 +32279 32280 32307 +32279 32307 32306 +32280 32281 32307 +4515 32282 32308 +4515 32308 4644 +32282 32283 32308 +32283 32309 32308 +32283 32284 32310 +32283 32310 32309 +32284 32285 32310 +32285 32311 32310 +32285 32286 32312 +32285 32312 32311 +32286 32287 32312 +32287 32313 32312 +32287 32288 32314 +32287 32314 32313 +32288 32289 32314 +32289 32315 32314 +32289 32290 32316 +32289 32316 32315 +32290 32291 32316 +32291 32317 32316 +32291 32292 32318 +32291 32318 32317 +32292 32293 32318 +32293 32319 32318 +32293 32294 32320 +32293 32320 32319 +32294 32295 32320 +32295 32321 32320 +32295 32296 32322 +32295 32322 32321 +32296 32297 32322 +32297 32323 32322 +32297 32298 32324 +32297 32324 32323 +32298 32299 32324 +32299 32325 32324 +32299 32300 32326 +32299 32326 32325 +32300 32301 32326 +32301 32327 32326 +32301 32302 32328 +32301 32328 32327 +32302 32303 32328 +32303 32329 32328 +32303 32304 32330 +32303 32330 32329 +32304 32305 32330 +32305 32331 32330 +32305 32306 32332 +32305 32332 32331 +32306 32307 32332 +4644 32308 4773 +32308 32333 4773 +32308 32309 32334 +32308 32334 32333 +32309 32310 32334 +32310 32335 32334 +32310 32311 32336 +32310 32336 32335 +32311 32312 32336 +32312 32337 32336 +32312 32313 32338 +32312 32338 32337 +32313 32314 32338 +32314 32339 32338 +32314 32315 32340 +32314 32340 32339 +32315 32316 32340 +32316 32341 32340 +32316 32317 32342 +32316 32342 32341 +32317 32318 32342 +32318 32343 32342 +32318 32319 32344 +32318 32344 32343 +32319 32320 32344 +32320 32345 32344 +32320 32321 32346 +32320 32346 32345 +32321 32322 32346 +32322 32347 32346 +32322 32323 32348 +32322 32348 32347 +32323 32324 32348 +32324 32349 32348 +32324 32325 32350 +32324 32350 32349 +32325 32326 32350 +32326 32351 32350 +32326 32327 32352 +32326 32352 32351 +32327 32328 32352 +32328 32353 32352 +32328 32329 32354 +32328 32354 32353 +32329 32330 32354 +32330 32355 32354 +32330 32331 32356 +32330 32356 32355 +32331 32332 32356 +4773 32333 32357 +4773 32357 4902 +32333 32334 32357 +32334 32358 32357 +32334 32335 32359 +32334 32359 32358 +32335 32336 32359 +32336 32360 32359 +32336 32337 32361 +32336 32361 32360 +32337 32338 32361 +32338 32362 32361 +32338 32339 32363 +32338 32363 32362 +32339 32340 32363 +32340 32364 32363 +32340 32341 32365 +32340 32365 32364 +32341 32342 32365 +32342 32366 32365 +32342 32343 32367 +32342 32367 32366 +32343 32344 32367 +32344 32368 32367 +32344 32345 32369 +32344 32369 32368 +32345 32346 32369 +32346 32370 32369 +32346 32347 32371 +32346 32371 32370 +32347 32348 32371 +32348 32372 32371 +32348 32349 32373 +32348 32373 32372 +32349 32350 32373 +32350 32374 32373 +32350 32351 32375 +32350 32375 32374 +32351 32352 32375 +32352 32376 32375 +32352 32353 32377 +32352 32377 32376 +32353 32354 32377 +32354 32378 32377 +32354 32355 32379 +32354 32379 32378 +32355 32356 32379 +32356 32380 32379 +4902 32357 5031 +32357 32381 5031 +32357 32358 32382 +32357 32382 32381 +32358 32359 32382 +32359 32383 32382 +32359 32360 32384 +32359 32384 32383 +32360 32361 32384 +32361 32385 32384 +32361 32362 32386 +32361 32386 32385 +32362 32363 32386 +32363 32387 32386 +32363 32364 32388 +32363 32388 32387 +32364 32365 32388 +32365 32389 32388 +32365 32366 32390 +32365 32390 32389 +32366 32367 32390 +32367 32391 32390 +32367 32368 32392 +32367 32392 32391 +32368 32369 32392 +32369 32393 32392 +32369 32370 32394 +32369 32394 32393 +32370 32371 32394 +32371 32395 32394 +32371 32372 32396 +32371 32396 32395 +32372 32373 32396 +32373 32397 32396 +32373 32374 32398 +32373 32398 32397 +32374 32375 32398 +32375 32399 32398 +32375 32376 32400 +32375 32400 32399 +32376 32377 32400 +32377 32401 32400 +32377 32378 32402 +32377 32402 32401 +32378 32379 32402 +32379 32403 32402 +32379 32380 32404 +32379 32404 32403 +5031 32381 32405 +5031 32405 5160 +32381 32382 32405 +32382 32406 32405 +32382 32383 32407 +32382 32407 32406 +32383 32384 32407 +32384 32408 32407 +32384 32385 32409 +32384 32409 32408 +32385 32386 32409 +32386 32410 32409 +32386 32387 32411 +32386 32411 32410 +32387 32388 32411 +32388 32412 32411 +32388 32389 32413 +32388 32413 32412 +32389 32390 32413 +32390 32414 32413 +32390 32391 32415 +32390 32415 32414 +32391 32392 32415 +32392 32416 32415 +32392 32393 32417 +32392 32417 32416 +32393 32394 32417 +32394 32418 32417 +32394 32395 32419 +32394 32419 32418 +32395 32396 32419 +32396 32420 32419 +32396 32397 32421 +32396 32421 32420 +32397 32398 32421 +32398 32422 32421 +32398 32399 32423 +32398 32423 32422 +32399 32400 32423 +32400 32424 32423 +32400 32401 32425 +32400 32425 32424 +32401 32402 32425 +32402 32426 32425 +32402 32403 32427 +32402 32427 32426 +32403 32404 32427 +5160 32405 5289 +32405 32428 5289 +32405 32406 32429 +32405 32429 32428 +32406 32407 32429 +32407 32430 32429 +32407 32408 32431 +32407 32431 32430 +32408 32409 32431 +32409 32432 32431 +32409 32410 32433 +32409 32433 32432 +32410 32411 32433 +32411 32434 32433 +32411 32412 32435 +32411 32435 32434 +32412 32413 32435 +32413 32436 32435 +32413 32414 32437 +32413 32437 32436 +32414 32415 32437 +32415 32438 32437 +32415 32416 32439 +32415 32439 32438 +32416 32417 32439 +32417 32440 32439 +32417 32418 32441 +32417 32441 32440 +32418 32419 32441 +32419 32442 32441 +32419 32420 32443 +32419 32443 32442 +32420 32421 32443 +32421 32444 32443 +32421 32422 32445 +32421 32445 32444 +32422 32423 32445 +32423 32446 32445 +32423 32424 32447 +32423 32447 32446 +32424 32425 32447 +32425 32448 32447 +32425 32426 32449 +32425 32449 32448 +32426 32427 32449 +5289 32428 32450 +5289 32450 5418 +32428 32429 32450 +32429 32451 32450 +32429 32430 32452 +32429 32452 32451 +32430 32431 32452 +32431 32453 32452 +32431 32432 32454 +32431 32454 32453 +32432 32433 32454 +32433 32455 32454 +32433 32434 32456 +32433 32456 32455 +32434 32435 32456 +32435 32457 32456 +32435 32436 32458 +32435 32458 32457 +32436 32437 32458 +32437 32459 32458 +32437 32438 32460 +32437 32460 32459 +32438 32439 32460 +32439 32461 32460 +32439 32440 32462 +32439 32462 32461 +32440 32441 32462 +32441 32463 32462 +32441 32442 32464 +32441 32464 32463 +32442 32443 32464 +32443 32465 32464 +32443 32444 32466 +32443 32466 32465 +32444 32445 32466 +32445 32467 32466 +32445 32446 32468 +32445 32468 32467 +32446 32447 32468 +32447 32469 32468 +32447 32448 32470 +32447 32470 32469 +32448 32449 32470 +32449 32471 32470 +5418 32450 5547 +32450 32472 5547 +32450 32451 32473 +32450 32473 32472 +32451 32452 32473 +32452 32474 32473 +32452 32453 32475 +32452 32475 32474 +32453 32454 32475 +32454 32476 32475 +32454 32455 32477 +32454 32477 32476 +32455 32456 32477 +32456 32478 32477 +32456 32457 32479 +32456 32479 32478 +32457 32458 32479 +32458 32480 32479 +32458 32459 32481 +32458 32481 32480 +32459 32460 32481 +32460 32482 32481 +32460 32461 32483 +32460 32483 32482 +32461 32462 32483 +32462 32484 32483 +32462 32463 32485 +32462 32485 32484 +32463 32464 32485 +32464 32486 32485 +32464 32465 32487 +32464 32487 32486 +32465 32466 32487 +32466 32488 32487 +32466 32467 32489 +32466 32489 32488 +32467 32468 32489 +32468 32490 32489 +32468 32469 32491 +32468 32491 32490 +32469 32470 32491 +32470 32492 32491 +32470 32471 32493 +32470 32493 32492 +5547 32472 32494 +5547 32494 5676 +32472 32473 32494 +32473 32495 32494 +32473 32474 32496 +32473 32496 32495 +32474 32475 32496 +32475 32497 32496 +32475 32476 32498 +32475 32498 32497 +32476 32477 32498 +32477 32499 32498 +32477 32478 32500 +32477 32500 32499 +32478 32479 32500 +32479 32501 32500 +32479 32480 32502 +32479 32502 32501 +32480 32481 32502 +32481 32503 32502 +32481 32482 32504 +32481 32504 32503 +32482 32483 32504 +32483 32505 32504 +32483 32484 32506 +32483 32506 32505 +32484 32485 32506 +32485 32507 32506 +32485 32486 32508 +32485 32508 32507 +32486 32487 32508 +32487 32509 32508 +32487 32488 32510 +32487 32510 32509 +32488 32489 32510 +32489 32511 32510 +32489 32490 32512 +32489 32512 32511 +32490 32491 32512 +32491 32513 32512 +32491 32492 32514 +32491 32514 32513 +32492 32493 32514 +5676 32494 5805 +32494 32515 5805 +32494 32495 32516 +32494 32516 32515 +32495 32496 32516 +32496 32517 32516 +32496 32497 32518 +32496 32518 32517 +32497 32498 32518 +32498 32519 32518 +32498 32499 32520 +32498 32520 32519 +32499 32500 32520 +32500 32521 32520 +32500 32501 32522 +32500 32522 32521 +32501 32502 32522 +32502 32523 32522 +32502 32503 32524 +32502 32524 32523 +32503 32504 32524 +32504 32525 32524 +32504 32505 32526 +32504 32526 32525 +32505 32506 32526 +32506 32527 32526 +32506 32507 32528 +32506 32528 32527 +32507 32508 32528 +32508 32529 32528 +32508 32509 32530 +32508 32530 32529 +32509 32510 32530 +32510 32531 32530 +32510 32511 32532 +32510 32532 32531 +32511 32512 32532 +32512 32533 32532 +32512 32513 32534 +32512 32534 32533 +32513 32514 32534 +32514 32535 32534 +5805 32515 32536 +5805 32536 5934 +32515 32516 32536 +32516 32537 32536 +32516 32517 32538 +32516 32538 32537 +32517 32518 32538 +32518 32539 32538 +32518 32519 32540 +32518 32540 32539 +32519 32520 32540 +32520 32541 32540 +32520 32521 32542 +32520 32542 32541 +32521 32522 32542 +32522 32543 32542 +32522 32523 32544 +32522 32544 32543 +32523 32524 32544 +32524 32545 32544 +32524 32525 32546 +32524 32546 32545 +32525 32526 32546 +32526 32547 32546 +32526 32527 32548 +32526 32548 32547 +32527 32528 32548 +32528 32549 32548 +32528 32529 32550 +32528 32550 32549 +32529 32530 32550 +32530 32551 32550 +32530 32531 32552 +32530 32552 32551 +32531 32532 32552 +32532 32553 32552 +32532 32533 32554 +32532 32554 32553 +32533 32534 32554 +32534 32555 32554 +32534 32535 32556 +32534 32556 32555 +5934 32536 6063 +32536 32557 6063 +32536 32537 32558 +32536 32558 32557 +32537 32538 32558 +32538 32559 32558 +32538 32539 32560 +32538 32560 32559 +32539 32540 32560 +32540 32561 32560 +32540 32541 32562 +32540 32562 32561 +32541 32542 32562 +32542 32563 32562 +32542 32543 32564 +32542 32564 32563 +32543 32544 32564 +32544 32565 32564 +32544 32545 32566 +32544 32566 32565 +32545 32546 32566 +32546 32567 32566 +32546 32547 32568 +32546 32568 32567 +32547 32548 32568 +32548 32569 32568 +32548 32549 32570 +32548 32570 32569 +32549 32550 32570 +32550 32571 32570 +32550 32551 32572 +32550 32572 32571 +32551 32552 32572 +32552 32573 32572 +32552 32553 32574 +32552 32574 32573 +32553 32554 32574 +32554 32575 32574 +32554 32555 32576 +32554 32576 32575 +32555 32556 32576 +6063 32557 32577 +6063 32577 6191 +32557 32558 32577 +32558 32578 32577 +32558 32559 32579 +32558 32579 32578 +32559 32560 32579 +32560 32580 32579 +32560 32561 32581 +32560 32581 32580 +32561 32562 32581 +32562 32582 32581 +32562 32563 32583 +32562 32583 32582 +32563 32564 32583 +32564 32584 32583 +32564 32565 32585 +32564 32585 32584 +32565 32566 32585 +32566 32586 32585 +32566 32567 32587 +32566 32587 32586 +32567 32568 32587 +32568 32588 32587 +32568 32569 32589 +32568 32589 32588 +32569 32570 32589 +32570 32590 32589 +32570 32571 32591 +32570 32591 32590 +32571 32572 32591 +32572 32592 32591 +32572 32573 32593 +32572 32593 32592 +32573 32574 32593 +32574 32594 32593 +32574 32575 32595 +32574 32595 32594 +32575 32576 32595 +6191 32577 6317 +32577 32596 6317 +32577 32578 32597 +32577 32597 32596 +32578 32579 32597 +32579 32598 32597 +32579 32580 32599 +32579 32599 32598 +32580 32581 32599 +32581 32600 32599 +32581 32582 32601 +32581 32601 32600 +32582 32583 32601 +32583 32602 32601 +32583 32584 32603 +32583 32603 32602 +32584 32585 32603 +32585 32604 32603 +32585 32586 32605 +32585 32605 32604 +32586 32587 32605 +32587 32606 32605 +32587 32588 32607 +32587 32607 32606 +32588 32589 32607 +32589 32608 32607 +32589 32590 32609 +32589 32609 32608 +32590 32591 32609 +32591 32610 32609 +32591 32592 32611 +32591 32611 32610 +32592 32593 32611 +32593 32612 32611 +32593 32594 32613 +32593 32613 32612 +32594 32595 32613 +32595 32614 32613 +6317 32596 32615 +6317 32615 6440 +32596 32597 32615 +32597 32616 32615 +32597 32598 32617 +32597 32617 32616 +32598 32599 32617 +32599 32618 32617 +32599 32600 32619 +32599 32619 32618 +32600 32601 32619 +32601 32620 32619 +32601 32602 32621 +32601 32621 32620 +32602 32603 32621 +32603 32622 32621 +32603 32604 32623 +32603 32623 32622 +32604 32605 32623 +32605 32624 32623 +32605 32606 32625 +32605 32625 32624 +32606 32607 32625 +32607 32626 32625 +32607 32608 32627 +32607 32627 32626 +32608 32609 32627 +32609 32628 32627 +32609 32610 32629 +32609 32629 32628 +32610 32611 32629 +32611 32630 32629 +32611 32612 32631 +32611 32631 32630 +32612 32613 32631 +32613 32632 32631 +32613 32614 32633 +32613 32633 32632 +6440 32615 6562 +32615 32634 6562 +32615 32616 32635 +32615 32635 32634 +32616 32617 32635 +32617 32636 32635 +32617 32618 32637 +32617 32637 32636 +32618 32619 32637 +32619 32638 32637 +32619 32620 32639 +32619 32639 32638 +32620 32621 32639 +32621 32640 32639 +32621 32622 32641 +32621 32641 32640 +32622 32623 32641 +32623 32642 32641 +32623 32624 32643 +32623 32643 32642 +32624 32625 32643 +32625 32644 32643 +32625 32626 32645 +32625 32645 32644 +32626 32627 32645 +32627 32646 32645 +32627 32628 32647 +32627 32647 32646 +32628 32629 32647 +32629 32648 32647 +32629 32630 32649 +32629 32649 32648 +32630 32631 32649 +32631 32650 32649 +32631 32632 32651 +32631 32651 32650 +32632 32633 32651 +6562 32634 32652 +6562 32652 6684 +32634 32635 32652 +32635 32653 32652 +32635 32636 32654 +32635 32654 32653 +32636 32637 32654 +32637 32655 32654 +32637 32638 32656 +32637 32656 32655 +32638 32639 32656 +32639 32657 32656 +32639 32640 32658 +32639 32658 32657 +32640 32641 32658 +32641 32659 32658 +32641 32642 32660 +32641 32660 32659 +32642 32643 32660 +32643 32661 32660 +32643 32644 32662 +32643 32662 32661 +32644 32645 32662 +32645 32663 32662 +32645 32646 32664 +32645 32664 32663 +32646 32647 32664 +32647 32665 32664 +32647 32648 32666 +32647 32666 32665 +32648 32649 32666 +32649 32667 32666 +32649 32650 32668 +32649 32668 32667 +32650 32651 32668 +32651 32669 32668 +6684 32652 6806 +32652 32670 6806 +32652 32653 32671 +32652 32671 32670 +32653 32654 32671 +32654 32672 32671 +32654 32655 32673 +32654 32673 32672 +32655 32656 32673 +32656 32674 32673 +32656 32657 32675 +32656 32675 32674 +32657 32658 32675 +32658 32676 32675 +32658 32659 32677 +32658 32677 32676 +32659 32660 32677 +32660 32678 32677 +32660 32661 32679 +32660 32679 32678 +32661 32662 32679 +32662 32680 32679 +32662 32663 32681 +32662 32681 32680 +32663 32664 32681 +32664 32682 32681 +32664 32665 32683 +32664 32683 32682 +32665 32666 32683 +32666 32684 32683 +32666 32667 32685 +32666 32685 32684 +32667 32668 32685 +32668 32686 32685 +32668 32669 32687 +32668 32687 32686 +6806 32670 32688 +6806 32688 6927 +32670 32671 32688 +32671 32689 32688 +32671 32672 32690 +32671 32690 32689 +32672 32673 32690 +32673 32691 32690 +32673 32674 32692 +32673 32692 32691 +32674 32675 32692 +32675 32693 32692 +32675 32676 32694 +32675 32694 32693 +32676 32677 32694 +32677 32695 32694 +32677 32678 32696 +32677 32696 32695 +32678 32679 32696 +32679 32697 32696 +32679 32680 32698 +32679 32698 32697 +32680 32681 32698 +32681 32699 32698 +32681 32682 32700 +32681 32700 32699 +32682 32683 32700 +32683 32701 32700 +32683 32684 32702 +32683 32702 32701 +32684 32685 32702 +32685 32703 32702 +32685 32686 32704 +32685 32704 32703 +32686 32687 32704 +32687 32705 32704 +6927 32688 7047 +32688 32706 7047 +32688 32689 32707 +32688 32707 32706 +32689 32690 32707 +32690 32708 32707 +32690 32691 32709 +32690 32709 32708 +32691 32692 32709 +32692 32710 32709 +32692 32693 32711 +32692 32711 32710 +32693 32694 32711 +32694 32712 32711 +32694 32695 32713 +32694 32713 32712 +32695 32696 32713 +32696 32714 32713 +32696 32697 32715 +32696 32715 32714 +32697 32698 32715 +32698 32716 32715 +32698 32699 32717 +32698 32717 32716 +32699 32700 32717 +32700 32718 32717 +32700 32701 32719 +32700 32719 32718 +32701 32702 32719 +32702 32720 32719 +32702 32703 32721 +32702 32721 32720 +32703 32704 32721 +32704 32722 32721 +32704 32705 32723 +32704 32723 32722 +7047 32706 32724 +7047 32724 7167 +32706 32707 32724 +32707 32725 32724 +32707 32708 32726 +32707 32726 32725 +32708 32709 32726 +32709 32727 32726 +32709 32710 32728 +32709 32728 32727 +32710 32711 32728 +32711 32729 32728 +32711 32712 32730 +32711 32730 32729 +32712 32713 32730 +32713 32731 32730 +32713 32714 32732 +32713 32732 32731 +32714 32715 32732 +32715 32733 32732 +32715 32716 32734 +32715 32734 32733 +32716 32717 32734 +32717 32735 32734 +32717 32718 32736 +32717 32736 32735 +32718 32719 32736 +32719 32737 32736 +32719 32720 32738 +32719 32738 32737 +32720 32721 32738 +32721 32739 32738 +32721 32722 32740 +32721 32740 32739 +32722 32723 32740 +32723 32741 32740 +7167 32724 7287 +32724 32742 7287 +32724 32725 32743 +32724 32743 32742 +32725 32726 32743 +32726 32744 32743 +32726 32727 32745 +32726 32745 32744 +32727 32728 32745 +32728 32746 32745 +32728 32729 32747 +32728 32747 32746 +32729 32730 32747 +32730 32748 32747 +32730 32731 32749 +32730 32749 32748 +32731 32732 32749 +32732 32750 32749 +32732 32733 32751 +32732 32751 32750 +32733 32734 32751 +32734 32752 32751 +32734 32735 32753 +32734 32753 32752 +32735 32736 32753 +32736 32754 32753 +32736 32737 32755 +32736 32755 32754 +32737 32738 32755 +32738 32756 32755 +32738 32739 32757 +32738 32757 32756 +32739 32740 32757 +32740 32758 32757 +32740 32741 32759 +32740 32759 32758 +7287 32742 32760 +7287 32760 7407 +32742 32743 32760 +32743 32761 32760 +32743 32744 32762 +32743 32762 32761 +32744 32745 32762 +32745 32763 32762 +32745 32746 32764 +32745 32764 32763 +32746 32747 32764 +32747 32765 32764 +32747 32748 32766 +32747 32766 32765 +32748 32749 32766 +32749 32767 32766 +32749 32750 32768 +32749 32768 32767 +32750 32751 32768 +32751 32769 32768 +32751 32752 32770 +32751 32770 32769 +32752 32753 32770 +32753 32771 32770 +32753 32754 32772 +32753 32772 32771 +32754 32755 32772 +32755 32773 32772 +32755 32756 32774 +32755 32774 32773 +32756 32757 32774 +32757 32775 32774 +32757 32758 32776 +32757 32776 32775 +32758 32759 32776 +32759 32777 32776 +7407 32760 7527 +32760 32778 7527 +32760 32761 32779 +32760 32779 32778 +32761 32762 32779 +32762 32780 32779 +32762 32763 32781 +32762 32781 32780 +32763 32764 32781 +32764 32782 32781 +32764 32765 32783 +32764 32783 32782 +32765 32766 32783 +32766 32784 32783 +32766 32767 32785 +32766 32785 32784 +32767 32768 32785 +32768 32786 32785 +32768 32769 32787 +32768 32787 32786 +32769 32770 32787 +32770 32788 32787 +32770 32771 32789 +32770 32789 32788 +32771 32772 32789 +32772 32790 32789 +32772 32773 32791 +32772 32791 32790 +32773 32774 32791 +32774 32792 32791 +32774 32775 32793 +32774 32793 32792 +32775 32776 32793 +32776 32794 32793 +32776 32777 32795 +32776 32795 32794 +7527 32778 32796 +7527 32796 7647 +32778 32779 32796 +32779 32797 32796 +32779 32780 32798 +32779 32798 32797 +32780 32781 32798 +32781 32799 32798 +32781 32782 32800 +32781 32800 32799 +32782 32783 32800 +32783 32801 32800 +32783 32784 32802 +32783 32802 32801 +32784 32785 32802 +32785 32803 32802 +32785 32786 32804 +32785 32804 32803 +32786 32787 32804 +32787 32805 32804 +32787 32788 32806 +32787 32806 32805 +32788 32789 32806 +32789 32807 32806 +32789 32790 32808 +32789 32808 32807 +32790 32791 32808 +32791 32809 32808 +32791 32792 32810 +32791 32810 32809 +32792 32793 32810 +32793 32811 32810 +32793 32794 32812 +32793 32812 32811 +32794 32795 32812 +32795 32813 32812 +7647 32796 7767 +32796 32814 7767 +32796 32797 32815 +32796 32815 32814 +32797 32798 32815 +32798 32816 32815 +32798 32799 32817 +32798 32817 32816 +32799 32800 32817 +32800 32818 32817 +32800 32801 32819 +32800 32819 32818 +32801 32802 32819 +32802 32820 32819 +32802 32803 32821 +32802 32821 32820 +32803 32804 32821 +32804 32822 32821 +32804 32805 32823 +32804 32823 32822 +32805 32806 32823 +32806 32824 32823 +32806 32807 32825 +32806 32825 32824 +32807 32808 32825 +32808 32826 32825 +32808 32809 32827 +32808 32827 32826 +32809 32810 32827 +32810 32828 32827 +32810 32811 32829 +32810 32829 32828 +32811 32812 32829 +32812 32830 32829 +32812 32813 32831 +32812 32831 32830 +7767 32814 32832 +7767 32832 7887 +32814 32815 32832 +32815 32833 32832 +32815 32816 32834 +32815 32834 32833 +32816 32817 32834 +32817 32835 32834 +32817 32818 32836 +32817 32836 32835 +32818 32819 32836 +32819 32837 32836 +32819 32820 32838 +32819 32838 32837 +32820 32821 32838 +32821 32839 32838 +32821 32822 32840 +32821 32840 32839 +32822 32823 32840 +32823 32841 32840 +32823 32824 32842 +32823 32842 32841 +32824 32825 32842 +32825 32843 32842 +32825 32826 32844 +32825 32844 32843 +32826 32827 32844 +32827 32845 32844 +32827 32828 32846 +32827 32846 32845 +32828 32829 32846 +32829 32847 32846 +32829 32830 32848 +32829 32848 32847 +32830 32831 32848 +32831 32849 32848 +7887 32832 8007 +32832 32850 8007 +32832 32833 32851 +32832 32851 32850 +32833 32834 32851 +32834 32852 32851 +32834 32835 32853 +32834 32853 32852 +32835 32836 32853 +32836 32854 32853 +32836 32837 32855 +32836 32855 32854 +32837 32838 32855 +32838 32856 32855 +32838 32839 32857 +32838 32857 32856 +32839 32840 32857 +32840 32858 32857 +32840 32841 32859 +32840 32859 32858 +32841 32842 32859 +32842 32860 32859 +32842 32843 32861 +32842 32861 32860 +32843 32844 32861 +32844 32862 32861 +32844 32845 32863 +32844 32863 32862 +32845 32846 32863 +32846 32864 32863 +32846 32847 32865 +32846 32865 32864 +32847 32848 32865 +32848 32866 32865 +32848 32849 32867 +32848 32867 32866 +8007 32850 32868 +8007 32868 8127 +32850 32851 32868 +32851 32869 32868 +32851 32852 32870 +32851 32870 32869 +32852 32853 32870 +32853 32871 32870 +32853 32854 32872 +32853 32872 32871 +32854 32855 32872 +32855 32873 32872 +32855 32856 32874 +32855 32874 32873 +32856 32857 32874 +32857 32875 32874 +32857 32858 32876 +32857 32876 32875 +32858 32859 32876 +32859 32877 32876 +32859 32860 32878 +32859 32878 32877 +32860 32861 32878 +32861 32879 32878 +32861 32862 32880 +32861 32880 32879 +32862 32863 32880 +32863 32881 32880 +32863 32864 32882 +32863 32882 32881 +32864 32865 32882 +32865 32883 32882 +32865 32866 32884 +32865 32884 32883 +32866 32867 32884 +32867 32885 32884 +8127 32868 8247 +32868 32886 8247 +32868 32869 32887 +32868 32887 32886 +32869 32870 32887 +32870 32888 32887 +32870 32871 32889 +32870 32889 32888 +32871 32872 32889 +32872 32890 32889 +32872 32873 32891 +32872 32891 32890 +32873 32874 32891 +32874 32892 32891 +32874 32875 32893 +32874 32893 32892 +32875 32876 32893 +32876 32894 32893 +32876 32877 32895 +32876 32895 32894 +32877 32878 32895 +32878 32896 32895 +32878 32879 32897 +32878 32897 32896 +32879 32880 32897 +32880 32898 32897 +32880 32881 32899 +32880 32899 32898 +32881 32882 32899 +32882 32900 32899 +32882 32883 32901 +32882 32901 32900 +32883 32884 32901 +32884 32902 32901 +32884 32885 32903 +32884 32903 32902 +8247 32886 32904 +8247 32904 8367 +32886 32887 32904 +32887 32905 32904 +32887 32888 32906 +32887 32906 32905 +32888 32889 32906 +32889 32907 32906 +32889 32890 32908 +32889 32908 32907 +32890 32891 32908 +32891 32909 32908 +32891 32892 32910 +32891 32910 32909 +32892 32893 32910 +32893 32911 32910 +32893 32894 32912 +32893 32912 32911 +32894 32895 32912 +32895 32913 32912 +32895 32896 32914 +32895 32914 32913 +32896 32897 32914 +32897 32915 32914 +32897 32898 32916 +32897 32916 32915 +32898 32899 32916 +32899 32917 32916 +32899 32900 32918 +32899 32918 32917 +32900 32901 32918 +32901 32919 32918 +32901 32902 32920 +32901 32920 32919 +32902 32903 32920 +32903 32921 32920 +8367 32904 8487 +32904 32922 8487 +32904 32905 32923 +32904 32923 32922 +32905 32906 32923 +32906 32924 32923 +32906 32907 32925 +32906 32925 32924 +32907 32908 32925 +32908 32926 32925 +32908 32909 32927 +32908 32927 32926 +32909 32910 32927 +32910 32928 32927 +32910 32911 32929 +32910 32929 32928 +32911 32912 32929 +32912 32930 32929 +32912 32913 32931 +32912 32931 32930 +32913 32914 32931 +32914 32932 32931 +32914 32915 32933 +32914 32933 32932 +32915 32916 32933 +32916 32934 32933 +32916 32917 32935 +32916 32935 32934 +32917 32918 32935 +32918 32936 32935 +32918 32919 32937 +32918 32937 32936 +32919 32920 32937 +32920 32938 32937 +32920 32921 32939 +32920 32939 32938 +8487 32922 32940 +8487 32940 8607 +32922 32923 32940 +32923 32941 32940 +32923 32924 32942 +32923 32942 32941 +32924 32925 32942 +32925 32943 32942 +32925 32926 32944 +32925 32944 32943 +32926 32927 32944 +32927 32945 32944 +32927 32928 32946 +32927 32946 32945 +32928 32929 32946 +32929 32947 32946 +32929 32930 32948 +32929 32948 32947 +32930 32931 32948 +32931 32949 32948 +32931 32932 32950 +32931 32950 32949 +32932 32933 32950 +32933 32951 32950 +32933 32934 32952 +32933 32952 32951 +32934 32935 32952 +32935 32953 32952 +32935 32936 32954 +32935 32954 32953 +32936 32937 32954 +32937 32955 32954 +32937 32938 32956 +32937 32956 32955 +32938 32939 32956 +32939 32957 32956 +8607 32940 8727 +32940 32958 8727 +32940 32941 32959 +32940 32959 32958 +32941 32942 32959 +32942 32960 32959 +32942 32943 32961 +32942 32961 32960 +32943 32944 32961 +32944 32962 32961 +32944 32945 32963 +32944 32963 32962 +32945 32946 32963 +32946 32964 32963 +32946 32947 32965 +32946 32965 32964 +32947 32948 32965 +32948 32966 32965 +32948 32949 32967 +32948 32967 32966 +32949 32950 32967 +32950 32968 32967 +32950 32951 32969 +32950 32969 32968 +32951 32952 32969 +32952 32970 32969 +32952 32953 32971 +32952 32971 32970 +32953 32954 32971 +32954 32972 32971 +32954 32955 32973 +32954 32973 32972 +32955 32956 32973 +32956 32974 32973 +32956 32957 32975 +32956 32975 32974 +8727 32958 32976 +8727 32976 8847 +32958 32959 32976 +32959 32977 32976 +32959 32960 32978 +32959 32978 32977 +32960 32961 32978 +32961 32979 32978 +32961 32962 32980 +32961 32980 32979 +32962 32963 32980 +32963 32981 32980 +32963 32964 32982 +32963 32982 32981 +32964 32965 32982 +32965 32983 32982 +32965 32966 32984 +32965 32984 32983 +32966 32967 32984 +32967 32985 32984 +32967 32968 32986 +32967 32986 32985 +32968 32969 32986 +32969 32987 32986 +32969 32970 32988 +32969 32988 32987 +32970 32971 32988 +32971 32989 32988 +32971 32972 32990 +32971 32990 32989 +32972 32973 32990 +32973 32991 32990 +32973 32974 32992 +32973 32992 32991 +32974 32975 32992 +32975 32993 32992 +8847 32976 8967 +32976 32994 8967 +32976 32977 32995 +32976 32995 32994 +32977 32978 32995 +32978 32996 32995 +32978 32979 32997 +32978 32997 32996 +32979 32980 32997 +32980 32998 32997 +32980 32981 32999 +32980 32999 32998 +32981 32982 32999 +32982 33000 32999 +32982 32983 33001 +32982 33001 33000 +32983 32984 33001 +32984 33002 33001 +32984 32985 33003 +32984 33003 33002 +32985 32986 33003 +32986 33004 33003 +32986 32987 33005 +32986 33005 33004 +32987 32988 33005 +32988 33006 33005 +32988 32989 33007 +32988 33007 33006 +32989 32990 33007 +32990 33008 33007 +32990 32991 33009 +32990 33009 33008 +32991 32992 33009 +32992 33010 33009 +32992 32993 33011 +32992 33011 33010 +8967 32994 33012 +8967 33012 9087 +32994 32995 33012 +32995 33013 33012 +32995 32996 33014 +32995 33014 33013 +32996 32997 33014 +32997 33015 33014 +32997 32998 33016 +32997 33016 33015 +32998 32999 33016 +32999 33017 33016 +32999 33000 33018 +32999 33018 33017 +33000 33001 33018 +33001 33019 33018 +33001 33002 33020 +33001 33020 33019 +33002 33003 33020 +33003 33021 33020 +33003 33004 33022 +33003 33022 33021 +33004 33005 33022 +33005 33023 33022 +33005 33006 33024 +33005 33024 33023 +33006 33007 33024 +33007 33025 33024 +33007 33008 33026 +33007 33026 33025 +33008 33009 33026 +33009 33027 33026 +33009 33010 33028 +33009 33028 33027 +33010 33011 33028 +33011 33029 33028 +9087 33012 9207 +33012 33030 9207 +33012 33013 33031 +33012 33031 33030 +33013 33014 33031 +33014 33032 33031 +33014 33015 33033 +33014 33033 33032 +33015 33016 33033 +33016 33034 33033 +33016 33017 33035 +33016 33035 33034 +33017 33018 33035 +33018 33036 33035 +33018 33019 33037 +33018 33037 33036 +33019 33020 33037 +33020 33038 33037 +33020 33021 33039 +33020 33039 33038 +33021 33022 33039 +33022 33040 33039 +33022 33023 33041 +33022 33041 33040 +33023 33024 33041 +33024 33042 33041 +33024 33025 33043 +33024 33043 33042 +33025 33026 33043 +33026 33044 33043 +33026 33027 33045 +33026 33045 33044 +33027 33028 33045 +33028 33046 33045 +33028 33029 33047 +33028 33047 33046 +9207 33030 33048 +9207 33048 9327 +33030 33031 33048 +33031 33049 33048 +33031 33032 33050 +33031 33050 33049 +33032 33033 33050 +33033 33051 33050 +33033 33034 33052 +33033 33052 33051 +33034 33035 33052 +33035 33053 33052 +33035 33036 33054 +33035 33054 33053 +33036 33037 33054 +33037 33055 33054 +33037 33038 33056 +33037 33056 33055 +33038 33039 33056 +33039 33057 33056 +33039 33040 33058 +33039 33058 33057 +33040 33041 33058 +33041 33059 33058 +33041 33042 33060 +33041 33060 33059 +33042 33043 33060 +33043 33061 33060 +33043 33044 33062 +33043 33062 33061 +33044 33045 33062 +33045 33063 33062 +33045 33046 33064 +33045 33064 33063 +33046 33047 33064 +33047 33065 33064 +9327 33048 9447 +33048 33066 9447 +33048 33049 33067 +33048 33067 33066 +33049 33050 33067 +33050 33068 33067 +33050 33051 33069 +33050 33069 33068 +33051 33052 33069 +33052 33070 33069 +33052 33053 33071 +33052 33071 33070 +33053 33054 33071 +33054 33072 33071 +33054 33055 33073 +33054 33073 33072 +33055 33056 33073 +33056 33074 33073 +33056 33057 33075 +33056 33075 33074 +33057 33058 33075 +33058 33076 33075 +33058 33059 33077 +33058 33077 33076 +33059 33060 33077 +33060 33078 33077 +33060 33061 33079 +33060 33079 33078 +33061 33062 33079 +33062 33080 33079 +33062 33063 33081 +33062 33081 33080 +33063 33064 33081 +33064 33082 33081 +33064 33065 33083 +33064 33083 33082 +9447 33066 33084 +9447 33084 9567 +33066 33067 33084 +33067 33085 33084 +33067 33068 33086 +33067 33086 33085 +33068 33069 33086 +33069 33087 33086 +33069 33070 33088 +33069 33088 33087 +33070 33071 33088 +33071 33089 33088 +33071 33072 33090 +33071 33090 33089 +33072 33073 33090 +33073 33091 33090 +33073 33074 33092 +33073 33092 33091 +33074 33075 33092 +33075 33093 33092 +33075 33076 33094 +33075 33094 33093 +33076 33077 33094 +33077 33095 33094 +33077 33078 33096 +33077 33096 33095 +33078 33079 33096 +33079 33097 33096 +33079 33080 33098 +33079 33098 33097 +33080 33081 33098 +33081 33099 33098 +33081 33082 33100 +33081 33100 33099 +33082 33083 33100 +33083 33101 33100 +9567 33084 9687 +33084 33102 9687 +33084 33085 33103 +33084 33103 33102 +33085 33086 33103 +33086 33104 33103 +33086 33087 33105 +33086 33105 33104 +33087 33088 33105 +33088 33106 33105 +33088 33089 33107 +33088 33107 33106 +33089 33090 33107 +33090 33108 33107 +33090 33091 33109 +33090 33109 33108 +33091 33092 33109 +33092 33110 33109 +33092 33093 33111 +33092 33111 33110 +33093 33094 33111 +33094 33112 33111 +33094 33095 33113 +33094 33113 33112 +33095 33096 33113 +33096 33114 33113 +33096 33097 33115 +33096 33115 33114 +33097 33098 33115 +33098 33116 33115 +33098 33099 33117 +33098 33117 33116 +33099 33100 33117 +33100 33118 33117 +33100 33101 33119 +33100 33119 33118 +9687 33102 33120 +9687 33120 9808 +33102 33103 33120 +33103 33121 33120 +33103 33104 33122 +33103 33122 33121 +33104 33105 33122 +33105 33123 33122 +33105 33106 33124 +33105 33124 33123 +33106 33107 33124 +33107 33125 33124 +33107 33108 33126 +33107 33126 33125 +33108 33109 33126 +33109 33127 33126 +33109 33110 33128 +33109 33128 33127 +33110 33111 33128 +33111 33129 33128 +33111 33112 33130 +33111 33130 33129 +33112 33113 33130 +33113 33131 33130 +33113 33114 33132 +33113 33132 33131 +33114 33115 33132 +33115 33133 33132 +33115 33116 33134 +33115 33134 33133 +33116 33117 33134 +33117 33135 33134 +33117 33118 33136 +33117 33136 33135 +33118 33119 33136 +33119 33137 33136 +9808 33120 9930 +33120 33138 9930 +33120 33121 33139 +33120 33139 33138 +33121 33122 33139 +33122 33140 33139 +33122 33123 33141 +33122 33141 33140 +33123 33124 33141 +33124 33142 33141 +33124 33125 33143 +33124 33143 33142 +33125 33126 33143 +33126 33144 33143 +33126 33127 33145 +33126 33145 33144 +33127 33128 33145 +33128 33146 33145 +33128 33129 33147 +33128 33147 33146 +33129 33130 33147 +33130 33148 33147 +33130 33131 33149 +33130 33149 33148 +33131 33132 33149 +33132 33150 33149 +33132 33133 33151 +33132 33151 33150 +33133 33134 33151 +33134 33152 33151 +33134 33135 33153 +33134 33153 33152 +33135 33136 33153 +33136 33154 33153 +33136 33137 33155 +33136 33155 33154 +9930 33138 33156 +9930 33156 10053 +33138 33139 33156 +33139 33157 33156 +33139 33140 33158 +33139 33158 33157 +33140 33141 33158 +33141 33159 33158 +33141 33142 33160 +33141 33160 33159 +33142 33143 33160 +33143 33161 33160 +33143 33144 33162 +33143 33162 33161 +33144 33145 33162 +33145 33163 33162 +33145 33146 33164 +33145 33164 33163 +33146 33147 33164 +33147 33165 33164 +33147 33148 33166 +33147 33166 33165 +33148 33149 33166 +33149 33167 33166 +33149 33150 33168 +33149 33168 33167 +33150 33151 33168 +33151 33169 33168 +33151 33152 33170 +33151 33170 33169 +33152 33153 33170 +33153 33171 33170 +33153 33154 33172 +33153 33172 33171 +33154 33155 33172 +33155 33173 33172 +33155 33174 33173 +10053 33156 10178 +33156 33175 10178 +33156 33157 33176 +33156 33176 33175 +33157 33158 33176 +33158 33177 33176 +33158 33159 33178 +33158 33178 33177 +33159 33160 33178 +33160 33179 33178 +33160 33161 33180 +33160 33180 33179 +33161 33162 33180 +33162 33181 33180 +33162 33163 33182 +33162 33182 33181 +33163 33164 33182 +33164 33183 33182 +33164 33165 33184 +33164 33184 33183 +33165 33166 33184 +33166 33185 33184 +33166 33167 33186 +33166 33186 33185 +33167 33168 33186 +33168 33187 33186 +33168 33169 33188 +33168 33188 33187 +33169 33170 33188 +33170 33189 33188 +33170 33171 33190 +33170 33190 33189 +33171 33172 33190 +33172 33191 33190 +33172 33173 33192 +33172 33192 33191 +33173 33174 33192 +33174 33193 33192 +10178 33175 33194 +10178 33194 10304 +33175 33176 33194 +33176 33195 33194 +33176 33177 33196 +33176 33196 33195 +33177 33178 33196 +33178 33197 33196 +33178 33179 33198 +33178 33198 33197 +33179 33180 33198 +33180 33199 33198 +33180 33181 33200 +33180 33200 33199 +33181 33182 33200 +33182 33201 33200 +33182 33183 33202 +33182 33202 33201 +33183 33184 33202 +33184 33203 33202 +33184 33185 33204 +33184 33204 33203 +33185 33186 33204 +33186 33205 33204 +33186 33187 33206 +33186 33206 33205 +33187 33188 33206 +33188 33207 33206 +33188 33189 33208 +33188 33208 33207 +33189 33190 33208 +33190 33209 33208 +33190 33191 33210 +33190 33210 33209 +33191 33192 33210 +33192 33211 33210 +33192 33193 33212 +33192 33212 33211 +10304 33194 10432 +33194 33213 10432 +33194 33195 33214 +33194 33214 33213 +33195 33196 33214 +33196 33215 33214 +33196 33197 33216 +33196 33216 33215 +33197 33198 33216 +33198 33217 33216 +33198 33199 33218 +33198 33218 33217 +33199 33200 33218 +33200 33219 33218 +33200 33201 33220 +33200 33220 33219 +33201 33202 33220 +33202 33221 33220 +33202 33203 33222 +33202 33222 33221 +33203 33204 33222 +33204 33223 33222 +33204 33205 33224 +33204 33224 33223 +33205 33206 33224 +33206 33225 33224 +33206 33207 33226 +33206 33226 33225 +33207 33208 33226 +33208 33227 33226 +33208 33209 33228 +33208 33228 33227 +33209 33210 33228 +33210 33229 33228 +33210 33211 33230 +33210 33230 33229 +33211 33212 33230 +33212 33231 33230 +33212 33232 33231 +10432 33213 33233 +10432 33233 10561 +33213 33214 33233 +33214 33234 33233 +33214 33215 33235 +33214 33235 33234 +33215 33216 33235 +33216 33236 33235 +33216 33217 33237 +33216 33237 33236 +33217 33218 33237 +33218 33238 33237 +33218 33219 33239 +33218 33239 33238 +33219 33220 33239 +33220 33240 33239 +33220 33221 33241 +33220 33241 33240 +33221 33222 33241 +33222 33242 33241 +33222 33223 33243 +33222 33243 33242 +33223 33224 33243 +33224 33244 33243 +33224 33225 33245 +33224 33245 33244 +33225 33226 33245 +33226 33246 33245 +33226 33227 33247 +33226 33247 33246 +33227 33228 33247 +33228 33248 33247 +33228 33229 33249 +33228 33249 33248 +33229 33230 33249 +33230 33250 33249 +33230 33231 33251 +33230 33251 33250 +33231 33232 33251 +33232 33252 33251 +33232 33253 33252 +10561 33233 10690 +33233 33254 10690 +33233 33234 33255 +33233 33255 33254 +33234 33235 33255 +33235 33256 33255 +33235 33236 33257 +33235 33257 33256 +33236 33237 33257 +33237 33258 33257 +33237 33238 33259 +33237 33259 33258 +33238 33239 33259 +33239 33260 33259 +33239 33240 33261 +33239 33261 33260 +33240 33241 33261 +33241 33262 33261 +33241 33242 33263 +33241 33263 33262 +33242 33243 33263 +33243 33264 33263 +33243 33244 33265 +33243 33265 33264 +33244 33245 33265 +33245 33266 33265 +33245 33246 33267 +33245 33267 33266 +33246 33247 33267 +33247 33268 33267 +33247 33248 33269 +33247 33269 33268 +33248 33249 33269 +33249 33270 33269 +33249 33250 33271 +33249 33271 33270 +33250 33251 33271 +33251 33272 33271 +33251 33252 33273 +33251 33273 33272 +33252 33253 33273 +33253 33274 33273 +10690 33254 33275 +10690 33275 10819 +33254 33255 33275 +33255 33276 33275 +33255 33256 33277 +33255 33277 33276 +33256 33257 33277 +33257 33278 33277 +33257 33258 33279 +33257 33279 33278 +33258 33259 33279 +33259 33280 33279 +33259 33260 33281 +33259 33281 33280 +33260 33261 33281 +33261 33282 33281 +33261 33262 33283 +33261 33283 33282 +33262 33263 33283 +33263 33284 33283 +33263 33264 33285 +33263 33285 33284 +33264 33265 33285 +33265 33286 33285 +33265 33266 33287 +33265 33287 33286 +33266 33267 33287 +33267 33288 33287 +33267 33268 33289 +33267 33289 33288 +33268 33269 33289 +33269 33290 33289 +33269 33270 33291 +33269 33291 33290 +33270 33271 33291 +33271 33292 33291 +33271 33272 33293 +33271 33293 33292 +33272 33273 33293 +33273 33294 33293 +33273 33274 33295 +33273 33295 33294 +10819 33275 10948 +33275 33296 10948 +33275 33276 33297 +33275 33297 33296 +33276 33277 33297 +33277 33298 33297 +33277 33278 33299 +33277 33299 33298 +33278 33279 33299 +33279 33300 33299 +33279 33280 33301 +33279 33301 33300 +33280 33281 33301 +33281 33302 33301 +33281 33282 33303 +33281 33303 33302 +33282 33283 33303 +33283 33304 33303 +33283 33284 33305 +33283 33305 33304 +33284 33285 33305 +33285 33306 33305 +33285 33286 33307 +33285 33307 33306 +33286 33287 33307 +33287 33308 33307 +33287 33288 33309 +33287 33309 33308 +33288 33289 33309 +33289 33310 33309 +33289 33290 33311 +33289 33311 33310 +33290 33291 33311 +33291 33312 33311 +33291 33292 33313 +33291 33313 33312 +33292 33293 33313 +33293 33314 33313 +33293 33294 33315 +33293 33315 33314 +33294 33295 33315 +33295 33316 33315 +33295 33317 33316 +10948 33296 33318 +10948 33318 11077 +33296 33297 33318 +33297 33319 33318 +33297 33298 33320 +33297 33320 33319 +33298 33299 33320 +33299 33321 33320 +33299 33300 33322 +33299 33322 33321 +33300 33301 33322 +33301 33323 33322 +33301 33302 33324 +33301 33324 33323 +33302 33303 33324 +33303 33325 33324 +33303 33304 33326 +33303 33326 33325 +33304 33305 33326 +33305 33327 33326 +33305 33306 33328 +33305 33328 33327 +33306 33307 33328 +33307 33329 33328 +33307 33308 33330 +33307 33330 33329 +33308 33309 33330 +33309 33331 33330 +33309 33310 33332 +33309 33332 33331 +33310 33311 33332 +33311 33333 33332 +33311 33312 33334 +33311 33334 33333 +33312 33313 33334 +33313 33335 33334 +33313 33314 33336 +33313 33336 33335 +33314 33315 33336 +33315 33337 33336 +33315 33316 33338 +33315 33338 33337 +33316 33317 33338 +33317 33339 33338 +11077 33318 11206 +33318 33340 11206 +33318 33319 33341 +33318 33341 33340 +33319 33320 33341 +33320 33342 33341 +33320 33321 33343 +33320 33343 33342 +33321 33322 33343 +33322 33344 33343 +33322 33323 33345 +33322 33345 33344 +33323 33324 33345 +33324 33346 33345 +33324 33325 33347 +33324 33347 33346 +33325 33326 33347 +33326 33348 33347 +33326 33327 33349 +33326 33349 33348 +33327 33328 33349 +33328 33350 33349 +33328 33329 33351 +33328 33351 33350 +33329 33330 33351 +33330 33352 33351 +33330 33331 33353 +33330 33353 33352 +33331 33332 33353 +33332 33354 33353 +33332 33333 33355 +33332 33355 33354 +33333 33334 33355 +33334 33356 33355 +33334 33335 33357 +33334 33357 33356 +33335 33336 33357 +33336 33358 33357 +33336 33337 33359 +33336 33359 33358 +33337 33338 33359 +33338 33360 33359 +33338 33339 33361 +33338 33361 33360 +11206 33340 33362 +11206 33362 11335 +33340 33341 33362 +33341 33363 33362 +33341 33342 33364 +33341 33364 33363 +33342 33343 33364 +33343 33365 33364 +33343 33344 33366 +33343 33366 33365 +33344 33345 33366 +33345 33367 33366 +33345 33346 33368 +33345 33368 33367 +33346 33347 33368 +33347 33369 33368 +33347 33348 33370 +33347 33370 33369 +33348 33349 33370 +33349 33371 33370 +33349 33350 33372 +33349 33372 33371 +33350 33351 33372 +33351 33373 33372 +33351 33352 33374 +33351 33374 33373 +33352 33353 33374 +33353 33375 33374 +33353 33354 33376 +33353 33376 33375 +33354 33355 33376 +33355 33377 33376 +33355 33356 33378 +33355 33378 33377 +33356 33357 33378 +33357 33379 33378 +33357 33358 33380 +33357 33380 33379 +33358 33359 33380 +33359 33381 33380 +33359 33360 33382 +33359 33382 33381 +33360 33361 33382 +33361 33383 33382 +33361 33384 33383 +11335 33362 11464 +33362 33385 11464 +33362 33363 33386 +33362 33386 33385 +33363 33364 33386 +33364 33387 33386 +33364 33365 33388 +33364 33388 33387 +33365 33366 33388 +33366 33389 33388 +33366 33367 33390 +33366 33390 33389 +33367 33368 33390 +33368 33391 33390 +33368 33369 33392 +33368 33392 33391 +33369 33370 33392 +33370 33393 33392 +33370 33371 33394 +33370 33394 33393 +33371 33372 33394 +33372 33395 33394 +33372 33373 33396 +33372 33396 33395 +33373 33374 33396 +33374 33397 33396 +33374 33375 33398 +33374 33398 33397 +33375 33376 33398 +33376 33399 33398 +33376 33377 33400 +33376 33400 33399 +33377 33378 33400 +33378 33401 33400 +33378 33379 33402 +33378 33402 33401 +33379 33380 33402 +33380 33403 33402 +33380 33381 33404 +33380 33404 33403 +33381 33382 33404 +33382 33405 33404 +33382 33383 33406 +33382 33406 33405 +33383 33384 33406 +33384 33407 33406 +33384 33408 33407 +11464 33385 33409 +11464 33409 11593 +33385 33386 33409 +33386 33410 33409 +33386 33387 33411 +33386 33411 33410 +33387 33388 33411 +33388 33412 33411 +33388 33389 33413 +33388 33413 33412 +33389 33390 33413 +33390 33414 33413 +33390 33391 33415 +33390 33415 33414 +33391 33392 33415 +33392 33416 33415 +33392 33393 33417 +33392 33417 33416 +33393 33394 33417 +33394 33418 33417 +33394 33395 33419 +33394 33419 33418 +33395 33396 33419 +33396 33420 33419 +33396 33397 33421 +33396 33421 33420 +33397 33398 33421 +33398 33422 33421 +33398 33399 33423 +33398 33423 33422 +33399 33400 33423 +33400 33424 33423 +33400 33401 33425 +33400 33425 33424 +33401 33402 33425 +33402 33426 33425 +33402 33403 33427 +33402 33427 33426 +33403 33404 33427 +33404 33428 33427 +33404 33405 33429 +33404 33429 33428 +33405 33406 33429 +33406 33430 33429 +33406 33407 33431 +33406 33431 33430 +33407 33408 33431 +33408 33432 33431 +11593 33409 11722 +33409 33433 11722 +33409 33410 33434 +33409 33434 33433 +33410 33411 33434 +33411 33435 33434 +33411 33412 33436 +33411 33436 33435 +33412 33413 33436 +33413 33437 33436 +33413 33414 33438 +33413 33438 33437 +33414 33415 33438 +33415 33439 33438 +33415 33416 33440 +33415 33440 33439 +33416 33417 33440 +33417 33441 33440 +33417 33418 33442 +33417 33442 33441 +33418 33419 33442 +33419 33443 33442 +33419 33420 33444 +33419 33444 33443 +33420 33421 33444 +33421 33445 33444 +33421 33422 33446 +33421 33446 33445 +33422 33423 33446 +33423 33447 33446 +33423 33424 33448 +33423 33448 33447 +33424 33425 33448 +33425 33449 33448 +33425 33426 33450 +33425 33450 33449 +33426 33427 33450 +33427 33451 33450 +33427 33428 33452 +33427 33452 33451 +33428 33429 33452 +33429 33453 33452 +33429 33430 33454 +33429 33454 33453 +33430 33431 33454 +33431 33455 33454 +33431 33432 33456 +33431 33456 33455 +11722 33433 33457 +11722 33457 11851 +33433 33434 33457 +33434 33458 33457 +33434 33435 33459 +33434 33459 33458 +33435 33436 33459 +33436 33460 33459 +33436 33437 33461 +33436 33461 33460 +33437 33438 33461 +33438 33462 33461 +33438 33439 33463 +33438 33463 33462 +33439 33440 33463 +33440 33464 33463 +33440 33441 33465 +33440 33465 33464 +33441 33442 33465 +33442 33466 33465 +33442 33443 33467 +33442 33467 33466 +33443 33444 33467 +33444 33468 33467 +33444 33445 33469 +33444 33469 33468 +33445 33446 33469 +33446 33470 33469 +33446 33447 33471 +33446 33471 33470 +33447 33448 33471 +33448 33472 33471 +33448 33449 33473 +33448 33473 33472 +33449 33450 33473 +33450 33474 33473 +33450 33451 33475 +33450 33475 33474 +33451 33452 33475 +33452 33476 33475 +33452 33453 33477 +33452 33477 33476 +33453 33454 33477 +33454 33478 33477 +33454 33455 33479 +33454 33479 33478 +33455 33456 33479 +33456 33480 33479 +33456 33481 33480 +11851 33457 11980 +33457 33482 11980 +33457 33458 33483 +33457 33483 33482 +33458 33459 33483 +33459 33484 33483 +33459 33460 33485 +33459 33485 33484 +33460 33461 33485 +33461 33486 33485 +33461 33462 33487 +33461 33487 33486 +33462 33463 33487 +33463 33488 33487 +33463 33464 33489 +33463 33489 33488 +33464 33465 33489 +33465 33490 33489 +33465 33466 33491 +33465 33491 33490 +33466 33467 33491 +33467 33492 33491 +33467 33468 33493 +33467 33493 33492 +33468 33469 33493 +33469 33494 33493 +33469 33470 33495 +33469 33495 33494 +33470 33471 33495 +33471 33496 33495 +33471 33472 33497 +33471 33497 33496 +33472 33473 33497 +33473 33498 33497 +33473 33474 33499 +33473 33499 33498 +33474 33475 33499 +33475 33500 33499 +33475 33476 33501 +33475 33501 33500 +33476 33477 33501 +33477 33502 33501 +33477 33478 33503 +33477 33503 33502 +33478 33479 33503 +33479 33504 33503 +33479 33480 33505 +33479 33505 33504 +33480 33481 33505 +33481 33506 33505 +33481 33507 33506 +11980 33482 33508 +11980 33508 12109 +33482 33483 33508 +33483 33509 33508 +33483 33484 33510 +33483 33510 33509 +33484 33485 33510 +33485 33511 33510 +33485 33486 33512 +33485 33512 33511 +33486 33487 33512 +33487 33513 33512 +33487 33488 33514 +33487 33514 33513 +33488 33489 33514 +33489 33515 33514 +33489 33490 33516 +33489 33516 33515 +33490 33491 33516 +33491 33517 33516 +33491 33492 33518 +33491 33518 33517 +33492 33493 33518 +33493 33519 33518 +33493 33494 33520 +33493 33520 33519 +33494 33495 33520 +33495 33521 33520 +33495 33496 33522 +33495 33522 33521 +33496 33497 33522 +33497 33523 33522 +33497 33498 33524 +33497 33524 33523 +33498 33499 33524 +33499 33525 33524 +33499 33500 33526 +33499 33526 33525 +33500 33501 33526 +33501 33527 33526 +33501 33502 33528 +33501 33528 33527 +33502 33503 33528 +33503 33529 33528 +33503 33504 33530 +33503 33530 33529 +33504 33505 33530 +33505 33531 33530 +33505 33506 33532 +33505 33532 33531 +33506 33507 33532 +33507 33533 33532 +33507 33534 33533 +12109 33508 12238 +33508 33535 12238 +33508 33509 33536 +33508 33536 33535 +33509 33510 33536 +33510 33537 33536 +33510 33511 33538 +33510 33538 33537 +33511 33512 33538 +33512 33539 33538 +33512 33513 33540 +33512 33540 33539 +33513 33514 33540 +33514 33541 33540 +33514 33515 33542 +33514 33542 33541 +33515 33516 33542 +33516 33543 33542 +33516 33517 33544 +33516 33544 33543 +33517 33518 33544 +33518 33545 33544 +33518 33519 33546 +33518 33546 33545 +33519 33520 33546 +33520 33547 33546 +33520 33521 33548 +33520 33548 33547 +33521 33522 33548 +33522 33549 33548 +33522 33523 33550 +33522 33550 33549 +33523 33524 33550 +33524 33551 33550 +33524 33525 33552 +33524 33552 33551 +33525 33526 33552 +33526 33553 33552 +33526 33527 33554 +33526 33554 33553 +33527 33528 33554 +33528 33555 33554 +33528 33529 33556 +33528 33556 33555 +33529 33530 33556 +33530 33557 33556 +33530 33531 33558 +33530 33558 33557 +33531 33532 33558 +33532 33559 33558 +33532 33533 33560 +33532 33560 33559 +33533 33534 33560 +33534 33561 33560 +33534 33562 33561 +12238 33535 33563 +12238 33563 12367 +33535 33536 33563 +33536 33564 33563 +33536 33537 33565 +33536 33565 33564 +33537 33538 33565 +33538 33566 33565 +33538 33539 33567 +33538 33567 33566 +33539 33540 33567 +33540 33568 33567 +33540 33541 33569 +33540 33569 33568 +33541 33542 33569 +33542 33570 33569 +33542 33543 33571 +33542 33571 33570 +33543 33544 33571 +33544 33572 33571 +33544 33545 33573 +33544 33573 33572 +33545 33546 33573 +33546 33574 33573 +33546 33547 33575 +33546 33575 33574 +33547 33548 33575 +33548 33576 33575 +33548 33549 33577 +33548 33577 33576 +33549 33550 33577 +33550 33578 33577 +33550 33551 33579 +33550 33579 33578 +33551 33552 33579 +33552 33580 33579 +33552 33553 33581 +33552 33581 33580 +33553 33554 33581 +33554 33582 33581 +33554 33555 33583 +33554 33583 33582 +33555 33556 33583 +33556 33584 33583 +33556 33557 33585 +33556 33585 33584 +33557 33558 33585 +33558 33586 33585 +33558 33559 33587 +33558 33587 33586 +33559 33560 33587 +33560 33588 33587 +33560 33561 33589 +33560 33589 33588 +33561 33562 33589 +33562 33590 33589 +12367 33563 12496 +33563 33591 12496 +33563 33564 33592 +33563 33592 33591 +33564 33565 33592 +33565 33593 33592 +33565 33566 33594 +33565 33594 33593 +33566 33567 33594 +33567 33595 33594 +33567 33568 33596 +33567 33596 33595 +33568 33569 33596 +33569 33597 33596 +33569 33570 33598 +33569 33598 33597 +33570 33571 33598 +33571 33599 33598 +33571 33572 33600 +33571 33600 33599 +33572 33573 33600 +33573 33601 33600 +33573 33574 33602 +33573 33602 33601 +33574 33575 33602 +33575 33603 33602 +33575 33576 33604 +33575 33604 33603 +33576 33577 33604 +33577 33605 33604 +33577 33578 33606 +33577 33606 33605 +33578 33579 33606 +33579 33607 33606 +33579 33580 33608 +33579 33608 33607 +33580 33581 33608 +33581 33609 33608 +33581 33582 33610 +33581 33610 33609 +33582 33583 33610 +33583 33611 33610 +33583 33584 33612 +33583 33612 33611 +33584 33585 33612 +33585 33613 33612 +33585 33586 33614 +33585 33614 33613 +33586 33587 33614 +33587 33615 33614 +33587 33588 33616 +33587 33616 33615 +33588 33589 33616 +33589 33617 33616 +33589 33590 33618 +33589 33618 33617 +12496 33591 33619 +12496 33619 12625 +33591 33592 33619 +33592 33620 33619 +33592 33593 33621 +33592 33621 33620 +33593 33594 33621 +33594 33622 33621 +33594 33595 33623 +33594 33623 33622 +33595 33596 33623 +33596 33624 33623 +33596 33597 33625 +33596 33625 33624 +33597 33598 33625 +33598 33626 33625 +33598 33599 33627 +33598 33627 33626 +33599 33600 33627 +33600 33628 33627 +33600 33601 33629 +33600 33629 33628 +33601 33602 33629 +33602 33630 33629 +33602 33603 33631 +33602 33631 33630 +33603 33604 33631 +33604 33632 33631 +33604 33605 33633 +33604 33633 33632 +33605 33606 33633 +33606 33634 33633 +33606 33607 33635 +33606 33635 33634 +33607 33608 33635 +33608 33636 33635 +33608 33609 33637 +33608 33637 33636 +33609 33610 33637 +33610 33638 33637 +33610 33611 33639 +33610 33639 33638 +33611 33612 33639 +33612 33640 33639 +33612 33613 33641 +33612 33641 33640 +33613 33614 33641 +33614 33642 33641 +33614 33615 33643 +33614 33643 33642 +33615 33616 33643 +33616 33644 33643 +33616 33617 33645 +33616 33645 33644 +33617 33618 33645 +33618 33646 33645 +33618 33647 33646 +12625 33619 12754 +33619 33648 12754 +33619 33620 33649 +33619 33649 33648 +33620 33621 33649 +33621 33650 33649 +33621 33622 33651 +33621 33651 33650 +33622 33623 33651 +33623 33652 33651 +33623 33624 33653 +33623 33653 33652 +33624 33625 33653 +33625 33654 33653 +33625 33626 33655 +33625 33655 33654 +33626 33627 33655 +33627 33656 33655 +33627 33628 33657 +33627 33657 33656 +33628 33629 33657 +33629 33658 33657 +33629 33630 33659 +33629 33659 33658 +33630 33631 33659 +33631 33660 33659 +33631 33632 33661 +33631 33661 33660 +33632 33633 33661 +33633 33662 33661 +33633 33634 33663 +33633 33663 33662 +33634 33635 33663 +33635 33664 33663 +33635 33636 33665 +33635 33665 33664 +33636 33637 33665 +33637 33666 33665 +33637 33638 33667 +33637 33667 33666 +33638 33639 33667 +33639 33668 33667 +33639 33640 33669 +33639 33669 33668 +33640 33641 33669 +33641 33670 33669 +33641 33642 33671 +33641 33671 33670 +33642 33643 33671 +33643 33672 33671 +33643 33644 33673 +33643 33673 33672 +33644 33645 33673 +33645 33674 33673 +33645 33646 33675 +33645 33675 33674 +33646 33647 33675 +33647 33676 33675 +33647 33677 33676 +12754 33648 33678 +12754 33678 12883 +33648 33649 33678 +33649 33679 33678 +33649 33650 33680 +33649 33680 33679 +33650 33651 33680 +33651 33681 33680 +33651 33652 33682 +33651 33682 33681 +33652 33653 33682 +33653 33683 33682 +33653 33654 33684 +33653 33684 33683 +33654 33655 33684 +33655 33685 33684 +33655 33656 33686 +33655 33686 33685 +33656 33657 33686 +33657 33687 33686 +33657 33658 33688 +33657 33688 33687 +33658 33659 33688 +33659 33689 33688 +33659 33660 33690 +33659 33690 33689 +33660 33661 33690 +33661 33691 33690 +33661 33662 33692 +33661 33692 33691 +33662 33663 33692 +33663 33693 33692 +33663 33664 33694 +33663 33694 33693 +33664 33665 33694 +33665 33695 33694 +33665 33666 33696 +33665 33696 33695 +33666 33667 33696 +33667 33697 33696 +33667 33668 33698 +33667 33698 33697 +33668 33669 33698 +33669 33699 33698 +33669 33670 33700 +33669 33700 33699 +33670 33671 33700 +33671 33701 33700 +33671 33672 33702 +33671 33702 33701 +33672 33673 33702 +33673 33703 33702 +33673 33674 33704 +33673 33704 33703 +33674 33675 33704 +33675 33705 33704 +33675 33676 33706 +33675 33706 33705 +33676 33677 33706 +33677 33707 33706 +12883 33678 13012 +33678 33708 13012 +33678 33679 33709 +33678 33709 33708 +33679 33680 33709 +33680 33710 33709 +33680 33681 33711 +33680 33711 33710 +33681 33682 33711 +33682 33712 33711 +33682 33683 33713 +33682 33713 33712 +33683 33684 33713 +33684 33714 33713 +33684 33685 33715 +33684 33715 33714 +33685 33686 33715 +33686 33716 33715 +33686 33687 33717 +33686 33717 33716 +33687 33688 33717 +33688 33718 33717 +33688 33689 33719 +33688 33719 33718 +33689 33690 33719 +33690 33720 33719 +33690 33691 33721 +33690 33721 33720 +33691 33692 33721 +33692 33722 33721 +33692 33693 33723 +33692 33723 33722 +33693 33694 33723 +33694 33724 33723 +33694 33695 33725 +33694 33725 33724 +33695 33696 33725 +33696 33726 33725 +33696 33697 33727 +33696 33727 33726 +33697 33698 33727 +33698 33728 33727 +33698 33699 33729 +33698 33729 33728 +33699 33700 33729 +33700 33730 33729 +33700 33701 33731 +33700 33731 33730 +33701 33702 33731 +33702 33732 33731 +33702 33703 33733 +33702 33733 33732 +33703 33704 33733 +33704 33734 33733 +33704 33705 33735 +33704 33735 33734 +33705 33706 33735 +33706 33736 33735 +33706 33707 33737 +33706 33737 33736 +13012 33708 33738 +13012 33738 13141 +33708 33709 33738 +33709 33739 33738 +33709 33710 33740 +33709 33740 33739 +33710 33711 33740 +33711 33741 33740 +33711 33712 33742 +33711 33742 33741 +33712 33713 33742 +33713 33743 33742 +33713 33714 33744 +33713 33744 33743 +33714 33715 33744 +33715 33745 33744 +33715 33716 33746 +33715 33746 33745 +33716 33717 33746 +33717 33747 33746 +33717 33718 33748 +33717 33748 33747 +33718 33719 33748 +33719 33749 33748 +33719 33720 33750 +33719 33750 33749 +33720 33721 33750 +33721 33751 33750 +33721 33722 33752 +33721 33752 33751 +33722 33723 33752 +33723 33753 33752 +33723 33724 33754 +33723 33754 33753 +33724 33725 33754 +33725 33755 33754 +33725 33726 33756 +33725 33756 33755 +33726 33727 33756 +33727 33757 33756 +33727 33728 33758 +33727 33758 33757 +33728 33729 33758 +33729 33759 33758 +33729 33730 33760 +33729 33760 33759 +33730 33731 33760 +33731 33761 33760 +33731 33732 33762 +33731 33762 33761 +33732 33733 33762 +33733 33763 33762 +33733 33734 33764 +33733 33764 33763 +33734 33735 33764 +33735 33765 33764 +33735 33736 33766 +33735 33766 33765 +33736 33737 33766 +33737 33767 33766 +33737 33768 33767 +13141 33738 13270 +33738 33769 13270 +33738 33739 33770 +33738 33770 33769 +33739 33740 33770 +33740 33771 33770 +33740 33741 33772 +33740 33772 33771 +33741 33742 33772 +33742 33773 33772 +33742 33743 33774 +33742 33774 33773 +33743 33744 33774 +33744 33775 33774 +33744 33745 33776 +33744 33776 33775 +33745 33746 33776 +33746 33777 33776 +33746 33747 33778 +33746 33778 33777 +33747 33748 33778 +33748 33779 33778 +33748 33749 33780 +33748 33780 33779 +33749 33750 33780 +33750 33781 33780 +33750 33751 33782 +33750 33782 33781 +33751 33752 33782 +33752 33783 33782 +33752 33753 33784 +33752 33784 33783 +33753 33754 33784 +33754 33785 33784 +33754 33755 33786 +33754 33786 33785 +33755 33756 33786 +33756 33787 33786 +33756 33757 33788 +33756 33788 33787 +33757 33758 33788 +33758 33789 33788 +33758 33759 33790 +33758 33790 33789 +33759 33760 33790 +33760 33791 33790 +33760 33761 33792 +33760 33792 33791 +33761 33762 33792 +33762 33793 33792 +33762 33763 33794 +33762 33794 33793 +33763 33764 33794 +33764 33795 33794 +33764 33765 33796 +33764 33796 33795 +33765 33766 33796 +33766 33797 33796 +33766 33767 33798 +33766 33798 33797 +33767 33768 33798 +33768 33799 33798 +13270 33769 33800 +13270 33800 13399 +33769 33770 33800 +33770 33801 33800 +33770 33771 33802 +33770 33802 33801 +33771 33772 33802 +33772 33803 33802 +33772 33773 33804 +33772 33804 33803 +33773 33774 33804 +33774 33805 33804 +33774 33775 33806 +33774 33806 33805 +33775 33776 33806 +33776 33807 33806 +33776 33777 33808 +33776 33808 33807 +33777 33778 33808 +33778 33809 33808 +33778 33779 33810 +33778 33810 33809 +33779 33780 33810 +33780 33811 33810 +33780 33781 33812 +33780 33812 33811 +33781 33782 33812 +33782 33813 33812 +33782 33783 33814 +33782 33814 33813 +33783 33784 33814 +33784 33815 33814 +33784 33785 33816 +33784 33816 33815 +33785 33786 33816 +33786 33817 33816 +33786 33787 33818 +33786 33818 33817 +33787 33788 33818 +33788 33819 33818 +33788 33789 33820 +33788 33820 33819 +33789 33790 33820 +33790 33821 33820 +33790 33791 33822 +33790 33822 33821 +33791 33792 33822 +33792 33823 33822 +33792 33793 33824 +33792 33824 33823 +33793 33794 33824 +33794 33825 33824 +33794 33795 33826 +33794 33826 33825 +33795 33796 33826 +33796 33827 33826 +33796 33797 33828 +33796 33828 33827 +33797 33798 33828 +33798 33829 33828 +33798 33799 33830 +33798 33830 33829 +13399 33800 13528 +33800 33831 13528 +33800 33801 33832 +33800 33832 33831 +33801 33802 33832 +33802 33833 33832 +33802 33803 33834 +33802 33834 33833 +33803 33804 33834 +33804 33835 33834 +33804 33805 33836 +33804 33836 33835 +33805 33806 33836 +33806 33837 33836 +33806 33807 33838 +33806 33838 33837 +33807 33808 33838 +33808 33839 33838 +33808 33809 33840 +33808 33840 33839 +33809 33810 33840 +33810 33841 33840 +33810 33811 33842 +33810 33842 33841 +33811 33812 33842 +33812 33843 33842 +33812 33813 33844 +33812 33844 33843 +33813 33814 33844 +33814 33845 33844 +33814 33815 33846 +33814 33846 33845 +33815 33816 33846 +33816 33847 33846 +33816 33817 33848 +33816 33848 33847 +33817 33818 33848 +33818 33849 33848 +33818 33819 33850 +33818 33850 33849 +33819 33820 33850 +33820 33851 33850 +33820 33821 33852 +33820 33852 33851 +33821 33822 33852 +33822 33853 33852 +33822 33823 33854 +33822 33854 33853 +33823 33824 33854 +33824 33855 33854 +33824 33825 33856 +33824 33856 33855 +33825 33826 33856 +33826 33857 33856 +33826 33827 33858 +33826 33858 33857 +33827 33828 33858 +33828 33859 33858 +33828 33829 33860 +33828 33860 33859 +33829 33830 33860 +33830 33861 33860 +33830 33862 33861 +13528 33831 33863 +13528 33863 13657 +33831 33832 33863 +33832 33864 33863 +33832 33833 33865 +33832 33865 33864 +33833 33834 33865 +33834 33866 33865 +33834 33835 33867 +33834 33867 33866 +33835 33836 33867 +33836 33868 33867 +33836 33837 33869 +33836 33869 33868 +33837 33838 33869 +33838 33870 33869 +33838 33839 33871 +33838 33871 33870 +33839 33840 33871 +33840 33872 33871 +33840 33841 33873 +33840 33873 33872 +33841 33842 33873 +33842 33874 33873 +33842 33843 33875 +33842 33875 33874 +33843 33844 33875 +33844 33876 33875 +33844 33845 33877 +33844 33877 33876 +33845 33846 33877 +33846 33878 33877 +33846 33847 33879 +33846 33879 33878 +33847 33848 33879 +33848 33880 33879 +33848 33849 33881 +33848 33881 33880 +33849 33850 33881 +33850 33882 33881 +33850 33851 33883 +33850 33883 33882 +33851 33852 33883 +33852 33884 33883 +33852 33853 33885 +33852 33885 33884 +33853 33854 33885 +33854 33886 33885 +33854 33855 33887 +33854 33887 33886 +33855 33856 33887 +33856 33888 33887 +33856 33857 33889 +33856 33889 33888 +33857 33858 33889 +33858 33890 33889 +33858 33859 33891 +33858 33891 33890 +33859 33860 33891 +33860 33892 33891 +33860 33861 33893 +33860 33893 33892 +33861 33862 33893 +33862 33894 33893 +13657 33863 13786 +33863 33895 13786 +33863 33864 33896 +33863 33896 33895 +33864 33865 33896 +33865 33897 33896 +33865 33866 33898 +33865 33898 33897 +33866 33867 33898 +33867 33899 33898 +33867 33868 33900 +33867 33900 33899 +33868 33869 33900 +33869 33901 33900 +33869 33870 33902 +33869 33902 33901 +33870 33871 33902 +33871 33903 33902 +33871 33872 33904 +33871 33904 33903 +33872 33873 33904 +33873 33905 33904 +33873 33874 33906 +33873 33906 33905 +33874 33875 33906 +33875 33907 33906 +33875 33876 33908 +33875 33908 33907 +33876 33877 33908 +33877 33909 33908 +33877 33878 33910 +33877 33910 33909 +33878 33879 33910 +33879 33911 33910 +33879 33880 33912 +33879 33912 33911 +33880 33881 33912 +33881 33913 33912 +33881 33882 33914 +33881 33914 33913 +33882 33883 33914 +33883 33915 33914 +33883 33884 33916 +33883 33916 33915 +33884 33885 33916 +33885 33917 33916 +33885 33886 33918 +33885 33918 33917 +33886 33887 33918 +33887 33919 33918 +33887 33888 33920 +33887 33920 33919 +33888 33889 33920 +33889 33921 33920 +33889 33890 33922 +33889 33922 33921 +33890 33891 33922 +33891 33923 33922 +33891 33892 33924 +33891 33924 33923 +33892 33893 33924 +33893 33925 33924 +33893 33894 33926 +33893 33926 33925 +13786 33895 33927 +13786 33927 13915 +33895 33896 33927 +33896 33928 33927 +33896 33897 33929 +33896 33929 33928 +33897 33898 33929 +33898 33930 33929 +33898 33899 33931 +33898 33931 33930 +33899 33900 33931 +33900 33932 33931 +33900 33901 33933 +33900 33933 33932 +33901 33902 33933 +33902 33934 33933 +33902 33903 33935 +33902 33935 33934 +33903 33904 33935 +33904 33936 33935 +33904 33905 33937 +33904 33937 33936 +33905 33906 33937 +33906 33938 33937 +33906 33907 33939 +33906 33939 33938 +33907 33908 33939 +33908 33940 33939 +33908 33909 33941 +33908 33941 33940 +33909 33910 33941 +33910 33942 33941 +33910 33911 33943 +33910 33943 33942 +33911 33912 33943 +33912 33944 33943 +33912 33913 33945 +33912 33945 33944 +33913 33914 33945 +33914 33946 33945 +33914 33915 33947 +33914 33947 33946 +33915 33916 33947 +33916 33948 33947 +33916 33917 33949 +33916 33949 33948 +33917 33918 33949 +33918 33950 33949 +33918 33919 33951 +33918 33951 33950 +33919 33920 33951 +33920 33952 33951 +33920 33921 33953 +33920 33953 33952 +33921 33922 33953 +33922 33954 33953 +33922 33923 33955 +33922 33955 33954 +33923 33924 33955 +33924 33956 33955 +33924 33925 33957 +33924 33957 33956 +33925 33926 33957 +33926 33958 33957 +33926 33959 33958 +13915 33927 14044 +33927 33960 14044 +33927 33928 33961 +33927 33961 33960 +33928 33929 33961 +33929 33962 33961 +33929 33930 33963 +33929 33963 33962 +33930 33931 33963 +33931 33964 33963 +33931 33932 33965 +33931 33965 33964 +33932 33933 33965 +33933 33966 33965 +33933 33934 33967 +33933 33967 33966 +33934 33935 33967 +33935 33968 33967 +33935 33936 33969 +33935 33969 33968 +33936 33937 33969 +33937 33970 33969 +33937 33938 33971 +33937 33971 33970 +33938 33939 33971 +33939 33972 33971 +33939 33940 33973 +33939 33973 33972 +33940 33941 33973 +33941 33974 33973 +33941 33942 33975 +33941 33975 33974 +33942 33943 33975 +33943 33976 33975 +33943 33944 33977 +33943 33977 33976 +33944 33945 33977 +33945 33978 33977 +33945 33946 33979 +33945 33979 33978 +33946 33947 33979 +33947 33980 33979 +33947 33948 33981 +33947 33981 33980 +33948 33949 33981 +33949 33982 33981 +33949 33950 33983 +33949 33983 33982 +33950 33951 33983 +33951 33984 33983 +33951 33952 33985 +33951 33985 33984 +33952 33953 33985 +33953 33986 33985 +33953 33954 33987 +33953 33987 33986 +33954 33955 33987 +33955 33988 33987 +33955 33956 33989 +33955 33989 33988 +33956 33957 33989 +33957 33990 33989 +33957 33958 33991 +33957 33991 33990 +33958 33959 33991 +33959 33992 33991 +33959 33993 33992 +14044 33960 33994 +14044 33994 14173 +33960 33961 33994 +33961 33995 33994 +33961 33962 33996 +33961 33996 33995 +33962 33963 33996 +33963 33997 33996 +33963 33964 33998 +33963 33998 33997 +33964 33965 33998 +33965 33999 33998 +33965 33966 34000 +33965 34000 33999 +33966 33967 34000 +33967 34001 34000 +33967 33968 34002 +33967 34002 34001 +33968 33969 34002 +33969 34003 34002 +33969 33970 34004 +33969 34004 34003 +33970 33971 34004 +33971 34005 34004 +33971 33972 34006 +33971 34006 34005 +33972 33973 34006 +33973 34007 34006 +33973 33974 34008 +33973 34008 34007 +33974 33975 34008 +33975 34009 34008 +33975 33976 34010 +33975 34010 34009 +33976 33977 34010 +33977 34011 34010 +33977 33978 34012 +33977 34012 34011 +33978 33979 34012 +33979 34013 34012 +33979 33980 34014 +33979 34014 34013 +33980 33981 34014 +33981 34015 34014 +33981 33982 34016 +33981 34016 34015 +33982 33983 34016 +33983 34017 34016 +33983 33984 34018 +33983 34018 34017 +33984 33985 34018 +33985 34019 34018 +33985 33986 34020 +33985 34020 34019 +33986 33987 34020 +33987 34021 34020 +33987 33988 34022 +33987 34022 34021 +33988 33989 34022 +33989 34023 34022 +33989 33990 34024 +33989 34024 34023 +33990 33991 34024 +33991 34025 34024 +33991 33992 34026 +33991 34026 34025 +33992 33993 34026 +33993 34027 34026 +33993 34028 34027 +14173 33994 14302 +33994 34029 14302 +33994 33995 34030 +33994 34030 34029 +33995 33996 34030 +33996 34031 34030 +33996 33997 34032 +33996 34032 34031 +33997 33998 34032 +33998 34033 34032 +33998 33999 34034 +33998 34034 34033 +33999 34000 34034 +34000 34035 34034 +34000 34001 34036 +34000 34036 34035 +34001 34002 34036 +34002 34037 34036 +34002 34003 34038 +34002 34038 34037 +34003 34004 34038 +34004 34039 34038 +34004 34005 34040 +34004 34040 34039 +34005 34006 34040 +34006 34041 34040 +34006 34007 34042 +34006 34042 34041 +34007 34008 34042 +34008 34043 34042 +34008 34009 34044 +34008 34044 34043 +34009 34010 34044 +34010 34045 34044 +34010 34011 34046 +34010 34046 34045 +34011 34012 34046 +34012 34047 34046 +34012 34013 34048 +34012 34048 34047 +34013 34014 34048 +34014 34049 34048 +34014 34015 34050 +34014 34050 34049 +34015 34016 34050 +34016 34051 34050 +34016 34017 34052 +34016 34052 34051 +34017 34018 34052 +34018 34053 34052 +34018 34019 34054 +34018 34054 34053 +34019 34020 34054 +34020 34055 34054 +34020 34021 34056 +34020 34056 34055 +34021 34022 34056 +34022 34057 34056 +34022 34023 34058 +34022 34058 34057 +34023 34024 34058 +34024 34059 34058 +34024 34025 34060 +34024 34060 34059 +34025 34026 34060 +34026 34061 34060 +34026 34027 34062 +34026 34062 34061 +34027 34028 34062 +34028 34063 34062 +34028 34064 34063 +14302 34029 34065 +14302 34065 14431 +34029 34030 34065 +34030 34066 34065 +34030 34031 34067 +34030 34067 34066 +34031 34032 34067 +34032 34068 34067 +34032 34033 34069 +34032 34069 34068 +34033 34034 34069 +34034 34070 34069 +34034 34035 34071 +34034 34071 34070 +34035 34036 34071 +34036 34072 34071 +34036 34037 34073 +34036 34073 34072 +34037 34038 34073 +34038 34074 34073 +34038 34039 34075 +34038 34075 34074 +34039 34040 34075 +34040 34076 34075 +34040 34041 34077 +34040 34077 34076 +34041 34042 34077 +34042 34078 34077 +34042 34043 34079 +34042 34079 34078 +34043 34044 34079 +34044 34080 34079 +34044 34045 34081 +34044 34081 34080 +34045 34046 34081 +34046 34082 34081 +34046 34047 34083 +34046 34083 34082 +34047 34048 34083 +34048 34084 34083 +34048 34049 34085 +34048 34085 34084 +34049 34050 34085 +34050 34086 34085 +34050 34051 34087 +34050 34087 34086 +34051 34052 34087 +34052 34088 34087 +34052 34053 34089 +34052 34089 34088 +34053 34054 34089 +34054 34090 34089 +34054 34055 34091 +34054 34091 34090 +34055 34056 34091 +34056 34092 34091 +34056 34057 34093 +34056 34093 34092 +34057 34058 34093 +34058 34094 34093 +34058 34059 34095 +34058 34095 34094 +34059 34060 34095 +34060 34096 34095 +34060 34061 34097 +34060 34097 34096 +34061 34062 34097 +34062 34098 34097 +34062 34063 34099 +34062 34099 34098 +34063 34064 34099 +34064 34100 34099 +14431 34065 14560 +34065 34101 14560 +34065 34066 34102 +34065 34102 34101 +34066 34067 34102 +34067 34103 34102 +34067 34068 34104 +34067 34104 34103 +34068 34069 34104 +34069 34105 34104 +34069 34070 34106 +34069 34106 34105 +34070 34071 34106 +34071 34107 34106 +34071 34072 34108 +34071 34108 34107 +34072 34073 34108 +34073 34109 34108 +34073 34074 34110 +34073 34110 34109 +34074 34075 34110 +34075 34111 34110 +34075 34076 34112 +34075 34112 34111 +34076 34077 34112 +34077 34113 34112 +34077 34078 34114 +34077 34114 34113 +34078 34079 34114 +34079 34115 34114 +34079 34080 34116 +34079 34116 34115 +34080 34081 34116 +34081 34117 34116 +34081 34082 34118 +34081 34118 34117 +34082 34083 34118 +34083 34119 34118 +34083 34084 34120 +34083 34120 34119 +34084 34085 34120 +34085 34121 34120 +34085 34086 34122 +34085 34122 34121 +34086 34087 34122 +34087 34123 34122 +34087 34088 34124 +34087 34124 34123 +34088 34089 34124 +34089 34125 34124 +34089 34090 34126 +34089 34126 34125 +34090 34091 34126 +34091 34127 34126 +34091 34092 34128 +34091 34128 34127 +34092 34093 34128 +34093 34129 34128 +34093 34094 34130 +34093 34130 34129 +34094 34095 34130 +34095 34131 34130 +34095 34096 34132 +34095 34132 34131 +34096 34097 34132 +34097 34133 34132 +34097 34098 34134 +34097 34134 34133 +34098 34099 34134 +34099 34135 34134 +34099 34100 34136 +34099 34136 34135 +14560 34101 34137 +14560 34137 14689 +34101 34102 34137 +34102 34138 34137 +34102 34103 34139 +34102 34139 34138 +34103 34104 34139 +34104 34140 34139 +34104 34105 34141 +34104 34141 34140 +34105 34106 34141 +34106 34142 34141 +34106 34107 34143 +34106 34143 34142 +34107 34108 34143 +34108 34144 34143 +34108 34109 34145 +34108 34145 34144 +34109 34110 34145 +34110 34146 34145 +34110 34111 34147 +34110 34147 34146 +34111 34112 34147 +34112 34148 34147 +34112 34113 34149 +34112 34149 34148 +34113 34114 34149 +34114 34150 34149 +34114 34115 34151 +34114 34151 34150 +34115 34116 34151 +34116 34152 34151 +34116 34117 34153 +34116 34153 34152 +34117 34118 34153 +34118 34154 34153 +34118 34119 34155 +34118 34155 34154 +34119 34120 34155 +34120 34156 34155 +34120 34121 34157 +34120 34157 34156 +34121 34122 34157 +34122 34158 34157 +34122 34123 34159 +34122 34159 34158 +34123 34124 34159 +34124 34160 34159 +34124 34125 34161 +34124 34161 34160 +34125 34126 34161 +34126 34162 34161 +34126 34127 34163 +34126 34163 34162 +34127 34128 34163 +34128 34164 34163 +34128 34129 34165 +34128 34165 34164 +34129 34130 34165 +34130 34166 34165 +34130 34131 34167 +34130 34167 34166 +34131 34132 34167 +34132 34168 34167 +34132 34133 34169 +34132 34169 34168 +34133 34134 34169 +34134 34170 34169 +34134 34135 34171 +34134 34171 34170 +34135 34136 34171 +34136 34172 34171 +34136 34173 34172 +14689 34137 14818 +34137 34174 14818 +34137 34138 34175 +34137 34175 34174 +34138 34139 34175 +34139 34176 34175 +34139 34140 34177 +34139 34177 34176 +34140 34141 34177 +34141 34178 34177 +34141 34142 34179 +34141 34179 34178 +34142 34143 34179 +34143 34180 34179 +34143 34144 34181 +34143 34181 34180 +34144 34145 34181 +34145 34182 34181 +34145 34146 34183 +34145 34183 34182 +34146 34147 34183 +34147 34184 34183 +34147 34148 34185 +34147 34185 34184 +34148 34149 34185 +34149 34186 34185 +34149 34150 34187 +34149 34187 34186 +34150 34151 34187 +34151 34188 34187 +34151 34152 34189 +34151 34189 34188 +34152 34153 34189 +34153 34190 34189 +34153 34154 34191 +34153 34191 34190 +34154 34155 34191 +34155 34192 34191 +34155 34156 34193 +34155 34193 34192 +34156 34157 34193 +34157 34194 34193 +34157 34158 34195 +34157 34195 34194 +34158 34159 34195 +34159 34196 34195 +34159 34160 34197 +34159 34197 34196 +34160 34161 34197 +34161 34198 34197 +34161 34162 34199 +34161 34199 34198 +34162 34163 34199 +34163 34200 34199 +34163 34164 34201 +34163 34201 34200 +34164 34165 34201 +34165 34202 34201 +34165 34166 34203 +34165 34203 34202 +34166 34167 34203 +34167 34204 34203 +34167 34168 34205 +34167 34205 34204 +34168 34169 34205 +34169 34206 34205 +34169 34170 34207 +34169 34207 34206 +34170 34171 34207 +34171 34208 34207 +34171 34172 34209 +34171 34209 34208 +34172 34173 34209 +34173 34210 34209 +34173 34211 34210 +14818 34174 34212 +14818 34212 14947 +34174 34175 34212 +34175 34213 34212 +34175 34176 34214 +34175 34214 34213 +34176 34177 34214 +34177 34215 34214 +34177 34178 34216 +34177 34216 34215 +34178 34179 34216 +34179 34217 34216 +34179 34180 34218 +34179 34218 34217 +34180 34181 34218 +34181 34219 34218 +34181 34182 34220 +34181 34220 34219 +34182 34183 34220 +34183 34221 34220 +34183 34184 34222 +34183 34222 34221 +34184 34185 34222 +34185 34223 34222 +34185 34186 34224 +34185 34224 34223 +34186 34187 34224 +34187 34225 34224 +34187 34188 34226 +34187 34226 34225 +34188 34189 34226 +34189 34227 34226 +34189 34190 34228 +34189 34228 34227 +34190 34191 34228 +34191 34229 34228 +34191 34192 34230 +34191 34230 34229 +34192 34193 34230 +34193 34231 34230 +34193 34194 34232 +34193 34232 34231 +34194 34195 34232 +34195 34233 34232 +34195 34196 34234 +34195 34234 34233 +34196 34197 34234 +34197 34235 34234 +34197 34198 34236 +34197 34236 34235 +34198 34199 34236 +34199 34237 34236 +34199 34200 34238 +34199 34238 34237 +34200 34201 34238 +34201 34239 34238 +34201 34202 34240 +34201 34240 34239 +34202 34203 34240 +34203 34241 34240 +34203 34204 34242 +34203 34242 34241 +34204 34205 34242 +34205 34243 34242 +34205 34206 34244 +34205 34244 34243 +34206 34207 34244 +34207 34245 34244 +34207 34208 34246 +34207 34246 34245 +34208 34209 34246 +34209 34247 34246 +34209 34210 34248 +34209 34248 34247 +34210 34211 34248 +34211 34249 34248 +14947 34212 15076 +34212 34250 15076 +34212 34213 34251 +34212 34251 34250 +34213 34214 34251 +34214 34252 34251 +34214 34215 34253 +34214 34253 34252 +34215 34216 34253 +34216 34254 34253 +34216 34217 34255 +34216 34255 34254 +34217 34218 34255 +34218 34256 34255 +34218 34219 34257 +34218 34257 34256 +34219 34220 34257 +34220 34258 34257 +34220 34221 34259 +34220 34259 34258 +34221 34222 34259 +34222 34260 34259 +34222 34223 34261 +34222 34261 34260 +34223 34224 34261 +34224 34262 34261 +34224 34225 34263 +34224 34263 34262 +34225 34226 34263 +34226 34264 34263 +34226 34227 34265 +34226 34265 34264 +34227 34228 34265 +34228 34266 34265 +34228 34229 34267 +34228 34267 34266 +34229 34230 34267 +34230 34268 34267 +34230 34231 34269 +34230 34269 34268 +34231 34232 34269 +34232 34270 34269 +34232 34233 34271 +34232 34271 34270 +34233 34234 34271 +34234 34272 34271 +34234 34235 34273 +34234 34273 34272 +34235 34236 34273 +34236 34274 34273 +34236 34237 34275 +34236 34275 34274 +34237 34238 34275 +34238 34276 34275 +34238 34239 34277 +34238 34277 34276 +34239 34240 34277 +34240 34278 34277 +34240 34241 34279 +34240 34279 34278 +34241 34242 34279 +34242 34280 34279 +34242 34243 34281 +34242 34281 34280 +34243 34244 34281 +34244 34282 34281 +34244 34245 34283 +34244 34283 34282 +34245 34246 34283 +34246 34284 34283 +34246 34247 34285 +34246 34285 34284 +34247 34248 34285 +34248 34286 34285 +34248 34249 34287 +34248 34287 34286 +15076 34250 34288 +15076 34288 15205 +34250 34251 34288 +34251 34289 34288 +34251 34252 34290 +34251 34290 34289 +34252 34253 34290 +34253 34291 34290 +34253 34254 34292 +34253 34292 34291 +34254 34255 34292 +34255 34293 34292 +34255 34256 34294 +34255 34294 34293 +34256 34257 34294 +34257 34295 34294 +34257 34258 34296 +34257 34296 34295 +34258 34259 34296 +34259 34297 34296 +34259 34260 34298 +34259 34298 34297 +34260 34261 34298 +34261 34299 34298 +34261 34262 34300 +34261 34300 34299 +34262 34263 34300 +34263 34301 34300 +34263 34264 34302 +34263 34302 34301 +34264 34265 34302 +34265 34303 34302 +34265 34266 34304 +34265 34304 34303 +34266 34267 34304 +34267 34305 34304 +34267 34268 34306 +34267 34306 34305 +34268 34269 34306 +34269 34307 34306 +34269 34270 34308 +34269 34308 34307 +34270 34271 34308 +34271 34309 34308 +34271 34272 34310 +34271 34310 34309 +34272 34273 34310 +34273 34311 34310 +34273 34274 34312 +34273 34312 34311 +34274 34275 34312 +34275 34313 34312 +34275 34276 34314 +34275 34314 34313 +34276 34277 34314 +34277 34315 34314 +34277 34278 34316 +34277 34316 34315 +34278 34279 34316 +34279 34317 34316 +34279 34280 34318 +34279 34318 34317 +34280 34281 34318 +34281 34319 34318 +34281 34282 34320 +34281 34320 34319 +34282 34283 34320 +34283 34321 34320 +34283 34284 34322 +34283 34322 34321 +34284 34285 34322 +34285 34323 34322 +34285 34286 34324 +34285 34324 34323 +34286 34287 34324 +34287 34325 34324 +34287 34326 34325 +15205 34288 15334 +34288 34327 15334 +34288 34289 34328 +34288 34328 34327 +34289 34290 34328 +34290 34329 34328 +34290 34291 34330 +34290 34330 34329 +34291 34292 34330 +34292 34331 34330 +34292 34293 34332 +34292 34332 34331 +34293 34294 34332 +34294 34333 34332 +34294 34295 34334 +34294 34334 34333 +34295 34296 34334 +34296 34335 34334 +34296 34297 34336 +34296 34336 34335 +34297 34298 34336 +34298 34337 34336 +34298 34299 34338 +34298 34338 34337 +34299 34300 34338 +34300 34339 34338 +34300 34301 34340 +34300 34340 34339 +34301 34302 34340 +34302 34341 34340 +34302 34303 34342 +34302 34342 34341 +34303 34304 34342 +34304 34343 34342 +34304 34305 34344 +34304 34344 34343 +34305 34306 34344 +34306 34345 34344 +34306 34307 34346 +34306 34346 34345 +34307 34308 34346 +34308 34347 34346 +34308 34309 34348 +34308 34348 34347 +34309 34310 34348 +34310 34349 34348 +34310 34311 34350 +34310 34350 34349 +34311 34312 34350 +34312 34351 34350 +34312 34313 34352 +34312 34352 34351 +34313 34314 34352 +34314 34353 34352 +34314 34315 34354 +34314 34354 34353 +34315 34316 34354 +34316 34355 34354 +34316 34317 34356 +34316 34356 34355 +34317 34318 34356 +34318 34357 34356 +34318 34319 34358 +34318 34358 34357 +34319 34320 34358 +34320 34359 34358 +34320 34321 34360 +34320 34360 34359 +34321 34322 34360 +34322 34361 34360 +34322 34323 34362 +34322 34362 34361 +34323 34324 34362 +34324 34363 34362 +34324 34325 34364 +34324 34364 34363 +34325 34326 34364 +34326 34365 34364 +15334 34327 34366 +15334 34366 15463 +34327 34328 34366 +34328 34367 34366 +34328 34329 34368 +34328 34368 34367 +34329 34330 34368 +34330 34369 34368 +34330 34331 34370 +34330 34370 34369 +34331 34332 34370 +34332 34371 34370 +34332 34333 34372 +34332 34372 34371 +34333 34334 34372 +34334 34373 34372 +34334 34335 34374 +34334 34374 34373 +34335 34336 34374 +34336 34375 34374 +34336 34337 34376 +34336 34376 34375 +34337 34338 34376 +34338 34377 34376 +34338 34339 34378 +34338 34378 34377 +34339 34340 34378 +34340 34379 34378 +34340 34341 34380 +34340 34380 34379 +34341 34342 34380 +34342 34381 34380 +34342 34343 34382 +34342 34382 34381 +34343 34344 34382 +34344 34383 34382 +34344 34345 34384 +34344 34384 34383 +34345 34346 34384 +34346 34385 34384 +34346 34347 34386 +34346 34386 34385 +34347 34348 34386 +34348 34387 34386 +34348 34349 34388 +34348 34388 34387 +34349 34350 34388 +34350 34389 34388 +34350 34351 34390 +34350 34390 34389 +34351 34352 34390 +34352 34391 34390 +34352 34353 34392 +34352 34392 34391 +34353 34354 34392 +34354 34393 34392 +34354 34355 34394 +34354 34394 34393 +34355 34356 34394 +34356 34395 34394 +34356 34357 34396 +34356 34396 34395 +34357 34358 34396 +34358 34397 34396 +34358 34359 34398 +34358 34398 34397 +34359 34360 34398 +34360 34399 34398 +34360 34361 34400 +34360 34400 34399 +34361 34362 34400 +34362 34401 34400 +34362 34363 34402 +34362 34402 34401 +34363 34364 34402 +34364 34403 34402 +34364 34365 34404 +34364 34404 34403 +15463 34366 15592 +34366 34405 15592 +34366 34367 34406 +34366 34406 34405 +34367 34368 34406 +34368 34407 34406 +34368 34369 34408 +34368 34408 34407 +34369 34370 34408 +34370 34409 34408 +34370 34371 34410 +34370 34410 34409 +34371 34372 34410 +34372 34411 34410 +34372 34373 34412 +34372 34412 34411 +34373 34374 34412 +34374 34413 34412 +34374 34375 34414 +34374 34414 34413 +34375 34376 34414 +34376 34415 34414 +34376 34377 34416 +34376 34416 34415 +34377 34378 34416 +34378 34417 34416 +34378 34379 34418 +34378 34418 34417 +34379 34380 34418 +34380 34419 34418 +34380 34381 34420 +34380 34420 34419 +34381 34382 34420 +34382 34421 34420 +34382 34383 34422 +34382 34422 34421 +34383 34384 34422 +34384 34423 34422 +34384 34385 34424 +34384 34424 34423 +34385 34386 34424 +34386 34425 34424 +34386 34387 34426 +34386 34426 34425 +34387 34388 34426 +34388 34427 34426 +34388 34389 34428 +34388 34428 34427 +34389 34390 34428 +34390 34429 34428 +34390 34391 34430 +34390 34430 34429 +34391 34392 34430 +34392 34431 34430 +34392 34393 34432 +34392 34432 34431 +34393 34394 34432 +34394 34433 34432 +34394 34395 34434 +34394 34434 34433 +34395 34396 34434 +34396 34435 34434 +34396 34397 34436 +34396 34436 34435 +34397 34398 34436 +34398 34437 34436 +34398 34399 34438 +34398 34438 34437 +34399 34400 34438 +34400 34439 34438 +34400 34401 34440 +34400 34440 34439 +34401 34402 34440 +34402 34441 34440 +34402 34403 34442 +34402 34442 34441 +34403 34404 34442 +34404 34443 34442 +34404 34444 34443 +15592 34405 34445 +15592 34445 15721 +34405 34406 34445 +34406 34446 34445 +34406 34407 34447 +34406 34447 34446 +34407 34408 34447 +34408 34448 34447 +34408 34409 34449 +34408 34449 34448 +34409 34410 34449 +34410 34450 34449 +34410 34411 34451 +34410 34451 34450 +34411 34412 34451 +34412 34452 34451 +34412 34413 34453 +34412 34453 34452 +34413 34414 34453 +34414 34454 34453 +34414 34415 34455 +34414 34455 34454 +34415 34416 34455 +34416 34456 34455 +34416 34417 34457 +34416 34457 34456 +34417 34418 34457 +34418 34458 34457 +34418 34419 34459 +34418 34459 34458 +34419 34420 34459 +34420 34460 34459 +34420 34421 34461 +34420 34461 34460 +34421 34422 34461 +34422 34462 34461 +34422 34423 34463 +34422 34463 34462 +34423 34424 34463 +34424 34464 34463 +34424 34425 34465 +34424 34465 34464 +34425 34426 34465 +34426 34466 34465 +34426 34427 34467 +34426 34467 34466 +34427 34428 34467 +34428 34468 34467 +34428 34429 34469 +34428 34469 34468 +34429 34430 34469 +34430 34470 34469 +34430 34431 34471 +34430 34471 34470 +34431 34432 34471 +34432 34472 34471 +34432 34433 34473 +34432 34473 34472 +34433 34434 34473 +34434 34474 34473 +34434 34435 34475 +34434 34475 34474 +34435 34436 34475 +34436 34476 34475 +34436 34437 34477 +34436 34477 34476 +34437 34438 34477 +34438 34478 34477 +34438 34439 34479 +34438 34479 34478 +34439 34440 34479 +34440 34480 34479 +34440 34441 34481 +34440 34481 34480 +34441 34442 34481 +34442 34482 34481 +34442 34443 34483 +34442 34483 34482 +34443 34444 34483 +34444 34484 34483 +15721 34445 15850 +34445 34485 15850 +34445 34446 34486 +34445 34486 34485 +34446 34447 34486 +34447 34487 34486 +34447 34448 34488 +34447 34488 34487 +34448 34449 34488 +34449 34489 34488 +34449 34450 34490 +34449 34490 34489 +34450 34451 34490 +34451 34491 34490 +34451 34452 34492 +34451 34492 34491 +34452 34453 34492 +34453 34493 34492 +34453 34454 34494 +34453 34494 34493 +34454 34455 34494 +34455 34495 34494 +34455 34456 34496 +34455 34496 34495 +34456 34457 34496 +34457 34497 34496 +34457 34458 34498 +34457 34498 34497 +34458 34459 34498 +34459 34499 34498 +34459 34460 34500 +34459 34500 34499 +34460 34461 34500 +34461 34501 34500 +34461 34462 34502 +34461 34502 34501 +34462 34463 34502 +34463 34503 34502 +34463 34464 34504 +34463 34504 34503 +34464 34465 34504 +34465 34505 34504 +34465 34466 34506 +34465 34506 34505 +34466 34467 34506 +34467 34507 34506 +34467 34468 34508 +34467 34508 34507 +34468 34469 34508 +34469 34509 34508 +34469 34470 34510 +34469 34510 34509 +34470 34471 34510 +34471 34511 34510 +34471 34472 34512 +34471 34512 34511 +34472 34473 34512 +34473 34513 34512 +34473 34474 34514 +34473 34514 34513 +34474 34475 34514 +34475 34515 34514 +34475 34476 34516 +34475 34516 34515 +34476 34477 34516 +34477 34517 34516 +34477 34478 34518 +34477 34518 34517 +34478 34479 34518 +34479 34519 34518 +34479 34480 34520 +34479 34520 34519 +34480 34481 34520 +34481 34521 34520 +34481 34482 34522 +34481 34522 34521 +34482 34483 34522 +34483 34523 34522 +34483 34484 34524 +34483 34524 34523 +15850 34485 34525 +15850 34525 15979 +34485 34486 34525 +34486 34526 34525 +34486 34487 34527 +34486 34527 34526 +34487 34488 34527 +34488 34528 34527 +34488 34489 34529 +34488 34529 34528 +34489 34490 34529 +34490 34530 34529 +34490 34491 34531 +34490 34531 34530 +34491 34492 34531 +34492 34532 34531 +34492 34493 34533 +34492 34533 34532 +34493 34494 34533 +34494 34534 34533 +34494 34495 34535 +34494 34535 34534 +34495 34496 34535 +34496 34536 34535 +34496 34497 34537 +34496 34537 34536 +34497 34498 34537 +34498 34538 34537 +34498 34499 34539 +34498 34539 34538 +34499 34500 34539 +34500 34540 34539 +34500 34501 34541 +34500 34541 34540 +34501 34502 34541 +34502 34542 34541 +34502 34503 34543 +34502 34543 34542 +34503 34504 34543 +34504 34544 34543 +34504 34505 34545 +34504 34545 34544 +34505 34506 34545 +34506 34546 34545 +34506 34507 34547 +34506 34547 34546 +34507 34508 34547 +34508 34548 34547 +34508 34509 34549 +34508 34549 34548 +34509 34510 34549 +34510 34550 34549 +34510 34511 34551 +34510 34551 34550 +34511 34512 34551 +34512 34552 34551 +34512 34513 34553 +34512 34553 34552 +34513 34514 34553 +34514 34554 34553 +34514 34515 34555 +34514 34555 34554 +34515 34516 34555 +34516 34556 34555 +34516 34517 34557 +34516 34557 34556 +34517 34518 34557 +34518 34558 34557 +34518 34519 34559 +34518 34559 34558 +34519 34520 34559 +34520 34560 34559 +34520 34521 34561 +34520 34561 34560 +34521 34522 34561 +34522 34562 34561 +34522 34523 34563 +34522 34563 34562 +34523 34524 34563 +34524 34564 34563 +34524 34565 34564 +15979 34525 16108 +34525 34566 16108 +34525 34526 34567 +34525 34567 34566 +34526 34527 34567 +34527 34568 34567 +34527 34528 34569 +34527 34569 34568 +34528 34529 34569 +34529 34570 34569 +34529 34530 34571 +34529 34571 34570 +34530 34531 34571 +34531 34572 34571 +34531 34532 34573 +34531 34573 34572 +34532 34533 34573 +34533 34574 34573 +34533 34534 34575 +34533 34575 34574 +34534 34535 34575 +34535 34576 34575 +34535 34536 34577 +34535 34577 34576 +34536 34537 34577 +34537 34578 34577 +34537 34538 34579 +34537 34579 34578 +34538 34539 34579 +34539 34580 34579 +34539 34540 34581 +34539 34581 34580 +34540 34541 34581 +34541 34582 34581 +34541 34542 34583 +34541 34583 34582 +34542 34543 34583 +34543 34584 34583 +34543 34544 34585 +34543 34585 34584 +34544 34545 34585 +34545 34586 34585 +34545 34546 34587 +34545 34587 34586 +34546 34547 34587 +34547 34588 34587 +34547 34548 34589 +34547 34589 34588 +34548 34549 34589 +34549 34590 34589 +34549 34550 34591 +34549 34591 34590 +34550 34551 34591 +34551 34592 34591 +34551 34552 34593 +34551 34593 34592 +34552 34553 34593 +34553 34594 34593 +34553 34554 34595 +34553 34595 34594 +34554 34555 34595 +34555 34596 34595 +34555 34556 34597 +34555 34597 34596 +34556 34557 34597 +34557 34598 34597 +34557 34558 34599 +34557 34599 34598 +34558 34559 34599 +34559 34600 34599 +34559 34560 34601 +34559 34601 34600 +34560 34561 34601 +34561 34602 34601 +34561 34562 34603 +34561 34603 34602 +34562 34563 34603 +34563 34604 34603 +34563 34564 34605 +34563 34605 34604 +34564 34565 34605 +34565 34606 34605 +34565 34607 34606 +16108 34566 34608 +16108 34608 16237 +34566 34567 34608 +34567 34609 34608 +34567 34568 34610 +34567 34610 34609 +34568 34569 34610 +34569 34611 34610 +34569 34570 34612 +34569 34612 34611 +34570 34571 34612 +34571 34613 34612 +34571 34572 34614 +34571 34614 34613 +34572 34573 34614 +34573 34615 34614 +34573 34574 34616 +34573 34616 34615 +34574 34575 34616 +34575 34617 34616 +34575 34576 34618 +34575 34618 34617 +34576 34577 34618 +34577 34619 34618 +34577 34578 34620 +34577 34620 34619 +34578 34579 34620 +34579 34621 34620 +34579 34580 34622 +34579 34622 34621 +34580 34581 34622 +34581 34623 34622 +34581 34582 34624 +34581 34624 34623 +34582 34583 34624 +34583 34625 34624 +34583 34584 34626 +34583 34626 34625 +34584 34585 34626 +34585 34627 34626 +34585 34586 34628 +34585 34628 34627 +34586 34587 34628 +34587 34629 34628 +34587 34588 34630 +34587 34630 34629 +34588 34589 34630 +34589 34631 34630 +34589 34590 34632 +34589 34632 34631 +34590 34591 34632 +34591 34633 34632 +34591 34592 34634 +34591 34634 34633 +34592 34593 34634 +34593 34635 34634 +34593 34594 34636 +34593 34636 34635 +34594 34595 34636 +34595 34637 34636 +34595 34596 34638 +34595 34638 34637 +34596 34597 34638 +34597 34639 34638 +34597 34598 34640 +34597 34640 34639 +34598 34599 34640 +34599 34641 34640 +34599 34600 34642 +34599 34642 34641 +34600 34601 34642 +34601 34643 34642 +34601 34602 34644 +34601 34644 34643 +34602 34603 34644 +34603 34645 34644 +34603 34604 34646 +34603 34646 34645 +34604 34605 34646 +34605 34647 34646 +34605 34606 34648 +34605 34648 34647 +34606 34607 34648 +34607 34649 34648 +34607 34650 34649 +16237 34608 21882 +34608 22011 21882 +34608 34609 22140 +34608 22140 22011 +34609 34610 22140 +34610 22269 22140 +34610 34611 22398 +34610 22398 22269 +34611 34612 22398 +34612 22527 22398 +34612 34613 22656 +34612 22656 22527 +34613 34614 22656 +34614 22785 22656 +34614 34615 22914 +34614 22914 22785 +34615 34616 22914 +34616 23043 22914 +34616 34617 23172 +34616 23172 23043 +34617 34618 23172 +34618 23301 23172 +34618 34619 23430 +34618 23430 23301 +34619 34620 23430 +34620 23559 23430 +34620 34621 23688 +34620 23688 23559 +34621 34622 23688 +34622 23817 23688 +34622 34623 23946 +34622 23946 23817 +34623 34624 23946 +34624 24075 23946 +34624 34625 24204 +34624 24204 24075 +34625 34626 24204 +34626 24333 24204 +34626 34627 24462 +34626 24462 24333 +34627 34628 24462 +34628 24591 24462 +34628 34629 24720 +34628 24720 24591 +34629 34630 24720 +34630 24849 24720 +34630 34631 24978 +34630 24978 24849 +34631 34632 24978 +34632 25107 24978 +34632 34633 25236 +34632 25236 25107 +34633 34634 25236 +34634 25365 25236 +34634 34635 25494 +34634 25494 25365 +34635 34636 25494 +34636 25623 25494 +34636 34637 25752 +34636 25752 25623 +34637 34638 25752 +34638 25881 25752 +34638 34639 26010 +34638 26010 25881 +34639 34640 26010 +34640 26139 26010 +34640 34641 26268 +34640 26268 26139 +34641 34642 26268 +34642 26397 26268 +34642 34643 26526 +34642 26526 26397 +34643 34644 26526 +34644 26652 26526 +34644 34645 26777 +34644 26777 26652 +34645 34646 26777 +34646 26899 26777 +34646 34647 27020 +34646 27020 26899 +34647 34648 27020 +34648 27109 27020 +34648 34649 27191 +34648 27191 27109 +34649 34650 27191 +34650 27264 27191 +34650 27312 27264 +16394 16472 16471 +27137 27214 27136 +16394 16473 16472 +27138 27214 27137 +16473 16558 16557 +27052 27138 27051 +16473 16559 16558 +27053 27138 27052 +16559 16653 16652 +26937 27053 26936 +16559 16654 16653 +26938 27053 26937 +16678 16560 16679 +27054 26962 26963 +16679 16560 16680 +27054 26963 26964 +16560 16474 16561 +27139 27054 27055 +16561 16474 16562 +27139 27055 27056 +16474 16395 16475 +27215 27139 27140 +16475 16395 16476 +27215 27140 27141 +16395 16324 16396 +27265 27215 27216 +16396 16324 16397 +27265 27216 27217 +16324 16279 16325 +27313 27265 27266 +16279 16238 16280 +27358 27313 27314 +16280 16238 16281 +27358 27314 27315 +16445 16372 16446 +27192 27110 27111 +16446 16372 16447 +27192 27111 27112 diff --git a/data_utils/face_tracking/3DMM/vert_tris.txt b/data_utils/face_tracking/3DMM/vert_tris.txt new file mode 100644 index 0000000000000000000000000000000000000000..b88eeedd340c18b4c396c97b3894b5bb4158ce32 --- /dev/null +++ b/data_utils/face_tracking/3DMM/vert_tris.txt @@ -0,0 +1,34650 @@ +0 +0 +2 +4 +6 +8 +10 +12 +14 +16 +18 +20 +22 +24 +26 +28 +30 +32 +34 +36 +38 +40 +42 +44 +46 +48 +50 +52 +54 +56 +58 +60 +62 +64 +66 +68 +70 +72 +74 +76 +78 +80 +82 +84 +86 +88 +90 +92 +94 +96 +98 +100 +102 +104 +106 +108 +110 +112 +114 +116 +118 +120 +122 +124 +126 +128 +130 +132 +134 +136 +138 +140 +142 +144 +146 +148 +150 +152 +154 +156 +158 +160 +162 +164 +166 +168 +170 +172 +174 +176 +178 +180 +182 +184 +186 +188 +190 +192 +194 +196 +198 +200 +202 +204 +206 +208 +210 +212 +214 +216 +218 +220 +222 +224 +226 +228 +230 +232 +234 +236 +238 +240 +242 +244 +246 +248 +250 +252 +254 +1 +0 +3 +4 +7 +8 +11 +12 +15 +16 +19 +20 +23 +24 +27 +28 +31 +32 +35 +36 +39 +40 +43 +44 +47 +48 +51 +52 +55 +56 +59 +60 +63 +64 +67 +68 +71 +72 +75 +76 +79 +80 +83 +84 +87 +88 +91 +92 +95 +96 +99 +100 +103 +104 +107 +108 +111 +112 +115 +116 +119 +120 +123 +124 +127 +128 +131 +132 +135 +136 +139 +140 +143 +144 +147 +148 +151 +152 +155 +156 +159 +160 +163 +164 +167 +168 +171 +172 +175 +176 +179 +180 +183 +184 +187 +188 +191 +192 +195 +196 +199 +200 +203 +204 +207 +208 +211 +212 +215 +216 +219 +220 +223 +224 +227 +228 +231 +232 +235 +236 +239 +240 +243 +244 +247 +248 +251 +252 +255 +256 +257 +258 +261 +262 +265 +266 +269 +270 +273 +274 +277 +278 +281 +282 +285 +286 +289 +290 +293 +294 +297 +298 +301 +302 +305 +306 +309 +310 +313 +314 +317 +318 +321 +322 +325 +326 +329 +330 +333 +334 +337 +338 +341 +342 +345 +346 +349 +350 +353 +354 +357 +358 +361 +362 +365 +366 +369 +370 +373 +374 +377 +378 +381 +382 +385 +386 +389 +390 +393 +394 +397 +398 +401 +402 +405 +406 +409 +410 +413 +414 +417 +418 +421 +422 +425 +426 +429 +430 +433 +434 +437 +438 +441 +442 +445 +446 +449 +450 +453 +454 +457 +458 +461 +462 +465 +466 +469 +470 +473 +474 +477 +478 +481 +482 +485 +486 +489 +490 +493 +494 +497 +498 +501 +502 +505 +506 +509 +510 +513 +512 +515 +516 +519 +520 +523 +524 +527 +528 +531 +532 +535 +536 +539 +540 +543 +544 +547 +548 +551 +552 +555 +556 +559 +560 +563 +564 +567 +568 +571 +572 +575 +576 +579 +580 +583 +584 +587 +588 +591 +592 +595 +596 +599 +600 +603 +604 +607 +608 +611 +612 +615 +616 +619 +620 +623 +624 +627 +628 +631 +632 +635 +636 +639 +640 +643 +644 +647 +648 +651 +652 +655 +656 +659 +660 +663 +664 +667 +668 +671 +672 +675 +676 +679 +680 +683 +684 +687 +688 +691 +692 +695 +696 +699 +700 +703 +704 +707 +708 +711 +712 +715 +716 +719 +720 +723 +724 +727 +728 +731 +732 +735 +736 +739 +740 +743 +744 +747 +748 +751 +752 +755 +756 +759 +760 +763 +764 +767 +768 +769 +770 +773 +774 +777 +778 +781 +782 +785 +786 +789 +790 +793 +794 +797 +798 +801 +802 +805 +806 +809 +810 +813 +814 +817 +818 +821 +822 +825 +826 +829 +830 +833 +834 +837 +838 +841 +842 +845 +846 +849 +850 +853 +854 +857 +858 +861 +862 +865 +866 +869 +870 +873 +874 +877 +878 +881 +882 +885 +886 +889 +890 +893 +894 +897 +898 +901 +902 +905 +906 +909 +910 +913 +914 +917 +918 +921 +922 +925 +926 +929 +930 +933 +934 +937 +938 +941 +942 +945 +946 +949 +950 +953 +954 +957 +958 +961 +962 +965 +966 +969 +970 +973 +974 +977 +978 +981 +982 +985 +986 +989 +990 +993 +994 +997 +998 +1001 +1002 +1005 +1006 +1009 +1010 +1013 +1014 +1017 +1018 +1021 +1022 +1025 +1024 +1027 +1028 +1031 +1032 +1035 +1036 +1039 +1040 +1043 +1044 +1047 +1048 +1051 +1052 +1055 +1056 +1059 +1060 +1063 +1064 +1067 +1068 +1071 +1072 +1075 +1076 +1079 +1080 +1083 +1084 +1087 +1088 +1091 +1092 +1095 +1096 +1099 +1100 +1103 +1104 +1107 +1108 +1111 +1112 +1115 +1116 +1119 +1120 +1123 +1124 +1127 +1128 +1131 +1132 +1135 +1136 +1139 +1140 +1143 +1144 +1147 +1148 +1151 +1152 +1155 +1156 +1159 +1160 +1163 +1164 +1167 +1168 +1171 +1172 +1175 +1176 +1179 +1180 +1183 +1184 +1187 +1188 +1191 +1192 +1195 +1196 +1199 +1200 +1203 +1204 +1207 +1208 +1211 +1212 +1215 +1216 +1219 +1220 +1223 +1224 +1227 +1228 +1231 +1232 +1235 +1236 +1239 +1240 +1243 +1244 +1247 +1248 +1251 +1252 +1255 +1256 +1259 +1260 +1263 +1264 +1267 +1268 +1271 +1272 +1275 +1276 +1279 +1280 +1281 +1282 +1285 +1286 +1289 +1290 +1293 +1294 +1297 +1298 +1301 +1302 +1305 +1306 +1309 +1310 +1313 +1314 +1317 +1318 +1321 +1322 +1325 +1326 +1329 +1330 +1333 +1334 +1337 +1338 +1341 +1342 +1345 +1346 +1349 +1350 +1353 +1354 +1357 +1358 +1361 +1362 +1365 +1366 +1369 +1370 +1373 +1374 +1377 +1378 +1381 +1382 +1385 +1386 +1389 +1390 +1393 +1394 +1397 +1398 +1401 +1402 +1405 +1406 +1409 +1410 +1413 +1414 +1417 +1418 +1421 +1422 +1425 +1426 +1429 +1430 +1433 +1434 +1437 +1438 +1441 +1442 +1445 +1446 +1449 +1450 +1453 +1454 +1457 +1458 +1461 +1462 +1465 +1466 +1469 +1470 +1473 +1474 +1477 +1478 +1481 +1482 +1485 +1486 +1489 +1490 +1493 +1494 +1497 +1498 +1501 +1502 +1505 +1506 +1509 +1510 +1513 +1514 +1517 +1518 +1521 +1522 +1525 +1526 +1529 +1530 +1533 +1534 +1537 +1536 +1539 +1540 +1543 +1544 +1547 +1548 +1551 +1552 +1555 +1556 +1559 +1560 +1563 +1564 +1567 +1568 +1571 +1572 +1575 +1576 +1579 +1580 +1583 +1584 +1587 +1588 +1591 +1592 +1595 +1596 +1599 +1600 +1603 +1604 +1607 +1608 +1611 +1612 +1615 +1616 +1619 +1620 +1623 +1624 +1627 +1628 +1631 +1632 +1635 +1636 +1639 +1640 +1643 +1644 +1647 +1648 +1651 +1652 +1655 +1656 +1659 +1660 +1663 +1664 +1667 +1668 +1671 +1672 +1675 +1676 +1679 +1680 +1683 +1684 +1687 +1688 +1691 +1692 +1695 +1696 +1699 +1700 +1703 +1704 +1707 +1708 +1711 +1712 +1715 +1716 +1719 +1720 +1723 +1724 +1727 +1728 +1731 +1732 +1735 +1736 +1739 +1740 +1743 +1744 +1747 +1748 +1751 +1752 +1755 +1756 +1759 +1760 +1763 +1764 +1767 +1768 +1771 +1772 +1775 +1776 +1779 +1780 +1783 +1784 +1787 +1788 +1791 +1792 +1793 +1794 +1797 +1798 +1801 +1802 +1805 +1806 +1809 +1810 +1813 +1814 +1817 +1818 +1821 +1822 +1825 +1826 +1829 +1830 +1833 +1834 +1837 +1838 +1841 +1842 +1845 +1846 +1849 +1850 +1853 +1854 +1857 +1858 +1861 +1862 +1865 +1866 +1869 +1870 +1873 +1874 +1877 +1878 +1881 +1882 +1885 +1886 +1889 +1890 +1893 +1894 +1897 +1898 +1901 +1902 +1905 +1906 +1909 +1910 +1913 +1914 +1917 +1918 +1921 +1922 +1925 +1926 +1929 +1930 +1933 +1934 +1937 +1938 +1941 +1942 +1945 +1946 +1949 +1950 +1953 +1954 +1957 +1958 +1961 +1962 +1965 +1966 +1969 +1970 +1973 +1974 +1977 +1978 +1981 +1982 +1985 +1986 +1989 +1990 +1993 +1994 +1997 +1998 +2001 +2002 +2005 +2006 +2009 +2010 +2013 +2014 +2017 +2018 +2021 +2022 +2025 +2026 +2029 +2030 +2033 +2034 +2037 +2038 +2041 +2042 +2045 +2046 +2049 +2048 +2051 +2052 +2055 +2056 +2059 +2060 +2063 +2064 +2067 +2068 +2071 +2072 +2075 +2076 +2079 +2080 +2083 +2084 +2087 +2088 +2091 +2092 +2095 +2096 +2099 +2100 +2103 +2104 +2107 +2108 +2111 +2112 +2115 +2116 +2119 +2120 +2123 +2124 +2127 +2128 +2131 +2132 +2135 +2136 +2139 +2140 +2143 +2144 +2147 +2148 +2151 +2152 +2155 +2156 +2159 +2160 +2163 +2164 +2167 +2168 +2171 +2172 +2175 +2176 +2179 +2180 +2183 +2184 +2187 +2188 +2191 +2192 +2195 +2196 +2199 +2200 +2203 +2204 +2207 +2208 +2211 +2212 +2215 +2216 +2219 +2220 +2223 +2224 +2227 +2228 +2231 +2232 +2235 +2236 +2239 +2240 +2243 +2244 +2247 +2248 +2251 +2252 +2255 +2256 +2259 +2260 +2263 +2264 +2267 +2268 +2271 +2272 +2275 +2276 +2279 +2280 +2283 +2284 +2287 +2288 +2291 +2292 +2295 +2296 +2299 +2300 +2303 +2304 +2305 +2306 +2309 +2310 +2313 +2314 +2317 +2318 +2321 +2322 +2325 +2326 +2329 +2330 +2333 +2334 +2337 +2338 +2341 +2342 +2345 +2346 +2349 +2350 +2353 +2354 +2357 +2358 +2361 +2362 +2365 +2366 +2369 +2370 +2373 +2374 +2377 +2378 +2381 +2382 +2385 +2386 +2389 +2390 +2393 +2394 +2397 +2398 +2401 +2402 +2405 +2406 +2409 +2410 +2413 +2414 +2417 +2418 +2421 +2422 +2425 +2426 +2429 +2430 +2433 +2434 +2437 +2438 +2441 +2442 +2445 +2446 +2449 +2450 +2453 +2454 +2457 +2458 +2461 +2462 +2465 +2466 +2469 +2470 +2473 +2474 +2477 +2478 +2481 +2482 +2485 +2486 +2489 +2490 +2493 +2494 +2497 +2498 +2501 +2502 +2505 +2506 +2509 +2510 +2513 +2514 +2517 +2518 +2521 +2522 +2525 +2526 +2529 +2530 +2533 +2534 +2537 +2538 +2541 +2542 +2545 +2546 +2549 +2550 +2553 +2554 +2557 +2558 +2561 +2560 +2563 +2564 +2567 +2568 +2571 +2572 +2575 +2576 +2579 +2580 +2583 +2584 +2587 +2588 +2591 +2592 +2595 +2596 +2599 +2600 +2603 +2604 +2607 +2608 +2611 +2612 +2615 +2616 +2619 +2620 +2623 +2624 +2627 +2628 +2631 +2632 +2635 +2636 +2639 +2640 +2643 +2644 +2647 +2648 +2651 +2652 +2655 +2656 +2659 +2660 +2663 +2664 +2667 +2668 +2671 +2672 +2675 +2676 +2679 +2680 +2683 +2684 +2687 +2688 +2691 +2692 +2695 +2696 +2699 +2700 +2703 +2704 +2707 +2708 +2711 +2712 +2715 +2716 +2719 +2720 +2723 +2724 +2727 +2728 +2731 +2732 +2735 +2736 +2739 +2740 +2743 +2744 +2747 +2748 +2751 +2752 +2755 +2756 +2759 +2760 +2763 +2764 +2767 +2768 +2771 +2772 +2775 +2776 +2779 +2780 +2783 +2784 +2787 +2788 +2791 +2792 +2795 +2796 +2799 +2800 +2803 +2804 +2807 +2808 +2811 +2812 +2815 +2816 +2817 +2818 +2821 +2822 +2825 +2826 +2829 +2830 +2833 +2834 +2837 +2838 +2841 +2842 +2845 +2846 +2849 +2850 +2853 +2854 +2857 +2858 +2861 +2862 +2865 +2866 +2869 +2870 +2873 +2874 +2877 +2878 +2881 +2882 +2885 +2886 +2889 +2890 +2893 +2894 +2897 +2898 +2901 +2902 +2905 +2906 +2909 +2910 +2913 +2914 +2917 +2918 +2921 +2922 +2925 +2926 +2929 +2930 +2933 +2934 +2937 +2938 +2941 +2942 +2945 +2946 +2949 +2950 +2953 +2954 +2957 +2958 +2961 +2962 +2965 +2966 +2969 +2970 +2973 +2974 +2977 +2978 +2981 +2982 +2985 +2986 +2989 +2990 +2993 +2994 +2997 +2998 +3001 +3002 +3005 +3006 +3009 +3010 +3013 +3014 +3017 +3018 +3021 +3022 +3025 +3026 +3029 +3030 +3033 +3034 +3037 +3038 +3041 +3042 +3045 +3046 +3049 +3050 +3053 +3054 +3057 +3058 +3061 +3062 +3065 +3066 +3069 +3070 +3073 +3072 +3075 +3076 +3079 +3080 +3083 +3084 +3087 +3088 +3091 +3092 +3095 +3096 +3099 +3100 +3103 +3104 +3107 +3108 +3111 +3112 +3115 +3116 +3119 +3120 +3123 +3124 +3127 +3128 +3131 +3132 +3135 +3136 +3139 +3140 +3143 +3144 +3147 +3148 +3151 +3152 +3155 +3156 +3159 +3160 +3163 +3164 +3167 +3168 +3171 +3172 +3175 +3176 +3179 +3180 +3183 +3184 +3187 +3188 +3191 +3192 +3195 +3196 +3199 +3200 +3203 +3204 +3207 +3208 +3211 +3212 +3215 +3216 +3219 +3220 +3223 +3224 +3227 +3228 +3231 +3232 +3235 +3236 +3239 +3240 +3243 +3244 +3247 +3248 +3251 +3252 +3255 +3256 +3259 +3260 +3263 +3264 +3267 +3268 +3271 +3272 +3275 +3276 +3279 +3280 +3283 +3284 +3287 +3288 +3291 +3292 +3295 +3296 +3299 +3300 +3303 +3304 +3307 +3308 +3311 +3312 +3315 +3316 +3319 +3320 +3323 +3324 +3327 +3328 +3329 +3330 +3333 +3334 +3337 +3338 +3341 +3342 +3345 +3346 +3349 +3350 +3353 +3354 +3357 +3358 +3361 +3362 +3365 +3366 +3369 +3370 +3373 +3374 +3377 +3378 +3381 +3382 +3385 +3386 +3389 +3390 +3393 +3394 +3397 +3398 +3401 +3402 +3405 +3406 +3409 +3410 +3413 +3414 +3417 +3418 +3421 +3422 +3425 +3426 +3429 +3430 +3433 +3434 +3437 +3438 +3441 +3442 +3445 +3446 +3449 +3450 +3453 +3454 +3457 +3458 +3461 +3462 +3465 +3466 +3469 +3470 +3473 +3474 +3477 +3478 +3481 +3482 +3485 +3486 +3489 +3490 +3493 +3494 +3497 +3498 +3501 +3502 +3505 +3506 +3509 +3510 +3513 +3514 +3517 +3518 +3521 +3522 +3525 +3526 +3529 +3530 +3533 +3534 +3537 +3538 +3541 +3542 +3545 +3546 +3549 +3550 +3553 +3554 +3557 +3558 +3561 +3562 +3565 +3566 +3569 +3570 +3573 +3574 +3577 +3578 +3581 +3582 +3585 +3584 +3587 +3588 +3591 +3592 +3595 +3596 +3599 +3600 +3603 +3604 +3607 +3608 +3611 +3612 +3615 +3616 +3619 +3620 +3623 +3624 +3627 +3628 +3631 +3632 +3635 +3636 +3639 +3640 +3643 +3644 +3647 +3648 +3651 +3652 +3655 +3656 +3659 +3660 +3663 +3664 +3667 +3668 +3671 +3672 +3675 +3676 +3679 +3680 +3683 +3684 +3687 +3688 +3691 +3692 +3695 +3696 +3699 +3700 +3703 +3704 +3707 +3708 +3711 +3712 +3715 +3716 +3719 +3720 +3723 +3724 +3727 +3728 +3731 +3732 +3735 +3736 +3739 +3740 +3743 +3744 +3747 +3748 +3751 +3752 +3755 +3756 +3759 +3760 +3763 +3764 +3767 +3768 +3771 +3772 +3775 +3776 +3779 +3780 +3783 +3784 +3787 +3788 +3791 +3792 +3795 +3796 +3799 +3800 +3803 +3804 +3807 +3808 +3811 +3812 +3815 +3816 +3819 +3820 +3823 +3824 +3827 +3828 +3831 +3832 +3835 +3836 +3839 +3840 +3841 +3842 +3845 +3846 +3849 +3850 +3853 +3854 +3857 +3858 +3861 +3862 +3865 +3866 +3869 +3870 +3873 +3874 +3877 +3878 +3881 +3882 +3885 +3886 +3889 +3890 +3893 +3894 +3897 +3898 +3901 +3902 +3905 +3906 +3909 +3910 +3913 +3914 +3917 +3918 +3921 +3922 +3925 +3926 +3929 +3930 +3933 +3934 +3937 +3938 +3941 +3942 +3945 +3946 +3949 +3950 +3953 +3954 +3957 +3958 +3961 +3962 +3965 +3966 +3969 +3970 +3973 +3974 +3977 +3978 +3981 +3982 +3985 +3986 +3989 +3990 +3993 +3994 +3997 +3998 +4001 +4002 +4005 +4006 +4009 +4010 +4013 +4014 +4017 +4018 +4021 +4022 +4025 +4026 +4029 +4030 +4033 +4034 +4037 +4038 +4041 +4042 +4045 +4046 +4049 +4050 +4053 +4054 +4057 +4058 +4061 +4062 +4065 +4066 +4069 +4070 +4073 +4074 +4077 +4078 +4081 +4082 +4085 +4086 +4089 +4090 +4093 +4094 +4097 +4096 +4099 +4100 +4103 +4104 +4107 +4108 +4111 +4112 +4115 +4116 +4119 +4120 +4123 +4124 +4127 +4128 +4131 +4132 +4135 +4136 +4139 +4140 +4143 +4144 +4147 +4148 +4151 +4152 +4155 +4156 +4159 +4160 +4163 +4164 +4167 +4168 +4171 +4172 +4175 +4176 +4179 +4180 +4183 +4184 +4187 +4188 +4191 +4192 +4195 +4196 +4199 +4200 +4203 +4204 +4207 +4208 +4211 +4212 +4215 +4216 +4219 +4220 +4223 +4224 +4227 +4228 +4231 +4232 +4235 +4236 +4239 +4240 +4243 +4244 +4247 +4248 +4251 +4252 +4255 +4256 +4259 +4260 +4263 +4264 +4267 +4268 +4271 +4272 +4275 +4276 +4279 +4280 +4283 +4284 +4287 +4288 +4291 +4292 +4295 +4296 +4299 +4300 +4303 +4304 +4307 +4308 +4311 +4312 +4315 +4316 +4319 +4320 +4323 +4324 +4327 +4328 +4331 +4332 +4335 +4336 +4339 +4340 +4343 +4344 +4347 +4348 +4351 +4352 +4353 +4354 +4357 +4358 +4361 +4362 +4365 +4366 +4369 +4370 +4373 +4374 +4377 +4378 +4381 +4382 +4385 +4386 +4389 +4390 +4393 +4394 +4397 +4398 +4401 +4402 +4405 +4406 +4409 +4410 +4413 +4414 +4417 +4418 +4421 +4422 +4425 +4426 +4429 +4430 +4433 +4434 +4437 +4438 +4441 +4442 +4445 +4446 +4449 +4450 +4453 +4454 +4457 +4458 +4461 +4462 +4465 +4466 +4469 +4470 +4473 +4474 +4477 +4478 +4481 +4482 +4485 +4486 +4489 +4490 +4493 +4494 +4497 +4498 +4501 +4502 +4505 +4506 +4509 +4510 +4513 +4514 +4517 +4518 +4521 +4522 +4525 +4526 +4529 +4530 +4533 +4534 +4537 +4538 +4541 +4542 +4545 +4546 +4549 +4550 +4553 +4554 +4557 +4558 +4561 +4562 +4565 +4566 +4569 +4570 +4573 +4574 +4577 +4578 +4581 +4582 +4585 +4586 +4589 +4590 +4593 +4594 +4597 +4598 +4601 +4602 +4605 +4606 +4609 +4608 +4611 +4612 +4615 +4616 +4619 +4620 +4623 +4624 +4627 +4628 +4631 +4632 +4635 +4636 +4639 +4640 +4643 +4644 +4647 +4648 +4651 +4652 +4655 +4656 +4659 +4660 +4663 +4664 +4667 +4668 +4671 +4672 +4675 +4676 +4679 +4680 +4683 +4684 +4687 +4688 +4691 +4692 +4695 +4696 +4699 +4700 +4703 +4704 +4707 +4708 +4711 +4712 +4715 +4716 +4719 +4720 +4723 +4724 +4727 +4728 +4731 +4732 +4735 +4736 +4739 +4740 +4743 +4744 +4747 +4748 +4751 +4752 +4755 +4756 +4759 +4760 +4763 +4764 +4767 +4768 +4771 +4772 +4775 +4776 +4779 +4780 +4783 +4784 +4787 +4788 +4791 +4792 +4795 +4796 +4799 +4800 +4803 +4804 +4807 +4808 +4811 +4812 +4815 +4816 +4819 +4820 +4823 +4824 +4827 +4828 +4831 +4832 +4835 +4836 +4839 +4840 +4843 +4844 +4847 +4848 +4851 +4852 +4855 +4856 +4859 +4860 +4863 +4864 +4865 +4866 +4869 +4870 +4873 +4874 +4877 +4878 +4881 +4882 +4885 +4886 +4889 +4890 +4893 +4894 +4897 +4898 +4901 +4902 +4905 +4906 +4909 +4910 +4913 +4914 +4917 +4918 +4921 +4922 +4925 +4926 +4929 +4930 +4933 +4934 +4937 +4938 +4941 +4942 +4945 +4946 +4949 +4950 +4953 +4954 +4957 +4958 +4961 +4962 +4965 +4966 +4969 +4970 +4973 +4974 +4977 +4978 +4981 +4982 +4985 +4986 +4989 +4990 +4993 +4994 +4997 +4998 +5001 +5002 +5005 +5006 +5009 +5010 +5013 +5014 +5017 +5018 +5021 +5022 +5025 +5026 +5029 +5030 +5033 +5034 +5037 +5038 +5041 +5042 +5045 +5046 +5049 +5050 +5053 +5054 +5057 +5058 +5061 +5062 +5065 +5066 +5069 +5070 +5073 +5074 +5077 +5078 +5081 +5082 +5085 +5086 +5089 +5090 +5093 +5094 +5097 +5098 +5101 +5102 +5105 +5106 +5109 +5110 +5113 +5114 +5117 +5118 +5121 +5120 +5123 +5124 +5127 +5128 +5131 +5132 +5135 +5136 +5139 +5140 +5143 +5144 +5147 +5148 +5151 +5152 +5155 +5156 +5159 +5160 +5163 +5164 +5167 +5168 +5171 +5172 +5175 +5176 +5179 +5180 +5183 +5184 +5187 +5188 +5191 +5192 +5195 +5196 +5199 +5200 +5203 +5204 +5207 +5208 +5211 +5212 +5215 +5216 +5219 +5220 +5223 +5224 +5227 +5228 +5231 +5232 +5235 +5236 +5239 +5240 +5243 +5244 +5247 +5248 +5251 +5252 +5255 +5256 +5259 +5260 +5263 +5264 +5267 +5268 +5271 +5272 +5275 +5276 +5279 +5280 +5283 +5284 +5287 +5288 +5291 +5292 +5295 +5296 +5299 +5300 +5303 +5304 +5307 +5308 +5311 +5312 +5315 +5316 +5319 +5320 +5323 +5324 +5327 +5328 +5331 +5332 +5335 +5336 +5339 +5340 +5343 +5344 +5347 +5348 +5351 +5352 +5355 +5356 +5359 +5360 +5363 +5364 +5367 +5368 +5371 +5372 +5375 +5376 +5377 +5378 +5381 +5382 +5385 +5386 +5389 +5390 +5393 +5394 +5397 +5398 +5401 +5402 +5405 +5406 +5409 +5410 +5413 +5414 +5417 +5418 +5421 +5422 +5425 +5426 +5429 +5430 +5433 +5434 +5437 +5438 +5441 +5442 +5445 +5446 +5449 +5450 +5453 +5454 +5457 +5458 +5461 +5462 +5465 +5466 +5469 +5470 +5473 +5474 +5477 +5478 +5481 +5482 +5485 +5486 +5489 +5490 +5493 +5494 +5497 +5498 +5501 +5502 +5505 +5506 +5509 +5510 +5513 +5514 +5517 +5518 +5521 +5522 +5525 +5526 +5529 +5530 +5533 +5534 +5537 +5538 +5541 +5542 +5545 +5546 +5549 +5550 +5553 +5554 +5557 +5558 +5561 +5562 +5565 +5566 +5569 +5570 +5573 +5574 +5577 +5578 +5581 +5582 +5585 +5586 +5589 +5590 +5593 +5594 +5597 +5598 +5601 +5602 +5605 +5606 +5609 +5610 +5613 +5614 +5617 +5618 +5621 +5622 +5625 +5626 +5629 +5630 +5633 +5632 +5635 +5636 +5639 +5640 +5643 +5644 +5647 +5648 +5651 +5652 +5655 +5656 +5659 +5660 +5663 +5664 +5667 +5668 +5671 +5672 +5675 +5676 +5679 +5680 +5683 +5684 +5687 +5688 +5691 +5692 +5695 +5696 +5699 +5700 +5703 +5704 +5707 +5708 +5711 +5712 +5715 +5716 +5719 +5720 +5723 +5724 +5727 +5728 +5731 +5732 +5735 +5736 +5739 +5740 +5743 +5744 +5747 +5748 +5751 +5752 +5755 +5756 +5759 +5760 +5763 +5764 +5767 +5768 +5771 +5772 +5775 +5776 +5779 +5780 +5783 +5784 +5787 +5788 +5791 +5792 +5795 +5796 +5799 +5800 +5803 +5804 +5807 +5808 +5811 +5812 +5815 +5816 +5819 +5820 +5823 +5824 +5827 +5828 +5831 +5832 +5835 +5836 +5839 +5840 +5843 +5844 +5847 +5848 +5851 +5852 +5855 +5856 +5859 +5860 +5863 +5864 +5867 +5868 +5871 +5872 +5875 +5876 +5879 +5880 +5883 +5884 +5887 +5888 +5889 +5890 +5893 +5894 +5897 +5898 +5901 +5902 +5905 +5906 +5909 +5910 +5913 +5914 +5917 +5918 +5921 +5922 +5925 +5926 +5929 +5930 +5933 +5934 +5937 +5938 +5941 +5942 +5945 +5946 +5949 +5950 +5953 +5954 +5957 +5958 +5961 +5962 +5965 +5966 +5969 +5970 +5973 +5974 +5977 +5978 +5981 +5982 +5985 +5986 +5989 +5990 +5993 +5994 +5997 +5998 +6001 +6002 +6005 +6006 +6009 +6010 +6013 +6014 +6017 +6018 +6021 +6022 +6025 +6026 +6029 +6030 +6033 +6034 +6037 +6038 +6041 +6042 +6045 +6046 +6049 +6050 +6053 +6054 +6057 +6058 +6061 +6062 +6065 +6066 +6069 +6070 +6073 +6074 +6077 +6078 +6081 +6082 +6085 +6086 +6089 +6090 +6093 +6094 +6097 +6098 +6101 +6102 +6105 +6106 +6109 +6110 +6113 +6114 +6117 +6118 +6121 +6122 +6125 +6126 +6129 +6130 +6133 +6134 +6137 +6138 +6141 +6142 +6145 +6144 +6147 +6148 +6151 +6152 +6155 +6156 +6159 +6160 +6163 +6164 +6167 +6168 +6171 +6172 +6175 +6176 +6179 +6180 +6183 +6184 +6187 +6188 +6191 +6192 +6195 +6196 +6199 +6200 +6203 +6204 +6207 +6208 +6211 +6212 +6215 +6216 +6219 +6220 +6223 +6224 +6227 +6228 +6231 +6232 +6235 +6236 +6239 +6240 +6243 +6244 +6247 +6248 +6251 +6252 +6255 +6256 +6259 +6260 +6263 +6264 +6267 +6268 +6271 +6272 +6275 +6276 +6279 +6280 +6283 +6284 +6287 +6288 +6291 +6292 +6295 +6296 +6299 +6300 +6303 +6304 +6307 +6308 +6311 +6312 +6315 +6316 +6319 +6320 +6323 +6324 +6327 +6328 +6331 +6332 +6335 +6336 +6339 +6340 +6343 +6344 +6347 +6348 +6351 +6352 +6355 +6356 +6359 +6360 +6363 +6364 +6367 +6368 +6371 +6372 +6375 +6376 +6379 +6380 +6383 +6384 +6387 +6388 +6391 +6392 +6395 +6396 +6399 +6400 +6401 +6402 +6405 +6406 +6409 +6410 +6413 +6414 +6417 +6418 +6421 +6422 +6425 +6426 +6429 +6430 +6433 +6434 +6437 +6438 +6441 +6442 +6445 +6446 +6449 +6450 +6453 +6454 +6457 +6458 +6461 +6462 +6465 +6466 +6469 +6470 +6473 +6474 +6477 +6478 +6481 +6482 +6485 +6486 +6489 +6490 +6493 +6494 +6497 +6498 +6501 +6502 +6505 +6506 +6509 +6510 +6513 +6514 +6517 +6518 +6521 +6522 +6525 +6526 +6529 +6530 +6533 +6534 +6537 +6538 +6541 +6542 +6545 +6546 +6549 +6550 +6553 +6554 +6557 +6558 +6561 +6562 +6565 +6566 +6569 +6570 +6573 +6574 +6577 +6578 +6581 +6582 +6585 +6586 +6589 +6590 +6593 +6594 +6597 +6598 +6601 +6602 +6605 +6606 +6609 +6610 +6613 +6614 +6617 +6618 +6621 +6622 +6625 +6626 +6629 +6630 +6633 +6634 +6637 +6638 +6641 +6642 +6645 +6646 +6649 +6650 +6653 +6654 +6657 +6656 +6659 +6660 +6663 +6664 +6667 +6668 +6671 +6672 +6675 +6676 +6679 +6680 +6683 +6684 +6687 +6688 +6691 +6692 +6695 +6696 +6699 +6700 +6703 +6704 +6707 +6708 +6711 +6712 +6715 +6716 +6719 +6720 +6723 +6724 +6727 +6728 +6731 +6732 +6735 +6736 +6739 +6740 +6743 +6744 +6747 +6748 +6751 +6752 +6755 +6756 +6759 +6760 +6763 +6764 +6767 +6768 +6771 +6772 +6775 +6776 +6779 +6780 +6783 +6784 +6787 +6788 +6791 +6792 +6795 +6796 +6799 +6800 +6803 +6804 +6807 +6808 +6811 +6812 +6815 +6816 +6819 +6820 +6823 +6824 +6827 +6828 +6831 +6832 +6835 +6836 +6839 +6840 +6843 +6844 +6847 +6848 +6851 +6852 +6855 +6856 +6859 +6860 +6863 +6864 +6867 +6868 +6871 +6872 +6875 +6876 +6879 +6880 +6883 +6884 +6887 +6888 +6891 +6892 +6895 +6896 +6899 +6900 +6903 +6904 +6907 +6908 +6911 +6912 +6913 +6914 +6917 +6918 +6921 +6922 +6925 +6926 +6929 +6930 +6933 +6934 +6937 +6938 +6941 +6942 +6945 +6946 +6949 +6950 +6953 +6954 +6957 +6958 +6961 +6962 +6965 +6966 +6969 +6970 +6973 +6974 +6977 +6978 +6981 +6982 +6985 +6986 +6989 +6990 +6993 +6994 +6997 +6998 +7001 +7002 +7005 +7006 +7009 +7010 +7013 +7014 +7017 +7018 +7021 +7022 +7025 +7026 +7029 +7030 +7033 +7034 +7037 +7038 +7041 +7042 +7045 +7046 +7049 +7050 +7053 +7054 +7057 +7058 +7061 +7062 +7065 +7066 +7069 +7070 +7073 +7074 +7077 +7078 +7081 +7082 +7085 +7086 +7089 +7090 +7093 +7094 +7097 +7098 +7101 +7102 +7105 +7106 +7109 +7110 +7113 +7114 +7117 +7118 +7121 +7122 +7125 +7126 +7129 +7130 +7133 +7134 +7137 +7138 +7141 +7142 +7145 +7146 +7149 +7150 +7153 +7154 +7157 +7158 +7161 +7162 +7165 +7166 +7169 +7168 +7171 +7172 +7175 +7176 +7179 +7180 +7183 +7184 +7187 +7188 +7191 +7192 +7195 +7196 +7199 +7200 +7203 +7204 +7207 +7208 +7211 +7212 +7215 +7216 +7219 +7220 +7223 +7224 +7227 +7228 +7231 +7232 +7235 +7236 +7239 +7240 +7243 +7244 +7247 +7248 +7251 +7252 +7255 +7256 +7259 +7260 +7263 +7264 +7267 +7268 +7271 +7272 +7275 +7276 +7279 +7280 +7283 +7284 +7287 +7288 +7291 +7292 +7295 +7296 +7299 +7300 +7303 +7304 +7307 +7308 +7311 +7312 +7315 +7316 +7319 +7320 +7323 +7324 +7327 +7328 +7331 +7332 +7335 +7336 +7339 +7340 +7343 +7344 +7347 +7348 +7351 +7352 +7355 +7356 +7359 +7360 +7363 +7364 +7367 +7368 +7371 +7372 +7375 +7376 +7379 +7380 +7383 +7384 +7387 +7388 +7391 +7392 +7395 +7396 +7399 +7400 +7403 +7404 +7407 +7408 +7411 +7412 +7415 +7416 +7419 +7420 +7423 +7424 +7425 +7426 +7429 +7430 +7433 +7434 +7437 +7438 +7441 +7442 +7445 +7446 +7449 +7450 +7453 +7454 +7457 +7458 +7461 +7462 +7465 +7466 +7469 +7470 +7473 +7474 +7477 +7478 +7481 +7482 +7485 +7486 +7489 +7490 +7493 +7494 +7497 +7498 +7501 +7502 +7505 +7506 +7509 +7510 +7513 +7514 +7517 +7518 +7521 +7522 +7525 +7526 +7529 +7530 +7533 +7534 +7537 +7538 +7541 +7542 +7545 +7546 +7549 +7550 +7553 +7554 +7557 +7558 +7561 +7562 +7565 +7566 +7569 +7570 +7573 +7574 +7577 +7578 +7581 +7582 +7585 +7586 +7589 +7590 +7593 +7594 +7597 +7598 +7601 +7602 +7605 +7606 +7609 +7610 +7613 +7614 +7617 +7618 +7621 +7622 +7625 +7626 +7629 +7630 +7633 +7634 +7637 +7638 +7641 +7642 +7645 +7646 +7649 +7650 +7653 +7654 +7657 +7658 +7661 +7662 +7665 +7666 +7669 +7670 +7673 +7674 +7677 +7678 +7681 +7680 +7683 +7684 +7687 +7688 +7691 +7692 +7695 +7696 +7699 +7700 +7703 +7704 +7707 +7708 +7711 +7712 +7715 +7716 +7719 +7720 +7723 +7724 +7727 +7728 +7731 +7732 +7735 +7736 +7739 +7740 +7743 +7744 +7747 +7748 +7751 +7752 +7755 +7756 +7759 +7760 +7763 +7764 +7767 +7768 +7771 +7772 +7775 +7776 +7779 +7780 +7783 +7784 +7787 +7788 +7791 +7792 +7795 +7796 +7799 +7800 +7803 +7804 +7807 +7808 +7811 +7812 +7815 +7816 +7819 +7820 +7823 +7824 +7827 +7828 +7831 +7832 +7835 +7836 +7839 +7840 +7843 +7844 +7847 +7848 +7851 +7852 +7855 +7856 +7859 +7860 +7863 +7864 +7867 +7868 +7871 +7872 +7875 +7876 +7879 +7880 +7883 +7884 +7887 +7888 +7891 +7892 +7895 +7896 +7899 +7900 +7903 +7904 +7907 +7908 +7911 +7912 +7915 +7916 +7919 +7920 +7923 +7924 +7927 +7928 +7931 +7932 +7935 +7936 +7937 +7938 +7941 +7942 +7945 +7946 +7949 +7950 +7953 +7954 +7957 +7958 +7961 +7962 +7965 +7966 +7969 +7970 +7973 +7974 +7977 +7978 +7981 +7982 +7985 +7986 +7989 +7990 +7993 +7994 +7997 +7998 +8001 +8002 +8005 +8006 +8009 +8010 +8013 +8014 +8017 +8018 +8021 +8022 +8025 +8026 +8029 +8030 +8033 +8034 +8037 +8038 +8041 +8042 +8045 +8046 +8049 +8050 +8053 +8054 +8057 +8058 +8061 +8062 +8065 +8066 +8069 +8070 +8073 +8074 +8077 +8078 +8081 +8082 +8085 +8086 +8089 +8090 +8093 +8094 +8097 +8098 +8101 +8102 +8105 +8106 +8109 +8110 +8113 +8114 +8117 +8118 +8121 +8122 +8125 +8126 +8129 +8130 +8133 +8134 +8137 +8138 +8141 +8142 +8145 +8146 +8149 +8150 +8153 +8154 +8157 +8158 +8161 +8162 +8165 +8166 +8169 +8170 +8173 +8174 +8177 +8178 +8181 +8182 +8185 +8186 +8189 +8190 +8193 +8192 +8195 +8196 +8199 +8200 +8203 +8204 +8207 +8208 +8211 +8212 +8215 +8216 +8219 +8220 +8223 +8224 +8227 +8228 +8231 +8232 +8235 +8236 +8239 +8240 +8243 +8244 +8247 +8248 +8251 +8252 +8255 +8256 +8259 +8260 +8263 +8264 +8267 +8268 +8271 +8272 +8275 +8276 +8279 +8280 +8283 +8284 +8287 +8288 +8291 +8292 +8295 +8296 +8299 +8300 +8303 +8304 +8307 +8308 +8311 +8312 +8315 +8316 +8319 +8320 +8323 +8324 +8327 +8328 +8331 +8332 +8335 +8336 +8339 +8340 +8343 +8344 +8347 +8348 +8351 +8352 +8355 +8356 +8359 +8360 +8363 +8364 +8367 +8368 +8371 +8372 +8375 +8376 +8379 +8380 +8383 +8384 +8387 +8388 +8391 +8392 +8395 +8396 +8399 +8400 +8403 +8404 +8407 +8408 +8411 +8412 +8415 +8416 +8419 +8420 +8423 +8424 +8427 +8428 +8431 +8432 +8435 +8436 +8439 +8440 +8443 +8444 +8447 +8448 +8449 +8450 +8453 +8454 +8457 +8458 +8461 +8462 +8465 +8466 +8469 +8470 +8473 +8474 +8477 +8478 +8481 +8482 +8485 +8486 +8489 +8490 +8493 +8494 +8497 +8498 +8501 +8502 +8505 +8506 +8509 +8510 +8513 +8514 +8517 +8518 +8521 +8522 +8525 +8526 +8529 +8530 +8533 +8534 +8537 +8538 +8541 +8542 +8545 +8546 +8549 +8550 +8553 +8554 +8557 +8558 +8561 +8562 +8565 +8566 +8569 +8570 +8573 +8574 +8577 +8578 +8581 +8582 +8585 +8586 +8589 +8590 +8593 +8594 +8597 +8598 +8601 +8602 +8605 +8606 +8609 +8610 +8613 +8614 +8617 +8618 +8621 +8622 +8625 +8626 +8629 +8630 +8633 +8634 +8637 +8638 +8641 +8642 +8645 +8646 +8649 +8650 +8653 +8654 +8657 +8658 +8661 +8662 +8665 +8666 +8669 +8670 +8673 +8674 +8677 +8678 +8681 +8682 +8685 +8686 +8689 +8690 +8693 +8694 +8697 +8698 +8701 +8702 +8705 +8704 +8707 +8708 +8711 +8712 +8715 +8716 +8719 +8720 +8723 +8724 +8727 +8728 +8731 +8732 +8735 +8736 +8739 +8740 +8743 +8744 +8747 +8748 +8751 +8752 +8755 +8756 +8759 +8760 +8763 +8764 +8767 +8768 +8771 +8772 +8775 +8776 +8779 +8780 +8783 +8784 +8787 +8788 +8791 +8792 +8795 +8796 +8799 +8800 +8803 +8804 +8807 +8808 +8811 +8812 +8815 +8816 +8819 +8820 +8823 +8824 +8827 +8828 +8831 +8832 +8835 +8836 +8839 +8840 +8843 +8844 +8847 +8848 +8851 +8852 +8855 +8856 +8859 +8860 +8863 +8864 +8867 +8868 +8871 +8872 +8875 +8876 +8879 +8880 +8883 +8884 +8887 +8888 +8891 +8892 +8895 +8896 +8899 +8900 +8903 +8904 +8907 +8908 +8911 +8912 +8915 +8916 +8919 +8920 +8923 +8924 +8927 +8928 +8931 +8932 +8935 +8936 +8939 +8940 +8943 +8944 +8947 +8948 +8951 +8952 +8955 +8956 +8959 +8960 +8961 +8962 +8965 +8966 +8969 +8970 +8973 +8974 +8977 +8978 +8981 +8982 +8985 +8986 +8989 +8990 +8993 +8994 +8997 +8998 +9001 +9002 +9005 +9006 +9009 +9010 +9013 +9014 +9017 +9018 +9021 +9022 +9025 +9026 +9029 +9030 +9033 +9034 +9037 +9038 +9041 +9042 +9045 +9046 +9049 +9050 +9053 +9054 +9057 +9058 +9061 +9062 +9065 +9066 +9069 +9070 +9073 +9074 +9077 +9078 +9081 +9082 +9085 +9086 +9089 +9090 +9093 +9094 +9097 +9098 +9101 +9102 +9105 +9106 +9109 +9110 +9113 +9114 +9117 +9118 +9121 +9122 +9125 +9126 +9129 +9130 +9133 +9134 +9137 +9138 +9141 +9142 +9145 +9146 +9149 +9150 +9153 +9154 +9157 +9158 +9161 +9162 +9165 +9166 +9169 +9170 +9173 +9174 +9177 +9178 +9181 +9182 +9185 +9186 +9189 +9190 +9193 +9194 +9197 +9198 +9201 +9202 +9205 +9206 +9209 +9210 +9213 +9214 +9217 +9216 +9219 +9220 +9223 +9224 +9227 +9228 +9231 +9232 +9235 +9236 +9239 +9240 +9243 +9244 +9247 +9248 +9251 +9252 +9255 +9256 +9259 +9260 +9263 +9264 +9267 +9268 +9271 +9272 +9275 +9276 +9279 +9280 +9283 +9284 +9287 +9288 +9291 +9292 +9295 +9296 +9299 +9300 +9303 +9304 +9307 +9308 +9311 +9312 +9315 +9316 +9319 +9320 +9323 +9324 +9327 +9328 +9331 +9332 +9335 +9336 +9339 +9340 +9343 +9344 +9347 +9348 +9351 +9352 +9355 +9356 +9359 +9360 +9363 +9364 +9367 +9368 +9371 +9372 +9375 +9376 +9379 +9380 +9383 +9384 +9387 +9388 +9391 +9392 +9395 +9396 +9399 +9400 +9403 +9404 +9407 +9408 +9411 +9412 +9415 +9416 +9419 +9420 +9423 +9424 +9427 +9428 +9431 +9432 +9435 +9436 +9439 +9440 +9443 +9444 +9447 +9448 +9451 +9452 +9455 +9456 +9459 +9460 +9463 +9464 +9467 +9468 +9471 +9472 +9473 +9474 +9477 +9478 +9481 +9482 +9485 +9486 +9489 +9490 +9493 +9494 +9497 +9498 +9501 +9502 +9505 +9506 +9509 +9510 +9513 +9514 +9517 +9518 +9521 +9522 +9525 +9526 +9529 +9530 +9533 +9534 +9537 +9538 +9541 +9542 +9545 +9546 +9549 +9550 +9553 +9554 +9557 +9558 +9561 +9562 +9565 +9566 +9569 +9570 +9573 +9574 +9577 +9578 +9581 +9582 +9585 +9586 +9589 +9590 +9593 +9594 +9597 +9598 +9601 +9602 +9605 +9606 +9609 +9610 +9613 +9614 +9617 +9618 +9621 +9622 +9625 +9626 +9629 +9630 +9633 +9634 +9637 +9638 +9641 +9642 +9645 +9646 +9649 +9650 +9653 +9654 +9657 +9658 +9661 +9662 +9665 +9666 +9669 +9670 +9673 +9674 +9677 +9678 +9681 +9682 +9685 +9686 +9689 +9690 +9693 +9694 +9697 +9698 +9701 +9702 +9705 +9706 +9709 +9710 +9713 +9714 +9717 +9718 +9721 +9722 +9725 +9726 +9729 +9728 +9731 +9732 +9735 +9736 +9739 +9740 +9743 +9744 +9747 +9748 +9751 +9752 +9755 +9756 +9759 +9760 +9763 +9764 +9767 +9768 +9771 +9772 +9775 +9776 +9779 +9780 +9783 +9784 +9787 +9788 +9791 +9792 +9795 +9796 +9799 +9800 +9803 +9804 +9807 +9808 +9811 +9812 +9815 +9816 +9819 +9820 +9823 +9824 +9827 +9828 +9831 +9832 +9835 +9836 +9839 +9840 +9843 +9844 +9847 +9848 +9851 +9852 +9855 +9856 +9859 +9860 +9863 +9864 +9867 +9868 +9871 +9872 +9875 +9876 +9879 +9880 +9883 +9884 +9887 +9888 +9891 +9892 +9895 +9896 +9899 +9900 +9903 +9904 +9907 +9908 +9911 +9912 +9915 +9916 +9919 +9920 +9923 +9924 +9927 +9928 +9931 +9932 +9935 +9936 +9939 +9940 +9943 +9944 +9947 +9948 +9951 +9952 +9955 +9956 +9959 +9960 +9963 +9964 +9967 +9968 +9971 +9972 +9975 +9976 +9979 +9980 +9983 +9984 +9985 +9986 +9989 +9990 +9993 +9994 +9997 +9998 +10001 +10002 +10005 +10006 +10009 +10010 +10013 +10014 +10017 +10018 +10021 +10022 +10025 +10026 +10029 +10030 +10033 +10034 +10037 +10038 +10041 +10042 +10045 +10046 +10049 +10050 +10053 +10054 +10057 +10058 +10061 +10062 +10065 +10066 +10069 +10070 +10073 +10074 +10077 +10078 +10081 +10082 +10085 +10086 +10089 +10090 +10093 +10094 +10097 +10098 +10101 +10102 +10105 +10106 +10109 +10110 +10113 +10114 +10117 +10118 +10121 +10122 +10125 +10126 +10129 +10130 +10133 +10134 +10137 +10138 +10141 +10142 +10145 +10146 +10149 +10150 +10153 +10154 +10157 +10158 +10161 +10162 +10165 +10166 +10169 +10170 +10173 +10174 +10177 +10178 +10181 +10182 +10185 +10186 +10189 +10190 +10193 +10194 +10197 +10198 +10201 +10202 +10205 +10206 +10209 +10210 +10213 +10214 +10217 +10218 +10221 +10222 +10225 +10226 +10229 +10230 +10233 +10234 +10237 +10238 +10241 +10240 +10243 +10244 +10247 +10248 +10251 +10252 +10255 +10256 +10259 +10260 +10263 +10264 +10267 +10268 +10271 +10272 +10275 +10276 +10279 +10280 +10283 +10284 +10287 +10288 +10291 +10292 +10295 +10296 +10299 +10300 +10303 +10304 +10307 +10308 +10311 +10312 +10315 +10316 +10319 +10320 +10323 +10324 +10327 +10328 +10331 +10332 +10335 +10336 +10339 +10340 +10343 +10344 +10347 +10348 +10351 +10352 +10355 +10356 +10359 +10360 +10363 +10364 +10367 +10368 +10371 +10372 +10375 +10376 +10379 +10380 +10383 +10384 +10387 +10388 +10391 +10392 +10395 +10396 +10399 +10400 +10403 +10404 +10407 +10408 +10411 +10412 +10415 +10416 +10419 +10420 +10423 +10424 +10427 +10428 +10431 +10432 +10435 +10436 +10439 +10440 +10443 +10444 +10447 +10448 +10451 +10452 +10455 +10456 +10459 +10460 +10463 +10464 +10467 +10468 +10471 +10472 +10475 +10476 +10479 +10480 +10483 +10484 +10487 +10488 +10491 +10492 +10495 +10496 +10497 +10498 +10501 +10502 +10505 +10506 +10509 +10510 +10513 +10514 +10517 +10518 +10521 +10522 +10525 +10526 +10529 +10530 +10533 +10534 +10537 +10538 +10541 +10542 +10545 +10546 +10549 +10550 +10553 +10554 +10557 +10558 +10561 +10562 +10565 +10566 +10569 +10570 +10573 +10574 +10577 +10578 +10581 +10582 +10585 +10586 +10589 +10590 +10593 +10594 +10597 +10598 +10601 +10602 +10605 +10606 +10609 +10610 +10613 +10614 +10617 +10618 +10621 +10622 +10625 +10626 +10629 +10630 +10633 +10634 +10637 +10638 +10641 +10642 +10645 +10646 +10649 +10650 +10653 +10654 +10657 +10658 +10661 +10662 +10665 +10666 +10669 +10670 +10673 +10674 +10677 +10678 +10681 +10682 +10685 +10686 +10689 +10690 +10693 +10694 +10697 +10698 +10701 +10702 +10705 +10706 +10709 +10710 +10713 +10714 +10717 +10718 +10721 +10722 +10725 +10726 +10729 +10730 +10733 +10734 +10737 +10738 +10741 +10742 +10745 +10746 +10749 +10750 +10753 +10752 +10755 +10756 +10759 +10760 +10763 +10764 +10767 +10768 +10771 +10772 +10775 +10776 +10779 +10780 +10783 +10784 +10787 +10788 +10791 +10792 +10795 +10796 +10799 +10800 +10803 +10804 +10807 +10808 +10811 +10812 +10815 +10816 +10819 +10820 +10823 +10824 +10827 +10828 +10831 +10832 +10835 +10836 +10839 +10840 +10843 +10844 +10847 +10848 +10851 +10852 +10855 +10856 +10859 +10860 +10863 +10864 +10867 +10868 +10871 +10872 +10875 +10876 +10879 +10880 +10883 +10884 +10887 +10888 +10891 +10892 +10895 +10896 +10899 +10900 +10903 +10904 +10907 +10908 +10911 +10912 +10915 +10916 +10919 +10920 +10923 +10924 +10927 +10928 +10931 +10932 +10935 +10936 +10939 +10940 +10943 +10944 +10947 +10948 +10951 +10952 +10955 +10956 +10959 +10960 +10963 +10964 +10967 +10968 +10971 +10972 +10975 +10976 +10979 +10980 +10983 +10984 +10987 +10988 +10991 +10992 +10995 +10996 +10999 +11000 +11003 +11004 +11007 +11008 +11009 +11010 +11013 +11014 +11017 +11018 +11021 +11022 +11025 +11026 +11029 +11030 +11033 +11034 +11037 +11038 +11041 +11042 +11045 +11046 +11049 +11050 +11053 +11054 +11057 +11058 +11061 +11062 +11065 +11066 +11069 +11070 +11073 +11074 +11077 +11078 +11081 +11082 +11085 +11086 +11089 +11090 +11093 +11094 +11097 +11098 +11101 +11102 +11105 +11106 +11109 +11110 +11113 +11114 +11117 +11118 +11121 +11122 +11125 +11126 +11129 +11130 +11133 +11134 +11137 +11138 +11141 +11142 +11145 +11146 +11149 +11150 +11153 +11154 +11157 +11158 +11161 +11162 +11165 +11166 +11169 +11170 +11173 +11174 +11177 +11178 +11181 +11182 +11185 +11186 +11189 +11190 +11193 +11194 +11197 +11198 +11201 +11202 +11205 +11206 +11209 +11210 +11213 +11214 +11217 +11218 +11221 +11222 +11225 +11226 +11229 +11230 +11233 +11234 +11237 +11238 +11241 +11242 +11245 +11246 +11249 +11250 +11253 +11254 +11257 +11258 +11261 +11262 +11265 +11264 +11267 +11268 +11271 +11272 +11275 +11276 +11279 +11280 +11283 +11284 +11287 +11288 +11291 +11292 +11295 +11296 +11299 +11300 +11303 +11304 +11307 +11308 +11311 +11312 +11315 +11316 +11319 +11320 +11323 +11324 +11327 +11328 +11331 +11332 +11335 +11336 +11339 +11340 +11343 +11344 +11347 +11348 +11351 +11352 +11355 +11356 +11359 +11360 +11363 +11364 +11367 +11368 +11371 +11372 +11375 +11376 +11379 +11380 +11383 +11384 +11387 +11388 +11391 +11392 +11395 +11396 +11399 +11400 +11403 +11404 +11407 +11408 +11411 +11412 +11415 +11416 +11419 +11420 +11423 +11424 +11427 +11428 +11431 +11432 +11435 +11436 +11439 +11440 +11443 +11444 +11447 +11448 +11451 +11452 +11455 +11456 +11459 +11460 +11463 +11464 +11467 +11468 +11471 +11472 +11475 +11476 +11479 +11480 +11483 +11484 +11487 +11488 +11491 +11492 +11495 +11496 +11499 +11500 +11503 +11504 +11507 +11508 +11511 +11512 +11515 +11516 +11519 +11520 +11521 +11522 +11525 +11526 +11529 +11530 +11533 +11534 +11537 +11538 +11541 +11542 +11545 +11546 +11549 +11550 +11553 +11554 +11557 +11558 +11561 +11562 +11565 +11566 +11569 +11570 +11573 +11574 +11577 +11578 +11581 +11582 +11585 +11586 +11589 +11590 +11593 +11594 +11597 +11598 +11601 +11602 +11605 +11606 +11609 +11610 +11613 +11614 +11617 +11618 +11621 +11622 +11625 +11626 +11629 +11630 +11633 +11634 +11637 +11638 +11641 +11642 +11645 +11646 +11649 +11650 +11653 +11654 +11657 +11658 +11661 +11662 +11665 +11666 +11669 +11670 +11673 +11674 +11677 +11678 +11681 +11682 +11685 +11686 +11689 +11690 +11693 +11694 +11697 +11698 +11701 +11702 +11705 +11706 +11709 +11710 +11713 +11714 +11717 +11718 +11721 +11722 +11725 +11726 +11729 +11730 +11733 +11734 +11737 +11738 +11741 +11742 +11745 +11746 +11749 +11750 +11753 +11754 +11757 +11758 +11761 +11762 +11765 +11766 +11769 +11770 +11773 +11774 +11777 +11776 +11779 +11780 +11783 +11784 +11787 +11788 +11791 +11792 +11795 +11796 +11799 +11800 +11803 +11804 +11807 +11808 +11811 +11812 +11815 +11816 +11819 +11820 +11823 +11824 +11827 +11828 +11831 +11832 +11835 +11836 +11839 +11840 +11843 +11844 +11847 +11848 +11851 +11852 +11855 +11856 +11859 +11860 +11863 +11864 +11867 +11868 +11871 +11872 +11875 +11876 +11879 +11880 +11883 +11884 +11887 +11888 +11891 +11892 +11895 +11896 +11899 +11900 +11903 +11904 +11907 +11908 +11911 +11912 +11915 +11916 +11919 +11920 +11923 +11924 +11927 +11928 +11931 +11932 +11935 +11936 +11939 +11940 +11943 +11944 +11947 +11948 +11951 +11952 +11955 +11956 +11959 +11960 +11963 +11964 +11967 +11968 +11971 +11972 +11975 +11976 +11979 +11980 +11983 +11985 +11986 +11989 +11990 +11993 +11994 +11997 +11998 +12001 +12002 +12005 +12006 +12009 +12010 +12013 +12014 +12017 +12018 +12021 +12022 +12025 +12026 +12029 +12030 +12031 +12032 +12035 +12036 +12039 +12040 +12043 +12044 +12047 +12048 +12051 +12052 +12055 +12056 +12059 +12060 +12063 +12064 +12067 +12068 +12071 +12072 +12075 +12076 +12079 +12080 +12083 +12084 +12087 +12088 +12091 +12092 +12095 +12096 +12099 +12100 +12103 +12104 +12107 +12108 +12111 +12112 +12115 +12116 +12119 +12120 +12123 +12124 +12127 +12128 +12131 +12132 +12135 +12136 +12139 +12140 +12143 +12144 +12147 +12148 +12151 +12152 +12155 +12156 +12159 +12160 +12163 +12164 +12167 +12168 +12171 +12172 +12175 +12176 +12179 +12180 +12183 +12184 +12187 +12188 +12191 +12192 +12195 +12196 +12199 +12200 +12203 +12204 +12207 +12208 +12211 +12212 +12215 +12216 +12219 +12220 +12223 +12224 +12227 +12228 +12231 +12232 +12235 +12237 +12238 +12241 +12242 +12245 +12246 +12249 +12250 +12253 +12254 +12257 +12258 +12261 +12262 +12265 +12266 +12269 +12270 +12273 +12274 +12277 +12278 +12281 +12280 +12283 +12284 +12287 +12288 +12291 +12292 +12295 +12296 +12299 +12300 +12303 +12304 +12307 +12308 +12311 +12312 +12315 +12316 +12319 +12320 +12323 +12324 +12327 +12328 +12331 +12332 +12335 +12336 +12339 +12340 +12343 +12344 +12347 +12348 +12351 +12352 +12355 +12356 +12359 +12360 +12363 +12364 +12367 +12368 +12371 +12372 +12375 +12376 +12379 +12380 +12383 +12384 +12387 +12388 +12391 +12392 +12395 +12396 +12399 +12400 +12403 +12404 +12407 +12408 +12411 +12412 +12415 +12416 +12419 +12420 +12423 +12424 +12427 +12428 +12431 +12432 +12435 +12436 +12439 +12440 +12443 +12444 +12447 +12448 +12451 +12452 +12455 +12456 +12459 +12460 +12463 +12464 +12467 +12468 +12471 +12472 +12475 +12476 +12479 +12480 +12484 +12483 +12486 +12487 +12490 +12491 +12494 +12495 +12498 +12499 +12502 +12503 +12506 +12507 +12510 +12511 +12514 +12515 +12518 +12519 +12522 +12523 +12524 +12525 +12528 +12529 +12532 +12533 +12536 +12537 +12540 +12541 +12544 +12545 +12548 +12549 +12552 +12553 +12556 +12557 +12560 +12561 +12564 +12565 +12568 +12569 +12572 +12573 +12576 +12577 +12580 +12581 +12584 +12585 +12588 +12589 +12592 +12593 +12596 +12597 +12600 +12601 +12604 +12605 +12608 +12609 +12612 +12613 +12616 +12617 +12620 +12621 +12624 +12625 +12628 +12629 +12632 +12633 +12636 +12637 +12640 +12641 +12644 +12645 +12648 +12649 +12652 +12653 +12656 +12657 +12660 +12661 +12664 +12665 +12668 +12669 +12672 +12673 +12676 +12677 +12680 +12681 +12684 +12685 +12688 +12689 +12692 +12693 +12696 +12697 +12700 +12701 +12704 +12705 +12708 +12709 +12712 +12713 +12716 +12717 +12720 +12721 +12724 +12725 +12726 +12729 +12730 +12733 +12734 +12737 +12738 +12741 +12742 +12745 +12746 +12749 +12750 +12753 +12754 +12757 +12758 +12761 +12762 +12765 +12764 +12767 +12768 +12771 +12772 +12775 +12776 +12779 +12780 +12783 +12784 +12787 +12788 +12791 +12792 +12795 +12796 +12799 +12800 +12803 +12804 +12807 +12808 +12811 +12812 +12815 +12816 +12819 +12820 +12823 +12824 +12827 +12828 +12831 +12832 +12835 +12836 +12839 +12840 +12843 +12844 +12847 +12848 +12851 +12852 +12855 +12856 +12859 +12860 +12863 +12864 +12867 +12868 +12871 +12872 +12875 +12876 +12879 +12880 +12883 +12884 +12887 +12888 +12891 +12892 +12895 +12896 +12899 +12900 +12903 +12904 +12907 +12908 +12911 +12912 +12915 +12916 +12919 +12920 +12923 +12924 +12927 +12928 +12931 +12932 +12935 +12936 +12939 +12940 +12943 +12944 +12947 +12948 +12951 +12952 +12955 +12956 +12959 +12960 +12963 +12965 +12964 +12967 +12968 +12971 +12972 +12975 +12976 +12979 +12980 +12983 +12984 +12987 +12988 +12991 +12992 +12995 +12996 +12999 +13000 +13003 +13004 +13005 +13006 +13009 +13010 +13013 +13014 +13017 +13018 +13021 +13022 +13025 +13026 +13029 +13030 +13033 +13034 +13037 +13038 +13041 +13042 +13045 +13046 +13049 +13050 +13053 +13054 +13057 +13058 +13061 +13062 +13065 +13066 +13069 +13070 +13073 +13074 +13077 +13078 +13081 +13082 +13085 +13086 +13089 +13090 +13093 +13094 +13097 +13098 +13101 +13102 +13105 +13106 +13109 +13110 +13113 +13114 +13117 +13118 +13121 +13122 +13125 +13126 +13129 +13130 +13133 +13134 +13137 +13138 +13141 +13142 +13145 +13146 +13149 +13150 +13153 +13154 +13157 +13158 +13161 +13162 +13165 +13166 +13169 +13170 +13173 +13174 +13177 +13178 +13181 +13182 +13185 +13186 +13189 +13190 +13193 +13194 +13197 +13198 +13201 +13202 +13204 +13205 +13206 +13209 +13210 +13213 +13214 +13217 +13218 +13221 +13222 +13225 +13226 +13229 +13230 +13233 +13234 +13237 +13238 +13241 +13242 +13245 +13244 +13247 +13248 +13251 +13252 +13255 +13256 +13259 +13260 +13263 +13264 +13267 +13268 +13271 +13272 +13275 +13276 +13279 +13280 +13283 +13284 +13287 +13288 +13291 +13292 +13295 +13296 +13299 +13300 +13303 +13304 +13307 +13308 +13311 +13312 +13315 +13316 +13319 +13320 +13323 +13324 +13327 +13328 +13331 +13332 +13335 +13336 +13339 +13340 +13343 +13344 +13347 +13348 +13351 +13352 +13355 +13356 +13359 +13360 +13363 +13364 +13367 +13368 +13371 +13372 +13375 +13376 +13379 +13380 +13383 +13384 +13387 +13388 +13391 +13392 +13395 +13396 +13399 +13400 +13403 +13404 +13407 +13408 +13411 +13412 +13415 +13416 +13419 +13420 +13423 +13424 +13427 +13428 +13431 +13432 +13435 +13436 +13439 +13440 +13443 +13444 +13446 +13447 +13450 +13451 +13454 +13455 +13458 +13459 +13462 +13463 +13466 +13467 +13470 +13471 +13474 +13475 +13478 +13479 +13482 +13483 +13484 +13485 +13488 +13489 +13492 +13493 +13496 +13497 +13500 +13501 +13504 +13505 +13508 +13509 +13512 +13513 +13516 +13517 +13520 +13521 +13524 +13525 +13528 +13529 +13532 +13533 +13536 +13537 +13540 +13541 +13544 +13545 +13548 +13549 +13552 +13553 +13556 +13557 +13560 +13561 +13564 +13565 +13568 +13569 +13572 +13573 +13576 +13577 +13580 +13581 +13584 +13585 +13588 +13589 +13592 +13593 +13596 +13597 +13600 +13601 +13604 +13605 +13608 +13609 +13612 +13613 +13616 +13617 +13620 +13621 +13624 +13625 +13628 +13629 +13632 +13633 +13636 +13637 +13640 +13641 +13644 +13645 +13648 +13649 +13652 +13653 +13656 +13657 +13660 +13661 +13664 +13665 +13668 +13669 +13672 +13673 +13676 +13677 +13680 +13681 +13683 +13685 +13686 +13689 +13690 +13693 +13694 +13697 +13698 +13701 +13702 +13705 +13706 +13709 +13710 +13713 +13714 +13717 +13718 +13721 +13720 +13723 +13724 +13727 +13728 +13731 +13732 +13735 +13736 +13739 +13740 +13743 +13744 +13747 +13748 +13751 +13752 +13755 +13756 +13759 +13760 +13763 +13764 +13767 +13768 +13771 +13772 +13775 +13776 +13779 +13780 +13783 +13784 +13787 +13788 +13791 +13792 +13795 +13796 +13799 +13800 +13803 +13804 +13807 +13808 +13811 +13812 +13815 +13816 +13819 +13820 +13823 +13824 +13827 +13828 +13831 +13832 +13835 +13836 +13839 +13840 +13843 +13844 +13847 +13848 +13851 +13852 +13855 +13856 +13859 +13860 +13863 +13864 +13867 +13868 +13871 +13872 +13875 +13876 +13879 +13880 +13883 +13884 +13887 +13888 +13891 +13892 +13895 +13896 +13899 +13900 +13903 +13904 +13907 +13908 +13911 +13912 +13915 +13916 +13919 +13921 +13920 +13923 +13924 +13927 +13928 +13931 +13932 +13935 +13936 +13939 +13940 +13943 +13944 +13947 +13948 +13951 +13952 +13955 +13956 +13957 +13958 +13961 +13962 +13965 +13966 +13969 +13970 +13973 +13974 +13977 +13978 +13981 +13982 +13985 +13986 +13989 +13990 +13993 +13994 +13997 +13998 +14001 +14002 +14005 +14006 +14009 +14010 +14013 +14014 +14017 +14018 +14021 +14022 +14025 +14026 +14029 +14030 +14033 +14034 +14037 +14038 +14041 +14042 +14045 +14046 +14049 +14050 +14053 +14054 +14057 +14058 +14061 +14062 +14065 +14066 +14069 +14070 +14073 +14074 +14077 +14078 +14081 +14082 +14085 +14086 +14089 +14090 +14093 +14094 +14097 +14098 +14101 +14102 +14105 +14106 +14109 +14110 +14113 +14114 +14117 +14118 +14121 +14122 +14125 +14126 +14129 +14130 +14133 +14134 +14137 +14138 +14141 +14142 +14145 +14146 +14149 +14150 +14153 +14154 +14156 +14157 +14158 +14161 +14162 +14165 +14166 +14169 +14170 +14173 +14174 +14177 +14178 +14181 +14182 +14185 +14186 +14189 +14190 +14193 +14192 +14195 +14196 +14199 +14200 +14203 +14204 +14207 +14208 +14211 +14212 +14215 +14216 +14219 +14220 +14223 +14224 +14227 +14228 +14231 +14232 +14235 +14236 +14239 +14240 +14243 +14244 +14247 +14248 +14251 +14252 +14255 +14256 +14259 +14260 +14263 +14264 +14267 +14268 +14271 +14272 +14275 +14276 +14279 +14280 +14283 +14284 +14287 +14288 +14291 +14292 +14295 +14296 +14299 +14300 +14303 +14304 +14307 +14308 +14311 +14312 +14315 +14316 +14319 +14320 +14323 +14324 +14327 +14328 +14331 +14332 +14335 +14336 +14339 +14340 +14343 +14344 +14347 +14348 +14351 +14352 +14355 +14356 +14359 +14360 +14363 +14364 +14367 +14368 +14371 +14372 +14375 +14376 +14379 +14380 +14383 +14384 +14387 +14388 +14391 +14393 +14392 +14395 +14396 +14399 +14400 +14403 +14404 +14407 +14408 +14411 +14412 +14415 +14416 +14419 +14420 +14423 +14424 +14427 +14428 +14429 +14430 +14433 +14434 +14437 +14438 +14441 +14442 +14445 +14446 +14449 +14450 +14453 +14454 +14457 +14458 +14461 +14462 +14465 +14466 +14469 +14470 +14473 +14474 +14477 +14478 +14481 +14482 +14485 +14486 +14489 +14490 +14493 +14494 +14497 +14498 +14501 +14502 +14505 +14506 +14509 +14510 +14513 +14514 +14517 +14518 +14521 +14522 +14525 +14526 +14529 +14530 +14533 +14534 +14537 +14538 +14541 +14542 +14545 +14546 +14549 +14550 +14553 +14554 +14557 +14558 +14561 +14562 +14565 +14566 +14569 +14570 +14573 +14574 +14577 +14578 +14581 +14582 +14585 +14586 +14589 +14590 +14593 +14594 +14597 +14598 +14601 +14602 +14605 +14606 +14609 +14610 +14613 +14614 +14617 +14618 +14621 +14622 +14625 +14626 +14628 +14629 +14630 +14633 +14634 +14637 +14638 +14641 +14642 +14645 +14646 +14649 +14650 +14653 +14654 +14657 +14658 +14661 +14662 +14665 +14664 +14667 +14668 +14671 +14672 +14675 +14676 +14679 +14680 +14683 +14684 +14687 +14688 +14691 +14692 +14695 +14696 +14699 +14700 +14703 +14704 +14707 +14708 +14711 +14712 +14715 +14716 +14719 +14720 +14723 +14724 +14727 +14728 +14731 +14732 +14735 +14736 +14739 +14740 +14743 +14744 +14747 +14748 +14751 +14752 +14755 +14756 +14759 +14760 +14763 +14764 +14767 +14768 +14771 +14772 +14775 +14776 +14779 +14780 +14783 +14784 +14787 +14788 +14791 +14792 +14795 +14796 +14799 +14800 +14803 +14804 +14807 +14808 +14811 +14812 +14815 +14816 +14819 +14820 +14823 +14824 +14827 +14828 +14831 +14832 +14835 +14836 +14839 +14840 +14843 +14844 +14847 +14848 +14851 +14852 +14855 +14856 +14859 +14860 +14863 +14865 +14864 +14867 +14868 +14871 +14872 +14875 +14876 +14879 +14880 +14883 +14884 +14887 +14888 +14891 +14892 +14895 +14896 +14899 +14900 +14901 +14902 +14905 +14906 +14909 +14910 +14913 +14914 +14917 +14918 +14921 +14922 +14925 +14926 +14929 +14930 +14933 +14934 +14937 +14938 +14941 +14942 +14945 +14946 +14949 +14950 +14953 +14954 +14957 +14958 +14961 +14962 +14965 +14966 +14969 +14970 +14973 +14974 +14977 +14978 +14981 +14982 +14985 +14986 +14989 +14990 +14993 +14994 +14997 +14998 +15001 +15002 +15005 +15006 +15009 +15010 +15013 +15014 +15017 +15018 +15021 +15022 +15025 +15026 +15029 +15030 +15033 +15034 +15037 +15038 +15041 +15042 +15045 +15046 +15049 +15050 +15053 +15054 +15057 +15058 +15061 +15062 +15065 +15066 +15069 +15070 +15073 +15074 +15077 +15078 +15081 +15082 +15085 +15086 +15089 +15090 +15093 +15094 +15097 +15098 +15100 +15101 +15102 +15105 +15106 +15109 +15110 +15113 +15114 +15117 +15118 +15121 +15122 +15125 +15126 +15129 +15130 +15133 +15134 +15137 +15136 +15139 +15140 +15143 +15144 +15147 +15148 +15151 +15152 +15155 +15156 +15159 +15160 +15163 +15164 +15167 +15168 +15171 +15172 +15175 +15176 +15179 +15180 +15183 +15184 +15187 +15188 +15191 +15192 +15195 +15196 +15199 +15200 +15203 +15204 +15207 +15208 +15211 +15212 +15215 +15216 +15219 +15220 +15223 +15224 +15227 +15228 +15231 +15232 +15235 +15236 +15239 +15240 +15243 +15244 +15247 +15248 +15251 +15252 +15255 +15256 +15259 +15260 +15263 +15264 +15267 +15268 +15271 +15272 +15275 +15276 +15279 +15280 +15283 +15284 +15287 +15288 +15291 +15292 +15295 +15296 +15299 +15300 +15303 +15304 +15307 +15308 +15311 +15312 +15315 +15316 +15319 +15320 +15323 +15324 +15327 +15328 +15331 +15332 +15335 +15337 +15336 +15339 +15340 +15343 +15344 +15347 +15348 +15351 +15352 +15355 +15356 +15359 +15360 +15363 +15364 +15367 +15368 +15371 +15372 +15373 +15374 +15377 +15378 +15381 +15382 +15385 +15386 +15389 +15390 +15393 +15394 +15397 +15398 +15401 +15402 +15405 +15406 +15409 +15410 +15413 +15414 +15417 +15418 +15421 +15422 +15425 +15426 +15429 +15430 +15433 +15434 +15437 +15438 +15441 +15442 +15445 +15446 +15449 +15450 +15453 +15454 +15457 +15458 +15461 +15462 +15465 +15466 +15469 +15470 +15473 +15474 +15477 +15478 +15481 +15482 +15485 +15486 +15489 +15490 +15493 +15494 +15497 +15498 +15501 +15502 +15505 +15506 +15509 +15510 +15513 +15514 +15517 +15518 +15521 +15522 +15525 +15526 +15529 +15530 +15533 +15534 +15537 +15538 +15541 +15542 +15545 +15546 +15549 +15550 +15553 +15554 +15557 +15558 +15561 +15562 +15565 +15566 +15569 +15570 +15572 +15573 +15574 +15577 +15578 +15581 +15582 +15585 +15586 +15589 +15590 +15593 +15594 +15597 +15598 +15601 +15602 +15605 +15606 +15609 +15608 +15611 +15612 +15615 +15616 +15619 +15620 +15623 +15624 +15627 +15628 +15631 +15632 +15635 +15636 +15639 +15640 +15643 +15644 +15647 +15648 +15651 +15652 +15655 +15656 +15659 +15660 +15663 +15664 +15667 +15668 +15671 +15672 +15675 +15676 +15679 +15680 +15683 +15684 +15687 +15688 +15691 +15692 +15695 +15696 +15699 +15700 +15703 +15704 +15707 +15708 +15711 +15712 +15715 +15716 +15719 +15720 +15723 +15724 +15727 +15728 +15731 +15732 +15735 +15736 +15739 +15740 +15743 +15744 +15747 +15748 +15751 +15752 +15755 +15756 +15759 +15760 +15763 +15764 +15767 +15768 +15771 +15772 +15775 +15776 +15779 +15780 +15783 +15784 +15787 +15788 +15791 +15792 +15795 +15796 +15799 +15800 +15803 +15804 +15807 +15809 +15808 +15811 +15812 +15815 +15816 +15819 +15820 +15823 +15824 +15827 +15828 +15831 +15832 +15835 +15836 +15839 +15840 +15843 +15844 +15845 +15846 +15849 +15850 +15853 +15854 +15857 +15858 +15861 +15862 +15865 +15866 +15869 +15870 +15873 +15874 +15877 +15878 +15881 +15882 +15885 +15886 +15889 +15890 +15893 +15894 +15897 +15898 +15901 +15902 +15905 +15906 +15909 +15910 +15913 +15914 +15917 +15918 +15921 +15922 +15925 +15926 +15929 +15930 +15933 +15934 +15937 +15938 +15941 +15942 +15945 +15946 +15949 +15950 +15953 +15954 +15957 +15958 +15961 +15962 +15965 +15966 +15969 +15970 +15973 +15974 +15977 +15978 +15981 +15982 +15985 +15986 +15989 +15990 +15993 +15994 +15997 +15998 +16001 +16002 +16005 +16006 +16009 +16010 +16013 +16014 +16017 +16018 +16021 +16022 +16025 +16026 +16029 +16030 +16033 +16034 +16037 +16038 +16041 +16042 +16044 +16045 +16046 +16049 +16050 +16053 +16054 +16057 +16058 +16061 +16062 +16065 +16066 +16069 +16070 +16073 +16074 +16077 +16078 +16081 +16080 +16083 +16084 +16087 +16088 +16091 +16092 +16095 +16096 +16099 +16100 +16103 +16104 +16107 +16108 +16111 +16112 +16115 +16116 +16119 +16120 +16123 +16124 +16127 +16128 +16131 +16132 +16135 +16136 +16139 +16140 +16143 +16144 +16147 +16148 +16151 +16152 +16155 +16156 +16159 +16160 +16163 +16164 +16167 +16168 +16171 +16172 +16175 +16176 +16179 +16180 +16183 +16184 +16187 +16188 +16191 +16192 +16195 +16196 +16199 +16200 +16203 +16204 +16207 +16208 +16211 +16212 +16215 +16216 +16219 +16220 +16223 +16224 +16227 +16228 +16231 +16232 +16235 +16236 +16239 +16240 +16243 +16244 +16247 +16248 +16251 +16252 +16255 +16256 +16259 +16260 +16263 +16264 +16267 +16268 +16271 +16272 +16275 +16276 +16279 +16281 +16280 +16283 +16284 +16287 +16288 +16291 +16292 +16295 +16296 +16299 +16300 +16303 +16304 +16307 +16308 +16311 +16312 +16315 +16316 +16317 +16318 +16321 +16322 +16325 +16326 +16329 +16330 +16333 +16334 +16337 +16338 +16341 +16342 +16345 +16346 +16349 +16350 +16353 +16354 +16357 +16358 +16361 +16362 +16365 +16366 +16369 +16370 +16373 +16374 +16377 +16378 +16381 +16382 +16385 +16386 +16389 +16390 +16393 +16394 +16397 +16398 +16401 +16402 +16405 +16406 +16409 +16410 +16413 +16414 +16417 +16418 +16421 +16422 +16425 +16426 +16429 +16430 +16433 +16434 +16437 +16438 +16441 +16442 +16445 +16446 +16449 +16450 +16453 +16454 +16457 +16458 +16461 +16462 +16465 +16466 +16469 +16470 +16473 +16474 +16477 +16478 +16481 +16482 +16485 +16486 +16489 +16490 +16493 +16494 +16497 +16498 +16501 +16502 +16505 +16506 +16509 +16510 +16513 +16514 +16516 +16517 +16518 +16521 +16522 +16525 +16526 +16529 +16530 +16533 +16534 +16537 +16538 +16541 +16542 +16545 +16546 +16549 +16550 +16553 +16552 +16555 +16556 +16559 +16560 +16563 +16564 +16567 +16568 +16571 +16572 +16575 +16576 +16579 +16580 +16583 +16584 +16587 +16588 +16591 +16592 +16595 +16596 +16599 +16600 +16603 +16604 +16607 +16608 +16611 +16612 +16615 +16616 +16619 +16620 +16623 +16624 +16627 +16628 +16631 +16632 +16635 +16636 +16639 +16640 +16643 +16644 +16647 +16648 +16651 +16652 +16655 +16656 +16659 +16660 +16663 +16664 +16667 +16668 +16671 +16672 +16675 +16676 +16679 +16680 +16683 +16684 +16687 +16688 +16691 +16692 +16695 +16696 +16699 +16700 +16703 +16704 +16707 +16708 +16711 +16712 +16715 +16716 +16719 +16720 +16723 +16724 +16727 +16728 +16731 +16732 +16735 +16736 +16739 +16740 +16743 +16744 +16747 +16748 +16751 +16753 +16752 +16755 +16756 +16759 +16760 +16763 +16764 +16767 +16768 +16771 +16772 +16775 +16776 +16779 +16780 +16783 +16784 +16787 +16788 +16789 +16790 +16793 +16794 +16797 +16798 +16801 +16802 +16805 +16806 +16809 +16810 +16813 +16814 +16817 +16818 +16821 +16822 +16825 +16826 +16829 +16830 +16833 +16834 +16837 +16838 +16841 +16842 +16845 +16846 +16849 +16850 +16853 +16854 +16857 +16858 +16861 +16862 +16865 +16866 +16869 +16870 +16873 +16874 +16877 +16878 +16881 +16882 +16885 +16886 +16889 +16890 +16893 +16894 +16897 +16898 +16901 +16902 +16905 +16906 +16909 +16910 +16913 +16914 +16917 +16918 +16921 +16922 +16925 +16926 +16929 +16930 +16933 +16934 +16937 +16938 +16941 +16942 +16945 +16946 +16949 +16950 +16953 +16954 +16957 +16958 +16961 +16962 +16965 +16966 +16969 +16970 +16973 +16974 +16977 +16978 +16981 +16982 +16985 +16986 +16988 +16989 +16990 +16993 +16994 +16997 +16998 +17001 +17002 +17005 +17006 +17009 +17010 +17013 +17014 +17017 +17018 +17021 +17022 +17025 +17024 +17027 +17028 +17031 +17032 +17035 +17036 +17039 +17040 +17043 +17044 +17047 +17048 +17051 +17052 +17055 +17056 +17059 +17060 +17063 +17064 +17067 +17068 +17071 +17072 +17075 +17076 +17079 +17080 +17083 +17084 +17087 +17088 +17091 +17092 +17095 +17096 +17099 +17100 +17103 +17104 +17107 +17108 +17111 +17112 +17115 +17116 +17119 +17120 +17123 +17124 +17127 +17128 +17131 +17132 +17135 +17136 +17139 +17140 +17143 +17144 +17147 +17148 +17151 +17152 +17155 +17156 +17159 +17160 +17163 +17164 +17167 +17168 +17171 +17172 +17175 +17176 +17179 +17180 +17183 +17184 +17187 +17188 +17191 +17192 +17195 +17196 +17199 +17200 +17203 +17204 +17207 +17208 +17211 +17212 +17215 +17216 +17219 +17220 +17223 +17225 +17224 +17227 +17228 +17231 +17232 +17235 +17236 +17239 +17240 +17243 +17244 +17247 +17248 +17251 +17252 +17255 +17256 +17259 +17260 +17261 +17262 +17265 +17266 +17269 +17270 +17273 +17274 +17277 +17278 +17281 +17282 +17285 +17286 +17289 +17290 +17293 +17294 +17297 +17298 +17301 +17302 +17305 +17306 +17309 +17310 +17313 +17314 +17317 +17318 +17321 +17322 +17325 +17326 +17329 +17330 +17333 +17334 +17337 +17338 +17341 +17342 +17345 +17346 +17349 +17350 +17353 +17354 +17357 +17358 +17361 +17362 +17365 +17366 +17369 +17370 +17373 +17374 +17377 +17378 +17381 +17382 +17385 +17386 +17389 +17390 +17393 +17394 +17397 +17398 +17401 +17402 +17405 +17406 +17409 +17410 +17413 +17414 +17417 +17418 +17421 +17422 +17425 +17426 +17429 +17430 +17433 +17434 +17437 +17438 +17441 +17442 +17445 +17446 +17449 +17450 +17453 +17454 +17457 +17458 +17460 +17461 +17462 +17465 +17466 +17469 +17470 +17473 +17474 +17477 +17478 +17481 +17482 +17485 +17486 +17489 +17490 +17493 +17494 +17497 +17496 +17499 +17500 +17503 +17504 +17507 +17508 +17511 +17512 +17515 +17516 +17519 +17520 +17523 +17524 +17527 +17528 +17531 +17532 +17535 +17536 +17539 +17540 +17543 +17544 +17547 +17548 +17551 +17552 +17555 +17556 +17559 +17560 +17563 +17564 +17567 +17568 +17571 +17572 +17575 +17576 +17579 +17580 +17583 +17584 +17587 +17588 +17591 +17592 +17595 +17596 +17599 +17600 +17603 +17604 +17607 +17608 +17611 +17612 +17615 +17616 +17619 +17620 +17623 +17624 +17627 +17628 +17631 +17632 +17635 +17636 +17639 +17640 +17643 +17644 +17647 +17648 +17651 +17652 +17655 +17656 +17659 +17660 +17663 +17664 +17667 +17668 +17671 +17672 +17675 +17676 +17679 +17680 +17683 +17684 +17687 +17688 +17691 +17692 +17695 +17697 +17696 +17699 +17700 +17703 +17704 +17707 +17708 +17711 +17712 +17715 +17716 +17719 +17720 +17723 +17724 +17727 +17728 +17731 +17732 +17733 +17734 +17737 +17738 +17741 +17742 +17745 +17746 +17749 +17750 +17753 +17754 +17757 +17758 +17761 +17762 +17765 +17766 +17769 +17770 +17773 +17774 +17777 +17778 +17781 +17782 +17785 +17786 +17789 +17790 +17793 +17794 +17797 +17798 +17801 +17802 +17805 +17806 +17809 +17810 +17813 +17814 +17817 +17818 +17821 +17822 +17825 +17826 +17829 +17830 +17833 +17834 +17837 +17838 +17841 +17842 +17845 +17846 +17849 +17850 +17853 +17854 +17857 +17858 +17861 +17862 +17865 +17866 +17869 +17870 +17873 +17874 +17877 +17878 +17881 +17882 +17885 +17886 +17889 +17890 +17893 +17894 +17897 +17898 +17901 +17902 +17905 +17906 +17909 +17910 +17913 +17914 +17917 +17918 +17921 +17922 +17925 +17926 +17929 +17930 +17932 +17933 +17934 +17937 +17938 +17941 +17942 +17945 +17946 +17949 +17950 +17953 +17954 +17957 +17958 +17961 +17962 +17965 +17966 +17969 +17968 +17971 +17972 +17975 +17976 +17979 +17980 +17983 +17984 +17987 +17988 +17991 +17992 +17995 +17996 +17999 +18000 +18003 +18004 +18007 +18008 +18011 +18012 +18015 +18016 +18019 +18020 +18023 +18024 +18027 +18028 +18031 +18032 +18035 +18036 +18039 +18040 +18043 +18044 +18047 +18048 +18051 +18052 +18055 +18056 +18059 +18060 +18063 +18064 +18067 +18068 +18071 +18072 +18075 +18076 +18079 +18080 +18083 +18084 +18087 +18088 +18091 +18092 +18095 +18096 +18099 +18100 +18103 +18104 +18107 +18108 +18111 +18112 +18115 +18116 +18119 +18120 +18123 +18124 +18127 +18128 +18131 +18132 +18135 +18136 +18139 +18140 +18143 +18144 +18147 +18148 +18151 +18152 +18155 +18156 +18159 +18160 +18163 +18164 +18167 +18169 +18168 +18171 +18172 +18175 +18176 +18179 +18180 +18183 +18184 +18187 +18188 +18191 +18192 +18195 +18196 +18199 +18200 +18203 +18204 +18205 +18206 +18209 +18210 +18213 +18214 +18217 +18218 +18221 +18222 +18225 +18226 +18229 +18230 +18233 +18234 +18237 +18238 +18241 +18242 +18245 +18246 +18249 +18250 +18253 +18254 +18257 +18258 +18261 +18262 +18265 +18266 +18269 +18270 +18273 +18274 +18277 +18278 +18281 +18282 +18285 +18286 +18289 +18290 +18293 +18294 +18297 +18298 +18301 +18302 +18305 +18306 +18309 +18310 +18313 +18314 +18317 +18318 +18321 +18322 +18325 +18326 +18329 +18330 +18333 +18334 +18337 +18338 +18341 +18342 +18345 +18346 +18349 +18350 +18353 +18354 +18357 +18358 +18361 +18362 +18365 +18366 +18369 +18370 +18373 +18374 +18377 +18378 +18381 +18382 +18385 +18386 +18389 +18390 +18393 +18394 +18397 +18398 +18401 +18402 +18404 +18405 +18406 +18409 +18410 +18413 +18414 +18417 +18418 +18421 +18422 +18425 +18426 +18429 +18430 +18433 +18434 +18437 +18438 +18441 +18440 +18443 +18444 +18447 +18448 +18451 +18452 +18455 +18456 +18459 +18460 +18463 +18464 +18467 +18468 +18471 +18472 +18475 +18476 +18479 +18480 +18483 +18484 +18487 +18488 +18491 +18492 +18495 +18496 +18499 +18500 +18503 +18504 +18507 +18508 +18511 +18512 +18515 +18516 +18519 +18520 +18523 +18524 +18527 +18528 +18531 +18532 +18535 +18536 +18539 +18540 +18543 +18544 +18547 +18548 +18551 +18552 +18555 +18556 +18559 +18560 +18563 +18564 +18567 +18568 +18571 +18572 +18575 +18576 +18579 +18580 +18583 +18584 +18587 +18588 +18591 +18592 +18595 +18596 +18599 +18600 +18603 +18604 +18607 +18608 +18611 +18612 +18615 +18616 +18619 +18620 +18623 +18624 +18627 +18628 +18631 +18632 +18635 +18636 +18639 +18641 +18640 +18643 +18644 +18647 +18648 +18651 +18652 +18655 +18656 +18659 +18660 +18663 +18664 +18667 +18668 +18671 +18672 +18675 +18676 +18677 +18678 +18681 +18682 +18685 +18686 +18689 +18690 +18693 +18694 +18697 +18698 +18701 +18702 +18705 +18706 +18709 +18710 +18713 +18714 +18717 +18718 +18721 +18722 +18725 +18726 +18729 +18730 +18733 +18734 +18737 +18738 +18741 +18742 +18745 +18746 +18749 +18750 +18753 +18754 +18757 +18758 +18761 +18762 +18765 +18766 +18769 +18770 +18773 +18774 +18777 +18778 +18781 +18782 +18785 +18786 +18789 +18790 +18793 +18794 +18797 +18798 +18801 +18802 +18805 +18806 +18809 +18810 +18813 +18814 +18817 +18818 +18821 +18822 +18825 +18826 +18829 +18830 +18833 +18834 +18837 +18838 +18841 +18842 +18845 +18846 +18849 +18850 +18853 +18854 +18857 +18858 +18861 +18862 +18865 +18866 +18869 +18870 +18873 +18874 +18876 +18877 +18878 +18881 +18882 +18885 +18886 +18889 +18890 +18893 +18894 +18897 +18898 +18901 +18902 +18905 +18906 +18909 +18910 +18913 +18912 +18915 +18916 +18919 +18920 +18923 +18924 +18927 +18928 +18931 +18932 +18935 +18936 +18939 +18940 +18943 +18944 +18947 +18948 +18951 +18952 +18955 +18956 +18959 +18960 +18963 +18964 +18967 +18968 +18971 +18972 +18975 +18976 +18979 +18980 +18983 +18984 +18987 +18988 +18991 +18992 +18995 +18996 +18999 +19000 +19003 +19004 +19007 +19008 +19011 +19012 +19015 +19016 +19019 +19020 +19023 +19024 +19027 +19028 +19031 +19032 +19035 +19036 +19039 +19040 +19043 +19044 +19047 +19048 +19051 +19052 +19055 +19056 +19059 +19060 +19063 +19064 +19067 +19068 +19071 +19072 +19075 +19076 +19079 +19080 +19083 +19084 +19087 +19088 +19091 +19092 +19095 +19096 +19099 +19100 +19103 +19104 +19107 +19108 +19111 +19112 +19112 +19113 +19116 +19117 +19120 +19121 +19124 +19125 +19128 +19129 +19132 +19133 +19136 +19137 +19140 +19141 +19144 +19145 +19148 +19149 +19150 +19151 +19154 +19155 +19158 +19159 +19162 +19163 +19166 +19167 +19170 +19171 +19174 +19175 +19178 +19179 +19182 +19183 +19186 +19187 +19190 +19191 +19194 +19195 +19198 +19199 +19202 +19203 +19206 +19207 +19210 +19211 +19214 +19215 +19218 +19219 +19222 +19223 +19226 +19227 +19230 +19231 +19234 +19235 +19238 +19239 +19242 +19243 +19246 +19247 +19250 +19251 +19254 +19255 +19258 +19259 +19262 +19263 +19266 +19267 +19270 +19271 +19274 +19275 +19278 +19279 +19282 +19283 +19286 +19287 +19290 +19291 +19294 +19295 +19298 +19299 +19302 +19303 +19306 +19307 +19310 +19311 +19314 +19315 +19318 +19319 +19322 +19323 +19326 +19327 +19330 +19331 +19334 +19335 +19338 +19339 +19342 +19343 +19346 +19347 +19349 +19349 +19350 +19353 +19354 +19357 +19358 +19361 +19362 +19365 +19366 +19369 +19370 +19373 +19374 +19377 +19378 +19381 +19382 +19385 +19386 +19389 +19388 +19391 +19392 +19395 +19396 +19399 +19400 +19403 +19404 +19407 +19408 +19411 +19412 +19415 +19416 +19419 +19420 +19423 +19424 +19427 +19428 +19431 +19432 +19435 +19436 +19439 +19440 +19443 +19444 +19447 +19448 +19451 +19452 +19455 +19456 +19459 +19460 +19463 +19464 +19467 +19468 +19471 +19472 +19475 +19476 +19479 +19480 +19483 +19484 +19487 +19488 +19491 +19492 +19495 +19496 +19499 +19500 +19503 +19504 +19507 +19508 +19511 +19512 +19515 +19516 +19519 +19520 +19523 +19524 +19527 +19528 +19531 +19532 +19535 +19536 +19539 +19540 +19543 +19544 +19547 +19548 +19551 +19552 +19555 +19556 +19559 +19560 +19563 +19564 +19567 +19568 +19571 +19572 +19575 +19576 +19579 +19580 +19583 +19584 +19587 +19588 +19588 +19589 +19592 +19593 +19596 +19597 +19600 +19601 +19604 +19605 +19608 +19609 +19612 +19613 +19616 +19617 +19620 +19621 +19624 +19625 +19628 +19629 +19630 +19631 +19634 +19635 +19638 +19639 +19642 +19643 +19646 +19647 +19650 +19651 +19654 +19655 +19658 +19659 +19662 +19663 +19666 +19667 +19670 +19671 +19674 +19675 +19678 +19679 +19682 +19683 +19686 +19687 +19690 +19691 +19694 +19695 +19698 +19699 +19702 +19703 +19706 +19707 +19710 +19711 +19714 +19715 +19718 +19719 +19722 +19723 +19726 +19727 +19730 +19731 +19734 +19735 +19738 +19739 +19742 +19743 +19746 +19747 +19750 +19751 +19754 +19755 +19758 +19759 +19762 +19763 +19766 +19767 +19770 +19771 +19774 +19775 +19778 +19779 +19782 +19783 +19786 +19787 +19790 +19791 +19794 +19795 +19798 +19799 +19802 +19803 +19806 +19807 +19810 +19811 +19814 +19815 +19818 +19819 +19822 +19823 +19826 +19827 +20071 +19829 +19829 +19830 +19833 +19834 +19837 +19838 +19841 +19842 +19845 +19846 +19849 +19850 +19853 +19854 +19857 +19858 +19861 +19862 +19865 +19866 +19869 +19870 +19873 +19872 +19875 +19876 +19879 +19880 +19883 +19884 +19887 +19888 +19891 +19892 +19895 +19896 +19899 +19900 +19903 +19904 +19907 +19908 +19911 +19912 +19915 +19916 +19919 +19920 +19923 +19924 +19927 +19928 +19931 +19932 +19935 +19936 +19939 +19940 +19943 +19944 +19947 +19948 +19951 +19952 +19955 +19956 +19959 +19960 +19963 +19964 +19967 +19968 +19971 +19972 +19975 +19976 +19979 +19980 +19983 +19984 +19987 +19988 +19991 +19992 +19995 +19996 +19999 +20000 +20003 +20004 +20007 +20008 +20011 +20012 +20015 +20016 +20019 +20020 +20023 +20024 +20027 +20028 +20031 +20032 +20035 +20036 +20039 +20040 +20043 +20044 +20047 +20048 +20051 +20052 +20055 +20056 +20059 +20060 +20063 +20064 +20067 +20068 +20071 +20071 +20072 +20073 +20074 +20077 +20078 +20081 +20082 +20085 +20086 +20089 +20090 +20093 +20094 +20097 +20098 +20101 +20102 +20105 +20106 +20109 +20110 +20113 +20114 +20117 +20118 +20119 +20120 +20123 +20124 +20127 +20128 +20131 +20132 +20135 +20136 +20139 +20140 +20143 +20144 +20147 +20148 +20151 +20152 +20155 +20156 +20159 +20160 +20163 +20164 +20167 +20168 +20171 +20172 +20175 +20176 +20179 +20180 +20183 +20184 +20187 +20188 +20191 +20192 +20195 +20196 +20199 +20200 +20203 +20204 +20207 +20208 +20211 +20212 +20215 +20216 +20219 +20220 +20223 +20224 +20227 +20228 +20231 +20232 +20235 +20236 +20239 +20240 +20243 +20244 +20247 +20248 +20251 +20252 +20255 +20256 +20259 +20260 +20263 +20264 +20267 +20268 +20271 +20272 +20275 +20276 +20279 +20280 +20283 +20284 +20287 +20288 +20291 +20292 +20295 +20296 +20299 +20300 +20303 +20304 +20307 +20308 +20311 +20312 +20315 +20316 +20317 +20317 +20318 +20321 +20322 +20325 +20326 +20329 +20330 +20333 +20334 +20337 +20338 +20341 +20342 +20345 +20346 +20349 +20350 +20353 +20354 +20357 +20358 +20361 +20362 +20365 +20366 +20369 +20368 +20371 +20372 +20375 +20376 +20379 +20380 +20383 +20384 +20387 +20388 +20391 +20392 +20395 +20396 +20399 +20400 +20403 +20404 +20407 +20408 +20411 +20412 +20415 +20416 +20419 +20420 +20423 +20424 +20427 +20428 +20431 +20432 +20435 +20436 +20439 +20440 +20443 +20444 +20447 +20448 +20451 +20452 +20455 +20456 +20459 +20460 +20463 +20464 +20467 +20468 +20471 +20472 +20475 +20476 +20479 +20480 +20483 +20484 +20487 +20488 +20491 +20492 +20495 +20496 +20499 +20500 +20503 +20504 +20507 +20508 +20511 +20512 +20515 +20516 +20519 +20520 +20523 +20524 +20527 +20528 +20531 +20532 +20535 +20536 +20539 +20540 +20543 +20544 +20547 +20548 +20551 +20552 +20555 +20556 +20559 +20560 +20563 +20564 +20567 +20568 +20569 +20570 +20573 +20574 +20577 +20578 +20581 +20582 +20585 +20586 +20589 +20590 +20593 +20594 +20597 +20598 +20601 +20602 +20605 +20606 +20609 +20610 +20613 +20614 +20617 +20618 +20621 +20622 +20623 +20624 +20627 +20628 +20631 +20632 +20635 +20636 +20639 +20640 +20643 +20644 +20647 +20648 +20651 +20652 +20655 +20656 +20659 +20660 +20663 +20664 +20667 +20668 +20671 +20672 +20675 +20676 +20679 +20680 +20683 +20684 +20687 +20688 +20691 +20692 +20695 +20696 +20699 +20700 +20703 +20704 +20707 +20708 +20711 +20712 +20715 +20716 +20719 +20720 +20723 +20724 +20727 +20728 +20731 +20732 +20735 +20736 +20739 +20740 +20743 +20744 +20747 +20748 +20751 +20752 +20755 +20756 +20759 +20760 +20763 +20764 +20767 +20768 +20771 +20772 +20775 +20776 +20779 +20780 +20783 +20784 +20787 +20788 +20791 +20792 +20795 +20796 +20799 +20800 +20803 +20804 +20807 +20808 +20811 +20812 +20815 +20816 +20819 +20820 +20823 +20824 +20827 +20828 +20831 +20832 +20835 +20836 +20839 +20840 +20843 +20844 +20847 +20848 +20851 +20852 +20855 +20856 +20859 +20860 +20863 +20864 +20867 +20868 +20871 +20872 +20875 +20876 +20879 +20878 +20881 +20882 +20885 +20886 +20889 +20890 +20893 +20894 +20897 +20898 +20901 +20902 +20905 +20906 +20909 +20910 +20913 +20914 +20917 +20918 +20921 +20922 +20925 +20926 +20929 +20930 +20933 +20934 +20937 +20938 +20941 +20942 +20945 +20946 +20949 +20950 +20953 +20954 +20957 +20958 +20961 +20962 +20965 +20966 +20969 +20970 +20973 +20974 +20977 +20978 +20981 +20982 +20985 +20986 +20989 +20990 +20993 +20994 +20997 +20998 +21001 +21002 +21005 +21006 +21009 +21010 +21013 +21014 +21017 +21018 +21021 +21022 +21025 +21026 +21029 +21030 +21033 +21034 +21037 +21038 +21041 +21042 +21045 +21046 +21049 +21050 +21053 +21054 +21057 +21058 +21061 +21062 +21065 +21066 +21069 +21070 +21073 +21074 +21077 +21078 +21081 +21082 +21085 +21086 +21089 +21090 +21093 +21094 +21097 +21098 +21101 +21102 +21105 +21106 +21109 +21110 +21113 +21114 +21117 +21118 +21121 +21122 +21125 +21126 +21129 +21130 +21133 +21134 +21135 +21136 +21139 +21140 +21143 +21144 +21147 +21148 +21151 +21152 +21155 +21156 +21159 +21160 +21163 +21164 +21167 +21168 +21171 +21172 +21175 +21176 +21179 +21180 +21183 +21184 +21187 +21188 +21191 +21192 +21195 +21196 +21199 +21200 +21203 +21204 +21207 +21208 +21211 +21212 +21215 +21216 +21219 +21220 +21223 +21224 +21227 +21228 +21231 +21232 +21235 +21236 +21239 +21240 +21243 +21244 +21247 +21248 +21251 +21252 +21255 +21256 +21259 +21260 +21263 +21264 +21267 +21268 +21271 +21272 +21275 +21276 +21279 +21280 +21283 +21284 +21287 +21288 +21291 +21292 +21295 +21296 +21299 +21300 +21303 +21304 +21307 +21308 +21311 +21312 +21315 +21316 +21319 +21320 +21323 +21324 +21327 +21328 +21331 +21332 +21335 +21336 +21339 +21340 +21343 +21344 +21347 +21348 +21351 +21352 +21355 +21356 +21359 +21360 +21363 +21364 +21367 +21368 +21371 +21372 +21375 +21376 +21379 +21380 +21383 +21384 +21387 +21388 +21391 +21390 +21393 +21394 +21397 +21398 +21401 +21402 +21405 +21406 +21409 +21410 +21413 +21414 +21417 +21418 +21421 +21422 +21425 +21426 +21429 +21430 +21433 +21434 +21437 +21438 +21441 +21442 +21445 +21446 +21449 +21450 +21453 +21454 +21457 +21458 +21461 +21462 +21465 +21466 +21469 +21470 +21473 +21474 +21477 +21478 +21481 +21482 +21485 +21486 +21489 +21490 +21493 +21494 +21497 +21498 +21501 +21502 +21505 +21506 +21509 +21510 +21513 +21514 +21517 +21518 +21521 +21522 +21525 +21526 +21529 +21530 +21533 +21534 +21537 +21538 +21541 +21542 +21545 +21546 +21549 +21550 +21553 +21554 +21557 +21558 +21561 +21562 +21565 +21566 +21569 +21570 +21573 +21574 +21577 +21578 +21581 +21582 +21585 +21586 +21589 +21590 +21593 +21594 +21597 +21598 +21601 +21602 +21605 +21606 +21609 +21610 +21613 +21614 +21617 +21618 +21621 +21622 +21625 +21626 +21629 +21630 +21633 +21634 +21637 +21638 +21641 +21642 +21645 +21646 +21647 +21648 +21651 +21652 +21655 +21656 +21659 +21660 +21663 +21664 +21667 +21668 +21671 +21672 +21675 +21676 +21679 +21680 +21683 +21684 +21687 +21688 +21691 +21692 +21695 +21696 +21699 +21700 +21703 +21704 +21707 +21708 +21711 +21712 +21715 +21716 +21719 +21720 +21723 +21724 +21727 +21728 +21731 +21732 +21735 +21736 +21739 +21740 +21743 +21744 +21747 +21748 +21751 +21752 +21755 +21756 +21759 +21760 +21763 +21764 +21767 +21768 +21771 +21772 +21775 +21776 +21779 +21780 +21783 +21784 +21787 +21788 +21791 +21792 +21795 +21796 +21799 +21800 +21803 +21804 +21807 +21808 +21811 +21812 +21815 +21816 +21819 +21820 +21823 +21824 +21827 +21828 +21831 +21832 +21835 +21836 +21839 +21840 +21843 +21844 +21847 +21848 +21851 +21852 +21855 +21856 +21859 +21860 +21863 +21864 +21867 +21868 +21871 +21872 +21875 +21876 +21879 +21880 +21883 +21884 +21887 +21888 +21891 +21892 +21895 +21896 +21899 +21900 +21903 +21902 +21905 +21906 +21909 +21910 +21913 +21914 +21917 +21918 +21921 +21922 +21925 +21926 +21929 +21930 +21933 +21934 +21937 +21938 +21941 +21942 +21945 +21946 +21949 +21950 +21953 +21954 +21957 +21958 +21961 +21962 +21965 +21966 +21969 +21970 +21973 +21974 +21977 +21978 +21981 +21982 +21985 +21986 +21989 +21990 +21993 +21994 +21997 +21998 +22001 +22002 +22005 +22006 +22009 +22010 +22013 +22014 +22017 +22018 +22021 +22022 +22025 +22026 +22029 +22030 +22033 +22034 +22037 +22038 +22041 +22042 +22045 +22046 +22049 +22050 +22053 +22054 +22057 +22058 +22061 +22062 +22065 +22066 +22069 +22070 +22073 +22074 +22077 +22078 +22081 +22082 +22085 +22086 +22089 +22090 +22093 +22094 +22097 +22098 +22101 +22102 +22105 +22106 +22109 +22110 +22113 +22114 +22117 +22118 +22121 +22122 +22125 +22126 +22129 +22130 +22133 +22134 +22137 +22138 +22141 +22142 +22145 +22146 +22149 +22150 +22153 +22154 +22157 +22158 +22159 +22160 +22163 +22164 +22167 +22168 +22171 +22172 +22175 +22176 +22179 +22180 +22183 +22184 +22187 +22188 +22191 +22192 +22195 +22196 +22199 +22200 +22203 +22204 +22207 +22208 +22211 +22212 +22215 +22216 +22219 +22220 +22223 +22224 +22227 +22228 +22231 +22232 +22235 +22236 +22239 +22240 +22243 +22244 +22247 +22248 +22251 +22252 +22255 +22256 +22259 +22260 +22263 +22264 +22267 +22268 +22271 +22272 +22275 +22276 +22279 +22280 +22283 +22284 +22287 +22288 +22291 +22292 +22295 +22296 +22299 +22300 +22303 +22304 +22307 +22308 +22311 +22312 +22315 +22316 +22319 +22320 +22323 +22324 +22327 +22328 +22331 +22332 +22335 +22336 +22339 +22340 +22343 +22344 +22347 +22348 +22351 +22352 +22355 +22356 +22359 +22360 +22363 +22364 +22367 +22368 +22371 +22372 +22375 +22376 +22379 +22380 +22383 +22384 +22387 +22388 +22391 +22392 +22395 +22396 +22399 +22400 +22403 +22404 +22407 +22408 +22411 +22412 +22415 +22414 +22417 +22418 +22421 +22422 +22425 +22426 +22429 +22430 +22433 +22434 +22437 +22438 +22441 +22442 +22445 +22446 +22449 +22450 +22453 +22454 +22457 +22458 +22461 +22462 +22465 +22466 +22469 +22470 +22473 +22474 +22477 +22478 +22481 +22482 +22485 +22486 +22489 +22490 +22493 +22494 +22497 +22498 +22501 +22502 +22505 +22506 +22509 +22510 +22513 +22514 +22517 +22518 +22521 +22522 +22525 +22526 +22529 +22530 +22533 +22534 +22537 +22538 +22541 +22542 +22545 +22546 +22549 +22550 +22553 +22554 +22557 +22558 +22561 +22562 +22565 +22566 +22569 +22570 +22573 +22574 +22577 +22578 +22581 +22582 +22585 +22586 +22589 +22590 +22593 +22594 +22597 +22598 +22601 +22602 +22605 +22606 +22609 +22610 +22613 +22614 +22617 +22618 +22621 +22622 +22625 +22626 +22629 +22630 +22633 +22634 +22637 +22638 +22641 +22642 +22645 +22646 +22649 +22650 +22653 +22654 +22657 +22658 +22661 +22662 +22665 +22666 +22669 +22670 +22671 +22672 +22675 +22676 +22679 +22680 +22683 +22684 +22687 +22688 +22691 +22692 +22695 +22696 +22699 +22700 +22703 +22704 +22707 +22708 +22711 +22712 +22715 +22716 +22719 +22720 +22723 +22724 +22727 +22728 +22731 +22732 +22735 +22736 +22739 +22740 +22743 +22744 +22747 +22748 +22751 +22752 +22755 +22756 +22759 +22760 +22763 +22764 +22767 +22768 +22771 +22772 +22775 +22776 +22779 +22780 +22783 +22784 +22787 +22788 +22791 +22792 +22795 +22796 +22799 +22800 +22803 +22804 +22807 +22808 +22811 +22812 +22815 +22816 +22819 +22820 +22823 +22824 +22827 +22828 +22831 +22832 +22835 +22836 +22839 +22840 +22843 +22844 +22847 +22848 +22851 +22852 +22855 +22856 +22859 +22860 +22863 +22864 +22867 +22868 +22871 +22872 +22875 +22876 +22879 +22880 +22883 +22884 +22887 +22888 +22891 +22892 +22895 +22896 +22899 +22900 +22903 +22904 +22907 +22908 +22911 +22912 +22915 +22916 +22919 +22920 +22923 +22924 +22927 +22926 +22929 +22930 +22933 +22934 +22937 +22938 +22941 +22942 +22945 +22946 +22949 +22950 +22953 +22954 +22957 +22958 +22961 +22962 +22965 +22966 +22969 +22970 +22973 +22974 +22977 +22978 +22981 +22982 +22985 +22986 +22989 +22990 +22993 +22994 +22997 +22998 +23001 +23002 +23005 +23006 +23009 +23010 +23013 +23014 +23017 +23018 +23021 +23022 +23025 +23026 +23029 +23030 +23033 +23034 +23037 +23038 +23041 +23042 +23045 +23046 +23049 +23050 +23053 +23054 +23057 +23058 +23061 +23062 +23065 +23066 +23069 +23070 +23073 +23074 +23077 +23078 +23081 +23082 +23085 +23086 +23089 +23090 +23093 +23094 +23097 +23098 +23101 +23102 +23105 +23106 +23109 +23110 +23113 +23114 +23117 +23118 +23121 +23122 +23125 +23126 +23129 +23130 +23133 +23134 +23137 +23138 +23141 +23142 +23145 +23146 +23149 +23150 +23153 +23154 +23157 +23158 +23161 +23162 +23165 +23166 +23169 +23170 +23173 +23174 +23177 +23178 +23181 +23182 +23183 +23184 +23187 +23188 +23191 +23192 +23195 +23196 +23199 +23200 +23203 +23204 +23207 +23208 +23211 +23212 +23215 +23216 +23219 +23220 +23223 +23224 +23227 +23228 +23231 +23232 +23235 +23236 +23239 +23240 +23243 +23244 +23247 +23248 +23251 +23252 +23255 +23256 +23259 +23260 +23263 +23264 +23267 +23268 +23271 +23272 +23275 +23276 +23279 +23280 +23283 +23284 +23287 +23288 +23291 +23292 +23295 +23296 +23299 +23300 +23303 +23304 +23307 +23308 +23311 +23312 +23315 +23316 +23319 +23320 +23323 +23324 +23327 +23328 +23331 +23332 +23335 +23336 +23339 +23340 +23343 +23344 +23347 +23348 +23351 +23352 +23355 +23356 +23359 +23360 +23363 +23364 +23367 +23368 +23371 +23372 +23375 +23376 +23379 +23380 +23383 +23384 +23387 +23388 +23391 +23392 +23395 +23396 +23399 +23400 +23403 +23404 +23407 +23408 +23411 +23412 +23415 +23416 +23419 +23420 +23423 +23424 +23427 +23428 +23431 +23432 +23435 +23436 +23439 +23438 +23441 +23442 +23445 +23446 +23449 +23450 +23453 +23454 +23457 +23458 +23461 +23462 +23465 +23466 +23469 +23470 +23473 +23474 +23477 +23478 +23481 +23482 +23485 +23486 +23489 +23490 +23493 +23494 +23497 +23498 +23501 +23502 +23505 +23506 +23509 +23510 +23513 +23514 +23517 +23518 +23521 +23522 +23525 +23526 +23529 +23530 +23533 +23534 +23537 +23538 +23541 +23542 +23545 +23546 +23549 +23550 +23553 +23554 +23557 +23558 +23561 +23562 +23565 +23566 +23569 +23570 +23573 +23574 +23577 +23578 +23581 +23582 +23585 +23586 +23589 +23590 +23593 +23594 +23597 +23598 +23601 +23602 +23605 +23606 +23609 +23610 +23613 +23614 +23617 +23618 +23621 +23622 +23625 +23626 +23629 +23630 +23633 +23634 +23637 +23638 +23641 +23642 +23645 +23646 +23649 +23650 +23653 +23654 +23657 +23658 +23661 +23662 +23665 +23666 +23669 +23670 +23673 +23674 +23677 +23678 +23681 +23682 +23685 +23686 +23689 +23690 +23693 +23694 +23695 +23696 +23699 +23700 +23703 +23704 +23707 +23708 +23711 +23712 +23715 +23716 +23719 +23720 +23723 +23724 +23727 +23728 +23731 +23732 +23735 +23736 +23739 +23740 +23743 +23744 +23747 +23748 +23751 +23752 +23755 +23756 +23759 +23760 +23763 +23764 +23767 +23768 +23771 +23772 +23775 +23776 +23779 +23780 +23783 +23784 +23787 +23788 +23791 +23792 +23795 +23796 +23799 +23800 +23803 +23804 +23807 +23808 +23811 +23812 +23815 +23816 +23819 +23820 +23823 +23824 +23827 +23828 +23831 +23832 +23835 +23836 +23839 +23840 +23843 +23844 +23847 +23848 +23851 +23852 +23855 +23856 +23859 +23860 +23863 +23864 +23867 +23868 +23871 +23872 +23875 +23876 +23879 +23880 +23883 +23884 +23887 +23888 +23891 +23892 +23895 +23896 +23899 +23900 +23903 +23904 +23907 +23908 +23911 +23912 +23915 +23916 +23919 +23920 +23923 +23924 +23927 +23928 +23931 +23932 +23935 +23936 +23939 +23940 +23943 +23944 +23947 +23948 +23951 +23950 +23953 +23954 +23957 +23958 +23961 +23962 +23965 +23966 +23969 +23970 +23973 +23974 +23977 +23978 +23981 +23982 +23985 +23986 +23989 +23990 +23993 +23994 +23997 +23998 +24001 +24002 +24005 +24006 +24009 +24010 +24013 +24014 +24017 +24018 +24021 +24022 +24025 +24026 +24029 +24030 +24033 +24034 +24037 +24038 +24041 +24042 +24045 +24046 +24049 +24050 +24053 +24054 +24057 +24058 +24061 +24062 +24065 +24066 +24069 +24070 +24073 +24074 +24077 +24078 +24081 +24082 +24085 +24086 +24089 +24090 +24093 +24094 +24097 +24098 +24101 +24102 +24105 +24106 +24109 +24110 +24113 +24114 +24117 +24118 +24121 +24122 +24125 +24126 +24129 +24130 +24133 +24134 +24137 +24138 +24141 +24142 +24145 +24146 +24149 +24150 +24153 +24154 +24157 +24158 +24161 +24162 +24165 +24166 +24169 +24170 +24173 +24174 +24177 +24178 +24181 +24182 +24185 +24186 +24189 +24190 +24193 +24194 +24197 +24198 +24201 +24202 +24205 +24206 +24207 +24208 +24211 +24212 +24215 +24216 +24219 +24220 +24223 +24224 +24227 +24228 +24231 +24232 +24235 +24236 +24239 +24240 +24243 +24244 +24247 +24248 +24251 +24252 +24255 +24256 +24259 +24260 +24263 +24264 +24267 +24268 +24271 +24272 +24275 +24276 +24279 +24280 +24283 +24284 +24287 +24288 +24291 +24292 +24295 +24296 +24299 +24300 +24303 +24304 +24307 +24308 +24311 +24312 +24315 +24316 +24319 +24320 +24323 +24324 +24327 +24328 +24331 +24332 +24335 +24336 +24339 +24340 +24343 +24344 +24347 +24348 +24351 +24352 +24355 +24356 +24359 +24360 +24363 +24364 +24367 +24368 +24371 +24372 +24375 +24376 +24379 +24380 +24383 +24384 +24387 +24388 +24391 +24392 +24395 +24396 +24399 +24400 +24403 +24404 +24407 +24408 +24411 +24412 +24415 +24416 +24419 +24420 +24423 +24424 +24427 +24428 +24431 +24432 +24435 +24436 +24439 +24440 +24443 +24444 +24447 +24448 +24451 +24452 +24455 +24456 +24459 +24460 +24463 +24462 +24465 +24466 +24469 +24470 +24473 +24474 +24477 +24478 +24481 +24482 +24485 +24486 +24489 +24490 +24493 +24494 +24497 +24498 +24501 +24502 +24505 +24506 +24509 +24510 +24513 +24514 +24517 +24518 +24521 +24522 +24525 +24526 +24529 +24530 +24533 +24534 +24537 +24538 +24541 +24542 +24545 +24546 +24549 +24550 +24553 +24554 +24557 +24558 +24561 +24562 +24565 +24566 +24569 +24570 +24573 +24574 +24577 +24578 +24581 +24582 +24585 +24586 +24589 +24590 +24593 +24594 +24597 +24598 +24601 +24602 +24605 +24606 +24609 +24610 +24613 +24614 +24617 +24618 +24621 +24622 +24625 +24626 +24629 +24630 +24633 +24634 +24637 +24638 +24641 +24642 +24645 +24646 +24649 +24650 +24653 +24654 +24657 +24658 +24661 +24662 +24665 +24666 +24669 +24670 +24673 +24674 +24677 +24678 +24681 +24682 +24685 +24686 +24689 +24690 +24693 +24694 +24697 +24698 +24701 +24702 +24705 +24706 +24709 +24710 +24713 +24714 +24717 +24718 +24719 +24720 +24723 +24724 +24727 +24728 +24731 +24732 +24735 +24736 +24739 +24740 +24743 +24744 +24747 +24748 +24751 +24752 +24755 +24756 +24759 +24760 +24763 +24764 +24767 +24768 +24771 +24772 +24775 +24776 +24779 +24780 +24783 +24784 +24787 +24788 +24791 +24792 +24795 +24796 +24799 +24800 +24803 +24804 +24807 +24808 +24811 +24812 +24815 +24816 +24819 +24820 +24823 +24824 +24827 +24828 +24831 +24832 +24835 +24836 +24839 +24840 +24843 +24844 +24847 +24848 +24851 +24852 +24855 +24856 +24859 +24860 +24863 +24864 +24867 +24868 +24871 +24872 +24875 +24876 +24879 +24880 +24883 +24884 +24887 +24888 +24891 +24892 +24895 +24896 +24899 +24900 +24903 +24904 +24907 +24908 +24911 +24912 +24915 +24916 +24919 +24920 +24923 +24924 +24927 +24928 +24931 +24932 +24935 +24936 +24939 +24940 +24943 +24944 +24947 +24948 +24951 +24952 +24955 +24956 +24959 +24960 +24963 +24964 +24967 +24968 +24971 +24972 +24975 +24974 +24977 +24978 +24981 +24982 +24985 +24986 +24989 +24990 +24993 +24994 +24997 +24998 +25001 +25002 +25005 +25006 +25009 +25010 +25013 +25014 +25017 +25018 +25021 +25022 +25025 +25026 +25029 +25030 +25033 +25034 +25037 +25038 +25041 +25042 +25045 +25046 +25049 +25050 +25053 +25054 +25057 +25058 +25061 +25062 +25065 +25066 +25069 +25070 +25073 +25074 +25077 +25078 +25081 +25082 +25085 +25086 +25089 +25090 +25093 +25094 +25097 +25098 +25101 +25102 +25105 +25106 +25109 +25110 +25113 +25114 +25117 +25118 +25121 +25122 +25125 +25126 +25129 +25130 +25133 +25134 +25137 +25138 +25141 +25142 +25145 +25146 +25149 +25150 +25153 +25154 +25157 +25158 +25161 +25162 +25165 +25166 +25169 +25170 +25173 +25174 +25177 +25178 +25181 +25182 +25185 +25186 +25189 +25190 +25193 +25194 +25197 +25198 +25201 +25202 +25205 +25206 +25209 +25210 +25213 +25214 +25217 +25218 +25221 +25222 +25225 +25226 +25229 +25230 +25231 +25232 +25235 +25236 +25239 +25240 +25243 +25244 +25247 +25248 +25251 +25252 +25255 +25256 +25259 +25260 +25263 +25264 +25267 +25268 +25271 +25272 +25275 +25276 +25279 +25280 +25283 +25284 +25287 +25288 +25291 +25292 +25295 +25296 +25299 +25300 +25303 +25304 +25307 +25308 +25311 +25312 +25315 +25316 +25319 +25320 +25323 +25324 +25327 +25328 +25331 +25332 +25335 +25336 +25339 +25340 +25343 +25344 +25347 +25348 +25351 +25352 +25355 +25356 +25359 +25360 +25363 +25364 +25367 +25368 +25371 +25372 +25375 +25376 +25379 +25380 +25383 +25384 +25387 +25388 +25391 +25392 +25395 +25396 +25399 +25400 +25403 +25404 +25407 +25408 +25411 +25412 +25415 +25416 +25419 +25420 +25423 +25424 +25427 +25428 +25431 +25432 +25435 +25436 +25439 +25440 +25443 +25444 +25447 +25448 +25451 +25452 +25455 +25456 +25459 +25460 +25463 +25464 +25467 +25468 +25471 +25472 +25475 +25476 +25479 +25480 +25483 +25484 +25487 +25486 +25489 +25490 +25493 +25494 +25497 +25498 +25501 +25502 +25505 +25506 +25509 +25510 +25513 +25514 +25517 +25518 +25521 +25522 +25525 +25526 +25529 +25530 +25533 +25534 +25537 +25538 +25541 +25542 +25545 +25546 +25549 +25550 +25553 +25554 +25557 +25558 +25561 +25562 +25565 +25566 +25569 +25570 +25573 +25574 +25577 +25578 +25581 +25582 +25585 +25586 +25589 +25590 +25593 +25594 +25597 +25598 +25601 +25602 +25605 +25606 +25609 +25610 +25613 +25614 +25617 +25618 +25621 +25622 +25625 +25626 +25629 +25630 +25633 +25634 +25637 +25638 +25641 +25642 +25645 +25646 +25649 +25650 +25653 +25654 +25657 +25658 +25661 +25662 +25665 +25666 +25669 +25670 +25673 +25674 +25677 +25678 +25681 +25682 +25685 +25686 +25689 +25690 +25693 +25694 +25697 +25698 +25701 +25702 +25705 +25706 +25709 +25710 +25713 +25714 +25717 +25718 +25721 +25722 +25725 +25726 +25729 +25730 +25733 +25734 +25737 +25738 +25741 +25742 +25743 +25744 +25747 +25748 +25751 +25752 +25755 +25756 +25759 +25760 +25763 +25764 +25767 +25768 +25771 +25772 +25775 +25776 +25779 +25780 +25783 +25784 +25787 +25788 +25791 +25792 +25795 +25796 +25799 +25800 +25803 +25804 +25807 +25808 +25811 +25812 +25815 +25816 +25819 +25820 +25823 +25824 +25827 +25828 +25831 +25832 +25835 +25836 +25839 +25840 +25843 +25844 +25847 +25848 +25851 +25852 +25855 +25856 +25859 +25860 +25863 +25864 +25867 +25868 +25871 +25872 +25875 +25876 +25879 +25880 +25883 +25884 +25887 +25888 +25891 +25892 +25895 +25896 +25899 +25900 +25903 +25904 +25907 +25908 +25911 +25912 +25915 +25916 +25919 +25920 +25923 +25924 +25927 +25928 +25931 +25932 +25935 +25936 +25939 +25940 +25943 +25944 +25947 +25948 +25951 +25952 +25955 +25956 +25959 +25960 +25963 +25964 +25967 +25968 +25971 +25972 +25975 +25976 +25979 +25980 +25983 +25984 +25987 +25988 +25991 +25992 +25995 +25996 +25999 +25998 +26001 +26002 +26005 +26006 +26009 +26010 +26013 +26014 +26017 +26018 +26021 +26022 +26025 +26026 +26029 +26030 +26033 +26034 +26037 +26038 +26041 +26042 +26045 +26046 +26049 +26050 +26053 +26054 +26057 +26058 +26061 +26062 +26065 +26066 +26069 +26070 +26073 +26074 +26077 +26078 +26081 +26082 +26085 +26086 +26089 +26090 +26093 +26094 +26097 +26098 +26101 +26102 +26105 +26106 +26109 +26110 +26113 +26114 +26117 +26118 +26121 +26122 +26125 +26126 +26129 +26130 +26133 +26134 +26137 +26138 +26141 +26142 +26145 +26146 +26149 +26150 +26153 +26154 +26157 +26158 +26161 +26162 +26165 +26166 +26169 +26170 +26173 +26174 +26177 +26178 +26181 +26182 +26185 +26186 +26189 +26190 +26193 +26194 +26197 +26198 +26201 +26202 +26205 +26206 +26209 +26210 +26213 +26214 +26217 +26218 +26221 +26222 +26225 +26226 +26229 +26230 +26233 +26234 +26237 +26238 +26241 +26242 +26245 +26246 +26249 +26250 +26253 +26254 +26255 +26256 +26259 +26260 +26263 +26264 +26267 +26268 +26271 +26272 +26275 +26276 +26279 +26280 +26283 +26284 +26287 +26288 +26291 +26292 +26295 +26296 +26299 +26300 +26303 +26304 +26307 +26308 +26311 +26312 +26315 +26316 +26319 +26320 +26323 +26324 +26327 +26328 +26331 +26332 +26335 +26336 +26339 +26340 +26343 +26344 +26347 +26348 +26351 +26352 +26355 +26356 +26359 +26360 +26363 +26364 +26367 +26368 +26371 +26372 +26375 +26376 +26379 +26380 +26383 +26384 +26387 +26388 +26391 +26392 +26395 +26396 +26399 +26400 +26403 +26404 +26407 +26408 +26411 +26412 +26415 +26416 +26419 +26420 +26423 +26424 +26427 +26428 +26431 +26432 +26435 +26436 +26439 +26440 +26443 +26444 +26447 +26448 +26451 +26452 +26455 +26456 +26459 +26460 +26463 +26464 +26467 +26468 +26471 +26472 +26475 +26476 +26479 +26480 +26483 +26484 +26487 +26488 +26491 +26492 +26495 +26496 +26499 +26500 +26503 +26504 +26507 +26508 +26511 +26510 +26513 +26514 +26517 +26518 +26521 +26522 +26525 +26526 +26529 +26530 +26533 +26534 +26537 +26538 +26541 +26542 +26545 +26546 +26549 +26550 +26553 +26554 +26557 +26558 +26561 +26562 +26565 +26566 +26569 +26570 +26573 +26574 +26577 +26578 +26581 +26582 +26585 +26586 +26589 +26590 +26593 +26594 +26597 +26598 +26601 +26602 +26605 +26606 +26609 +26610 +26613 +26614 +26617 +26618 +26621 +26622 +26625 +26626 +26629 +26630 +26633 +26634 +26637 +26638 +26641 +26642 +26645 +26646 +26649 +26650 +26653 +26654 +26657 +26658 +26661 +26662 +26665 +26666 +26669 +26670 +26673 +26674 +26677 +26678 +26681 +26682 +26685 +26686 +26689 +26690 +26693 +26694 +26697 +26698 +26701 +26702 +26705 +26706 +26709 +26710 +26713 +26714 +26717 +26718 +26721 +26722 +26725 +26726 +26729 +26730 +26733 +26734 +26737 +26738 +26741 +26742 +26745 +26746 +26749 +26750 +26753 +26754 +26757 +26758 +26761 +26762 +26765 +26766 +26767 +26768 +26771 +26772 +26775 +26776 +26779 +26780 +26783 +26784 +26787 +26788 +26791 +26792 +26795 +26796 +26799 +26800 +26803 +26804 +26807 +26808 +26811 +26812 +26815 +26816 +26819 +26820 +26823 +26824 +26827 +26828 +26831 +26832 +26835 +26836 +26839 +26840 +26843 +26844 +26847 +26848 +26851 +26852 +26855 +26856 +26859 +26860 +26863 +26864 +26867 +26868 +26871 +26872 +26875 +26876 +26879 +26880 +26883 +26884 +26887 +26888 +26891 +26892 +26895 +26896 +26899 +26900 +26903 +26904 +26907 +26908 +26911 +26912 +26915 +26916 +26919 +26920 +26923 +26924 +26927 +26928 +26931 +26932 +26935 +26936 +26939 +26940 +26943 +26944 +26947 +26948 +26951 +26952 +26955 +26956 +26959 +26960 +26963 +26964 +26967 +26968 +26971 +26972 +26975 +26976 +26979 +26980 +26983 +26984 +26987 +26988 +26991 +26992 +26995 +26996 +26999 +27000 +27003 +27004 +27007 +27008 +27011 +27012 +27015 +27016 +27019 +27020 +27023 +27022 +27025 +27026 +27029 +27030 +27033 +27034 +27037 +27038 +27041 +27042 +27045 +27046 +27049 +27050 +27053 +27054 +27057 +27058 +27061 +27062 +27065 +27066 +27069 +27070 +27073 +27074 +27077 +27078 +27081 +27082 +27085 +27086 +27089 +27090 +27093 +27094 +27097 +27098 +27101 +27102 +27105 +27106 +27109 +27110 +27113 +27114 +27117 +27118 +27121 +27122 +27125 +27126 +27129 +27130 +27133 +27134 +27137 +27138 +27141 +27142 +27145 +27146 +27149 +27150 +27153 +27154 +27157 +27158 +27161 +27162 +27165 +27166 +27169 +27170 +27173 +27174 +27177 +27178 +27181 +27182 +27185 +27186 +27189 +27190 +27193 +27194 +27197 +27198 +27201 +27202 +27205 +27206 +27209 +27210 +27213 +27214 +27217 +27218 +27221 +27222 +27225 +27226 +27229 +27230 +27233 +27234 +27237 +27238 +27241 +27242 +27245 +27246 +27249 +27250 +27253 +27254 +27257 +27258 +27261 +27262 +27265 +27266 +27269 +27270 +27273 +27274 +27277 +27278 +27279 +27280 +27283 +27284 +27287 +27288 +27291 +27292 +27295 +27296 +27299 +27300 +27303 +27304 +27307 +27308 +27311 +27312 +27315 +27316 +27319 +27320 +27323 +27324 +27327 +27328 +27331 +27332 +27335 +27336 +27339 +27340 +27343 +27344 +27347 +27348 +27351 +27352 +27355 +27356 +27359 +27360 +27363 +27364 +27367 +27368 +27371 +27372 +27375 +27376 +27379 +27380 +27383 +27384 +27387 +27388 +27391 +27392 +27395 +27396 +27399 +27400 +27403 +27404 +27407 +27408 +27411 +27412 +27415 +27416 +27419 +27420 +27423 +27424 +27427 +27428 +27431 +27432 +27435 +27436 +27439 +27440 +27443 +27444 +27447 +27448 +27451 +27452 +27455 +27456 +27459 +27460 +27463 +27464 +27467 +27468 +27471 +27472 +27475 +27476 +27479 +27480 +27483 +27484 +27487 +27488 +27491 +27492 +27495 +27496 +27499 +27500 +27503 +27504 +27507 +27508 +27511 +27512 +27515 +27516 +27519 +27520 +27523 +27524 +27527 +27528 +27531 +27532 +27535 +27534 +27537 +27538 +27541 +27542 +27545 +27546 +27549 +27550 +27553 +27554 +27557 +27558 +27561 +27562 +27565 +27566 +27569 +27570 +27573 +27574 +27577 +27578 +27581 +27582 +27585 +27586 +27589 +27590 +27593 +27594 +27597 +27598 +27601 +27602 +27605 +27606 +27609 +27610 +27613 +27614 +27617 +27618 +27621 +27622 +27625 +27626 +27629 +27630 +27633 +27634 +27637 +27638 +27641 +27642 +27645 +27646 +27649 +27650 +27653 +27654 +27657 +27658 +27661 +27662 +27665 +27666 +27669 +27670 +27673 +27674 +27677 +27678 +27681 +27682 +27685 +27686 +27689 +27690 +27693 +27694 +27697 +27698 +27701 +27702 +27705 +27706 +27709 +27710 +27713 +27714 +27717 +27718 +27721 +27722 +27725 +27726 +27729 +27730 +27733 +27734 +27737 +27738 +27741 +27742 +27745 +27746 +27749 +27750 +27753 +27754 +27757 +27758 +27761 +27762 +27765 +27766 +27769 +27770 +27773 +27774 +27777 +27778 +27781 +27782 +27785 +27786 +27789 +27790 +27791 +27792 +27795 +27796 +27799 +27800 +27803 +27804 +27807 +27808 +27811 +27812 +27815 +27816 +27819 +27820 +27823 +27824 +27827 +27828 +27831 +27832 +27835 +27836 +27839 +27840 +27843 +27844 +27847 +27848 +27851 +27852 +27855 +27856 +27859 +27860 +27863 +27864 +27867 +27868 +27871 +27872 +27875 +27876 +27879 +27880 +27883 +27884 +27887 +27888 +27891 +27892 +27895 +27896 +27899 +27900 +27903 +27904 +27907 +27908 +27911 +27912 +27915 +27916 +27919 +27920 +27923 +27924 +27927 +27928 +27931 +27932 +27935 +27936 +27939 +27940 +27943 +27944 +27947 +27948 +27951 +27952 +27955 +27956 +27959 +27960 +27963 +27964 +27967 +27968 +27971 +27972 +27975 +27976 +27979 +27980 +27983 +27984 +27987 +27988 +27991 +27992 +27995 +27996 +27999 +28000 +28003 +28004 +28007 +28008 +28011 +28012 +28015 +28016 +28019 +28020 +28023 +28024 +28027 +28028 +28031 +28032 +28035 +28036 +28039 +28040 +28043 +28044 +28047 +28046 +28049 +28050 +28053 +28054 +28057 +28058 +28061 +28062 +28065 +28066 +28069 +28070 +28073 +28074 +28077 +28078 +28081 +28082 +28085 +28086 +28089 +28090 +28093 +28094 +28097 +28098 +28101 +28102 +28105 +28106 +28109 +28110 +28113 +28114 +28117 +28118 +28121 +28122 +28125 +28126 +28129 +28130 +28133 +28134 +28137 +28138 +28141 +28142 +28145 +28146 +28149 +28150 +28153 +28154 +28157 +28158 +28161 +28162 +28165 +28166 +28169 +28170 +28173 +28174 +28177 +28178 +28181 +28182 +28185 +28186 +28189 +28190 +28193 +28194 +28197 +28198 +28201 +28202 +28205 +28206 +28209 +28210 +28213 +28214 +28217 +28218 +28221 +28222 +28225 +28226 +28229 +28230 +28233 +28234 +28237 +28238 +28241 +28242 +28245 +28246 +28249 +28250 +28253 +28254 +28257 +28258 +28261 +28262 +28265 +28266 +28269 +28270 +28273 +28274 +28277 +28278 +28281 +28282 +28285 +28286 +28289 +28290 +28293 +28294 +28297 +28298 +28301 +28302 +28303 +28304 +28307 +28308 +28311 +28312 +28315 +28316 +28319 +28320 +28323 +28324 +28327 +28328 +28331 +28332 +28335 +28336 +28339 +28340 +28343 +28344 +28347 +28348 +28351 +28352 +28355 +28356 +28359 +28360 +28363 +28364 +28367 +28368 +28371 +28372 +28375 +28376 +28379 +28380 +28383 +28384 +28387 +28388 +28391 +28392 +28395 +28396 +28399 +28400 +28403 +28404 +28407 +28408 +28411 +28412 +28415 +28416 +28419 +28420 +28423 +28424 +28427 +28428 +28431 +28432 +28435 +28436 +28439 +28440 +28443 +28444 +28447 +28448 +28451 +28452 +28455 +28456 +28459 +28460 +28463 +28464 +28467 +28468 +28471 +28472 +28475 +28476 +28479 +28480 +28483 +28484 +28487 +28488 +28491 +28492 +28495 +28496 +28499 +28500 +28503 +28504 +28507 +28508 +28511 +28512 +28515 +28516 +28519 +28520 +28523 +28524 +28527 +28528 +28531 +28532 +28535 +28536 +28539 +28540 +28543 +28544 +28547 +28548 +28551 +28552 +28555 +28556 +28559 +28558 +28561 +28562 +28565 +28566 +28569 +28570 +28573 +28574 +28577 +28578 +28581 +28582 +28585 +28586 +28589 +28590 +28593 +28594 +28597 +28598 +28601 +28602 +28605 +28606 +28609 +28610 +28613 +28614 +28617 +28618 +28621 +28622 +28625 +28626 +28629 +28630 +28633 +28634 +28637 +28638 +28641 +28642 +28645 +28646 +28649 +28650 +28653 +28654 +28657 +28658 +28661 +28662 +28665 +28666 +28669 +28670 +28673 +28674 +28677 +28678 +28681 +28682 +28685 +28686 +28689 +28690 +28693 +28694 +28697 +28698 +28701 +28702 +28705 +28706 +28709 +28710 +28713 +28714 +28717 +28718 +28721 +28722 +28725 +28726 +28729 +28730 +28733 +28734 +28737 +28738 +28741 +28742 +28745 +28746 +28749 +28750 +28753 +28754 +28757 +28758 +28761 +28762 +28765 +28766 +28769 +28770 +28773 +28774 +28777 +28778 +28781 +28782 +28785 +28786 +28789 +28790 +28793 +28794 +28797 +28798 +28801 +28802 +28805 +28806 +28809 +28810 +28813 +28814 +28815 +28816 +28819 +28820 +28823 +28824 +28827 +28828 +28831 +28832 +28835 +28836 +28839 +28840 +28843 +28844 +28847 +28848 +28851 +28852 +28855 +28856 +28859 +28860 +28863 +28864 +28867 +28868 +28871 +28872 +28875 +28876 +28879 +28880 +28883 +28884 +28887 +28888 +28891 +28892 +28895 +28896 +28899 +28900 +28903 +28904 +28907 +28908 +28911 +28912 +28915 +28916 +28919 +28920 +28923 +28924 +28927 +28928 +28931 +28932 +28935 +28936 +28939 +28940 +28943 +28944 +28947 +28948 +28951 +28952 +28955 +28956 +28959 +28960 +28963 +28964 +28967 +28968 +28971 +28972 +28975 +28976 +28979 +28980 +28983 +28984 +28987 +28988 +28991 +28992 +28995 +28996 +28999 +29000 +29003 +29004 +29007 +29008 +29011 +29012 +29015 +29016 +29019 +29020 +29023 +29024 +29027 +29028 +29031 +29032 +29035 +29036 +29039 +29040 +29043 +29044 +29047 +29048 +29051 +29052 +29055 +29056 +29059 +29060 +29063 +29064 +29067 +29068 +29071 +29070 +29073 +29074 +29077 +29078 +29081 +29082 +29085 +29086 +29089 +29090 +29093 +29094 +29097 +29098 +29101 +29102 +29105 +29106 +29109 +29110 +29113 +29114 +29117 +29118 +29121 +29122 +29125 +29126 +29129 +29130 +29133 +29134 +29137 +29138 +29141 +29142 +29145 +29146 +29149 +29150 +29153 +29154 +29157 +29158 +29161 +29162 +29165 +29166 +29169 +29170 +29173 +29174 +29177 +29178 +29181 +29182 +29185 +29186 +29189 +29190 +29193 +29194 +29197 +29198 +29201 +29202 +29205 +29206 +29209 +29210 +29213 +29214 +29217 +29218 +29221 +29222 +29225 +29226 +29229 +29230 +29233 +29234 +29237 +29238 +29241 +29242 +29245 +29246 +29249 +29250 +29253 +29254 +29257 +29258 +29261 +29262 +29265 +29266 +29269 +29270 +29273 +29274 +29277 +29278 +29281 +29282 +29285 +29286 +29289 +29290 +29293 +29294 +29297 +29298 +29301 +29302 +29305 +29306 +29309 +29310 +29313 +29314 +29317 +29318 +29321 +29322 +29325 +29326 +29327 +29328 +29331 +29332 +29335 +29336 +29339 +29340 +29343 +29344 +29347 +29348 +29351 +29352 +29355 +29356 +29359 +29360 +29363 +29364 +29367 +29368 +29371 +29372 +29375 +29376 +29379 +29380 +29383 +29384 +29387 +29388 +29391 +29392 +29395 +29396 +29399 +29400 +29403 +29404 +29407 +29408 +29411 +29412 +29415 +29416 +29419 +29420 +29423 +29424 +29427 +29428 +29431 +29432 +29435 +29436 +29439 +29440 +29443 +29444 +29447 +29448 +29451 +29452 +29455 +29456 +29459 +29460 +29463 +29464 +29467 +29468 +29471 +29472 +29475 +29476 +29479 +29480 +29483 +29484 +29487 +29488 +29491 +29492 +29495 +29496 +29499 +29500 +29503 +29504 +29507 +29508 +29511 +29512 +29515 +29516 +29519 +29520 +29523 +29524 +29527 +29528 +29531 +29532 +29535 +29536 +29539 +29540 +29543 +29544 +29547 +29548 +29551 +29552 +29555 +29556 +29559 +29560 +29563 +29564 +29567 +29568 +29571 +29572 +29575 +29576 +29579 +29580 +29583 +29582 +29585 +29586 +29589 +29590 +29593 +29594 +29597 +29598 +29601 +29602 +29605 +29606 +29609 +29610 +29613 +29614 +29617 +29618 +29621 +29622 +29625 +29626 +29629 +29630 +29633 +29634 +29637 +29638 +29641 +29642 +29645 +29646 +29649 +29650 +29653 +29654 +29657 +29658 +29661 +29662 +29665 +29666 +29669 +29670 +29673 +29674 +29677 +29678 +29681 +29682 +29685 +29686 +29689 +29690 +29693 +29694 +29697 +29698 +29701 +29702 +29705 +29706 +29709 +29710 +29713 +29714 +29717 +29718 +29721 +29722 +29725 +29726 +29729 +29730 +29733 +29734 +29737 +29738 +29741 +29742 +29745 +29746 +29749 +29750 +29753 +29754 +29757 +29758 +29761 +29762 +29765 +29766 +29769 +29770 +29773 +29774 +29777 +29778 +29781 +29782 +29785 +29786 +29789 +29790 +29793 +29794 +29797 +29798 +29801 +29802 +29805 +29806 +29809 +29810 +29813 +29814 +29817 +29818 +29821 +29822 +29825 +29826 +29829 +29830 +29833 +29834 +29837 +29838 +29839 +29840 +29843 +29844 +29847 +29848 +29851 +29852 +29855 +29856 +29859 +29860 +29863 +29864 +29867 +29868 +29871 +29872 +29875 +29876 +29879 +29880 +29883 +29884 +29887 +29888 +29891 +29892 +29895 +29896 +29899 +29900 +29903 +29904 +29907 +29908 +29911 +29912 +29915 +29916 +29919 +29920 +29923 +29924 +29927 +29928 +29931 +29932 +29935 +29936 +29939 +29940 +29943 +29944 +29947 +29948 +29951 +29952 +29955 +29956 +29959 +29960 +29963 +29964 +29967 +29968 +29971 +29972 +29975 +29976 +29979 +29980 +29983 +29984 +29987 +29988 +29991 +29992 +29995 +29996 +29999 +30000 +30003 +30004 +30007 +30008 +30011 +30012 +30015 +30016 +30019 +30020 +30023 +30024 +30027 +30028 +30031 +30032 +30035 +30036 +30039 +30040 +30043 +30044 +30047 +30048 +30051 +30052 +30055 +30056 +30059 +30060 +30063 +30064 +30067 +30068 +30071 +30072 +30075 +30076 +30079 +30080 +30083 +30084 +30087 +30088 +30091 +30092 +30095 +30094 +30097 +30098 +30101 +30102 +30105 +30106 +30109 +30110 +30113 +30114 +30117 +30118 +30121 +30122 +30125 +30126 +30129 +30130 +30133 +30134 +30137 +30138 +30141 +30142 +30145 +30146 +30149 +30150 +30153 +30154 +30157 +30158 +30161 +30162 +30165 +30166 +30169 +30170 +30173 +30174 +30177 +30178 +30181 +30182 +30185 +30186 +30189 +30190 +30193 +30194 +30197 +30198 +30201 +30202 +30205 +30206 +30209 +30210 +30213 +30214 +30217 +30218 +30221 +30222 +30225 +30226 +30229 +30230 +30233 +30234 +30237 +30238 +30241 +30242 +30245 +30246 +30249 +30250 +30253 +30254 +30257 +30258 +30261 +30262 +30265 +30266 +30269 +30270 +30273 +30274 +30277 +30278 +30281 +30282 +30285 +30286 +30289 +30290 +30293 +30294 +30297 +30298 +30301 +30302 +30305 +30306 +30309 +30310 +30313 +30314 +30317 +30318 +30321 +30322 +30325 +30326 +30329 +30330 +30333 +30334 +30337 +30338 +30341 +30342 +30345 +30346 +30349 +30350 +30351 +30352 +30355 +30356 +30359 +30360 +30363 +30364 +30367 +30368 +30371 +30372 +30375 +30376 +30379 +30380 +30383 +30384 +30387 +30388 +30391 +30392 +30395 +30396 +30399 +30400 +30403 +30404 +30407 +30408 +30411 +30412 +30415 +30416 +30419 +30420 +30423 +30424 +30427 +30428 +30431 +30432 +30435 +30436 +30439 +30440 +30443 +30444 +30447 +30448 +30451 +30452 +30455 +30456 +30459 +30460 +30463 +30464 +30467 +30468 +30471 +30472 +30475 +30476 +30479 +30480 +30483 +30484 +30487 +30488 +30491 +30492 +30495 +30496 +30499 +30500 +30503 +30504 +30507 +30508 +30511 +30512 +30515 +30516 +30519 +30520 +30523 +30524 +30527 +30528 +30531 +30532 +30535 +30536 +30539 +30540 +30543 +30544 +30547 +30548 +30551 +30552 +30555 +30556 +30559 +30560 +30563 +30564 +30567 +30568 +30571 +30572 +30575 +30576 +30579 +30580 +30583 +30584 +30587 +30588 +30591 +30592 +30595 +30596 +30599 +30600 +30603 +30604 +30607 +30606 +30609 +30610 +30613 +30614 +30617 +30618 +30621 +30622 +30625 +30626 +30629 +30630 +30633 +30634 +30637 +30638 +30641 +30642 +30645 +30646 +30649 +30650 +30653 +30654 +30657 +30658 +30661 +30662 +30665 +30666 +30669 +30670 +30673 +30674 +30677 +30678 +30681 +30682 +30685 +30686 +30689 +30690 +30693 +30694 +30697 +30698 +30701 +30702 +30705 +30706 +30709 +30710 +30713 +30714 +30717 +30718 +30721 +30722 +30725 +30726 +30729 +30730 +30733 +30734 +30737 +30738 +30741 +30742 +30745 +30746 +30749 +30750 +30753 +30754 +30757 +30758 +30761 +30762 +30765 +30766 +30769 +30770 +30773 +30774 +30777 +30778 +30781 +30782 +30785 +30786 +30789 +30790 +30793 +30794 +30797 +30798 +30801 +30802 +30805 +30806 +30809 +30810 +30813 +30814 +30817 +30818 +30821 +30822 +30825 +30826 +30829 +30830 +30833 +30834 +30837 +30838 +30841 +30842 +30845 +30846 +30849 +30850 +30853 +30854 +30857 +30858 +30861 +30862 +30863 +30864 +30867 +30868 +30871 +30872 +30875 +30876 +30879 +30880 +30883 +30884 +30887 +30888 +30891 +30892 +30895 +30896 +30899 +30900 +30903 +30904 +30907 +30908 +30911 +30912 +30915 +30916 +30919 +30920 +30923 +30924 +30927 +30928 +30931 +30932 +30935 +30936 +30939 +30940 +30943 +30944 +30947 +30948 +30951 +30952 +30955 +30956 +30959 +30960 +30963 +30964 +30967 +30968 +30971 +30972 +30975 +30976 +30979 +30980 +30983 +30984 +30987 +30988 +30991 +30992 +30995 +30996 +30999 +31000 +31003 +31004 +31007 +31008 +31011 +31012 +31015 +31016 +31019 +31020 +31023 +31024 +31027 +31028 +31031 +31032 +31035 +31036 +31039 +31040 +31043 +31044 +31047 +31048 +31051 +31052 +31055 +31056 +31059 +31060 +31063 +31064 +31067 +31068 +31071 +31072 +31075 +31076 +31079 +31080 +31083 +31084 +31087 +31088 +31091 +31092 +31095 +31096 +31099 +31100 +31103 +31104 +31107 +31108 +31111 +31112 +31115 +31116 +31119 +31118 +31121 +31122 +31125 +31126 +31129 +31130 +31133 +31134 +31137 +31138 +31141 +31142 +31145 +31146 +31149 +31150 +31153 +31154 +31157 +31158 +31161 +31162 +31165 +31166 +31169 +31170 +31173 +31174 +31177 +31178 +31181 +31182 +31185 +31186 +31189 +31190 +31193 +31194 +31197 +31198 +31201 +31202 +31205 +31206 +31209 +31210 +31213 +31214 +31217 +31218 +31221 +31222 +31225 +31226 +31229 +31230 +31233 +31234 +31237 +31238 +31241 +31242 +31245 +31246 +31249 +31250 +31253 +31254 +31257 +31258 +31261 +31262 +31265 +31266 +31269 +31270 +31273 +31274 +31277 +31278 +31281 +31282 +31285 +31286 +31289 +31290 +31293 +31294 +31297 +31298 +31301 +31302 +31305 +31306 +31309 +31310 +31313 +31314 +31317 +31318 +31321 +31322 +31325 +31326 +31329 +31330 +31333 +31334 +31337 +31338 +31341 +31342 +31345 +31346 +31349 +31350 +31353 +31354 +31357 +31358 +31361 +31362 +31365 +31366 +31369 +31370 +31373 +31374 +31375 +31376 +31379 +31380 +31383 +31384 +31387 +31388 +31391 +31392 +31395 +31396 +31399 +31400 +31403 +31404 +31407 +31408 +31411 +31412 +31415 +31416 +31419 +31420 +31423 +31424 +31427 +31428 +31431 +31432 +31435 +31436 +31439 +31440 +31443 +31444 +31447 +31448 +31451 +31452 +31455 +31456 +31459 +31460 +31463 +31464 +31467 +31468 +31471 +31472 +31475 +31476 +31479 +31480 +31483 +31484 +31487 +31488 +31491 +31492 +31495 +31496 +31499 +31500 +31503 +31504 +31507 +31508 +31511 +31512 +31515 +31516 +31519 +31520 +31523 +31524 +31527 +31528 +31531 +31532 +31535 +31536 +31539 +31540 +31543 +31544 +31547 +31548 +31551 +31552 +31555 +31556 +31559 +31560 +31563 +31564 +31567 +31568 +31571 +31572 +31575 +31576 +31579 +31580 +31583 +31584 +31587 +31588 +31591 +31592 +31595 +31596 +31599 +31600 +31603 +31604 +31607 +31608 +31611 +31612 +31615 +31616 +31619 +31620 +31623 +31624 +31627 +31628 +31631 +31630 +31633 +31634 +31637 +31638 +31641 +31642 +31645 +31646 +31649 +31650 +31653 +31654 +31657 +31658 +31661 +31662 +31665 +31666 +31669 +31670 +31673 +31674 +31677 +31678 +31681 +31682 +31685 +31686 +31689 +31690 +31693 +31694 +31697 +31698 +31701 +31702 +31705 +31706 +31709 +31710 +31713 +31714 +31717 +31718 +31721 +31722 +31725 +31726 +31729 +31730 +31733 +31734 +31737 +31738 +31741 +31742 +31745 +31746 +31749 +31750 +31753 +31754 +31757 +31758 +31761 +31762 +31765 +31766 +31769 +31770 +31773 +31774 +31777 +31778 +31781 +31782 +31785 +31786 +31789 +31790 +31793 +31794 +31797 +31798 +31801 +31802 +31805 +31806 +31809 +31810 +31813 +31814 +31817 +31818 +31821 +31822 +31825 +31826 +31829 +31830 +31833 +31834 +31837 +31838 +31841 +31842 +31845 +31846 +31849 +31850 +31853 +31854 +31857 +31858 +31861 +31862 +31865 +31866 +31869 +31870 +31873 +31874 +31877 +31878 +31881 +31882 +31885 +32142 +32143 +32145 +32147 +32149 +32151 +32153 +32155 +32157 +32159 +32161 +32163 +32165 +32167 +32169 +32171 +32173 +32175 +32177 +32179 +32181 +32183 +32185 +32187 +32189 +32191 +32193 +32195 +32197 +32199 +32201 +32203 +32205 +32207 +32209 +32211 +32213 +32215 +32217 +32219 +32221 +32224 +32225 +32142 +32142 +32143 +32146 +32147 +32150 +32151 +32154 +32155 +32158 +32159 +32162 +32163 +32166 +32167 +32170 +32171 +32174 +32175 +32178 +32179 +32182 +32183 +32186 +32187 +32190 +32191 +32194 +32195 +32198 +32199 +32202 +32203 +32206 +32207 +32210 +32211 +32214 +32215 +32218 +32219 +32222 +32223 +32314 +32224 +32224 +32225 +32228 +32229 +32232 +32233 +32236 +32237 +32240 +32241 +32244 +32245 +32248 +32249 +32252 +32253 +32256 +32257 +32260 +32261 +32264 +32265 +32268 +32269 +32272 +32273 +32276 +32277 +32280 +32281 +32284 +32285 +32288 +32289 +32292 +32293 +32296 +32297 +32300 +32301 +32304 +32305 +32308 +32309 +32312 +32313 +32408 +32409 +32411 +32413 +32415 +32417 +32419 +32421 +32423 +32425 +32427 +32429 +32431 +32433 +32435 +32437 +32439 +32441 +32443 +32445 +32447 +32449 +32451 +32454 +32455 +32314 +32315 +32316 +32319 +32320 +32323 +32324 +32327 +32328 +32331 +32332 +32335 +32336 +32339 +32340 +32343 +32344 +32347 +32348 +32351 +32352 +32355 +32356 +32359 +32360 +32363 +32364 +32367 +32368 +32371 +32372 +32375 +32376 +32379 +32380 +32383 +32384 +32387 +32388 +32391 +32392 +32395 +32396 +32399 +32400 +32403 +32404 +32407 +32553 +32554 +32408 +32408 +32409 +32412 +32413 +32416 +32417 +32420 +32421 +32424 +32425 +32428 +32429 +32432 +32433 +32436 +32437 +32440 +32441 +32444 +32445 +32448 +32449 +32452 +32453 +32606 +32608 +32611 +32612 +32454 +32454 +32455 +32458 +32459 +32462 +32463 +32466 +32467 +32470 +32471 +32474 +32475 +32478 +32479 +32482 +32483 +32486 +32487 +32490 +32491 +32494 +32495 +32498 +32499 +32502 +32503 +32506 +32507 +32510 +32511 +32514 +32515 +32518 +32519 +32522 +32523 +32526 +32527 +32530 +32531 +32534 +32535 +32538 +32539 +32542 +32543 +32546 +32547 +32550 +32551 +32553 +32553 +32554 +32557 +32558 +32561 +32562 +32565 +32566 +32569 +32570 +32573 +32574 +32577 +32578 +32581 +32582 +32585 +32586 +32589 +32590 +32593 +32594 +32597 +32598 +32601 +32602 +32605 +32606 +32609 +32610 +32777 +32779 +32782 +32783 +32611 +32611 +32612 +32615 +32616 +32619 +32620 +32623 +32624 +32627 +32628 +32631 +32632 +32635 +32636 +32639 +32640 +32643 +32644 +32647 +32648 +32651 +32652 +32655 +32656 +32659 +32660 +32663 +32664 +32667 +32668 +32671 +32672 +32675 +32676 +32679 +32680 +32683 +32684 +32687 +32688 +32691 +32692 +32695 +32696 +32699 +32700 +32703 +32704 +32707 +32708 +32711 +32712 +32715 +32893 +32894 +32716 +32716 +32717 +32720 +32721 +32724 +32725 +32728 +32729 +32732 +32733 +32736 +32737 +32740 +32741 +32744 +32745 +32748 +32749 +32752 +32753 +32756 +32757 +32760 +32761 +32764 +32765 +32768 +32769 +32772 +32773 +32776 +32777 +32780 +32781 +32966 +32968 +32970 +32972 +32974 +32976 +32978 +32980 +32982 +32984 +32986 +32988 +32990 +32992 +32994 +32996 +32998 +33000 +33002 +33004 +33006 +33008 +33010 +33012 +33014 +33016 +33018 +32782 +32782 +32783 +32786 +32787 +32790 +32791 +32794 +32795 +32798 +32799 +32802 +32803 +32806 +32807 +32810 +32811 +32814 +32815 +32818 +32819 +32822 +32823 +32826 +32827 +32830 +32831 +32834 +32835 +32838 +32839 +32842 +32843 +32846 +32847 +32850 +32851 +32854 +32855 +32858 +32859 +32862 +32863 +32866 +32867 +32870 +32871 +32874 +32875 +32878 +32879 +32882 +32883 +32886 +32887 +32890 +32891 +32893 +32893 +32894 +32897 +32898 +32901 +32902 +32905 +32906 +32909 +32910 +32913 +32914 +32917 +32918 +32921 +32922 +32925 +32926 +32929 +32930 +32933 +32934 +32937 +32938 +32941 +32942 +32945 +32946 +32949 +32950 +32953 +32954 +32957 +32958 +32961 +32962 +32965 +32966 +32969 +32970 +32973 +32974 +32977 +32978 +32981 +32982 +32985 +32986 +32989 +32990 +32993 +32994 +32997 +32998 +33001 +33002 +33005 +33006 +33009 +33010 +33013 +33014 +33017 +33018 +33021 +33022 +33025 +33026 +33029 +33030 +33033 +33034 +33037 +33038 +33041 +33042 +33045 +33046 +33049 +33050 +33053 +33054 +33057 +33058 +33061 +33062 +33065 +33066 +33069 +33070 +33073 +33074 +33077 +33078 +33081 +33082 +33085 +33086 +33089 +33090 +33093 +33094 +33097 +33098 +33101 +33102 +33105 +33106 +33109 +33110 +33113 +33114 +33117 +33118 +33121 +33122 +33125 +33126 +33129 +33130 +33133 +33377 +33378 +33134 +33134 +33135 +33138 +33139 +33142 +33143 +33146 +33147 +33150 +33151 +33154 +33155 +33158 +33159 +33162 +33163 +33166 +33167 +33170 +33171 +33174 +33175 +33178 +33179 +33182 +33183 +33186 +33187 +33190 +33191 +33194 +33195 +33198 +33199 +33202 +33203 +33206 +33207 +33210 +33211 +33214 +33215 +33218 +33219 +33222 +33223 +33226 +33227 +33230 +33231 +33234 +33235 +33238 +33239 +33242 +33243 +33246 +33247 +33250 +33251 +33254 +33255 +33258 +33259 +33262 +33263 +33266 +33267 +33270 +33271 +33274 +33275 +33278 +33279 +33282 +33283 +33286 +33287 +33290 +33291 +33294 +33295 +33298 +33299 +33302 +33303 +33306 +33307 +33310 +33311 +33314 +33315 +33318 +33319 +33322 +33323 +33326 +33327 +33330 +33331 +33334 +33335 +33338 +33339 +33342 +33343 +33346 +33347 +33350 +33351 +33354 +33355 +33358 +33359 +33362 +33363 +33366 +33367 +33370 +33371 +33374 +33375 +33377 +33377 +33378 +33381 +33382 +33385 +33386 +33389 +33390 +33393 +33394 +33397 +33398 +33401 +33402 +33405 +33406 +33409 +33410 +33413 +33414 +33417 +33418 +33421 +33422 +33425 +33426 +33429 +33430 +33433 +33434 +33437 +33438 +33441 +33442 +33445 +33446 +33449 +33450 +33453 +33454 +33457 +33458 +33461 +33462 +33465 +33466 +33469 +33470 +33473 +33474 +33477 +33478 +33481 +33482 +33485 +33486 +33489 +33490 +33493 +33494 +33497 +33498 +33501 +33502 +33505 +33506 +33509 +33510 +33513 +33514 +33517 +33518 +33521 +33522 +33525 +33526 +33529 +33530 +33533 +33534 +33537 +33538 +33541 +33542 +33545 +33546 +33549 +33550 +33553 +33554 +33557 +33558 +33561 +33562 +33565 +33566 +33569 +33570 +33573 +33574 +33577 +33578 +33581 +33582 +33585 +33586 +33589 +33590 +33593 +33594 +33597 +33598 +33601 +33602 +33605 +33606 +33609 +33610 +33613 +33614 +33617 +33618 +33621 +33622 +33625 +33877 +33877 +33626 +33626 +33627 +33630 +33631 +33634 +33635 +33638 +33639 +33642 +33643 +33646 +33647 +33650 +33651 +33654 +33655 +33658 +33659 +33662 +33663 +33666 +33667 +33670 +33671 +33674 +33675 +33678 +33679 +33682 +33683 +33686 +33687 +33690 +33691 +33694 +33695 +33698 +33699 +33702 +33703 +33706 +33707 +33710 +33711 +33714 +33715 +33718 +33719 +33722 +33723 +33726 +33727 +33730 +33731 +33734 +33735 +33738 +33739 +33742 +33743 +33746 +33747 +33750 +33751 +33754 +33755 +33758 +33759 +33762 +33763 +33766 +33767 +33770 +33771 +33774 +33775 +33778 +33779 +33782 +33783 +33786 +33787 +33790 +33791 +33794 +33795 +33798 +33799 +33802 +33803 +33806 +33807 +33810 +33811 +33814 +33815 +33818 +33819 +33822 +33823 +33826 +33827 +33830 +33831 +33834 +33835 +33838 +33839 +33842 +33843 +33846 +33847 +33850 +33851 +33854 +33855 +33858 +33859 +33862 +33863 +33866 +33867 +33870 +33871 +33874 +33875 +33878 +33877 +33880 +33881 +33884 +33885 +33888 +33889 +33892 +33893 +33896 +33897 +33900 +33901 +33904 +33905 +33908 +33909 +33912 +33913 +33916 +33917 +33920 +33921 +33924 +33925 +33928 +33929 +33932 +33933 +33936 +33937 +33940 +33941 +33944 +33945 +33948 +33949 +33952 +33953 +33956 +33957 +33960 +33961 +33964 +33965 +33968 +33969 +33972 +33973 +33976 +33977 +33980 +33981 +33984 +33985 +33988 +33989 +33992 +33993 +33996 +33997 +34000 +34001 +34004 +34005 +34008 +34009 +34012 +34013 +34016 +34017 +34020 +34021 +34024 +34025 +34028 +34029 +34032 +34033 +34036 +34037 +34040 +34041 +34044 +34045 +34048 +34049 +34052 +34053 +34056 +34057 +34060 +34061 +34064 +34065 +34068 +34069 +34072 +34073 +34076 +34077 +34080 +34081 +34084 +34085 +34088 +34089 +34092 +34093 +34096 +34097 +34100 +34101 +34104 +34105 +34108 +34109 +34112 +34113 +34116 +34117 +34120 +34121 +34124 +34125 +34128 +34129 +34132 +34133 +34134 +34135 +34138 +34139 +34142 +34143 +34146 +34147 +34150 +34151 +34154 +34155 +34158 +34159 +34162 +34163 +34166 +34167 +34170 +34171 +34174 +34175 +34178 +34179 +34182 +34183 +34186 +34187 +34190 +34191 +34194 +34195 +34198 +34199 +34202 +34203 +34206 +34207 +34210 +34211 +34214 +34215 +34218 +34219 +34222 +34223 +34226 +34227 +34230 +34231 +34234 +34235 +34238 +34239 +34242 +34243 +34246 +34247 +34250 +34251 +34254 +34255 +34258 +34259 +34262 +34263 +34266 +34267 +34270 +34271 +34274 +34275 +34278 +34279 +34282 +34283 +34286 +34287 +34290 +34291 +34294 +34295 +34298 +34299 +34302 +34303 +34306 +34307 +34310 +34311 +34314 +34315 +34318 +34319 +34322 +34323 +34326 +34327 +34330 +34331 +34334 +34335 +34338 +34339 +34342 +34343 +34346 +34347 +34350 +34351 +34354 +34355 +34358 +34359 +34362 +34363 +34366 +34367 +34370 +34371 +34374 +34375 +34378 +34379 +34382 +34383 +34386 +34387 +34390 +34389 +34392 +34393 +34396 +34397 +34400 +34401 +34404 +34405 +34408 +34409 +34412 +34413 +34416 +34417 +34420 +34421 +34424 +34425 +34428 +34429 +34432 +34433 +34436 +34437 +34440 +34441 +34444 +34445 +34448 +34449 +34452 +34453 +34456 +34457 +34460 +34461 +34464 +34465 +34468 +34469 +34472 +34473 +34476 +34477 +34480 +34481 +34484 +34485 +34488 +34489 +34492 +34493 +34496 +34497 +34500 +34501 +34504 +34505 +34508 +34509 +34512 +34513 +34516 +34517 +34520 +34521 +34524 +34525 +34528 +34529 +34532 +34533 +34536 +34537 +34540 +34541 +34544 +34545 +34548 +34549 +34552 +34553 +34556 +34557 +34560 +34561 +34564 +34565 +34568 +34569 +34572 +34573 +34576 +34577 +34580 +34581 +34584 +34585 +34588 +34589 +34592 +34593 +34596 +34597 +34600 +34601 +34604 +34605 +34608 +34609 +34612 +34613 +34616 +34617 +34620 +34621 +34624 +34625 +34628 +34629 +34632 +34633 +34636 +34637 +34640 +34641 +34644 +34645 +34646 +34647 +34650 +34651 +34654 +34655 +34658 +34659 +34662 +34663 +34666 +34667 +34670 +34671 +34674 +34675 +34678 +34679 +34682 +34683 +34686 +34687 +34690 +34691 +34694 +34695 +34698 +34699 +34702 +34703 +34706 +34707 +34710 +34711 +34714 +34715 +34718 +34719 +34722 +34723 +34726 +34727 +34730 +34731 +34734 +34735 +34738 +34739 +34742 +34743 +34746 +34747 +34750 +34751 +34754 +34755 +34758 +34759 +34762 +34763 +34766 +34767 +34770 +34771 +34774 +34775 +34778 +34779 +34782 +34783 +34786 +34787 +34790 +34791 +34794 +34795 +34798 +34799 +34802 +34803 +34806 +34807 +34810 +34811 +34814 +34815 +34818 +34819 +34822 +34823 +34826 +34827 +34830 +34831 +34834 +34835 +34838 +34839 +34842 +34843 +34846 +34847 +34850 +34851 +34854 +34855 +34858 +34859 +34862 +34863 +34866 +34867 +34870 +34871 +34874 +34875 +34878 +34879 +34882 +34883 +34886 +34887 +34890 +34891 +34894 +34895 +34898 +34899 +34902 +34901 +34904 +34905 +34908 +34909 +34912 +34913 +34916 +34917 +34920 +34921 +34924 +34925 +34928 +34929 +34932 +34933 +34936 +34937 +34940 +34941 +34944 +34945 +34948 +34949 +34952 +34953 +34956 +34957 +34960 +34961 +34964 +34965 +34968 +34969 +34972 +34973 +34976 +34977 +34980 +34981 +34984 +34985 +34988 +34989 +34992 +34993 +34996 +34997 +35000 +35001 +35004 +35005 +35008 +35009 +35012 +35013 +35016 +35017 +35020 +35021 +35024 +35025 +35028 +35029 +35032 +35033 +35036 +35037 +35040 +35041 +35044 +35045 +35048 +35049 +35052 +35053 +35056 +35057 +35060 +35061 +35064 +35065 +35068 +35069 +35072 +35073 +35076 +35077 +35080 +35081 +35084 +35085 +35088 +35089 +35092 +35093 +35096 +35097 +35100 +35101 +35104 +35105 +35108 +35109 +35112 +35113 +35116 +35117 +35120 +35121 +35124 +35125 +35128 +35129 +35132 +35133 +35136 +35137 +35140 +35141 +35144 +35145 +35148 +35149 +35152 +35153 +35156 +35157 +35158 +35159 +35162 +35163 +35166 +35167 +35170 +35171 +35174 +35175 +35178 +35179 +35182 +35183 +35186 +35187 +35190 +35191 +35194 +35195 +35198 +35199 +35202 +35203 +35206 +35207 +35210 +35211 +35214 +35215 +35218 +35219 +35222 +35223 +35226 +35227 +35230 +35231 +35234 +35235 +35238 +35239 +35242 +35243 +35246 +35247 +35250 +35251 +35254 +35255 +35258 +35259 +35262 +35263 +35266 +35267 +35270 +35271 +35274 +35275 +35278 +35279 +35282 +35283 +35286 +35287 +35290 +35291 +35294 +35295 +35298 +35299 +35302 +35303 +35306 +35307 +35310 +35311 +35314 +35315 +35318 +35319 +35322 +35323 +35326 +35327 +35330 +35331 +35334 +35335 +35338 +35339 +35342 +35343 +35346 +35347 +35350 +35351 +35354 +35355 +35358 +35359 +35362 +35363 +35366 +35367 +35370 +35371 +35374 +35375 +35378 +35379 +35382 +35383 +35386 +35387 +35390 +35391 +35394 +35395 +35398 +35399 +35402 +35403 +35406 +35407 +35410 +35411 +35414 +35413 +35416 +35417 +35420 +35421 +35424 +35425 +35428 +35429 +35432 +35433 +35436 +35437 +35440 +35441 +35444 +35445 +35448 +35449 +35452 +35453 +35456 +35457 +35460 +35461 +35464 +35465 +35468 +35469 +35472 +35473 +35476 +35477 +35480 +35481 +35484 +35485 +35488 +35489 +35492 +35493 +35496 +35497 +35500 +35501 +35504 +35505 +35508 +35509 +35512 +35513 +35516 +35517 +35520 +35521 +35524 +35525 +35528 +35529 +35532 +35533 +35536 +35537 +35540 +35541 +35544 +35545 +35548 +35549 +35552 +35553 +35556 +35557 +35560 +35561 +35564 +35565 +35568 +35569 +35572 +35573 +35576 +35577 +35580 +35581 +35584 +35585 +35588 +35589 +35592 +35593 +35596 +35597 +35600 +35601 +35604 +35605 +35608 +35609 +35612 +35613 +35616 +35617 +35620 +35621 +35624 +35625 +35628 +35629 +35632 +35633 +35636 +35637 +35640 +35641 +35644 +35645 +35648 +35649 +35652 +35653 +35656 +35657 +35660 +35661 +35664 +35665 +35668 +35669 +35670 +35671 +35674 +35675 +35678 +35679 +35682 +35683 +35686 +35687 +35690 +35691 +35694 +35695 +35698 +35699 +35702 +35703 +35706 +35707 +35710 +35711 +35714 +35715 +35718 +35719 +35722 +35723 +35726 +35727 +35730 +35731 +35734 +35735 +35738 +35739 +35742 +35743 +35746 +35747 +35750 +35751 +35754 +35755 +35758 +35759 +35762 +35763 +35766 +35767 +35770 +35771 +35774 +35775 +35778 +35779 +35782 +35783 +35786 +35787 +35790 +35791 +35794 +35795 +35798 +35799 +35802 +35803 +35806 +35807 +35810 +35811 +35814 +35815 +35818 +35819 +35822 +35823 +35826 +35827 +35830 +35831 +35834 +35835 +35838 +35839 +35842 +35843 +35846 +35847 +35850 +35851 +35854 +35855 +35858 +35859 +35862 +35863 +35866 +35867 +35870 +35871 +35874 +35875 +35878 +35879 +35882 +35883 +35886 +35887 +35890 +35891 +35894 +35895 +35898 +35899 +35902 +35903 +35906 +35907 +35910 +35911 +35914 +35915 +35918 +35919 +35922 +35923 +35926 +35925 +35928 +35929 +35932 +35933 +35936 +35937 +35940 +35941 +35944 +35945 +35948 +35949 +35952 +35953 +35956 +35957 +35960 +35961 +35964 +35965 +35968 +35969 +35972 +35973 +35976 +35977 +35980 +35981 +35984 +35985 +35988 +35989 +35992 +35993 +35996 +35997 +36000 +36001 +36004 +36005 +36008 +36009 +36012 +36013 +36016 +36017 +36020 +36021 +36024 +36025 +36028 +36029 +36032 +36033 +36036 +36037 +36040 +36041 +36044 +36045 +36048 +36049 +36052 +36053 +36056 +36057 +36060 +36061 +36064 +36065 +36068 +36069 +36072 +36073 +36076 +36077 +36080 +36081 +36084 +36085 +36088 +36089 +36092 +36093 +36096 +36097 +36100 +36101 +36104 +36105 +36108 +36109 +36112 +36113 +36116 +36117 +36120 +36121 +36124 +36125 +36128 +36129 +36132 +36133 +36136 +36137 +36140 +36141 +36144 +36145 +36148 +36149 +36152 +36153 +36156 +36157 +36160 +36161 +36164 +36165 +36168 +36169 +36172 +36173 +36176 +36177 +36180 +36181 +36182 +36183 +36186 +36187 +36190 +36191 +36194 +36195 +36198 +36199 +36202 +36203 +36206 +36207 +36210 +36211 +36214 +36215 +36218 +36219 +36222 +36223 +36226 +36227 +36230 +36231 +36234 +36235 +36238 +36239 +36242 +36243 +36246 +36247 +36250 +36251 +36254 +36255 +36258 +36259 +36262 +36263 +36266 +36267 +36270 +36271 +36274 +36275 +36278 +36279 +36282 +36283 +36286 +36287 +36290 +36291 +36294 +36295 +36298 +36299 +36302 +36303 +36306 +36307 +36310 +36311 +36314 +36315 +36318 +36319 +36322 +36323 +36326 +36327 +36330 +36331 +36334 +36335 +36338 +36339 +36342 +36343 +36346 +36347 +36350 +36351 +36354 +36355 +36358 +36359 +36362 +36363 +36366 +36367 +36370 +36371 +36374 +36375 +36378 +36379 +36382 +36383 +36386 +36387 +36390 +36391 +36394 +36395 +36398 +36399 +36402 +36403 +36406 +36407 +36410 +36411 +36414 +36415 +36418 +36419 +36422 +36423 +36426 +36427 +36430 +36431 +36434 +36435 +36438 +36437 +36440 +36441 +36444 +36445 +36448 +36449 +36452 +36453 +36456 +36457 +36460 +36461 +36464 +36465 +36468 +36469 +36472 +36473 +36476 +36477 +36480 +36481 +36484 +36485 +36488 +36489 +36492 +36493 +36496 +36497 +36500 +36501 +36504 +36505 +36508 +36509 +36512 +36513 +36516 +36517 +36520 +36521 +36524 +36525 +36528 +36529 +36532 +36533 +36536 +36537 +36540 +36541 +36544 +36545 +36548 +36549 +36552 +36553 +36556 +36557 +36560 +36561 +36564 +36565 +36568 +36569 +36572 +36573 +36576 +36577 +36580 +36581 +36584 +36585 +36588 +36589 +36592 +36593 +36596 +36597 +36600 +36601 +36604 +36605 +36608 +36609 +36612 +36613 +36616 +36617 +36620 +36621 +36624 +36625 +36628 +36629 +36632 +36633 +36636 +36637 +36640 +36641 +36644 +36645 +36648 +36649 +36652 +36653 +36656 +36657 +36660 +36661 +36664 +36665 +36668 +36669 +36672 +36673 +36676 +36677 +36680 +36681 +36684 +36685 +36688 +36689 +36692 +36693 +36694 +36695 +36698 +36699 +36702 +36703 +36706 +36707 +36710 +36711 +36714 +36715 +36718 +36719 +36722 +36723 +36726 +36727 +36730 +36731 +36734 +36735 +36738 +36739 +36742 +36743 +36746 +36747 +36750 +36751 +36754 +36755 +36758 +36759 +36762 +36763 +36766 +36767 +36770 +36771 +36774 +36775 +36778 +36779 +36782 +36783 +36786 +36787 +36790 +36791 +36794 +36795 +36798 +36799 +36802 +36803 +36806 +36807 +36810 +36811 +36814 +36815 +36818 +36819 +36822 +36823 +36826 +36827 +36830 +36831 +36834 +36835 +36838 +36839 +36842 +36843 +36846 +36847 +36850 +36851 +36854 +36855 +36858 +36859 +36862 +36863 +36866 +36867 +36870 +36871 +36874 +36875 +36878 +36879 +36882 +36883 +36886 +36887 +36890 +36891 +36894 +36895 +36898 +36899 +36902 +36903 +36906 +36907 +36910 +36911 +36914 +36915 +36918 +36919 +36922 +36923 +36926 +36927 +36930 +36931 +36934 +36935 +36938 +36939 +36942 +36943 +36946 +36947 +36950 +36949 +36952 +36953 +36956 +36957 +36960 +36961 +36964 +36965 +36968 +36969 +36972 +36973 +36976 +36977 +36980 +36981 +36984 +36985 +36988 +36989 +36992 +36993 +36996 +36997 +37000 +37001 +37004 +37005 +37008 +37009 +37012 +37013 +37016 +37017 +37020 +37021 +37024 +37025 +37028 +37029 +37032 +37033 +37036 +37037 +37040 +37041 +37044 +37045 +37048 +37049 +37052 +37053 +37056 +37057 +37060 +37061 +37064 +37065 +37068 +37069 +37072 +37073 +37076 +37077 +37080 +37081 +37084 +37085 +37088 +37089 +37092 +37093 +37096 +37097 +37100 +37101 +37104 +37105 +37108 +37109 +37112 +37113 +37116 +37117 +37120 +37121 +37124 +37125 +37128 +37129 +37132 +37133 +37136 +37137 +37140 +37141 +37144 +37145 +37148 +37149 +37152 +37153 +37156 +37157 +37160 +37161 +37164 +37165 +37168 +37169 +37172 +37173 +37176 +37177 +37180 +37181 +37184 +37185 +37188 +37189 +37192 +37193 +37196 +37197 +37200 +37201 +37204 +37205 +37206 +37207 +37210 +37211 +37214 +37215 +37218 +37219 +37222 +37223 +37226 +37227 +37230 +37231 +37234 +37235 +37238 +37239 +37242 +37243 +37246 +37247 +37250 +37251 +37254 +37255 +37258 +37259 +37262 +37263 +37266 +37267 +37270 +37271 +37274 +37275 +37278 +37279 +37282 +37283 +37286 +37287 +37290 +37291 +37294 +37295 +37298 +37299 +37302 +37303 +37306 +37307 +37310 +37311 +37314 +37315 +37318 +37319 +37322 +37323 +37326 +37327 +37330 +37331 +37334 +37335 +37338 +37339 +37342 +37343 +37346 +37347 +37350 +37351 +37354 +37355 +37358 +37359 +37362 +37363 +37366 +37367 +37370 +37371 +37374 +37375 +37378 +37379 +37382 +37383 +37386 +37387 +37390 +37391 +37394 +37395 +37398 +37399 +37402 +37403 +37406 +37407 +37410 +37411 +37414 +37415 +37418 +37419 +37422 +37423 +37426 +37427 +37430 +37431 +37434 +37435 +37438 +37439 +37442 +37443 +37446 +37447 +37450 +37451 +37454 +37455 +37458 +37459 +37462 +37461 +37464 +37465 +37468 +37469 +37472 +37473 +37476 +37477 +37480 +37481 +37484 +37485 +37488 +37489 +37492 +37493 +37496 +37497 +37500 +37501 +37504 +37505 +37508 +37509 +37512 +37513 +37516 +37517 +37520 +37521 +37524 +37525 +37528 +37529 +37532 +37533 +37536 +37537 +37540 +37541 +37544 +37545 +37548 +37549 +37552 +37553 +37556 +37557 +37560 +37561 +37564 +37565 +37568 +37569 +37572 +37573 +37576 +37577 +37580 +37581 +37584 +37585 +37588 +37589 +37592 +37593 +37596 +37597 +37600 +37601 +37604 +37605 +37608 +37609 +37612 +37613 +37616 +37617 +37620 +37621 +37624 +37625 +37628 +37629 +37632 +37633 +37636 +37637 +37640 +37641 +37644 +37645 +37648 +37649 +37652 +37653 +37656 +37657 +37660 +37661 +37664 +37665 +37668 +37669 +37672 +37673 +37676 +37677 +37680 +37681 +37684 +37685 +37688 +37689 +37692 +37693 +37696 +37697 +37700 +37701 +37704 +37705 +37708 +37709 +37712 +37713 +37716 +37717 +37718 +37719 +37722 +37723 +37726 +37727 +37730 +37731 +37734 +37735 +37738 +37739 +37742 +37743 +37746 +37747 +37750 +37751 +37754 +37755 +37758 +37759 +37762 +37763 +37766 +37767 +37770 +37771 +37774 +37775 +37778 +37779 +37782 +37783 +37786 +37787 +37790 +37791 +37794 +37795 +37798 +37799 +37802 +37803 +37806 +37807 +37810 +37811 +37814 +37815 +37818 +37819 +37822 +37823 +37826 +37827 +37830 +37831 +37834 +37835 +37838 +37839 +37842 +37843 +37846 +37847 +37850 +37851 +37854 +37855 +37858 +37859 +37862 +37863 +37866 +37867 +37870 +37871 +37874 +37875 +37878 +37879 +37882 +37883 +37886 +37887 +37890 +37891 +37894 +37895 +37898 +37899 +37902 +37903 +37906 +37907 +37910 +37911 +37914 +37915 +37918 +37919 +37922 +37923 +37926 +37927 +37930 +37931 +37934 +37935 +37938 +37939 +37942 +37943 +37946 +37947 +37950 +37951 +37954 +37955 +37958 +37959 +37962 +37963 +37966 +37967 +37970 +37971 +37974 +37973 +37976 +37977 +37980 +37981 +37984 +37985 +37988 +37989 +37992 +37993 +37996 +37997 +38000 +38001 +38004 +38005 +38008 +38009 +38012 +38013 +38016 +38017 +38020 +38021 +38024 +38025 +38028 +38029 +38032 +38033 +38036 +38037 +38040 +38041 +38044 +38045 +38048 +38049 +38052 +38053 +38056 +38057 +38060 +38061 +38064 +38065 +38068 +38069 +38072 +38073 +38076 +38077 +38080 +38081 +38084 +38085 +38088 +38089 +38092 +38093 +38096 +38097 +38100 +38101 +38104 +38105 +38108 +38109 +38112 +38113 +38116 +38117 +38120 +38121 +38124 +38125 +38128 +38129 +38132 +38133 +38136 +38137 +38140 +38141 +38144 +38145 +38148 +38149 +38152 +38153 +38156 +38157 +38160 +38161 +38164 +38165 +38168 +38169 +38172 +38173 +38176 +38177 +38180 +38181 +38184 +38185 +38188 +38189 +38192 +38193 +38196 +38197 +38200 +38201 +38204 +38205 +38208 +38209 +38212 +38213 +38216 +38217 +38220 +38221 +38224 +38225 +38228 +38229 +38230 +38231 +38234 +38235 +38238 +38239 +38242 +38243 +38246 +38247 +38250 +38251 +38254 +38255 +38258 +38259 +38262 +38263 +38266 +38267 +38270 +38271 +38274 +38275 +38278 +38279 +38282 +38283 +38286 +38287 +38290 +38291 +38294 +38295 +38298 +38299 +38302 +38303 +38306 +38307 +38310 +38311 +38314 +38315 +38318 +38319 +38322 +38323 +38326 +38327 +38330 +38331 +38334 +38335 +38338 +38339 +38342 +38343 +38346 +38347 +38350 +38351 +38354 +38355 +38358 +38359 +38362 +38363 +38366 +38367 +38370 +38371 +38374 +38375 +38378 +38379 +38382 +38383 +38386 +38387 +38390 +38391 +38394 +38395 +38398 +38399 +38402 +38403 +38406 +38407 +38410 +38411 +38414 +38415 +38418 +38419 +38422 +38423 +38426 +38427 +38430 +38431 +38434 +38435 +38438 +38439 +38442 +38443 +38446 +38447 +38450 +38451 +38454 +38455 +38458 +38459 +38462 +38463 +38466 +38467 +38470 +38471 +38474 +38475 +38478 +38479 +38482 +38483 +38486 +38485 +38488 +38489 +38492 +38493 +38496 +38497 +38500 +38501 +38504 +38505 +38508 +38509 +38512 +38513 +38516 +38517 +38520 +38521 +38524 +38525 +38528 +38529 +38532 +38533 +38536 +38537 +38540 +38541 +38544 +38545 +38548 +38549 +38552 +38553 +38556 +38557 +38560 +38561 +38564 +38565 +38568 +38569 +38572 +38573 +38576 +38577 +38580 +38581 +38584 +38585 +38588 +38589 +38592 +38593 +38596 +38597 +38600 +38601 +38604 +38605 +38608 +38609 +38612 +38613 +38616 +38617 +38620 +38621 +38624 +38625 +38628 +38629 +38632 +38633 +38636 +38637 +38640 +38641 +38644 +38645 +38648 +38649 +38652 +38653 +38656 +38657 +38660 +38661 +38664 +38665 +38668 +38669 +38672 +38673 +38676 +38677 +38680 +38681 +38684 +38685 +38688 +38689 +38692 +38693 +38696 +38697 +38700 +38701 +38704 +38705 +38708 +38709 +38712 +38713 +38716 +38717 +38720 +38721 +38724 +38725 +38728 +38729 +38732 +38733 +38736 +38737 +38740 +38741 +38742 +38743 +38746 +38747 +38750 +38751 +38754 +38755 +38758 +38759 +38762 +38763 +38766 +38767 +38770 +38771 +38774 +38775 +38778 +38779 +38782 +38783 +38786 +38787 +38790 +38791 +38794 +38795 +38798 +38799 +38802 +38803 +38806 +38807 +38810 +38811 +38814 +38815 +38818 +38819 +38822 +38823 +38826 +38827 +38830 +38831 +38834 +38835 +38838 +38839 +38842 +38843 +38846 +38847 +38850 +38851 +38854 +38855 +38858 +38859 +38862 +38863 +38866 +38867 +38870 +38871 +38874 +38875 +38878 +38879 +38882 +38883 +38886 +38887 +38890 +38891 +38894 +38895 +38898 +38899 +38902 +38903 +38906 +38907 +38910 +38911 +38914 +38915 +38918 +38919 +38922 +38923 +38926 +38927 +38930 +38931 +38934 +38935 +38938 +38939 +38942 +38943 +38946 +38947 +38950 +38951 +38954 +38955 +38958 +38959 +38962 +38963 +38966 +38967 +38970 +38971 +38974 +38975 +38978 +38979 +38982 +38983 +38986 +38987 +38990 +38991 +38994 +38995 +38998 +38997 +39000 +39001 +39004 +39005 +39008 +39009 +39012 +39013 +39016 +39017 +39020 +39021 +39024 +39025 +39028 +39029 +39032 +39033 +39036 +39037 +39040 +39041 +39044 +39045 +39048 +39049 +39052 +39053 +39056 +39057 +39060 +39061 +39064 +39065 +39068 +39069 +39072 +39073 +39076 +39077 +39080 +39081 +39084 +39085 +39088 +39089 +39092 +39093 +39096 +39097 +39100 +39101 +39104 +39105 +39108 +39109 +39112 +39113 +39116 +39117 +39120 +39121 +39124 +39125 +39128 +39129 +39132 +39133 +39136 +39137 +39140 +39141 +39144 +39145 +39148 +39149 +39152 +39153 +39156 +39157 +39160 +39161 +39164 +39165 +39168 +39169 +39172 +39173 +39176 +39177 +39180 +39181 +39184 +39185 +39188 +39189 +39192 +39193 +39196 +39197 +39200 +39201 +39204 +39205 +39208 +39209 +39212 +39213 +39216 +39217 +39220 +39221 +39224 +39225 +39228 +39229 +39232 +39233 +39236 +39237 +39240 +39241 +39244 +39245 +39248 +39249 +39252 +39253 +39254 +39255 +39258 +39259 +39262 +39263 +39266 +39267 +39270 +39271 +39274 +39275 +39278 +39279 +39282 +39283 +39286 +39287 +39290 +39291 +39294 +39295 +39298 +39299 +39302 +39303 +39306 +39307 +39310 +39311 +39314 +39315 +39318 +39319 +39322 +39323 +39326 +39327 +39330 +39331 +39334 +39335 +39338 +39339 +39342 +39343 +39346 +39347 +39350 +39351 +39354 +39355 +39358 +39359 +39362 +39363 +39366 +39367 +39370 +39371 +39374 +39375 +39378 +39379 +39382 +39383 +39386 +39387 +39390 +39391 +39394 +39395 +39398 +39399 +39402 +39403 +39406 +39407 +39410 +39411 +39414 +39415 +39418 +39419 +39422 +39423 +39426 +39427 +39430 +39431 +39434 +39435 +39438 +39439 +39442 +39443 +39446 +39447 +39450 +39451 +39454 +39455 +39458 +39459 +39462 +39463 +39466 +39467 +39470 +39471 +39474 +39475 +39478 +39479 +39482 +39483 +39486 +39487 +39490 +39491 +39494 +39495 +39498 +39499 +39502 +39503 +39506 +39507 +39510 +39509 +39512 +39513 +39516 +39517 +39520 +39521 +39524 +39525 +39528 +39529 +39532 +39533 +39536 +39537 +39540 +39541 +39544 +39545 +39548 +39549 +39552 +39553 +39556 +39557 +39560 +39561 +39564 +39565 +39568 +39569 +39572 +39573 +39576 +39577 +39580 +39581 +39584 +39585 +39588 +39589 +39592 +39593 +39596 +39597 +39600 +39601 +39604 +39605 +39608 +39609 +39612 +39613 +39616 +39617 +39620 +39621 +39624 +39625 +39628 +39629 +39632 +39633 +39636 +39637 +39640 +39641 +39644 +39645 +39648 +39649 +39652 +39653 +39656 +39657 +39660 +39661 +39664 +39665 +39668 +39669 +39672 +39673 +39676 +39677 +39680 +39681 +39684 +39685 +39688 +39689 +39692 +39693 +39696 +39697 +39700 +39701 +39704 +39705 +39708 +39709 +39712 +39713 +39716 +39717 +39720 +39721 +39724 +39725 +39728 +39729 +39732 +39733 +39736 +39737 +39740 +39741 +39744 +39745 +39748 +39749 +39752 +39753 +39756 +39757 +39760 +39761 +39764 +39765 +39766 +39767 +39770 +39771 +39774 +39775 +39778 +39779 +39782 +39783 +39786 +39787 +39790 +39791 +39794 +39795 +39798 +39799 +39802 +39803 +39806 +39807 +39810 +39811 +39814 +39815 +39818 +39819 +39822 +39823 +39826 +39827 +39830 +39831 +39834 +39835 +39838 +39839 +39842 +39843 +39846 +39847 +39850 +39851 +39854 +39855 +39858 +39859 +39862 +39863 +39866 +39867 +39870 +39871 +39874 +39875 +39878 +39879 +39882 +39883 +39886 +39887 +39890 +39891 +39894 +39895 +39898 +39899 +39902 +39903 +39906 +39907 +39910 +39911 +39914 +39915 +39918 +39919 +39922 +39923 +39926 +39927 +39930 +39931 +39934 +39935 +39938 +39939 +39942 +39943 +39946 +39947 +39950 +39951 +39954 +39955 +39958 +39959 +39962 +39963 +39966 +39967 +39970 +39971 +39974 +39975 +39978 +39979 +39982 +39983 +39986 +39987 +39990 +39991 +39994 +39995 +39998 +39999 +40002 +40003 +40006 +40007 +40010 +40011 +40014 +40015 +40018 +40019 +40022 +40021 +40024 +40025 +40028 +40029 +40032 +40033 +40036 +40037 +40040 +40041 +40044 +40045 +40048 +40049 +40052 +40053 +40056 +40057 +40060 +40061 +40064 +40065 +40068 +40069 +40072 +40073 +40076 +40077 +40080 +40081 +40084 +40085 +40088 +40089 +40092 +40093 +40096 +40097 +40100 +40101 +40104 +40105 +40108 +40109 +40112 +40113 +40116 +40117 +40120 +40121 +40124 +40125 +40128 +40129 +40132 +40133 +40136 +40137 +40140 +40141 +40144 +40145 +40148 +40149 +40152 +40153 +40156 +40157 +40160 +40161 +40164 +40165 +40168 +40169 +40172 +40173 +40176 +40177 +40180 +40181 +40184 +40185 +40188 +40189 +40192 +40193 +40196 +40197 +40200 +40201 +40204 +40205 +40208 +40209 +40212 +40213 +40216 +40217 +40220 +40221 +40224 +40225 +40228 +40229 +40232 +40233 +40236 +40237 +40240 +40241 +40244 +40245 +40248 +40249 +40252 +40253 +40256 +40257 +40260 +40261 +40264 +40265 +40268 +40269 +40272 +40273 +40276 +40277 +40278 +40279 +40282 +40283 +40286 +40287 +40290 +40291 +40294 +40295 +40298 +40299 +40302 +40303 +40306 +40307 +40310 +40311 +40314 +40315 +40318 +40319 +40322 +40323 +40326 +40327 +40330 +40331 +40334 +40335 +40338 +40339 +40342 +40343 +40346 +40347 +40350 +40351 +40354 +40355 +40358 +40359 +40362 +40363 +40366 +40367 +40370 +40371 +40374 +40375 +40378 +40379 +40382 +40383 +40386 +40387 +40390 +40391 +40394 +40395 +40398 +40399 +40402 +40403 +40406 +40407 +40410 +40411 +40414 +40415 +40418 +40419 +40422 +40423 +40426 +40427 +40430 +40431 +40434 +40435 +40438 +40439 +40442 +40443 +40446 +40447 +40450 +40451 +40454 +40455 +40458 +40459 +40462 +40463 +40466 +40467 +40470 +40471 +40474 +40475 +40478 +40479 +40482 +40483 +40486 +40487 +40490 +40491 +40494 +40495 +40498 +40499 +40502 +40503 +40506 +40507 +40510 +40511 +40514 +40515 +40518 +40519 +40522 +40523 +40526 +40527 +40530 +40531 +40534 +40533 +40536 +40537 +40540 +40541 +40544 +40545 +40548 +40549 +40552 +40553 +40556 +40557 +40560 +40561 +40564 +40565 +40568 +40569 +40572 +40573 +40576 +40577 +40580 +40581 +40584 +40585 +40588 +40589 +40592 +40593 +40596 +40597 +40600 +40601 +40604 +40605 +40608 +40609 +40612 +40613 +40616 +40617 +40620 +40621 +40624 +40625 +40628 +40629 +40632 +40633 +40636 +40637 +40640 +40641 +40644 +40645 +40648 +40649 +40652 +40653 +40656 +40657 +40660 +40661 +40664 +40665 +40668 +40669 +40672 +40673 +40676 +40677 +40680 +40681 +40684 +40685 +40688 +40689 +40692 +40693 +40696 +40697 +40700 +40701 +40704 +40705 +40708 +40709 +40712 +40713 +40716 +40717 +40720 +40721 +40724 +40725 +40728 +40729 +40732 +40733 +40736 +40737 +40740 +40741 +40744 +40745 +40748 +40749 +40752 +40753 +40756 +40757 +40760 +40761 +40764 +40765 +40768 +40769 +40772 +40773 +40776 +40777 +40780 +40781 +40784 +40785 +40788 +40789 +40790 +40791 +40794 +40795 +40798 +40799 +40802 +40803 +40806 +40807 +40810 +40811 +40814 +40815 +40818 +40819 +40822 +40823 +40826 +40827 +40830 +40831 +40834 +40835 +40838 +40839 +40842 +40843 +40846 +40847 +40850 +40851 +40854 +40855 +40858 +40859 +40862 +40863 +40866 +40867 +40870 +40871 +40874 +40875 +40878 +40879 +40882 +40883 +40886 +40887 +40890 +40891 +40894 +40895 +40898 +40899 +40902 +40903 +40906 +40907 +40910 +40911 +40914 +40915 +40918 +40919 +40922 +40923 +40926 +40927 +40930 +40931 +40934 +40935 +40938 +40939 +40942 +40943 +40946 +40947 +40950 +40951 +40954 +40955 +40958 +40959 +40962 +40963 +40966 +40967 +40970 +40971 +40974 +40975 +40978 +40979 +40982 +40983 +40986 +40987 +40990 +40991 +40994 +40995 +40998 +40999 +41002 +41003 +41006 +41007 +41010 +41011 +41014 +41015 +41018 +41019 +41022 +41023 +41026 +41027 +41030 +41031 +41034 +41035 +41038 +41039 +41042 +41043 +41046 +41045 +41048 +41049 +41052 +41053 +41056 +41057 +41060 +41061 +41064 +41065 +41068 +41069 +41072 +41073 +41076 +41077 +41080 +41081 +41084 +41085 +41088 +41089 +41092 +41093 +41096 +41097 +41100 +41101 +41104 +41105 +41108 +41109 +41112 +41113 +41116 +41117 +41120 +41121 +41124 +41125 +41128 +41129 +41132 +41133 +41136 +41137 +41140 +41141 +41144 +41145 +41148 +41149 +41152 +41153 +41156 +41157 +41160 +41161 +41164 +41165 +41168 +41169 +41172 +41173 +41176 +41177 +41180 +41181 +41184 +41185 +41188 +41189 +41192 +41193 +41196 +41197 +41200 +41201 +41204 +41205 +41208 +41209 +41212 +41213 +41216 +41217 +41220 +41221 +41224 +41225 +41228 +41229 +41232 +41233 +41236 +41237 +41240 +41241 +41244 +41245 +41248 +41249 +41252 +41253 +41256 +41257 +41260 +41261 +41264 +41265 +41268 +41269 +41272 +41273 +41276 +41277 +41280 +41281 +41284 +41285 +41288 +41289 +41292 +41293 +41296 +41297 +41300 +41301 +41302 +41303 +41306 +41307 +41310 +41311 +41314 +41315 +41318 +41319 +41322 +41323 +41326 +41327 +41330 +41331 +41334 +41335 +41338 +41339 +41342 +41343 +41346 +41347 +41350 +41351 +41354 +41355 +41358 +41359 +41362 +41363 +41366 +41367 +41370 +41371 +41374 +41375 +41378 +41379 +41382 +41383 +41386 +41387 +41390 +41391 +41394 +41395 +41398 +41399 +41402 +41403 +41406 +41407 +41410 +41411 +41414 +41415 +41418 +41419 +41422 +41423 +41426 +41427 +41430 +41431 +41434 +41435 +41438 +41439 +41442 +41443 +41446 +41447 +41450 +41451 +41454 +41455 +41458 +41459 +41462 +41463 +41466 +41467 +41470 +41471 +41474 +41475 +41478 +41479 +41482 +41483 +41486 +41487 +41490 +41491 +41494 +41495 +41498 +41499 +41502 +41503 +41506 +41507 +41510 +41511 +41514 +41515 +41518 +41519 +41522 +41523 +41526 +41527 +41530 +41531 +41534 +41535 +41538 +41539 +41542 +41543 +41546 +41547 +41550 +41551 +41554 +41555 +41558 +41557 +41560 +41561 +41564 +41565 +41568 +41569 +41572 +41573 +41576 +41577 +41580 +41581 +41584 +41585 +41588 +41589 +41592 +41593 +41596 +41597 +41600 +41601 +41604 +41605 +41608 +41609 +41612 +41613 +41616 +41617 +41620 +41621 +41624 +41625 +41628 +41629 +41632 +41633 +41636 +41637 +41640 +41641 +41644 +41645 +41648 +41649 +41652 +41653 +41656 +41657 +41660 +41661 +41664 +41665 +41668 +41669 +41672 +41673 +41676 +41677 +41680 +41681 +41684 +41685 +41688 +41689 +41692 +41693 +41696 +41697 +41700 +41701 +41704 +41705 +41708 +41709 +41712 +41713 +41716 +41717 +41720 +41721 +41724 +41725 +41728 +41729 +41732 +41733 +41736 +41737 +41740 +41741 +41744 +41745 +41748 +41749 +41752 +41753 +41756 +41757 +41760 +41761 +41764 +41765 +41768 +41769 +41772 +41773 +41776 +41777 +41780 +41781 +41784 +41785 +41788 +41789 +41792 +41793 +41796 +41797 +41800 +41801 +41804 +41805 +41808 +41809 +41812 +41813 +41814 +41815 +41818 +41819 +41822 +41823 +41826 +41827 +41830 +41831 +41834 +41835 +41838 +41839 +41842 +41843 +41846 +41847 +41850 +41851 +41854 +41855 +41858 +41859 +41862 +41863 +41866 +41867 +41870 +41871 +41874 +41875 +41878 +41879 +41882 +41883 +41886 +41887 +41890 +41891 +41894 +41895 +41898 +41899 +41902 +41903 +41906 +41907 +41910 +41911 +41914 +41915 +41918 +41919 +41922 +41923 +41926 +41927 +41930 +41931 +41934 +41935 +41938 +41939 +41942 +41943 +41946 +41947 +41950 +41951 +41954 +41955 +41958 +41959 +41962 +41963 +41966 +41967 +41970 +41971 +41974 +41975 +41978 +41979 +41982 +41983 +41986 +41987 +41990 +41991 +41994 +41995 +41998 +41999 +42002 +42003 +42006 +42007 +42010 +42011 +42014 +42015 +42018 +42019 +42022 +42023 +42026 +42027 +42030 +42031 +42034 +42035 +42038 +42039 +42042 +42043 +42046 +42047 +42050 +42051 +42054 +42055 +42058 +42059 +42062 +42063 +42066 +42067 +42070 +42069 +42072 +42073 +42076 +42077 +42080 +42081 +42084 +42085 +42088 +42089 +42092 +42093 +42096 +42097 +42100 +42101 +42104 +42105 +42108 +42109 +42112 +42113 +42116 +42117 +42120 +42121 +42124 +42125 +42128 +42129 +42132 +42133 +42136 +42137 +42140 +42141 +42144 +42145 +42148 +42149 +42152 +42153 +42156 +42157 +42160 +42161 +42164 +42165 +42168 +42169 +42172 +42173 +42176 +42177 +42180 +42181 +42184 +42185 +42188 +42189 +42192 +42193 +42196 +42197 +42200 +42201 +42204 +42205 +42208 +42209 +42212 +42213 +42216 +42217 +42220 +42221 +42224 +42225 +42228 +42229 +42232 +42233 +42236 +42237 +42240 +42241 +42244 +42245 +42248 +42249 +42252 +42253 +42256 +42257 +42260 +42261 +42264 +42265 +42268 +42269 +42272 +42273 +42276 +42277 +42280 +42281 +42284 +42285 +42288 +42289 +42292 +42293 +42296 +42297 +42300 +42301 +42304 +42305 +42308 +42309 +42312 +42313 +42316 +42317 +42320 +42321 +42324 +42325 +42326 +42327 +42330 +42331 +42334 +42335 +42338 +42339 +42342 +42343 +42346 +42347 +42350 +42351 +42354 +42355 +42358 +42359 +42362 +42363 +42366 +42367 +42370 +42371 +42374 +42375 +42378 +42379 +42382 +42383 +42386 +42387 +42390 +42391 +42394 +42395 +42398 +42399 +42402 +42403 +42406 +42407 +42410 +42411 +42414 +42415 +42418 +42419 +42422 +42423 +42426 +42427 +42430 +42431 +42434 +42435 +42438 +42439 +42442 +42443 +42446 +42447 +42450 +42451 +42454 +42455 +42458 +42459 +42462 +42463 +42466 +42467 +42470 +42471 +42474 +42475 +42478 +42479 +42482 +42483 +42486 +42487 +42490 +42491 +42494 +42495 +42498 +42499 +42502 +42503 +42506 +42507 +42510 +42511 +42514 +42515 +42518 +42519 +42522 +42523 +42526 +42527 +42530 +42531 +42534 +42535 +42538 +42539 +42542 +42543 +42546 +42547 +42550 +42551 +42554 +42555 +42558 +42559 +42562 +42563 +42566 +42567 +42570 +42571 +42574 +42575 +42578 +42579 +42582 +42581 +42584 +42585 +42588 +42589 +42592 +42593 +42596 +42597 +42600 +42601 +42604 +42605 +42608 +42609 +42612 +42613 +42616 +42617 +42620 +42621 +42624 +42625 +42628 +42629 +42632 +42633 +42636 +42637 +42640 +42641 +42644 +42645 +42648 +42649 +42652 +42653 +42656 +42657 +42660 +42661 +42664 +42665 +42668 +42669 +42672 +42673 +42676 +42677 +42680 +42681 +42684 +42685 +42688 +42689 +42692 +42693 +42696 +42697 +42700 +42701 +42704 +42705 +42708 +42709 +42712 +42713 +42716 +42717 +42720 +42721 +42724 +42725 +42728 +42729 +42732 +42733 +42736 +42737 +42740 +42741 +42744 +42745 +42748 +42749 +42752 +42753 +42756 +42757 +42760 +42761 +42764 +42765 +42768 +42769 +42772 +42773 +42776 +42777 +42780 +42781 +42784 +42785 +42788 +42789 +42792 +42793 +42796 +42797 +42800 +42801 +42804 +42805 +42808 +42809 +42812 +42813 +42816 +42817 +42820 +42821 +42824 +42825 +42828 +42829 +42832 +42833 +42836 +31886 +31887 +31888 +31891 +31892 +31895 +31896 +31899 +31900 +31903 +31904 +31907 +31908 +31911 +31912 +31915 +31916 +31919 +31920 +31923 +31924 +31927 +31928 +31931 +31932 +31935 +31936 +31939 +31940 +31943 +31944 +31947 +31948 +31951 +31952 +31955 +31956 +31959 +31960 +31963 +31964 +31967 +31968 +31971 +31972 +31975 +31976 +31979 +31980 +31983 +31984 +31987 +31988 +31991 +31992 +31995 +31996 +31999 +32000 +32003 +32004 +32007 +32008 +32011 +32012 +32015 +32016 +32019 +32020 +32023 +32024 +32027 +32028 +32031 +32032 +32035 +32036 +32039 +32040 +32043 +32044 +32047 +32048 +32051 +32052 +32055 +32056 +32059 +32060 +32063 +32064 +32067 +32068 +32071 +32072 +32075 +32076 +32079 +32080 +32083 +32084 +32087 +32088 +32091 +32092 +32095 +32096 +32099 +32100 +32103 +32104 +32107 +32108 +32111 +32112 +32115 +32116 +32119 +32120 +32123 +32124 +32127 +32128 +32131 +32132 +32135 +32136 +32139 +32140 +43094 +43093 +43096 +43097 +43100 +43101 +43104 +43105 +43108 +43109 +43112 +43113 +43116 +43117 +43120 +43121 +43124 +43125 +43128 +43129 +43132 +43133 +43136 +43137 +43140 +43141 +43144 +43145 +43148 +43149 +43152 +43153 +43156 +43157 +43160 +43161 +43164 +43165 +43168 +43169 +43172 +43173 +43176 +43177 +43180 +43181 +43184 +43185 +43188 +43189 +43192 +43193 +43196 +43197 +43200 +43201 +43204 +43205 +43208 +43209 +43212 +43213 +43216 +43217 +43220 +43221 +43224 +43225 +43228 +43229 +43232 +43233 +43236 +43237 +43240 +43241 +43244 +43245 +43248 +43249 +43252 +43253 +43256 +43257 +43260 +43261 +43264 +43265 +43268 +43269 +43272 +43273 +43276 +43277 +43280 +43281 +43284 +43285 +43288 +43289 +43292 +43293 +43296 +43297 +43300 +43301 +43304 +43305 +43308 +43309 +43312 +43313 +43316 +43317 +43320 +43321 +43324 +43325 +43328 +43329 +43332 +43333 +43336 +43337 +43340 +43341 +43344 +43345 +43348 +43349 +43350 +43351 +43354 +43355 +43358 +43359 +43362 +43363 +43366 +43367 +43370 +43371 +43374 +43375 +43378 +43379 +43382 +43383 +43386 +43387 +43390 +43391 +43394 +43395 +43398 +43399 +43402 +43403 +43406 +43407 +43410 +43411 +43414 +43415 +43418 +43419 +43422 +43423 +43426 +43427 +43430 +43431 +43434 +43435 +43438 +43439 +43442 +43443 +43446 +43447 +43450 +43451 +43454 +43455 +43458 +43459 +43462 +43463 +43466 +43467 +43470 +43471 +43474 +43475 +43478 +43479 +43482 +43483 +43486 +43487 +43490 +43491 +43494 +43495 +43498 +43499 +43502 +43503 +43506 +43507 +43510 +43511 +43514 +43515 +43518 +43519 +43522 +43523 +43526 +43527 +43530 +43531 +43534 +43535 +43538 +43539 +43542 +43543 +43546 +43547 +43550 +43551 +43554 +43555 +43558 +43559 +43562 +43563 +43566 +43567 +43570 +43571 +43574 +43575 +43578 +43579 +43582 +43583 +43586 +43587 +43590 +43591 +43594 +43595 +43598 +43599 +43602 +43603 +43606 +43605 +43608 +43609 +43612 +43613 +43616 +43617 +43620 +43621 +43624 +43625 +43628 +43629 +43632 +43633 +43636 +43637 +43640 +43641 +43644 +43645 +43648 +43649 +43652 +43653 +43656 +43657 +43660 +43661 +43664 +43665 +43668 +43669 +43672 +43673 +43676 +43677 +43680 +43681 +43684 +43685 +43688 +43689 +43692 +43693 +43696 +43697 +43700 +43701 +43704 +43705 +43708 +43709 +43712 +43713 +43716 +43717 +43720 +43721 +43724 +43725 +43728 +43729 +43732 +43733 +43736 +43737 +43740 +43741 +43744 +43745 +43748 +43749 +43752 +43753 +43756 +43757 +43760 +43761 +43764 +43765 +43768 +43769 +43772 +43773 +43776 +43777 +43780 +43781 +43784 +43785 +43788 +43789 +43792 +43793 +43796 +43797 +43800 +43801 +43804 +43805 +43808 +43809 +43812 +43813 +43816 +43817 +43820 +43821 +43824 +43825 +43828 +43829 +43832 +43833 +43836 +43837 +43840 +43841 +43844 +43845 +43848 +43849 +43852 +43853 +43856 +43857 +43860 +43861 +43862 +43863 +43866 +43867 +43870 +43871 +43874 +43875 +43878 +43879 +43882 +43883 +43886 +43887 +43890 +43891 +43894 +43895 +43898 +43899 +43902 +43903 +43906 +43907 +43910 +43911 +43914 +43915 +43918 +43919 +43922 +43923 +43926 +43927 +43930 +43931 +43934 +43935 +43938 +43939 +43942 +43943 +43946 +43947 +43950 +43951 +43954 +43955 +43958 +43959 +43962 +43963 +43966 +43967 +43970 +43971 +43974 +43975 +43978 +43979 +43982 +43983 +43986 +43987 +43990 +43991 +43994 +43995 +43998 +43999 +44002 +44003 +44006 +44007 +44010 +44011 +44014 +44015 +44018 +44019 +44022 +44023 +44026 +44027 +44030 +44031 +44034 +44035 +44038 +44039 +44042 +44043 +44046 +44047 +44050 +44051 +44054 +44055 +44058 +44059 +44062 +44063 +44066 +44067 +44070 +44071 +44074 +44075 +44078 +44079 +44082 +44083 +44086 +44087 +44090 +44091 +44094 +44095 +44098 +44099 +44102 +44103 +44106 +44107 +44110 +44111 +44114 +44115 +44118 +44117 +44120 +44121 +44124 +44125 +44128 +44129 +44132 +44133 +44136 +44137 +44140 +44141 +44144 +44145 +44148 +44149 +44152 +44153 +44156 +44157 +44160 +44161 +44164 +44165 +44168 +44169 +44172 +44173 +44176 +44177 +44180 +44181 +44184 +44185 +44188 +44189 +44192 +44193 +44196 +44197 +44200 +44201 +44204 +44205 +44208 +44209 +44212 +44213 +44216 +44217 +44220 +44221 +44224 +44225 +44228 +44229 +44232 +44233 +44236 +44237 +44240 +44241 +44244 +44245 +44248 +44249 +44252 +44253 +44256 +44257 +44260 +44261 +44264 +44265 +44268 +44269 +44272 +44273 +44276 +44277 +44280 +44281 +44284 +44285 +44288 +44289 +44292 +44293 +44296 +44297 +44300 +44301 +44304 +44305 +44308 +44309 +44312 +44313 +44316 +44317 +44320 +44321 +44324 +44325 +44328 +44329 +44332 +44333 +44336 +44337 +44340 +44341 +44344 +44345 +44348 +44349 +44352 +44353 +44356 +44357 +44360 +44361 +44364 +44365 +44368 +44369 +44372 +44373 +44374 +44375 +44378 +44379 +44382 +44383 +44386 +44387 +44390 +44391 +44394 +44395 +44398 +44399 +44402 +44403 +44406 +44407 +44410 +44411 +44414 +44415 +44418 +44419 +44422 +44423 +44426 +44427 +44430 +44431 +44434 +44435 +44438 +44439 +44442 +44443 +44446 +44447 +44450 +44451 +44454 +44455 +44458 +44459 +44462 +44463 +44466 +44467 +44470 +44471 +44474 +44475 +44478 +44479 +44482 +44483 +44486 +44487 +44490 +44491 +44494 +44495 +44498 +44499 +44502 +44503 +44506 +44507 +44510 +44511 +44514 +44515 +44518 +44519 +44522 +44523 +44526 +44527 +44530 +44531 +44534 +44535 +44538 +44539 +44542 +44543 +44546 +44547 +44550 +44551 +44554 +44555 +44558 +44559 +44562 +44563 +44566 +44567 +44570 +44571 +44574 +44575 +44578 +44579 +44582 +44583 +44586 +44587 +44590 +44591 +44594 +44595 +44598 +44599 +44602 +44603 +44606 +44607 +44610 +44611 +44614 +44615 +44618 +44619 +44622 +44623 +44626 +44627 +44630 +44629 +44632 +44633 +44636 +44637 +44640 +44641 +44644 +44645 +44648 +44649 +44652 +44653 +44656 +44657 +44660 +44661 +44664 +44665 +44668 +44669 +44672 +44673 +44676 +44677 +44680 +44681 +44684 +44685 +44688 +44689 +44692 +44693 +44696 +44697 +44700 +44701 +44704 +44705 +44708 +44709 +44712 +44713 +44716 +44717 +44720 +44721 +44724 +44725 +44728 +44729 +44732 +44733 +44736 +44737 +44740 +44741 +44744 +44745 +44748 +44749 +44752 +44753 +44756 +44757 +44760 +44761 +44764 +44765 +44768 +44769 +44772 +44773 +44776 +44777 +44780 +44781 +44784 +44785 +44788 +44789 +44792 +44793 +44796 +44797 +44800 +44801 +44804 +44805 +44808 +44809 +44812 +44813 +44816 +44817 +44820 +44821 +44824 +44825 +44828 +44829 +44832 +44833 +44836 +44837 +44840 +44841 +44844 +44845 +44848 +44849 +44852 +44853 +44856 +44857 +44860 +44861 +44864 +44865 +44868 +44869 +44872 +44873 +44876 +44877 +44880 +44881 +44884 +44885 +44886 +44887 +44890 +44891 +44894 +44895 +44898 +44899 +44902 +44903 +44906 +44907 +44910 +44911 +44914 +44915 +44918 +44919 +44922 +44923 +44926 +44927 +44930 +44931 +44934 +44935 +44938 +44939 +44942 +44943 +44946 +44947 +44950 +44951 +44954 +44955 +44958 +44959 +44962 +44963 +44966 +44967 +44970 +44971 +44974 +44975 +44978 +44979 +44982 +44983 +44986 +44987 +44990 +44991 +44994 +44995 +44998 +44999 +45002 +45003 +45006 +45007 +45010 +45011 +45014 +45015 +45018 +45019 +45022 +45023 +45026 +45027 +45030 +45031 +45034 +45035 +45038 +45039 +45042 +45043 +45046 +45047 +45050 +45051 +45054 +45055 +45058 +45059 +45062 +45063 +45066 +45067 +45070 +45071 +45074 +45075 +45078 +45079 +45082 +45083 +45086 +45087 +45090 +45091 +45094 +45095 +45098 +45099 +45102 +45103 +45106 +45107 +45110 +45111 +45114 +45115 +45118 +45119 +45122 +45123 +45126 +45127 +45130 +45131 +45134 +45135 +45138 +45139 +45142 +45141 +45144 +45145 +45148 +45149 +45152 +45153 +45156 +45157 +45160 +45161 +45164 +45165 +45168 +45169 +45172 +45173 +45176 +45177 +45180 +45181 +45184 +45185 +45188 +45189 +45192 +45193 +45196 +45197 +45200 +45201 +45204 +45205 +45208 +45209 +45212 +45213 +45216 +45217 +45220 +45221 +45224 +45225 +45228 +45229 +45232 +45233 +45236 +45237 +45240 +45241 +45244 +45245 +45248 +45249 +45252 +45253 +45256 +45257 +45260 +45261 +45264 +45265 +45268 +45269 +45272 +45273 +45276 +45277 +45280 +45281 +45284 +45285 +45288 +45289 +45292 +45293 +45296 +45297 +45300 +45301 +45304 +45305 +45308 +45309 +45312 +45313 +45316 +45317 +45320 +45321 +45324 +45325 +45328 +45329 +45332 +45333 +45336 +45337 +45340 +45341 +45344 +45345 +45348 +45349 +45352 +45353 +45356 +45357 +45360 +45361 +45364 +45365 +45368 +45369 +45372 +45373 +45376 +45377 +45380 +45381 +45384 +45385 +45388 +45389 +45392 +45393 +45396 +45397 +45398 +45399 +45402 +45403 +45406 +45407 +45410 +45411 +45414 +45415 +45418 +45419 +45422 +45423 +45426 +45427 +45430 +45431 +45434 +45435 +45438 +45439 +45442 +45443 +45446 +45447 +45450 +45451 +45454 +45455 +45458 +45459 +45462 +45463 +45466 +45467 +45470 +45471 +45474 +45475 +45478 +45479 +45482 +45483 +45486 +45487 +45490 +45491 +45494 +45495 +45498 +45499 +45502 +45503 +45506 +45507 +45510 +45511 +45514 +45515 +45518 +45519 +45522 +45523 +45526 +45527 +45530 +45531 +45534 +45535 +45538 +45539 +45542 +45543 +45546 +45547 +45550 +45551 +45554 +45555 +45558 +45559 +45562 +45563 +45566 +45567 +45570 +45571 +45574 +45575 +45578 +45579 +45582 +45583 +45586 +45587 +45590 +45591 +45594 +45595 +45598 +45599 +45602 +45603 +45606 +45607 +45610 +45611 +45614 +45615 +45618 +45619 +45622 +45623 +45626 +45627 +45630 +45631 +45634 +45635 +45638 +45639 +45642 +45643 +45646 +45647 +45650 +45651 +45654 +45653 +45656 +45657 +45660 +45661 +45664 +45665 +45668 +45669 +45672 +45673 +45676 +45677 +45680 +45681 +45684 +45685 +45688 +45689 +45692 +45693 +45696 +45697 +45700 +45701 +45704 +45705 +45708 +45709 +45712 +45713 +45716 +45717 +45720 +45721 +45724 +45725 +45728 +45729 +45732 +45733 +45736 +45737 +45740 +45741 +45744 +45745 +45748 +45749 +45752 +45753 +45756 +45757 +45760 +45761 +45764 +45765 +45768 +45769 +45772 +45773 +45776 +45777 +45780 +45781 +45784 +45785 +45788 +45789 +45792 +45793 +45796 +45797 +45800 +45801 +45804 +45805 +45808 +45809 +45812 +45813 +45816 +45817 +45820 +45821 +45824 +45825 +45828 +45829 +45832 +45833 +45836 +45837 +45840 +45841 +45844 +45845 +45848 +45849 +45852 +45853 +45856 +45857 +45860 +45861 +45864 +45865 +45868 +45869 +45872 +45873 +45876 +45877 +45880 +45881 +45884 +45885 +45888 +45889 +45892 +45893 +45896 +45897 +45900 +45901 +45904 +45905 +45908 +45909 +45910 +45911 +45914 +45915 +45918 +45919 +45922 +45923 +45926 +45927 +45930 +45931 +45934 +45935 +45938 +45939 +45942 +45943 +45946 +45947 +45950 +45951 +45954 +45955 +45958 +45959 +45962 +45963 +45966 +45967 +45970 +45971 +45974 +45975 +45978 +45979 +45982 +45983 +45986 +45987 +45990 +45991 +45994 +45995 +45998 +45999 +46002 +46003 +46006 +46007 +46010 +46011 +46014 +46015 +46018 +46019 +46022 +46023 +46026 +46027 +46030 +46031 +46034 +46035 +46038 +46039 +46042 +46043 +46046 +46047 +46050 +46051 +46054 +46055 +46058 +46059 +46062 +46063 +46066 +46067 +46070 +46071 +46074 +46075 +46078 +46079 +46082 +46083 +46086 +46087 +46090 +46091 +46094 +46095 +46098 +46099 +46102 +46103 +46106 +46107 +46110 +46111 +46114 +46115 +46118 +46119 +46122 +46123 +46126 +46127 +46130 +46131 +46134 +46135 +46138 +46139 +46142 +46143 +46146 +46147 +46150 +46151 +46154 +46155 +46158 +46159 +46162 +46163 +46166 +46165 +46168 +46169 +46172 +46173 +46176 +46177 +46180 +46181 +46184 +46185 +46188 +46189 +46192 +46193 +46196 +46197 +46200 +46201 +46204 +46205 +46208 +46209 +46212 +46213 +46216 +46217 +46220 +46221 +46224 +46225 +46228 +46229 +46232 +46233 +46236 +46237 +46240 +46241 +46244 +46245 +46248 +46249 +46252 +46253 +46256 +46257 +46260 +46261 +46264 +46265 +46268 +46269 +46272 +46273 +46276 +46277 +46280 +46281 +46284 +46285 +46288 +46289 +46292 +46293 +46296 +46297 +46300 +46301 +46304 +46305 +46308 +46309 +46312 +46313 +46316 +46317 +46320 +46321 +46324 +46325 +46328 +46329 +46332 +46333 +46336 +46337 +46340 +46341 +46344 +46345 +46348 +46349 +46352 +46353 +46356 +46357 +46360 +46361 +46364 +46365 +46368 +46369 +46372 +46373 +46376 +46377 +46380 +46381 +46384 +46385 +46388 +46389 +46392 +46393 +46396 +46397 +46400 +46401 +46404 +46405 +46408 +46409 +46412 +46413 +46416 +46417 +46420 +46421 +46422 +46423 +46426 +46427 +46430 +46431 +46434 +46435 +46438 +46439 +46442 +46443 +46446 +46447 +46450 +46451 +46454 +46455 +46458 +46459 +46462 +46463 +46466 +46467 +46470 +46471 +46474 +46475 +46478 +46479 +46482 +46483 +46486 +46487 +46490 +46491 +46494 +46495 +46498 +46499 +46502 +46503 +46506 +46507 +46510 +46511 +46514 +46515 +46518 +46519 +46522 +46523 +46526 +46527 +46530 +46531 +46534 +46535 +46538 +46539 +46542 +46543 +46546 +46547 +46550 +46551 +46554 +46555 +46558 +46559 +46562 +46563 +46566 +46567 +46570 +46571 +46574 +46575 +46578 +46579 +46582 +46583 +46586 +46587 +46590 +46591 +46594 +46595 +46598 +46599 +46602 +46603 +46606 +46607 +46610 +46611 +46614 +46615 +46618 +46619 +46622 +46623 +46626 +46627 +46630 +46631 +46634 +46635 +46638 +46639 +46642 +46643 +46646 +46647 +46650 +46651 +46654 +46655 +46658 +46659 +46662 +46663 +46666 +46667 +46670 +46671 +46674 +46675 +46678 +46677 +46680 +46681 +46684 +46685 +46688 +46689 +46692 +46693 +46696 +46697 +46700 +46701 +46704 +46705 +46708 +46709 +46712 +46713 +46716 +46717 +46720 +46721 +46724 +46725 +46728 +46729 +46732 +46733 +46736 +46737 +46740 +46741 +46744 +46745 +46748 +46749 +46752 +46753 +46756 +46757 +46760 +46761 +46764 +46765 +46768 +46769 +46772 +46773 +46776 +46777 +46780 +46781 +46784 +46785 +46788 +46789 +46792 +46793 +46796 +46797 +46800 +46801 +46804 +46805 +46808 +46809 +46812 +46813 +46816 +46817 +46820 +46821 +46824 +46825 +46828 +46829 +46832 +46833 +46836 +46837 +46840 +46841 +46844 +46845 +46848 +46849 +46852 +46853 +46856 +46857 +46860 +46861 +46864 +46865 +46868 +46869 +46872 +46873 +46876 +46877 +46880 +46881 +46884 +46885 +46888 +46889 +46892 +46893 +46896 +46897 +46900 +46901 +46904 +46905 +46908 +46909 +46912 +46913 +46916 +46917 +46920 +46921 +46924 +46925 +46928 +46929 +46932 +46933 +46934 +46935 +46938 +46939 +46942 +46943 +46946 +46947 +46950 +46951 +46954 +46955 +46958 +46959 +46962 +46963 +46966 +46967 +46970 +46971 +46974 +46975 +46978 +46979 +46982 +46983 +46986 +46987 +46990 +46991 +46994 +46995 +46998 +46999 +47002 +47003 +47006 +47007 +47010 +47011 +47014 +47015 +47018 +47019 +47022 +47023 +47026 +47027 +47030 +47031 +47034 +47035 +47038 +47039 +47042 +47043 +47046 +47047 +47050 +47051 +47054 +47055 +47058 +47059 +47062 +47063 +47066 +47067 +47070 +47071 +47074 +47075 +47078 +47079 +47082 +47083 +47086 +47087 +47090 +47091 +47094 +47095 +47098 +47099 +47102 +47103 +47106 +47107 +47110 +47111 +47114 +47115 +47118 +47119 +47122 +47123 +47126 +47127 +47130 +47131 +47134 +47135 +47138 +47139 +47142 +47143 +47146 +47147 +47150 +47151 +47154 +47155 +47158 +47159 +47162 +47163 +47166 +47167 +47170 +47171 +47174 +47175 +47178 +47179 +47182 +47183 +47186 +47187 +47190 +47189 +47192 +47193 +47196 +47197 +47200 +47201 +47204 +47205 +47208 +47209 +47212 +47213 +47216 +47217 +47220 +47221 +47224 +47225 +47228 +47229 +47232 +47233 +47236 +47237 +47240 +47241 +47244 +47245 +47248 +47249 +47252 +47253 +47256 +47257 +47260 +47261 +47264 +47265 +47268 +47269 +47272 +47273 +47276 +47277 +47280 +47281 +47284 +47285 +47288 +47289 +47292 +47293 +47296 +47297 +47300 +47301 +47304 +47305 +47308 +47309 +47312 +47313 +47316 +47317 +47320 +47321 +47324 +47325 +47328 +47329 +47332 +47333 +47336 +47337 +47340 +47341 +47344 +47345 +47348 +47349 +47352 +47353 +47356 +47357 +47360 +47361 +47364 +47365 +47368 +47369 +47372 +47373 +47376 +47377 +47380 +47381 +47384 +47385 +47388 +47389 +47392 +47393 +47396 +47397 +47400 +47401 +47404 +47405 +47408 +47409 +47412 +47413 +47416 +47417 +47420 +47421 +47424 +47425 +47428 +47429 +47432 +47433 +47436 +47437 +47440 +47441 +47444 +47445 +47446 +47447 +47450 +47451 +47454 +47455 +47458 +47459 +47462 +47463 +47466 +47467 +47470 +47471 +47474 +47475 +47478 +47479 +47482 +47483 +47486 +47487 +47490 +47491 +47494 +47495 +47498 +47499 +47502 +47503 +47506 +47507 +47510 +47511 +47514 +47515 +47518 +47519 +47522 +47523 +47526 +47527 +47530 +47531 +47534 +47535 +47538 +47539 +47542 +47543 +47546 +47547 +47550 +47551 +47554 +47555 +47558 +47559 +47562 +47563 +47566 +47567 +47570 +47571 +47574 +47575 +47578 +47579 +47582 +47583 +47586 +47587 +47590 +47591 +47594 +47595 +47598 +47599 +47602 +47603 +47606 +47607 +47610 +47611 +47614 +47615 +47618 +47619 +47622 +47623 +47626 +47627 +47630 +47631 +47634 +47635 +47638 +47639 +47642 +47643 +47646 +47647 +47650 +47651 +47654 +47655 +47658 +47659 +47662 +47663 +47666 +47667 +47670 +47671 +47674 +47675 +47678 +47679 +47682 +47683 +47686 +47687 +47690 +47691 +47694 +47695 +47698 +47699 +47702 +47701 +47704 +47705 +47708 +47709 +47712 +47713 +47716 +47717 +47720 +47721 +47724 +47725 +47728 +47729 +47732 +47733 +47736 +47737 +47740 +47741 +47744 +47745 +47748 +47749 +47752 +47753 +47756 +47757 +47760 +47761 +47764 +47765 +47768 +47769 +47772 +47773 +47776 +47777 +47780 +47781 +47784 +47785 +47788 +47789 +47792 +47793 +47796 +47797 +47800 +47801 +47804 +47805 +47808 +47809 +47812 +47813 +47816 +47817 +47820 +47821 +47824 +47825 +47828 +47829 +47832 +47833 +47836 +47837 +47840 +47841 +47844 +47845 +47848 +47849 +47852 +47853 +47856 +47857 +47860 +47861 +47864 +47865 +47868 +47869 +47872 +47873 +47876 +47877 +47880 +47881 +47884 +47885 +47888 +47889 +47892 +47893 +47896 +47897 +47900 +47901 +47904 +47905 +47908 +47909 +47912 +47913 +47916 +47917 +47920 +47921 +47924 +47925 +47928 +47929 +47932 +47933 +47936 +47937 +47940 +47941 +47944 +47945 +47948 +47949 +47952 +47953 +47956 +47957 +47958 +47959 +47962 +47963 +47966 +47967 +47970 +47971 +47974 +47975 +47978 +47979 +47982 +47983 +47986 +47987 +47990 +47991 +47994 +47995 +47998 +47999 +48002 +48003 +48006 +48007 +48010 +48011 +48014 +48015 +48018 +48019 +48022 +48023 +48026 +48027 +48030 +48031 +48034 +48035 +48038 +48039 +48042 +48043 +48046 +48047 +48050 +48051 +48054 +48055 +48058 +48059 +48062 +48063 +48066 +48067 +48070 +48071 +48074 +48075 +48078 +48079 +48082 +48083 +48086 +48087 +48090 +48091 +48094 +48095 +48098 +48099 +48102 +48103 +48106 +48107 +48110 +48111 +48114 +48115 +48118 +48119 +48122 +48123 +48126 +48127 +48130 +48131 +48134 +48135 +48138 +48139 +48142 +48143 +48146 +48147 +48150 +48151 +48154 +48155 +48158 +48159 +48162 +48163 +48166 +48167 +48170 +48171 +48174 +48175 +48178 +48179 +48182 +48183 +48186 +48187 +48190 +48191 +48194 +48195 +48198 +48199 +48202 +48203 +48206 +48207 +48210 +48211 +48214 +48213 +48216 +48217 +48220 +48221 +48224 +48225 +48228 +48229 +48232 +48233 +48236 +48237 +48240 +48241 +48244 +48245 +48248 +48249 +48252 +48253 +48256 +48257 +48260 +48261 +48264 +48265 +48268 +48269 +48272 +48273 +48276 +48277 +48280 +48281 +48284 +48285 +48288 +48289 +48292 +48293 +48296 +48297 +48300 +48301 +48304 +48305 +48308 +48309 +48312 +48313 +48316 +48317 +48320 +48321 +48324 +48325 +48328 +48329 +48332 +48333 +48336 +48337 +48340 +48341 +48344 +48345 +48348 +48349 +48352 +48353 +48356 +48357 +48360 +48361 +48364 +48365 +48368 +48369 +48372 +48373 +48376 +48377 +48380 +48381 +48384 +48385 +48388 +48389 +48392 +48393 +48396 +48397 +48400 +48401 +48404 +48405 +48408 +48409 +48412 +48413 +48416 +48417 +48420 +48421 +48424 +48425 +48428 +48429 +48432 +48433 +48436 +48437 +48440 +48441 +48444 +48445 +48448 +48449 +48452 +48453 +48456 +48457 +48460 +48461 +48464 +48465 +48468 +48469 +48470 +48471 +48474 +48475 +48478 +48479 +48482 +48483 +48486 +48487 +48490 +48491 +48494 +48495 +48498 +48499 +48502 +48503 +48506 +48507 +48510 +48511 +48514 +48515 +48518 +48519 +48522 +48523 +48526 +48527 +48530 +48531 +48534 +48535 +48538 +48539 +48542 +48543 +48546 +48547 +48550 +48551 +48554 +48555 +48558 +48559 +48562 +48563 +48566 +48567 +48570 +48571 +48574 +48575 +48578 +48579 +48582 +48583 +48586 +48587 +48590 +48591 +48594 +48595 +48598 +48599 +48602 +48603 +48606 +48607 +48610 +48611 +48614 +48615 +48618 +48619 +48622 +48623 +48626 +48627 +48630 +48631 +48634 +48635 +48638 +48639 +48642 +48643 +48646 +48647 +48650 +48651 +48654 +48655 +48658 +48659 +48662 +48663 +48666 +48667 +48670 +48671 +48674 +48675 +48678 +48679 +48682 +48683 +48686 +48687 +48690 +48691 +48694 +48695 +48698 +48699 +48702 +48703 +48706 +48707 +48710 +48711 +48714 +48715 +48718 +48719 +48722 +48723 +48726 +48725 +48728 +48729 +48732 +48733 +48736 +48737 +48740 +48741 +48744 +48745 +48748 +48749 +48752 +48753 +48756 +48757 +48760 +48761 +48764 +48765 +48768 +48769 +48772 +48773 +48776 +48777 +48780 +48781 +48784 +48785 +48788 +48789 +48792 +48793 +48796 +48797 +48800 +48801 +48804 +48805 +48808 +48809 +48812 +48813 +48816 +48817 +48820 +48821 +48824 +48825 +48828 +48829 +48832 +48833 +48836 +48837 +48840 +48841 +48844 +48845 +48848 +48849 +48852 +48853 +48856 +48857 +48860 +48861 +48864 +48865 +48868 +48869 +48872 +48873 +48876 +48877 +48880 +48881 +48884 +48885 +48888 +48889 +48892 +48893 +48896 +48897 +48900 +48901 +48904 +48905 +48908 +48909 +48912 +48913 +48916 +48917 +48920 +48921 +48924 +48925 +48928 +48929 +48932 +48933 +48936 +48937 +48940 +48941 +48944 +48945 +48948 +48949 +48952 +48953 +48956 +48957 +48960 +48961 +48964 +48965 +48968 +48969 +48972 +48973 +48976 +48977 +48980 +48981 +48982 +48983 +48986 +48987 +48990 +48991 +48994 +48995 +48998 +48999 +49002 +49003 +49006 +49007 +49010 +49011 +49014 +49015 +49018 +49019 +49022 +49023 +49026 +49027 +49030 +49031 +49034 +49035 +49038 +49039 +49042 +49043 +49046 +49047 +49050 +49051 +49054 +49055 +49058 +49059 +49062 +49063 +49066 +49067 +49070 +49071 +49074 +49075 +49078 +49079 +49082 +49083 +49086 +49087 +49090 +49091 +49094 +49095 +49098 +49099 +49102 +49103 +49106 +49107 +49110 +49111 +49114 +49115 +49118 +49119 +49122 +49123 +49126 +49127 +49130 +49131 +49134 +49135 +49138 +49139 +49142 +49143 +49146 +49147 +49150 +49151 +49154 +49155 +49158 +49159 +49162 +49163 +49166 +49167 +49170 +49171 +49174 +49175 +49178 +49179 +49182 +49183 +49186 +49187 +49190 +49191 +49194 +49195 +49198 +49199 +49202 +49203 +49206 +49207 +49210 +49211 +49214 +49215 +49218 +49219 +49222 +49223 +49226 +49227 +49230 +49231 +49234 +49235 +49238 +49237 +49240 +49241 +49244 +49245 +49248 +49249 +49252 +49253 +49256 +49257 +49260 +49261 +49264 +49265 +49268 +49269 +49272 +49273 +49276 +49277 +49280 +49281 +49284 +49285 +49288 +49289 +49292 +49293 +49296 +49297 +49300 +49301 +49304 +49305 +49308 +49309 +49312 +49313 +49316 +49317 +49320 +49321 +49324 +49325 +49328 +49329 +49332 +49333 +49336 +49337 +49340 +49341 +49344 +49345 +49348 +49349 +49352 +49353 +49356 +49357 +49360 +49361 +49364 +49365 +49368 +49369 +49372 +49373 +49376 +49377 +49380 +49381 +49384 +49385 +49388 +49389 +49392 +49393 +49396 +49397 +49400 +49401 +49404 +49405 +49408 +49409 +49412 +49413 +49416 +49417 +49420 +49421 +49424 +49425 +49428 +49429 +49432 +49433 +49436 +49437 +49440 +49441 +49444 +49445 +49448 +49449 +49452 +49453 +49456 +49457 +49460 +49461 +49464 +49465 +49468 +49469 +49472 +49473 +49476 +49477 +49480 +49481 +49484 +49485 +49488 +49489 +49492 +49493 +49494 +49495 +49498 +49499 +49502 +49503 +49506 +49507 +49510 +49511 +49514 +49515 +49518 +49519 +49522 +49523 +49526 +49527 +49530 +49531 +49534 +49535 +49538 +49539 +49542 +49543 +49546 +49547 +49550 +49551 +49554 +49555 +49558 +49559 +49562 +49563 +49566 +49567 +49570 +49571 +49574 +49575 +49578 +49579 +49582 +49583 +49586 +49587 +49590 +49591 +49594 +49595 +49598 +49599 +49602 +49603 +49606 +49607 +49610 +49611 +49614 +49615 +49618 +49619 +49622 +49623 +49626 +49627 +49630 +49631 +49634 +49635 +49638 +49639 +49642 +49643 +49646 +49647 +49650 +49651 +49654 +49655 +49658 +49659 +49662 +49663 +49666 +49667 +49670 +49671 +49674 +49675 +49678 +49679 +49682 +49683 +49686 +49687 +49690 +49691 +49694 +49695 +49698 +49699 +49702 +49703 +49706 +49707 +49710 +49711 +49714 +49715 +49718 +49719 +49722 +49723 +49726 +49727 +49730 +49731 +49734 +49735 +49738 +49739 +49742 +49743 +49746 +49747 +49750 +49749 +49752 +49753 +49756 +49757 +49760 +49761 +49764 +49765 +49768 +49769 +49772 +49773 +49776 +49777 +49780 +49781 +49784 +49785 +49788 +49789 +49792 +49793 +49796 +49797 +49800 +49801 +49804 +49805 +49808 +49809 +49812 +49813 +49816 +49817 +49820 +49821 +49824 +49825 +49828 +49829 +49832 +49833 +49836 +49837 +49840 +49841 +49844 +49845 +49848 +49849 +49852 +49853 +49856 +49857 +49860 +49861 +49864 +49865 +49868 +49869 +49872 +49873 +49876 +49877 +49880 +49881 +49884 +49885 +49888 +49889 +49892 +49893 +49896 +49897 +49900 +49901 +49904 +49905 +49908 +49909 +49912 +49913 +49916 +49917 +49920 +49921 +49924 +49925 +49928 +49929 +49932 +49933 +49936 +49937 +49940 +49941 +49944 +49945 +49948 +49949 +49952 +49953 +49956 +49957 +49960 +49961 +49964 +49965 +49968 +49969 +49972 +49973 +49976 +49977 +49980 +49981 +49984 +49985 +49988 +49989 +49992 +49993 +49996 +49997 +50000 +50001 +50004 +50005 +50006 +50007 +50010 +50011 +50014 +50015 +50018 +50019 +50022 +50023 +50026 +50027 +50030 +50031 +50034 +50035 +50038 +50039 +50042 +50043 +50046 +50047 +50050 +50051 +50054 +50055 +50058 +50059 +50062 +50063 +50066 +50067 +50070 +50071 +50074 +50075 +50078 +50079 +50082 +50083 +50086 +50087 +50090 +50091 +50094 +50095 +50098 +50099 +50102 +50103 +50106 +50107 +50110 +50111 +50114 +50115 +50118 +50119 +50122 +50123 +50126 +50127 +50130 +50131 +50134 +50135 +50138 +50139 +50142 +50143 +50146 +50147 +50150 +50151 +50154 +50155 +50158 +50159 +50162 +50163 +50166 +50167 +50170 +50171 +50174 +50175 +50178 +50179 +50182 +50183 +50186 +50187 +50190 +50191 +50194 +50195 +50198 +50199 +50202 +50203 +50206 +50207 +50210 +50211 +50214 +50215 +50218 +50219 +50222 +50223 +50226 +50227 +50230 +50231 +50234 +50235 +50238 +50239 +50242 +50243 +50246 +50247 +50250 +50251 +50254 +50255 +50258 +50259 +50262 +50261 +50264 +50265 +50268 +50269 +50272 +50273 +50276 +50277 +50280 +50281 +50284 +50285 +50288 +50289 +50292 +50293 +50296 +50297 +50300 +50301 +50304 +50305 +50308 +50309 +50312 +50313 +50316 +50317 +50320 +50321 +50324 +50325 +50328 +50329 +50332 +50333 +50336 +50337 +50340 +50341 +50344 +50345 +50348 +50349 +50352 +50353 +50356 +50357 +50360 +50361 +50364 +50365 +50368 +50369 +50372 +50373 +50376 +50377 +50380 +50381 +50384 +50385 +50388 +50389 +50392 +50393 +50396 +50397 +50400 +50401 +50404 +50405 +50408 +50409 +50412 +50413 +50416 +50417 +50420 +50421 +50424 +50425 +50428 +50429 +50432 +50433 +50436 +50437 +50440 +50441 +50444 +50445 +50448 +50449 +50452 +50453 +50456 +50457 +50460 +50461 +50464 +50465 +50468 +50469 +50472 +50473 +50476 +50477 +50480 +50481 +50484 +50485 +50488 +50489 +50492 +50493 +50496 +50497 +50500 +50501 +50504 +50505 +50508 +50509 +50512 +50513 +50516 +50517 +50518 +50519 +50522 +50523 +50526 +50527 +50530 +50531 +50534 +50535 +50538 +50539 +50542 +50543 +50546 +50547 +50550 +50551 +50554 +50555 +50558 +50559 +50562 +50563 +50566 +50567 +50570 +50571 +50574 +50575 +50578 +50579 +50582 +50583 +50586 +50587 +50590 +50591 +50594 +50595 +50598 +50599 +50602 +50603 +50606 +50607 +50610 +50611 +50614 +50615 +50618 +50619 +50622 +50623 +50626 +50627 +50630 +50631 +50634 +50635 +50638 +50639 +50642 +50643 +50646 +50647 +50650 +50651 +50654 +50655 +50658 +50659 +50662 +50663 +50666 +50667 +50670 +50671 +50674 +50675 +50678 +50679 +50682 +50683 +50686 +50687 +50690 +50691 +50694 +50695 +50698 +50699 +50702 +50703 +50706 +50707 +50710 +50711 +50714 +50715 +50718 +50719 +50722 +50723 +50726 +50727 +50730 +50731 +50734 +50735 +50738 +50739 +50742 +50743 +50746 +50747 +50750 +50751 +50754 +50755 +50758 +50759 +50762 +50763 +50766 +50767 +50770 +50771 +50774 +50773 +50776 +50777 +50780 +50781 +50784 +50785 +50788 +50789 +50792 +50793 +50796 +50797 +50800 +50801 +50804 +50805 +50808 +50809 +50812 +50813 +50816 +50817 +50820 +50821 +50824 +50825 +50828 +50829 +50832 +50833 +50836 +50837 +50840 +50841 +50844 +50845 +50848 +50849 +50852 +50853 +50856 +50857 +50860 +50861 +50864 +50865 +50868 +50869 +50872 +50873 +50876 +50877 +50880 +50881 +50884 +50885 +50888 +50889 +50892 +50893 +50896 +50897 +50900 +50901 +50904 +50905 +50908 +50909 +50912 +50913 +50916 +50917 +50920 +50921 +50924 +50925 +50928 +50929 +50932 +50933 +50936 +50937 +50940 +50941 +50944 +50945 +50948 +50949 +50952 +50953 +50956 +50957 +50960 +50961 +50964 +50965 +50968 +50969 +50972 +50973 +50976 +50977 +50980 +50981 +50984 +50985 +50988 +50989 +50992 +50993 +50996 +50997 +51000 +51001 +51004 +51005 +51008 +51009 +51012 +51013 +51016 +51017 +51020 +51021 +51024 +51025 +51028 +51029 +51030 +51031 +51034 +51035 +51038 +51039 +51042 +51043 +51046 +51047 +51050 +51051 +51054 +51055 +51058 +51059 +51062 +51063 +51066 +51067 +51070 +51071 +51074 +51075 +51078 +51079 +51082 +51083 +51086 +51087 +51090 +51091 +51094 +51095 +51098 +51099 +51102 +51103 +51106 +51107 +51110 +51111 +51114 +51115 +51118 +51119 +51122 +51123 +51126 +51127 +51130 +51131 +51134 +51135 +51138 +51139 +51142 +51143 +51146 +51147 +51150 +51151 +51154 +51155 +51158 +51159 +51162 +51163 +51166 +51167 +51170 +51171 +51174 +51175 +51178 +51179 +51182 +51183 +51186 +51187 +51190 +51191 +51194 +51195 +51198 +51199 +51202 +51203 +51206 +51207 +51210 +51211 +51214 +51215 +51218 +51219 +51222 +51223 +51226 +51227 +51230 +51231 +51234 +51235 +51238 +51239 +51242 +51243 +51246 +51247 +51250 +51251 +51254 +51255 +51258 +51259 +51262 +51263 +51266 +51267 +51270 +51271 +51274 +51275 +51278 +51279 +51282 +51283 +51286 +51285 +51288 +51289 +51292 +51293 +51296 +51297 +51300 +51301 +51304 +51305 +51308 +51309 +51312 +51313 +51316 +51317 +51320 +51321 +51324 +51325 +51328 +51329 +51332 +51333 +51336 +51337 +51340 +51341 +51344 +51345 +51348 +51349 +51352 +51353 +51356 +51357 +51360 +51361 +51364 +51365 +51368 +51369 +51372 +51373 +51376 +51377 +51380 +51381 +51384 +51385 +51388 +51389 +51392 +51393 +51396 +51397 +51400 +51401 +51404 +51405 +51408 +51409 +51412 +51413 +51416 +51417 +51420 +51421 +51424 +51425 +51428 +51429 +51432 +51433 +51436 +51437 +51440 +51441 +51444 +51445 +51448 +51449 +51452 +51453 +51456 +51457 +51460 +51461 +51464 +51465 +51468 +51469 +51472 +51473 +51476 +51477 +51480 +51481 +51484 +51485 +51488 +51489 +51492 +51493 +51496 +51497 +51500 +51501 +51504 +51505 +51508 +51509 +51512 +51513 +51516 +51517 +51520 +51521 +51524 +51525 +51528 +51529 +51532 +51533 +51536 +51537 +51540 +51541 +51542 +51543 +51546 +51547 +51550 +51551 +51554 +51555 +51558 +51559 +51562 +51563 +51566 +51567 +51570 +51571 +51574 +51575 +51578 +51579 +51582 +51583 +51586 +51587 +51590 +51591 +51594 +51595 +51598 +51599 +51602 +51603 +51606 +51607 +51610 +51611 +51614 +51615 +51618 +51619 +51622 +51623 +51626 +51627 +51630 +51631 +51634 +51635 +51638 +51639 +51642 +51643 +51646 +51647 +51650 +51651 +51654 +51655 +51658 +51659 +51662 +51663 +51666 +51667 +51670 +51671 +51674 +51675 +51678 +51679 +51682 +51683 +51686 +51687 +51690 +51691 +51694 +51695 +51698 +51699 +51702 +51703 +51706 +51707 +51710 +51711 +51714 +51715 +51718 +51719 +51722 +51723 +51726 +51727 +51730 +51731 +51734 +51735 +51738 +51739 +51742 +51743 +51746 +51747 +51750 +51751 +51754 +51755 +51758 +51759 +51762 +51763 +51766 +51767 +51770 +51771 +51774 +51775 +51778 +51779 +51782 +51783 +51786 +51787 +51790 +51791 +51794 +51795 +51798 +51797 +51800 +51801 +51804 +51805 +51808 +51809 +51812 +51813 +51816 +51817 +51820 +51821 +51824 +51825 +51828 +51829 +51832 +51833 +51836 +51837 +51840 +51841 +51844 +51845 +51848 +51849 +51852 +51853 +51856 +51857 +51860 +51861 +51864 +51865 +51868 +51869 +51872 +51873 +51876 +51877 +51880 +51881 +51884 +51885 +51888 +51889 +51892 +51893 +51896 +51897 +51900 +51901 +51904 +51905 +51908 +51909 +51912 +51913 +51916 +51917 +51920 +51921 +51924 +51925 +51928 +51929 +51932 +51933 +51936 +51937 +51940 +51941 +51944 +51945 +51948 +51949 +51952 +51953 +51956 +51957 +51960 +51961 +51964 +51965 +51968 +51969 +51972 +51973 +51976 +51977 +51980 +51981 +51984 +51985 +51988 +51989 +51992 +51993 +51996 +51997 +52000 +52001 +52004 +52005 +52008 +52009 +52012 +52013 +52016 +52017 +52020 +52021 +52024 +52025 +52028 +52029 +52032 +52033 +52036 +52037 +52040 +52041 +52044 +52045 +52048 +52049 +52052 +52053 +52054 +52055 +52058 +52059 +52062 +52063 +52066 +52067 +52070 +52071 +52074 +52075 +52078 +52079 +52082 +52083 +52086 +52087 +52090 +52091 +52094 +52095 +52098 +52099 +52102 +52103 +52106 +52107 +52110 +52111 +52114 +52115 +52118 +52119 +52122 +52123 +52126 +52127 +52130 +52131 +52134 +52135 +52138 +52139 +52142 +52143 +52146 +52147 +52150 +52151 +52154 +52155 +52158 +52159 +52162 +52163 +52166 +52167 +52170 +52171 +52174 +52175 +52178 +52179 +52182 +52183 +52186 +52187 +52190 +52191 +52194 +52195 +52198 +52199 +52202 +52203 +52206 +52207 +52210 +52211 +52214 +52215 +52218 +52219 +52222 +52223 +52226 +52227 +52230 +52231 +52234 +52235 +52238 +52239 +52242 +52243 +52246 +52247 +52250 +52251 +52254 +52255 +52258 +52259 +52262 +52263 +52266 +52267 +52270 +52271 +52274 +52275 +52278 +52279 +52282 +52283 +52286 +52287 +52290 +52291 +52294 +52295 +52298 +52299 +52302 +52303 +52306 +52307 +52309 +52311 +52312 +52315 +52316 +52319 +52320 +52323 +52324 +52327 +52328 +52331 +52332 +52335 +52336 +52339 +52340 +52343 +52344 +52347 +52348 +52351 +52352 +52355 +52356 +52359 +52360 +52363 +52364 +52367 +52368 +52371 +52372 +52375 +52376 +52379 +52380 +52383 +52384 +52387 +52388 +52391 +52392 +52395 +52396 +52399 +52400 +52403 +52404 +52407 +52408 +52411 +52412 +52415 +52416 +52419 +52420 +52423 +52424 +52427 +52428 +52431 +52432 +52435 +52436 +52439 +52440 +52443 +52444 +52447 +52448 +52451 +52452 +52455 +52456 +52459 +52460 +52463 +52464 +52467 +52468 +52471 +52472 +52475 +52476 +52479 +52480 +52483 +52484 +52487 +52488 +52491 +52492 +52495 +52496 +52499 +52500 +52503 +52504 +52507 +52508 +52511 +52512 +52515 +52516 +52519 +52520 +52523 +52524 +52527 +52528 +52531 +52532 +52535 +52536 +52539 +52540 +52543 +52544 +52547 +52548 +52551 +52552 +52555 +52556 +52559 +52560 +52562 +52563 +52566 +52567 +52570 +52571 +52574 +52575 +52578 +52579 +52582 +52583 +52586 +52587 +52590 +52591 +52594 +52595 +52598 +52599 +52602 +52603 +52606 +52607 +52610 +52611 +52614 +52615 +52618 +52619 +52622 +52623 +52626 +52627 +52630 +52631 +52634 +52635 +52638 +52639 +52642 +52643 +52646 +52647 +52650 +52651 +52654 +52655 +52658 +52659 +52662 +52663 +52666 +52667 +52670 +52671 +52674 +52675 +52678 +52679 +52682 +52683 +52686 +52687 +52690 +52691 +52694 +52695 +52698 +52699 +52702 +52703 +52706 +52707 +52710 +52711 +52714 +52715 +52718 +52719 +52722 +52723 +52726 +52727 +52730 +52731 +52734 +52735 +52738 +52739 +52742 +52743 +52746 +52747 +52750 +52751 +52754 +52755 +52758 +52759 +52762 +52763 +52766 +52767 +52770 +52771 +52774 +52775 +52778 +52779 +52782 +52783 +52786 +52787 +52790 +52791 +52794 +52795 +52798 +52799 +52802 +52803 +52806 +52807 +52809 +52811 +52812 +52815 +52816 +52819 +52820 +52823 +52824 +52827 +52828 +52831 +52832 +52835 +52836 +52839 +52840 +52843 +52844 +52847 +52848 +52851 +52852 +52855 +52856 +52859 +52860 +52863 +52864 +52867 +52868 +52871 +52872 +52875 +52876 +52879 +52880 +52883 +52884 +52887 +52888 +52891 +52892 +52895 +52896 +52899 +52900 +52903 +52904 +52907 +52908 +52911 +52912 +52915 +52916 +52919 +52920 +52923 +52924 +52927 +52928 +52931 +52932 +52935 +52936 +52939 +52940 +52943 +52944 +52947 +52948 +52951 +52952 +52955 +52956 +52959 +52960 +52963 +52964 +52967 +52968 +52971 +52972 +52975 +52976 +52979 +52980 +52983 +52984 +52987 +52988 +52991 +52992 +52995 +52996 +52999 +53000 +53003 +53004 +53007 +53008 +53011 +53012 +53015 +53016 +53019 +53020 +53023 +53024 +53027 +53028 +53031 +53032 +53035 +53036 +53039 +53040 +53043 +53044 +53047 +53048 +53051 +53052 +53054 +53055 +53058 +53059 +53062 +53063 +53066 +53067 +53070 +53071 +53074 +53075 +53078 +53079 +53082 +53083 +53086 +53087 +53090 +53091 +53094 +53095 +53098 +53099 +53102 +53103 +53106 +53107 +53110 +53111 +53114 +53115 +53118 +53119 +53122 +53123 +53126 +53127 +53130 +53131 +53134 +53135 +53138 +53139 +53142 +53143 +53146 +53147 +53150 +53151 +53154 +53155 +53158 +53159 +53162 +53163 +53166 +53167 +53170 +53171 +53174 +53175 +53178 +53179 +53182 +53183 +53186 +53187 +53190 +53191 +53194 +53195 +53198 +53199 +53202 +53203 +53206 +53207 +53210 +53211 +53214 +53215 +53218 +53219 +53222 +53223 +53226 +53227 +53230 +53231 +53234 +53235 +53238 +53239 +53242 +53243 +53246 +53247 +53250 +53251 +53254 +53255 +53258 +53259 +53262 +53263 +53266 +53267 +53270 +53271 +53274 +53275 +53278 +53279 +53282 +53283 +53286 +53287 +53290 +53291 +53293 +53295 +53296 +53299 +53300 +53303 +53304 +53307 +53308 +53311 +53312 +53315 +53316 +53319 +53320 +53323 +53324 +53327 +53328 +53331 +53332 +53335 +53336 +53339 +53340 +53343 +53344 +53347 +53348 +53351 +53352 +53355 +53356 +53359 +53361 +53362 +53365 +53366 +53369 +53370 +53373 +53374 +53377 +53378 +53381 +53382 +53385 +53386 +53389 +53390 +53393 +53394 +53397 +53398 +53401 +53402 +53405 +53406 +53409 +53410 +53413 +53414 +53417 +53418 +53421 +53422 +53425 +53426 +53429 +53430 +53433 +53434 +53437 +53438 +53441 +53442 +53445 +53446 +53449 +53450 +53453 +53454 +53457 +53458 +53461 +53462 +53465 +53466 +53469 +53470 +53472 +53473 +53476 +53477 +53480 +53481 +53484 +53485 +53488 +53489 +53492 +53493 +53496 +53497 +53500 +53501 +53504 +53505 +53508 +53509 +53512 +53513 +53516 +53517 +53520 +53521 +53524 +53525 +53528 +53530 +53531 +53534 +53535 +53538 +53539 +53542 +53543 +53546 +53547 +53550 +53551 +53554 +53555 +53558 +53559 +53562 +53563 +53566 +53567 +53570 +53571 +53574 +53575 +53578 +53579 +53582 +53583 +53586 +53587 +53590 +53591 +53594 +53595 +53598 +53599 +53602 +53603 +53606 +53607 +53610 +53611 +53614 +53615 +53618 +53619 +53622 +53623 +53626 +53627 +53630 +53631 +53633 +53635 +53636 +53639 +53640 +53643 +53644 +53647 +53648 +53651 +53652 +53655 +53656 +53659 +53660 +53663 +53664 +53667 +53668 +53671 +53672 +53675 +53676 +53679 +53681 +53682 +53685 +53686 +53689 +53690 +53693 +53694 +53697 +53698 +53701 +53702 +53705 +53706 +53709 +53710 +53713 +53714 +53717 +53718 +53721 +53722 +53725 +53726 +53729 +53730 +53733 +53734 +53737 +53738 +53741 +53742 +53745 +53746 +53749 +53750 +53753 +53754 +53757 +53758 +53761 +53762 +53765 +53766 +53769 +53770 +53773 +53774 +53777 +53779 +53778 +53781 +53782 +53785 +53786 +53789 +53790 +53793 +53794 +53797 +53798 +53801 +53802 +53805 +53806 +53809 +53810 +53813 +53814 +53817 +53818 +53821 +53822 +53825 +53826 +53829 +53830 +53833 +53834 +53837 +53838 +53841 +53842 +53845 +53846 +53849 +53850 +53853 +53854 +53857 +53858 +53861 +53862 +53865 +53866 +53869 +53870 +53872 +53874 +53875 +53878 +53879 +53882 +53883 +53886 +53887 +53890 +53891 +53894 +53895 +53898 +53899 +53902 +53903 +53906 +53907 +53910 +53911 +53914 +53915 +53918 +53919 +53922 +53923 +53926 +53927 +53930 +53931 +53934 +53935 +53938 +53939 +53942 +53943 +53946 +53947 +53950 +53951 +53954 +53955 +53958 +53959 +53962 +53964 +53965 +53968 +53969 +53972 +53973 +53976 +53977 +53980 +53981 +53984 +53985 +53988 +53989 +53992 +53993 +53996 +53997 +54000 +54001 +54004 +54005 +54008 +54009 +54012 +54013 +54016 +54017 +54020 +54021 +54024 +54025 +54028 +54029 +54032 +54033 +54036 +54037 +54040 +54041 +54044 +54046 +54047 +54050 +54051 +54054 +54055 +54058 +54059 +54062 +54063 +54066 +54067 +54070 +54071 +54074 +54075 +54078 +54079 +54082 +54083 +54086 +54087 +54090 +54091 +54094 +54095 +54098 +54099 +54102 +54103 +54106 +54107 +54110 +54111 +54116 +54115 +54118 +54119 +54122 +54123 +54126 +54127 +54130 +54131 +54134 +54135 +54138 +54139 +54142 +54143 +54146 +54147 +54150 +54151 +54154 +54155 +54158 +54159 +54162 +54163 +54166 +54167 +54170 +54171 +54174 +54175 +54178 +54179 +54182 +54185 +54186 +54187 +54190 +54191 +54194 +54195 +54198 +54199 +54202 +54203 +54206 +54207 +54210 +54211 +54214 +54215 +54218 +54219 +54222 +54223 +54226 +54227 +54230 +54231 +54234 +54235 +54238 +54239 +54242 +54243 +54246 +54247 +54250 +54251 +54256 +54255 +54258 +54259 +54262 +54263 +54266 +54267 +54270 +54271 +54274 +54275 +54278 +54279 +54282 +54283 +54286 +54287 +54290 +54291 +54294 +54295 +54298 +54299 +54302 +54303 +54306 +54307 +54310 +54311 +54314 +54315 +54318 +54319 +54322 +54325 +54326 +54327 +54330 +54331 +54334 +54335 +54338 +54339 +54342 +54343 +54346 +54347 +54350 +54351 +54354 +54355 +54358 +54359 +54362 +54363 +54366 +54367 +54370 +54371 +54374 +54375 +54378 +54379 +54382 +54383 +54386 +54387 +54390 +54391 +54396 +54395 +54398 +54399 +54402 +54403 +54406 +54407 +54410 +54411 +54414 +54415 +54418 +54419 +54422 +54423 +54426 +54427 +54430 +54431 +54434 +54435 +54438 +54439 +54442 +54443 +54446 +54447 +54450 +54451 +54454 +54455 +54458 +54459 +54462 +54465 +54466 +54467 +54470 +54471 +54474 +54475 +54478 +54479 +54482 +54483 +54486 +54487 +54490 +54491 +54494 +54495 +54498 +54499 +54502 +54503 +54506 +54507 +54510 +54511 +54514 +54515 +54518 +54519 +54522 +54523 +54526 +54527 +54530 +54531 +54535 +54537 +54538 +54541 +54542 +54545 +54546 +54549 +54550 +54553 +54554 +54557 +54558 +54561 +54562 +54565 +54566 +54569 +54570 +54573 +54574 +54577 +54578 +54581 +54582 +54585 +54586 +54589 +54590 +54593 +54594 +54597 +54598 +54601 +54605 +54604 +54607 +54608 +54611 +54612 +54615 +54616 +54619 +54620 +54623 +54624 +54627 +54628 +54631 +54632 +54635 +54636 +54639 +54640 +54643 +54644 +54647 +54648 +54651 +54652 +54655 +54656 +54659 +54660 +54663 +54664 +54667 +54668 +54672 +54673 +54674 +54677 +54678 +54681 +54682 +54685 +54686 +54689 +54690 +54693 +54694 +54697 +54698 +54701 +54702 +54705 +54706 +54709 +54710 +54713 +54714 +54717 +54718 +54721 +54722 +54725 +54726 +54729 +54730 +54733 +54734 +54737 +54740 +54742 +54743 +54746 +54747 +54750 +54751 +54754 +54755 +54758 +54759 +54762 +54763 +54766 +54767 +54770 +54771 +54774 +54775 +54778 +54779 +54782 +54783 +54786 +54787 +54790 +54791 +54794 +54795 +54798 +54799 +54802 +54803 +54807 +54809 +54810 +54813 +54814 +54817 +54818 +54821 +54822 +54825 +54826 +54829 +54830 +54833 +54834 +54837 +54838 +54841 +54842 +54845 +54846 +54849 +54850 +54853 +54854 +54857 +54858 +54861 +54862 +54865 +54866 +54869 +54873 +54872 +54875 +54876 +54879 +54880 +54883 +54884 +54887 +54888 +54891 +54892 +54895 +54896 +54899 +54900 +54903 +54904 +54907 +54908 +54911 +54912 +54915 +54916 +54919 +54920 +54923 +54924 +54927 +54928 +54931 +54932 +54936 +54937 +54938 +54941 +54942 +54945 +54946 +54949 +54950 +54953 +54954 +54957 +54958 +54961 +54962 +54965 +54966 +54969 +54970 +54973 +54974 +54977 +54978 +54981 +54982 +54985 +54986 +54989 +54990 +54993 +54994 +54997 +55000 +55002 +55003 +55006 +55007 +55010 +55011 +55014 +55015 +55018 +55019 +55022 +55023 +55026 +55027 +55030 +55031 +55034 +55035 +55038 +55039 +55042 +55043 +55046 +55047 +55050 +55051 +55054 +55055 +55058 +55059 +55064 +55063 +55066 +55067 +55070 +55071 +55074 +55075 +55078 +55079 +55082 +55083 +55086 +55087 +55090 +55091 +55094 +55095 +55098 +55099 +55102 +55103 +55106 +55107 +55110 +55111 +55114 +55115 +55118 +55119 +55122 +55125 +55126 +55127 +55130 +55131 +55134 +55135 +55138 +55139 +55142 +55143 +55146 +55147 +55150 +55151 +55154 +55155 +55158 +55159 +55162 +55163 +55166 +55167 +55170 +55171 +55174 +55175 +55178 +55179 +55182 +55183 +55188 +55187 +55190 +55191 +55194 +55195 +55198 +55199 +55202 +55203 +55206 +55207 +55210 +55211 +55214 +55215 +55218 +55219 +55222 +55223 +55226 +55227 +55230 +55231 +55234 +55235 +55238 +55239 +55242 +55243 +55246 +55249 +55250 +55251 +55254 +55255 +55258 +55259 +55262 +55263 +55266 +55267 +55270 +55271 +55274 +55275 +55278 +55279 +55282 +55283 +55286 +55287 +55290 +55291 +55294 +55295 +55298 +55299 +55302 +55303 +55306 +55307 +55312 +55311 +55314 +55315 +55318 +55319 +55322 +55323 +55326 +55327 +55330 +55331 +55334 +55335 +55338 +55339 +55342 +55343 +55346 +55347 +55350 +55351 +55354 +55355 +55358 +55359 +55362 +55363 +55366 +55367 +55370 +55373 +55374 +55375 +55378 +55379 +55382 +55383 +55386 +55387 +55390 +55391 +55394 +55395 +55398 +55399 +55402 +55403 +55406 +55407 +55410 +55411 +55414 +55415 +55418 +55419 +55422 +55423 +55426 +55427 +55430 +55431 +55436 +55435 +55438 +55439 +55442 +55443 +55446 +55447 +55450 +55451 +55454 +55455 +55458 +55459 +55462 +55463 +55466 +55467 +55470 +55471 +55474 +55475 +55478 +55479 +55482 +55483 +55486 +55487 +55490 +55491 +55494 +55497 +55498 +55499 +55502 +55503 +55506 +55507 +55510 +55511 +55514 +55515 +55518 +55519 +55522 +55523 +55526 +55527 +55530 +55531 +55534 +55535 +55538 +55539 +55542 +55543 +55546 +55547 +55550 +55551 +55554 +55555 +55560 +55559 +55562 +55563 +55566 +55567 +55570 +55571 +55574 +55575 +55578 +55579 +55582 +55583 +55586 +55587 +55590 +55591 +55594 +55595 +55598 +55599 +55602 +55603 +55606 +55607 +55610 +55611 +55614 +55615 +55618 +55621 +55622 +55623 +55626 +55627 +55630 +55631 +55634 +55635 +55638 +55639 +55642 +55643 +55646 +55647 +55650 +55651 +55654 +55655 +55658 +55659 +55662 +55663 +55666 +55667 +55670 +55671 +55674 +55675 +55678 +55679 +55683 +55685 +55686 +55689 +55690 +55693 +55694 +55697 +55698 +55701 +55702 +55705 +55706 +55709 +55710 +55713 +55714 +55717 +55718 +55721 +55722 +55725 +55726 +55729 +55730 +55733 +55734 +55737 +55738 +55741 +55745 +55744 +55747 +55748 +55751 +55752 +55755 +55756 +55759 +55760 +55763 +55764 +55767 +55768 +55771 +55772 +55775 +55776 +55779 +55780 +55783 +55784 +55787 +55788 +55791 +55792 +55795 +55796 +55799 +55800 +55804 +55805 +55806 +55809 +55810 +55813 +55814 +55817 +55818 +55821 +55822 +55825 +55826 +55829 +55830 +55833 +55834 +55837 +55838 +55841 +55842 +55845 +55846 +55849 +55850 +55853 +55854 +55857 +55858 +55861 +55864 +55866 +55867 +55870 +55871 +55874 +55875 +55878 +55879 +55882 +55883 +55886 +55887 +55890 +55891 +55894 +55895 +55898 +55899 +55902 +55903 +55906 +55907 +55910 +55911 +55914 +55915 +55918 +55919 +55923 +55925 +55926 +55929 +55930 +55933 +55934 +55937 +55938 +55941 +55942 +55945 +55946 +55949 +55950 +55953 +55954 +55957 +55958 +55961 +55962 +55965 +55966 +55969 +55970 +55973 +55974 +55977 +55981 +55980 +55983 +55984 +55987 +55988 +55991 +55992 +55995 +55996 +55999 +56000 +56003 +56004 +56007 +56008 +56011 +56012 +56015 +56016 +56019 +56020 +56023 +56024 +56027 +56028 +56031 +56032 +56036 +56037 +56038 +56041 +56042 +56045 +56046 +56049 +56050 +56053 +56054 +56057 +56058 +56061 +56062 +56065 +56066 +56069 +56070 +56073 +56074 +56077 +56078 +56081 +56082 +56085 +56086 +56089 +56093 +56092 +56095 +56096 +56099 +56100 +56103 +56104 +56107 +56108 +56111 +56112 +56115 +56116 +56119 +56120 +56123 +56124 +56127 +56128 +56131 +56132 +56135 +56136 +56139 +56140 +56143 +56144 +56148 +56149 +56150 +56153 +56154 +56157 +56158 +56161 +56162 +56165 +56166 +56169 +56170 +56173 +56174 +56177 +56178 +56181 +56182 +56185 +56186 +56189 +56190 +56193 +56194 +56197 +56198 +56201 +56205 +56204 +56207 +56208 +56211 +56212 +56215 +56216 +56219 +56220 +56223 +56224 +56227 +56228 +56231 +56232 +56235 +56236 +56239 +56240 +56243 +56244 +56247 +56248 +56251 +56252 +56255 +56256 +56260 +56261 +56262 +56265 +56266 +56269 +56270 +56273 +56274 +56277 +56278 +56281 +56282 +56285 +56286 +56289 +56290 +56293 +56294 +56297 +56298 +56301 +56302 +56305 +56306 +56309 +56310 +56313 +56317 +56316 +56319 +56320 +56323 +56324 +56327 +56328 +56331 +56332 +56335 +56336 +56339 +56340 +56343 +56344 +56347 +56348 +56351 +56352 +56355 +56356 +56359 +56360 +56363 +56364 +56367 +56368 +56372 +56373 +56374 +56377 +56378 +56381 +56382 +56385 +56386 +56389 +56390 +56393 +56394 +56397 +56398 +56401 +56402 +56405 +56406 +56409 +56410 +56413 +56414 +56417 +56418 +56421 +56422 +56425 +56429 +56428 +56431 +56432 +56435 +56436 +56439 +56440 +56443 +56444 +56447 +56448 +56451 +56452 +56455 +56456 +56459 +56460 +56463 +56464 +56467 +56468 +56471 +56472 +56475 +56476 +56479 +56480 +56484 +56485 +56486 +56489 +56490 +56493 +56494 +56497 +56498 +56501 +56502 +56505 +56506 +56509 +56510 +56513 +56514 +56517 +56518 +56521 +56522 +56525 +56526 +56529 +56530 +56533 +56534 +56537 +56540 +56542 +56543 +56546 +56547 +56550 +56551 +56554 +56555 +56558 +56559 +56562 +56563 +56566 +56567 +56570 +56571 +56574 +56575 +56578 +56579 +56582 +56583 +56586 +56587 +56590 +56591 +56596 +56595 +56598 +56599 +56602 +56603 +56606 +56607 +56610 +56611 +56614 +56615 +56618 +56619 +56622 +56623 +56626 +56627 +56630 +56631 +56634 +56635 +56638 +56639 +56642 +56643 +56646 +56649 +56650 +56651 +56654 +56655 +56658 +56659 +56662 +56663 +56666 +56667 +56670 +56671 +56674 +56675 +56678 +56679 +56682 +56683 +56686 +56687 +56690 +56691 +56694 +56695 +56698 +56699 +56704 +56703 +56706 +56707 +56710 +56711 +56714 +56715 +56718 +56719 +56722 +56723 +56726 +56727 +56730 +56731 +56734 +56735 +56738 +56739 +56742 +56743 +56746 +56747 +56750 +56751 +56754 +56757 +56758 +56759 +56762 +56763 +56766 +56767 +56770 +56771 +56774 +56775 +56778 +56779 +56782 +56783 +56786 +56787 +56790 +56791 +56794 +56795 +56798 +56799 +56802 +56803 +56806 +56807 +56812 +56811 +56814 +56815 +56818 +56819 +56822 +56823 +56826 +56827 +56830 +56831 +56834 +56835 +56838 +56839 +56842 +56843 +56846 +56847 +56850 +56851 +56854 +56855 +56858 +56859 +56862 +56865 +56866 +56867 +56870 +56871 +56874 +56875 +56878 +56879 +56882 +56883 +56886 +56887 +56890 +56891 +56894 +56895 +56898 +56899 +56902 +56903 +56906 +56907 +56910 +56911 +56914 +56915 +56920 +56919 +56922 +56923 +56926 +56927 +56930 +56931 +56934 +56935 +56938 +56939 +56942 +56943 +56946 +56947 +56950 +56951 +56954 +56955 +56958 +56959 +56962 +56963 +56966 +56967 +56970 +56973 +56974 +56975 +56978 +56979 +56982 +56983 +56986 +56987 +56990 +56991 +56994 +56995 +56998 +56999 +57002 +57003 +57006 +57007 +57010 +57011 +57014 +57015 +57018 +57019 +57022 +57023 +57028 +57027 +57030 +57031 +57034 +57035 +57038 +57039 +57042 +57043 +57046 +57047 +57050 +57051 +57054 +57055 +57058 +57059 +57062 +57063 +57066 +57067 +57070 +57071 +57074 +57075 +57078 +57081 +57082 +57083 +57086 +57087 +57090 +57091 +57094 +57095 +57098 +57099 +57102 +57103 +57106 +57107 +57110 +57111 +57114 +57115 +57118 +57119 +57122 +57123 +57126 +57127 +57130 +57131 +57136 +57135 +57138 +57139 +57142 +57143 +57146 +57147 +57150 +57151 +57154 +57155 +57158 +57159 +57162 +57163 +57166 +57167 +57170 +57171 +57174 +57175 +57178 +57179 +57182 +57183 +57186 +57189 +57190 +57191 +57194 +57195 +57198 +57199 +57202 +57203 +57206 +57207 +57210 +57211 +57214 +57215 +57218 +57219 +57222 +57223 +57226 +57227 +57230 +57231 +57234 +57235 +57238 +57239 +57244 +57243 +57246 +57247 +57250 +57251 +57254 +57255 +57258 +57259 +57262 +57263 +57266 +57267 +57270 +57271 +57274 +57275 +57278 +57279 +57282 +57283 +57286 +57287 +57290 +57291 +57294 +57297 +57298 +57299 +57302 +57303 +57306 +57307 +57310 +57311 +57314 +57315 +57318 +57319 +57322 +57323 +57326 +57327 +57330 +57331 +57334 +57335 +57338 +57339 +57342 +57343 +57346 +57347 +57351 +57353 +57354 +57357 +57358 +57361 +57362 +57365 +57366 +57369 +57370 +57373 +57374 +57377 +57378 +57381 +57382 +57385 +57386 +57389 +57390 +57393 +57394 +57397 +57398 +57401 +57405 +57404 +57407 +57408 +57411 +57412 +57415 +57416 +57419 +57420 +57423 +57424 +57427 +57428 +57431 +57432 +57435 +57436 +57439 +57440 +57443 +57444 +57447 +57448 +57451 +57452 +57456 +57457 +57458 +57461 +57462 +57465 +57466 +57469 +57470 +57473 +57474 +57477 +57478 +57481 +57482 +57485 +57486 +57489 +57490 +57493 +57494 +57497 +57498 +57501 +57502 +57505 +57509 +57508 +57511 +57512 +57515 +57516 +57519 +57520 +57523 +57524 +57527 +57528 +57531 +57532 +57535 +57536 +57539 +57540 +57543 +57544 +57547 +57548 +57551 +57552 +57555 +57556 +57560 +57561 +57562 +57565 +57566 +57569 +57570 +57573 +57574 +57577 +57578 +57581 +57582 +57585 +57586 +57589 +57590 +57593 +57594 +57597 +57598 +57601 +57602 +57605 +57606 +57609 +57613 +57612 +57615 +57616 +57619 +57620 +57623 +57624 +57627 +57628 +57631 +57632 +57635 +57636 +57639 +57640 +57643 +57644 +57647 +57648 +57651 +57652 +57655 +57656 +57659 +57660 +57664 +57665 +57666 +57669 +57670 +57673 +57674 +57677 +57678 +57681 +57682 +57685 +57686 +57689 +57690 +57693 +57694 +57697 +57698 +57701 +57702 +57705 +57706 +57709 +57710 +57713 +57717 +57716 +57719 +57720 +57723 +57724 +57727 +57728 +57731 +57732 +57735 +57736 +57739 +57740 +57743 +57744 +57747 +57748 +57751 +57752 +57755 +57756 +57759 +57760 +57763 +57764 +57768 +57769 +57770 +57773 +57774 +57777 +57778 +57781 +57782 +57785 +57786 +57789 +57790 +57793 +57794 +57797 +57798 +57801 +57802 +57805 +57806 +57809 +57810 +57813 +57814 +57817 +57821 +57820 +57823 +57824 +57827 +57828 +57831 +57832 +57835 +57836 +57839 +57840 +57843 +57844 +57847 +57848 +57851 +57852 +57855 +57856 +57859 +57860 +57863 +57864 +57867 +57868 +57872 +57873 +57874 +57877 +57878 +57881 +57882 +57885 +57886 +57889 +57890 +57893 +57894 +57897 +57898 +57901 +57902 +57905 +57906 +57909 +57910 +57913 +57914 +57917 +57918 +57921 +57925 +57924 +57927 +57928 +57931 +57932 +57935 +57936 +57939 +57940 +57943 +57944 +57947 +57948 +57951 +57952 +57955 +57956 +57959 +57960 +57963 +57964 +57967 +57968 +57971 +57972 +57976 +57977 +57978 +57981 +57982 +57985 +57986 +57989 +57990 +57993 +57994 +57997 +57998 +58001 +58002 +58005 +58006 +58009 +58010 +58013 +58014 +58017 +58018 +58021 +58022 +58025 +58029 +58028 +58031 +58032 +58035 +58036 +58039 +58040 +58043 +58044 +58047 +58048 +58051 +58052 +58055 +58056 +58059 +58060 +58063 +58064 +58067 +58068 +58071 +58072 +58075 +58076 +58080 +58081 +58082 +58085 +58086 +58089 +58090 +58093 +58094 +58097 +58098 +58101 +58102 +58105 +58106 +58109 +58110 +58113 +58114 +58117 +58118 +58121 +58122 +58125 +58126 +58129 +58133 +58132 +58135 +58136 +58139 +58140 +58143 +58144 +58147 +58148 +58151 +58152 +58155 +58156 +58159 +58160 +58163 +58164 +58167 +58168 +58171 +58172 +58175 +58176 +58179 +58180 +58184 +58185 +58186 +58189 +58190 +58193 +58194 +58197 +58198 +58201 +58202 +58205 +58206 +58209 +58210 +58213 +58214 +58217 +58218 +58221 +58222 +58225 +58226 +58229 +58230 +58233 +58236 +58236 +58237 +58240 +58241 +58244 +58245 +58248 +58249 +58252 +58253 +58256 +58257 +58260 +58261 +58264 +58265 +58268 +58269 +58272 +58273 +58276 +58277 +58280 +58281 +58284 +58285 +58290 +58289 +58292 +58293 +58296 +58297 +58300 +58301 +58304 +58305 +58308 +58309 +58312 +58313 +58316 +58317 +58320 +58321 +58324 +58325 +58328 +58329 +58332 +58333 +58336 +58337 +58340 +58343 +58344 +58345 +58348 +58349 +58352 +58353 +58356 +58357 +58360 +58361 +58364 +58365 +58368 +58369 +58372 +58373 +58376 +58377 +58380 +58381 +58384 +58385 +58388 +58389 +58392 +58393 +58398 +58397 +58400 +58401 +58404 +58405 +58408 +58409 +58412 +58413 +58416 +58417 +58420 +58421 +58424 +58425 +58428 +58429 +58432 +58433 +58436 +58437 +58440 +58441 +58444 +58445 +58448 +58451 +58452 +58453 +58456 +58457 +58460 +58461 +58464 +58465 +58468 +58469 +58472 +58473 +58476 +58477 +58480 +58481 +58484 +58485 +58488 +58489 +58492 +58493 +58496 +58497 +58500 +58501 +58506 +58505 +58508 +58509 +58512 +58513 +58516 +58517 +58520 +58521 +58524 +58525 +58528 +58529 +58532 +58533 +58536 +58537 +58540 +58541 +58544 +58545 +58548 +58549 +58552 +58553 +58556 +58559 +58560 +58561 +58564 +58565 +58568 +58569 +58572 +58573 +58576 +58577 +58580 +58581 +58584 +58585 +58588 +58589 +58592 +58593 +58596 +58597 +58600 +58601 +58604 +58605 +58608 +58609 +58614 +58613 +58616 +58617 +58620 +58621 +58624 +58625 +58628 +58629 +58632 +58633 +58636 +58637 +58640 +58641 +58644 +58645 +58648 +58649 +58652 +58653 +58656 +58657 +58660 +58661 +58664 +58667 +58668 +58669 +58672 +58673 +58676 +58677 +58680 +58681 +58684 +58685 +58688 +58689 +58692 +58693 +58696 +58697 +58700 +58701 +58704 +58705 +58708 +58709 +58712 +58713 +58716 +58717 +58722 +58721 +58724 +58725 +58728 +58729 +58732 +58733 +58736 +58737 +58740 +58741 +58744 +58745 +58748 +58749 +58752 +58753 +58756 +58757 +58760 +58761 +58764 +58765 +58768 +58769 +58772 +58775 +58776 +58777 +58780 +58781 +58784 +58785 +58788 +58789 +58792 +58793 +58796 +58797 +58800 +58801 +58804 +58805 +58808 +58809 +58812 +58813 +58816 +58817 +58820 +58821 +58824 +58825 +58830 +58829 +58832 +58833 +58836 +58837 +58840 +58841 +58844 +58845 +58848 +58849 +58852 +58853 +58856 +58857 +58860 +58861 +58864 +58865 +58868 +58869 +58872 +58873 +58876 +58877 +58880 +58883 +58884 +58885 +58888 +58889 +58892 +58893 +58896 +58897 +58900 +58901 +58904 +58905 +58908 +58909 +58912 +58913 +58916 +58917 +58920 +58921 +58924 +58925 +58928 +58929 +58932 +58933 +58938 +58937 +58940 +58941 +58944 +58945 +58948 +58949 +58952 +58953 +58956 +58957 +58960 +58961 +58964 +58965 +58968 +58969 +58972 +58973 +58976 +58977 +58980 +58981 +58984 +58985 +58988 +58991 +58992 +58993 +58996 +58997 +59000 +59001 +59004 +59005 +59008 +59009 +59012 +59013 +59016 +59017 +59020 +59021 +59024 +59025 +59028 +59029 +59032 +59033 +59036 +59037 +59040 +59041 +59045 +59045 +59046 +59049 +59050 +59053 +59054 +59057 +59058 +59061 +59062 +59065 +59066 +59069 +59070 +59073 +59074 +59077 +59078 +59081 +59082 +59085 +59086 +59089 +59090 +59093 +59094 +59097 +59101 +59100 +59103 +59104 +59107 +59108 +59111 +59112 +59115 +59116 +59119 +59120 +59123 +59124 +59127 +59128 +59131 +59132 +59135 +59136 +59139 +59140 +59143 +59144 +59147 +59148 +59151 +59152 +59156 +59157 +59158 +59161 +59162 +59165 +59166 +59169 +59170 +59173 +59174 +59177 +59178 +59181 +59182 +59185 +59186 +59189 +59190 +59193 +59194 +59197 +59198 +59201 +59202 +59205 +59206 +59209 +59213 +59212 +59215 +59216 +59219 +59220 +59223 +59224 +59227 +59228 +59231 +59232 +59235 +59236 +59239 +59240 +59243 +59244 +59247 +59248 +59251 +59252 +59255 +59256 +59259 +59260 +59263 +59264 +59268 +59269 +59270 +59273 +59274 +59277 +59278 +59281 +59282 +59285 +59286 +59289 +59290 +59293 +59294 +59297 +59298 +59301 +59302 +59305 +59306 +59309 +59310 +59313 +59314 +59317 +59318 +59321 +59325 +59324 +59327 +59328 +59331 +59332 +59335 +59336 +59339 +59340 +59343 +59344 +59347 +59348 +59351 +59352 +59355 +59356 +59359 +59360 +59363 +59364 +59367 +59368 +59371 +59372 +59375 +59376 +59380 +59381 +59382 +59385 +59386 +59389 +59390 +59393 +59394 +59397 +59398 +59401 +59402 +59405 +59406 +59409 +59410 +59413 +59414 +59417 +59418 +59421 +59422 +59425 +59426 +59429 +59430 +59433 +59437 +59436 +59439 +59440 +59443 +59444 +59447 +59448 +59451 +59452 +59455 +59456 +59459 +59460 +59463 +59464 +59467 +59468 +59471 +59472 +59475 +59476 +59479 +59480 +59483 +59484 +59487 +59488 +59492 +59493 +59494 +59497 +59498 +59501 +59502 +59505 +59506 +59509 +59510 +59513 +59514 +59517 +59518 +59521 +59522 +59525 +59526 +59529 +59530 +59533 +59534 +59537 +59538 +59541 +59542 +59545 +59549 +59548 +59551 +59552 +59555 +59556 +59559 +59560 +59563 +59564 +59567 +59568 +59571 +59572 +59575 +59576 +59579 +59580 +59583 +59584 +59587 +59588 +59591 +59592 +59595 +59596 +59599 +59600 +59604 +59605 +59606 +59609 +59610 +59613 +59614 +59617 +59618 +59621 +59622 +59625 +59626 +59629 +59630 +59633 +59634 +59637 +59638 +59641 +59642 +59645 +59646 +59649 +59650 +59653 +59654 +59657 +59660 +59660 +59661 +59664 +59665 +59668 +59669 +59672 +59673 +59676 +59677 +59680 +59681 +59684 +59685 +59688 +59689 +59692 +59693 +59696 +59697 +59700 +59701 +59704 +59705 +59708 +59709 +59712 +59713 +59717 +59717 +59718 +59721 +59722 +59725 +59726 +59729 +59730 +59733 +59734 +59737 +59738 +59741 +59742 +59745 +59746 +59749 +59750 +59753 +59754 +59757 +59758 +59761 +59762 +59765 +59766 +59769 +59770 +59773 +59777 +59776 +59779 +59780 +59783 +59784 +59787 +59788 +59791 +59792 +59795 +59796 +59799 +59800 +59803 +59804 +59807 +59808 +59811 +59812 +59815 +59816 +59819 +59820 +59823 +59824 +59827 +59828 +59831 +59832 +59836 +59837 +59838 +59841 +59842 +59845 +59846 +59849 +59850 +59853 +59854 +59857 +59858 +59861 +59862 +59865 +59866 +59869 +59870 +59873 +59874 +59877 +59878 +59881 +59882 +59885 +59886 +59889 +59890 +59893 +59896 +59896 +59897 +59900 +59901 +59904 +59905 +59908 +59909 +59912 +59913 +59916 +59917 +59920 +59921 +59924 +59925 +59928 +59929 +59932 +59933 +59936 +59937 +59940 +59941 +59944 +59945 +59948 +59949 +59952 +59953 +59958 +59957 +59960 +59961 +59964 +59965 +59968 +59969 +59972 +59973 +59976 +59977 +59980 +59981 +59984 +59985 +59988 +59989 +59992 +59993 +59996 +59997 +60000 +60001 +60004 +60005 +60008 +60009 +60012 +60013 +60016 +60019 +60020 +60021 +60024 +60025 +60028 +60029 +60032 +60033 +60036 +60037 +60040 +60041 +60044 +60045 +60048 +60049 +60052 +60053 +60056 +60057 +60060 +60061 +60064 +60065 +60068 +60069 +60072 +60073 +60076 +60077 +60082 +60081 +60084 +60085 +60088 +60089 +60092 +60093 +60096 +60097 +60100 +60101 +60104 +60105 +60108 +60109 +60112 +60113 +60116 +60117 +60120 +60121 +60124 +60125 +60128 +60129 +60132 +60133 +60136 +60137 +60140 +60143 +60144 +60145 +60148 +60149 +60152 +60153 +60156 +60157 +60160 +60161 +60164 +60165 +60168 +60169 +60172 +60173 +60176 +60177 +60180 +60181 +60184 +60185 +60188 +60189 +60192 +60193 +60196 +60197 +60200 +60201 +60206 +60205 +60208 +60209 +60212 +60213 +60216 +60217 +60220 +60221 +60224 +60225 +60228 +60229 +60232 +60233 +60236 +60237 +60240 +60241 +60244 +60245 +60248 +60249 +60252 +60253 +60256 +60257 +60260 +60261 +60264 +60267 +60268 +60269 +60272 +60273 +60276 +60277 +60280 +60281 +60284 +60285 +60288 +60289 +60292 +60293 +60296 +60297 +60300 +60301 +60304 +60305 +60308 +60309 +60312 +60313 +60316 +60317 +60320 +60321 +60324 +60325 +60330 +60329 +60332 +60333 +60336 +60337 +60340 +60341 +60344 +60345 +60348 +60349 +60352 +60353 +60356 +60357 +60360 +60361 +60364 +60365 +60368 +60369 +60372 +60373 +60376 +60377 +60380 +60381 +60384 +60385 +60388 +60391 +60392 +60393 +60396 +60397 +60400 +60401 +60404 +60405 +60408 +60409 +60412 +60413 +60416 +60417 +60420 +60421 +60424 +60425 +60428 +60429 +60432 +60433 +60436 +60437 +60440 +60441 +60444 +60445 +60448 +60449 +60454 +60453 +60456 +60457 +60460 +60461 +60464 +60465 +60468 +60469 +60472 +60473 +60476 +60477 +60480 +60481 +60484 +60485 +60488 +60489 +60492 +60493 +60496 +60497 +60500 +60501 +60504 +60505 +60508 +60509 +60512 +60515 +60516 +60517 +60520 +60521 +60524 +60525 +60528 +60529 +60532 +60533 +60536 +60537 +60540 +60541 +60544 +60545 +60548 +60549 +60552 +60553 +60556 +60557 +60560 +60561 +60564 +60565 +60568 +60569 +60572 +60573 +60577 +60577 +60578 +60581 +60582 +60585 +60586 +60589 +60590 +60593 +60594 +60597 +60598 +60601 +60602 +60605 +60606 +60609 +60610 +60613 +60614 +60617 +60618 +60621 +60622 +60625 +60626 +60629 +60630 +60633 +60634 +60637 +60641 +60640 +60643 +60644 +60647 +60648 +60651 +60652 +60655 +60656 +60659 +60660 +60663 +60664 +60667 +60668 +60671 +60672 +60675 +60676 +60679 +60680 +60683 +60684 +60687 +60688 +60691 +60692 +60695 +60696 +60699 +60700 +60704 +60705 +60706 +60709 +60710 +60713 +60714 +60717 +60718 +60721 +60722 +60725 +60726 +60729 +60730 +60733 +60734 +60737 +60738 +60741 +60742 +60745 +60746 +60749 +60750 +60753 +60754 +60757 +60758 +60761 +60762 +60765 +60768 +60768 +60769 +60772 +60773 +60776 +60777 +60780 +60781 +60784 +60785 +60788 +60789 +60792 +60793 +60796 +60797 +60800 +60801 +60804 +60805 +60808 +60809 +60812 +60813 +60816 +60817 +60820 +60821 +60824 +60825 +60828 +60829 +60833 +60833 +60834 +60837 +60838 +60841 +60842 +60845 +60846 +60849 +60850 +60853 +60854 +60857 +60858 +60861 +60862 +60865 +60866 +60869 +60870 +60873 +60874 +60877 +60878 +60881 +60882 +60885 +60886 +60889 +60890 +60893 +60894 +60897 +60901 +60900 +60903 +60904 +60907 +60908 +60911 +60912 +60915 +60916 +60919 +60920 +60923 +60924 +60927 +60928 +60931 +60932 +60935 +60936 +60939 +60940 +60943 +60944 +60947 +60948 +60951 +60952 +60955 +60956 +60959 +60960 +60963 +60964 +60968 +60969 +60970 +60973 +60974 +60977 +60978 +60981 +60982 +60985 +60986 +60989 +60990 +60993 +60994 +60997 +60998 +61001 +61002 +61005 +61006 +61009 +61010 +61013 +61014 +61017 +61018 +61021 +61022 +61025 +61026 +61029 +61030 +61033 +61036 +61036 +61037 +61040 +61041 +61044 +61045 +61048 +61049 +61052 +61053 +61056 +61057 +61060 +61061 +61064 +61065 +61068 +61069 +61072 +61073 +61076 +61077 +61080 +61081 +61084 +61085 +61088 +61089 +61092 +61093 +61096 +61097 +61100 +61101 +61106 +61105 +61108 +61109 +61112 +61113 +61116 +61117 +61120 +61121 +61124 +61125 +61128 +61129 +61132 +61133 +61136 +61137 +61140 +61141 +61144 +61145 +61148 +61149 +61152 +61153 +61156 +61157 +61160 +61161 +61164 +61165 +61168 +61169 +61172 +61175 +61176 +61177 +61180 +61181 +61184 +61185 +61188 +61189 +61192 +61193 +61196 +61197 +61200 +61201 +61204 +61205 +61208 +61209 +61212 +61213 +61216 +61217 +61220 +61221 +61224 +61225 +61228 +61229 +61232 +61233 +61236 +61237 +61240 +61241 +61246 +61245 +61248 +61249 +61252 +61253 +61256 +61257 +61260 +61261 +61264 +61265 +61268 +61269 +61272 +61273 +61276 +61277 +61280 +61281 +61284 +61285 +61288 +61289 +61292 +61293 +61296 +61297 +61300 +61301 +61304 +61305 +61308 +61309 +61312 +61315 +61316 +61317 +61320 +61321 +61324 +61325 +61328 +61329 +61332 +61333 +61336 +61337 +61340 +61341 +61344 +61345 +61348 +61349 +61352 +61353 +61356 +61357 +61360 +61361 +61364 +61365 +61368 +61369 +61372 +61373 +61376 +61377 +61380 +61381 +61386 +61385 +61388 +61389 +61392 +61393 +61396 +61397 +61400 +61401 +61404 +61405 +61408 +61409 +61412 +61413 +61416 +61417 +61420 +61421 +61424 +61425 +61428 +61429 +61432 +61433 +61436 +61437 +61440 +61441 +61444 +61445 +61448 +61449 +61452 +61455 +61456 +61457 +61460 +61461 +61464 +61465 +61468 +61469 +61472 +61473 +61476 +61477 +61480 +61481 +61484 +61485 +61488 +61489 +61492 +61493 +61496 +61497 +61500 +61501 +61504 +61505 +61508 +61509 +61512 +61513 +61516 +61517 +61520 +61521 +61596 +61599 +61600 +61603 +61604 +61607 +61608 +61611 +61612 +61615 +61616 +61619 +61620 +61623 +61624 +61627 +61628 +61631 +61632 +61635 +61636 +61639 +61640 +61643 +61644 +61647 +61648 +61651 +61652 +61655 +61656 +61659 +61660 +61663 +61664 +61667 +61668 +61671 +61672 +61675 +61676 +61679 +61680 +61684 +61685 +61688 +61689 +61692 +61693 +61696 +61697 +61700 +61701 +61704 +61705 +61708 +61709 +61712 +61713 +61716 +61717 +61720 +61721 +61724 +61725 +61728 +61729 +61732 +61733 +61736 +61737 +61740 +61741 +61744 +61745 +61748 +61749 +61752 +61753 +61756 +61757 +61760 +61761 +61764 +61765 +61768 +61771 +61772 +61775 +61776 +61779 +61780 +61783 +61784 +61787 +61788 +61791 +61792 +61795 +61796 +61799 +61800 +61803 +61804 +61807 +61808 +61811 +61812 +61815 +61816 +61819 +61820 +61823 +61824 +61827 +61828 +61831 +61832 +61835 +61836 +61839 +61840 +61843 +61844 +61847 +61848 +61852 +61853 +61856 +61857 +61860 +61861 +61864 +61865 +61868 +61869 +61872 +61873 +61876 +61877 +61880 +61881 +61884 +61885 +61888 +61889 +61892 +61893 +61896 +61897 +61900 +61901 +61904 +61905 +61908 +61909 +61912 +61913 +61916 +61917 +61920 +61921 +61924 +61925 +61928 +61929 +61932 +61935 +61936 +61939 +61940 +61943 +61944 +61947 +61948 +61951 +61952 +61955 +61956 +61959 +61960 +61963 +61964 +61967 +61968 +61971 +61972 +61975 +61976 +61979 +61980 +61983 +61984 +61987 +61988 +61991 +61992 +61995 +61996 +61999 +62000 +62003 +62004 +62007 +62008 +62011 +62013 +62014 +62017 +62018 +62021 +62022 +62025 +62026 +62029 +62030 +62033 +62034 +62037 +62038 +62041 +62042 +62045 +62046 +62049 +62050 +62053 +62054 +62057 +62058 +62061 +62062 +62065 +62066 +62069 +62070 +62073 +62074 +62077 +62078 +62081 +62082 +62085 +62086 +62089 +62090 +62092 +62095 +62096 +62099 +62100 +62103 +62104 +62107 +62108 +62111 +62112 +62115 +62116 +62119 +62120 +62123 +62124 +62127 +62128 +62131 +62132 +62135 +62136 +62139 +62140 +62143 +62144 +62147 +62148 +62151 +62152 +62155 +62156 +62159 +62160 +62163 +62164 +62167 +62168 +62172 +62173 +62176 +62177 +62180 +62181 +62184 +62185 +62188 +62189 +62192 +62193 +62196 +62197 +62200 +62201 +62204 +62205 +62208 +62209 +62212 +62213 +62216 +62217 +62220 +62221 +62224 +62225 +62228 +62229 +62232 +62233 +62236 +62237 +62240 +62241 +62244 +62245 +62248 +62249 +62252 +62253 +62256 +62257 +62260 +62261 +62264 +62265 +62268 +62269 +62272 +62273 +62276 +62277 +62280 +62281 +62284 +62285 +62288 +62289 +62292 +62293 +62296 +62297 +62300 +62301 +62304 +62305 +62308 +62309 +62312 +62313 +62316 +62317 +62320 +62321 +62324 +62325 +62328 +62329 +62332 +62333 +62336 +62337 +62340 +62341 +62344 +62345 +62348 +62349 +62352 +62353 +62356 +62357 +62360 +62361 +62364 +62365 +62368 +62369 +62372 +62373 +62376 +62377 +62380 +62381 +62384 +62385 +62388 +62389 +62392 +62393 +62396 +62397 +62400 +62401 +62404 +62407 +62408 +62411 +62412 +62415 +62416 +62419 +62420 +62423 +62424 +62427 +62428 +62431 +62432 +62435 +62436 +62439 +62440 +62443 +62444 +62447 +62448 +62451 +62452 +62455 +62456 +62459 +62460 +62463 +62464 +62467 +62468 +62471 +62472 +62475 +62476 +62479 +62481 +62482 +62485 +62486 +62489 +62490 +62493 +62494 +62497 +62498 +62501 +62502 +62505 +62506 +62509 +62510 +62513 +62514 +62517 +62518 +62521 +62522 +62525 +62526 +62529 +62530 +62533 +62534 +62537 +62538 +62541 +62542 +62545 +62546 +62549 +62550 +62553 +62554 +62556 +62559 +62560 +62563 +62564 +62567 +62568 +62571 +62572 +62575 +62576 +62579 +62580 +62583 +62584 +62587 +62588 +62591 +62592 +62595 +62596 +62599 +62600 +62603 +62604 +62607 +62608 +62611 +62612 +62615 +62616 +62619 +62620 +62623 +62624 +62627 +62628 +62632 +62633 +62636 +62637 +62640 +62641 +62644 +62645 +62648 +62649 +62652 +62653 +62656 +62657 +62660 +62661 +62664 +62665 +62668 +62669 +62672 +62673 +62676 +62677 +62680 +62681 +62684 +62685 +62688 +62689 +62692 +62693 +62696 +62697 +62700 +62701 +62704 +62707 +62708 +62711 +62712 +62715 +62716 +62719 +62720 +62723 +62724 +62727 +62728 +62731 +62732 +62735 +62736 +62739 +62740 +62743 +62744 +62747 +62748 +62751 +62752 +62755 +62756 +62759 +62760 +62763 +62764 +62767 +62768 +62771 +62772 +62775 +62777 +62778 +62781 +62782 +62785 +62786 +62789 +62790 +62793 +62794 +62797 +62798 +62801 +62802 +62805 +62806 +62809 +62810 +62813 +62814 +62817 +62818 +62821 +62822 +62825 +62826 +62829 +62830 +62833 +62834 +62837 +62838 +62841 +62842 +62845 +62846 +62848 +62851 +62852 +62855 +62856 +62859 +62860 +62863 +62864 +62867 +62868 +62871 +62872 +62875 +62876 +62879 +62880 +62883 +62884 +62887 +62888 +62891 +62892 +62895 +62896 +62899 +62900 +62903 +62904 +62907 +62908 +62911 +62912 +62915 +62916 +62920 +62921 +62924 +62925 +62928 +62929 +62932 +62933 +62936 +62937 +62940 +62941 +62944 +62945 +62948 +62949 +62952 +62953 +62956 +62957 +62960 +62961 +62964 +62965 +62968 +62969 +62972 +62973 +62976 +62977 +62980 +62981 +62984 +62985 +62988 +62991 +62992 +62995 +62996 +62999 +63000 +63003 +63004 +63007 +63008 +63011 +63012 +63015 +63016 +63019 +63020 +63023 +63024 +63027 +63028 +63031 +63032 +63035 +63036 +63039 +63040 +63043 +63044 +63047 +63048 +63051 +63052 +63056 +63057 +63060 +63061 +63064 +63065 +63068 +63069 +63072 +63073 +63076 +63077 +63080 +63081 +63084 +63085 +63088 +63089 +63092 +63093 +63096 +63097 +63100 +63101 +63104 +63105 +63108 +63109 +63112 +63113 +63116 +63117 +63120 +63123 +63124 +63127 +63128 +63131 +63132 +63135 +63136 +63139 +63140 +63143 +63144 +63147 +63148 +63151 +63152 +63155 +63156 +63159 +63160 +63163 +63164 +63167 +63168 +63171 +63172 +63175 +63176 +63179 +63180 +63183 +63185 +63186 +63189 +63190 +63193 +63194 +63197 +63198 +63201 +63202 +63205 +63206 +63209 +63210 +63213 +63214 +63217 +63218 +63221 +63222 +63225 +63226 +63229 +63230 +63233 +63234 +63237 +63238 +63241 +63242 +63245 +63246 +63248 +63251 +63252 +63255 +63256 +63259 +63260 +63263 +63264 +63267 +63268 +63271 +63272 +63275 +63276 +63279 +63280 +63283 +63284 +63287 +63288 +63291 +63292 +63295 +63296 +63299 +63300 +63303 +63304 +63307 +63308 +63312 +63313 +63316 +63317 +63320 +63321 +63324 +63325 +63328 +63329 +63332 +63333 +63336 +63337 +63340 +63341 +63344 +63345 +63348 +63349 +63352 +63353 +63356 +63357 +63360 +63361 +63364 +63365 +63368 +63369 +63372 +63373 +63376 +63377 +63380 +63381 +63384 +63385 +63388 +63389 +63392 +63393 +63396 +63397 +63400 +63401 +63404 +63405 +63408 +63409 +63412 +63413 +63416 +63417 +63420 +63421 +63424 +63425 +63428 +63429 +63432 +63433 +63436 +63437 +63440 +63441 +63444 +63445 +63448 +63449 +63452 +63453 +63456 +63457 +63460 +63461 +63464 +63465 +63468 +63469 +63472 +63473 +63476 +63477 +63480 +63481 +63484 +63485 +63488 +63489 +63492 +63493 +63496 +63499 +63500 +63503 +63504 +63507 +63508 +63511 +63512 +63515 +63516 +63519 +63520 +63523 +63524 +63527 +63528 +63531 +63532 +63535 +63536 +63539 +63540 +63543 +63544 +63547 +63548 +63551 +63552 +63555 +63557 +63558 +63561 +63562 +63565 +63566 +63569 +63570 +63573 +63574 +63577 +63578 +63581 +63582 +63585 +63586 +63589 +63590 +63593 +63594 +63597 +63598 +63601 +63602 +63605 +63606 +63609 +63610 +63613 +63614 +63616 +63619 +63620 +63623 +63624 +63627 +63628 +63631 +63632 +63635 +63636 +63639 +63640 +63643 +63644 +63647 +63648 +63651 +63652 +63655 +63656 +63659 +63660 +63663 +63664 +63667 +63668 +63671 +63672 +63676 +63677 +63680 +63681 +63684 +63685 +63688 +63689 +63692 +63693 +63696 +63697 +63700 +63701 +63704 +63705 +63708 +63709 +63712 +63713 +63716 +63717 +63720 +63721 +63724 +63725 +63728 +63729 +63732 +63735 +63736 +63739 +63740 +63743 +63744 +63747 +63748 +63751 +63752 +63755 +63756 +63759 +63760 +63763 +63764 +63767 +63768 +63771 +63772 +63775 +63776 +63779 +63780 +63783 +63784 +63787 +63789 +63790 +63793 +63794 +63797 +63798 +63801 +63802 +63805 +63806 +63809 +63810 +63813 +63814 +63817 +63818 +63821 +63822 +63825 +63826 +63829 +63830 +63833 +63834 +63837 +63838 +63841 +63842 +63844 +63847 +63848 +63851 +63852 +63855 +63856 +63859 +63860 +63863 +63864 +63867 +63868 +63871 +63872 +63875 +63876 +63879 +63880 +63883 +63884 +63887 +63888 +63891 +63892 +63895 +63896 +63900 +63901 +63904 +63905 +63908 +63909 +63912 +63913 +63916 +63917 +63920 +63921 +63924 +63925 +63928 +63929 +63932 +63933 +63936 +63937 +63940 +63941 +63944 +63945 +63948 +63949 +63952 +63955 +63956 +63959 +63960 +63963 +63964 +63967 +63968 +63971 +63972 +63975 +63976 +63979 +63980 +63983 +63984 +63987 +63988 +63991 +63992 +63995 +63996 +63999 +64000 +64004 +64005 +64008 +64009 +64012 +64013 +64016 +64017 +64020 +64021 +64024 +64025 +64028 +64029 +64032 +64033 +64036 +64037 +64040 +64041 +64044 +64045 +64048 +64049 +64052 +64055 +64056 +64059 +64060 +64063 +64064 +64067 +64068 +64071 +64072 +64075 +64076 +64079 +64080 +64083 +64084 +64087 +64088 +64091 +64092 +64095 +64096 +64099 +64101 +64102 +64105 +64106 +64109 +64110 +64113 +64114 +64117 +64118 +64121 +64122 +64125 +64126 +64129 +64130 +64133 +64134 +64137 +64138 +64141 +64142 +64145 +64146 +64148 +64151 +64152 +64155 +64156 +64159 +64160 +64163 +64164 +64167 +64168 +64171 +64172 +64175 +64176 +64179 +64180 +64183 +64184 +64187 +64188 +64191 +64192 +64196 +64197 +64200 +64201 +64204 +64205 +64208 +64209 +64212 +64213 +64216 +64217 +64220 +64221 +64224 +64225 +64228 +64229 +64232 +64233 +64236 +64237 +64240 +64243 +64244 +64247 +64248 +64251 +64252 +64255 +64256 +64259 +64260 +64263 +64264 +64267 +64268 +64271 +64272 +64275 +64276 +64279 +64280 +64283 +64285 +64286 +64289 +64290 +64293 +64294 +64297 +64298 +64301 +64302 +64305 +64306 +64309 +64310 +64313 +64314 +64317 +64318 +64321 +64322 +64325 +64326 +64328 +64331 +64332 +64335 +64336 +64339 +64340 +64343 +64344 +64347 +64348 +64351 +64352 +64355 +64356 +64359 +64360 +64363 +64364 +64367 +64368 +64372 +64373 +64376 +64377 +64380 +64381 +64384 +64385 +64388 +64389 +64392 +64393 +64396 +64397 +64400 +64401 +64404 +64405 +64408 +64409 +64412 +64413 +64416 +64417 +64420 +64421 +64424 +64425 +64428 +64429 +64432 +64433 +64436 +64437 +64440 +64441 +64444 +64445 +64448 +64449 +64452 +64453 +64456 +64457 +64460 +64461 +64464 +64465 +64468 +64469 +64472 +64473 +64476 +64477 +64480 +64481 +64484 +64485 +64488 +64489 +64492 +64493 +64496 +64499 +64500 +64503 +64504 +64507 +64508 +64511 +64512 +64515 +64516 +64519 +64520 +64523 +64524 +64527 +64528 +64531 +64532 +64536 +64537 +64540 +64541 +64544 +64545 +64548 +64549 +64552 +64553 +64556 +64557 +64560 +64561 +64564 +64565 +64568 +64569 +64572 +64573 +64576 +64577 +64580 +64581 +64584 +64585 +64588 +64589 +64592 +64593 +64596 +64597 +64600 +64601 +64604 +64605 +64608 +64609 +64612 +64613 +64616 +64617 +64620 +64621 +64624 +64625 +64628 +64629 +64632 +64633 +64636 +64637 +64640 +64641 +64644 +64645 +64648 +64651 +64652 +64655 +64656 +64659 +64660 +64663 +64664 +64667 +64668 +64671 +64672 +64675 +64676 +64679 +64680 +64683 +64685 +64686 +64689 +64690 +64693 +64694 +64697 +64698 +64701 +64702 +64705 +64706 +64709 +64710 +64713 +64714 +64717 +64718 +64720 +64723 +64724 +64727 +64728 +64731 +64732 +64735 +64736 +64739 +64740 +64743 +64744 +64747 +64748 +64751 +64752 +64755 +64757 +64758 +64761 +64762 +64765 +64766 +64769 +64770 +64773 +64774 +64777 +64778 +64781 +64782 +64785 +64786 +64789 +64790 +64792 +64795 +64796 +64799 +64800 +64803 +64804 +64807 +64808 +64811 +64812 +64815 +64816 +64819 +64820 +64823 +64824 +64827 +64829 +64830 +64833 +64834 +64837 +64838 +64841 +64842 +64845 +64846 +64849 +64850 +64853 +64854 +64857 +64858 +64861 +64862 +64864 +64867 +64868 +64871 +64872 +64875 +64876 +64879 +64880 +64883 +64884 +64887 +64888 +64891 +64892 +64895 +64896 +64899 +64901 +64902 +64905 +64906 +64909 +64910 +64913 +64914 +64917 +64918 +64921 +64922 +64925 +64926 +64929 +64930 +64933 +64934 +64936 +64939 +64940 +64943 +64944 +64947 +64948 +64951 +64952 +64955 +64956 +64959 +64960 +64963 +64964 +64967 +64968 +64971 +64973 +64974 +64977 +64978 +64981 +64982 +64985 +64986 +64989 +64990 +64993 +64994 +64997 +64998 +65001 +65002 +65005 +65006 +65008 +65011 +65012 +65015 +65016 +65019 +65020 +65023 +65024 +65027 +65028 +65031 +65032 +65035 +65036 +65039 +65040 +65043 +65045 +65046 +65049 +65050 +65053 +65054 +65057 +65058 +65061 +65062 +65065 +65066 +65069 +65070 +65073 +65074 +65077 +65078 +65080 +65083 +65084 +65087 +65088 +65091 +65092 +65095 +65096 +65099 +65100 +65103 +65104 +65107 +65108 +65111 +65112 +65115 +65117 +65118 +65121 +65122 +65125 +65126 +65129 +65130 +65133 +65134 +65137 +65138 +65141 +65142 +65145 +65146 +65149 +65150 +65152 +65155 +65156 +65159 +65160 +65163 +65164 +65167 +65168 +65171 +65172 +65175 +65176 +65179 +65180 +65183 +65184 +65187 +65189 +65190 +65193 +65194 +65197 +65198 +65201 +65202 +65205 +65206 +65209 +65210 +65213 +65214 +65217 +65218 +65221 +65222 +65224 +65227 +65228 +65231 +65232 +65235 +65236 +65239 +65240 +65243 +65244 +65247 +65248 +65251 +65252 +65255 +65256 +65259 +65261 +65262 +65265 +65266 +65269 +65270 +65273 +65274 +65277 +65278 +65281 +65282 +65285 +65286 +65289 +65290 +65293 +65294 +65296 +65299 +65300 +65303 +65304 +65307 +65308 +65311 +65312 +65315 +65316 +65319 +65320 +65323 +65324 +65327 +65328 +65331 +65333 +65334 +65337 +65338 +65341 +65342 +65345 +65346 +65349 +65350 +65353 +65354 +65357 +65358 +65361 +65362 +65365 +65366 +65368 +65371 +65372 +65375 +65376 +65379 +65380 +65383 +65384 +65387 +65388 +65391 +65392 +65395 +65396 +65399 +65400 +65403 +65405 +65406 +65409 +65410 +65413 +65414 +65417 +65418 +65421 +65422 +65425 +65426 +65429 +65430 +65433 +65434 +65437 +65438 +65440 +65443 +65444 +65447 +65448 +65451 +65452 +65455 +65456 +65459 +65460 +65463 +65464 +65467 +65468 +65471 +65472 +65475 +65477 +65478 +65481 +65482 +65485 +65486 +65489 +65490 +65493 +65494 +65497 +65498 +65501 +65502 +65505 +65506 +65509 +65510 +65512 +65515 +65516 +65519 +65520 +65523 +65524 +65527 +65528 +65531 +65532 +65535 +65536 +65539 +65540 +65543 +65544 +65547 +65549 +65550 +65553 +65554 +65557 +65558 +65561 +65562 +65565 +65566 +65569 +65570 +65573 +65574 +65577 +65578 +65581 +65582 +65584 +65587 +65588 +65591 +65592 +65595 +65596 +65599 +65600 +65603 +65604 +65607 +65608 +65611 +65612 +65615 +65616 +65619 +65621 +65622 +65625 +65626 +65629 +65630 +65633 +65634 +65637 +65638 +65641 +65642 +65645 +65646 +65649 +65650 +65653 +65654 +65656 +65659 +65660 +65663 +65664 +65667 +65668 +65671 +65672 +65675 +65676 +65679 +65680 +65683 +65684 +65687 +65688 +65691 +65692 +65694 +65695 +65698 +65699 +65702 +65703 +65706 +65707 +65710 +65711 +65714 +65715 +65718 +65719 +65722 +65723 +65726 +65727 +65730 +65731 +65734 +65735 +65738 +65739 +65742 +65743 +65746 +65747 +65750 +65751 +65754 +65755 +65758 +65759 +65762 +65763 +65766 +65767 +65770 +65771 +65774 +65775 +65778 +65779 +65782 +65783 +65786 +65787 +65790 +65791 +65794 +65795 +65798 +65799 +65802 +65803 +65806 +65807 +65808 +65811 +65812 +65815 +65816 +65819 +65820 +65823 +65824 +65827 +65828 +65831 +65832 +65835 +65836 +65839 +65840 +65843 +65844 +65847 +65848 +65850 +65851 +65854 +65855 +65858 +65859 +65862 +65863 +65866 +65867 +65870 +65871 +65874 +65875 +65878 +65879 +65882 +65883 +65886 +65887 +65890 +65891 +65894 +65895 +65898 +65899 +65902 +65903 +65906 +65907 +65910 +65911 +65914 +65915 +65918 +65919 +65922 +65923 +65926 +65927 +65930 +65931 +65934 +65935 +65938 +65939 +65942 +65943 +65946 +65947 +65950 +65951 +65954 +65955 +65958 +65959 +65962 +65963 +65966 +65967 +65970 +65971 +65974 +65975 +65976 +65979 +65980 +65983 +65984 +65987 +65988 +65991 +65992 +65995 +65996 +65999 +66000 +66003 +66004 +66007 +66008 +66011 +66012 +66015 +66016 +66019 +66021 +66022 +66025 +66026 +66029 +66030 +66033 +66034 +66037 +66038 +66041 +66042 +66045 +66046 +66049 +66050 +66053 +66054 +66057 +66058 +66061 +66062 +66064 +66067 +66068 +66071 +66072 +66075 +66076 +66079 +66080 +66083 +66084 +66087 +66088 +66091 +66092 +66095 +66096 +66099 +66100 +66103 +66104 +66107 +66108 +66110 +66111 +66114 +66115 +66118 +66119 +66122 +66123 +66126 +66127 +66130 +66131 +66134 +66135 +66138 +66139 +66142 +66143 +66146 +66147 +66150 +66151 +66154 +66155 +66156 +66159 +66160 +66163 +66164 +66167 +66168 +66171 +66172 +66175 +66176 +66179 +66180 +66183 +66184 +66187 +66188 +66191 +66192 +66195 +66196 +66199 +66200 +66203 +66205 +66206 +66209 +66210 +66213 +66214 +66217 +66218 +66221 +66222 +66225 +66226 +66229 +66230 +66233 +66234 +66237 +66238 +66241 +66242 +66245 +66246 +66249 +66250 +66252 +66255 +66256 +66259 +66260 +66263 +66264 +66267 +66268 +66271 +66272 +66275 +66276 +66279 +66280 +66283 +66284 +66287 +66288 +66291 +66292 +66295 +66296 +66299 +66300 +66302 +66303 +66306 +66307 +66310 +66311 +66314 +66315 +66318 +66319 +66322 +66323 +66326 +66327 +66330 +66331 +66334 +66335 +66338 +66339 +66342 +66343 +66346 +66347 +66350 +66351 +66352 +66355 +66356 +66359 +66360 +66363 +66364 +66367 +66368 +66371 +66372 +66375 +66376 +66379 +66380 +66383 +66384 +66387 +66388 +66391 +66392 +66395 +66396 +66399 +66400 +66403 +66404 +66406 +66407 +66410 +66411 +66414 +66415 +66418 +66419 +66422 +66423 +66426 +66427 +66430 +66431 +66434 +66435 +66438 +66439 +66442 +66443 +66446 +66447 +66450 +66451 +66454 +66455 +66458 +66459 +66460 +66463 +66464 +66467 +66468 +66471 +66472 +66475 +66476 +66479 +66480 +66483 +66484 +66487 +66488 +66491 +66492 +66495 +66496 +66499 +66500 +66503 +66504 +66507 +66508 +66511 +66512 +66515 +66517 +66518 +66521 +66522 +66525 +66526 +66529 +66530 +66533 +66534 +66537 +66538 +66541 +66542 +66545 +66546 +66549 +66550 +66553 +66554 +66557 +66558 +66561 +66562 +66565 +66566 +66569 +66570 +66572 +66575 +66576 +66579 +66580 +66583 +66584 +66587 +66588 +66591 +66592 +66595 +66596 +66599 +66600 +66603 +66604 +66607 +66608 +66611 +66612 +66615 +66616 +66619 +66620 +66623 +66624 +66627 +66628 +66630 +66631 +66634 +66635 +66638 +66639 +66642 +66643 +66646 +66647 +66650 +66651 +66654 +66655 +66658 +66659 +66662 +66663 +66666 +66667 +66670 +66671 +66674 +66675 +66678 +66679 +66682 +66683 +66686 +66687 +66688 +66691 +66692 +66695 +66696 +66699 +66700 +66703 +66704 +66707 +66708 +66711 +66712 +66715 +66716 +66719 +66720 +66723 +66724 +66727 +66728 +66731 +66732 +66735 +66736 +66739 +66740 +66743 +66744 +66747 +66749 +66750 +66753 +66754 +66757 +66758 +66761 +66762 +66765 +66766 +66769 +66770 +66773 +66774 +66777 +66778 +66781 +66782 +66785 +66786 +66789 +66790 +66793 +66794 +66797 +66798 +66801 +66802 +66805 +66806 +66808 +66811 +66812 +66815 +66816 +66819 +66820 +66823 +66824 +66827 +66828 +66831 +66832 +66835 +66836 +66839 +66840 +66843 +66844 +66847 +66848 +66851 +66852 +66855 +66856 +66859 +66860 +66863 +66864 +66867 +66868 +66870 +66871 +66874 +66875 +66878 +66879 +66882 +66883 +66886 +66887 +66890 +66891 +66894 +66895 +66898 +66899 +66902 +66903 +66906 +66907 +66910 +66911 +66914 +66915 +66918 +66919 +66922 +66923 +66926 +66927 +66930 +66931 +66934 +66935 +66938 +66939 +66942 +66943 +66946 +66947 +66950 +66951 +66954 +66955 +66958 +66959 +66962 +66963 +66966 +66967 +66970 +66971 +66974 +66975 +66978 +66979 +66982 +66983 +66986 +66987 +66990 +66991 +66994 +66995 +66998 +66999 +67002 +67003 +67006 +67007 +67010 +67011 +67014 +67015 +67018 +67019 +67022 +67023 +67026 +67027 +67030 +67031 +67034 +67035 +67038 +67039 +67042 +67043 +67046 +67047 +67050 +67051 +67054 +67055 +67056 +67059 +67060 +67063 +67064 +67067 +67068 +67071 +67072 +67075 +67076 +67079 +67080 +67083 +67084 +67087 +67088 +67091 +67092 +67095 +67096 +67099 +67100 +67103 +67104 +67107 +67108 +67111 +67112 +67115 +67116 +67119 +67121 +67122 +67125 +67126 +67129 +67130 +67133 +67134 +67137 +67138 +67141 +67142 +67145 +67146 +67149 +67150 +67153 +67154 +67157 +67158 +67161 +67162 +67165 +67166 +67169 +67170 +67173 +67174 +67177 +67178 +67181 +67182 +67184 +67187 +67188 +67191 +67192 +67195 +67196 +67199 +67200 +67203 +67204 +67207 +67208 +67211 +67212 +67215 +67216 +67219 +67220 +67223 +67224 +67227 +67228 +67231 +67232 +67235 +67236 +67239 +67240 +67243 +67244 +67247 +67248 +67250 +67251 +67254 +67255 +67258 +67259 +67262 +67263 +67266 +67267 +67270 +67271 +67274 +67275 +67278 +67279 +67282 +67283 +67286 +67287 +67290 +67291 +67294 +67295 +67298 +67299 +67302 +67303 +67306 +67307 +67310 +67311 +67314 +67315 +67316 +67319 +67320 +67323 +67324 +67327 +67328 +67331 +67332 +67335 +67336 +67339 +67340 +67343 +67344 +67347 +67348 +67351 +67352 +67355 +67356 +67359 +67360 +67363 +67364 +67367 +67368 +67371 +67372 +67375 +67376 +67379 +67380 +67383 +67384 +67386 +67387 +67390 +67391 +67394 +67395 +67398 +67399 +67402 +67403 +67406 +67407 +67410 +67411 +67414 +67415 +67418 +67419 +67422 +67423 +67426 +67427 +67430 +67431 +67434 +67435 +67438 +67439 +67442 +67443 +67446 +67447 +67450 +67451 +67454 +67455 +67456 +67459 +67460 +67463 +67464 +67467 +67468 +67471 +67472 +67475 +67476 +67479 +67480 +67483 +67484 +67487 +67488 +67491 +67492 +67495 +67496 +67499 +67500 +67503 +67504 +67507 +67508 +67511 +67512 +67515 +67516 +67519 +67520 +67523 +67524 +67527 +67529 +67530 +67533 +67534 +67537 +67538 +67541 +67542 +67545 +67546 +67549 +67550 +67553 +67554 +67557 +67558 +67561 +67562 +67565 +67566 +67569 +67570 +67573 +67574 +67577 +67578 +67581 +67582 +67585 +67586 +67589 +67590 +67593 +67594 +67597 +67598 +67600 +67603 +67604 +67607 +67608 +67611 +67612 +67615 +67616 +67619 +67620 +67623 +67624 +67627 +67628 +67631 +67632 +67635 +67636 +67639 +67640 +67643 +67644 +67647 +67648 +67651 +67652 +67655 +67656 +67659 +67660 +67663 +67664 +67667 +67668 +67671 +67672 +67674 +67675 +67678 +67679 +67682 +67683 +67686 +67687 +67690 +67691 +67694 +67695 +67698 +67699 +67702 +67703 +67706 +67707 +67710 +67711 +67714 +67715 +67718 +67719 +67722 +67723 +67726 +67727 +67730 +67731 +67734 +67735 +67738 +67739 +67742 +67743 +67746 +67747 +67748 +67751 +67752 +67755 +67756 +67759 +67760 +67763 +67764 +67767 +67768 +67771 +67772 +67775 +67776 +67779 +67780 +67783 +67784 +67787 +67788 +67791 +67792 +67795 +67796 +67799 +67800 +67803 +67804 +67807 +67808 +67811 +67812 +67815 +67816 +67819 +67820 +67823 +67825 +67826 +67829 +67830 +67833 +67834 +67837 +67838 +67841 +67842 +67845 +67846 +67849 +67850 +67853 +67854 +67857 +67858 +67861 +67862 +67865 +67866 +67869 +67870 +67873 +67874 +67877 +67878 +67881 +67882 +67885 +67886 +67889 +67890 +67893 +67894 +67897 +67898 +67900 +67903 +67904 +67907 +67908 +67911 +67912 +67915 +67916 +67919 +67920 +67923 +67924 +67927 +67928 +67931 +67932 +67935 +67936 +67939 +67940 +67943 +67944 +67947 +67948 +67951 +67952 +67955 +67956 +67959 +67960 +67963 +67964 +67967 +67968 +67971 +67972 +67975 +67976 +67978 +67979 +67982 +67983 +67986 +67987 +67990 +67991 +67994 +67995 +67998 +67999 +68002 +68003 +68006 +68007 +68010 +68011 +68014 +68015 +68018 +68019 +68022 +68023 +68026 +68027 +68030 +68031 +68034 +68035 +68038 +68039 +68042 +68043 +68046 +68047 +68050 +68051 +68054 +68055 +68058 +68059 +68062 +68063 +68066 +68067 +68070 +68071 +68074 +68075 +68078 +68079 +68082 +68083 +68086 +68087 +68090 +68091 +68094 +68095 +68098 +68099 +68102 +68103 +68106 +68107 +68110 +68111 +68114 +68115 +68118 +68119 +68122 +68123 +68126 +68127 +68130 +68131 +68134 +68135 +68138 +68139 +68142 +68143 +68146 +68147 +68150 +68151 +68154 +68155 +68158 +68159 +68162 +68163 +68166 +68167 +68170 +68171 +68174 +68175 +68178 +68179 +68182 +68183 +68186 +68187 +68190 +68191 +68194 +68195 +68198 +68199 +68202 +68203 +68206 +68207 +68210 +68211 +68212 +68215 +68216 +68219 +68220 +68223 +68224 +68227 +68228 +68231 +68232 +68235 +68236 +68239 +68240 +68243 +68244 +68247 +68248 +68251 +68252 +68255 +68256 +68259 +68260 +68263 +68264 +68267 +68268 +68271 +68272 +68275 +68276 +68279 +68280 +68283 +68284 +68287 +68288 +68291 +68293 +68294 +68297 +68298 +68301 +68302 +68305 +68306 +68309 +68310 +68313 +68314 +68317 +68318 +68321 +68322 +68325 +68326 +68329 +68330 +68333 +68334 +68337 +68338 +68341 +68342 +68345 +68346 +68349 +68350 +68353 +68354 +68357 +68358 +68361 +68362 +68365 +68366 +68369 +68370 +68372 +68375 +68376 +68379 +68380 +68383 +68384 +68387 +68388 +68391 +68392 +68395 +68396 +68399 +68400 +68403 +68404 +68407 +68408 +68411 +68412 +68415 +68416 +68419 +68420 +68423 +68424 +68427 +68428 +68431 +68432 +68435 +68436 +68439 +68440 +68443 +68444 +68447 +68448 +68451 +68452 +68454 +68455 +68458 +68459 +68462 +68463 +68466 +68467 +68470 +68471 +68474 +68475 +68478 +68479 +68482 +68483 +68486 +68487 +68490 +68491 +68494 +68495 +68498 +68499 +68502 +68503 +68506 +68507 +68510 +68511 +68514 +68515 +68518 +68519 +68522 +68523 +68526 +68527 +68530 +68531 +68534 +68535 +68536 +68539 +68540 +68543 +68544 +68547 +68548 +68551 +68552 +68555 +68556 +68559 +68560 +68563 +68564 +68567 +68568 +68571 +68572 +68575 +68576 +68579 +68580 +68583 +68584 +68587 +68588 +68591 +68592 +68595 +68596 +68599 +68600 +68603 +68604 +68607 +68608 +68611 +68612 +68615 +68616 +68619 +68620 diff --git a/data_utils/face_tracking/__init__.py b/data_utils/face_tracking/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/data_utils/face_tracking/bundle_adjustment.py b/data_utils/face_tracking/bundle_adjustment.py new file mode 100644 index 0000000000000000000000000000000000000000..ebc1ca8dbac9fc39e35618608c35df2d35b5f6b2 --- /dev/null +++ b/data_utils/face_tracking/bundle_adjustment.py @@ -0,0 +1,63 @@ +import numpy as np +import os +from util import * +import argparse + + +def set_requires_grad(tensor_list): + for tensor in tensor_list: + tensor.requires_grad = True + + +parser = argparse.ArgumentParser() + +parser.add_argument( + "--path", type=str, default="", help="idname of target person") +parser.add_argument('--img_h', type=int, default=512, help='height if image') +parser.add_argument('--img_w', type=int, default=512, help='width of image') +args = parser.parse_args() +id_dir = args.path + +params_dict = torch.load(os.path.join(id_dir, 'track_params.pt')) +euler_angle = params_dict['euler'].cuda() +trans = params_dict['trans'].cuda() / 1000.0 +focal_len = params_dict['focal'].cuda() + +track_xys = torch.as_tensor( + np.load(os.path.join(id_dir, 'track_xys.npy'))).float().cuda() +num_frames = track_xys.shape[0] +point_num = track_xys.shape[1] + +pts = torch.zeros((point_num, 3), dtype=torch.float32).cuda() +set_requires_grad([euler_angle, trans, pts]) + +cxy = torch.Tensor((args.img_w/2.0, args.img_h/2.0)).float().cuda() + +optimizer_pts = torch.optim.Adam([pts], lr=1e-2) +iter_num = 500 +for iter in range(iter_num): + proj_pts = forward_transform(pts.unsqueeze(0).expand( + num_frames, -1, -1), euler_angle, trans, focal_len, cxy) + loss = cal_lan_loss(proj_pts[..., :2], track_xys) + optimizer_pts.zero_grad() + loss.backward() + optimizer_pts.step() + + +optimizer_ba = torch.optim.Adam([pts, euler_angle, trans], lr=1e-4) + + +iter_num = 8000 +for iter in range(iter_num): + proj_pts = forward_transform(pts.unsqueeze(0).expand( + num_frames, -1, -1), euler_angle, trans, focal_len, cxy) + loss_lan = cal_lan_loss(proj_pts[..., :2], track_xys) + loss = loss_lan + optimizer_ba.zero_grad() + loss.backward() + optimizer_ba.step() + +torch.save({'euler': euler_angle.detach().cpu(), + 'trans': trans.detach().cpu(), + 'focal': focal_len.detach().cpu()}, os.path.join(id_dir, 'bundle_adjustment.pt')) +print('bundle adjustment params saved') diff --git a/data_utils/face_tracking/convert_BFM.py b/data_utils/face_tracking/convert_BFM.py new file mode 100644 index 0000000000000000000000000000000000000000..486fe640744ca8c8b8c37caf32ee94e47117c8f3 --- /dev/null +++ b/data_utils/face_tracking/convert_BFM.py @@ -0,0 +1,39 @@ +import numpy as np +from scipy.io import loadmat + +original_BFM = loadmat("3DMM/01_MorphableModel.mat") +sub_inds = np.load("3DMM/topology_info.npy", allow_pickle=True).item()["sub_inds"] + +shapePC = original_BFM["shapePC"] +shapeEV = original_BFM["shapeEV"] +shapeMU = original_BFM["shapeMU"] +texPC = original_BFM["texPC"] +texEV = original_BFM["texEV"] +texMU = original_BFM["texMU"] + +b_shape = shapePC.reshape(-1, 199).transpose(1, 0).reshape(199, -1, 3) +mu_shape = shapeMU.reshape(-1, 3) + +b_tex = texPC.reshape(-1, 199).transpose(1, 0).reshape(199, -1, 3) +mu_tex = texMU.reshape(-1, 3) + +b_shape = b_shape[:, sub_inds, :].reshape(199, -1) +mu_shape = mu_shape[sub_inds, :].reshape(-1) +b_tex = b_tex[:, sub_inds, :].reshape(199, -1) +mu_tex = mu_tex[sub_inds, :].reshape(-1) + +exp_info = np.load("3DMM/exp_info.npy", allow_pickle=True).item() +np.save( + "3DMM/3DMM_info.npy", + { + "mu_shape": mu_shape, + "b_shape": b_shape, + "sig_shape": shapeEV.reshape(-1), + "mu_exp": exp_info["mu_exp"], + "b_exp": exp_info["base_exp"], + "sig_exp": exp_info["sig_exp"], + "mu_tex": mu_tex, + "b_tex": b_tex, + "sig_tex": texEV.reshape(-1), + }, +) diff --git a/data_utils/face_tracking/data_loader.py b/data_utils/face_tracking/data_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..4413dd2e48a4cdc39caa0958b83d404160d7ba28 --- /dev/null +++ b/data_utils/face_tracking/data_loader.py @@ -0,0 +1,23 @@ +import torch +import cv2 +import numpy as np +import os + + +def load_dir(path, start, end): + lmss = [] + for i in range(start, end): + datapath = os.path.join(path, str(i) + '.lms') + if os.path.isfile(datapath): + lms = np.loadtxt(os.path.join( + path, str(i) + '.lms'), dtype=np.float32) + lmss.append(lms) + # + # datapath = os.path.join(path, '{:d}.lms'.format(i)) + # if os.path.isfile(datapath): + # lms = np.loadtxt(os.path.join( + # path, '{:d}.lms'.format(i)), dtype=np.float32) + # lmss.append(lms) + lmss = np.stack(lmss) + lmss = torch.as_tensor(lmss).cuda() + return lmss diff --git a/data_utils/face_tracking/face_tracker.py b/data_utils/face_tracking/face_tracker.py new file mode 100644 index 0000000000000000000000000000000000000000..c40d0b9826338e72709afc7a9569f7d19199189c --- /dev/null +++ b/data_utils/face_tracking/face_tracker.py @@ -0,0 +1,146 @@ +# ref: https://github.com/ShunyuYao/DFA-NeRF +from numpy.core.numeric import require +from numpy.lib.function_base import quantile +import torch +import numpy as np +from facemodel import Face_3DMM +from data_loader import load_dir +from util import * +import os +import sys +import cv2 +import imageio +import argparse + +dir_path = os.path.dirname(os.path.realpath(__file__)) + + +def set_requires_grad(tensor_list): + for tensor in tensor_list: + tensor.requires_grad = True + + +parser = argparse.ArgumentParser() +parser.add_argument( + "--path", type=str, default="obama/ori_imgs", help="idname of target person") +parser.add_argument('--img_h', type=int, default=512, help='image height') +parser.add_argument('--img_w', type=int, default=512, help='image width') +parser.add_argument('--frame_num', type=int, + default=11000, help='image number') +args = parser.parse_args() +start_id = 0 +end_id = args.frame_num + +lms = load_dir(args.path, start_id, end_id) +num_frames = lms.shape[0] +h, w = args.img_h, args.img_w +cxy = torch.tensor((w/2.0, h/2.0), dtype=torch.float).cuda() +id_dim, exp_dim, tex_dim, point_num = 100, 79, 100, 34650 +model_3dmm = Face_3DMM(os.path.join(dir_path, '3DMM'), + id_dim, exp_dim, tex_dim, point_num) +lands_info = np.loadtxt(os.path.join( + dir_path, '3DMM', 'lands_info.txt'), dtype=np.int32) +lands_info = torch.as_tensor(lands_info).cuda() +# mesh = openmesh.read_trimesh(os.path.join(dir_path, '3DMM', 'template.obj')) +focal = 1150 + +id_para = lms.new_zeros((1, id_dim), requires_grad=True) +exp_para = lms.new_zeros((num_frames, exp_dim), requires_grad=True) +tex_para = lms.new_zeros((1, tex_dim), requires_grad=True) +euler_angle = lms.new_zeros((num_frames, 3), requires_grad=True) +trans = lms.new_zeros((num_frames, 3), requires_grad=True) +light_para = lms.new_zeros((num_frames, 27), requires_grad=True) +trans.data[:, 2] -= 600 +focal_length = lms.new_zeros(1, requires_grad=True) +focal_length.data += focal + +set_requires_grad([id_para, exp_para, tex_para, + euler_angle, trans, light_para]) + +sel_ids = np.arange(0, num_frames, 10) +sel_num = sel_ids.shape[0] +arg_focal = 0.0 +arg_landis = 1e5 +for focal in range(500, 1500, 50): + id_para = lms.new_zeros((1, id_dim), requires_grad=True) + exp_para = lms.new_zeros((sel_num, exp_dim), requires_grad=True) + euler_angle = lms.new_zeros((sel_num, 3), requires_grad=True) + trans = lms.new_zeros((sel_num, 3), requires_grad=True) + trans.data[:, 2] -= 600 + focal_length = lms.new_zeros(1, requires_grad=False) + focal_length.data += focal + set_requires_grad([id_para, exp_para, euler_angle, trans]) + + optimizer_id = torch.optim.Adam([id_para], lr=.3) + optimizer_exp = torch.optim.Adam([exp_para], lr=.3) + optimizer_frame = torch.optim.Adam( + [euler_angle, trans], lr=.3) + iter_num = 2000 + + for iter in range(iter_num): + id_para_batch = id_para.expand(sel_num, -1) + geometry = model_3dmm.forward_geo_sub( + id_para_batch, exp_para, lands_info[-51:].long()) + proj_geo = forward_transform( + geometry, euler_angle, trans, focal_length, cxy) + loss_lan = cal_lan_loss( + proj_geo[:, :, :2], lms[sel_ids, -51:, :].detach()) + loss_regid = torch.mean(id_para*id_para)*8 + loss_regexp = torch.mean(exp_para*exp_para)*0.5 + loss = loss_lan + loss_regid + loss_regexp + optimizer_id.zero_grad() + optimizer_exp.zero_grad() + optimizer_frame.zero_grad() + loss.backward() + if iter > 1000: + optimizer_id.step() + optimizer_exp.step() + optimizer_frame.step() + print(focal, loss_lan.item(), torch.mean(trans[:, 2]).item()) + if loss_lan.item() < arg_landis: + arg_landis = loss_lan.item() + arg_focal = focal + +sel_ids = np.arange(0, num_frames) +sel_num = sel_ids.shape[0] +id_para = lms.new_zeros((1, id_dim), requires_grad=True) +exp_para = lms.new_zeros((sel_num, exp_dim), requires_grad=True) +euler_angle = lms.new_zeros((sel_num, 3), requires_grad=True) +trans = lms.new_zeros((sel_num, 3), requires_grad=True) +trans.data[:, 2] -= 600 +focal_length = lms.new_zeros(1, requires_grad=False) +focal_length.data += arg_focal +set_requires_grad([id_para, exp_para, euler_angle, trans]) + +optimizer_id = torch.optim.Adam([id_para], lr=.3) +optimizer_exp = torch.optim.Adam([exp_para], lr=.3) +optimizer_frame = torch.optim.Adam( + [euler_angle, trans], lr=.3) +iter_num = 2000 + +for iter in range(iter_num): + id_para_batch = id_para.expand(sel_num, -1) + geometry = model_3dmm.forward_geo_sub( + id_para_batch, exp_para, lands_info[-51:].long()) + proj_geo = forward_transform( + geometry, euler_angle, trans, focal_length, cxy) + loss_lan = cal_lan_loss( + proj_geo[:, :, :2], lms[sel_ids, -51:, :].detach()) + loss_regid = torch.mean(id_para*id_para)*8 + loss_regexp = torch.mean(exp_para*exp_para)*0.5 + loss = loss_lan + loss_regid + loss_regexp + optimizer_id.zero_grad() + optimizer_exp.zero_grad() + optimizer_frame.zero_grad() + loss.backward() + if iter > 1000: + optimizer_id.step() + optimizer_exp.step() + optimizer_frame.step() +print(arg_focal, loss_lan.item(), torch.mean(trans[:, 2]).item()) + + +torch.save({'id': id_para.detach().cpu(), 'exp': exp_para.detach().cpu(), + 'euler': euler_angle.detach().cpu(), 'trans': trans.detach().cpu(), + 'focal': focal_length.detach().cpu()}, os.path.join(os.path.dirname(args.path), 'track_params.pt')) +print('face tracking params saved') diff --git a/data_utils/face_tracking/facemodel.py b/data_utils/face_tracking/facemodel.py new file mode 100644 index 0000000000000000000000000000000000000000..750b5f53ecc2a8ed1386a80ca482e01deedeab05 --- /dev/null +++ b/data_utils/face_tracking/facemodel.py @@ -0,0 +1,60 @@ +import torch +import torch.nn as nn +import numpy as np +import os + + +class Face_3DMM(nn.Module): + def __init__(self, modelpath, id_dim, exp_dim, tex_dim, point_num): + super(Face_3DMM, self).__init__() + # id_dim = 100 + # exp_dim = 79 + # tex_dim = 100 + self.point_num = point_num + DMM_info = np.load( + os.path.join(modelpath, "3DMM_info.npy"), allow_pickle=True + ).item() + base_id = DMM_info["b_shape"][:id_dim, :] + mu_id = DMM_info["mu_shape"] + base_exp = DMM_info["b_exp"][:exp_dim, :] + mu_exp = DMM_info["mu_exp"] + mu = mu_id + mu_exp + mu = mu.reshape(-1, 3) + for i in range(3): + mu[:, i] -= np.mean(mu[:, i]) + mu = mu.reshape(-1) + self.base_id = torch.as_tensor(base_id).cuda() /1000.0 + self.base_exp = torch.as_tensor(base_exp).cuda() /1000.0 + self.mu = torch.as_tensor(mu).cuda() /1000.0 + base_tex = DMM_info["b_tex"][:tex_dim, :] + mu_tex = DMM_info["mu_tex"] + self.base_tex = torch.as_tensor(base_tex).cuda() + self.mu_tex = torch.as_tensor(mu_tex).cuda() + sig_id = DMM_info["sig_shape"][:id_dim] + sig_tex = DMM_info["sig_tex"][:tex_dim] + sig_exp = DMM_info["sig_exp"][:exp_dim] + self.sig_id = torch.as_tensor(sig_id).cuda() + self.sig_tex = torch.as_tensor(sig_tex).cuda() + self.sig_exp = torch.as_tensor(sig_exp).cuda() + + def forward_geo_sub(self, id_para, exp_para, sub_index): + id_para = id_para*self.sig_id + exp_para = exp_para*self.sig_exp + sel_index = torch.cat((3*sub_index.unsqueeze(1), 3*sub_index.unsqueeze(1)+1, + 3*sub_index.unsqueeze(1)+2), dim=1).reshape(-1) + geometry = torch.mm(id_para, self.base_id[:, sel_index]) + \ + torch.mm(exp_para, self.base_exp[:, + sel_index]) + self.mu[sel_index] + return geometry.reshape(-1, sub_index.shape[0], 3) + + def forward_geo(self, id_para, exp_para): + id_para = id_para*self.sig_id + exp_para = exp_para*self.sig_exp + geometry = torch.mm(id_para, self.base_id) + \ + torch.mm(exp_para, self.base_exp) + self.mu + return geometry.reshape(-1, self.point_num, 3) + + def forward_tex(self, tex_para): + tex_para = tex_para*self.sig_tex + texture = torch.mm(tex_para, self.base_tex) + self.mu_tex + return texture.reshape(-1, self.point_num, 3) diff --git a/data_utils/face_tracking/geo_transform.py b/data_utils/face_tracking/geo_transform.py new file mode 100644 index 0000000000000000000000000000000000000000..13e4890cc71aae026c8fe601bd1c1030e4c870f2 --- /dev/null +++ b/data_utils/face_tracking/geo_transform.py @@ -0,0 +1,60 @@ +"""This module contains functions for geometry transform and camera projection""" +import torch +import torch.nn as nn +import numpy as np + + +def euler2rot(euler_angle): + batch_size = euler_angle.shape[0] + theta = euler_angle[:, 0].reshape(-1, 1, 1) + phi = euler_angle[:, 1].reshape(-1, 1, 1) + psi = euler_angle[:, 2].reshape(-1, 1, 1) + one = torch.ones((batch_size, 1, 1), dtype=torch.float32, + device=euler_angle.device) + zero = torch.zeros((batch_size, 1, 1), dtype=torch.float32, + device=euler_angle.device) + rot_x = torch.cat(( + torch.cat((one, zero, zero), 1), + torch.cat((zero, theta.cos(), theta.sin()), 1), + torch.cat((zero, -theta.sin(), theta.cos()), 1), + ), 2) + rot_y = torch.cat(( + torch.cat((phi.cos(), zero, -phi.sin()), 1), + torch.cat((zero, one, zero), 1), + torch.cat((phi.sin(), zero, phi.cos()), 1), + ), 2) + rot_z = torch.cat(( + torch.cat((psi.cos(), -psi.sin(), zero), 1), + torch.cat((psi.sin(), psi.cos(), zero), 1), + torch.cat((zero, zero, one), 1) + ), 2) + return torch.bmm(rot_x, torch.bmm(rot_y, rot_z)) + + +def rot_trans_geo(geometry, rot, trans): + rott_geo = torch.bmm(rot, geometry.permute(0, 2, 1)) + trans.view(-1, 3, 1) + return rott_geo.permute(0, 2, 1) + + +def euler_trans_geo(geometry, euler, trans): + rot = euler2rot(euler) + return rot_trans_geo(geometry, rot, trans) + + +def proj_geo(rott_geo, camera_para): + fx = camera_para[:, 0] + fy = camera_para[:, 0] + cx = camera_para[:, 1] + cy = camera_para[:, 2] + + X = rott_geo[:, :, 0] + Y = rott_geo[:, :, 1] + Z = rott_geo[:, :, 2] + + fxX = fx[:, None]*X + fyY = fy[:, None]*Y + + proj_x = -fxX/Z + cx[:, None] + proj_y = fyY/Z + cy[:, None] + + return torch.cat((proj_x[:, :, None], proj_y[:, :, None], Z[:, :, None]), 2) diff --git a/data_utils/face_tracking/render_3dmm.py b/data_utils/face_tracking/render_3dmm.py new file mode 100644 index 0000000000000000000000000000000000000000..6a29e19312ad2834e785a8ced644bff47c04bc47 --- /dev/null +++ b/data_utils/face_tracking/render_3dmm.py @@ -0,0 +1,202 @@ +import torch +import torch.nn as nn +import numpy as np +import os +from pytorch3d.structures import Meshes +from pytorch3d.renderer import ( + look_at_view_transform, + PerspectiveCameras, + FoVPerspectiveCameras, + PointLights, + DirectionalLights, + Materials, + RasterizationSettings, + MeshRenderer, + MeshRasterizer, + SoftPhongShader, + TexturesUV, + TexturesVertex, + blending, +) + +from pytorch3d.ops import interpolate_face_attributes + +from pytorch3d.renderer.blending import ( + BlendParams, + hard_rgb_blend, + sigmoid_alpha_blend, + softmax_rgb_blend, +) + + +class SoftSimpleShader(nn.Module): + """ + Per pixel lighting - the lighting model is applied using the interpolated + coordinates and normals for each pixel. The blending function returns the + soft aggregated color using all the faces per pixel. + + To use the default values, simply initialize the shader with the desired + device e.g. + + """ + + def __init__( + self, device="cpu", cameras=None, lights=None, materials=None, blend_params=None + ): + super().__init__() + self.lights = lights if lights is not None else PointLights(device=device) + self.materials = ( + materials if materials is not None else Materials(device=device) + ) + self.cameras = cameras + self.blend_params = blend_params if blend_params is not None else BlendParams() + + def to(self, device): + # Manually move to device modules which are not subclasses of nn.Module + self.cameras = self.cameras.to(device) + self.materials = self.materials.to(device) + self.lights = self.lights.to(device) + return self + + def forward(self, fragments, meshes, **kwargs) -> torch.Tensor: + + texels = meshes.sample_textures(fragments) + blend_params = kwargs.get("blend_params", self.blend_params) + + cameras = kwargs.get("cameras", self.cameras) + if cameras is None: + msg = "Cameras must be specified either at initialization \ + or in the forward pass of SoftPhongShader" + raise ValueError(msg) + znear = kwargs.get("znear", getattr(cameras, "znear", 1.0)) + zfar = kwargs.get("zfar", getattr(cameras, "zfar", 100.0)) + images = softmax_rgb_blend( + texels, fragments, blend_params, znear=znear, zfar=zfar + ) + return images + + +class Render_3DMM(nn.Module): + def __init__( + self, + focal=1015, + img_h=500, + img_w=500, + batch_size=1, + device=torch.device("cuda:0"), + ): + super(Render_3DMM, self).__init__() + + self.focal = focal + self.img_h = img_h + self.img_w = img_w + self.device = device + self.renderer = self.get_render(batch_size) + + dir_path = os.path.dirname(os.path.realpath(__file__)) + topo_info = np.load( + os.path.join(dir_path, "3DMM", "topology_info.npy"), allow_pickle=True + ).item() + self.tris = torch.as_tensor(topo_info["tris"]).to(self.device) + self.vert_tris = torch.as_tensor(topo_info["vert_tris"]).to(self.device) + + def compute_normal(self, geometry): + vert_1 = torch.index_select(geometry, 1, self.tris[:, 0]) + vert_2 = torch.index_select(geometry, 1, self.tris[:, 1]) + vert_3 = torch.index_select(geometry, 1, self.tris[:, 2]) + nnorm = torch.cross(vert_2 - vert_1, vert_3 - vert_1, 2) + tri_normal = nn.functional.normalize(nnorm, dim=2) + v_norm = tri_normal[:, self.vert_tris, :].sum(2) + vert_normal = v_norm / v_norm.norm(dim=2).unsqueeze(2) + return vert_normal + + def get_render(self, batch_size=1): + half_s = self.img_w * 0.5 + R, T = look_at_view_transform(10, 0, 0) + R = R.repeat(batch_size, 1, 1) + T = torch.zeros((batch_size, 3), dtype=torch.float32).to(self.device) + + cameras = FoVPerspectiveCameras( + device=self.device, + R=R, + T=T, + znear=0.01, + zfar=20, + fov=2 * np.arctan(self.img_w // 2 / self.focal) * 180.0 / np.pi, + ) + lights = PointLights( + device=self.device, + location=[[0.0, 0.0, 1e5]], + ambient_color=[[1, 1, 1]], + specular_color=[[0.0, 0.0, 0.0]], + diffuse_color=[[0.0, 0.0, 0.0]], + ) + sigma = 1e-4 + raster_settings = RasterizationSettings( + image_size=(self.img_h, self.img_w), + blur_radius=np.log(1.0 / 1e-4 - 1.0) * sigma / 18.0, + faces_per_pixel=2, + perspective_correct=False, + ) + blend_params = blending.BlendParams(background_color=[0, 0, 0]) + renderer = MeshRenderer( + rasterizer=MeshRasterizer(raster_settings=raster_settings, cameras=cameras), + shader=SoftSimpleShader( + lights=lights, blend_params=blend_params, cameras=cameras + ), + ) + return renderer.to(self.device) + + @staticmethod + def Illumination_layer(face_texture, norm, gamma): + + n_b, num_vertex, _ = face_texture.size() + n_v_full = n_b * num_vertex + gamma = gamma.view(-1, 3, 9).clone() + gamma[:, :, 0] += 0.8 + + gamma = gamma.permute(0, 2, 1) + + a0 = np.pi + a1 = 2 * np.pi / np.sqrt(3.0) + a2 = 2 * np.pi / np.sqrt(8.0) + c0 = 1 / np.sqrt(4 * np.pi) + c1 = np.sqrt(3.0) / np.sqrt(4 * np.pi) + c2 = 3 * np.sqrt(5.0) / np.sqrt(12 * np.pi) + d0 = 0.5 / np.sqrt(3.0) + + Y0 = torch.ones(n_v_full).to(gamma.device).float() * a0 * c0 + norm = norm.view(-1, 3) + nx, ny, nz = norm[:, 0], norm[:, 1], norm[:, 2] + arrH = [] + + arrH.append(Y0) + arrH.append(-a1 * c1 * ny) + arrH.append(a1 * c1 * nz) + arrH.append(-a1 * c1 * nx) + arrH.append(a2 * c2 * nx * ny) + arrH.append(-a2 * c2 * ny * nz) + arrH.append(a2 * c2 * d0 * (3 * nz.pow(2) - 1)) + arrH.append(-a2 * c2 * nx * nz) + arrH.append(a2 * c2 * 0.5 * (nx.pow(2) - ny.pow(2))) + + H = torch.stack(arrH, 1) + Y = H.view(n_b, num_vertex, 9) + lighting = Y.bmm(gamma) + + face_color = face_texture * lighting + return face_color + + def forward(self, rott_geometry, texture, diffuse_sh): + face_normal = self.compute_normal(rott_geometry) + face_color = self.Illumination_layer(texture, face_normal, diffuse_sh) + face_color = TexturesVertex(face_color) + mesh = Meshes( + rott_geometry, + self.tris.float().repeat(rott_geometry.shape[0], 1, 1), + face_color, + ) + rendered_img = self.renderer(mesh) + rendered_img = torch.clamp(rendered_img, 0, 255) + + return rendered_img diff --git a/data_utils/face_tracking/render_land.py b/data_utils/face_tracking/render_land.py new file mode 100644 index 0000000000000000000000000000000000000000..9dd324de64ceaf268c446955584ac148c3a8d09b --- /dev/null +++ b/data_utils/face_tracking/render_land.py @@ -0,0 +1,146 @@ +import torch +import torch.nn as nn +import render_util +import geo_transform +import numpy as np + + +def compute_tri_normal(geometry, tris): + geometry = geometry.permute(0, 2, 1) + tri_1 = tris[:, 0] + tri_2 = tris[:, 1] + tri_3 = tris[:, 2] + + vert_1 = torch.index_select(geometry, 2, tri_1) + vert_2 = torch.index_select(geometry, 2, tri_2) + vert_3 = torch.index_select(geometry, 2, tri_3) + + nnorm = torch.cross(vert_2-vert_1, vert_3-vert_1, 1) + normal = nn.functional.normalize(nnorm).permute(0, 2, 1) + return normal + + +class Compute_normal_base(torch.autograd.Function): + @staticmethod + def forward(ctx, normal): + normal_b, = render_util.normal_base_forward(normal) + ctx.save_for_backward(normal) + return normal_b + + @staticmethod + def backward(ctx, grad_normal_b): + normal, = ctx.saved_tensors + grad_normal, = render_util.normal_base_backward(grad_normal_b, normal) + return grad_normal + + +class Normal_Base(torch.nn.Module): + def __init__(self): + super(Normal_Base, self).__init__() + + def forward(self, normal): + return Compute_normal_base.apply(normal) + + +def preprocess_render(geometry, euler, trans, cam, tris, vert_tris, ori_img): + point_num = geometry.shape[1] + rott_geo = geo_transform.euler_trans_geo(geometry, euler, trans) + proj_geo = geo_transform.proj_geo(rott_geo, cam) + rot_tri_normal = compute_tri_normal(rott_geo, tris) + rot_vert_normal = torch.index_select(rot_tri_normal, 1, vert_tris) + is_visible = -torch.bmm(rot_vert_normal.reshape(-1, 1, 3), + nn.functional.normalize(rott_geo.reshape(-1, 3, 1))).reshape(-1, point_num) + is_visible[is_visible < 0.01] = -1 + pixel_valid = torch.zeros((ori_img.shape[0], ori_img.shape[1]*ori_img.shape[2]), + dtype=torch.float32, device=ori_img.device) + return rott_geo, proj_geo, rot_tri_normal, is_visible, pixel_valid + + +class Render_Face(torch.autograd.Function): + @staticmethod + def forward(ctx, proj_geo, texture, nbl, ori_img, is_visible, tri_inds, + pixel_valid): + batch_size, h, w, _ = ori_img.shape + ori_img = ori_img.view(batch_size, -1, 3) + ori_size = torch.cat((torch.ones((batch_size, 1), dtype=torch.int32, device=ori_img.device)*h, + torch.ones((batch_size, 1), dtype=torch.int32, device=ori_img.device)*w), + dim=1).view(-1) + tri_index, tri_coord, render, real = render_util.render_face_forward( + proj_geo, ori_img, ori_size, texture, nbl, is_visible, tri_inds, pixel_valid) + ctx.save_for_backward(ori_img, ori_size, proj_geo, texture, nbl, + tri_inds, tri_index, tri_coord) + return render, real + + @staticmethod + def backward(ctx, grad_render, grad_real): + ori_img, ori_size, proj_geo, texture, nbl, tri_inds, tri_index, tri_coord = \ + ctx.saved_tensors + grad_proj_geo, grad_texture, grad_nbl = render_util.render_face_backward( + grad_render, grad_real, ori_img, ori_size, proj_geo, texture, nbl, tri_inds, + tri_index, tri_coord) + return grad_proj_geo, grad_texture, grad_nbl, None, None, None, None + + +class Render_RGB(nn.Module): + def __init__(self): + super(Render_RGB, self).__init__() + + def forward(self, proj_geo, texture, nbl, ori_img, is_visible, tri_inds, pixel_valid): + return Render_Face.apply(proj_geo, texture, nbl, ori_img, is_visible, + tri_inds, pixel_valid) + + +def cal_land(proj_geo, is_visible, lands_info, land_num): + land_index, = render_util.update_contour( + lands_info, is_visible, land_num) + proj_land = torch.index_select( + proj_geo.reshape(-1, 3), 0, land_index)[:, :2].reshape(-1, land_num, 2) + return proj_land + + +class Render_Land(nn.Module): + def __init__(self): + super(Render_Land, self).__init__() + lands_info = np.loadtxt('../data/3DMM/lands_info.txt', dtype=np.int32) + self.lands_info = torch.as_tensor(lands_info).cuda() + tris = np.loadtxt('../data/3DMM/tris.txt', dtype=np.int64) + self.tris = torch.as_tensor(tris).cuda() - 1 + vert_tris = np.loadtxt('../data/3DMM/vert_tris.txt', dtype=np.int64) + self.vert_tris = torch.as_tensor(vert_tris).cuda() + self.normal_baser = Normal_Base().cuda() + self.renderer = Render_RGB().cuda() + + def render_mesh(self, geometry, euler, trans, cam, ori_img, light): + batch_size, h, w, _ = ori_img.shape + ori_img = ori_img.view(batch_size, -1, 3) + ori_size = torch.cat((torch.ones((batch_size, 1), dtype=torch.int32, device=ori_img.device)*h, + torch.ones((batch_size, 1), dtype=torch.int32, device=ori_img.device)*w), + dim=1).view(-1) + rott_geo, proj_geo, rot_tri_normal, _, _ = preprocess_render( + geometry, euler, trans, cam, self.tris, self.vert_tris, ori_img) + tri_nb = self.normal_baser(rot_tri_normal.contiguous()) + nbl = torch.bmm(tri_nb, (light.reshape(-1, 9, 3)) + [:, :, 0].unsqueeze(-1).repeat(1, 1, 3)) + texture = torch.ones_like(geometry) * 200 + render, = render_util.render_mesh( + proj_geo, ori_img, ori_size, texture, nbl, self.tris) + return render.view(batch_size, h, w, 3).byte() + + def cal_loss_rgb(self, geometry, euler, trans, cam, ori_img, light, texture, lands): + rott_geo, proj_geo, rot_tri_normal, is_visible, pixel_valid = \ + preprocess_render(geometry, euler, trans, cam, + self.tris, self.vert_tris, ori_img) + tri_nb = self.normal_baser(rot_tri_normal.contiguous()) + nbl = torch.bmm(tri_nb, light.reshape(-1, 9, 3)) + render, real = self.renderer( + proj_geo, texture, nbl, ori_img, is_visible, self.tris, pixel_valid) + proj_land = cal_land(proj_geo, is_visible, + self.lands_info, lands.shape[1]) + col_minus = torch.norm((render-real).reshape(-1, 3), + dim=1).reshape(ori_img.shape[0], -1) + col_dis = torch.mean(col_minus*pixel_valid) / \ + (torch.mean(pixel_valid)+0.00001) + land_dists = torch.norm( + (proj_land-lands).reshape(-1, 2), dim=1).reshape(ori_img.shape[0], -1) + lan_dis = torch.mean(land_dists) + return col_dis, lan_dis diff --git a/data_utils/face_tracking/util.py b/data_utils/face_tracking/util.py new file mode 100644 index 0000000000000000000000000000000000000000..7633bbfaed7337dd00042536f1fd4452b7c8674b --- /dev/null +++ b/data_utils/face_tracking/util.py @@ -0,0 +1,80 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +def compute_tri_normal(geometry, tris): + tri_1 = tris[:, 0] + tri_2 = tris[:, 1] + tri_3 = tris[:, 2] + vert_1 = torch.index_select(geometry, 1, tri_1) + vert_2 = torch.index_select(geometry, 1, tri_2) + vert_3 = torch.index_select(geometry, 1, tri_3) + nnorm = torch.cross(vert_2-vert_1, vert_3-vert_1, 2) + normal = nn.functional.normalize(nnorm) + return normal + + +def euler2rot(euler_angle): + batch_size = euler_angle.shape[0] + theta = euler_angle[:, 0].reshape(-1, 1, 1) + phi = euler_angle[:, 1].reshape(-1, 1, 1) + psi = euler_angle[:, 2].reshape(-1, 1, 1) + one = torch.ones(batch_size, 1, 1).to(euler_angle.device) + zero = torch.zeros(batch_size, 1, 1).to(euler_angle.device) + rot_x = torch.cat(( + torch.cat((one, zero, zero), 1), + torch.cat((zero, theta.cos(), theta.sin()), 1), + torch.cat((zero, -theta.sin(), theta.cos()), 1), + ), 2) + rot_y = torch.cat(( + torch.cat((phi.cos(), zero, -phi.sin()), 1), + torch.cat((zero, one, zero), 1), + torch.cat((phi.sin(), zero, phi.cos()), 1), + ), 2) + rot_z = torch.cat(( + torch.cat((psi.cos(), -psi.sin(), zero), 1), + torch.cat((psi.sin(), psi.cos(), zero), 1), + torch.cat((zero, zero, one), 1) + ), 2) + return torch.bmm(rot_x, torch.bmm(rot_y, rot_z)) + + +def rot_trans_pts(geometry, rot, trans): + rott_geo = torch.bmm(rot, geometry.permute(0, 2, 1)) + trans[:, :, None] + return rott_geo.permute(0, 2, 1) + + +def cal_lap_loss(tensor_list, weight_list): + lap_kernel = torch.Tensor( + (-0.5, 1.0, -0.5)).unsqueeze(0).unsqueeze(0).float().to(tensor_list[0].device) + loss_lap = 0 + for i in range(len(tensor_list)): + in_tensor = tensor_list[i] + in_tensor = in_tensor.view(-1, 1, in_tensor.shape[-1]) + out_tensor = F.conv1d(in_tensor, lap_kernel) + loss_lap += torch.mean(out_tensor**2)*weight_list[i] + return loss_lap + + +def proj_pts(rott_geo, focal_length, cxy): + cx, cy = cxy[0], cxy[1] + X = rott_geo[:, :, 0] + Y = rott_geo[:, :, 1] + Z = rott_geo[:, :, 2] + fxX = focal_length*X + fyY = focal_length*Y + proj_x = -fxX/Z + cx + proj_y = fyY/Z + cy + return torch.cat((proj_x[:, :, None], proj_y[:, :, None], Z[:, :, None]), 2) + + +def forward_transform(geometry, euler_angle, trans, focal_length, cxy): + rot = euler2rot(euler_angle) + rott_geo = rot_trans_pts(geometry, rot, trans) + proj_geo = proj_pts(rott_geo, focal_length, cxy) + return proj_geo + + +def cal_lan_loss(proj_lan, gt_lan): + return torch.mean((proj_lan-gt_lan)**2) \ No newline at end of file diff --git a/data_utils/hubert.py b/data_utils/hubert.py new file mode 100644 index 0000000000000000000000000000000000000000..e892f64ed814e6f731312817b12ded7209a634e3 --- /dev/null +++ b/data_utils/hubert.py @@ -0,0 +1,92 @@ +from transformers import Wav2Vec2Processor, HubertModel +import soundfile as sf +import numpy as np +import torch + +print("Loading the Wav2Vec2 Processor...") +wav2vec2_processor = Wav2Vec2Processor.from_pretrained("facebook/hubert-large-ls960-ft") +print("Loading the HuBERT Model...") +hubert_model = HubertModel.from_pretrained("facebook/hubert-large-ls960-ft") + + +def get_hubert_from_16k_wav(wav_16k_name): + speech_16k, _ = sf.read(wav_16k_name) + hubert = get_hubert_from_16k_speech(speech_16k) + return hubert + +@torch.no_grad() +def get_hubert_from_16k_speech(speech, device="cuda:0"): + global hubert_model + hubert_model = hubert_model.to(device) + if speech.ndim ==2: + speech = speech[:, 0] # [T, 2] ==> [T,] + input_values_all = wav2vec2_processor(speech, return_tensors="pt", sampling_rate=16000).input_values # [1, T] + input_values_all = input_values_all.to(device) + # For long audio sequence, due to the memory limitation, we cannot process them in one run + # HuBERT process the wav with a CNN of stride [5,2,2,2,2,2], making a stride of 320 + # Besides, the kernel is [10,3,3,3,3,2,2], making 400 a fundamental unit to get 1 time step. + # So the CNN is euqal to a big Conv1D with kernel k=400 and stride s=320 + # We have the equation to calculate out time step: T = floor((t-k)/s) + # To prevent overlap, we set each clip length of (K+S*(N-1)), where N is the expected length T of this clip + # The start point of next clip should roll back with a length of (kernel-stride) so it is stride * N + kernel = 400 + stride = 320 + clip_length = stride * 1000 + num_iter = input_values_all.shape[1] // clip_length + expected_T = (input_values_all.shape[1] - (kernel-stride)) // stride + res_lst = [] + for i in range(num_iter): + if i == 0: + start_idx = 0 + end_idx = clip_length - stride + kernel + else: + start_idx = clip_length * i + end_idx = start_idx + (clip_length - stride + kernel) + input_values = input_values_all[:, start_idx: end_idx] + hidden_states = hubert_model.forward(input_values).last_hidden_state # [B=1, T=pts//320, hid=1024] + res_lst.append(hidden_states[0]) + if num_iter > 0: + input_values = input_values_all[:, clip_length * num_iter:] + else: + input_values = input_values_all + # if input_values.shape[1] != 0: + if input_values.shape[1] >= kernel: # if the last batch is shorter than kernel_size, skip it + hidden_states = hubert_model(input_values).last_hidden_state # [B=1, T=pts//320, hid=1024] + res_lst.append(hidden_states[0]) + ret = torch.cat(res_lst, dim=0).cpu() # [T, 1024] + # assert ret.shape[0] == expected_T + assert abs(ret.shape[0] - expected_T) <= 1 + if ret.shape[0] < expected_T: + ret = torch.nn.functional.pad(ret, (0,0,0,expected_T-ret.shape[0])) + else: + ret = ret[:expected_T] + return ret + +def make_even_first_dim(tensor): + size = list(tensor.size()) + if size[0] % 2 == 1: + size[0] -= 1 + return tensor[:size[0]] + return tensor + +import soundfile as sf +import numpy as np +import torch +from argparse import ArgumentParser +import librosa + +parser = ArgumentParser() +parser.add_argument('--wav', type=str, help='') +args = parser.parse_args() + +wav_name = args.wav + +speech, sr = sf.read(wav_name) +speech_16k = librosa.resample(speech, orig_sr=sr, target_sr=16000) +print("SR: {} to {}".format(sr, 16000)) +# print(speech.shape, speech_16k.shape) + +hubert_hidden = get_hubert_from_16k_speech(speech_16k) +hubert_hidden = make_even_first_dim(hubert_hidden).reshape(-1, 2, 1024) +np.save(wav_name.replace('.wav', '_hu.npy'), hubert_hidden.detach().numpy()) +print(hubert_hidden.detach().numpy().shape) \ No newline at end of file diff --git a/data_utils/process.py b/data_utils/process.py new file mode 100644 index 0000000000000000000000000000000000000000..7aab9f091137cb9263719bf548f828198511295e --- /dev/null +++ b/data_utils/process.py @@ -0,0 +1,486 @@ +import os +import glob +import tqdm +import json +import argparse +import cv2 +import numpy as np +import torch +import torch.nn.functional as F +import face_alignment +from face_tracking.util import euler2rot + + +def extract_audio(path, out_path, sample_rate=16000): + + print(f'[INFO] ===== extract audio from {path} to {out_path} =====') + cmd = f'ffmpeg -i {path} -f wav -ar {sample_rate} {out_path}' + os.system(cmd) + print(f'[INFO] ===== extracted audio =====') + +def extract_audio_features(path, mode='ave'): + + print(f'[INFO] ===== extract audio labels for {path} =====') + if mode == 'ave': + print(f'AVE has been integrated into the training code, no need to extract audio features') + elif mode == "deepspeech": # deepspeech + cmd = f'python data_utils/deepspeech_features/extract_ds_features.py --input {path}' + os.system(cmd) + elif mode == 'hubert': + cmd = f'python data_utils/hubert.py --wav {path}' # save to data/_hu.npy + os.system(cmd) + print(f'[INFO] ===== extracted audio labels =====') + + +def extract_images(path, out_path, fps=25): + + print(f'[INFO] ===== extract images from {path} to {out_path} =====') + cmd = f'ffmpeg -i {path} -vf fps={fps} -qmin 1 -q:v 1 -start_number 0 {os.path.join(out_path, "%d.jpg")}' + os.system(cmd) + print(f'[INFO] ===== extracted images =====') + + +def extract_semantics(ori_imgs_dir, parsing_dir): + + print(f'[INFO] ===== extract semantics from {ori_imgs_dir} to {parsing_dir} =====') + cmd = f'python data_utils/face_parsing/test.py --respath={parsing_dir} --imgpath={ori_imgs_dir}' + os.system(cmd) + print(f'[INFO] ===== extracted semantics =====') + + +def extract_landmarks(ori_imgs_dir): + + print(f'[INFO] ===== extract face landmarks from {ori_imgs_dir} =====') + try: + fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False) + except: + fa = face_alignment.FaceAlignment(face_alignment.LandmarksType.TWO_D, flip_input=False) + image_paths = glob.glob(os.path.join(ori_imgs_dir, '*.jpg')) + for image_path in tqdm.tqdm(image_paths): + input = cv2.imread(image_path, cv2.IMREAD_UNCHANGED) # [H, W, 3] + input = cv2.cvtColor(input, cv2.COLOR_BGR2RGB) + preds = fa.get_landmarks(input) + if len(preds) > 0: + lands = preds[0].reshape(-1, 2)[:,:2] + np.savetxt(image_path.replace('jpg', 'lms'), lands, '%f') + del fa + print(f'[INFO] ===== extracted face landmarks =====') + + +def extract_background(base_dir, ori_imgs_dir): + + print(f'[INFO] ===== extract background image from {ori_imgs_dir} =====') + + from sklearn.neighbors import NearestNeighbors + + image_paths = glob.glob(os.path.join(ori_imgs_dir, '*.jpg')) + # only use 1/20 image_paths + image_paths = image_paths[::20] + # read one image to get H/W + tmp_image = cv2.imread(image_paths[0], cv2.IMREAD_UNCHANGED) # [H, W, 3] + h, w = tmp_image.shape[:2] + + # nearest neighbors + all_xys = np.mgrid[0:h, 0:w].reshape(2, -1).transpose() + distss = [] + for image_path in tqdm.tqdm(image_paths): + parse_img = cv2.imread(image_path.replace('ori_imgs', 'parsing').replace('.jpg', '.png')) + bg = (parse_img[..., 0] == 255) & (parse_img[..., 1] == 255) & (parse_img[..., 2] == 255) + fg_xys = np.stack(np.nonzero(~bg)).transpose(1, 0) + nbrs = NearestNeighbors(n_neighbors=1, algorithm='kd_tree').fit(fg_xys) + dists, _ = nbrs.kneighbors(all_xys) + distss.append(dists) + + distss = np.stack(distss) + max_dist = np.max(distss, 0) + max_id = np.argmax(distss, 0) + + bc_pixs = max_dist > 5 + bc_pixs_id = np.nonzero(bc_pixs) + bc_ids = max_id[bc_pixs] + + imgs = [] + num_pixs = distss.shape[1] + for image_path in image_paths: + img = cv2.imread(image_path) + imgs.append(img) + imgs = np.stack(imgs).reshape(-1, num_pixs, 3) + + bc_img = np.zeros((h*w, 3), dtype=np.uint8) + bc_img[bc_pixs_id, :] = imgs[bc_ids, bc_pixs_id, :] + bc_img = bc_img.reshape(h, w, 3) + + max_dist = max_dist.reshape(h, w) + bc_pixs = max_dist > 5 + bg_xys = np.stack(np.nonzero(~bc_pixs)).transpose() + fg_xys = np.stack(np.nonzero(bc_pixs)).transpose() + nbrs = NearestNeighbors(n_neighbors=1, algorithm='kd_tree').fit(fg_xys) + distances, indices = nbrs.kneighbors(bg_xys) + bg_fg_xys = fg_xys[indices[:, 0]] + bc_img[bg_xys[:, 0], bg_xys[:, 1], :] = bc_img[bg_fg_xys[:, 0], bg_fg_xys[:, 1], :] + + cv2.imwrite(os.path.join(base_dir, 'bc.jpg'), bc_img) + + print(f'[INFO] ===== extracted background image =====') + + +def extract_torso_and_gt(base_dir, ori_imgs_dir): + + print(f'[INFO] ===== extract torso and gt images for {base_dir} =====') + + from scipy.ndimage import binary_erosion, binary_dilation + + # load bg + bg_image = cv2.imread(os.path.join(base_dir, 'bc.jpg'), cv2.IMREAD_UNCHANGED) + + image_paths = glob.glob(os.path.join(ori_imgs_dir, '*.jpg')) + + for image_path in tqdm.tqdm(image_paths): + # read ori image + ori_image = cv2.imread(image_path, cv2.IMREAD_UNCHANGED) # [H, W, 3] + + # read semantics + seg = cv2.imread(image_path.replace('ori_imgs', 'parsing').replace('.jpg', '.png')) + mask_img = np.zeros_like(seg) + head_part = (seg[..., 0] == 255) & (seg[..., 1] == 0) & (seg[..., 2] == 0) + neck_part = (seg[..., 0] == 0) & (seg[..., 1] == 255) & (seg[..., 2] == 0) + torso_part = (seg[..., 0] == 0) & (seg[..., 1] == 0) & (seg[..., 2] == 255) + bg_part = (seg[..., 0] == 255) & (seg[..., 1] == 255) & (seg[..., 2] == 255) + mask_img[head_part, :] = 255 + cv2.imwrite(image_path.replace('ori_imgs', 'face_mask').replace('.jpg', '.png'), mask_img) + # get gt image + gt_image = ori_image.copy() + gt_image[bg_part] = bg_image[bg_part] + cv2.imwrite(image_path.replace('ori_imgs', 'gt_imgs'), gt_image) + + # get torso image + torso_image = gt_image.copy() # rgb + torso_image[head_part] = bg_image[head_part] + torso_alpha = 255 * np.ones((gt_image.shape[0], gt_image.shape[1], 1), dtype=np.uint8) # alpha + + # torso part "vertical" in-painting... + L = 8 + 1 + torso_coords = np.stack(np.nonzero(torso_part), axis=-1) # [M, 2] + # lexsort: sort 2D coords first by y then by x, + # ref: https://stackoverflow.com/questions/2706605/sorting-a-2d-numpy-array-by-multiple-axes + inds = np.lexsort((torso_coords[:, 0], torso_coords[:, 1])) + torso_coords = torso_coords[inds] + # choose the top pixel for each column + u, uid, ucnt = np.unique(torso_coords[:, 1], return_index=True, return_counts=True) + top_torso_coords = torso_coords[uid] # [m, 2] + # only keep top-is-head pixels + top_torso_coords_up = top_torso_coords.copy() - np.array([1, 0]) + mask = head_part[tuple(top_torso_coords_up.T)] + if mask.any(): + top_torso_coords = top_torso_coords[mask] + # get the color + top_torso_colors = gt_image[tuple(top_torso_coords.T)] # [m, 3] + # construct inpaint coords (vertically up, or minus in x) + inpaint_torso_coords = top_torso_coords[None].repeat(L, 0) # [L, m, 2] + inpaint_offsets = np.stack([-np.arange(L), np.zeros(L, dtype=np.int32)], axis=-1)[:, None] # [L, 1, 2] + inpaint_torso_coords += inpaint_offsets + inpaint_torso_coords = inpaint_torso_coords.reshape(-1, 2) # [Lm, 2] + inpaint_torso_colors = top_torso_colors[None].repeat(L, 0) # [L, m, 3] + darken_scaler = 0.98 ** np.arange(L).reshape(L, 1, 1) # [L, 1, 1] + inpaint_torso_colors = (inpaint_torso_colors * darken_scaler).reshape(-1, 3) # [Lm, 3] + # set color + torso_image[tuple(inpaint_torso_coords.T)] = inpaint_torso_colors + + inpaint_torso_mask = np.zeros_like(torso_image[..., 0]).astype(bool) + inpaint_torso_mask[tuple(inpaint_torso_coords.T)] = True + else: + inpaint_torso_mask = None + + push_down = 4 + L = 48 + push_down + 1 + + neck_part = binary_dilation(neck_part, structure=np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]], dtype=bool), iterations=3) + + neck_coords = np.stack(np.nonzero(neck_part), axis=-1) # [M, 2] + inds = np.lexsort((neck_coords[:, 0], neck_coords[:, 1])) + neck_coords = neck_coords[inds] + u, uid, ucnt = np.unique(neck_coords[:, 1], return_index=True, return_counts=True) + top_neck_coords = neck_coords[uid] # [m, 2] + top_neck_coords_up = top_neck_coords.copy() - np.array([1, 0]) + mask = head_part[tuple(top_neck_coords_up.T)] + + top_neck_coords = top_neck_coords[mask] + offset_down = np.minimum(ucnt[mask] - 1, push_down) + top_neck_coords += np.stack([offset_down, np.zeros_like(offset_down)], axis=-1) + # get the color + top_neck_colors = gt_image[tuple(top_neck_coords.T)] # [m, 3] + + # construct inpaint coords (vertically up, or minus in x) + inpaint_neck_coords = top_neck_coords[None].repeat(L, 0) # [L, m, 2] + inpaint_offsets = np.stack([-np.arange(L), np.zeros(L, dtype=np.int32)], axis=-1)[:, None] # [L, 1, 2] + inpaint_neck_coords += inpaint_offsets + inpaint_neck_coords = inpaint_neck_coords.reshape(-1, 2) # [Lm, 2] + + #add + neck_avg_color = np.mean(gt_image[neck_part], axis=0) + inpaint_neck_colors = top_neck_colors[None].repeat(L, 0) # [L, m, 3] + alpha_values = np.linspace(1, 0, L).reshape(L, 1, 1) # [L, 1, 1] + inpaint_neck_colors = inpaint_neck_colors * alpha_values + neck_avg_color * (1 - alpha_values) + inpaint_neck_colors = inpaint_neck_colors.reshape(-1, 3) # [Lm, 3] + torso_image[tuple(inpaint_neck_coords.T)] = inpaint_neck_colors + + inpaint_mask = np.zeros_like(torso_image[..., 0]).astype(bool) + inpaint_mask[tuple(inpaint_neck_coords.T)] = True + + blur_img = torso_image.copy() + blur_img = cv2.GaussianBlur(blur_img, (5, 5), cv2.BORDER_DEFAULT) + + torso_image[inpaint_mask] = blur_img[inpaint_mask] + + # set mask + mask = (neck_part | torso_part | inpaint_mask) + if inpaint_torso_mask is not None: + mask = mask | inpaint_torso_mask + torso_image[~mask] = 0 + torso_alpha[~mask] = 0 + + cv2.imwrite(image_path.replace('ori_imgs', 'torso_imgs').replace('.jpg', '.png'), np.concatenate([torso_image, torso_alpha], axis=-1)) + print(f'[INFO] ===== extracted torso and gt images =====') + + +def face_tracking(ori_imgs_dir): + + print(f'[INFO] ===== perform face tracking =====') + + image_paths = glob.glob(os.path.join(ori_imgs_dir, '*.jpg')) + + # read one image to get H/W + tmp_image = cv2.imread(image_paths[0], cv2.IMREAD_UNCHANGED) # [H, W, 3] + h, w = tmp_image.shape[:2] + + cmd = f'python data_utils/face_tracking/face_tracker.py --path={ori_imgs_dir} --img_h={h} --img_w={w} --frame_num={len(image_paths)}' + + os.system(cmd) + + print(f'[INFO] ===== finished face tracking =====') + +# ref: https://github.com/ShunyuYao/DFA-NeRF +def extract_flow(base_dir,ori_imgs_dir,mask_dir, flow_dir): + print(f'[INFO] ===== extract flow =====') + torch.cuda.empty_cache() + ref_id = 2 + image_paths = glob.glob(os.path.join(ori_imgs_dir, '*.jpg')) + tmp_image = cv2.imread(image_paths[0], cv2.IMREAD_UNCHANGED) # [H, W, 3] + h, w = tmp_image.shape[:2] + valid_img_ids = [] + for i in range(100000): + if os.path.isfile(os.path.join(ori_imgs_dir, '{:d}.lms'.format(i))): + valid_img_ids.append(i) + valid_img_num = len(valid_img_ids) + with open(os.path.join(base_dir, 'flow_list.txt'), 'w') as file: + for i in range(0, valid_img_num): + file.write(base_dir + '/ori_imgs/' + '{:d}.jpg '.format(ref_id) + + base_dir + '/face_mask/' + '{:d}.png '.format(ref_id) + + base_dir + '/ori_imgs/' + '{:d}.jpg '.format(i) + + base_dir + '/face_mask/' + '{:d}.png\n'.format(i)) + file.close() + ext_flow_cmd = 'python data_utils/UNFaceFlow/test_flow.py --datapath=' + base_dir + '/flow_list.txt ' + \ + '--savepath=' + base_dir + '/flow_result' + \ + ' --width=' + str(w) + ' --height=' + str(h) + os.system(ext_flow_cmd) + face_img = cv2.imread(os.path.join(ori_imgs_dir, '{:d}.jpg'.format(ref_id))) + face_img_mask = cv2.imread(os.path.join(mask_dir, '{:d}.png'.format(ref_id))) + + rigid_mask = face_img_mask[..., 0] > 250 + rigid_num = np.sum(rigid_mask) + flow_frame_num = 2500 + flow_frame_num = min(flow_frame_num, valid_img_num) + rigid_flow = np.zeros((flow_frame_num, 2, rigid_num), np.float32) + for i in range(flow_frame_num): + flow = np.load(os.path.join(flow_dir, '{:d}_{:d}.npy'.format(ref_id, valid_img_ids[i]))) + rigid_flow[i] = flow[:, rigid_mask] + rigid_flow = rigid_flow.transpose((2, 1, 0)) + rigid_flow = torch.as_tensor(rigid_flow).cuda() + lap_kernel = torch.Tensor( + (-0.5, 1.0, -0.5)).unsqueeze(0).unsqueeze(0).float().cuda() + flow_lap = F.conv1d( + rigid_flow.reshape(-1, 1, rigid_flow.shape[-1]), lap_kernel) + flow_lap = flow_lap.view(rigid_flow.shape[0], 2, -1) + flow_lap = torch.norm(flow_lap, dim=1) + valid_frame = torch.mean(flow_lap, dim=0) < (torch.mean(flow_lap) * 3) + flow_lap = flow_lap[:, valid_frame] + rigid_flow_mean = torch.mean(flow_lap, dim=1) + rigid_flow_show = (rigid_flow_mean - torch.min(rigid_flow_mean)) / \ + (torch.max(rigid_flow_mean) - torch.min(rigid_flow_mean)) * 255 + rigid_flow_show = rigid_flow_show.byte().cpu().numpy() + rigid_flow_img = np.zeros((h, w, 1), dtype=np.uint8) + rigid_flow_img[...] = 255 + rigid_flow_img[rigid_mask, 0] = rigid_flow_show + cv2.imwrite(os.path.join(base_dir, 'rigid_flow.jpg'), rigid_flow_img) + win_size, d_size = 5, 5 + sel_xys = np.zeros((h, w), dtype=np.int32) + xys = [] + for y in range(0, h - win_size, win_size): + for x in range(0, w - win_size, win_size): + min_v = int(40) + id_x = -1 + id_y = -1 + for dy in range(0, win_size): + for dx in range(0, win_size): + if rigid_flow_img[y + dy, x + dx, 0] < min_v: + min_v = rigid_flow_img[y + dy, x + dx, 0] + id_x = x + dx + id_y = y + dy + if id_x >= 0: + if (np.sum(sel_xys[id_y - d_size:id_y + d_size + 1, id_x - d_size:id_x + d_size + 1]) == 0): + cv2.circle(face_img, (id_x, id_y), 1, (255, 0, 0)) + xys.append(np.array((id_x, id_y), np.int32)) + sel_xys[id_y, id_x] = 1 + + cv2.imwrite(os.path.join(base_dir, 'keypts.jpg'), face_img) + np.savetxt(os.path.join(base_dir, 'keypoints.txt'), xys, '%d') + key_xys = np.loadtxt(os.path.join(base_dir, 'keypoints.txt'), np.int32) + track_xys = np.zeros((valid_img_num, key_xys.shape[0], 2), dtype=np.float32) + track_dir = os.path.join(base_dir,'flow_result') + track_paths = sorted(glob.glob(os.path.join(track_dir, '*.npy')), key=lambda x: int(x.split('/')[-1].split('.')[0])) + + for i, path in enumerate(track_paths): + + flow = np.load(path) + for j in range(key_xys.shape[0]): + x = key_xys[j, 0] + y = key_xys[j, 1] + track_xys[i, j, 0] = x + flow[0, y, x] + track_xys[i, j, 1] = y + flow[1, y, x] + np.save(os.path.join(base_dir, 'track_xys.npy'), track_xys) + + pose_opt_cmd = 'python data_utils/face_tracking/bundle_adjustment.py --path=' + base_dir + ' --img_h=' + \ + str(h) + ' --img_w=' + str(w) + os.system(pose_opt_cmd) + +def extract_blendshape(base_dir): + print(f'[INFO] ===== extract blendshape =====') + blendshape_cmd = 'python data_utils/blendshape_capture/main.py --path=' + base_dir + os.system(blendshape_cmd) + + +def save_transforms(base_dir, ori_imgs_dir): + print(f'[INFO] ===== save transforms =====') + + image_paths = glob.glob(os.path.join(ori_imgs_dir, '*.jpg')) + + # read one image to get H/W + tmp_image = cv2.imread(image_paths[0], cv2.IMREAD_UNCHANGED) # [H, W, 3] + h, w = tmp_image.shape[:2] + + params_dict = torch.load(os.path.join(base_dir, 'bundle_adjustment.pt')) + focal_len = params_dict['focal'] + euler_angle = params_dict['euler'] + trans = params_dict['trans'] + valid_num = euler_angle.shape[0] + + train_val_split = int(valid_num * 10 / 11) + train_ids = torch.arange(0, train_val_split) + val_ids = torch.arange(train_val_split, valid_num) + + rot = euler2rot(euler_angle) + rot_inv = rot.permute(0, 2, 1) + trans_inv = -torch.bmm(rot_inv, trans.unsqueeze(2)) + + pose = torch.eye(4, dtype=torch.float32) + save_ids = ['train', 'val'] + train_val_ids = [train_ids, val_ids] + mean_z = -float(torch.mean(trans[:, 2]).item()) + + for split in range(2): + transform_dict = dict() + transform_dict['focal_len'] = float(focal_len[0]) + transform_dict['cx'] = float(w/2.0) + transform_dict['cy'] = float(h/2.0) + transform_dict['frames'] = [] + ids = train_val_ids[split] + save_id = save_ids[split] + + for i in ids: + i = i.item() + frame_dict = dict() + frame_dict['img_id'] = i + frame_dict['aud_id'] = i + + pose[:3, :3] = rot_inv[i] + pose[:3, 3] = trans_inv[i, :, 0] + + frame_dict['transform_matrix'] = pose.numpy().tolist() + + transform_dict['frames'].append(frame_dict) + + with open(os.path.join(base_dir, 'transforms_' + save_id + '.json'), 'w') as fp: + json.dump(transform_dict, fp, indent=2, separators=(',', ': ')) + + print(f'[INFO] ===== finished saving transforms =====') + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('path', type=str, help="path to video file") + parser.add_argument('--task', type=int, default=-1, help="-1 means all") + parser.add_argument('--asr', type=str, default='ave', help="ave, hubert or deepspeech") + + + opt = parser.parse_args() + + base_dir = os.path.dirname(opt.path) + + wav_path = os.path.join(base_dir, 'aud.wav') + ori_imgs_dir = os.path.join(base_dir, 'ori_imgs') + parsing_dir = os.path.join(base_dir, 'parsing') + gt_imgs_dir = os.path.join(base_dir, 'gt_imgs') + torso_imgs_dir = os.path.join(base_dir, 'torso_imgs') + mask_imgs_dir = os.path.join(base_dir, 'face_mask') + flow_dir = os.path.join(base_dir, 'flow_result') + + + os.makedirs(ori_imgs_dir, exist_ok=True) + os.makedirs(parsing_dir, exist_ok=True) + os.makedirs(gt_imgs_dir, exist_ok=True) + os.makedirs(torso_imgs_dir, exist_ok=True) + os.makedirs(mask_imgs_dir, exist_ok=True) + os.makedirs(flow_dir, exist_ok=True) + + + # extract audio + if opt.task == -1 or opt.task == 1: + extract_audio(opt.path, wav_path) + extract_audio_features(wav_path, mode=opt.asr) + + # extract images + if opt.task == -1 or opt.task == 2: + extract_images(opt.path, ori_imgs_dir) + + # face parsing + if opt.task == -1 or opt.task == 3: + extract_semantics(ori_imgs_dir, parsing_dir) + + # extract bg + if opt.task == -1 or opt.task == 4: + extract_background(base_dir, ori_imgs_dir) + + # extract torso images and gt_images + if opt.task == -1 or opt.task == 5: + extract_torso_and_gt(base_dir, ori_imgs_dir) + + # extract face landmarks + if opt.task == -1 or opt.task == 6: + extract_landmarks(ori_imgs_dir) + + # face tracking + if opt.task == -1 or opt.task == 7: + face_tracking(ori_imgs_dir) + + # extract flow & pose optimization + if opt.task == -1 or opt.task == 8: + extract_flow(base_dir, ori_imgs_dir, mask_imgs_dir, flow_dir) + + # extract blendshape + if opt.task == -1 or opt.task == 9: + extract_blendshape(base_dir) + + # save transforms.json + if opt.task == -1 or opt.task == 10: + save_transforms(base_dir, ori_imgs_dir) + diff --git a/demo/short_demo.mp4 b/demo/short_demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..39b4bc374b5e04bbae12ad87c4720f1c27d9166e Binary files /dev/null and b/demo/short_demo.mp4 differ diff --git a/demo/test.wav b/demo/test.wav new file mode 100644 index 0000000000000000000000000000000000000000..24d48941c9e8ed5f93f8394728dccb1d230fe15a Binary files /dev/null and b/demo/test.wav differ diff --git a/freqencoder/__init__.py b/freqencoder/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..69ec49cf6e87b396bfe9730fe7580097c0670a6c --- /dev/null +++ b/freqencoder/__init__.py @@ -0,0 +1 @@ +from .freq import FreqEncoder \ No newline at end of file diff --git a/freqencoder/backend.py b/freqencoder/backend.py new file mode 100644 index 0000000000000000000000000000000000000000..3bd9131a779582dcd5261ed3789911ea29a0353c --- /dev/null +++ b/freqencoder/backend.py @@ -0,0 +1,41 @@ +import os +from torch.utils.cpp_extension import load + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', + '-use_fast_math' +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +_backend = load(name='_freqencoder', + extra_cflags=c_flags, + extra_cuda_cflags=nvcc_flags, + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'freqencoder.cu', + 'bindings.cpp', + ]], + ) + +__all__ = ['_backend'] \ No newline at end of file diff --git a/freqencoder/freq.py b/freqencoder/freq.py new file mode 100644 index 0000000000000000000000000000000000000000..5cba1e660f339ffde62b6b2aac6013d6e6795f0d --- /dev/null +++ b/freqencoder/freq.py @@ -0,0 +1,77 @@ +import numpy as np + +import torch +import torch.nn as nn +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.cuda.amp import custom_bwd, custom_fwd + +try: + import _freqencoder as _backend +except ImportError: + from .backend import _backend + + +class _freq_encoder(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # force float32 for better precision + def forward(ctx, inputs, degree, output_dim): + # inputs: [B, input_dim], float + # RETURN: [B, F], float + + if not inputs.is_cuda: inputs = inputs.cuda() + inputs = inputs.contiguous() + + B, input_dim = inputs.shape # batch size, coord dim + + outputs = torch.empty(B, output_dim, dtype=inputs.dtype, device=inputs.device) + + _backend.freq_encode_forward(inputs, B, input_dim, degree, output_dim, outputs) + + ctx.save_for_backward(inputs, outputs) + ctx.dims = [B, input_dim, degree, output_dim] + + return outputs + + @staticmethod + #@once_differentiable + @custom_bwd + def backward(ctx, grad): + # grad: [B, C * C] + + grad = grad.contiguous() + inputs, outputs = ctx.saved_tensors + B, input_dim, degree, output_dim = ctx.dims + + grad_inputs = torch.zeros_like(inputs) + _backend.freq_encode_backward(grad, outputs, B, input_dim, degree, output_dim, grad_inputs) + + return grad_inputs, None, None + + +freq_encode = _freq_encoder.apply + + +class FreqEncoder(nn.Module): + def __init__(self, input_dim=3, degree=4): + super().__init__() + + self.input_dim = input_dim + self.degree = degree + self.output_dim = input_dim + input_dim * 2 * degree + + def __repr__(self): + return f"FreqEncoder: input_dim={self.input_dim} degree={self.degree} output_dim={self.output_dim}" + + def forward(self, inputs, **kwargs): + # inputs: [..., input_dim] + # return: [..., ] + + prefix_shape = list(inputs.shape[:-1]) + inputs = inputs.reshape(-1, self.input_dim) + + outputs = freq_encode(inputs, self.degree, self.output_dim) + + outputs = outputs.reshape(prefix_shape + [self.output_dim]) + + return outputs \ No newline at end of file diff --git a/freqencoder/setup.py b/freqencoder/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..3eb4af77cee88d99f5930e60d3e5301a2d94a056 --- /dev/null +++ b/freqencoder/setup.py @@ -0,0 +1,51 @@ +import os +from setuptools import setup +from torch.utils.cpp_extension import BuildExtension, CUDAExtension + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', + '-use_fast_math' +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +setup( + name='freqencoder', # package name, import this to use python API + ext_modules=[ + CUDAExtension( + name='_freqencoder', # extension name, import this to use CUDA API + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'freqencoder.cu', + 'bindings.cpp', + ]], + extra_compile_args={ + 'cxx': c_flags, + 'nvcc': nvcc_flags, + } + ), + ], + cmdclass={ + 'build_ext': BuildExtension, + } +) \ No newline at end of file diff --git a/freqencoder/src/bindings.cpp b/freqencoder/src/bindings.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bb5f285a97d9ff6426add0f9e55c7781fbd313e6 --- /dev/null +++ b/freqencoder/src/bindings.cpp @@ -0,0 +1,8 @@ +#include + +#include "freqencoder.h" + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("freq_encode_forward", &freq_encode_forward, "freq encode forward (CUDA)"); + m.def("freq_encode_backward", &freq_encode_backward, "freq encode backward (CUDA)"); +} \ No newline at end of file diff --git a/freqencoder/src/freqencoder.cu b/freqencoder/src/freqencoder.cu new file mode 100644 index 0000000000000000000000000000000000000000..de378840597504689b10b7834d20b6e316a8b2d0 --- /dev/null +++ b/freqencoder/src/freqencoder.cu @@ -0,0 +1,129 @@ +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include + + +#define CHECK_CUDA(x) TORCH_CHECK(x.device().is_cuda(), #x " must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be a contiguous tensor") +#define CHECK_IS_INT(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Int, #x " must be an int tensor") +#define CHECK_IS_FLOATING(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Float || x.scalar_type() == at::ScalarType::Half || x.scalar_type() == at::ScalarType::Double, #x " must be a floating tensor") + +inline constexpr __device__ float PI() { return 3.141592653589793f; } + +template +__host__ __device__ T div_round_up(T val, T divisor) { + return (val + divisor - 1) / divisor; +} + +// inputs: [B, D] +// outputs: [B, C], C = D + D * deg * 2 +__global__ void kernel_freq( + const float * __restrict__ inputs, + uint32_t B, uint32_t D, uint32_t deg, uint32_t C, + float * outputs +) { + // parallel on per-element + const uint32_t t = threadIdx.x + blockIdx.x * blockDim.x; + if (t >= B * C) return; + + // get index + const uint32_t b = t / C; + const uint32_t c = t - b * C; // t % C; + + // locate + inputs += b * D; + outputs += t; + + // write self + if (c < D) { + outputs[0] = inputs[c]; + // write freq + } else { + const uint32_t col = c / D - 1; + const uint32_t d = c % D; + const uint32_t freq = col / 2; + const float phase_shift = (col % 2) * (PI() / 2); + outputs[0] = __sinf(scalbnf(inputs[d], freq) + phase_shift); + } +} + +// grad: [B, C], C = D + D * deg * 2 +// outputs: [B, C] +// grad_inputs: [B, D] +__global__ void kernel_freq_backward( + const float * __restrict__ grad, + const float * __restrict__ outputs, + uint32_t B, uint32_t D, uint32_t deg, uint32_t C, + float * grad_inputs +) { + // parallel on per-element + const uint32_t t = threadIdx.x + blockIdx.x * blockDim.x; + if (t >= B * D) return; + + const uint32_t b = t / D; + const uint32_t d = t - b * D; // t % D; + + // locate + grad += b * C; + outputs += b * C; + grad_inputs += t; + + // register + float result = grad[d]; + grad += D; + outputs += D; + + for (uint32_t f = 0; f < deg; f++) { + result += scalbnf(1.0f, f) * (grad[d] * outputs[D + d] - grad[D + d] * outputs[d]); + grad += 2 * D; + outputs += 2 * D; + } + + // write + grad_inputs[0] = result; +} + + +void freq_encode_forward(at::Tensor inputs, const uint32_t B, const uint32_t D, const uint32_t deg, const uint32_t C, at::Tensor outputs) { + CHECK_CUDA(inputs); + CHECK_CUDA(outputs); + + CHECK_CONTIGUOUS(inputs); + CHECK_CONTIGUOUS(outputs); + + CHECK_IS_FLOATING(inputs); + CHECK_IS_FLOATING(outputs); + + static constexpr uint32_t N_THREADS = 128; + + kernel_freq<<>>(inputs.data_ptr(), B, D, deg, C, outputs.data_ptr()); +} + + +void freq_encode_backward(at::Tensor grad, at::Tensor outputs, const uint32_t B, const uint32_t D, const uint32_t deg, const uint32_t C, at::Tensor grad_inputs) { + CHECK_CUDA(grad); + CHECK_CUDA(outputs); + CHECK_CUDA(grad_inputs); + + CHECK_CONTIGUOUS(grad); + CHECK_CONTIGUOUS(outputs); + CHECK_CONTIGUOUS(grad_inputs); + + CHECK_IS_FLOATING(grad); + CHECK_IS_FLOATING(outputs); + CHECK_IS_FLOATING(grad_inputs); + + static constexpr uint32_t N_THREADS = 128; + + kernel_freq_backward<<>>(grad.data_ptr(), outputs.data_ptr(), B, D, deg, C, grad_inputs.data_ptr()); +} \ No newline at end of file diff --git a/freqencoder/src/freqencoder.h b/freqencoder/src/freqencoder.h new file mode 100644 index 0000000000000000000000000000000000000000..34f28c79469b0ba639c742bf8697ca0515563b1d --- /dev/null +++ b/freqencoder/src/freqencoder.h @@ -0,0 +1,10 @@ +# pragma once + +#include +#include + +// _backend.freq_encode_forward(inputs, B, input_dim, degree, output_dim, outputs) +void freq_encode_forward(at::Tensor inputs, const uint32_t B, const uint32_t D, const uint32_t deg, const uint32_t C, at::Tensor outputs); + +// _backend.freq_encode_backward(grad, outputs, B, input_dim, degree, output_dim, grad_inputs) +void freq_encode_backward(at::Tensor grad, at::Tensor outputs, const uint32_t B, const uint32_t D, const uint32_t deg, const uint32_t C, at::Tensor grad_inputs); \ No newline at end of file diff --git a/gridencoder/__init__.py b/gridencoder/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..f1476cef5314e0918b963d1ac64ee0613a7743d5 --- /dev/null +++ b/gridencoder/__init__.py @@ -0,0 +1 @@ +from .grid import GridEncoder \ No newline at end of file diff --git a/gridencoder/backend.py b/gridencoder/backend.py new file mode 100644 index 0000000000000000000000000000000000000000..d4aa494c24c0b486f324f6cb0137a2e1fae19033 --- /dev/null +++ b/gridencoder/backend.py @@ -0,0 +1,40 @@ +import os +from torch.utils.cpp_extension import load + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14', '-finput-charset=UTF-8'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17', '/finput-charset=UTF-8'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +_backend = load(name='_grid_encoder', + extra_cflags=c_flags, + extra_cuda_cflags=nvcc_flags, + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'gridencoder.cu', + 'bindings.cpp', + ]], + ) + +__all__ = ['_backend'] \ No newline at end of file diff --git a/gridencoder/grid.py b/gridencoder/grid.py new file mode 100644 index 0000000000000000000000000000000000000000..3bb4d80a8bf58779b1fd2272242d2ff7ef1a0c6b --- /dev/null +++ b/gridencoder/grid.py @@ -0,0 +1,155 @@ +import numpy as np + +import torch +import torch.nn as nn +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.cuda.amp import custom_bwd, custom_fwd + +try: + import _gridencoder as _backend +except ImportError: + from .backend import _backend + +_gridtype_to_id = { + 'hash': 0, + 'tiled': 1, +} + +class _grid_encode(Function): + @staticmethod + @custom_fwd + def forward(ctx, inputs, embeddings, offsets, per_level_scale, base_resolution, calc_grad_inputs=False, gridtype=0, align_corners=False): + # inputs: [B, D], float in [0, 1] + # embeddings: [sO, C], float + # offsets: [L + 1], int + # RETURN: [B, F], float + + inputs = inputs.float().contiguous() + + B, D = inputs.shape # batch size, coord dim + L = offsets.shape[0] - 1 # level + C = embeddings.shape[1] # embedding dim for each level + S = np.log2(per_level_scale) # resolution multiplier at each level, apply log2 for later CUDA exp2f + H = base_resolution # base resolution + + # manually handle autocast (only use half precision embeddings, inputs must be float for enough precision) + # if C % 2 != 0, force float, since half for atomicAdd is very slow. + if torch.is_autocast_enabled() and C % 2 == 0: + embeddings = embeddings.to(torch.half) + + # L first, optimize cache for cuda kernel, but needs an extra permute later + outputs = torch.empty(L, B, C, device=inputs.device, dtype=embeddings.dtype) + + if calc_grad_inputs: + dy_dx = torch.empty(B, L * D * C, device=inputs.device, dtype=embeddings.dtype) + else: + dy_dx = None + + _backend.grid_encode_forward(inputs, embeddings, offsets, outputs, B, D, C, L, S, H, dy_dx, gridtype, align_corners) + + # permute back to [B, L * C] + outputs = outputs.permute(1, 0, 2).reshape(B, L * C) + + ctx.save_for_backward(inputs, embeddings, offsets, dy_dx) + ctx.dims = [B, D, C, L, S, H, gridtype] + ctx.align_corners = align_corners + + return outputs + + @staticmethod + #@once_differentiable + @custom_bwd + def backward(ctx, grad): + + inputs, embeddings, offsets, dy_dx = ctx.saved_tensors + B, D, C, L, S, H, gridtype = ctx.dims + align_corners = ctx.align_corners + + # grad: [B, L * C] --> [L, B, C] + grad = grad.view(B, L, C).permute(1, 0, 2).contiguous() + + grad_embeddings = torch.zeros_like(embeddings) + + if dy_dx is not None: + grad_inputs = torch.zeros_like(inputs, dtype=embeddings.dtype) + else: + grad_inputs = None + + _backend.grid_encode_backward(grad, inputs, embeddings, offsets, grad_embeddings, B, D, C, L, S, H, dy_dx, grad_inputs, gridtype, align_corners) + + if dy_dx is not None: + grad_inputs = grad_inputs.to(inputs.dtype) + + return grad_inputs, grad_embeddings, None, None, None, None, None, None + + + +grid_encode = _grid_encode.apply + + +class GridEncoder(nn.Module): + def __init__(self, input_dim=3, num_levels=16, level_dim=2, per_level_scale=2, base_resolution=16, log2_hashmap_size=19, desired_resolution=None, gridtype='hash', align_corners=False): + super().__init__() + + # the finest resolution desired at the last level, if provided, overridee per_level_scale + if desired_resolution is not None: + per_level_scale = np.exp2(np.log2(desired_resolution / base_resolution) / (num_levels - 1)) + + self.input_dim = input_dim # coord dims, 2 or 3 + self.num_levels = num_levels # num levels, each level multiply resolution by 2 + self.level_dim = level_dim # encode channels per level + self.per_level_scale = per_level_scale # multiply resolution by this scale at each level. + self.log2_hashmap_size = log2_hashmap_size + self.base_resolution = base_resolution + self.output_dim = num_levels * level_dim + self.gridtype = gridtype + self.gridtype_id = _gridtype_to_id[gridtype] # "tiled" or "hash" + self.align_corners = align_corners + + # allocate parameters + offsets = [] + offset = 0 + self.max_params = 2 ** log2_hashmap_size + for i in range(num_levels): + resolution = int(np.ceil(base_resolution * per_level_scale ** i)) + params_in_level = min(self.max_params, (resolution if align_corners else resolution + 1) ** input_dim) # limit max number + params_in_level = int(np.ceil(params_in_level / 8) * 8) # make divisible + offsets.append(offset) + offset += params_in_level + # print(resolution, params_in_level) + offsets.append(offset) + offsets = torch.from_numpy(np.array(offsets, dtype=np.int32)) + self.register_buffer('offsets', offsets) + + self.n_params = offsets[-1] * level_dim + + # parameters + self.embeddings = nn.Parameter(torch.empty(offset, level_dim)) + + self.reset_parameters() + + def reset_parameters(self): + std = 1e-4 + self.embeddings.data.uniform_(-std, std) + + def __repr__(self): + return f"GridEncoder: input_dim={self.input_dim} num_levels={self.num_levels} level_dim={self.level_dim} resolution={self.base_resolution} -> {int(round(self.base_resolution * self.per_level_scale ** (self.num_levels - 1)))} per_level_scale={self.per_level_scale:.4f} params={tuple(self.embeddings.shape)} gridtype={self.gridtype} align_corners={self.align_corners}" + + def forward(self, inputs, bound=1): + # inputs: [..., input_dim], normalized real world positions in [-bound, bound] + # return: [..., num_levels * level_dim] + + inputs = (inputs + bound) / (2 * bound) # map to [0, 1] + + #print('inputs', inputs.shape, inputs.dtype, inputs.min().item(), inputs.max().item()) + + prefix_shape = list(inputs.shape[:-1]) + inputs = inputs.view(-1, self.input_dim) + + outputs = grid_encode(inputs, self.embeddings, self.offsets, self.per_level_scale, self.base_resolution, inputs.requires_grad, self.gridtype_id, self.align_corners) + outputs = outputs.view(prefix_shape + [self.output_dim]) + + #print('outputs', outputs.shape, outputs.dtype, outputs.min().item(), outputs.max().item()) + + return outputs \ No newline at end of file diff --git a/gridencoder/setup.py b/gridencoder/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..714bf1cad7880fe25dca319414748c15e86cc48e --- /dev/null +++ b/gridencoder/setup.py @@ -0,0 +1,50 @@ +import os +from setuptools import setup +from torch.utils.cpp_extension import BuildExtension, CUDAExtension + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +setup( + name='gridencoder', # package name, import this to use python API + ext_modules=[ + CUDAExtension( + name='_gridencoder', # extension name, import this to use CUDA API + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'gridencoder.cu', + 'bindings.cpp', + ]], + extra_compile_args={ + 'cxx': c_flags, + 'nvcc': nvcc_flags, + } + ), + ], + cmdclass={ + 'build_ext': BuildExtension, + } +) \ No newline at end of file diff --git a/gridencoder/src/bindings.cpp b/gridencoder/src/bindings.cpp new file mode 100644 index 0000000000000000000000000000000000000000..afa6f64fd7d7d1efc0380e279aad3ae3ca66c36f --- /dev/null +++ b/gridencoder/src/bindings.cpp @@ -0,0 +1,8 @@ +#include + +#include "gridencoder.h" + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("grid_encode_forward", &grid_encode_forward, "grid_encode_forward (CUDA)"); + m.def("grid_encode_backward", &grid_encode_backward, "grid_encode_backward (CUDA)"); +} \ No newline at end of file diff --git a/gridencoder/src/gridencoder.cu b/gridencoder/src/gridencoder.cu new file mode 100644 index 0000000000000000000000000000000000000000..d410d7f0909142baf06e4afb41678aa057586f69 --- /dev/null +++ b/gridencoder/src/gridencoder.cu @@ -0,0 +1,479 @@ +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + + +#define CHECK_CUDA(x) TORCH_CHECK(x.device().is_cuda(), #x " must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be a contiguous tensor") +#define CHECK_IS_INT(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Int, #x " must be an int tensor") +#define CHECK_IS_FLOATING(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Float || x.scalar_type() == at::ScalarType::Half || x.scalar_type() == at::ScalarType::Double, #x " must be a floating tensor") + + +// just for compatability of half precision in AT_DISPATCH_FLOATING_TYPES_AND_HALF... +static inline __device__ at::Half atomicAdd(at::Half *address, at::Half val) { + // requires CUDA >= 10 and ARCH >= 70 + // this is very slow compared to float or __half2, and never used. + //return atomicAdd(reinterpret_cast<__half*>(address), val); +} + + +template +static inline __host__ __device__ T div_round_up(T val, T divisor) { + return (val + divisor - 1) / divisor; +} + + +template +__device__ uint32_t fast_hash(const uint32_t pos_grid[D]) { + static_assert(D <= 7, "fast_hash can only hash up to 7 dimensions."); + + // While 1 is technically not a good prime for hashing (or a prime at all), it helps memory coherence + // and is sufficient for our use case of obtaining a uniformly colliding index from high-dimensional + // coordinates. + constexpr uint32_t primes[7] = { 1, 2654435761, 805459861, 3674653429, 2097192037, 1434869437, 2165219737 }; + + uint32_t result = 0; + #pragma unroll + for (uint32_t i = 0; i < D; ++i) { + result ^= pos_grid[i] * primes[i]; + } + + return result; +} + + +template +__device__ uint32_t get_grid_index(const uint32_t gridtype, const bool align_corners, const uint32_t ch, const uint32_t hashmap_size, const uint32_t resolution, const uint32_t pos_grid[D]) { + uint32_t stride = 1; + uint32_t index = 0; + + #pragma unroll + for (uint32_t d = 0; d < D && stride <= hashmap_size; d++) { + index += pos_grid[d] * stride; + stride *= align_corners ? resolution: (resolution + 1); + } + + // NOTE: for NeRF, the hash is in fact not necessary. Check https://github.com/NVlabs/instant-ngp/issues/97. + // gridtype: 0 == hash, 1 == tiled + if (gridtype == 0 && stride > hashmap_size) { + index = fast_hash(pos_grid); + } + + return (index % hashmap_size) * C + ch; +} + + +template +__global__ void kernel_grid( + const float * __restrict__ inputs, + const scalar_t * __restrict__ grid, + const int * __restrict__ offsets, + scalar_t * __restrict__ outputs, + const uint32_t B, const uint32_t L, const float S, const uint32_t H, + scalar_t * __restrict__ dy_dx, + const uint32_t gridtype, + const bool align_corners +) { + const uint32_t b = blockIdx.x * blockDim.x + threadIdx.x; + + if (b >= B) return; + + const uint32_t level = blockIdx.y; + + // locate + grid += (uint32_t)offsets[level] * C; + inputs += b * D; + outputs += level * B * C + b * C; + + // check input range (should be in [0, 1]) + bool flag_oob = false; + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + if (inputs[d] < 0 || inputs[d] > 1) { + flag_oob = true; + } + } + // if input out of bound, just set output to 0 + if (flag_oob) { + #pragma unroll + for (uint32_t ch = 0; ch < C; ch++) { + outputs[ch] = 0; + } + if (dy_dx) { + dy_dx += b * D * L * C + level * D * C; // B L D C + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + #pragma unroll + for (uint32_t ch = 0; ch < C; ch++) { + dy_dx[d * C + ch] = 0; + } + } + } + return; + } + + const uint32_t hashmap_size = offsets[level + 1] - offsets[level]; + const float scale = exp2f(level * S) * H - 1.0f; + const uint32_t resolution = (uint32_t)ceil(scale) + 1; + + // calculate coordinate + float pos[D]; + uint32_t pos_grid[D]; + + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + pos[d] = inputs[d] * scale + (align_corners ? 0.0f : 0.5f); + pos_grid[d] = floorf(pos[d]); + pos[d] -= (float)pos_grid[d]; + } + + //printf("[b=%d, l=%d] pos=(%f, %f)+(%d, %d)\n", b, level, pos[0], pos[1], pos_grid[0], pos_grid[1]); + + // interpolate + scalar_t results[C] = {0}; // temp results in register + + #pragma unroll + for (uint32_t idx = 0; idx < (1 << D); idx++) { + float w = 1; + uint32_t pos_grid_local[D]; + + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + if ((idx & (1 << d)) == 0) { + w *= 1 - pos[d]; + pos_grid_local[d] = pos_grid[d]; + } else { + w *= pos[d]; + pos_grid_local[d] = pos_grid[d] + 1; + } + } + + uint32_t index = get_grid_index(gridtype, align_corners, 0, hashmap_size, resolution, pos_grid_local); + + // writing to register (fast) + #pragma unroll + for (uint32_t ch = 0; ch < C; ch++) { + results[ch] += w * grid[index + ch]; + } + + //printf("[b=%d, l=%d] int %d, idx %d, w %f, val %f\n", b, level, idx, index, w, grid[index]); + } + + // writing to global memory (slow) + #pragma unroll + for (uint32_t ch = 0; ch < C; ch++) { + outputs[ch] = results[ch]; + } + + // prepare dy_dx + // differentiable (soft) indexing: https://discuss.pytorch.org/t/differentiable-indexing/17647/9 + if (dy_dx) { + + dy_dx += b * D * L * C + level * D * C; // B L D C + + #pragma unroll + for (uint32_t gd = 0; gd < D; gd++) { + + scalar_t results_grad[C] = {0}; + + #pragma unroll + for (uint32_t idx = 0; idx < (1 << (D - 1)); idx++) { + float w = scale; + uint32_t pos_grid_local[D]; + + #pragma unroll + for (uint32_t nd = 0; nd < D - 1; nd++) { + const uint32_t d = (nd >= gd) ? (nd + 1) : nd; + + if ((idx & (1 << nd)) == 0) { + w *= 1 - pos[d]; + pos_grid_local[d] = pos_grid[d]; + } else { + w *= pos[d]; + pos_grid_local[d] = pos_grid[d] + 1; + } + } + + pos_grid_local[gd] = pos_grid[gd]; + uint32_t index_left = get_grid_index(gridtype, align_corners, 0, hashmap_size, resolution, pos_grid_local); + pos_grid_local[gd] = pos_grid[gd] + 1; + uint32_t index_right = get_grid_index(gridtype, align_corners, 0, hashmap_size, resolution, pos_grid_local); + + #pragma unroll + for (uint32_t ch = 0; ch < C; ch++) { + results_grad[ch] += w * (grid[index_right + ch] - grid[index_left + ch]); + } + } + + #pragma unroll + for (uint32_t ch = 0; ch < C; ch++) { + dy_dx[gd * C + ch] = results_grad[ch]; + } + } + } +} + + +template +__global__ void kernel_grid_backward( + const scalar_t * __restrict__ grad, + const float * __restrict__ inputs, + const scalar_t * __restrict__ grid, + const int * __restrict__ offsets, + scalar_t * __restrict__ grad_grid, + const uint32_t B, const uint32_t L, const float S, const uint32_t H, + const uint32_t gridtype, + const bool align_corners +) { + const uint32_t b = (blockIdx.x * blockDim.x + threadIdx.x) * N_C / C; + if (b >= B) return; + + const uint32_t level = blockIdx.y; + const uint32_t ch = (blockIdx.x * blockDim.x + threadIdx.x) * N_C - b * C; + + // locate + grad_grid += offsets[level] * C; + inputs += b * D; + grad += level * B * C + b * C + ch; // L, B, C + + const uint32_t hashmap_size = offsets[level + 1] - offsets[level]; + const float scale = exp2f(level * S) * H - 1.0f; + const uint32_t resolution = (uint32_t)ceil(scale) + 1; + + // check input range (should be in [0, 1]) + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + if (inputs[d] < 0 || inputs[d] > 1) { + return; // grad is init as 0, so we simply return. + } + } + + // calculate coordinate + float pos[D]; + uint32_t pos_grid[D]; + + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + pos[d] = inputs[d] * scale + (align_corners ? 0.0f : 0.5f); + pos_grid[d] = floorf(pos[d]); + pos[d] -= (float)pos_grid[d]; + } + + scalar_t grad_cur[N_C] = {0}; // fetch to register + #pragma unroll + for (uint32_t c = 0; c < N_C; c++) { + grad_cur[c] = grad[c]; + } + + // interpolate + #pragma unroll + for (uint32_t idx = 0; idx < (1 << D); idx++) { + float w = 1; + uint32_t pos_grid_local[D]; + + #pragma unroll + for (uint32_t d = 0; d < D; d++) { + if ((idx & (1 << d)) == 0) { + w *= 1 - pos[d]; + pos_grid_local[d] = pos_grid[d]; + } else { + w *= pos[d]; + pos_grid_local[d] = pos_grid[d] + 1; + } + } + + uint32_t index = get_grid_index(gridtype, align_corners, ch, hashmap_size, resolution, pos_grid_local); + + // atomicAdd for __half is slow (especially for large values), so we use __half2 if N_C % 2 == 0 + // TODO: use float which is better than __half, if N_C % 2 != 0 + if (std::is_same::value && N_C % 2 == 0) { + #pragma unroll + for (uint32_t c = 0; c < N_C; c += 2) { + // process two __half at once (by interpreting as a __half2) + __half2 v = {(__half)(w * grad_cur[c]), (__half)(w * grad_cur[c + 1])}; + atomicAdd((__half2*)&grad_grid[index + c], v); + } + // float, or __half when N_C % 2 != 0 (which means C == 1) + } else { + #pragma unroll + for (uint32_t c = 0; c < N_C; c++) { + atomicAdd(&grad_grid[index + c], w * grad_cur[c]); + } + } + } +} + + +template +__global__ void kernel_input_backward( + const scalar_t * __restrict__ grad, + const scalar_t * __restrict__ dy_dx, + scalar_t * __restrict__ grad_inputs, + uint32_t B, uint32_t L +) { + const uint32_t t = threadIdx.x + blockIdx.x * blockDim.x; + if (t >= B * D) return; + + const uint32_t b = t / D; + const uint32_t d = t - b * D; + + dy_dx += b * L * D * C; + + scalar_t result = 0; + + # pragma unroll + for (int l = 0; l < L; l++) { + # pragma unroll + for (int ch = 0; ch < C; ch++) { + result += grad[l * B * C + b * C + ch] * dy_dx[l * D * C + d * C + ch]; + } + } + + grad_inputs[t] = result; +} + + +template +void kernel_grid_wrapper(const float *inputs, const scalar_t *embeddings, const int *offsets, scalar_t *outputs, const uint32_t B, const uint32_t C, const uint32_t L, const float S, const uint32_t H, scalar_t *dy_dx, const uint32_t gridtype, const bool align_corners) { + static constexpr uint32_t N_THREAD = 512; + const dim3 blocks_hashgrid = { div_round_up(B, N_THREAD), L, 1 }; + switch (C) { + case 1: kernel_grid<<>>(inputs, embeddings, offsets, outputs, B, L, S, H, dy_dx, gridtype, align_corners); break; + case 2: kernel_grid<<>>(inputs, embeddings, offsets, outputs, B, L, S, H, dy_dx, gridtype, align_corners); break; + case 4: kernel_grid<<>>(inputs, embeddings, offsets, outputs, B, L, S, H, dy_dx, gridtype, align_corners); break; + case 8: kernel_grid<<>>(inputs, embeddings, offsets, outputs, B, L, S, H, dy_dx, gridtype, align_corners); break; + default: throw std::runtime_error{"GridEncoding: C must be 1, 2, 4, or 8."}; + } +} + +// inputs: [B, D], float, in [0, 1] +// embeddings: [sO, C], float +// offsets: [L + 1], uint32_t +// outputs: [L, B, C], float (L first, so only one level of hashmap needs to fit into cache at a time.) +// H: base resolution +// dy_dx: [B, L * D * C] +template +void grid_encode_forward_cuda(const float *inputs, const scalar_t *embeddings, const int *offsets, scalar_t *outputs, const uint32_t B, const uint32_t D, const uint32_t C, const uint32_t L, const float S, const uint32_t H, scalar_t *dy_dx, const uint32_t gridtype, const bool align_corners) { + switch (D) { + case 1: kernel_grid_wrapper(inputs, embeddings, offsets, outputs, B, C, L, S, H, dy_dx, gridtype, align_corners); break; + case 2: kernel_grid_wrapper(inputs, embeddings, offsets, outputs, B, C, L, S, H, dy_dx, gridtype, align_corners); break; + case 3: kernel_grid_wrapper(inputs, embeddings, offsets, outputs, B, C, L, S, H, dy_dx, gridtype, align_corners); break; + case 4: kernel_grid_wrapper(inputs, embeddings, offsets, outputs, B, C, L, S, H, dy_dx, gridtype, align_corners); break; + case 5: kernel_grid_wrapper(inputs, embeddings, offsets, outputs, B, C, L, S, H, dy_dx, gridtype, align_corners); break; + default: throw std::runtime_error{"GridEncoding: D must be 1, 2, 3, 4, or 5"}; + } + +} + +template +void kernel_grid_backward_wrapper(const scalar_t *grad, const float *inputs, const scalar_t *embeddings, const int *offsets, scalar_t *grad_embeddings, const uint32_t B, const uint32_t C, const uint32_t L, const float S, const uint32_t H, scalar_t *dy_dx, scalar_t *grad_inputs, const uint32_t gridtype, const bool align_corners) { + static constexpr uint32_t N_THREAD = 256; + const uint32_t N_C = std::min(2u, C); // n_features_per_thread + const dim3 blocks_hashgrid = { div_round_up(B * C / N_C, N_THREAD), L, 1 }; + switch (C) { + case 1: + kernel_grid_backward<<>>(grad, inputs, embeddings, offsets, grad_embeddings, B, L, S, H, gridtype, align_corners); + if (dy_dx) kernel_input_backward<<>>(grad, dy_dx, grad_inputs, B, L); + break; + case 2: + kernel_grid_backward<<>>(grad, inputs, embeddings, offsets, grad_embeddings, B, L, S, H, gridtype, align_corners); + if (dy_dx) kernel_input_backward<<>>(grad, dy_dx, grad_inputs, B, L); + break; + case 4: + kernel_grid_backward<<>>(grad, inputs, embeddings, offsets, grad_embeddings, B, L, S, H, gridtype, align_corners); + if (dy_dx) kernel_input_backward<<>>(grad, dy_dx, grad_inputs, B, L); + break; + case 8: + kernel_grid_backward<<>>(grad, inputs, embeddings, offsets, grad_embeddings, B, L, S, H, gridtype, align_corners); + if (dy_dx) kernel_input_backward<<>>(grad, dy_dx, grad_inputs, B, L); + break; + default: throw std::runtime_error{"GridEncoding: C must be 1, 2, 4, or 8."}; + } +} + + +// grad: [L, B, C], float +// inputs: [B, D], float, in [0, 1] +// embeddings: [sO, C], float +// offsets: [L + 1], uint32_t +// grad_embeddings: [sO, C] +// H: base resolution +template +void grid_encode_backward_cuda(const scalar_t *grad, const float *inputs, const scalar_t *embeddings, const int *offsets, scalar_t *grad_embeddings, const uint32_t B, const uint32_t D, const uint32_t C, const uint32_t L, const float S, const uint32_t H, scalar_t *dy_dx, scalar_t *grad_inputs, const uint32_t gridtype, const bool align_corners) { + switch (D) { + case 1: kernel_grid_backward_wrapper(grad, inputs, embeddings, offsets, grad_embeddings, B, C, L, S, H, dy_dx, grad_inputs, gridtype, align_corners); break; + case 2: kernel_grid_backward_wrapper(grad, inputs, embeddings, offsets, grad_embeddings, B, C, L, S, H, dy_dx, grad_inputs, gridtype, align_corners); break; + case 3: kernel_grid_backward_wrapper(grad, inputs, embeddings, offsets, grad_embeddings, B, C, L, S, H, dy_dx, grad_inputs, gridtype, align_corners); break; + case 4: kernel_grid_backward_wrapper(grad, inputs, embeddings, offsets, grad_embeddings, B, C, L, S, H, dy_dx, grad_inputs, gridtype, align_corners); break; + case 5: kernel_grid_backward_wrapper(grad, inputs, embeddings, offsets, grad_embeddings, B, C, L, S, H, dy_dx, grad_inputs, gridtype, align_corners); break; + default: throw std::runtime_error{"GridEncoding: D must be 1, 2, 3, 4, or 5"}; + } +} + + + +void grid_encode_forward(const at::Tensor inputs, const at::Tensor embeddings, const at::Tensor offsets, at::Tensor outputs, const uint32_t B, const uint32_t D, const uint32_t C, const uint32_t L, const float S, const uint32_t H, at::optional dy_dx, const uint32_t gridtype, const bool align_corners) { + CHECK_CUDA(inputs); + CHECK_CUDA(embeddings); + CHECK_CUDA(offsets); + CHECK_CUDA(outputs); + // CHECK_CUDA(dy_dx); + + CHECK_CONTIGUOUS(inputs); + CHECK_CONTIGUOUS(embeddings); + CHECK_CONTIGUOUS(offsets); + CHECK_CONTIGUOUS(outputs); + // CHECK_CONTIGUOUS(dy_dx); + + CHECK_IS_FLOATING(inputs); + CHECK_IS_FLOATING(embeddings); + CHECK_IS_INT(offsets); + CHECK_IS_FLOATING(outputs); + // CHECK_IS_FLOATING(dy_dx); + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + embeddings.scalar_type(), "grid_encode_forward", ([&] { + grid_encode_forward_cuda(inputs.data_ptr(), embeddings.data_ptr(), offsets.data_ptr(), outputs.data_ptr(), B, D, C, L, S, H, dy_dx.has_value() ? dy_dx.value().data_ptr() : nullptr, gridtype, align_corners); + })); +} + +void grid_encode_backward(const at::Tensor grad, const at::Tensor inputs, const at::Tensor embeddings, const at::Tensor offsets, at::Tensor grad_embeddings, const uint32_t B, const uint32_t D, const uint32_t C, const uint32_t L, const float S, const uint32_t H, const at::optional dy_dx, at::optional grad_inputs, const uint32_t gridtype, const bool align_corners) { + CHECK_CUDA(grad); + CHECK_CUDA(inputs); + CHECK_CUDA(embeddings); + CHECK_CUDA(offsets); + CHECK_CUDA(grad_embeddings); + // CHECK_CUDA(dy_dx); + // CHECK_CUDA(grad_inputs); + + CHECK_CONTIGUOUS(grad); + CHECK_CONTIGUOUS(inputs); + CHECK_CONTIGUOUS(embeddings); + CHECK_CONTIGUOUS(offsets); + CHECK_CONTIGUOUS(grad_embeddings); + // CHECK_CONTIGUOUS(dy_dx); + // CHECK_CONTIGUOUS(grad_inputs); + + CHECK_IS_FLOATING(grad); + CHECK_IS_FLOATING(inputs); + CHECK_IS_FLOATING(embeddings); + CHECK_IS_INT(offsets); + CHECK_IS_FLOATING(grad_embeddings); + // CHECK_IS_FLOATING(dy_dx); + // CHECK_IS_FLOATING(grad_inputs); + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad.scalar_type(), "grid_encode_backward", ([&] { + grid_encode_backward_cuda(grad.data_ptr(), inputs.data_ptr(), embeddings.data_ptr(), offsets.data_ptr(), grad_embeddings.data_ptr(), B, D, C, L, S, H, dy_dx.has_value() ? dy_dx.value().data_ptr() : nullptr, grad_inputs.has_value() ? grad_inputs.value().data_ptr() : nullptr, gridtype, align_corners); + })); + +} diff --git a/gridencoder/src/gridencoder.h b/gridencoder/src/gridencoder.h new file mode 100644 index 0000000000000000000000000000000000000000..0415b59ff9fbf15fcadf964e14b153c94d64beff --- /dev/null +++ b/gridencoder/src/gridencoder.h @@ -0,0 +1,15 @@ +#ifndef _HASH_ENCODE_H +#define _HASH_ENCODE_H + +#include +#include + +// inputs: [B, D], float, in [0, 1] +// embeddings: [sO, C], float +// offsets: [L + 1], uint32_t +// outputs: [B, L * C], float +// H: base resolution +void grid_encode_forward(const at::Tensor inputs, const at::Tensor embeddings, const at::Tensor offsets, at::Tensor outputs, const uint32_t B, const uint32_t D, const uint32_t C, const uint32_t L, const float S, const uint32_t H, at::optional dy_dx, const uint32_t gridtype, const bool align_corners); +void grid_encode_backward(const at::Tensor grad, const at::Tensor inputs, const at::Tensor embeddings, const at::Tensor offsets, at::Tensor grad_embeddings, const uint32_t B, const uint32_t D, const uint32_t C, const uint32_t L, const float S, const uint32_t H, const at::optional dy_dx, at::optional grad_inputs, const uint32_t gridtype, const bool align_corners); + +#endif \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000000000000000000000000000000000000..f19837657240b4a9ef974d0a2df9a0829f723361 --- /dev/null +++ b/main.py @@ -0,0 +1,261 @@ +import argparse + +from nerf_triplane.provider import NeRFDataset +from nerf_triplane.utils import * +from nerf_triplane.network import NeRFNetwork + +# torch.autograd.set_detect_anomaly(True) +# Close tf32 features. Fix low numerical accuracy on rtx30xx gpu. +try: + torch.backends.cuda.matmul.allow_tf32 = False + torch.backends.cudnn.allow_tf32 = False +except AttributeError as e: + print('Info. This pytorch version is not support with tf32.') + +if __name__ == '__main__': + + parser = argparse.ArgumentParser() + parser.add_argument('path', type=str) + parser.add_argument('-O', action='store_true', help="equals --fp16 --cuda_ray --exp_eye") + parser.add_argument('--test', action='store_true', help="test mode (load model and test dataset)") + parser.add_argument('--test_train', action='store_true', help="test mode (load model and train dataset)") + parser.add_argument('--data_range', type=int, nargs='*', default=[0, -1], help="data range to use") + parser.add_argument('--workspace', type=str, default='workspace') + parser.add_argument('--seed', type=int, default=0) + + ### training options + parser.add_argument('--iters', type=int, default=200000, help="training iters") + parser.add_argument('--lr', type=float, default=1e-2, help="initial learning rate") + parser.add_argument('--lr_net', type=float, default=1e-3, help="initial learning rate") + parser.add_argument('--ckpt', type=str, default='latest') + parser.add_argument('--num_rays', type=int, default=4096 * 16, help="num rays sampled per image for each training step") + parser.add_argument('--cuda_ray', action='store_true', help="use CUDA raymarching instead of pytorch") + parser.add_argument('--max_steps', type=int, default=16, help="max num steps sampled per ray (only valid when using --cuda_ray)") + parser.add_argument('--num_steps', type=int, default=16, help="num steps sampled per ray (only valid when NOT using --cuda_ray)") + parser.add_argument('--upsample_steps', type=int, default=0, help="num steps up-sampled per ray (only valid when NOT using --cuda_ray)") + parser.add_argument('--update_extra_interval', type=int, default=16, help="iter interval to update extra status (only valid when using --cuda_ray)") + parser.add_argument('--max_ray_batch', type=int, default=4096, help="batch size of rays at inference to avoid OOM (only valid when NOT using --cuda_ray)") + + ### loss set + parser.add_argument('--warmup_step', type=int, default=10000, help="warm up steps") + parser.add_argument('--amb_aud_loss', type=int, default=1, help="use ambient aud loss") + parser.add_argument('--amb_eye_loss', type=int, default=1, help="use ambient eye loss") + parser.add_argument('--unc_loss', type=int, default=1, help="use uncertainty loss") + parser.add_argument('--lambda_amb', type=float, default=1e-4, help="lambda for ambient loss") + parser.add_argument('--pyramid_loss', type=int, default=0, help="use perceptual loss") + + ### network backbone options + parser.add_argument('--fp16', action='store_true', help="use amp mixed precision training") + + parser.add_argument('--bg_img', type=str, default='', help="background image") + parser.add_argument('--fbg', action='store_true', help="frame-wise bg") + parser.add_argument('--exp_eye', action='store_true', help="explicitly control the eyes") + parser.add_argument('--fix_eye', type=float, default=-1, help="fixed eye area, negative to disable, set to 0-0.3 for a reasonable eye") + parser.add_argument('--smooth_eye', action='store_true', help="smooth the eye area sequence") + parser.add_argument('--bs_area', type=str, default="upper", help="upper or eye") + parser.add_argument('--au45', action='store_true', help="use openface au45") + parser.add_argument('--torso_shrink', type=float, default=0.8, help="shrink bg coords to allow more flexibility in deform") + + ### dataset options + parser.add_argument('--color_space', type=str, default='srgb', help="Color space, supports (linear, srgb)") + parser.add_argument('--preload', type=int, default=0, help="0 means load data from disk on-the-fly, 1 means preload to CPU, 2 means GPU.") + # (the default value is for the fox dataset) + parser.add_argument('--bound', type=float, default=1, help="assume the scene is bounded in box[-bound, bound]^3, if > 1, will invoke adaptive ray marching.") + parser.add_argument('--scale', type=float, default=4, help="scale camera location into box[-bound, bound]^3") + parser.add_argument('--offset', type=float, nargs='*', default=[0, 0, 0], help="offset of camera location") + parser.add_argument('--dt_gamma', type=float, default=1/256, help="dt_gamma (>=0) for adaptive ray marching. set to 0 to disable, >0 to accelerate rendering (but usually with worse quality)") + parser.add_argument('--min_near', type=float, default=0.05, help="minimum near distance for camera") + parser.add_argument('--density_thresh', type=float, default=10, help="threshold for density grid to be occupied (sigma)") + parser.add_argument('--density_thresh_torso', type=float, default=0.01, help="threshold for density grid to be occupied (alpha)") + parser.add_argument('--patch_size', type=int, default=1, help="[experimental] render patches in training, so as to apply LPIPS loss. 1 means disabled, use [64, 32, 16] to enable") + + parser.add_argument('--init_lips', action='store_true', help="init lips region") + parser.add_argument('--finetune_lips', action='store_true', help="use LPIPS and landmarks to fine tune lips region") + parser.add_argument('--smooth_lips', action='store_true', help="smooth the enc_a in a exponential decay way...") + + parser.add_argument('--torso', action='store_true', help="fix head and train torso") + parser.add_argument('--head_ckpt', type=str, default='', help="head model") + + ### GUI options + parser.add_argument('--gui', action='store_true', help="start a GUI") + parser.add_argument('--W', type=int, default=450, help="GUI width") + parser.add_argument('--H', type=int, default=450, help="GUI height") + parser.add_argument('--radius', type=float, default=3.35, help="default GUI camera radius from center") + parser.add_argument('--fovy', type=float, default=21.24, help="default GUI camera fovy") + parser.add_argument('--max_spp', type=int, default=1, help="GUI rendering max sample per pixel") + + ### else + parser.add_argument('--att', type=int, default=2, help="audio attention mode (0 = turn off, 1 = left-direction, 2 = bi-direction)") + parser.add_argument('--aud', type=str, default='', help="audio source (empty will load the default, else should be a path to a npy file)") + parser.add_argument('--emb', action='store_true', help="use audio class + embedding instead of logits") + parser.add_argument('--portrait', action='store_true', help="only render face") + parser.add_argument('--ind_dim', type=int, default=4, help="individual code dim, 0 to turn off") + parser.add_argument('--ind_num', type=int, default=20000, help="number of individual codes, should be larger than training dataset size") + + parser.add_argument('--ind_dim_torso', type=int, default=8, help="individual code dim, 0 to turn off") + + parser.add_argument('--amb_dim', type=int, default=2, help="ambient dimension") + parser.add_argument('--part', action='store_true', help="use partial training data (1/10)") + parser.add_argument('--part2', action='store_true', help="use partial training data (first 15s)") + + parser.add_argument('--train_camera', action='store_true', help="optimize camera pose") + parser.add_argument('--smooth_path', action='store_true', help="brute-force smooth camera pose trajectory with a window size") + parser.add_argument('--smooth_path_window', type=int, default=7, help="smoothing window size") + + # asr + parser.add_argument('--asr', action='store_true', help="load asr for real-time app") + parser.add_argument('--asr_wav', type=str, default='', help="load the wav and use as input") + parser.add_argument('--asr_play', action='store_true', help="play out the audio") + + parser.add_argument('--asr_model', type=str, default='deepspeech') + + parser.add_argument('--asr_save_feats', action='store_true') + # audio FPS + parser.add_argument('--fps', type=int, default=50) + # sliding window left-middle-right length (unit: 20ms) + parser.add_argument('-l', type=int, default=10) + parser.add_argument('-m', type=int, default=50) + parser.add_argument('-r', type=int, default=10) + + opt = parser.parse_args() + + if opt.O: + opt.fp16 = True + opt.exp_eye = True + + if opt.test and False: + opt.smooth_path = True + opt.smooth_eye = True + opt.smooth_lips = True + + opt.cuda_ray = True + # assert opt.cuda_ray, "Only support CUDA ray mode." + + if opt.patch_size > 1: + # assert opt.patch_size > 16, "patch_size should > 16 to run LPIPS loss." + assert opt.num_rays % (opt.patch_size ** 2) == 0, "patch_size ** 2 should be dividable by num_rays." + + # if opt.finetune_lips: + # # do not update density grid in finetune stage + # opt.update_extra_interval = 1e9 + + print(opt) + + seed_everything(opt.seed) + + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + model = NeRFNetwork(opt) + + # manually load state dict for head + if opt.torso and opt.head_ckpt != '': + + model_dict = torch.load(opt.head_ckpt, map_location='cpu')['model'] + + missing_keys, unexpected_keys = model.load_state_dict(model_dict, strict=False) + + if len(missing_keys) > 0: + print(f"[WARN] missing keys: {missing_keys}") + if len(unexpected_keys) > 0: + print(f"[WARN] unexpected keys: {unexpected_keys}") + + # freeze these keys + for k, v in model.named_parameters(): + if k in model_dict: + print(f'[INFO] freeze {k}, {v.shape}') + v.requires_grad = False + + + # print(model) + + # criterion = torch.nn.MSELoss(reduction='none') + criterion = torch.nn.L1Loss(reduction='none') + + + if opt.test: + + if opt.gui: + metrics = [] # use no metric in GUI for faster initialization... + else: + # metrics = [PSNRMeter(), LPIPSMeter(device=device)] + metrics = [PSNRMeter(), LPIPSMeter(device=device), LMDMeter(backend='fan')] + + trainer = Trainer('ngp', opt, model, device=device, workspace=opt.workspace, criterion=criterion, fp16=opt.fp16, metrics=metrics, use_checkpoint=opt.ckpt) + + if opt.test_train: + test_set = NeRFDataset(opt, device=device, type='train') + # a manual fix to test on the training dataset + test_set.training = False + test_set.num_rays = -1 + test_loader = test_set.dataloader() + else: + test_loader = NeRFDataset(opt, device=device, type='test').dataloader() + + + # temp fix: for update_extra_states + model.aud_features = test_loader._data.auds + model.eye_areas = test_loader._data.eye_area + + if opt.gui: + from nerf_triplane.gui import NeRFGUI + # we still need test_loader to provide audio features for testing. + with NeRFGUI(opt, trainer, test_loader) as gui: + gui.render() + + else: + ### test and save video (fast) + trainer.test(test_loader) + + ### evaluate metrics (slow) + if test_loader.has_gt: + trainer.evaluate(test_loader) + + + + else: + + optimizer = lambda model: torch.optim.AdamW(model.get_params(opt.lr, opt.lr_net), betas=(0, 0.99), eps=1e-8) + + train_loader = NeRFDataset(opt, device=device, type='train').dataloader() + + assert len(train_loader) < opt.ind_num, f"[ERROR] dataset too many frames: {len(train_loader)}, please increase --ind_num to this number!" + + # temp fix: for update_extra_states + model.aud_features = train_loader._data.auds + model.eye_area = train_loader._data.eye_area + model.poses = train_loader._data.poses + + # decay to 0.1 * init_lr at last iter step + if opt.finetune_lips: + scheduler = lambda optimizer: optim.lr_scheduler.LambdaLR(optimizer, lambda iter: 0.05 ** (iter / opt.iters)) + else: + scheduler = lambda optimizer: optim.lr_scheduler.LambdaLR(optimizer, lambda iter: 0.5 ** (iter / opt.iters)) + + metrics = [PSNRMeter(), LPIPSMeter(device=device),LMDMeter(backend='fan')] + + eval_interval = max(1, int(5000 / len(train_loader))) + trainer = Trainer('ngp', opt, model, device=device, workspace=opt.workspace, optimizer=optimizer, criterion=criterion, ema_decay=0.95, fp16=opt.fp16, lr_scheduler=scheduler, scheduler_update_every_step=True, metrics=metrics, use_checkpoint=opt.ckpt, eval_interval=eval_interval) + with open(os.path.join(opt.workspace, 'opt.txt'), 'a') as f: + f.write(str(opt)) + if opt.gui: + with NeRFGUI(opt, trainer, train_loader) as gui: + gui.render() + + else: + valid_loader = NeRFDataset(opt, device=device, type='val', downscale=1).dataloader() + + max_epochs = np.ceil(opt.iters / len(train_loader)).astype(np.int32) + print(f'[INFO] max_epoch = {max_epochs}') + trainer.train(train_loader, valid_loader, max_epochs) + + # free some mem + del train_loader, valid_loader + torch.cuda.empty_cache() + + # also test + test_loader = NeRFDataset(opt, device=device, type='test').dataloader() + + if test_loader.has_gt: + trainer.evaluate(test_loader) # blender has gt, so evaluate it. + + trainer.test(test_loader) diff --git a/nerf_triplane/asr.py b/nerf_triplane/asr.py new file mode 100644 index 0000000000000000000000000000000000000000..b0bd0476ea33ed9bf0a73e9d09fc569dae58ddbb --- /dev/null +++ b/nerf_triplane/asr.py @@ -0,0 +1,419 @@ +import time +import numpy as np +import torch +import torch.nn.functional as F +from transformers import AutoModelForCTC, AutoProcessor + +import pyaudio +import soundfile as sf +import resampy + +from queue import Queue +from threading import Thread, Event + + +def _read_frame(stream, exit_event, queue, chunk): + + while True: + if exit_event.is_set(): + print(f'[INFO] read frame thread ends') + break + frame = stream.read(chunk, exception_on_overflow=False) + frame = np.frombuffer(frame, dtype=np.int16).astype(np.float32) / 32767 # [chunk] + queue.put(frame) + +def _play_frame(stream, exit_event, queue, chunk): + + while True: + if exit_event.is_set(): + print(f'[INFO] play frame thread ends') + break + frame = queue.get() + frame = (frame * 32767).astype(np.int16).tobytes() + stream.write(frame, chunk) + +class ASR: + def __init__(self, opt): + + self.opt = opt + + self.play = opt.asr_play + + self.device = 'cuda' if torch.cuda.is_available() else 'cpu' + self.fps = opt.fps # 20 ms per frame + self.sample_rate = 16000 + self.chunk = self.sample_rate // self.fps # 320 samples per chunk (20ms * 16000 / 1000) + self.mode = 'live' if opt.asr_wav == '' else 'file' + + if 'esperanto' in self.opt.asr_model: + self.audio_dim = 44 + elif 'deepspeech' in self.opt.asr_model: + self.audio_dim = 29 + else: + self.audio_dim = 32 + + # prepare context cache + # each segment is (stride_left + ctx + stride_right) * 20ms, latency should be (ctx + stride_right) * 20ms + self.context_size = opt.m + self.stride_left_size = opt.l + self.stride_right_size = opt.r + self.text = '[START]\n' + self.terminated = False + self.frames = [] + + # pad left frames + if self.stride_left_size > 0: + self.frames.extend([np.zeros(self.chunk, dtype=np.float32)] * self.stride_left_size) + + + self.exit_event = Event() + self.audio_instance = pyaudio.PyAudio() + + # create input stream + if self.mode == 'file': + self.file_stream = self.create_file_stream() + else: + # start a background process to read frames + self.input_stream = self.audio_instance.open(format=pyaudio.paInt16, channels=1, rate=self.sample_rate, input=True, output=False, frames_per_buffer=self.chunk) + self.queue = Queue() + self.process_read_frame = Thread(target=_read_frame, args=(self.input_stream, self.exit_event, self.queue, self.chunk)) + + # play out the audio too...? + if self.play: + self.output_stream = self.audio_instance.open(format=pyaudio.paInt16, channels=1, rate=self.sample_rate, input=False, output=True, frames_per_buffer=self.chunk) + self.output_queue = Queue() + self.process_play_frame = Thread(target=_play_frame, args=(self.output_stream, self.exit_event, self.output_queue, self.chunk)) + + # current location of audio + self.idx = 0 + + # create wav2vec model + print(f'[INFO] loading ASR model {self.opt.asr_model}...') + self.processor = AutoProcessor.from_pretrained(opt.asr_model) + self.model = AutoModelForCTC.from_pretrained(opt.asr_model).to(self.device) + + # prepare to save logits + if self.opt.asr_save_feats: + self.all_feats = [] + + # the extracted features + # use a loop queue to efficiently record endless features: [f--t---][-------][-------] + self.feat_buffer_size = 4 + self.feat_buffer_idx = 0 + self.feat_queue = torch.zeros(self.feat_buffer_size * self.context_size, self.audio_dim, dtype=torch.float32, device=self.device) + + # TODO: hard coded 16 and 8 window size... + self.front = self.feat_buffer_size * self.context_size - 8 # fake padding + self.tail = 8 + # attention window... + self.att_feats = [torch.zeros(self.audio_dim, 16, dtype=torch.float32, device=self.device)] * 4 # 4 zero padding... + + # warm up steps needed: mid + right + window_size + attention_size + self.warm_up_steps = self.context_size + self.stride_right_size + 8 + 2 * 3 + + self.listening = False + self.playing = False + + def listen(self): + # start + if self.mode == 'live' and not self.listening: + print(f'[INFO] starting read frame thread...') + self.process_read_frame.start() + self.listening = True + + if self.play and not self.playing: + print(f'[INFO] starting play frame thread...') + self.process_play_frame.start() + self.playing = True + + def stop(self): + + self.exit_event.set() + + if self.play: + self.output_stream.stop_stream() + self.output_stream.close() + if self.playing: + self.process_play_frame.join() + self.playing = False + + if self.mode == 'live': + self.input_stream.stop_stream() + self.input_stream.close() + if self.listening: + self.process_read_frame.join() + self.listening = False + + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + + self.stop() + + if self.mode == 'live': + # live mode: also print the result text. + self.text += '\n[END]' + print(self.text) + + def get_next_feat(self): + # return a [1/8, 16] window, for the next input to nerf side. + + while len(self.att_feats) < 8: + # [------f+++t-----] + if self.front < self.tail: + feat = self.feat_queue[self.front:self.tail] + # [++t-----------f+] + else: + feat = torch.cat([self.feat_queue[self.front:], self.feat_queue[:self.tail]], dim=0) + + self.front = (self.front + 2) % self.feat_queue.shape[0] + self.tail = (self.tail + 2) % self.feat_queue.shape[0] + + # print(self.front, self.tail, feat.shape) + + self.att_feats.append(feat.permute(1, 0)) + + att_feat = torch.stack(self.att_feats, dim=0) # [8, 44, 16] + + # discard old + self.att_feats = self.att_feats[1:] + + return att_feat + + def run_step(self): + + if self.terminated: + return + + # get a frame of audio + frame = self.get_audio_frame() + + # the last frame + if frame is None: + # terminate, but always run the network for the left frames + self.terminated = True + else: + self.frames.append(frame) + # put to output + if self.play: + self.output_queue.put(frame) + # context not enough, do not run network. + if len(self.frames) < self.stride_left_size + self.context_size + self.stride_right_size: + return + + inputs = np.concatenate(self.frames) # [N * chunk] + + # discard the old part to save memory + if not self.terminated: + self.frames = self.frames[-(self.stride_left_size + self.stride_right_size):] + + logits, labels, text = self.frame_to_text(inputs) + feats = logits # better lips-sync than labels + + # save feats + if self.opt.asr_save_feats: + self.all_feats.append(feats) + + # record the feats efficiently.. (no concat, constant memory) + start = self.feat_buffer_idx * self.context_size + end = start + feats.shape[0] + self.feat_queue[start:end] = feats + self.feat_buffer_idx = (self.feat_buffer_idx + 1) % self.feat_buffer_size + + # very naive, just concat the text output. + if text != '': + self.text = self.text + ' ' + text + + # will only run once at ternimation + if self.terminated: + self.text += '\n[END]' + print(self.text) + if self.opt.asr_save_feats: + print(f'[INFO] save all feats for training purpose... ') + feats = torch.cat(self.all_feats, dim=0) # [N, C] + # print('[INFO] before unfold', feats.shape) + window_size = 16 + padding = window_size // 2 + feats = feats.view(-1, self.audio_dim).permute(1, 0).contiguous() # [C, M] + feats = feats.view(1, self.audio_dim, -1, 1) # [1, C, M, 1] + unfold_feats = F.unfold(feats, kernel_size=(window_size, 1), padding=(padding, 0), stride=(2, 1)) # [1, C * window_size, M / 2 + 1] + unfold_feats = unfold_feats.view(self.audio_dim, window_size, -1).permute(2, 1, 0).contiguous() # [C, window_size, M / 2 + 1] --> [M / 2 + 1, window_size, C] + # print('[INFO] after unfold', unfold_feats.shape) + # save to a npy file + if 'esperanto' in self.opt.asr_model: + output_path = self.opt.asr_wav.replace('.wav', '_eo.npy') + else: + output_path = self.opt.asr_wav.replace('.wav', '.npy') + np.save(output_path, unfold_feats.cpu().numpy()) + print(f"[INFO] saved logits to {output_path}") + + def create_file_stream(self): + + stream, sample_rate = sf.read(self.opt.asr_wav) # [T*sample_rate,] float64 + stream = stream.astype(np.float32) + + if stream.ndim > 1: + print(f'[WARN] audio has {stream.shape[1]} channels, only use the first.') + stream = stream[:, 0] + + if sample_rate != self.sample_rate: + print(f'[WARN] audio sample rate is {sample_rate}, resampling into {self.sample_rate}.') + stream = resampy.resample(x=stream, sr_orig=sample_rate, sr_new=self.sample_rate) + + print(f'[INFO] loaded audio stream {self.opt.asr_wav}: {stream.shape}') + + return stream + + + def create_pyaudio_stream(self): + + import pyaudio + + print(f'[INFO] creating live audio stream ...') + + audio = pyaudio.PyAudio() + + # get devices + info = audio.get_host_api_info_by_index(0) + n_devices = info.get('deviceCount') + + for i in range(0, n_devices): + if (audio.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0: + name = audio.get_device_info_by_host_api_device_index(0, i).get('name') + print(f'[INFO] choose audio device {name}, id {i}') + break + + # get stream + stream = audio.open(input_device_index=i, + format=pyaudio.paInt16, + channels=1, + rate=self.sample_rate, + input=True, + frames_per_buffer=self.chunk) + + return audio, stream + + + def get_audio_frame(self): + + if self.mode == 'file': + + if self.idx < self.file_stream.shape[0]: + frame = self.file_stream[self.idx: self.idx + self.chunk] + self.idx = self.idx + self.chunk + return frame + else: + return None + + else: + + frame = self.queue.get() + # print(f'[INFO] get frame {frame.shape}') + + self.idx = self.idx + self.chunk + + return frame + + + def frame_to_text(self, frame): + # frame: [N * 320], N = (context_size + 2 * stride_size) + + inputs = self.processor(frame, sampling_rate=self.sample_rate, return_tensors="pt", padding=True) + + with torch.no_grad(): + result = self.model(inputs.input_values.to(self.device)) + logits = result.logits # [1, N - 1, 32] + + # cut off stride + left = max(0, self.stride_left_size) + right = min(logits.shape[1], logits.shape[1] - self.stride_right_size + 1) # +1 to make sure output is the same length as input. + + # do not cut right if terminated. + if self.terminated: + right = logits.shape[1] + + logits = logits[:, left:right] + + # print(frame.shape, inputs.input_values.shape, logits.shape) + + predicted_ids = torch.argmax(logits, dim=-1) + transcription = self.processor.batch_decode(predicted_ids)[0].lower() + + + # for esperanto + # labels = np.array(['ŭ', '»', 'c', 'ĵ', 'ñ', '”', '„', '“', 'ǔ', 'o', 'ĝ', 'm', 'k', 'd', 'a', 'ŝ', 'z', 'i', '«', '—', '‘', 'ĥ', 'f', 'y', 'h', 'j', '|', 'r', 'u', 'ĉ', 's', '–', 'fi', 'l', 'p', '’', 'g', 'v', 't', 'b', 'n', 'e', '[UNK]', '[PAD]']) + + # labels = np.array([' ', ' ', ' ', '-', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z']) + # print(''.join(labels[predicted_ids[0].detach().cpu().long().numpy()])) + # print(predicted_ids[0]) + # print(transcription) + + return logits[0], predicted_ids[0], transcription # [N,] + + + def run(self): + + self.listen() + + while not self.terminated: + self.run_step() + + def clear_queue(self): + # clear the queue, to reduce potential latency... + print(f'[INFO] clear queue') + if self.mode == 'live': + self.queue.queue.clear() + if self.play: + self.output_queue.queue.clear() + + def warm_up(self): + + self.listen() + + print(f'[INFO] warm up ASR live model, expected latency = {self.warm_up_steps / self.fps:.6f}s') + t = time.time() + for _ in range(self.warm_up_steps): + self.run_step() + if torch.cuda.is_available(): + torch.cuda.synchronize() + t = time.time() - t + print(f'[INFO] warm-up done, actual latency = {t:.6f}s') + + self.clear_queue() + + + + +if __name__ == '__main__': + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument('--wav', type=str, default='') + parser.add_argument('--play', action='store_true', help="play out the audio") + + parser.add_argument('--model', type=str, default='cpierse/wav2vec2-large-xlsr-53-esperanto') + # parser.add_argument('--model', type=str, default='facebook/wav2vec2-large-960h-lv60-self') + + parser.add_argument('--save_feats', action='store_true') + # audio FPS + parser.add_argument('--fps', type=int, default=50) + # sliding window left-middle-right length. + parser.add_argument('-l', type=int, default=10) + parser.add_argument('-m', type=int, default=50) + parser.add_argument('-r', type=int, default=10) + + opt = parser.parse_args() + + # fix + opt.asr_wav = opt.wav + opt.asr_play = opt.play + opt.asr_model = opt.model + opt.asr_save_feats = opt.save_feats + + if 'deepspeech' in opt.asr_model: + raise ValueError("DeepSpeech features should not use this code to extract...") + + with ASR(opt) as asr: + asr.run() \ No newline at end of file diff --git a/nerf_triplane/checkpoints/audio_visual_encoder.pth b/nerf_triplane/checkpoints/audio_visual_encoder.pth new file mode 100644 index 0000000000000000000000000000000000000000..e6244d8adff47c0b3eaa71c7be0607b77496da53 --- /dev/null +++ b/nerf_triplane/checkpoints/audio_visual_encoder.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f75cdb5556938590c64221f6c47a8d20ab3e368d53c166023eedb12279db8c4 +size 11300706 diff --git a/nerf_triplane/encoding.py b/nerf_triplane/encoding.py new file mode 100644 index 0000000000000000000000000000000000000000..a4c69d3dfa32fc208106f2abbff1499cb96cc7f5 --- /dev/null +++ b/nerf_triplane/encoding.py @@ -0,0 +1,33 @@ +def get_encoder(encoding, input_dim=3, + multires=6, + degree=4, + num_levels=16, level_dim=2, base_resolution=16, log2_hashmap_size=19, desired_resolution=2048, align_corners=False, + **kwargs): + + if encoding == 'None': + return lambda x, **kwargs: x, input_dim + + elif encoding == 'frequency': + from freqencoder import FreqEncoder + encoder = FreqEncoder(input_dim=input_dim, degree=multires) + + elif encoding == 'spherical_harmonics': + from shencoder import SHEncoder + encoder = SHEncoder(input_dim=input_dim, degree=degree) + + elif encoding == 'hashgrid': + from gridencoder import GridEncoder + encoder = GridEncoder(input_dim=input_dim, num_levels=num_levels, level_dim=level_dim, base_resolution=base_resolution, log2_hashmap_size=log2_hashmap_size, desired_resolution=desired_resolution, gridtype='hash', align_corners=align_corners) + + elif encoding == 'tiledgrid': + from gridencoder import GridEncoder + encoder = GridEncoder(input_dim=input_dim, num_levels=num_levels, level_dim=level_dim, base_resolution=base_resolution, log2_hashmap_size=log2_hashmap_size, desired_resolution=desired_resolution, gridtype='tiled', align_corners=align_corners) + + elif encoding == 'ash': + from ashencoder import AshEncoder + encoder = AshEncoder(input_dim=input_dim, output_dim=16, log2_hashmap_size=log2_hashmap_size, resolution=desired_resolution) + + else: + raise NotImplementedError('Unknown encoding mode, choose from [None, frequency, spherical_harmonics, hashgrid, tiledgrid]') + + return encoder, encoder.output_dim \ No newline at end of file diff --git a/nerf_triplane/gui.py b/nerf_triplane/gui.py new file mode 100644 index 0000000000000000000000000000000000000000..b59fd0047cde8b7ba027e8dbe2fc2b4386478ce0 --- /dev/null +++ b/nerf_triplane/gui.py @@ -0,0 +1,562 @@ +import dearpygui.dearpygui as dpg +from scipy.spatial.transform import Rotation as R + +from .utils import * + +from .asr import ASR + + +class OrbitCamera: + def __init__(self, W, H, r=2, fovy=60): + self.W = W + self.H = H + self.radius = r # camera distance from center + self.fovy = fovy # in degree + self.center = np.array([0, 0, 0], dtype=np.float32) # look at this point + self.rot = R.from_matrix([[0, -1, 0], [0, 0, -1], [1, 0, 0]]) # init camera matrix: [[1, 0, 0], [0, -1, 0], [0, 0, 1]] (to suit ngp convention) + self.up = np.array([1, 0, 0], dtype=np.float32) # need to be normalized! + + # pose + @property + def pose(self): + # first move camera to radius + res = np.eye(4, dtype=np.float32) + res[2, 3] -= self.radius + # rotate + rot = np.eye(4, dtype=np.float32) + rot[:3, :3] = self.rot.as_matrix() + res = rot @ res + # translate + res[:3, 3] -= self.center + return res + + def update_pose(self, pose): + # pose: [4, 4] numpy array + # assert self.center is 0 + self.radius = np.linalg.norm(pose[:3, 3]) + T = np.eye(4) + T[2, 3] = -self.radius + rot = pose @ np.linalg.inv(T) + self.rot = R.from_matrix(rot[:3, :3]) + + def update_intrinsics(self, intrinsics): + fl_x, fl_y, cx, cy = intrinsics + self.W = int(cx * 2) + self.H = int(cy * 2) + self.fovy = np.rad2deg(2 * np.arctan2(self.H, 2 * fl_y)) + + # intrinsics + @property + def intrinsics(self): + focal = self.H / (2 * np.tan(np.deg2rad(self.fovy) / 2)) + return np.array([focal, focal, self.W // 2, self.H // 2]) + + def orbit(self, dx, dy): + # rotate along camera up/side axis! + side = self.rot.as_matrix()[:3, 0] # why this is side --> ? # already normalized. + rotvec_x = self.up * np.radians(-0.01 * dx) + rotvec_y = side * np.radians(-0.01 * dy) + self.rot = R.from_rotvec(rotvec_x) * R.from_rotvec(rotvec_y) * self.rot + + def scale(self, delta): + self.radius *= 1.1 ** (-delta) + + def pan(self, dx, dy, dz=0): + # pan in camera coordinate system (careful on the sensitivity!) + self.center += 0.0001 * self.rot.as_matrix()[:3, :3] @ np.array([dx, dy, dz]) + + +class NeRFGUI: + def __init__(self, opt, trainer, data_loader, debug=True): + self.opt = opt # shared with the trainer's opt to support in-place modification of rendering parameters. + self.W = opt.W + self.H = opt.H + self.cam = OrbitCamera(opt.W, opt.H, r=opt.radius, fovy=opt.fovy) + self.debug = debug + self.training = False + self.step = 0 # training step + + self.trainer = trainer + self.data_loader = data_loader + + # override with dataloader's intrinsics + self.W = data_loader._data.W + self.H = data_loader._data.H + self.cam.update_intrinsics(data_loader._data.intrinsics) + + # use dataloader's pose + pose_init = data_loader._data.poses[0] + self.cam.update_pose(pose_init.detach().cpu().numpy()) + + # use dataloader's bg + bg_img = data_loader._data.bg_img #.view(1, -1, 3) + if self.H != bg_img.shape[0] or self.W != bg_img.shape[1]: + bg_img = F.interpolate(bg_img.permute(2, 0, 1).unsqueeze(0).contiguous(), (self.H, self.W), mode='bilinear').squeeze(0).permute(1, 2, 0).contiguous() + self.bg_color = bg_img.view(1, -1, 3) + + # audio features (from dataloader, only used in non-playing mode) + self.audio_features = data_loader._data.auds # [N, 29, 16] + self.audio_idx = 0 + + # control eye + self.eye_area = None if not self.opt.exp_eye else data_loader._data.eye_area.mean().item() + + # playing seq from dataloader, or pause. + self.playing = False + self.loader = iter(data_loader) + + self.render_buffer = np.zeros((self.W, self.H, 3), dtype=np.float32) + self.need_update = True # camera moved, should reset accumulation + self.spp = 1 # sample per pixel + self.mode = 'image' # choose from ['image', 'depth'] + + self.dynamic_resolution = False # assert False! + self.downscale = 1 + self.train_steps = 16 + + self.ind_index = 0 + self.ind_num = trainer.model.individual_codes.shape[0] + + # build asr + if self.opt.asr: + self.asr = ASR(opt) + + dpg.create_context() + self.register_dpg() + self.test_step() + + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.opt.asr: + self.asr.stop() + dpg.destroy_context() + + def train_step(self): + + starter, ender = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + starter.record() + + outputs = self.trainer.train_gui(self.data_loader, step=self.train_steps) + + ender.record() + torch.cuda.synchronize() + t = starter.elapsed_time(ender) + + self.step += self.train_steps + self.need_update = True + + dpg.set_value("_log_train_time", f'{t:.4f}ms ({int(1000/t)} FPS)') + dpg.set_value("_log_train_log", f'step = {self.step: 5d} (+{self.train_steps: 2d}), loss = {outputs["loss"]:.4f}, lr = {outputs["lr"]:.5f}') + + # dynamic train steps + # max allowed train time per-frame is 500 ms + full_t = t / self.train_steps * 16 + train_steps = min(16, max(4, int(16 * 500 / full_t))) + if train_steps > self.train_steps * 1.2 or train_steps < self.train_steps * 0.8: + self.train_steps = train_steps + + def prepare_buffer(self, outputs): + if self.mode == 'image': + return outputs['image'] + else: + return np.expand_dims(outputs['depth'], -1).repeat(3, -1) + + def test_step(self): + + if self.need_update or self.spp < self.opt.max_spp: + + starter, ender = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + starter.record() + + if self.playing: + try: + data = next(self.loader) + except StopIteration: + self.loader = iter(self.data_loader) + data = next(self.loader) + + if self.opt.asr: + # use the live audio stream + data['auds'] = self.asr.get_next_feat() + + outputs = self.trainer.test_gui_with_data(data, self.W, self.H) + + # sync local camera pose + self.cam.update_pose(data['poses_matrix'][0].detach().cpu().numpy()) + + else: + if self.audio_features is not None: + auds = get_audio_features(self.audio_features, self.opt.att, self.audio_idx) + else: + auds = None + outputs = self.trainer.test_gui(self.cam.pose, self.cam.intrinsics, self.W, self.H, auds, self.eye_area, self.ind_index, self.bg_color, self.spp, self.downscale) + + ender.record() + torch.cuda.synchronize() + t = starter.elapsed_time(ender) + + # update dynamic resolution + if self.dynamic_resolution: + # max allowed infer time per-frame is 200 ms + full_t = t / (self.downscale ** 2) + downscale = min(1, max(1/4, math.sqrt(200 / full_t))) + if downscale > self.downscale * 1.2 or downscale < self.downscale * 0.8: + self.downscale = downscale + + if self.need_update: + self.render_buffer = self.prepare_buffer(outputs) + self.spp = 1 + self.need_update = False + else: + self.render_buffer = (self.render_buffer * self.spp + self.prepare_buffer(outputs)) / (self.spp + 1) + self.spp += 1 + + if self.playing: + self.need_update = True + + dpg.set_value("_log_infer_time", f'{t:.4f}ms ({int(1000/t)} FPS)') + dpg.set_value("_log_resolution", f'{int(self.downscale * self.W)}x{int(self.downscale * self.H)}') + dpg.set_value("_log_spp", self.spp) + dpg.set_value("_texture", self.render_buffer) + + + def register_dpg(self): + + ### register texture + + with dpg.texture_registry(show=False): + dpg.add_raw_texture(self.W, self.H, self.render_buffer, format=dpg.mvFormat_Float_rgb, tag="_texture") + + ### register window + + # the rendered image, as the primary window + with dpg.window(tag="_primary_window", width=self.W, height=self.H): + + # add the texture + dpg.add_image("_texture") + + # dpg.set_primary_window("_primary_window", True) + + dpg.show_tool(dpg.mvTool_Metrics) + + # control window + with dpg.window(label="Control", tag="_control_window", width=400, height=300): + + # button theme + with dpg.theme() as theme_button: + with dpg.theme_component(dpg.mvButton): + dpg.add_theme_color(dpg.mvThemeCol_Button, (23, 3, 18)) + dpg.add_theme_color(dpg.mvThemeCol_ButtonHovered, (51, 3, 47)) + dpg.add_theme_color(dpg.mvThemeCol_ButtonActive, (83, 18, 83)) + dpg.add_theme_style(dpg.mvStyleVar_FrameRounding, 5) + dpg.add_theme_style(dpg.mvStyleVar_FramePadding, 3, 3) + + # time + if not self.opt.test: + with dpg.group(horizontal=True): + dpg.add_text("Train time: ") + dpg.add_text("no data", tag="_log_train_time") + + with dpg.group(horizontal=True): + dpg.add_text("Infer time: ") + dpg.add_text("no data", tag="_log_infer_time") + + with dpg.group(horizontal=True): + dpg.add_text("SPP: ") + dpg.add_text("1", tag="_log_spp") + + # train button + if not self.opt.test: + with dpg.collapsing_header(label="Train", default_open=True): + + # train / stop + with dpg.group(horizontal=True): + dpg.add_text("Train: ") + + def callback_train(sender, app_data): + if self.training: + self.training = False + dpg.configure_item("_button_train", label="start") + else: + self.training = True + dpg.configure_item("_button_train", label="stop") + + dpg.add_button(label="start", tag="_button_train", callback=callback_train) + dpg.bind_item_theme("_button_train", theme_button) + + def callback_reset(sender, app_data): + @torch.no_grad() + def weight_reset(m: nn.Module): + reset_parameters = getattr(m, "reset_parameters", None) + if callable(reset_parameters): + m.reset_parameters() + self.trainer.model.apply(fn=weight_reset) + self.trainer.model.reset_extra_state() # for cuda_ray density_grid and step_counter + self.need_update = True + + dpg.add_button(label="reset", tag="_button_reset", callback=callback_reset) + dpg.bind_item_theme("_button_reset", theme_button) + + # save ckpt + with dpg.group(horizontal=True): + dpg.add_text("Checkpoint: ") + + def callback_save(sender, app_data): + self.trainer.save_checkpoint(full=True, best=False) + dpg.set_value("_log_ckpt", "saved " + os.path.basename(self.trainer.stats["checkpoints"][-1])) + self.trainer.epoch += 1 # use epoch to indicate different calls. + + dpg.add_button(label="save", tag="_button_save", callback=callback_save) + dpg.bind_item_theme("_button_save", theme_button) + + dpg.add_text("", tag="_log_ckpt") + + # save mesh + with dpg.group(horizontal=True): + dpg.add_text("Marching Cubes: ") + + def callback_mesh(sender, app_data): + self.trainer.save_mesh(resolution=256, threshold=10) + dpg.set_value("_log_mesh", "saved " + f'{self.trainer.name}_{self.trainer.epoch}.ply') + self.trainer.epoch += 1 # use epoch to indicate different calls. + + dpg.add_button(label="mesh", tag="_button_mesh", callback=callback_mesh) + dpg.bind_item_theme("_button_mesh", theme_button) + + dpg.add_text("", tag="_log_mesh") + + with dpg.group(horizontal=True): + dpg.add_text("", tag="_log_train_log") + + + # rendering options + with dpg.collapsing_header(label="Options", default_open=True): + + # playing + with dpg.group(horizontal=True): + dpg.add_text("Play: ") + + def callback_play(sender, app_data): + + if self.playing: + self.playing = False + dpg.configure_item("_button_play", label="start") + else: + self.playing = True + dpg.configure_item("_button_play", label="stop") + if self.opt.asr: + self.asr.warm_up() + self.need_update = True + + dpg.add_button(label="start", tag="_button_play", callback=callback_play) + dpg.bind_item_theme("_button_play", theme_button) + + # set asr + if self.opt.asr: + + # clear queue button + def callback_clear_queue(sender, app_data): + + self.asr.clear_queue() + self.need_update = True + + dpg.add_button(label="clear", tag="_button_clear_queue", callback=callback_clear_queue) + dpg.bind_item_theme("_button_clear_queue", theme_button) + + # dynamic rendering resolution + with dpg.group(horizontal=True): + + def callback_set_dynamic_resolution(sender, app_data): + if self.dynamic_resolution: + self.dynamic_resolution = False + self.downscale = 1 + else: + self.dynamic_resolution = True + self.need_update = True + + # Disable dynamic resolution for face. + # dpg.add_checkbox(label="dynamic resolution", default_value=self.dynamic_resolution, callback=callback_set_dynamic_resolution) + dpg.add_text(f"{self.W}x{self.H}", tag="_log_resolution") + + # mode combo + def callback_change_mode(sender, app_data): + self.mode = app_data + self.need_update = True + + dpg.add_combo(('image', 'depth'), label='mode', default_value=self.mode, callback=callback_change_mode) + + + # bg_color picker + def callback_change_bg(sender, app_data): + self.bg_color = torch.tensor(app_data[:3], dtype=torch.float32) # only need RGB in [0, 1] + self.need_update = True + + dpg.add_color_edit((255, 255, 255), label="Background Color", width=200, tag="_color_editor", no_alpha=True, callback=callback_change_bg) + + # audio index slider + if not self.opt.asr: + def callback_set_audio_index(sender, app_data): + self.audio_idx = app_data + self.need_update = True + + dpg.add_slider_int(label="Audio", min_value=0, max_value=self.audio_features.shape[0] - 1, format="%d", default_value=self.audio_idx, callback=callback_set_audio_index) + + # ind code index slider + if self.opt.ind_dim > 0: + def callback_set_individual_code(sender, app_data): + self.ind_index = app_data + self.need_update = True + + dpg.add_slider_int(label="Individual", min_value=0, max_value=self.ind_num - 1, format="%d", default_value=self.ind_index, callback=callback_set_individual_code) + + # eye area slider + if self.opt.exp_eye: + def callback_set_eye(sender, app_data): + self.eye_area = app_data + self.need_update = True + + dpg.add_slider_float(label="eye area", min_value=0, max_value=0.5, format="%.2f percent", default_value=self.eye_area, callback=callback_set_eye) + + # fov slider + def callback_set_fovy(sender, app_data): + self.cam.fovy = app_data + self.need_update = True + + dpg.add_slider_int(label="FoV (vertical)", min_value=1, max_value=120, format="%d deg", default_value=self.cam.fovy, callback=callback_set_fovy) + + # dt_gamma slider + def callback_set_dt_gamma(sender, app_data): + self.opt.dt_gamma = app_data + self.need_update = True + + dpg.add_slider_float(label="dt_gamma", min_value=0, max_value=0.1, format="%.5f", default_value=self.opt.dt_gamma, callback=callback_set_dt_gamma) + + # max_steps slider + def callback_set_max_steps(sender, app_data): + self.opt.max_steps = app_data + self.need_update = True + + dpg.add_slider_int(label="max steps", min_value=1, max_value=1024, format="%d", default_value=self.opt.max_steps, callback=callback_set_max_steps) + + # aabb slider + def callback_set_aabb(sender, app_data, user_data): + # user_data is the dimension for aabb (xmin, ymin, zmin, xmax, ymax, zmax) + self.trainer.model.aabb_infer[user_data] = app_data + + # also change train aabb ? [better not...] + #self.trainer.model.aabb_train[user_data] = app_data + + self.need_update = True + + dpg.add_separator() + dpg.add_text("Axis-aligned bounding box:") + + with dpg.group(horizontal=True): + dpg.add_slider_float(label="x", width=150, min_value=-self.opt.bound, max_value=0, format="%.2f", default_value=-self.opt.bound, callback=callback_set_aabb, user_data=0) + dpg.add_slider_float(label="", width=150, min_value=0, max_value=self.opt.bound, format="%.2f", default_value=self.opt.bound, callback=callback_set_aabb, user_data=3) + + with dpg.group(horizontal=True): + dpg.add_slider_float(label="y", width=150, min_value=-self.opt.bound, max_value=0, format="%.2f", default_value=-self.opt.bound, callback=callback_set_aabb, user_data=1) + dpg.add_slider_float(label="", width=150, min_value=0, max_value=self.opt.bound, format="%.2f", default_value=self.opt.bound, callback=callback_set_aabb, user_data=4) + + with dpg.group(horizontal=True): + dpg.add_slider_float(label="z", width=150, min_value=-self.opt.bound, max_value=0, format="%.2f", default_value=-self.opt.bound, callback=callback_set_aabb, user_data=2) + dpg.add_slider_float(label="", width=150, min_value=0, max_value=self.opt.bound, format="%.2f", default_value=self.opt.bound, callback=callback_set_aabb, user_data=5) + + + # debug info + if self.debug: + with dpg.collapsing_header(label="Debug"): + # pose + dpg.add_separator() + dpg.add_text("Camera Pose:") + dpg.add_text(str(self.cam.pose), tag="_log_pose") + + + ### register camera handler + + def callback_camera_drag_rotate(sender, app_data): + + if not dpg.is_item_focused("_primary_window"): + return + + dx = app_data[1] + dy = app_data[2] + + self.cam.orbit(dx, dy) + self.need_update = True + + if self.debug: + dpg.set_value("_log_pose", str(self.cam.pose)) + + + def callback_camera_wheel_scale(sender, app_data): + + if not dpg.is_item_focused("_primary_window"): + return + + delta = app_data + + self.cam.scale(delta) + self.need_update = True + + if self.debug: + dpg.set_value("_log_pose", str(self.cam.pose)) + + + def callback_camera_drag_pan(sender, app_data): + + if not dpg.is_item_focused("_primary_window"): + return + + dx = app_data[1] + dy = app_data[2] + + self.cam.pan(dx, dy) + self.need_update = True + + if self.debug: + dpg.set_value("_log_pose", str(self.cam.pose)) + + + with dpg.handler_registry(): + dpg.add_mouse_drag_handler(button=dpg.mvMouseButton_Left, callback=callback_camera_drag_rotate) + dpg.add_mouse_wheel_handler(callback=callback_camera_wheel_scale) + dpg.add_mouse_drag_handler(button=dpg.mvMouseButton_Middle, callback=callback_camera_drag_pan) + + + dpg.create_viewport(title='SyncTalk', width=1080, height=720, resizable=True) + + ### global theme + with dpg.theme() as theme_no_padding: + with dpg.theme_component(dpg.mvAll): + # set all padding to 0 to avoid scroll bar + dpg.add_theme_style(dpg.mvStyleVar_WindowPadding, 0, 0, category=dpg.mvThemeCat_Core) + dpg.add_theme_style(dpg.mvStyleVar_FramePadding, 0, 0, category=dpg.mvThemeCat_Core) + dpg.add_theme_style(dpg.mvStyleVar_CellPadding, 0, 0, category=dpg.mvThemeCat_Core) + + dpg.bind_item_theme("_primary_window", theme_no_padding) + + dpg.setup_dearpygui() + + #dpg.show_metrics() + + dpg.show_viewport() + + + def render(self): + + while dpg.is_dearpygui_running(): + # update texture every frame + if self.training: + self.train_step() + # audio stream thread... + if self.opt.asr and self.playing: + # run 2 ASR steps (audio is at 50FPS, video is at 25FPS) + for _ in range(2): + self.asr.run_step() + self.test_step() + dpg.render_dearpygui_frame() \ No newline at end of file diff --git a/nerf_triplane/network.py b/nerf_triplane/network.py new file mode 100644 index 0000000000000000000000000000000000000000..493f6ec9090ea832c34cd6e9eb6e249286c1bda5 --- /dev/null +++ b/nerf_triplane/network.py @@ -0,0 +1,440 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .encoding import get_encoder +from .renderer import NeRFRenderer + + +class Conv2d(nn.Module): + def __init__(self, cin, cout, kernel_size, stride, padding, residual=False, leakyReLU=False, *args, **kwargs): + super().__init__(*args, **kwargs) + self.conv_block = nn.Sequential( + nn.Conv2d(cin, cout, kernel_size, stride, padding), + nn.BatchNorm2d(cout) + ) + if leakyReLU: + self.act = nn.LeakyReLU(0.02) + else: + self.act = nn.ReLU() + self.residual = residual + + def forward(self, x): + out = self.conv_block(x) + if self.residual: + out += x + return self.act(out) + + +# Audio feature extractor +class AudioAttNet(nn.Module): + def __init__(self, dim_aud=64, seq_len=8): + super(AudioAttNet, self).__init__() + self.seq_len = seq_len + self.dim_aud = dim_aud + self.attentionConvNet = nn.Sequential( # b x subspace_dim x seq_len + nn.Conv1d(self.dim_aud, 16, kernel_size=3, stride=1, padding=1, bias=True), + nn.LeakyReLU(0.02, True), + nn.Conv1d(16, 8, kernel_size=3, stride=1, padding=1, bias=True), + nn.LeakyReLU(0.02, True), + nn.Conv1d(8, 4, kernel_size=3, stride=1, padding=1, bias=True), + nn.LeakyReLU(0.02, True), + nn.Conv1d(4, 2, kernel_size=3, stride=1, padding=1, bias=True), + nn.LeakyReLU(0.02, True), + nn.Conv1d(2, 1, kernel_size=3, stride=1, padding=1, bias=True), + nn.LeakyReLU(0.02, True) + ) + self.attentionNet = nn.Sequential( + nn.Linear(in_features=self.seq_len, out_features=self.seq_len, bias=True), + nn.Softmax(dim=1) + ) + + def forward(self, x): + # x: [1, seq_len, dim_aud] + y = x.permute(0, 2, 1) # [1, dim_aud, seq_len] + y = self.attentionConvNet(y) + y = self.attentionNet(y.view(1, self.seq_len)).view(1, self.seq_len, 1) + return torch.sum(y * x, dim=1) # [1, dim_aud] + + +class AudioEncoder(nn.Module): + def __init__(self): + super(AudioEncoder, self).__init__() + + self.audio_encoder = nn.Sequential( + Conv2d(1, 32, kernel_size=3, stride=1, padding=1), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(32, 64, kernel_size=3, stride=(3, 1), padding=1), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(64, 128, kernel_size=3, stride=3, padding=1), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(128, 256, kernel_size=3, stride=(3, 2), padding=1), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(256, 512, kernel_size=3, stride=1, padding=0), + Conv2d(512, 512, kernel_size=1, stride=1, padding=0), ) + + def forward(self, x): + out = self.audio_encoder(x) + out = out.squeeze(2).squeeze(2) + + return out + +# Audio feature extractor +class AudioNet(nn.Module): + def __init__(self, dim_in=29, dim_aud=64, win_size=16): + super(AudioNet, self).__init__() + self.win_size = win_size + self.dim_aud = dim_aud + self.encoder_conv = nn.Sequential( # n x 29 x 16 + nn.Conv1d(dim_in, 32, kernel_size=3, stride=2, padding=1, bias=True), # n x 32 x 8 + nn.LeakyReLU(0.02, True), + nn.Conv1d(32, 32, kernel_size=3, stride=2, padding=1, bias=True), # n x 32 x 4 + nn.LeakyReLU(0.02, True), + nn.Conv1d(32, 64, kernel_size=3, stride=2, padding=1, bias=True), # n x 64 x 2 + nn.LeakyReLU(0.02, True), + nn.Conv1d(64, 64, kernel_size=3, stride=2, padding=1, bias=True), # n x 64 x 1 + nn.LeakyReLU(0.02, True), + ) + self.encoder_fc1 = nn.Sequential( + nn.Linear(64, 64), + nn.LeakyReLU(0.02, True), + nn.Linear(64, dim_aud), + ) + + def forward(self, x): + half_w = int(self.win_size/2) + x = x[:, :, 8-half_w:8+half_w] + x = self.encoder_conv(x).squeeze(-1) + x = self.encoder_fc1(x) + return x + + +# Audio feature extractor +class AudioNet_ave(nn.Module): + def __init__(self, dim_in=29, dim_aud=64, win_size=16): + super(AudioNet_ave, self).__init__() + self.win_size = win_size + self.dim_aud = dim_aud + self.encoder_fc1 = nn.Sequential( + nn.Linear(512, 256), + nn.LeakyReLU(0.02, True), + nn.Linear(256, 128), + nn.LeakyReLU(0.02, True), + nn.Linear(128, dim_aud), + ) + def forward(self, x): + # half_w = int(self.win_size/2) + # x = x[:, :, 8-half_w:8+half_w] + # x = self.encoder_conv(x).squeeze(-1) + x = self.encoder_fc1(x).permute(1,0,2).squeeze(0) + return x + +class MLP(nn.Module): + def __init__(self, dim_in, dim_out, dim_hidden, num_layers): + super().__init__() + self.dim_in = dim_in + self.dim_out = dim_out + self.dim_hidden = dim_hidden + self.num_layers = num_layers + + net = [] + for l in range(num_layers): + net.append(nn.Linear(self.dim_in if l == 0 else self.dim_hidden, self.dim_out if l == num_layers - 1 else self.dim_hidden, bias=False)) + + self.net = nn.ModuleList(net) + + def forward(self, x): + for l in range(self.num_layers): + x = self.net[l](x) + if l != self.num_layers - 1: + x = F.relu(x, inplace=True) + # x = F.dropout(x, p=0.1, training=self.training) + + return x + + +class NeRFNetwork(NeRFRenderer): + def __init__(self, + opt, + audio_dim = 32, + # torso net (hard coded for now) + ): + super().__init__(opt) + + # audio embedding + self.emb = self.opt.emb + + if 'esperanto' in self.opt.asr_model: + self.audio_in_dim = 44 + elif 'deepspeech' in self.opt.asr_model: + self.audio_in_dim = 29 + elif 'hubert' in self.opt.asr_model: + self.audio_in_dim = 1024 + else: + self.audio_in_dim = 32 + + if self.emb: + self.embedding = nn.Embedding(self.audio_in_dim, self.audio_in_dim) + + # audio network + self.audio_dim = audio_dim + if self.opt.asr_model == 'ave': + self.audio_net = AudioNet_ave(self.audio_in_dim, self.audio_dim) + else: + self.audio_net = AudioNet(self.audio_in_dim, self.audio_dim) + + self.att = self.opt.att + if self.att > 0: + self.audio_att_net = AudioAttNet(self.audio_dim) + + # DYNAMIC PART + self.num_levels = 12 + self.level_dim = 1 + self.encoder_xy, self.in_dim_xy = get_encoder('hashgrid', input_dim=2, num_levels=self.num_levels, level_dim=self.level_dim, base_resolution=64, log2_hashmap_size=14, desired_resolution=512 * self.bound) + self.encoder_yz, self.in_dim_yz = get_encoder('hashgrid', input_dim=2, num_levels=self.num_levels, level_dim=self.level_dim, base_resolution=64, log2_hashmap_size=14, desired_resolution=512 * self.bound) + self.encoder_xz, self.in_dim_xz = get_encoder('hashgrid', input_dim=2, num_levels=self.num_levels, level_dim=self.level_dim, base_resolution=64, log2_hashmap_size=14, desired_resolution=512 * self.bound) + + self.in_dim = self.in_dim_xy + self.in_dim_yz + self.in_dim_xz + + ## sigma network + self.num_layers = 3 + self.hidden_dim = 64 + self.geo_feat_dim = 64 + if self.opt.au45: + self.eye_att_net = MLP(self.in_dim, 1, 16, 2) + self.eye_dim = 1 if self.exp_eye else 0 + else: + if self.opt.bs_area == "upper": + self.eye_att_net = MLP(self.in_dim, 7, 64, 2) + self.eye_dim = 7 if self.exp_eye else 0 + elif self.opt.bs_area == "single": + self.eye_att_net = MLP(self.in_dim, 4, 64, 2) + self.eye_dim = 4 if self.exp_eye else 0 + elif self.opt.bs_area == "eye": + self.eye_att_net = MLP(self.in_dim, 2, 64, 2) + self.eye_dim = 2 if self.exp_eye else 0 + self.sigma_net = MLP(self.in_dim + self.audio_dim + self.eye_dim, 1 + self.geo_feat_dim, self.hidden_dim, self.num_layers) + ## color network + self.num_layers_color = 2 + self.hidden_dim_color = 64 + self.encoder_dir, self.in_dim_dir = get_encoder('spherical_harmonics') + self.color_net = MLP(self.in_dim_dir + self.geo_feat_dim + self.individual_dim, 3, self.hidden_dim_color, self.num_layers_color) + + self.unc_net = MLP(self.in_dim, 1, 32, 2) + + self.aud_ch_att_net = MLP(self.in_dim, self.audio_dim, 64, 2) + + self.testing = False + + if self.torso: + # torso deform network + self.register_parameter('anchor_points', + nn.Parameter(torch.tensor([[0.01, 0.01, 0.1, 1], [-0.1, -0.1, 0.1, 1], [0.1, -0.1, 0.1, 1]]))) + self.torso_deform_encoder, self.torso_deform_in_dim = get_encoder('frequency', input_dim=2, multires=8) + # self.torso_deform_encoder, self.torso_deform_in_dim = get_encoder('tiledgrid', input_dim=2, num_levels=16, level_dim=1, base_resolution=16, log2_hashmap_size=16, desired_resolution=512) + self.anchor_encoder, self.anchor_in_dim = get_encoder('frequency', input_dim=6, multires=3) + self.torso_deform_net = MLP(self.torso_deform_in_dim + self.anchor_in_dim + self.individual_dim_torso, 2, 32, 3) + + # torso color network + self.torso_encoder, self.torso_in_dim = get_encoder('tiledgrid', input_dim=2, num_levels=16, level_dim=2, base_resolution=16, log2_hashmap_size=16, desired_resolution=2048) + self.torso_net = MLP(self.torso_in_dim + self.torso_deform_in_dim + self.anchor_in_dim + self.individual_dim_torso, 4, 32, 3) + + + def forward_torso(self, x, poses, c=None): + # x: [N, 2] in [-1, 1] + # head poses: [1, 4, 4] + # c: [1, ind_dim], individual code + + # test: shrink x + x = x * self.opt.torso_shrink + + # deformation-based + wrapped_anchor = self.anchor_points[None, ...] @ poses.permute(0, 2, 1).inverse() + wrapped_anchor = (wrapped_anchor[:, :, :2] / wrapped_anchor[:, :, 3, None] / wrapped_anchor[:, :, 2, None]).view(1, -1) + # print(wrapped_anchor) + # enc_pose = self.pose_encoder(poses) + enc_anchor = self.anchor_encoder(wrapped_anchor) + enc_x = self.torso_deform_encoder(x) + + if c is not None: + h = torch.cat([enc_x, enc_anchor.repeat(x.shape[0], 1), c.repeat(x.shape[0], 1)], dim=-1) + else: + h = torch.cat([enc_x, enc_anchor.repeat(x.shape[0], 1)], dim=-1) + + dx = self.torso_deform_net(h) + + x = (x + dx).clamp(-1, 1) + + x = self.torso_encoder(x, bound=1) + + # h = torch.cat([x, h, enc_a.repeat(x.shape[0], 1)], dim=-1) + h = torch.cat([x, h], dim=-1) + + h = self.torso_net(h) + + alpha = torch.sigmoid(h[..., :1])*(1 + 2*0.001) - 0.001 + color = torch.sigmoid(h[..., 1:])*(1 + 2*0.001) - 0.001 + + return alpha, color, dx + + + @staticmethod + @torch.jit.script + def split_xyz(x): + xy, yz, xz = x[:, :-1], x[:, 1:], torch.cat([x[:,:1], x[:,-1:]], dim=-1) + return xy, yz, xz + + + def encode_x(self, xyz, bound): + # x: [N, 3], in [-bound, bound] + N, M = xyz.shape + xy, yz, xz = self.split_xyz(xyz) + feat_xy = self.encoder_xy(xy, bound=bound) + feat_yz = self.encoder_yz(yz, bound=bound) + feat_xz = self.encoder_xz(xz, bound=bound) + + return torch.cat([feat_xy, feat_yz, feat_xz], dim=-1) + + + def encode_audio(self, a): + # a: [1, 29, 16] or [8, 29, 16], audio features from deepspeech + # if emb, a should be: [1, 16] or [8, 16] + + # fix audio traininig + if a is None: return None + + if self.emb: + a = self.embedding(a).transpose(-1, -2).contiguous() # [1/8, 29, 16] + + enc_a = self.audio_net(a) # [8,32] + + if self.att > 0: + enc_a = self.audio_att_net(enc_a.unsqueeze(0)) # [1, 32] + + return enc_a + + + def predict_uncertainty(self, unc_inp): + if self.testing or not self.opt.unc_loss: + unc = torch.zeros_like(unc_inp) + else: + unc = self.unc_net(unc_inp.detach()) + + return unc + + + def forward(self, x, d, enc_a, c, e=None): + # x: [N, 3], in [-bound, bound] + # d: [N, 3], nomalized in [-1, 1] + # enc_a: [1, aud_dim] + # c: [1, ind_dim], individual code + # e: [1, 1], eye feature + enc_x = self.encode_x(x, bound=self.bound) + + sigma_result = self.density(x, enc_a, e, enc_x) + sigma = sigma_result['sigma'] + geo_feat = sigma_result['geo_feat'] + aud_ch_att = sigma_result['ambient_aud'] + eye_att = sigma_result['ambient_eye'] + + # color + enc_d = self.encoder_dir(d) + + if c is not None: + h = torch.cat([enc_d, geo_feat, c.repeat(x.shape[0], 1)], dim=-1) + else: + h = torch.cat([enc_d, geo_feat], dim=-1) + + h_color = self.color_net(h) + color = torch.sigmoid(h_color)*(1 + 2*0.001) - 0.001 + + uncertainty = self.predict_uncertainty(enc_x) + uncertainty = torch.log(1 + torch.exp(uncertainty)) + + return sigma, color, aud_ch_att, eye_att, uncertainty[..., None] + + + def density(self, x, enc_a, e=None, enc_x=None): + # x: [N, 3], in [-bound, bound] + if enc_x is None: + enc_x = self.encode_x(x, bound=self.bound) + + enc_a = enc_a.repeat(enc_x.shape[0], 1) + aud_ch_att = self.aud_ch_att_net(enc_x) + enc_w = enc_a * aud_ch_att + + if e is not None: + # e = self.encoder_eye(e) + # eye_att = torch.sigmoid(self.eye_att_net(enc_x)) + e = e.repeat(enc_x.shape[0], 1) + eye_att = self.eye_att_net(enc_x) + e = e * eye_att + # e = e.repeat(enc_x.shape[0], 1) + h = torch.cat([enc_x, enc_w, e], dim=-1) + else: + h = torch.cat([enc_x, enc_w], dim=-1) + + h = self.sigma_net(h) + + sigma = torch.exp(h[..., 0]) + geo_feat = h[..., 1:] + + return { + 'sigma': sigma, + 'geo_feat': geo_feat, + 'ambient_aud' : aud_ch_att.norm(dim=-1, keepdim=True), + 'ambient_eye' : eye_att.norm(dim=-1, keepdim=True), + } + + + # optimizer utils + def get_params(self, lr, lr_net, wd=0): + + # ONLY train torso + if self.torso: + params = [ + {'params': self.torso_encoder.parameters(), 'lr': lr}, + {'params': self.torso_deform_encoder.parameters(), 'lr': lr, 'weight_decay': wd}, + {'params': self.torso_net.parameters(), 'lr': lr_net, 'weight_decay': wd}, + {'params': self.torso_deform_net.parameters(), 'lr': lr_net, 'weight_decay': wd}, + {'params': self.anchor_points, 'lr': lr_net, 'weight_decay': wd} + ] + + if self.individual_dim_torso > 0: + params.append({'params': self.individual_codes_torso, 'lr': lr_net, 'weight_decay': wd}) + + return params + + params = [ + {'params': self.audio_net.parameters(), 'lr': lr_net, 'weight_decay': wd}, + + {'params': self.encoder_xy.parameters(), 'lr': lr}, + {'params': self.encoder_yz.parameters(), 'lr': lr}, + {'params': self.encoder_xz.parameters(), 'lr': lr}, + # {'params': self.encoder_xyz.parameters(), 'lr': lr}, + + {'params': self.sigma_net.parameters(), 'lr': lr_net, 'weight_decay': wd}, + {'params': self.color_net.parameters(), 'lr': lr_net, 'weight_decay': wd}, + ] + if self.att > 0: + params.append({'params': self.audio_att_net.parameters(), 'lr': lr_net * 5, 'weight_decay': 0.0001}) + if self.emb: + params.append({'params': self.embedding.parameters(), 'lr': lr}) + if self.individual_dim > 0: + params.append({'params': self.individual_codes, 'lr': lr_net, 'weight_decay': wd}) + if self.train_camera: + params.append({'params': self.camera_dT, 'lr': 1e-5, 'weight_decay': 0}) + params.append({'params': self.camera_dR, 'lr': 1e-5, 'weight_decay': 0}) + + params.append({'params': self.aud_ch_att_net.parameters(), 'lr': lr_net, 'weight_decay': wd}) + params.append({'params': self.unc_net.parameters(), 'lr': lr_net, 'weight_decay': wd}) + params.append({'params': self.eye_att_net.parameters(), 'lr': lr_net, 'weight_decay': wd}) + + return params diff --git a/nerf_triplane/provider.py b/nerf_triplane/provider.py new file mode 100644 index 0000000000000000000000000000000000000000..c0e1a7785523d194aa6d132f5433c1f5bcbdd37b --- /dev/null +++ b/nerf_triplane/provider.py @@ -0,0 +1,674 @@ +import os +import cv2 +import glob +import json +import tqdm +import numpy as np +from scipy.spatial.transform import Rotation +from .network import AudioEncoder +import trimesh + +import torch +from torch.utils.data import DataLoader + +from .utils import get_audio_features, get_rays, get_bg_coords, AudDataset + +# ref: https://github.com/NVlabs/instant-ngp/blob/b76004c8cf478880227401ae763be4c02f80b62f/include/neural-graphics-primitives/nerf_loader.h#L50 +def nerf_matrix_to_ngp(pose, scale=0.33, offset=[0, 0, 0]): + new_pose = np.array([ + [pose[1, 0], -pose[1, 1], -pose[1, 2], pose[1, 3] * scale + offset[0]], + [pose[2, 0], -pose[2, 1], -pose[2, 2], pose[2, 3] * scale + offset[1]], + [pose[0, 0], -pose[0, 1], -pose[0, 2], pose[0, 3] * scale + offset[2]], + [0, 0, 0, 1], + ], dtype=np.float32) + return new_pose + + +def smooth_camera_path(poses, kernel_size=5): + # smooth the camera trajectory... + # poses: [N, 4, 4], numpy array + + N = poses.shape[0] + K = kernel_size // 2 + + trans = poses[:, :3, 3].copy() # [N, 3] + rots = poses[:, :3, :3].copy() # [N, 3, 3] + + for i in range(N): + start = max(0, i - K) + end = min(N, i + K + 1) + poses[i, :3, 3] = trans[start:end].mean(0) + poses[i, :3, :3] = Rotation.from_matrix(rots[start:end]).mean().as_matrix() + + return poses + +def polygon_area(x, y): + x_ = x - x.mean() + y_ = y - y.mean() + correction = x_[-1] * y_[0] - y_[-1]* x_[0] + main_area = np.dot(x_[:-1], y_[1:]) - np.dot(y_[:-1], x_[1:]) + return 0.5 * np.abs(main_area + correction) + + +def visualize_poses(poses, size=0.1): + # poses: [B, 4, 4] + + print(f'[INFO] visualize poses: {poses.shape}') + + axes = trimesh.creation.axis(axis_length=4) + box = trimesh.primitives.Box(extents=(2, 2, 2)).as_outline() + box.colors = np.array([[128, 128, 128]] * len(box.entities)) + objects = [axes, box] + + for pose in poses: + # a camera is visualized with 8 line segments. + pos = pose[:3, 3] + a = pos + size * pose[:3, 0] + size * pose[:3, 1] + size * pose[:3, 2] + b = pos - size * pose[:3, 0] + size * pose[:3, 1] + size * pose[:3, 2] + c = pos - size * pose[:3, 0] - size * pose[:3, 1] + size * pose[:3, 2] + d = pos + size * pose[:3, 0] - size * pose[:3, 1] + size * pose[:3, 2] + + dir = (a + b + c + d) / 4 - pos + dir = dir / (np.linalg.norm(dir) + 1e-8) + o = pos + dir * 3 + + segs = np.array([[pos, a], [pos, b], [pos, c], [pos, d], [a, b], [b, c], [c, d], [d, a], [pos, o]]) + segs = trimesh.load_path(segs) + objects.append(segs) + + trimesh.Scene(objects).show() + + +class NeRFDataset: + def __init__(self, opt, device, type='train', downscale=1): + super().__init__() + + self.opt = opt + self.device = device + self.type = type # train, val, test + self.downscale = downscale + self.root_path = opt.path + self.preload = opt.preload # 0 = disk, 1 = cpu, 2 = gpu + self.scale = opt.scale # camera radius scale to make sure camera are inside the bounding box. + self.offset = opt.offset # camera offset + self.bound = opt.bound # bounding box half length, also used as the radius to random sample poses. + self.fp16 = opt.fp16 + + self.start_index = opt.data_range[0] + self.end_index = opt.data_range[1] + + self.training = self.type in ['train', 'all', 'trainval'] + self.num_rays = self.opt.num_rays if self.training else -1 + + # load nerf-compatible format data. + + # load all splits (train/valid/test) + if type == 'all': + transform_paths = glob.glob(os.path.join(self.root_path, '*.json')) + transform = None + for transform_path in transform_paths: + with open(transform_path, 'r') as f: + tmp_transform = json.load(f) + if transform is None: + transform = tmp_transform + else: + transform['frames'].extend(tmp_transform['frames']) + # load train and val split + elif type == 'trainval': + with open(os.path.join(self.root_path, f'transforms_train.json'), 'r') as f: + transform = json.load(f) + with open(os.path.join(self.root_path, f'transforms_val.json'), 'r') as f: + transform_val = json.load(f) + transform['frames'].extend(transform_val['frames']) + # only load one specified split + else: + # no test, use val as test + _split = 'val' if type == 'test' else type + with open(os.path.join(self.root_path, f'transforms_{_split}.json'), 'r') as f: + transform = json.load(f) + + # load image size + if 'h' in transform and 'w' in transform: + self.H = int(transform['h']) // downscale + self.W = int(transform['w']) // downscale + else: + self.H = int(transform['cy']) * 2 // downscale + self.W = int(transform['cx']) * 2 // downscale + + # read images + frames = transform["frames"] + + # use a slice of the dataset + if self.end_index == -1: # abuse... + self.end_index = len(frames) + + frames = frames[self.start_index:self.end_index] + + # use a subset of dataset. + if type == 'train': + if self.opt.part: + frames = frames[::10] # 1/10 frames + elif self.opt.part2: + frames = frames[:375] # first 15s + elif type == 'val': + frames = frames[:100] # first 100 frames for val + + print(f'[INFO] load {len(frames)} {type} frames.') + + # only load pre-calculated aud features when not live-streaming + if not self.opt.asr: + + # empty means the default self-driven extracted features. + if self.opt.aud == '': + if 'esperanto' in self.opt.asr_model: + aud_features = np.load(os.path.join(self.root_path, 'aud_eo.npy')) + elif 'deepspeech' in self.opt.asr_model: + aud_features = np.load(os.path.join(self.root_path, 'aud_ds.npy')) + # elif 'hubert_cn' in self.opt.asr_model: + # aud_features = np.load(os.path.join(self.root_path, 'aud_hu_cn.npy')) + elif 'hubert' in self.opt.asr_model: + aud_features = np.load(os.path.join(self.root_path, 'aud_hu.npy')) + elif self.opt.asr_model == 'ave': + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + model = AudioEncoder().to(device).eval() + ckpt = torch.load('./nerf_triplane/checkpoints/audio_visual_encoder.pth') + model.load_state_dict({f'audio_encoder.{k}': v for k, v in ckpt.items()}) + dataset = AudDataset(os.path.join(self.root_path, 'aud.wav')) + data_loader = DataLoader(dataset, batch_size=64, shuffle=False) + outputs = [] + for mel in data_loader: + mel = mel.to(device) + with torch.no_grad(): + out = model(mel) + outputs.append(out) + outputs = torch.cat(outputs, dim=0).cpu() + first_frame, last_frame = outputs[:1], outputs[-1:] + aud_features = torch.cat([first_frame.repeat(2, 1), outputs, last_frame.repeat(2, 1)], + dim=0).numpy() + # aud_features = np.load(os.path.join(self.root_path, 'aud_ave.npy')) + else: + aud_features = np.load(os.path.join(self.root_path, 'aud.npy')) + # cross-driven extracted features. + else: + if self.opt.asr_model == 'ave': + try: + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + model = AudioEncoder().to(device).eval() + ckpt = torch.load('./nerf_triplane/checkpoints/audio_visual_encoder.pth') + model.load_state_dict({f'audio_encoder.{k}': v for k, v in ckpt.items()}) + dataset = AudDataset(self.opt.aud) + data_loader = DataLoader(dataset, batch_size=64, shuffle=False) + outputs = [] + for mel in data_loader: + mel = mel.to(device) + with torch.no_grad(): + out = model(mel) + outputs.append(out) + outputs = torch.cat(outputs, dim=0).cpu() + first_frame, last_frame = outputs[:1], outputs[-1:] + aud_features = torch.cat([first_frame.repeat(2, 1), outputs, last_frame.repeat(2, 1)], dim=0).numpy() + except: + print(f'[ERROR] If do not use Audio Visual Encoder, replace it with the npy file path.') + else: + try: + aud_features = np.load(self.opt.aud) + except: + print(f'[ERROR] If do not use Audio Visual Encoder, replace it with the npy file path.') + + if self.opt.asr_model == 'ave': + aud_features = torch.from_numpy(aud_features).unsqueeze(0) + + # support both [N, 16] labels and [N, 16, K] logits + if len(aud_features.shape) == 3: + aud_features = aud_features.float().permute(1, 0, 2) # [N, 16, 29] --> [N, 29, 16] + + if self.opt.emb: + print(f'[INFO] argmax to aud features {aud_features.shape} for --emb mode') + aud_features = aud_features.argmax(1) # [N, 16] + + else: + assert self.opt.emb, "aud only provide labels, must use --emb" + aud_features = aud_features.long() + + print(f'[INFO] load {self.opt.aud} aud_features: {aud_features.shape}') + else: + aud_features = torch.from_numpy(aud_features) + + # support both [N, 16] labels and [N, 16, K] logits + if len(aud_features.shape) == 3: + aud_features = aud_features.float().permute(0, 2, 1) # [N, 16, 29] --> [N, 29, 16] + + if self.opt.emb: + print(f'[INFO] argmax to aud features {aud_features.shape} for --emb mode') + aud_features = aud_features.argmax(1) # [N, 16] + + else: + assert self.opt.emb, "aud only provide labels, must use --emb" + aud_features = aud_features.long() + + print(f'[INFO] load {self.opt.aud} aud_features: {aud_features.shape}') + + if self.opt.au45: + import pandas as pd + au_blink_info = pd.read_csv(os.path.join(self.root_path, 'au.csv')) + bs = au_blink_info[' AU45_r'].values + else: + bs = np.load(os.path.join(self.root_path, 'bs.npy')) + if self.opt.bs_area == "upper": + bs = np.hstack((bs[:, 0:5], bs[:, 8:10])) + elif self.opt.bs_area == "single": + bs = np.hstack((bs[:, 0].reshape(-1, 1),bs[:, 2].reshape(-1, 1),bs[:, 3].reshape(-1, 1), bs[:, 8].reshape(-1, 1))) + elif self.opt.bs_area == "eye": + bs = bs[:,8:10] + + + self.torso_img = [] + self.images = [] + self.gt_images = [] + self.face_mask_imgs = [] + + self.poses = [] + self.exps = [] + + self.auds = [] + self.face_rect = [] + self.lhalf_rect = [] + self.upface_rect = [] + self.lowface_rect = [] + self.lips_rect = [] + self.eye_area = [] + self.eye_rect = [] + + for f in tqdm.tqdm(frames, desc=f'Loading {type} data'): + + f_path = os.path.join(self.root_path, 'gt_imgs', str(f['img_id']) + '.jpg') + + if not os.path.exists(f_path): + print('[WARN]', f_path, 'NOT FOUND!') + continue + + pose = np.array(f['transform_matrix'], dtype=np.float32) # [4, 4] + pose = nerf_matrix_to_ngp(pose, scale=self.scale, offset=self.offset) + self.poses.append(pose) + + if self.preload > 0: + image = cv2.imread(f_path, cv2.IMREAD_UNCHANGED) # [H, W, 3] o [H, W, 4] + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + image = image.astype(np.float32) / 255 # [H, W, 3/4] + + self.images.append(image) + else: + self.images.append(f_path) + + if self.opt.portrait: + gt_path = os.path.join(self.root_path, 'ori_imgs', str(f['img_id']) + '.jpg') + # gt_path = os.path.join(self.root_path, 'torso_imgs', str(f['img_id']) + '_no_face.png') + if not os.path.exists(f_path): + print('[WARN]', f_path, 'NOT FOUND!') + continue + if self.preload > 0: + gt_image = cv2.imread(gt_path, cv2.IMREAD_UNCHANGED) # [H, W, 3] o [H, W, 4] + gt_image = cv2.cvtColor(gt_image, cv2.COLOR_BGR2RGB) + gt_image = gt_image.astype(np.float32) / 255 # [H, W, 3/4] + + self.gt_images.append(gt_image) + else: + self.gt_images.append(gt_path) + + face_mask_path = os.path.join(self.root_path, 'parsing', str(f['img_id']) + '_face.png') + if not os.path.exists(face_mask_path): + print('[WARN]', face_mask_path, 'NOT FOUND!') + continue + if self.preload > 0: + face_mask_img = (255 - cv2.imread(face_mask_path)[:, :, 1]) / 255.0 + self.face_mask_imgs.append(face_mask_img) + else: + self.face_mask_imgs.append(face_mask_path) + + # load frame-wise bg + + torso_img_path = os.path.join(self.root_path, 'torso_imgs', str(f['img_id']) + '.png') + + if self.preload > 0: + torso_img = cv2.imread(torso_img_path, cv2.IMREAD_UNCHANGED) # [H, W, 4] + torso_img = cv2.cvtColor(torso_img, cv2.COLOR_BGRA2RGBA) + torso_img = torso_img.astype(np.float32) / 255 # [H, W, 3/4] + + self.torso_img.append(torso_img) + else: + self.torso_img.append(torso_img_path) + + # find the corresponding audio to the image frame + if not self.opt.asr and self.opt.aud == '': + aud = aud_features[min(f['aud_id'], aud_features.shape[0] - 1)] # careful for the last frame... + self.auds.append(aud) + + # load lms and extract face + lms = np.loadtxt(os.path.join(self.root_path, 'ori_imgs', str(f['img_id']) + '.lms')) # [68, 2] + + lh_xmin, lh_xmax = int(lms[31:36, 1].min()), int(lms[:, 1].max()) # actually lower half area + upface_xmin, upface_xmax = int(lms[:, 1].min()),int(lms[30,1]) + lowface_xmin, lowface_xmax = int(lms[30,1]), int(lms[:, 1].max()) + xmin, xmax = int(lms[:, 1].min()), int(lms[:, 1].max()) + ymin, ymax = int(lms[:, 0].min()), int(lms[:, 0].max()) + self.face_rect.append([xmin, xmax, ymin, ymax]) + self.lhalf_rect.append([lh_xmin, lh_xmax, ymin, ymax]) + self.upface_rect.append([upface_xmin, upface_xmax, ymin, ymax]) + self.lowface_rect.append([lowface_xmin, lowface_xmax, ymin, ymax]) + + + if self.opt.exp_eye: + area = bs[f['img_id']] + if self.opt.au45: + area = np.clip(area, 0, 2) / 2 + self.eye_area.append(area) + + xmin, xmax = int(lms[36:48, 1].min()), int(lms[36:48, 1].max()) + ymin, ymax = int(lms[36:48, 0].min()), int(lms[36:48, 0].max()) + self.eye_rect.append([xmin, xmax, ymin, ymax]) + + if self.opt.finetune_lips: + lips = slice(48, 60) + xmin, xmax = int(lms[lips, 1].min()), int(lms[lips, 1].max()) + ymin, ymax = int(lms[lips, 0].min()), int(lms[lips, 0].max()) + + # padding to H == W + cx = (xmin + xmax) // 2 + cy = (ymin + ymax) // 2 + + l = max(xmax - xmin, ymax - ymin) // 2 + xmin = max(0, cx - l) + xmax = min(self.H, cx + l) + ymin = max(0, cy - l) + ymax = min(self.W, cy + l) + + self.lips_rect.append([xmin, xmax, ymin, ymax]) + + # load pre-extracted background image (should be the same size as training image...) + + if self.opt.bg_img == 'white': # special + bg_img = np.ones((self.H, self.W, 3), dtype=np.float32) + elif self.opt.bg_img == 'black': # special + bg_img = np.zeros((self.H, self.W, 3), dtype=np.float32) + else: # load from file + # default bg + if self.opt.bg_img == '': + self.opt.bg_img = os.path.join(self.root_path, 'bc.jpg') + bg_img = cv2.imread(self.opt.bg_img, cv2.IMREAD_UNCHANGED) # [H, W, 3] + if bg_img.shape[0] != self.H or bg_img.shape[1] != self.W: + bg_img = cv2.resize(bg_img, (self.W, self.H), interpolation=cv2.INTER_AREA) + bg_img = cv2.cvtColor(bg_img, cv2.COLOR_BGR2RGB) + bg_img = bg_img.astype(np.float32) / 255 # [H, W, 3/4] + + self.bg_img = bg_img + + self.poses = np.stack(self.poses, axis=0) + + # smooth camera path... + if self.opt.smooth_path: + self.poses = smooth_camera_path(self.poses, self.opt.smooth_path_window) + + self.poses = torch.from_numpy(self.poses) # [N, 4, 4] + + if self.preload > 0: + self.images = torch.from_numpy(np.stack(self.images, axis=0)) # [N, H, W, C] + self.torso_img = torch.from_numpy(np.stack(self.torso_img, axis=0)) # [N, H, W, C] + if self.opt.portrait: + self.gt_images = torch.from_numpy(np.stack(self.gt_images, axis=0)) # [N, H, W, C] + self.face_mask_imgs = torch.from_numpy(np.stack(self.face_mask_imgs, axis=0)) # [N, H, W, C] + + else: + self.images = np.array(self.images) + self.torso_img = np.array(self.torso_img) + if self.opt.portrait: + self.gt_images = np.array(self.gt_images) + self.face_mask_imgs = np.array(self.face_mask_imgs) + + + if self.opt.asr: + # live streaming, no pre-calculated auds + self.auds = None + else: + # auds corresponding to images + if self.opt.aud == '': + self.auds = torch.stack(self.auds, dim=0) # [N, 32, 16] + # auds is novel, may have a different length with images + else: + self.auds = aud_features + + self.bg_img = torch.from_numpy(self.bg_img) + + if self.opt.exp_eye: + self.eye_area = np.array(self.eye_area, dtype=np.float32) # [N] + print(f'[INFO] eye_area: {self.eye_area.min()} - {self.eye_area.max()}') + + if self.opt.smooth_eye: + + # naive 5 window average + ori_eye = self.eye_area.copy() + for i in range(ori_eye.shape[0]): + start = max(0, i - 1) + end = min(ori_eye.shape[0], i + 2) + self.eye_area[i] = ori_eye[start:end].mean() + if self.opt.au45: + self.eye_area = torch.from_numpy(self.eye_area).view(-1, 1) # [N, 1] + else: + if self.opt.bs_area == "upper": + self.eye_area = torch.from_numpy(self.eye_area).view(-1, 7) # [N, 7] + elif self.opt.bs_area == "single": + self.eye_area = torch.from_numpy(self.eye_area).view(-1, 4) # [N, 7] + else: + self.eye_area = torch.from_numpy(self.eye_area).view(-1, 2) + + # calculate mean radius of all camera poses + self.radius = self.poses[:, :3, 3].norm(dim=-1).mean(0).item() + #print(f'[INFO] dataset camera poses: radius = {self.radius:.4f}, bound = {self.bound}') + + + # [debug] uncomment to view all training poses. + # visualize_poses(self.poses.numpy()) + + # [debug] uncomment to view examples of randomly generated poses. + # visualize_poses(rand_poses(100, self.device, radius=self.radius).cpu().numpy()) + + if self.preload > 1: + self.poses = self.poses.to(self.device) + + if self.auds is not None: + self.auds = self.auds.to(self.device) + + self.bg_img = self.bg_img.to(torch.half).to(self.device) + + self.torso_img = self.torso_img.to(torch.half).to(self.device) + self.images = self.images.to(torch.half).to(self.device) + if self.opt.portrait: + self.gt_images = self.gt_images.to(torch.half).to(self.device) + self.face_mask_imgs = self.face_mask_imgs.to(torch.half).to(self.device) + + if self.opt.exp_eye: + self.eye_area = self.eye_area.to(self.device) + + # load intrinsics + if 'focal_len' in transform: + fl_x = fl_y = transform['focal_len'] + elif 'fl_x' in transform or 'fl_y' in transform: + fl_x = (transform['fl_x'] if 'fl_x' in transform else transform['fl_y']) / downscale + fl_y = (transform['fl_y'] if 'fl_y' in transform else transform['fl_x']) / downscale + elif 'camera_angle_x' in transform or 'camera_angle_y' in transform: + # blender, assert in radians. already downscaled since we use H/W + fl_x = self.W / (2 * np.tan(transform['camera_angle_x'] / 2)) if 'camera_angle_x' in transform else None + fl_y = self.H / (2 * np.tan(transform['camera_angle_y'] / 2)) if 'camera_angle_y' in transform else None + if fl_x is None: fl_x = fl_y + if fl_y is None: fl_y = fl_x + else: + raise RuntimeError('Failed to load focal length, please check the transforms.json!') + + cx = (transform['cx'] / downscale) if 'cx' in transform else (self.W / 2) + cy = (transform['cy'] / downscale) if 'cy' in transform else (self.H / 2) + + self.intrinsics = np.array([fl_x, fl_y, cx, cy]) + + # directly build the coordinate meshgrid in [-1, 1]^2 + self.bg_coords = get_bg_coords(self.H, self.W, self.device) # [1, H*W, 2] in [-1, 1] + + + def mirror_index(self, index): + size = self.poses.shape[0] + turn = index // size + res = index % size + if turn % 2 == 0: + return res + else: + return size - res - 1 + + + def collate(self, index): + + B = len(index) # a list of length 1 + # assert B == 1 + + results = {} + + # audio use the original index + if self.auds is not None: + auds = get_audio_features(self.auds, self.opt.att, index[0]).to(self.device) + results['auds'] = auds + + # head pose and bg image may mirror (replay --> <-- --> <--). + index[0] = self.mirror_index(index[0]) + + poses = self.poses[index].to(self.device) # [B, 4, 4] + + if self.training and self.opt.finetune_lips: + rect = self.lips_rect[index[0]] + results['rect'] = rect + rays = get_rays(poses, self.intrinsics, self.H, self.W, -1, rect=rect) + else: + rays = get_rays(poses, self.intrinsics, self.H, self.W, self.num_rays, self.opt.patch_size) + results['up_rect'] = self.upface_rect[index[0]] + results['low_rect'] = self.lowface_rect[index[0]] + results['index'] = index # for ind. code + results['H'] = self.H + results['W'] = self.W + results['rays_o'] = rays['rays_o'] + results['rays_d'] = rays['rays_d'] + + # get a mask for rays inside rect_face + if self.training: + xmin, xmax, ymin, ymax = self.face_rect[index[0]] + face_mask = (rays['j'] >= xmin) & (rays['j'] < xmax) & (rays['i'] >= ymin) & (rays['i'] < ymax) # [B, N] + results['face_mask'] = face_mask + + xmin, xmax, ymin, ymax = self.lhalf_rect[index[0]] + lhalf_mask = (rays['j'] >= xmin) & (rays['j'] < xmax) & (rays['i'] >= ymin) & (rays['i'] < ymax) # [B, N] + results['lhalf_mask'] = lhalf_mask + + xmin, xmax, ymin, ymax = self.upface_rect[index[0]] + upface_mask = (rays['j'] >= xmin) & (rays['j'] < xmax) & (rays['i'] >= ymin) & (rays['i'] < ymax) # [B, N] + results['upface_mask'] = upface_mask + + xmin, xmax, ymin, ymax = self.lowface_rect[index[0]] + lowface_mask = (rays['j'] >= xmin) & (rays['j'] < xmax) & (rays['i'] >= ymin) & (rays['i'] < ymax) # [B, N] + results['lowface_mask'] = lowface_mask + + + if self.opt.exp_eye: + results['eye'] = self.eye_area[index].to(self.device) # [1] + if self.training: + #results['eye'] += (np.random.rand()-0.5) / 10 + xmin, xmax, ymin, ymax = self.eye_rect[index[0]] + eye_mask = (rays['j'] >= xmin) & (rays['j'] < xmax) & (rays['i'] >= ymin) & (rays['i'] < ymax) # [B, N] + results['eye_mask'] = eye_mask + + else: + results['eye'] = None + + # load bg + bg_torso_img = self.torso_img[index] + if self.preload == 0: # on the fly loading + bg_torso_img = cv2.imread(bg_torso_img[0], cv2.IMREAD_UNCHANGED) # [H, W, 4] + bg_torso_img = cv2.cvtColor(bg_torso_img, cv2.COLOR_BGRA2RGBA) + bg_torso_img = bg_torso_img.astype(np.float32) / 255 # [H, W, 3/4] + bg_torso_img = torch.from_numpy(bg_torso_img).unsqueeze(0) + bg_torso_img = bg_torso_img[..., :3] * bg_torso_img[..., 3:] + self.bg_img * (1 - bg_torso_img[..., 3:]) + bg_torso_img = bg_torso_img.view(B, -1, 3).to(self.device) + + if not self.opt.torso: + bg_img = bg_torso_img + else: + bg_img = self.bg_img.view(1, -1, 3).repeat(B, 1, 1).to(self.device) + + if self.training: + bg_img = torch.gather(bg_img, 1, torch.stack(3 * [rays['inds']], -1)) # [B, N, 3] + + results['bg_color'] = bg_img + + if self.opt.torso and self.training: + bg_torso_img = torch.gather(bg_torso_img, 1, torch.stack(3 * [rays['inds']], -1)) # [B, N, 3] + results['bg_torso_color'] = bg_torso_img + + if self.opt.portrait: + bg_gt_images = self.gt_images[index] + if self.preload == 0: + bg_gt_images = cv2.imread(bg_gt_images[0], cv2.IMREAD_UNCHANGED) + bg_gt_images = cv2.cvtColor(bg_gt_images, cv2.COLOR_BGR2RGB) + bg_gt_images = bg_gt_images.astype(np.float32) / 255 + bg_gt_images = torch.from_numpy(bg_gt_images).unsqueeze(0) + bg_gt_images = bg_gt_images.to(self.device) + results['bg_gt_images'] = bg_gt_images + + bg_face_mask = self.face_mask_imgs[index] + if self.preload == 0: + # bg_face_mask = np.all(cv2.imread(bg_face_mask[0]) == [255, 0, 0], axis=-1).astype(np.uint8) + bg_face_mask = (255 - cv2.imread(bg_face_mask[0])[:, :, 1]) / 255.0 + bg_face_mask = torch.from_numpy(bg_face_mask).unsqueeze(0) + bg_face_mask = bg_face_mask.to(self.device) + results['bg_face_mask'] = bg_face_mask + + + images = self.images[index] # [B, H, W, 3/4] + if self.preload == 0: + images = cv2.imread(images[0], cv2.IMREAD_UNCHANGED) # [H, W, 3] + images = cv2.cvtColor(images, cv2.COLOR_BGR2RGB) + images = images.astype(np.float32) / 255 # [H, W, 3] + images = torch.from_numpy(images).unsqueeze(0) + images = images.to(self.device) + + if self.training: + C = images.shape[-1] + images = torch.gather(images.view(B, -1, C), 1, torch.stack(C * [rays['inds']], -1)) # [B, N, 3/4] + results['images'] = images + + if self.training: + bg_coords = torch.gather(self.bg_coords, 1, torch.stack(2 * [rays['inds']], -1)) # [1, N, 2] + else: + bg_coords = self.bg_coords # [1, N, 2] + + results['bg_coords'] = bg_coords + + # results['poses'] = convert_poses(poses) # [B, 6] + # results['poses_matrix'] = poses # [B, 4, 4] + results['poses'] = poses # [B, 4, 4] + + return results + + def dataloader(self): + + if self.training: + # training len(poses) == len(auds) + size = self.poses.shape[0] + else: + # test with novel auds, then use its length + if self.auds is not None: + size = self.auds.shape[0] + # live stream test, use 2 * len(poses), so it naturally mirrors. + else: + size = 2 * self.poses.shape[0] + + loader = DataLoader(list(range(size)), batch_size=1, collate_fn=self.collate, shuffle=self.training, num_workers=0) + loader._data = self # an ugly fix... we need poses in trainer. + + # do evaluate if has gt images and use self-driven setting + loader.has_gt = (self.opt.aud == '') + + return loader diff --git a/nerf_triplane/renderer.py b/nerf_triplane/renderer.py new file mode 100644 index 0000000000000000000000000000000000000000..a736791abd12a791edc09151585905f56b5c7bfe --- /dev/null +++ b/nerf_triplane/renderer.py @@ -0,0 +1,698 @@ +import math +import trimesh +import numpy as np +import random + +import torch +import torch.nn as nn +import torch.nn.functional as F + +import raymarching +from .utils import custom_meshgrid, get_audio_features, euler_angles_to_matrix, convert_poses + +def sample_pdf(bins, weights, n_samples, det=False): + # This implementation is from NeRF + # bins: [B, T], old_z_vals + # weights: [B, T - 1], bin weights. + # return: [B, n_samples], new_z_vals + + # Get pdf + weights = weights + 1e-5 # prevent nans + pdf = weights / torch.sum(weights, -1, keepdim=True) + cdf = torch.cumsum(pdf, -1) + cdf = torch.cat([torch.zeros_like(cdf[..., :1]), cdf], -1) + # Take uniform samples + if det: + u = torch.linspace(0. + 0.5 / n_samples, 1. - 0.5 / n_samples, steps=n_samples).to(weights.device) + u = u.expand(list(cdf.shape[:-1]) + [n_samples]) + else: + u = torch.rand(list(cdf.shape[:-1]) + [n_samples]).to(weights.device) + + # Invert CDF + u = u.contiguous() + inds = torch.searchsorted(cdf, u, right=True) + below = torch.max(torch.zeros_like(inds - 1), inds - 1) + above = torch.min((cdf.shape[-1] - 1) * torch.ones_like(inds), inds) + inds_g = torch.stack([below, above], -1) # (B, n_samples, 2) + + matched_shape = [inds_g.shape[0], inds_g.shape[1], cdf.shape[-1]] + cdf_g = torch.gather(cdf.unsqueeze(1).expand(matched_shape), 2, inds_g) + bins_g = torch.gather(bins.unsqueeze(1).expand(matched_shape), 2, inds_g) + + denom = (cdf_g[..., 1] - cdf_g[..., 0]) + denom = torch.where(denom < 1e-5, torch.ones_like(denom), denom) + t = (u - cdf_g[..., 0]) / denom + samples = bins_g[..., 0] + t * (bins_g[..., 1] - bins_g[..., 0]) + + return samples + + +def plot_pointcloud(pc, color=None): + # pc: [N, 3] + # color: [N, 3/4] + print('[visualize points]', pc.shape, pc.dtype, pc.min(0), pc.max(0)) + pc = trimesh.PointCloud(pc, color) + # axis + axes = trimesh.creation.axis(axis_length=4) + # sphere + sphere = trimesh.creation.icosphere(radius=1) + trimesh.Scene([pc, axes, sphere]).show() + + +class NeRFRenderer(nn.Module): + def __init__(self, opt): + + super().__init__() + + self.opt = opt + self.bound = opt.bound + self.cascade = 1 + math.ceil(math.log2(opt.bound)) + self.grid_size = 128 + self.density_scale = 1 + + self.min_near = opt.min_near + self.density_thresh = opt.density_thresh + self.density_thresh_torso = opt.density_thresh_torso + + self.exp_eye = opt.exp_eye + self.test_train = opt.test_train + self.smooth_lips = opt.smooth_lips + + self.torso = opt.torso + self.cuda_ray = opt.cuda_ray + + # prepare aabb with a 6D tensor (xmin, ymin, zmin, xmax, ymax, zmax) + # NOTE: aabb (can be rectangular) is only used to generate points, we still rely on bound (always cubic) to calculate density grid and hashing. + aabb_train = torch.FloatTensor([-opt.bound, -opt.bound/2, -opt.bound, opt.bound, opt.bound/2, opt.bound]) + aabb_infer = aabb_train.clone() + self.register_buffer('aabb_train', aabb_train) + self.register_buffer('aabb_infer', aabb_infer) + + # individual codes + self.individual_num = opt.ind_num + + self.individual_dim = opt.ind_dim + if self.individual_dim > 0: + self.individual_codes = nn.Parameter(torch.randn(self.individual_num, self.individual_dim) * 0.1) + + if self.torso: + self.individual_dim_torso = opt.ind_dim_torso + if self.individual_dim_torso > 0: + self.individual_codes_torso = nn.Parameter(torch.randn(self.individual_num, self.individual_dim_torso) * 0.1) + + # optimize camera pose + self.train_camera = self.opt.train_camera + if self.train_camera: + self.camera_dR = nn.Parameter(torch.zeros(self.individual_num, 3)) # euler angle + self.camera_dT = nn.Parameter(torch.zeros(self.individual_num, 3)) # xyz offset + + # extra state for cuda raymarching + + # 3D head density grid + density_grid = torch.zeros([self.cascade, self.grid_size ** 3]) # [CAS, H * H * H] + density_bitfield = torch.zeros(self.cascade * self.grid_size ** 3 // 8, dtype=torch.uint8) # [CAS * H * H * H // 8] + self.register_buffer('density_grid', density_grid) + self.register_buffer('density_bitfield', density_bitfield) + self.mean_density = 0 + self.iter_density = 0 + + # 2D torso density grid + if self.torso: + density_grid_torso = torch.zeros([self.grid_size ** 2]) # [H * H] + self.register_buffer('density_grid_torso', density_grid_torso) + self.mean_density_torso = 0 + + # step counter + step_counter = torch.zeros(16, 2, dtype=torch.int32) # 16 is hardcoded for averaging... + self.register_buffer('step_counter', step_counter) + self.mean_count = 0 + self.local_step = 0 + + # decay for enc_a + if self.smooth_lips: + self.enc_a = None + + def forward(self, x, d): + raise NotImplementedError() + + # separated density and color query (can accelerate non-cuda-ray mode.) + def density(self, x): + raise NotImplementedError() + + def color(self, x, d, mask=None, **kwargs): + raise NotImplementedError() + + def reset_extra_state(self): + if not self.cuda_ray: + return + # density grid + self.density_grid.zero_() + self.mean_density = 0 + self.iter_density = 0 + # step counter + self.step_counter.zero_() + self.mean_count = 0 + self.local_step = 0 + + + def run_cuda(self, rays_o, rays_d, auds, bg_coords, poses, eye=None, index=0, dt_gamma=0, bg_color=None, perturb=False, force_all_rays=False, max_steps=1024, T_thresh=1e-4, **kwargs): + # rays_o, rays_d: [B, N, 3], assumes B == 1 + # auds: [B, 16] + # index: [B] + # return: image: [B, N, 3], depth: [B, N] + + prefix = rays_o.shape[:-1] + rays_o = rays_o.contiguous().view(-1, 3) + rays_d = rays_d.contiguous().view(-1, 3) + bg_coords = bg_coords.contiguous().view(-1, 2) + + # only add camera offset at training! + if self.train_camera and (self.training or self.test_train): + dT = self.camera_dT[index] # [1, 3] + dR = euler_angles_to_matrix(self.camera_dR[index] / 180 * np.pi + 1e-8).squeeze(0) # [1, 3] --> [3, 3] + + rays_o = rays_o + dT + rays_d = rays_d @ dR + + N = rays_o.shape[0] # N = B * N, in fact + device = rays_o.device + + results = {} + + # pre-calculate near far + nears, fars = raymarching.near_far_from_aabb(rays_o, rays_d, self.aabb_train if self.training else self.aabb_infer, self.min_near) + nears = nears.detach() + fars = fars.detach() + + # encode audio + enc_a = self.encode_audio(auds) # [1, 32] + + if enc_a is not None and self.smooth_lips: + if self.enc_a is not None: + _lambda = 0.35 + enc_a = _lambda * self.enc_a + (1 - _lambda) * enc_a + self.enc_a = enc_a + + + if self.individual_dim > 0: + if self.training: + ind_code = self.individual_codes[index] + # use a fixed ind code for the unknown test data. + else: + ind_code = self.individual_codes[0] + else: + ind_code = None + + if self.training: + # setup counter + counter = self.step_counter[self.local_step % 16] + counter.zero_() # set to 0 + self.local_step += 1 + + xyzs, dirs, deltas, rays = raymarching.march_rays_train(rays_o, rays_d, self.bound, self.density_bitfield, self.cascade, self.grid_size, nears, fars, counter, self.mean_count, perturb, 128, force_all_rays, dt_gamma, max_steps) + sigmas, rgbs, amb_aud, amb_eye, uncertainty = self(xyzs, dirs, enc_a, ind_code, eye) + sigmas = self.density_scale * sigmas + + #print(f'valid RGB query ratio: {mask.sum().item() / mask.shape[0]} (total = {mask.sum().item()})') + + # weights_sum, ambient_sum, uncertainty_sum, depth, image = raymarching.composite_rays_train_uncertainty(sigmas, rgbs, ambient.abs().sum(-1), uncertainty, deltas, rays) + weights_sum, amb_aud_sum, amb_eye_sum, uncertainty_sum, depth, image = raymarching.composite_rays_train_triplane(sigmas, rgbs, amb_aud.abs().sum(-1), amb_eye.abs().sum(-1), uncertainty, deltas, rays) + + results['weights_sum'] = weights_sum + results['ambient_aud'] = amb_aud_sum + results['ambient_eye'] = amb_eye_sum + results['uncertainty'] = uncertainty_sum + + results['rays'] = xyzs, dirs, enc_a, ind_code, eye + + else: + + dtype = torch.float32 + + weights_sum = torch.zeros(N, dtype=dtype, device=device) + depth = torch.zeros(N, dtype=dtype, device=device) + image = torch.zeros(N, 3, dtype=dtype, device=device) + amb_aud_sum = torch.zeros(N, dtype=dtype, device=device) + amb_eye_sum = torch.zeros(N, dtype=dtype, device=device) + uncertainty_sum = torch.zeros(N, dtype=dtype, device=device) + + n_alive = N + rays_alive = torch.arange(n_alive, dtype=torch.int32, device=device) # [N] + rays_t = nears.clone() # [N] + + step = 0 + + while step < max_steps: + + # count alive rays + n_alive = rays_alive.shape[0] + + # exit loop + if n_alive <= 0: + break + + # decide compact_steps + n_step = max(min(N // n_alive, 8), 1) + + xyzs, dirs, deltas = raymarching.march_rays(n_alive, n_step, rays_alive, rays_t, rays_o, rays_d, self.bound, self.density_bitfield, self.cascade, self.grid_size, nears, fars, 128, perturb if step == 0 else False, dt_gamma, max_steps) + + sigmas, rgbs, ambients_aud, ambients_eye, uncertainties = self(xyzs, dirs, enc_a, ind_code, eye) + sigmas = self.density_scale * sigmas + + # raymarching.composite_rays_uncertainty(n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, uncertainties, weights_sum, depth, image, ambient_sum, uncertainty_sum, T_thresh) + raymarching.composite_rays_triplane(n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, ambients_aud, ambients_eye, uncertainties, weights_sum, depth, image, amb_aud_sum, amb_eye_sum, uncertainty_sum, T_thresh) + + rays_alive = rays_alive[rays_alive >= 0] + + # print(f'step = {step}, n_step = {n_step}, n_alive = {n_alive}, xyzs: {xyzs.shape}') + + step += n_step + + torso_results = self.run_torso(rays_o, bg_coords, poses, index, bg_color) + bg_color = torso_results['bg_color'] + image = image + (1 - weights_sum).unsqueeze(-1) * bg_color + image = image.view(*prefix, 3) + image = image.clamp(0, 1) + + depth = torch.clamp(depth - nears, min=0) / (fars - nears) + depth = depth.view(*prefix) + + amb_aud_sum = amb_aud_sum.view(*prefix) + amb_eye_sum = amb_eye_sum.view(*prefix) + + results['depth'] = depth + results['image'] = image # head_image if train, else com_image + results['ambient_aud'] = amb_aud_sum + results['ambient_eye'] = amb_eye_sum + results['uncertainty'] = uncertainty_sum + + return results + + + def run_torso(self, rays_o, bg_coords, poses, index=0, bg_color=None, **kwargs): + # rays_o, rays_d: [B, N, 3], assumes B == 1 + # auds: [B, 16] + # index: [B] + # return: image: [B, N, 3], depth: [B, N] + + rays_o = rays_o.contiguous().view(-1, 3) + bg_coords = bg_coords.contiguous().view(-1, 2) + + N = rays_o.shape[0] # N = B * N, in fact + device = rays_o.device + + results = {} + + # background + if bg_color is None: + bg_color = 1 + + # first mix torso with background + if self.torso: + # torso ind code + if self.individual_dim_torso > 0: + if self.training: + ind_code_torso = self.individual_codes_torso[index] + # use a fixed ind code for the unknown test data. + else: + ind_code_torso = self.individual_codes_torso[0] + else: + ind_code_torso = None + + # 2D density grid for acceleration... + density_thresh_torso = min(self.density_thresh_torso, self.mean_density_torso) + occupancy = F.grid_sample(self.density_grid_torso.view(1, 1, self.grid_size, self.grid_size), bg_coords.view(1, -1, 1, 2), align_corners=True).view(-1) + mask = occupancy > density_thresh_torso + + # masked query of torso + torso_alpha = torch.zeros([N, 1], device=device) + torso_color = torch.zeros([N, 3], device=device) + + if mask.any(): + torso_alpha_mask, torso_color_mask, deform = self.forward_torso(bg_coords[mask], poses, ind_code_torso) + + torso_alpha[mask] = torso_alpha_mask.float() + torso_color[mask] = torso_color_mask.float() + + results['deform'] = deform + + # first mix torso with background + + bg_color = torso_color * torso_alpha + bg_color * (1 - torso_alpha) + + results['torso_alpha'] = torso_alpha + results['torso_color'] = bg_color + + # print(torso_alpha.shape, torso_alpha.max().item(), torso_alpha.min().item()) + + results['bg_color'] = bg_color + + return results + + + @torch.no_grad() + def mark_untrained_grid(self, poses, intrinsic, S=64): + # poses: [B, 4, 4] + # intrinsic: [3, 3] + + if not self.cuda_ray: + return + + if isinstance(poses, np.ndarray): + poses = torch.from_numpy(poses) + + B = poses.shape[0] + + fx, fy, cx, cy = intrinsic + + X = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Y = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Z = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + + count = torch.zeros_like(self.density_grid) + poses = poses.to(count.device) + + # 5-level loop, forgive me... + + for xs in X: + for ys in Y: + for zs in Z: + + # construct points + xx, yy, zz = custom_meshgrid(xs, ys, zs) + coords = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1), zz.reshape(-1, 1)], dim=-1) # [N, 3], in [0, 128) + indices = raymarching.morton3D(coords).long() # [N] + world_xyzs = (2 * coords.float() / (self.grid_size - 1) - 1).unsqueeze(0) # [1, N, 3] in [-1, 1] + + # cascading + for cas in range(self.cascade): + bound = min(2 ** cas, self.bound) + half_grid_size = bound / self.grid_size + # scale to current cascade's resolution + cas_world_xyzs = world_xyzs * (bound - half_grid_size) + + # split batch to avoid OOM + head = 0 + while head < B: + tail = min(head + S, B) + + # world2cam transform (poses is c2w, so we need to transpose it. Another transpose is needed for batched matmul, so the final form is without transpose.) + cam_xyzs = cas_world_xyzs - poses[head:tail, :3, 3].unsqueeze(1) + cam_xyzs = cam_xyzs @ poses[head:tail, :3, :3] # [S, N, 3] + + # query if point is covered by any camera + mask_z = cam_xyzs[:, :, 2] > 0 # [S, N] + mask_x = torch.abs(cam_xyzs[:, :, 0]) < cx / fx * cam_xyzs[:, :, 2] + half_grid_size * 2 + mask_y = torch.abs(cam_xyzs[:, :, 1]) < cy / fy * cam_xyzs[:, :, 2] + half_grid_size * 2 + mask = (mask_z & mask_x & mask_y).sum(0).reshape(-1) # [N] + + # update count + count[cas, indices] += mask + head += S + + # mark untrained grid as -1 + self.density_grid[count == 0] = -1 + + #print(f'[mark untrained grid] {(count == 0).sum()} from {resolution ** 3 * self.cascade}') + + @torch.no_grad() + def update_extra_state(self, decay=0.95, S=128): + # call before each epoch to update extra states. + + if not self.cuda_ray: + return + + # use random auds (different expressions should have similar density grid...) + rand_idx = random.randint(0, self.aud_features.shape[0] - 1) + auds = get_audio_features(self.aud_features, self.att, rand_idx).to(self.density_bitfield.device) + + # encode audio + enc_a = self.encode_audio(auds) + + ### update density grid + if not self.torso: # forbid updating head if is training torso... + + tmp_grid = torch.zeros_like(self.density_grid) + + # use a random eye area based on training dataset's statistics... + if self.exp_eye: + eye = self.eye_area[[rand_idx]].to(self.density_bitfield.device) # [1, 1] + else: + eye = None + + # full update + X = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Y = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Z = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + + for xs in X: + for ys in Y: + for zs in Z: + + # construct points + xx, yy, zz = custom_meshgrid(xs, ys, zs) + coords = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1), zz.reshape(-1, 1)], dim=-1) # [N, 3], in [0, 128) + indices = raymarching.morton3D(coords).long() # [N] + xyzs = 2 * coords.float() / (self.grid_size - 1) - 1 # [N, 3] in [-1, 1] + + # cascading + for cas in range(self.cascade): + bound = min(2 ** cas, self.bound) + half_grid_size = bound / self.grid_size + # scale to current cascade's resolution + cas_xyzs = xyzs * (bound - half_grid_size) + # add noise in [-hgs, hgs] + cas_xyzs += (torch.rand_like(cas_xyzs) * 2 - 1) * half_grid_size + # query density + sigmas = self.density(cas_xyzs, enc_a, eye)['sigma'].reshape(-1).detach().to(tmp_grid.dtype) + sigmas *= self.density_scale + # assign + tmp_grid[cas, indices] = sigmas + + # dilate the density_grid (less aggressive culling) + tmp_grid = raymarching.morton3D_dilation(tmp_grid) + + # ema update + valid_mask = (self.density_grid >= 0) & (tmp_grid >= 0) + self.density_grid[valid_mask] = torch.maximum(self.density_grid[valid_mask] * decay, tmp_grid[valid_mask]) + self.mean_density = torch.mean(self.density_grid.clamp(min=0)).item() # -1 non-training regions are viewed as 0 density. + self.iter_density += 1 + + # convert to bitfield + density_thresh = min(self.mean_density, self.density_thresh) + self.density_bitfield = raymarching.packbits(self.density_grid, density_thresh, self.density_bitfield) + + ### update torso density grid + if self.torso: + tmp_grid_torso = torch.zeros_like(self.density_grid_torso) + + # random pose, random ind_code + rand_idx = random.randint(0, self.poses.shape[0] - 1) + # pose = convert_poses(self.poses[[rand_idx]]).to(self.density_bitfield.device) + pose = self.poses[[rand_idx]].to(self.density_bitfield.device) + + if self.opt.ind_dim_torso > 0: + ind_code = self.individual_codes_torso[[rand_idx]] + else: + ind_code = None + + X = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Y = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + + half_grid_size = 1 / self.grid_size + + for xs in X: + for ys in Y: + xx, yy = custom_meshgrid(xs, ys) + coords = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1)], dim=-1) # [N, 2], in [0, 128) + indices = (coords[:, 1] * self.grid_size + coords[:, 0]).long() # NOTE: xy transposed! + xys = 2 * coords.float() / (self.grid_size - 1) - 1 # [N, 2] in [-1, 1] + xys = xys * (1 - half_grid_size) + # add noise in [-hgs, hgs] + xys += (torch.rand_like(xys) * 2 - 1) * half_grid_size + # query density + alphas, _, _ = self.forward_torso(xys, pose, ind_code) # [N, 1] + + # assign + tmp_grid_torso[indices] = alphas.squeeze(1).float() + + # dilate + tmp_grid_torso = tmp_grid_torso.view(1, 1, self.grid_size, self.grid_size) + # tmp_grid_torso = F.max_pool2d(tmp_grid_torso, kernel_size=3, stride=1, padding=1) + tmp_grid_torso = F.max_pool2d(tmp_grid_torso, kernel_size=5, stride=1, padding=2) + tmp_grid_torso = tmp_grid_torso.view(-1) + + self.density_grid_torso = torch.maximum(self.density_grid_torso * decay, tmp_grid_torso) + self.mean_density_torso = torch.mean(self.density_grid_torso).item() + + # density_thresh_torso = min(self.density_thresh_torso, self.mean_density_torso) + # print(f'[density grid torso] min={self.density_grid_torso.min().item():.4f}, max={self.density_grid_torso.max().item():.4f}, mean={self.mean_density_torso:.4f}, occ_rate={(self.density_grid_torso > density_thresh_torso).sum() / (128**2):.3f}') + + ### update step counter + total_step = min(16, self.local_step) + if total_step > 0: + self.mean_count = int(self.step_counter[:total_step, 0].sum().item() / total_step) + self.local_step = 0 + + #print(f'[density grid] min={self.density_grid.min().item():.4f}, max={self.density_grid.max().item():.4f}, mean={self.mean_density:.4f}, occ_rate={(self.density_grid > 0.01).sum() / (128**3 * self.cascade):.3f} | [step counter] mean={self.mean_count}') + + + @torch.no_grad() + def get_audio_grid(self, S=128): + # call before each epoch to update extra states. + + if not self.cuda_ray: + return + + # use random auds (different expressions should have similar density grid...) + rand_idx = random.randint(0, self.aud_features.shape[0] - 1) + auds = get_audio_features(self.aud_features, self.att, rand_idx).to(self.density_bitfield.device) + + # encode audio + enc_a = self.encode_audio(auds) + tmp_grid = torch.zeros_like(self.density_grid) + + # use a random eye area based on training dataset's statistics... + if self.exp_eye: + eye = self.eye_area[[rand_idx]].to(self.density_bitfield.device) # [1, 1] + else: + eye = None + + # full update + X = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Y = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Z = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + + for xs in X: + for ys in Y: + for zs in Z: + + # construct points + xx, yy, zz = custom_meshgrid(xs, ys, zs) + coords = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1), zz.reshape(-1, 1)], dim=-1) # [N, 3], in [0, 128) + indices = raymarching.morton3D(coords).long() # [N] + xyzs = 2 * coords.float() / (self.grid_size - 1) - 1 # [N, 3] in [-1, 1] + + # cascading + for cas in range(self.cascade): + bound = min(2 ** cas, self.bound) + half_grid_size = bound / self.grid_size + # scale to current cascade's resolution + cas_xyzs = xyzs * (bound - half_grid_size) + # add noise in [-hgs, hgs] + cas_xyzs += (torch.rand_like(cas_xyzs) * 2 - 1) * half_grid_size + # query density + aud_norms = self.density(cas_xyzs.to(tmp_grid.dtype), enc_a, eye)['ambient_aud'].reshape(-1).detach().to(tmp_grid.dtype) + # assign + tmp_grid[cas, indices] = aud_norms + + # dilate the density_grid (less aggressive culling) + tmp_grid = raymarching.morton3D_dilation(tmp_grid) + return tmp_grid + # # ema update + # valid_mask = (self.density_grid >= 0) & (tmp_grid >= 0) + # self.density_grid[valid_mask] = torch.maximum(self.density_grid[valid_mask] * decay, tmp_grid[valid_mask]) + + + @torch.no_grad() + def get_eye_grid(self, S=128): + # call before each epoch to update extra states. + + if not self.cuda_ray: + return + + # use random auds (different expressions should have similar density grid...) + rand_idx = random.randint(0, self.aud_features.shape[0] - 1) + auds = get_audio_features(self.aud_features, self.att, rand_idx).to(self.density_bitfield.device) + + # encode audio + enc_a = self.encode_audio(auds) + tmp_grid = torch.zeros_like(self.density_grid) + + # use a random eye area based on training dataset's statistics... + if self.exp_eye: + eye = self.eye_area[[rand_idx]].to(self.density_bitfield.device) # [1, 1] + else: + eye = None + + # full update + X = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Y = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + Z = torch.arange(self.grid_size, dtype=torch.int32, device=self.density_bitfield.device).split(S) + + for xs in X: + for ys in Y: + for zs in Z: + + # construct points + xx, yy, zz = custom_meshgrid(xs, ys, zs) + coords = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1), zz.reshape(-1, 1)], dim=-1) # [N, 3], in [0, 128) + indices = raymarching.morton3D(coords).long() # [N] + xyzs = 2 * coords.float() / (self.grid_size - 1) - 1 # [N, 3] in [-1, 1] + + # cascading + for cas in range(self.cascade): + bound = min(2 ** cas, self.bound) + half_grid_size = bound / self.grid_size + # scale to current cascade's resolution + cas_xyzs = xyzs * (bound - half_grid_size) + # add noise in [-hgs, hgs] + cas_xyzs += (torch.rand_like(cas_xyzs) * 2 - 1) * half_grid_size + # query density + eye_norms = self.density(cas_xyzs.to(tmp_grid.dtype), enc_a, eye)['ambient_eye'].reshape(-1).detach().to(tmp_grid.dtype) + # assign + tmp_grid[cas, indices] = eye_norms + + # dilate the density_grid (less aggressive culling) + tmp_grid = raymarching.morton3D_dilation(tmp_grid) + return tmp_grid + # # ema update + # valid_mask = (self.density_grid >= 0) & (tmp_grid >= 0) + # self.density_grid[valid_mask] = torch.maximum(self.density_grid[valid_mask] * decay, tmp_grid[valid_mask]) + + + + def render(self, rays_o, rays_d, auds, bg_coords, poses, staged=False, max_ray_batch=4096, **kwargs): + # rays_o, rays_d: [B, N, 3], assumes B == 1 + # auds: [B, 29, 16] + # eye: [B, 1] + # bg_coords: [1, N, 2] + # return: pred_rgb: [B, N, 3] + + _run = self.run_cuda + + B, N = rays_o.shape[:2] + device = rays_o.device + + # never stage when cuda_ray + if staged and not self.cuda_ray: + # not used + raise NotImplementedError + + else: + results = _run(rays_o, rays_d, auds, bg_coords, poses, **kwargs) + + return results + + + def render_torso(self, rays_o, rays_d, auds, bg_coords, poses, staged=False, max_ray_batch=4096, **kwargs): + # rays_o, rays_d: [B, N, 3], assumes B == 1 + # auds: [B, 29, 16] + # eye: [B, 1] + # bg_coords: [1, N, 2] + # return: pred_rgb: [B, N, 3] + + _run = self.run_torso + + B, N = rays_o.shape[:2] + device = rays_o.device + + # never stage when cuda_ray + if staged and not self.cuda_ray: + # not used + raise NotImplementedError + + else: + results = _run(rays_o, bg_coords, poses, **kwargs) + + return results \ No newline at end of file diff --git a/nerf_triplane/utils.py b/nerf_triplane/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c4288d8fc8c416c9bddb80c1b7789304e556aebf --- /dev/null +++ b/nerf_triplane/utils.py @@ -0,0 +1,1653 @@ +import os +import glob +import tqdm +import random +import tensorboardX +import librosa +import librosa.filters +from scipy import signal +from os.path import basename +import numpy as np +import time +import cv2 +import matplotlib.pyplot as plt + +import torch +import torch.nn as nn +import torch.optim as optim +import torch.nn.functional as F + +import trimesh +import mcubes +from rich.console import Console +from torch_ema import ExponentialMovingAverage + +from packaging import version as pver +import imageio +import lpips + +def custom_meshgrid(*args): + # ref: https://pytorch.org/docs/stable/generated/torch.meshgrid.html?highlight=meshgrid#torch.meshgrid + if pver.parse(torch.__version__) < pver.parse('1.10'): + return torch.meshgrid(*args) + else: + return torch.meshgrid(*args, indexing='ij') + +def blend_with_mask_cuda(src, dst, mask): + src = src.permute(2, 0, 1) + dst = dst.permute(2, 0, 1) + mask = mask.unsqueeze(0) + + # Blending + blended = src * mask + dst * (1 - mask) + + # Convert back to numpy and return + return blended.permute(1, 2, 0).detach().cpu().numpy() + + +def get_audio_features(features, att_mode, index): + if att_mode == 0: + return features[[index]] + elif att_mode == 1: + left = index - 8 + pad_left = 0 + if left < 0: + pad_left = -left + left = 0 + auds = features[left:index] + if pad_left > 0: + # pad may be longer than auds, so do not use zeros_like + auds = torch.cat([torch.zeros(pad_left, *auds.shape[1:], device=auds.device, dtype=auds.dtype), auds], dim=0) + return auds + elif att_mode == 2: + left = index - 4 + right = index + 4 + pad_left = 0 + pad_right = 0 + if left < 0: + pad_left = -left + left = 0 + if right > features.shape[0]: + pad_right = right - features.shape[0] + right = features.shape[0] + auds = features[left:right] + if pad_left > 0: + auds = torch.cat([torch.zeros_like(auds[:pad_left]), auds], dim=0) + if pad_right > 0: + auds = torch.cat([auds, torch.zeros_like(auds[:pad_right])], dim=0) # [8, 16] + return auds + else: + raise NotImplementedError(f'wrong att_mode: {att_mode}') + + +@torch.jit.script +def linear_to_srgb(x): + return torch.where(x < 0.0031308, 12.92 * x, 1.055 * x ** 0.41666 - 0.055) + + +@torch.jit.script +def srgb_to_linear(x): + return torch.where(x < 0.04045, x / 12.92, ((x + 0.055) / 1.055) ** 2.4) + +# copied from pytorch3d +def _angle_from_tan( + axis: str, other_axis: str, data, horizontal: bool, tait_bryan: bool +) -> torch.Tensor: + """ + Extract the first or third Euler angle from the two members of + the matrix which are positive constant times its sine and cosine. + + Args: + axis: Axis label "X" or "Y or "Z" for the angle we are finding. + other_axis: Axis label "X" or "Y or "Z" for the middle axis in the + convention. + data: Rotation matrices as tensor of shape (..., 3, 3). + horizontal: Whether we are looking for the angle for the third axis, + which means the relevant entries are in the same row of the + rotation matrix. If not, they are in the same column. + tait_bryan: Whether the first and third axes in the convention differ. + + Returns: + Euler Angles in radians for each matrix in data as a tensor + of shape (...). + """ + + i1, i2 = {"X": (2, 1), "Y": (0, 2), "Z": (1, 0)}[axis] + if horizontal: + i2, i1 = i1, i2 + even = (axis + other_axis) in ["XY", "YZ", "ZX"] + if horizontal == even: + return torch.atan2(data[..., i1], data[..., i2]) + if tait_bryan: + return torch.atan2(-data[..., i2], data[..., i1]) + return torch.atan2(data[..., i2], -data[..., i1]) + + +def _index_from_letter(letter: str) -> int: + if letter == "X": + return 0 + if letter == "Y": + return 1 + if letter == "Z": + return 2 + raise ValueError("letter must be either X, Y or Z.") + + +def matrix_to_euler_angles(matrix: torch.Tensor, convention: str = 'XYZ') -> torch.Tensor: + """ + Convert rotations given as rotation matrices to Euler angles in radians. + + Args: + matrix: Rotation matrices as tensor of shape (..., 3, 3). + convention: Convention string of three uppercase letters. + + Returns: + Euler angles in radians as tensor of shape (..., 3). + """ + # if len(convention) != 3: + # raise ValueError("Convention must have 3 letters.") + # if convention[1] in (convention[0], convention[2]): + # raise ValueError(f"Invalid convention {convention}.") + # for letter in convention: + # if letter not in ("X", "Y", "Z"): + # raise ValueError(f"Invalid letter {letter} in convention string.") + # if matrix.size(-1) != 3 or matrix.size(-2) != 3: + # raise ValueError(f"Invalid rotation matrix shape {matrix.shape}.") + i0 = _index_from_letter(convention[0]) + i2 = _index_from_letter(convention[2]) + tait_bryan = i0 != i2 + if tait_bryan: + central_angle = torch.asin( + matrix[..., i0, i2] * (-1.0 if i0 - i2 in [-1, 2] else 1.0) + ) + else: + central_angle = torch.acos(matrix[..., i0, i0]) + + o = ( + _angle_from_tan( + convention[0], convention[1], matrix[..., i2], False, tait_bryan + ), + central_angle, + _angle_from_tan( + convention[2], convention[1], matrix[..., i0, :], True, tait_bryan + ), + ) + return torch.stack(o, -1) + +@torch.cuda.amp.autocast(enabled=False) +def _axis_angle_rotation(axis: str, angle: torch.Tensor) -> torch.Tensor: + """ + Return the rotation matrices for one of the rotations about an axis + of which Euler angles describe, for each value of the angle given. + Args: + axis: Axis label "X" or "Y or "Z". + angle: any shape tensor of Euler angles in radians + Returns: + Rotation matrices as tensor of shape (..., 3, 3). + """ + + cos = torch.cos(angle) + sin = torch.sin(angle) + one = torch.ones_like(angle) + zero = torch.zeros_like(angle) + + if axis == "X": + R_flat = (one, zero, zero, zero, cos, -sin, zero, sin, cos) + elif axis == "Y": + R_flat = (cos, zero, sin, zero, one, zero, -sin, zero, cos) + elif axis == "Z": + R_flat = (cos, -sin, zero, sin, cos, zero, zero, zero, one) + else: + raise ValueError("letter must be either X, Y or Z.") + + return torch.stack(R_flat, -1).reshape(angle.shape + (3, 3)) + +@torch.cuda.amp.autocast(enabled=False) +def euler_angles_to_matrix(euler_angles: torch.Tensor, convention: str='XYZ') -> torch.Tensor: + """ + Convert rotations given as Euler angles in radians to rotation matrices. + Args: + euler_angles: Euler angles in radians as tensor of shape (..., 3). + convention: Convention string of three uppercase letters from + {"X", "Y", and "Z"}. + Returns: + Rotation matrices as tensor of shape (..., 3, 3). + """ + + # print(euler_angles, euler_angles.dtype) + + if euler_angles.dim() == 0 or euler_angles.shape[-1] != 3: + raise ValueError("Invalid input euler angles.") + if len(convention) != 3: + raise ValueError("Convention must have 3 letters.") + if convention[1] in (convention[0], convention[2]): + raise ValueError(f"Invalid convention {convention}.") + for letter in convention: + if letter not in ("X", "Y", "Z"): + raise ValueError(f"Invalid letter {letter} in convention string.") + matrices = [ + _axis_angle_rotation(c, e) + for c, e in zip(convention, torch.unbind(euler_angles, -1)) + ] + + return torch.matmul(torch.matmul(matrices[0], matrices[1]), matrices[2]) + + +@torch.cuda.amp.autocast(enabled=False) +def convert_poses(poses): + # poses: [B, 4, 4] + # return [B, 3], 4 rot, 3 trans + out = torch.empty(poses.shape[0], 6, dtype=torch.float32, device=poses.device) + out[:, :3] = matrix_to_euler_angles(poses[:, :3, :3]) + out[:, 3:] = poses[:, :3, 3] + return out + +@torch.cuda.amp.autocast(enabled=False) +def get_bg_coords(H, W, device): + X = torch.arange(H, device=device) / (H - 1) * 2 - 1 # in [-1, 1] + Y = torch.arange(W, device=device) / (W - 1) * 2 - 1 # in [-1, 1] + xs, ys = custom_meshgrid(X, Y) + bg_coords = torch.cat([xs.reshape(-1, 1), ys.reshape(-1, 1)], dim=-1).unsqueeze(0) # [1, H*W, 2], in [-1, 1] + return bg_coords + + +@torch.cuda.amp.autocast(enabled=False) +def get_rays(poses, intrinsics, H, W, N=-1, patch_size=1, rect=None): + ''' get rays + Args: + poses: [B, 4, 4], cam2world + intrinsics: [4] + H, W, N: int + Returns: + rays_o, rays_d: [B, N, 3] + inds: [B, N] + ''' + + device = poses.device + B = poses.shape[0] + fx, fy, cx, cy = intrinsics + + if rect is not None: + xmin, xmax, ymin, ymax = rect + N = (xmax - xmin) * (ymax - ymin) + + i, j = custom_meshgrid(torch.linspace(0, W-1, W, device=device), torch.linspace(0, H-1, H, device=device)) # float + i = i.t().reshape([1, H*W]).expand([B, H*W]) + 0.5 + j = j.t().reshape([1, H*W]).expand([B, H*W]) + 0.5 + + results = {} + + if N > 0: + N = min(N, H*W) + + if patch_size > 1: + + # random sample left-top cores. + # NOTE: this impl will lead to less sampling on the image corner pixels... but I don't have other ideas. + num_patch = N // (patch_size ** 2) + inds_x = torch.randint(0, H - patch_size, size=[num_patch], device=device) + inds_y = torch.randint(0, W - patch_size, size=[num_patch], device=device) + inds = torch.stack([inds_x, inds_y], dim=-1) # [np, 2] + # all_inds = torch.randperm((H - patch_size + 1) * (W - patch_size + 1), device=device)[:num_patch] + # all_inds, _ = torch.sort(all_inds) + # + # inds_x = all_inds // (W - patch_size) + # inds_y = all_inds % (W - patch_size) + # inds = torch.stack([inds_x, inds_y], dim=-1) # [np, 2] + + # create meshgrid for each patch + pi, pj = custom_meshgrid(torch.arange(patch_size, device=device), torch.arange(patch_size, device=device)) + offsets = torch.stack([pi.reshape(-1), pj.reshape(-1)], dim=-1) # [p^2, 2] + + inds = inds.unsqueeze(1) + offsets.unsqueeze(0) # [np, p^2, 2] + inds = inds.view(-1, 2) # [N, 2] + inds = inds[:, 0] * W + inds[:, 1] # [N], flatten + + inds = inds.expand([B, N]) + + # only get rays in the specified rect + elif rect is not None: + # assert B == 1 + mask = torch.zeros(H, W, dtype=torch.bool, device=device) + xmin, xmax, ymin, ymax = rect + mask[xmin:xmax, ymin:ymax] = 1 + inds = torch.where(mask.view(-1))[0] # [nzn] + inds = inds.unsqueeze(0) # [1, N] + + else: + inds = torch.randint(0, H*W, size=[N], device=device) # may duplicate + inds = inds.expand([B, N]) + + # inds = torch.randperm(H * W, device=device)[:N] + # inds, _ = torch.sort(inds) + # inds = inds.expand([B, N]) + + i = torch.gather(i, -1, inds) + j = torch.gather(j, -1, inds) + + + else: + inds = torch.arange(H*W, device=device).expand([B, H*W]) + + results['i'] = i + results['j'] = j + results['inds'] = inds + + zs = torch.ones_like(i) + xs = (i - cx) / fx * zs + ys = (j - cy) / fy * zs + directions = torch.stack((xs, ys, zs), dim=-1) + directions = directions / torch.norm(directions, dim=-1, keepdim=True) + + rays_d = directions @ poses[:, :3, :3].transpose(-1, -2) # (B, N, 3) + + rays_o = poses[..., :3, 3] # [B, 3] + rays_o = rays_o[..., None, :].expand_as(rays_d) # [B, N, 3] + + results['rays_o'] = rays_o + results['rays_d'] = rays_d + + return results + + +def seed_everything(seed): + random.seed(seed) + os.environ['PYTHONHASHSEED'] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + #torch.backends.cudnn.deterministic = True + #torch.backends.cudnn.benchmark = True + + +def torch_vis_2d(x, renormalize=False): + # x: [3, H, W] or [1, H, W] or [H, W] + import matplotlib.pyplot as plt + import numpy as np + import torch + + if isinstance(x, torch.Tensor): + if len(x.shape) == 3: + x = x.permute(1,2,0).squeeze() + x = x.detach().cpu().numpy() + + print(f'[torch_vis_2d] {x.shape}, {x.dtype}, {x.min()} ~ {x.max()}') + + x = x.astype(np.float32) + + # renormalize + if renormalize: + x = (x - x.min(axis=0, keepdims=True)) / (x.max(axis=0, keepdims=True) - x.min(axis=0, keepdims=True) + 1e-8) + + plt.imshow(x) + plt.show() + + +def extract_fields(bound_min, bound_max, resolution, query_func, S=128): + + X = torch.linspace(bound_min[0], bound_max[0], resolution).split(S) + Y = torch.linspace(bound_min[1], bound_max[1], resolution).split(S) + Z = torch.linspace(bound_min[2], bound_max[2], resolution).split(S) + + u = np.zeros([resolution, resolution, resolution], dtype=np.float32) + with torch.no_grad(): + for xi, xs in enumerate(X): + for yi, ys in enumerate(Y): + for zi, zs in enumerate(Z): + xx, yy, zz = custom_meshgrid(xs, ys, zs) + pts = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1), zz.reshape(-1, 1)], dim=-1) # [S, 3] + val = query_func(pts).reshape(len(xs), len(ys), len(zs)).detach().cpu().numpy() # [S, 1] --> [x, y, z] + u[xi * S: xi * S + len(xs), yi * S: yi * S + len(ys), zi * S: zi * S + len(zs)] = val + return u + + +def extract_geometry(bound_min, bound_max, resolution, threshold, query_func): + #print('threshold: {}'.format(threshold)) + u = extract_fields(bound_min, bound_max, resolution, query_func) + + #print(u.shape, u.max(), u.min(), np.percentile(u, 50)) + + vertices, triangles = mcubes.marching_cubes(u, threshold) + + b_max_np = bound_max.detach().cpu().numpy() + b_min_np = bound_min.detach().cpu().numpy() + + vertices = vertices / (resolution - 1.0) * (b_max_np - b_min_np)[None, :] + b_min_np[None, :] + return vertices, triangles + +def ssim_1d_loss(pred, true, C1=1e-4, C2=9e-4): + """ + Compute 1D SSIM loss between two signals. + Args: + pred: predicted signal, [1, 512*512, 3] + true: ground truth signal, [1, 512*512, 3] + Returns: + ssim_val: ssim index of two input signals + """ + if pred.size() != true.size(): + raise ValueError(f'Expected input size ({pred.size()}) to match target size ({true.size()}).') + + mu1 = pred.mean(dim=1, keepdim=True) + mu2 = true.mean(dim=1, keepdim=True) + + mu1_sq = mu1.pow(2) + mu2_sq = mu2.pow(2) + mu1_mu2 = mu1 * mu2 + + sigma1_sq = (pred * pred).mean(dim=1, keepdim=True) - mu1_sq + sigma2_sq = (true * true).mean(dim=1, keepdim=True) - mu2_sq + sigma12 = (pred * true).mean(dim=1, keepdim=True) - mu1_mu2 + + ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2)) + ssim_val = ssim_map.mean() + + return ssim_val + +class PSNRMeter: + def __init__(self): + self.V = 0 + self.N = 0 + + def clear(self): + self.V = 0 + self.N = 0 + + def prepare_inputs(self, *inputs): + outputs = [] + for i, inp in enumerate(inputs): + if torch.is_tensor(inp): + inp = inp.detach().cpu().numpy() + outputs.append(inp) + + return outputs + + def update(self, preds, truths): + preds, truths = self.prepare_inputs(preds, truths) # [B, N, 3] or [B, H, W, 3], range in [0, 1] + + # simplified since max_pixel_value is 1 here. + psnr = -10 * np.log10(np.mean((preds - truths) ** 2)) + + self.V += psnr + self.N += 1 + + def measure(self): + return self.V / self.N + + def write(self, writer, global_step, prefix=""): + writer.add_scalar(os.path.join(prefix, "PSNR"), self.measure(), global_step) + + def report(self): + return f'PSNR = {self.measure():.6f}' + +class LPIPSMeter: + def __init__(self, net='alex', device=None): + self.V = 0 + self.N = 0 + self.net = net + + self.device = device if device is not None else torch.device('cuda' if torch.cuda.is_available() else 'cpu') + self.fn = lpips.LPIPS(net=net).eval().to(self.device) + + def clear(self): + self.V = 0 + self.N = 0 + + def prepare_inputs(self, *inputs): + outputs = [] + for i, inp in enumerate(inputs): + inp = inp.permute(0, 3, 1, 2).contiguous() # [B, 3, H, W] + inp = inp.to(self.device) + outputs.append(inp) + return outputs + + def update(self, preds, truths): + preds, truths = self.prepare_inputs(preds, truths) # [B, H, W, 3] --> [B, 3, H, W], range in [0, 1] + v = self.fn(truths, preds, normalize=True).item() # normalize=True: [0, 1] to [-1, 1] + self.V += v + self.N += 1 + + def measure(self): + return self.V / self.N + + def write(self, writer, global_step, prefix=""): + writer.add_scalar(os.path.join(prefix, f"LPIPS ({self.net})"), self.measure(), global_step) + + def report(self): + return f'LPIPS ({self.net}) = {self.measure():.6f}' + + +class LMDMeter: + def __init__(self, backend='dlib', region='mouth'): + self.backend = backend + self.region = region # mouth or face + + if self.backend == 'dlib': + import dlib + + # load checkpoint manually + self.predictor_path = './shape_predictor_68_face_landmarks.dat' + if not os.path.exists(self.predictor_path): + raise FileNotFoundError('Please download dlib checkpoint from http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2') + + self.detector = dlib.get_frontal_face_detector() + self.predictor = dlib.shape_predictor(self.predictor_path) + + else: + + import face_alignment + try: + self.predictor = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False) + except: + self.predictor = face_alignment.FaceAlignment(face_alignment.LandmarksType.TWO_D, flip_input=False) + + self.V = 0 + self.N = 0 + + def get_landmarks(self, img): + + if self.backend == 'dlib': + dets = self.detector(img, 1) + for det in dets: + shape = self.predictor(img, det) + # ref: https://github.com/PyImageSearch/imutils/blob/c12f15391fcc945d0d644b85194b8c044a392e0a/imutils/face_utils/helpers.py + lms = np.zeros((68, 2), dtype=np.int32) + for i in range(0, 68): + lms[i, 0] = shape.part(i).x + lms[i, 1] = shape.part(i).y + break + + else: + lms = self.predictor.get_landmarks(img)[-1] + + # self.vis_landmarks(img, lms) + lms = lms.astype(np.float32) + + return lms + + def vis_landmarks(self, img, lms): + plt.imshow(img) + plt.plot(lms[48:68, 0], lms[48:68, 1], marker='o', markersize=1, linestyle='-', lw=2) + plt.show() + + def clear(self): + self.V = 0 + self.N = 0 + + def prepare_inputs(self, *inputs): + outputs = [] + for i, inp in enumerate(inputs): + inp = inp.detach().cpu().numpy() + inp = (inp * 255).astype(np.uint8) + outputs.append(inp) + return outputs + + def update(self, preds, truths): + # assert B == 1 + preds, truths = self.prepare_inputs(preds[0], truths[0]) # [H, W, 3] numpy array + + # get lms + lms_pred = self.get_landmarks(preds) + lms_truth = self.get_landmarks(truths) + + if self.region == 'mouth': + lms_pred = lms_pred[48:68] + lms_truth = lms_truth[48:68] + + # avarage + lms_pred = lms_pred - lms_pred.mean(0) + lms_truth = lms_truth - lms_truth.mean(0) + + # distance + dist = np.sqrt(((lms_pred - lms_truth) ** 2).sum(1)).mean(0) + + self.V += dist + self.N += 1 + + def measure(self): + return self.V / self.N + + def write(self, writer, global_step, prefix=""): + writer.add_scalar(os.path.join(prefix, f"LMD ({self.backend})"), self.measure(), global_step) + + def report(self): + return f'LMD ({self.backend}) = {self.measure():.6f}' + + +class Trainer(object): + def __init__(self, + name, # name of this experiment + opt, # extra conf + model, # network + criterion=None, # loss function, if None, assume inline implementation in train_step + optimizer=None, # optimizer + ema_decay=None, # if use EMA, set the decay + ema_update_interval=1000, # update ema per $ training steps. + lr_scheduler=None, # scheduler + metrics=[], # metrics for evaluation, if None, use val_loss to measure performance, else use the first metric. + local_rank=0, # which GPU am I + world_size=1, # total num of GPUs + device=None, # device to use, usually setting to None is OK. (auto choose device) + mute=False, # whether to mute all print + fp16=False, # amp optimize level + eval_interval=1, # eval once every $ epoch + max_keep_ckpt=50, # max num of saved ckpts in disk + workspace='workspace', # workspace to save logs & ckpts + best_mode='min', # the smaller/larger result, the better + use_loss_as_metric=True, # use loss as the first metric + report_metric_at_train=False, # also report metrics at training + use_checkpoint="latest", # which ckpt to use at init time + use_tensorboardX=True, # whether to use tensorboard for logging + scheduler_update_every_step=False, # whether to call scheduler.step() after every train step + ): + + self.name = name + self.opt = opt + self.mute = mute + self.metrics = metrics + self.local_rank = local_rank + self.world_size = world_size + self.workspace = workspace + self.ema_decay = ema_decay + self.ema_update_interval = ema_update_interval + self.fp16 = fp16 + self.best_mode = best_mode + self.use_loss_as_metric = use_loss_as_metric + self.report_metric_at_train = report_metric_at_train + self.max_keep_ckpt = max_keep_ckpt + self.eval_interval = eval_interval + self.use_checkpoint = use_checkpoint + self.use_tensorboardX = use_tensorboardX + self.flip_finetune_lips = self.opt.finetune_lips + self.flip_init_lips = self.opt.init_lips + self.time_stamp = time.strftime("%Y-%m-%d_%H-%M-%S") + self.scheduler_update_every_step = scheduler_update_every_step + self.device = device if device is not None else torch.device(f'cuda:{local_rank}' if torch.cuda.is_available() else 'cpu') + self.console = Console() + + model.to(self.device) + if self.world_size > 1: + model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model) + model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank]) + self.model = model + + if isinstance(criterion, nn.Module): + criterion.to(self.device) + self.criterion = criterion + self.criterionL1 = nn.L1Loss().to(self.device) + if optimizer is None: + self.optimizer = optim.Adam(self.model.parameters(), lr=0.001, weight_decay=5e-4) # naive adam + else: + self.optimizer = optimizer(self.model) + + if lr_scheduler is None: + self.lr_scheduler = optim.lr_scheduler.LambdaLR(self.optimizer, lr_lambda=lambda epoch: 1) # fake scheduler + else: + self.lr_scheduler = lr_scheduler(self.optimizer) + + if ema_decay is not None: + self.ema = ExponentialMovingAverage(self.model.parameters(), decay=ema_decay) + else: + self.ema = None + + self.scaler = torch.cuda.amp.GradScaler(enabled=self.fp16) + + # optionally use LPIPS loss for patch-based training + if self.opt.patch_size > 1 or self.opt.finetune_lips or True: + import lpips + # self.criterion_lpips_vgg = lpips.LPIPS(net='vgg').to(self.device) + self.criterion_lpips_alex = lpips.LPIPS(net='alex').to(self.device) + + # variable init + self.epoch = 0 + self.global_step = 0 + self.local_step = 0 + self.stats = { + "loss": [], + "valid_loss": [], + "results": [], # metrics[0], or valid_loss + "checkpoints": [], # record path of saved ckpt, to automatically remove old ckpt + "best_result": None, + } + + # auto fix + if len(metrics) == 0 or self.use_loss_as_metric: + self.best_mode = 'min' + + # workspace prepare + self.log_ptr = None + if self.workspace is not None: + os.makedirs(self.workspace, exist_ok=True) + self.log_path = os.path.join(workspace, f"log_{self.name}.txt") + self.log_ptr = open(self.log_path, "a+") + + self.ckpt_path = os.path.join(self.workspace, 'checkpoints') + self.best_path = f"{self.ckpt_path}/{self.name}.pth" + os.makedirs(self.ckpt_path, exist_ok=True) + + self.log(f'[INFO] Trainer: {self.name} | {self.time_stamp} | {self.device} | {"fp16" if self.fp16 else "fp32"} | {self.workspace}') + self.log(f'[INFO] #parameters: {sum([p.numel() for p in model.parameters() if p.requires_grad])}') + + if self.workspace is not None: + if self.use_checkpoint == "scratch": + self.log("[INFO] Training from scratch ...") + elif self.use_checkpoint == "latest": + self.log("[INFO] Loading latest checkpoint ...") + self.load_checkpoint() + elif self.use_checkpoint == "latest_model": + self.log("[INFO] Loading latest checkpoint (model only)...") + self.load_checkpoint(model_only=True) + elif self.use_checkpoint == "best": + if os.path.exists(self.best_path): + self.log("[INFO] Loading best checkpoint ...") + self.load_checkpoint(self.best_path) + else: + self.log(f"[INFO] {self.best_path} not found, loading latest ...") + self.load_checkpoint() + else: # path to ckpt + self.log(f"[INFO] Loading {self.use_checkpoint} ...") + self.load_checkpoint(self.use_checkpoint) + + def __del__(self): + if self.log_ptr: + self.log_ptr.close() + + + def log(self, *args, **kwargs): + if self.local_rank == 0: + if not self.mute: + #print(*args) + self.console.print(*args, **kwargs) + if self.log_ptr: + print(*args, file=self.log_ptr) + self.log_ptr.flush() # write immediately to file + + ### ------------------------------ + + def train_step(self, data): + + rays_o = data['rays_o'] # [B, N, 3] + rays_d = data['rays_d'] # [B, N, 3] + bg_coords = data['bg_coords'] # [1, N, 2] + poses = data['poses'] # [B, 6] + face_mask = data['face_mask'] # [B, N] + upface_mask = data['upface_mask'] # [B, N] + lowface_mask = data['lowface_mask'] # [B, N] + eye_mask = data['eye_mask'] # [B, N] + lhalf_mask = data['lhalf_mask'] + eye = data['eye'] # [B, 1] + auds = data['auds'] # [B, 29, 16] + index = data['index'] # [B] + loss_perception =0 + + if not self.opt.torso: + rgb = data['images'] # [B, N, 3] + else: + rgb = data['bg_torso_color'] + + B, N, C = rgb.shape + + if self.opt.color_space == 'linear': + rgb[..., :3] = srgb_to_linear(rgb[..., :3]) + + bg_color = data['bg_color'] + + if not self.opt.torso: + outputs = self.model.render(rays_o, rays_d, auds, bg_coords, poses, eye=eye, index=index, staged=False, bg_color=bg_color, perturb=True, force_all_rays=False if (self.opt.patch_size <= 1 and not self.opt.train_camera) else True, **vars(self.opt)) + else: + outputs = self.model.render_torso(rays_o, rays_d, auds, bg_coords, poses, eye=eye, index=index, staged=False, bg_color=bg_color, perturb=True, force_all_rays=False if (self.opt.patch_size <= 1 and not self.opt.train_camera) else True, **vars(self.opt)) + + if not self.opt.torso: + pred_rgb = outputs['image'] + else: + pred_rgb = outputs['torso_color'] + + + # loss factor + step_factor = min(self.global_step / self.opt.iters, 1.0) + # MSE loss + loss = self.criterion(pred_rgb, rgb).mean(-1) # [B, N, 3] --> [B, N] + + if self.opt.torso: + loss = loss.mean() + loss += ((1 - self.model.anchor_points[:, 3])**2).mean() + return pred_rgb, rgb, loss + + + if self.opt.unc_loss and not self.flip_finetune_lips: + alpha = 0.2 + uncertainty = outputs['uncertainty'] # [N], abs sum + beta = uncertainty + 1 + + unc_weight = F.softmax(uncertainty, dim=-1) * N + loss *= alpha + (1-alpha)*((1 - step_factor) + step_factor * unc_weight.detach()).clamp(0, 10) + + beta = uncertainty + 1 + norm_rgb = torch.norm((pred_rgb - rgb), dim=-1).detach() + loss_u = norm_rgb / (2*beta**2) + (torch.log(beta)**2) / 2 + loss_u *= face_mask.view(-1) + + loss += 0.01 * step_factor * loss_u + + + loss_static_uncertainty = (uncertainty * (~face_mask.view(-1))) + loss += 0.01 * step_factor * loss_static_uncertainty + + # patch-based rendering + if self.opt.patch_size > 1 and not self.opt.finetune_lips: + rgb = rgb.view(-1, self.opt.patch_size, self.opt.patch_size, 3).permute(0, 3, 1, 2).contiguous() * 2 - 1 + pred_rgb = pred_rgb.view(-1, self.opt.patch_size, self.opt.patch_size, 3).permute(0, 3, 1, 2).contiguous() * 2 - 1 + + + loss_lpips = self.criterion_lpips_alex(pred_rgb, rgb) + + loss = loss + 0.1 * loss_lpips + + # lips finetune + if self.opt.finetune_lips: + xmin, xmax, ymin, ymax = data['rect'] + rgb = rgb.view(-1, xmax - xmin, ymax - ymin, 3).permute(0, 3, 1, 2).contiguous() * 2 - 1 + pred_rgb = pred_rgb.view(-1, xmax - xmin, ymax - ymin, 3).permute(0, 3, 1, 2).contiguous() * 2 - 1 + + padding_h = max(0, (32 - rgb.shape[-2] + 1) // 2) + padding_w = max(0, (32 - rgb.shape[-1] + 1) // 2) + + if padding_w or padding_h: + rgb = torch.nn.functional.pad(rgb, (padding_w, padding_w, padding_h, padding_h)) + pred_rgb = torch.nn.functional.pad(pred_rgb, (padding_w, padding_w, padding_h, padding_h)) + + loss = loss + 0.01 * self.criterion_lpips_alex(pred_rgb, rgb) + # flip every step... if finetune lips + if self.flip_finetune_lips: + self.opt.finetune_lips = not self.opt.finetune_lips + + + loss = loss.mean() + + if self.opt.patch_size > 1 and not self.opt.finetune_lips: + if self.opt.pyramid_loss: + loss = loss + 0.1 * loss_perception + # print('loss', loss.item()) + + # weights_sum loss + # entropy to encourage weights_sum to be 0 or 1. + if self.opt.torso: + alphas = outputs['torso_alpha'].clamp(1e-5, 1 - 1e-5) + # alphas = alphas ** 2 # skewed entropy, favors 0 over 1 + loss_ws = - alphas * torch.log2(alphas) - (1 - alphas) * torch.log2(1 - alphas) + loss = loss + 1e-4 * loss_ws.mean() + + else: + alphas = outputs['weights_sum'].clamp(1e-5, 1 - 1e-5) + loss_ws = - alphas * torch.log2(alphas) - (1 - alphas) * torch.log2(1 - alphas) + loss = loss + 1e-4 * loss_ws.mean() + + # aud att loss (regions out of face should be static) + if self.opt.amb_aud_loss and not self.opt.torso: + ambient_aud = outputs['ambient_aud'] + loss_amb_aud = (ambient_aud * (~lowface_mask.view(-1))).mean() + # gradually increase it + lambda_amb = step_factor * self.opt.lambda_amb + loss += lambda_amb * loss_amb_aud + + # eye att loss + if self.opt.amb_eye_loss and not self.opt.torso: + ambient_eye = outputs['ambient_eye'] + loss_cross = ((ambient_eye)*(lowface_mask.view(-1))).mean() + lambda_amb = step_factor * self.opt.lambda_amb + loss += lambda_amb * loss_cross + + # regularize + if self.global_step % 16 == 0 and not self.flip_finetune_lips: + xyzs, dirs, enc_a, ind_code, eye = outputs['rays'] + xyz_delta = (torch.rand(size=xyzs.shape, dtype=xyzs.dtype, device=xyzs.device) * 2 - 1) * 1e-3 + with torch.no_grad(): + sigmas_raw, rgbs_raw, ambient_aud_raw, ambient_eye_raw, unc_raw = self.model(xyzs, dirs, enc_a.detach(), ind_code.detach(), eye) + sigmas_reg, rgbs_reg, ambient_aud_reg, ambient_eye_reg, unc_reg = self.model(xyzs+xyz_delta, dirs, enc_a.detach(), ind_code.detach(), eye) + + lambda_reg = step_factor * 1e-5 + reg_loss = 0 + if self.opt.unc_loss: + reg_loss += self.criterion(unc_raw, unc_reg).mean() + if self.opt.amb_aud_loss: + reg_loss += self.criterion(ambient_aud_raw, ambient_aud_reg).mean() + if self.opt.amb_eye_loss: + reg_loss += self.criterion(ambient_eye_raw, ambient_eye_reg).mean() + + loss += reg_loss * lambda_reg + + return pred_rgb, rgb, loss + + + def eval_step(self, data): + + rays_o = data['rays_o'] # [B, N, 3] + rays_d = data['rays_d'] # [B, N, 3] + bg_coords = data['bg_coords'] # [1, N, 2] + poses = data['poses'] # [B, 7] + + images = data['images'] # [B, H, W, 3/4] + if self.opt.portrait: + images = data['bg_gt_images'] + auds = data['auds'] + index = data['index'] # [B] + eye = data['eye'] # [B, 1] + + B, H, W, C = images.shape + + if self.opt.color_space == 'linear': + images[..., :3] = srgb_to_linear(images[..., :3]) + + # eval with fixed background color + # bg_color = 1 + bg_color = data['bg_color'] + + outputs = self.model.render(rays_o, rays_d, auds, bg_coords, poses, eye=eye, index=index, staged=True, bg_color=bg_color, perturb=False, **vars(self.opt)) + + pred_rgb = outputs['image'].reshape(B, H, W, 3) + pred_depth = outputs['depth'].reshape(B, H, W) + pred_ambient_aud = outputs['ambient_aud'].reshape(B, H, W) + pred_ambient_eye = outputs['ambient_eye'].reshape(B, H, W) + pred_uncertainty = outputs['uncertainty'].reshape(B, H, W) + + loss_raw = self.criterion(pred_rgb, images) + loss = loss_raw.mean() + + return pred_rgb, pred_depth, pred_ambient_aud, pred_ambient_eye, pred_uncertainty, images, loss, loss_raw + + # moved out bg_color and perturb for more flexible control... + def test_step(self, data, bg_color=None, perturb=False): + + rays_o = data['rays_o'] # [B, N, 3] + rays_d = data['rays_d'] # [B, N, 3] + bg_coords = data['bg_coords'] # [1, N, 2] + poses = data['poses'] # [B, 7] + + auds = data['auds'] # [B, 29, 16] + index = data['index'] + H, W = data['H'], data['W'] + + # allow using a fixed eye area (avoid eye blink) at test + if self.opt.exp_eye and self.opt.fix_eye >= 0: + eye = torch.FloatTensor([self.opt.fix_eye]).view(1, 1).to(self.device) + else: + eye = data['eye'] # [B, 1] + + if bg_color is not None: + bg_color = bg_color.to(self.device) + else: + bg_color = data['bg_color'] + + self.model.testing = True + outputs = self.model.render(rays_o, rays_d, auds, bg_coords, poses, eye=eye, index=index, staged=True, bg_color=bg_color, perturb=perturb, **vars(self.opt)) + self.model.testing = False + + pred_rgb = outputs['image'].reshape(-1, H, W, 3) + pred_depth = outputs['depth'].reshape(-1, H, W) + + return pred_rgb, pred_depth + + + def save_mesh(self, save_path=None, resolution=256, threshold=10): + + if save_path is None: + save_path = os.path.join(self.workspace, 'meshes', f'{self.name}_{self.epoch}.ply') + + self.log(f"==> Saving mesh to {save_path}") + + os.makedirs(os.path.dirname(save_path), exist_ok=True) + + def query_func(pts): + with torch.no_grad(): + with torch.cuda.amp.autocast(enabled=self.fp16): + sigma = self.model.density(pts.to(self.device))['sigma'] + return sigma + + vertices, triangles = extract_geometry(self.model.aabb_infer[:3], self.model.aabb_infer[3:], resolution=resolution, threshold=threshold, query_func=query_func) + + mesh = trimesh.Trimesh(vertices, triangles, process=False) # important, process=True leads to seg fault... + mesh.export(save_path) + + self.log(f"==> Finished saving mesh.") + + ### ------------------------------ + + def train(self, train_loader, valid_loader, max_epochs): + if self.use_tensorboardX and self.local_rank == 0: + self.writer = tensorboardX.SummaryWriter(os.path.join(self.workspace, "run", self.name)) + + # mark untrained region (i.e., not covered by any camera from the training dataset) + if self.model.cuda_ray: + self.model.mark_untrained_grid(train_loader._data.poses, train_loader._data.intrinsics) + + for epoch in range(self.epoch + 1, max_epochs + 1): + self.epoch = epoch + + self.train_one_epoch(train_loader) + + if self.workspace is not None and self.local_rank == 0: + self.save_checkpoint(full=True, best=False) + + if self.epoch % self.eval_interval == 0: + self.evaluate_one_epoch(valid_loader) + self.save_checkpoint(full=False, best=True) + + if self.use_tensorboardX and self.local_rank == 0: + self.writer.close() + + def evaluate(self, loader, name=None): + self.use_tensorboardX, use_tensorboardX = False, self.use_tensorboardX + self.evaluate_one_epoch(loader, name) + self.use_tensorboardX = use_tensorboardX + + # Function to blend two images with a mask + + def test(self, loader, save_path=None, name=None, write_image=False): + + if save_path is None: + save_path = os.path.join(self.workspace, 'results') + + if name is None: + name = f'{self.name}_ep{self.epoch:04d}' + + os.makedirs(save_path, exist_ok=True) + + self.log(f"==> Start Test, save results to {save_path}") + + pbar = tqdm.tqdm(total=len(loader) * loader.batch_size, bar_format='{percentage:3.0f}% {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]') + self.model.eval() + + all_preds = [] + all_preds_depth = [] + + with torch.no_grad(): + + for i, data in enumerate(loader): + + with torch.cuda.amp.autocast(enabled=self.fp16): + preds, preds_depth = self.test_step(data) + + path = os.path.join(save_path, f'{name}_{i:04d}_rgb.png') + path_depth = os.path.join(save_path, f'{name}_{i:04d}_depth.png') + + #self.log(f"[INFO] saving test image to {path}") + + if self.opt.color_space == 'linear': + preds = linear_to_srgb(preds) + if self.opt.portrait: + pred = blend_with_mask_cuda(preds[0], data["bg_gt_images"].squeeze(0), data["bg_face_mask"].squeeze(0)) + pred = (pred * 255).astype(np.uint8) + else: + pred = preds[0].detach().cpu().numpy() + pred = (pred * 255).astype(np.uint8) + + pred_depth = preds_depth[0].detach().cpu().numpy() + pred_depth = (pred_depth * 255).astype(np.uint8) + + if write_image: + imageio.imwrite(path, pred) + imageio.imwrite(path_depth, pred_depth) + + all_preds.append(pred) + all_preds_depth.append(pred_depth) + + pbar.update(loader.batch_size) + + # write video + all_preds = np.stack(all_preds, axis=0) + all_preds_depth = np.stack(all_preds_depth, axis=0) + imageio.mimwrite(os.path.join(save_path, f'{name}.mp4'), all_preds, fps=25, quality=8, macro_block_size=1) + imageio.mimwrite(os.path.join(save_path, f'{name}_depth.mp4'), all_preds_depth, fps=25, quality=8, macro_block_size=1) + if self.opt.aud != '' and self.opt.asr_model == 'ave': + os.system(f'ffmpeg -i {os.path.join(save_path, f"{name}.mp4")} -i {self.opt.aud} -strict -2 {os.path.join(save_path, f"{name}_audio.mp4")} -y') + + self.log(f"==> Finished Test.") + + # [GUI] just train for 16 steps, without any other overhead that may slow down rendering. + def train_gui(self, train_loader, step=16): + + self.model.train() + + total_loss = torch.tensor([0], dtype=torch.float32, device=self.device) + + loader = iter(train_loader) + + # mark untrained grid + if self.global_step == 0: + self.model.mark_untrained_grid(train_loader._data.poses, train_loader._data.intrinsics) + + for _ in range(step): + + # mimic an infinite loop dataloader (in case the total dataset is smaller than step) + try: + data = next(loader) + except StopIteration: + loader = iter(train_loader) + data = next(loader) + + # update grid every 16 steps + if self.model.cuda_ray and self.global_step % self.opt.update_extra_interval == 0: + with torch.cuda.amp.autocast(enabled=self.fp16): + self.model.update_extra_state() + + self.global_step += 1 + + self.optimizer.zero_grad() + + with torch.cuda.amp.autocast(enabled=self.fp16): + preds, truths, loss = self.train_step(data) + + self.scaler.scale(loss).backward() + self.scaler.step(self.optimizer) + self.scaler.update() + + if self.scheduler_update_every_step: + self.lr_scheduler.step() + + total_loss += loss.detach() + + if self.ema is not None and self.global_step % self.ema_update_interval == 0: + self.ema.update() + + average_loss = total_loss.item() / step + + if not self.scheduler_update_every_step: + if isinstance(self.lr_scheduler, torch.optim.lr_scheduler.ReduceLROnPlateau): + self.lr_scheduler.step(average_loss) + else: + self.lr_scheduler.step() + + outputs = { + 'loss': average_loss, + 'lr': self.optimizer.param_groups[0]['lr'], + } + + return outputs + + # [GUI] test on a single image + def test_gui(self, pose, intrinsics, W, H, auds, eye=None, index=0, bg_color=None, spp=1, downscale=1): + + # render resolution (may need downscale to for better frame rate) + rH = int(H * downscale) + rW = int(W * downscale) + intrinsics = intrinsics * downscale + + if auds is not None: + auds = auds.to(self.device) + + pose = torch.from_numpy(pose).unsqueeze(0).to(self.device) + rays = get_rays(pose, intrinsics, rH, rW, -1) + + bg_coords = get_bg_coords(rH, rW, self.device) + + if eye is not None: + eye = torch.FloatTensor([eye]).view(1, 1).to(self.device) + + data = { + 'rays_o': rays['rays_o'], + 'rays_d': rays['rays_d'], + 'H': rH, + 'W': rW, + 'auds': auds, + 'index': [index], # support choosing index for individual codes + 'eye': eye, + 'poses': pose, + 'bg_coords': bg_coords, + } + + self.model.eval() + + if self.ema is not None: + self.ema.store() + self.ema.copy_to() + + with torch.no_grad(): + with torch.cuda.amp.autocast(enabled=self.fp16): + # here spp is used as perturb random seed! + # face: do not perturb for the first spp, else lead to scatters. + preds, preds_depth = self.test_step(data, bg_color=bg_color, perturb=False if spp == 1 else spp) + + if self.ema is not None: + self.ema.restore() + + # interpolation to the original resolution + if downscale != 1: + # TODO: have to permute twice with torch... + preds = F.interpolate(preds.permute(0, 3, 1, 2), size=(H, W), mode='bilinear').permute(0, 2, 3, 1).contiguous() + preds_depth = F.interpolate(preds_depth.unsqueeze(1), size=(H, W), mode='nearest').squeeze(1) + + if self.opt.color_space == 'linear': + preds = linear_to_srgb(preds) + + pred = preds[0].detach().cpu().numpy() + pred_depth = preds_depth[0].detach().cpu().numpy() + + outputs = { + 'image': pred, + 'depth': pred_depth, + } + + return outputs + + # [GUI] test with provided data + def test_gui_with_data(self, data, W, H): + + self.model.eval() + + if self.ema is not None: + self.ema.store() + self.ema.copy_to() + + with torch.no_grad(): + with torch.cuda.amp.autocast(enabled=self.fp16): + # here spp is used as perturb random seed! + # face: do not perturb for the first spp, else lead to scatters. + preds, preds_depth = self.test_step(data, perturb=False) + + if self.ema is not None: + self.ema.restore() + + if self.opt.color_space == 'linear': + preds = linear_to_srgb(preds) + + # the H/W in data may be differnt to GUI, so we still need to resize... + preds = F.interpolate(preds.permute(0, 3, 1, 2), size=(H, W), mode='bilinear').permute(0, 2, 3, 1).contiguous() + preds_depth = F.interpolate(preds_depth.unsqueeze(1), size=(H, W), mode='nearest').squeeze(1) + + pred = preds[0].detach().cpu().numpy() + pred_depth = preds_depth[0].detach().cpu().numpy() + + outputs = { + 'image': pred, + 'depth': pred_depth, + } + + return outputs + + def train_one_epoch(self, loader): + self.log(f"==> Start Training Epoch {self.epoch}, lr={self.optimizer.param_groups[0]['lr']:.6f} ...") + + total_loss = 0 + if self.local_rank == 0 and self.report_metric_at_train: + for metric in self.metrics: + metric.clear() + + self.model.train() + + # distributedSampler: must call set_epoch() to shuffle indices across multiple epochs + # ref: https://pytorch.org/docs/stable/data.html + if self.world_size > 1: + loader.sampler.set_epoch(self.epoch) + + if self.local_rank == 0: + pbar = tqdm.tqdm(total=len(loader) * loader.batch_size, mininterval=1, bar_format='{desc}: {percentage:3.0f}% {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]') + + self.local_step = 0 + + for data in loader: + # update grid every 16 steps + if self.model.cuda_ray and self.global_step % self.opt.update_extra_interval == 0: + with torch.cuda.amp.autocast(enabled=self.fp16): + self.model.update_extra_state() + + self.local_step += 1 + self.global_step += 1 + + self.optimizer.zero_grad() + + with torch.cuda.amp.autocast(enabled=self.fp16): + preds, truths, loss = self.train_step(data) + + self.scaler.scale(loss).backward() + self.scaler.step(self.optimizer) + self.scaler.update() + + if self.scheduler_update_every_step: + self.lr_scheduler.step() + + loss_val = loss.item() + total_loss += loss_val + + if self.ema is not None and self.global_step % self.ema_update_interval == 0: + self.ema.update() + + if self.local_rank == 0: + if self.report_metric_at_train: + for metric in self.metrics: + metric.update(preds, truths) + + if self.use_tensorboardX: + self.writer.add_scalar("train/loss", loss_val, self.global_step) + self.writer.add_scalar("train/lr", self.optimizer.param_groups[0]['lr'], self.global_step) + + if self.scheduler_update_every_step: + pbar.set_description(f"loss={loss_val:.4f} ({total_loss/self.local_step:.4f}), lr={self.optimizer.param_groups[0]['lr']:.6f}") + else: + pbar.set_description(f"loss={loss_val:.4f} ({total_loss/self.local_step:.4f})") + pbar.update(loader.batch_size) + + average_loss = total_loss / self.local_step + self.stats["loss"].append(average_loss) + + if self.local_rank == 0: + pbar.close() + if self.report_metric_at_train: + for metric in self.metrics: + self.log(metric.report(), style="red") + if self.use_tensorboardX: + metric.write(self.writer, self.epoch, prefix="train") + metric.clear() + + if not self.scheduler_update_every_step: + if isinstance(self.lr_scheduler, torch.optim.lr_scheduler.ReduceLROnPlateau): + self.lr_scheduler.step(average_loss) + else: + self.lr_scheduler.step() + self.log(f"loss={average_loss:.4f}") + self.log(f"==> Finished Epoch {self.epoch}.") + + + def evaluate_one_epoch(self, loader, name=None): + self.log(f"++> Evaluate at epoch {self.epoch} ...") + + if name is None: + name = f'{self.name}_ep{self.epoch:04d}' + + total_loss = 0 + if self.local_rank == 0: + for metric in self.metrics: + metric.clear() + + self.model.eval() + + if self.ema is not None: + self.ema.store() + self.ema.copy_to() + + if self.local_rank == 0: + pbar = tqdm.tqdm(total=len(loader) * loader.batch_size, bar_format='{desc}: {percentage:3.0f}% {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]') + + with torch.no_grad(): + self.local_step = 0 + + for data in loader: + self.local_step += 1 + + with torch.cuda.amp.autocast(enabled=self.fp16): + preds, preds_depth, pred_ambient_aud, pred_ambient_eye, pred_uncertainty, truths, loss, loss_raw = self.eval_step(data) + loss_val = loss.item() + total_loss += loss_val + + # only rank = 0 will perform evaluation. + if self.local_rank == 0: + + # save image + save_path = os.path.join(self.workspace, 'validation', f'{name}_{self.local_step:04d}_rgb.png') + save_path_depth = os.path.join(self.workspace, 'validation', f'{name}_{self.local_step:04d}_depth.png') + save_path_ambient_aud = os.path.join(self.workspace, 'validation', f'{name}_{self.local_step:04d}_aud.png') + save_path_ambient_eye = os.path.join(self.workspace, 'validation', f'{name}_{self.local_step:04d}_eye.png') + save_path_uncertainty = os.path.join(self.workspace, 'validation', f'{name}_{self.local_step:04d}_uncertainty.png') + + os.makedirs(os.path.dirname(save_path), exist_ok=True) + + if self.opt.color_space == 'linear': + preds = linear_to_srgb(preds) + + if self.opt.portrait: + pred = blend_with_mask_cuda(preds[0], data["bg_gt_images"].squeeze(0),data["bg_face_mask"].squeeze(0)) + preds = torch.from_numpy(pred).unsqueeze(0).to(self.device).float() + else: + pred = preds[0].detach().cpu().numpy() + pred_depth = preds_depth[0].detach().cpu().numpy() + + for metric in self.metrics: + metric.update(preds, truths) + # loss_raw = loss_raw[0].mean(-1).detach().cpu().numpy() + # loss_raw = (loss_raw - np.min(loss_raw)) / (np.max(loss_raw) - np.min(loss_raw)) + pred_ambient_aud = pred_ambient_aud[0].detach().cpu().numpy() + pred_ambient_aud /= np.max(pred_ambient_aud) + pred_ambient_eye = pred_ambient_eye[0].detach().cpu().numpy() + pred_ambient_eye /= np.max(pred_ambient_eye) + # pred_ambient = pred_ambient / 16 + # print(pred_ambient.shape) + pred_uncertainty = pred_uncertainty[0].detach().cpu().numpy() + # pred_uncertainty = (pred_uncertainty - np.min(pred_uncertainty)) / (np.max(pred_uncertainty) - np.min(pred_uncertainty)) + pred_uncertainty /= np.max(pred_uncertainty) + + cv2.imwrite(save_path, cv2.cvtColor((pred * 255).astype(np.uint8), cv2.COLOR_RGB2BGR)) + + if not self.opt.torso: + cv2.imwrite(save_path_depth, (pred_depth * 255).astype(np.uint8)) + # cv2.imwrite(save_path_error, (loss_raw * 255).astype(np.uint8)) + cv2.imwrite(save_path_ambient_aud, (pred_ambient_aud * 255).astype(np.uint8)) + cv2.imwrite(save_path_ambient_eye, (pred_ambient_eye * 255).astype(np.uint8)) + cv2.imwrite(save_path_uncertainty, (pred_uncertainty * 255).astype(np.uint8)) + #cv2.imwrite(save_path_gt, cv2.cvtColor((linear_to_srgb(truths[0].detach().cpu().numpy()) * 255).astype(np.uint8), cv2.COLOR_RGB2BGR)) + + pbar.set_description(f"loss={loss_val:.4f} ({total_loss/self.local_step:.4f})") + pbar.update(loader.batch_size) + + + average_loss = total_loss / self.local_step + self.stats["valid_loss"].append(average_loss) + + if self.local_rank == 0: + pbar.close() + if not self.use_loss_as_metric and len(self.metrics) > 0: + result = self.metrics[0].measure() + self.stats["results"].append(result if self.best_mode == 'min' else - result) # if max mode, use -result + else: + self.stats["results"].append(average_loss) # if no metric, choose best by min loss + + for metric in self.metrics: + self.log(metric.report(), style="blue") + if self.use_tensorboardX: + metric.write(self.writer, self.epoch, prefix="evaluate") + metric.clear() + + if self.ema is not None: + self.ema.restore() + + self.log(f"++> Evaluate epoch {self.epoch} Finished.") + + def save_checkpoint(self, name=None, full=False, best=False, remove_old=True): + + if name is None: + name = f'{self.name}_ep{self.epoch:04d}' + + state = { + 'epoch': self.epoch, + 'global_step': self.global_step, + 'stats': self.stats, + } + + + state['mean_count'] = self.model.mean_count + state['mean_density'] = self.model.mean_density + state['mean_density_torso'] = self.model.mean_density_torso + + if full: + state['optimizer'] = self.optimizer.state_dict() + state['lr_scheduler'] = self.lr_scheduler.state_dict() + state['scaler'] = self.scaler.state_dict() + if self.ema is not None: + state['ema'] = self.ema.state_dict() + + if not best: + + state['model'] = self.model.state_dict() + + file_path = f"{self.ckpt_path}/{name}.pth" + + if remove_old: + self.stats["checkpoints"].append(file_path) + + if len(self.stats["checkpoints"]) > self.max_keep_ckpt: + old_ckpt = self.stats["checkpoints"].pop(0) + if os.path.exists(old_ckpt): + os.remove(old_ckpt) + + + torch.save(state, file_path) + + else: + if len(self.stats["results"]) > 0: + # always save new as best... (since metric cannot really reflect performance...) + if True: + + # save ema results + if self.ema is not None: + self.ema.store() + self.ema.copy_to() + + state['model'] = self.model.state_dict() + + # we don't consider continued training from the best ckpt, so we discard the unneeded density_grid to save some storage (especially important for dnerf) + if 'density_grid' in state['model']: + del state['model']['density_grid'] + + if self.ema is not None: + self.ema.restore() + + torch.save(state, self.best_path) + else: + self.log(f"[WARN] no evaluated results found, skip saving best checkpoint.") + + def load_checkpoint(self, checkpoint=None, model_only=False): + if checkpoint is None: + checkpoint_list = sorted(glob.glob(f'{self.ckpt_path}/{self.name}_ep*.pth')) + if checkpoint_list: + checkpoint = checkpoint_list[-1] + self.log(f"[INFO] Latest checkpoint is {checkpoint}") + else: + self.log("[WARN] No checkpoint found, model randomly initialized.") + return + + checkpoint_dict = torch.load(checkpoint, map_location=self.device) + + if 'model' not in checkpoint_dict: + self.model.load_state_dict(checkpoint_dict) + self.log("[INFO] loaded bare model.") + return + + missing_keys, unexpected_keys = self.model.load_state_dict(checkpoint_dict['model'], strict=False) + self.log("[INFO] loaded model.") + if len(missing_keys) > 0: + self.log(f"[WARN] missing keys: {missing_keys}") + if len(unexpected_keys) > 0: + self.log(f"[WARN] unexpected keys: {unexpected_keys}") + + if self.ema is not None and 'ema' in checkpoint_dict: + self.ema.load_state_dict(checkpoint_dict['ema']) + + + if 'mean_count' in checkpoint_dict: + self.model.mean_count = checkpoint_dict['mean_count'] + if 'mean_density' in checkpoint_dict: + self.model.mean_density = checkpoint_dict['mean_density'] + if 'mean_density_torso' in checkpoint_dict: + self.model.mean_density_torso = checkpoint_dict['mean_density_torso'] + + if model_only: + return + + self.stats = checkpoint_dict['stats'] + self.epoch = checkpoint_dict['epoch'] + self.global_step = checkpoint_dict['global_step'] + self.log(f"[INFO] load at epoch {self.epoch}, global step {self.global_step}") + + if self.optimizer and 'optimizer' in checkpoint_dict: + try: + self.optimizer.load_state_dict(checkpoint_dict['optimizer']) + self.log("[INFO] loaded optimizer.") + except: + self.log("[WARN] Failed to load optimizer.") + + if self.lr_scheduler and 'lr_scheduler' in checkpoint_dict: + try: + self.lr_scheduler.load_state_dict(checkpoint_dict['lr_scheduler']) + self.log("[INFO] loaded scheduler.") + except: + self.log("[WARN] Failed to load scheduler.") + + if self.scaler and 'scaler' in checkpoint_dict: + try: + self.scaler.load_state_dict(checkpoint_dict['scaler']) + self.log("[INFO] loaded scaler.") + except: + self.log("[WARN] Failed to load scaler.") + + +def load_wav(path, sr): + return librosa.core.load(path, sr=sr)[0] + + +def preemphasis(wav, k): + return signal.lfilter([1, -k], [1], wav) + + +def melspectrogram(wav): + D = _stft(preemphasis(wav, 0.97)) + S = _amp_to_db(_linear_to_mel(np.abs(D))) - 20 + + return _normalize(S) + + +def _stft(y): + return librosa.stft(y=y, n_fft=800, hop_length=200, win_length=800) + + +def _linear_to_mel(spectogram): + global _mel_basis + _mel_basis = _build_mel_basis() + return np.dot(_mel_basis, spectogram) + + +def _build_mel_basis(): + return librosa.filters.mel(sr=16000, n_fft=800, n_mels=80, fmin=55, fmax=7600) + + +def _amp_to_db(x): + min_level = np.exp(-5 * np.log(10)) + return 20 * np.log10(np.maximum(min_level, x)) + + +def _normalize(S): + return np.clip((2 * 4.) * ((S - -100) / (--100)) - 4., -4., 4.) + + +class AudDataset(object): + def __init__(self, wavpath): + wav = load_wav(wavpath, 16000) + + self.orig_mel = melspectrogram(wav).T + self.data_len = int((self.orig_mel.shape[0] - 16) / 80. * float(25)) + 2 + + def get_frame_id(self, frame): + return int(basename(frame).split('.')[0]) + + def crop_audio_window(self, spec, start_frame): + if type(start_frame) == int: + start_frame_num = start_frame + else: + start_frame_num = self.get_frame_id(start_frame) + start_idx = int(80. * (start_frame_num / float(25))) + + end_idx = start_idx + 16 + if end_idx > spec.shape[0]: + # print(end_idx, spec.shape[0]) + end_idx = spec.shape[0] + start_idx = end_idx - 16 + + return spec[start_idx: end_idx, :] + + def __len__(self): + return self.data_len + + def __getitem__(self, idx): + + mel = self.crop_audio_window(self.orig_mel.copy(), idx) + if (mel.shape[0] != 16): + raise Exception('mel.shape[0] != 16') + mel = torch.FloatTensor(mel.T).unsqueeze(0) + + return mel diff --git a/raymarching/__init__.py b/raymarching/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..26d3cc6d4430c112603bba68bbd1bedd0ccbc7ac --- /dev/null +++ b/raymarching/__init__.py @@ -0,0 +1 @@ +from .raymarching import * \ No newline at end of file diff --git a/raymarching/backend.py b/raymarching/backend.py new file mode 100644 index 0000000000000000000000000000000000000000..d8f65d6fedac26d6e189350d87178a3b8b92c045 --- /dev/null +++ b/raymarching/backend.py @@ -0,0 +1,40 @@ +import os +from torch.utils.cpp_extension import load + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +_backend = load(name='_raymarching_face', + extra_cflags=c_flags, + extra_cuda_cflags=nvcc_flags, + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'raymarching.cu', + 'bindings.cpp', + ]], + ) + +__all__ = ['_backend'] \ No newline at end of file diff --git a/raymarching/raymarching.py b/raymarching/raymarching.py new file mode 100644 index 0000000000000000000000000000000000000000..8acc894cad12952ab01bd35ba1d0d5e43fc79e16 --- /dev/null +++ b/raymarching/raymarching.py @@ -0,0 +1,671 @@ +import numpy as np +import time + +import torch +import torch.nn as nn +from torch.autograd import Function +from torch.cuda.amp import custom_bwd, custom_fwd + +try: + import _raymarching_face as _backend +except ImportError: + from .backend import _backend + +# ---------------------------------------- +# utils +# ---------------------------------------- + +class _near_far_from_aabb(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, rays_o, rays_d, aabb, min_near=0.2): + ''' near_far_from_aabb, CUDA implementation + Calculate rays' intersection time (near and far) with aabb + Args: + rays_o: float, [N, 3] + rays_d: float, [N, 3] + aabb: float, [6], (xmin, ymin, zmin, xmax, ymax, zmax) + min_near: float, scalar + Returns: + nears: float, [N] + fars: float, [N] + ''' + if not rays_o.is_cuda: rays_o = rays_o.cuda() + if not rays_d.is_cuda: rays_d = rays_d.cuda() + + rays_o = rays_o.contiguous().view(-1, 3) + rays_d = rays_d.contiguous().view(-1, 3) + + N = rays_o.shape[0] # num rays + + nears = torch.empty(N, dtype=rays_o.dtype, device=rays_o.device) + fars = torch.empty(N, dtype=rays_o.dtype, device=rays_o.device) + + _backend.near_far_from_aabb(rays_o, rays_d, aabb, N, min_near, nears, fars) + + return nears, fars + +near_far_from_aabb = _near_far_from_aabb.apply + + +class _sph_from_ray(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, rays_o, rays_d, radius): + ''' sph_from_ray, CUDA implementation + get spherical coordinate on the background sphere from rays. + Assume rays_o are inside the Sphere(radius). + Args: + rays_o: [N, 3] + rays_d: [N, 3] + radius: scalar, float + Return: + coords: [N, 2], in [-1, 1], theta and phi on a sphere. (further-surface) + ''' + if not rays_o.is_cuda: rays_o = rays_o.cuda() + if not rays_d.is_cuda: rays_d = rays_d.cuda() + + rays_o = rays_o.contiguous().view(-1, 3) + rays_d = rays_d.contiguous().view(-1, 3) + + N = rays_o.shape[0] # num rays + + coords = torch.empty(N, 2, dtype=rays_o.dtype, device=rays_o.device) + + _backend.sph_from_ray(rays_o, rays_d, radius, N, coords) + + return coords + +sph_from_ray = _sph_from_ray.apply + + +class _morton3D(Function): + @staticmethod + def forward(ctx, coords): + ''' morton3D, CUDA implementation + Args: + coords: [N, 3], int32, in [0, 128) (for some reason there is no uint32 tensor in torch...) + TODO: check if the coord range is valid! (current 128 is safe) + Returns: + indices: [N], int32, in [0, 128^3) + + ''' + if not coords.is_cuda: coords = coords.cuda() + + N = coords.shape[0] + + indices = torch.empty(N, dtype=torch.int32, device=coords.device) + + _backend.morton3D(coords.int(), N, indices) + + return indices + +morton3D = _morton3D.apply + +class _morton3D_invert(Function): + @staticmethod + def forward(ctx, indices): + ''' morton3D_invert, CUDA implementation + Args: + indices: [N], int32, in [0, 128^3) + Returns: + coords: [N, 3], int32, in [0, 128) + + ''' + if not indices.is_cuda: indices = indices.cuda() + + N = indices.shape[0] + + coords = torch.empty(N, 3, dtype=torch.int32, device=indices.device) + + _backend.morton3D_invert(indices.int(), N, coords) + + return coords + +morton3D_invert = _morton3D_invert.apply + + +class _packbits(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, grid, thresh, bitfield=None): + ''' packbits, CUDA implementation + Pack up the density grid into a bit field to accelerate ray marching. + Args: + grid: float, [C, H * H * H], assume H % 2 == 0 + thresh: float, threshold + Returns: + bitfield: uint8, [C, H * H * H / 8] + ''' + if not grid.is_cuda: grid = grid.cuda() + grid = grid.contiguous() + + C = grid.shape[0] + H3 = grid.shape[1] + N = C * H3 // 8 + + if bitfield is None: + bitfield = torch.empty(N, dtype=torch.uint8, device=grid.device) + + _backend.packbits(grid, N, thresh, bitfield) + + return bitfield + +packbits = _packbits.apply + + +class _morton3D_dilation(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, grid): + ''' max pooling with morton coord, CUDA implementation + or maybe call it dilation... we don't support adjust kernel size. + Args: + grid: float, [C, H * H * H], assume H % 2 == 0 + Returns: + grid_dilate: float, [C, H * H * H], assume H % 2 == 0bitfield: uint8, [C, H * H * H / 8] + ''' + if not grid.is_cuda: grid = grid.cuda() + grid = grid.contiguous() + + C = grid.shape[0] + H3 = grid.shape[1] + H = int(np.cbrt(H3)) + grid_dilation = torch.empty_like(grid) + + _backend.morton3D_dilation(grid, C, H, grid_dilation) + + return grid_dilation + +morton3D_dilation = _morton3D_dilation.apply + +# ---------------------------------------- +# train functions +# ---------------------------------------- + +class _march_rays_train(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, rays_o, rays_d, bound, density_bitfield, C, H, nears, fars, step_counter=None, mean_count=-1, perturb=False, align=-1, force_all_rays=False, dt_gamma=0, max_steps=1024): + ''' march rays to generate points (forward only) + Args: + rays_o/d: float, [N, 3] + bound: float, scalar + density_bitfield: uint8: [CHHH // 8] + C: int + H: int + nears/fars: float, [N] + step_counter: int32, (2), used to count the actual number of generated points. + mean_count: int32, estimated mean steps to accelerate training. (but will randomly drop rays if the actual point count exceeded this threshold.) + perturb: bool + align: int, pad output so its size is dividable by align, set to -1 to disable. + force_all_rays: bool, ignore step_counter and mean_count, always calculate all rays. Useful if rendering the whole image, instead of some rays. + dt_gamma: float, called cone_angle in instant-ngp, exponentially accelerate ray marching if > 0. (very significant effect, but generally lead to worse performance) + max_steps: int, max number of sampled points along each ray, also affect min_stepsize. + Returns: + xyzs: float, [M, 3], all generated points' coords. (all rays concated, need to use `rays` to extract points belonging to each ray) + dirs: float, [M, 3], all generated points' view dirs. + deltas: float, [M, 2], first is delta_t, second is rays_t + rays: int32, [N, 3], all rays' (index, point_offset, point_count), e.g., xyzs[rays[i, 1]:rays[i, 1] + rays[i, 2]] --> points belonging to rays[i, 0] + ''' + + if not rays_o.is_cuda: rays_o = rays_o.cuda() + if not rays_d.is_cuda: rays_d = rays_d.cuda() + if not density_bitfield.is_cuda: density_bitfield = density_bitfield.cuda() + + rays_o = rays_o.contiguous().view(-1, 3) + rays_d = rays_d.contiguous().view(-1, 3) + density_bitfield = density_bitfield.contiguous() + + N = rays_o.shape[0] # num rays + M = N * max_steps # init max points number in total + + # running average based on previous epoch (mimic `measured_batch_size_before_compaction` in instant-ngp) + # It estimate the max points number to enable faster training, but will lead to random ignored rays if underestimated. + if not force_all_rays and mean_count > 0: + if align > 0: + mean_count += align - mean_count % align + M = mean_count + + xyzs = torch.zeros(M, 3, dtype=rays_o.dtype, device=rays_o.device) + dirs = torch.zeros(M, 3, dtype=rays_o.dtype, device=rays_o.device) + deltas = torch.zeros(M, 2, dtype=rays_o.dtype, device=rays_o.device) + rays = torch.empty(N, 3, dtype=torch.int32, device=rays_o.device) # id, offset, num_steps + + if step_counter is None: + step_counter = torch.zeros(2, dtype=torch.int32, device=rays_o.device) # point counter, ray counter + + if perturb: + noises = torch.rand(N, dtype=rays_o.dtype, device=rays_o.device) + else: + noises = torch.zeros(N, dtype=rays_o.dtype, device=rays_o.device) + + _backend.march_rays_train(rays_o, rays_d, density_bitfield, bound, dt_gamma, max_steps, N, C, H, M, nears, fars, xyzs, dirs, deltas, rays, step_counter, noises) # m is the actually used points number + + #print(step_counter, M) + + # only used at the first (few) epochs. + if force_all_rays or mean_count <= 0: + m = step_counter[0].item() # D2H copy + if align > 0: + m += align - m % align + xyzs = xyzs[:m] + dirs = dirs[:m] + deltas = deltas[:m] + + torch.cuda.empty_cache() + + ctx.save_for_backward(rays, deltas) + + return xyzs, dirs, deltas, rays + + # to support optimizing camera poses. + @staticmethod + @custom_bwd + def backward(ctx, grad_xyzs, grad_dirs, grad_deltas, grad_rays): + # grad_xyzs/dirs: [M, 3] + + rays, deltas = ctx.saved_tensors + + N = rays.shape[0] + M = grad_xyzs.shape[0] + + grad_rays_o = torch.zeros(N, 3, device=rays.device) + grad_rays_d = torch.zeros(N, 3, device=rays.device) + + _backend.march_rays_train_backward(grad_xyzs, grad_dirs, rays, deltas, N, M, grad_rays_o, grad_rays_d) + + return grad_rays_o, grad_rays_d, None, None, None, None, None, None, None, None, None, None, None, None, None + +march_rays_train = _march_rays_train.apply + + +class _composite_rays_train(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, sigmas, rgbs, ambient, deltas, rays, T_thresh=1e-4): + ''' composite rays' rgbs, according to the ray marching formula. + Args: + rgbs: float, [M, 3] + sigmas: float, [M,] + ambient: float, [M,] (after summing up the last dimension) + deltas: float, [M, 2] + rays: int32, [N, 3] + Returns: + weights_sum: float, [N,], the alpha channel + depth: float, [N, ], the Depth + image: float, [N, 3], the RGB channel (after multiplying alpha!) + ''' + + sigmas = sigmas.contiguous() + rgbs = rgbs.contiguous() + ambient = ambient.contiguous() + + M = sigmas.shape[0] + N = rays.shape[0] + + weights_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + ambient_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + depth = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + image = torch.empty(N, 3, dtype=sigmas.dtype, device=sigmas.device) + + _backend.composite_rays_train_forward(sigmas, rgbs, ambient, deltas, rays, M, N, T_thresh, weights_sum, ambient_sum, depth, image) + + ctx.save_for_backward(sigmas, rgbs, ambient, deltas, rays, weights_sum, ambient_sum, depth, image) + ctx.dims = [M, N, T_thresh] + + return weights_sum, ambient_sum, depth, image + + @staticmethod + @custom_bwd + def backward(ctx, grad_weights_sum, grad_ambient_sum, grad_depth, grad_image): + + # NOTE: grad_depth is not used now! It won't be propagated to sigmas. + + grad_weights_sum = grad_weights_sum.contiguous() + grad_ambient_sum = grad_ambient_sum.contiguous() + grad_image = grad_image.contiguous() + + sigmas, rgbs, ambient, deltas, rays, weights_sum, ambient_sum, depth, image = ctx.saved_tensors + M, N, T_thresh = ctx.dims + + grad_sigmas = torch.zeros_like(sigmas) + grad_rgbs = torch.zeros_like(rgbs) + grad_ambient = torch.zeros_like(ambient) + + _backend.composite_rays_train_backward(grad_weights_sum, grad_ambient_sum, grad_image, sigmas, rgbs, ambient, deltas, rays, weights_sum, ambient_sum, image, M, N, T_thresh, grad_sigmas, grad_rgbs, grad_ambient) + + return grad_sigmas, grad_rgbs, grad_ambient, None, None, None + + +composite_rays_train = _composite_rays_train.apply + +# ---------------------------------------- +# infer functions +# ---------------------------------------- + +class _march_rays(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, n_alive, n_step, rays_alive, rays_t, rays_o, rays_d, bound, density_bitfield, C, H, near, far, align=-1, perturb=False, dt_gamma=0, max_steps=1024): + ''' march rays to generate points (forward only, for inference) + Args: + n_alive: int, number of alive rays + n_step: int, how many steps we march + rays_alive: int, [N], the alive rays' IDs in N (N >= n_alive, but we only use first n_alive) + rays_t: float, [N], the alive rays' time, we only use the first n_alive. + rays_o/d: float, [N, 3] + bound: float, scalar + density_bitfield: uint8: [CHHH // 8] + C: int + H: int + nears/fars: float, [N] + align: int, pad output so its size is dividable by align, set to -1 to disable. + perturb: bool/int, int > 0 is used as the random seed. + dt_gamma: float, called cone_angle in instant-ngp, exponentially accelerate ray marching if > 0. (very significant effect, but generally lead to worse performance) + max_steps: int, max number of sampled points along each ray, also affect min_stepsize. + Returns: + xyzs: float, [n_alive * n_step, 3], all generated points' coords + dirs: float, [n_alive * n_step, 3], all generated points' view dirs. + deltas: float, [n_alive * n_step, 2], all generated points' deltas (here we record two deltas, the first is for RGB, the second for depth). + ''' + + if not rays_o.is_cuda: rays_o = rays_o.cuda() + if not rays_d.is_cuda: rays_d = rays_d.cuda() + + rays_o = rays_o.contiguous().view(-1, 3) + rays_d = rays_d.contiguous().view(-1, 3) + + M = n_alive * n_step + + if align > 0: + M += align - (M % align) + + xyzs = torch.zeros(M, 3, dtype=rays_o.dtype, device=rays_o.device) + dirs = torch.zeros(M, 3, dtype=rays_o.dtype, device=rays_o.device) + deltas = torch.zeros(M, 2, dtype=rays_o.dtype, device=rays_o.device) # 2 vals, one for rgb, one for depth + + if perturb: + # torch.manual_seed(perturb) # test_gui uses spp index as seed + noises = torch.rand(n_alive, dtype=rays_o.dtype, device=rays_o.device) + else: + noises = torch.zeros(n_alive, dtype=rays_o.dtype, device=rays_o.device) + + _backend.march_rays(n_alive, n_step, rays_alive, rays_t, rays_o, rays_d, bound, dt_gamma, max_steps, C, H, density_bitfield, near, far, xyzs, dirs, deltas, noises) + + return xyzs, dirs, deltas + +march_rays = _march_rays.apply + + +class _composite_rays(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # need to cast sigmas & rgbs to float + def forward(ctx, n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, weights_sum, depth, image, T_thresh=1e-2): + ''' composite rays' rgbs, according to the ray marching formula. (for inference) + Args: + n_alive: int, number of alive rays + n_step: int, how many steps we march + rays_alive: int, [n_alive], the alive rays' IDs in N (N >= n_alive) + rays_t: float, [N], the alive rays' time + sigmas: float, [n_alive * n_step,] + rgbs: float, [n_alive * n_step, 3] + deltas: float, [n_alive * n_step, 2], all generated points' deltas (here we record two deltas, the first is for RGB, the second for depth). + In-place Outputs: + weights_sum: float, [N,], the alpha channel + depth: float, [N,], the depth value + image: float, [N, 3], the RGB channel (after multiplying alpha!) + ''' + _backend.composite_rays(n_alive, n_step, T_thresh, rays_alive, rays_t, sigmas, rgbs, deltas, weights_sum, depth, image) + return tuple() + + +composite_rays = _composite_rays.apply + + +class _composite_rays_ambient(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # need to cast sigmas & rgbs to float + def forward(ctx, n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, weights_sum, depth, image, ambient_sum, T_thresh=1e-2): + _backend.composite_rays_ambient(n_alive, n_step, T_thresh, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, weights_sum, depth, image, ambient_sum) + return tuple() + + +composite_rays_ambient = _composite_rays_ambient.apply + + + + + +# custom + +class _composite_rays_train_sigma(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, sigmas, rgbs, ambient, deltas, rays, T_thresh=1e-4): + ''' composite rays' rgbs, according to the ray marching formula. + Args: + rgbs: float, [M, 3] + sigmas: float, [M,] + ambient: float, [M,] (after summing up the last dimension) + deltas: float, [M, 2] + rays: int32, [N, 3] + Returns: + weights_sum: float, [N,], the alpha channel + depth: float, [N, ], the Depth + image: float, [N, 3], the RGB channel (after multiplying alpha!) + ''' + + sigmas = sigmas.contiguous() + rgbs = rgbs.contiguous() + ambient = ambient.contiguous() + + M = sigmas.shape[0] + N = rays.shape[0] + + weights_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + ambient_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + depth = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + image = torch.empty(N, 3, dtype=sigmas.dtype, device=sigmas.device) + + _backend.composite_rays_train_sigma_forward(sigmas, rgbs, ambient, deltas, rays, M, N, T_thresh, weights_sum, ambient_sum, depth, image) + + ctx.save_for_backward(sigmas, rgbs, ambient, deltas, rays, weights_sum, ambient_sum, depth, image) + ctx.dims = [M, N, T_thresh] + + return weights_sum, ambient_sum, depth, image + + @staticmethod + @custom_bwd + def backward(ctx, grad_weights_sum, grad_ambient_sum, grad_depth, grad_image): + + # NOTE: grad_depth is not used now! It won't be propagated to sigmas. + + grad_weights_sum = grad_weights_sum.contiguous() + grad_ambient_sum = grad_ambient_sum.contiguous() + grad_image = grad_image.contiguous() + + sigmas, rgbs, ambient, deltas, rays, weights_sum, ambient_sum, depth, image = ctx.saved_tensors + M, N, T_thresh = ctx.dims + + grad_sigmas = torch.zeros_like(sigmas) + grad_rgbs = torch.zeros_like(rgbs) + grad_ambient = torch.zeros_like(ambient) + + _backend.composite_rays_train_sigma_backward(grad_weights_sum, grad_ambient_sum, grad_image, sigmas, rgbs, ambient, deltas, rays, weights_sum, ambient_sum, image, M, N, T_thresh, grad_sigmas, grad_rgbs, grad_ambient) + + return grad_sigmas, grad_rgbs, grad_ambient, None, None, None + + +composite_rays_train_sigma = _composite_rays_train_sigma.apply + + +class _composite_rays_ambient_sigma(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # need to cast sigmas & rgbs to float + def forward(ctx, n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, weights_sum, depth, image, ambient_sum, T_thresh=1e-2): + _backend.composite_rays_ambient_sigma(n_alive, n_step, T_thresh, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, weights_sum, depth, image, ambient_sum) + return tuple() + + +composite_rays_ambient_sigma = _composite_rays_ambient_sigma.apply + + + +# uncertainty +class _composite_rays_train_uncertainty(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, sigmas, rgbs, ambient, uncertainty, deltas, rays, T_thresh=1e-4): + ''' composite rays' rgbs, according to the ray marching formula. + Args: + rgbs: float, [M, 3] + sigmas: float, [M,] + ambient: float, [M,] (after summing up the last dimension) + deltas: float, [M, 2] + rays: int32, [N, 3] + Returns: + weights_sum: float, [N,], the alpha channel + depth: float, [N, ], the Depth + image: float, [N, 3], the RGB channel (after multiplying alpha!) + ''' + + sigmas = sigmas.contiguous() + rgbs = rgbs.contiguous() + ambient = ambient.contiguous() + uncertainty = uncertainty.contiguous() + + M = sigmas.shape[0] + N = rays.shape[0] + + weights_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + ambient_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + uncertainty_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + depth = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + image = torch.empty(N, 3, dtype=sigmas.dtype, device=sigmas.device) + + _backend.composite_rays_train_uncertainty_forward(sigmas, rgbs, ambient, uncertainty, deltas, rays, M, N, T_thresh, weights_sum, ambient_sum, uncertainty_sum, depth, image) + + ctx.save_for_backward(sigmas, rgbs, ambient, uncertainty, deltas, rays, weights_sum, ambient_sum, uncertainty_sum, depth, image) + ctx.dims = [M, N, T_thresh] + + return weights_sum, ambient_sum, uncertainty_sum, depth, image + + @staticmethod + @custom_bwd + def backward(ctx, grad_weights_sum, grad_ambient_sum, grad_uncertainty_sum, grad_depth, grad_image): + + # NOTE: grad_depth is not used now! It won't be propagated to sigmas. + + grad_weights_sum = grad_weights_sum.contiguous() + grad_ambient_sum = grad_ambient_sum.contiguous() + grad_uncertainty_sum = grad_uncertainty_sum.contiguous() + grad_image = grad_image.contiguous() + + sigmas, rgbs, ambient, uncertainty, deltas, rays, weights_sum, ambient_sum, uncertainty_sum, depth, image = ctx.saved_tensors + M, N, T_thresh = ctx.dims + + grad_sigmas = torch.zeros_like(sigmas) + grad_rgbs = torch.zeros_like(rgbs) + grad_ambient = torch.zeros_like(ambient) + grad_uncertainty = torch.zeros_like(uncertainty) + + _backend.composite_rays_train_uncertainty_backward(grad_weights_sum, grad_ambient_sum, grad_uncertainty_sum, grad_image, sigmas, rgbs, ambient, uncertainty, deltas, rays, weights_sum, ambient_sum, uncertainty_sum, image, M, N, T_thresh, grad_sigmas, grad_rgbs, grad_ambient, grad_uncertainty) + + return grad_sigmas, grad_rgbs, grad_ambient, grad_uncertainty, None, None, None + + +composite_rays_train_uncertainty = _composite_rays_train_uncertainty.apply + + +class _composite_rays_uncertainty(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # need to cast sigmas & rgbs to float + def forward(ctx, n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, uncertainties, weights_sum, depth, image, ambient_sum, uncertainty_sum, T_thresh=1e-2): + _backend.composite_rays_uncertainty(n_alive, n_step, T_thresh, rays_alive, rays_t, sigmas, rgbs, deltas, ambients, uncertainties, weights_sum, depth, image, ambient_sum, uncertainty_sum) + return tuple() + + +composite_rays_uncertainty = _composite_rays_uncertainty.apply + + + +# triplane(eye) +class _composite_rays_train_triplane(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) + def forward(ctx, sigmas, rgbs, amb_aud, amb_eye, uncertainty, deltas, rays, T_thresh=1e-4): + ''' composite rays' rgbs, according to the ray marching formula. + Args: + rgbs: float, [M, 3] + sigmas: float, [M,] + ambient: float, [M,] (after summing up the last dimension) + deltas: float, [M, 2] + rays: int32, [N, 3] + Returns: + weights_sum: float, [N,], the alpha channel + depth: float, [N, ], the Depth + image: float, [N, 3], the RGB channel (after multiplying alpha!) + ''' + + sigmas = sigmas.contiguous() + rgbs = rgbs.contiguous() + amb_aud = amb_aud.contiguous() + amb_eye = amb_eye.contiguous() + uncertainty = uncertainty.contiguous() + + M = sigmas.shape[0] + N = rays.shape[0] + + weights_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + amb_aud_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + amb_eye_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + uncertainty_sum = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + depth = torch.empty(N, dtype=sigmas.dtype, device=sigmas.device) + image = torch.empty(N, 3, dtype=sigmas.dtype, device=sigmas.device) + + _backend.composite_rays_train_triplane_forward(sigmas, rgbs, amb_aud, amb_eye, uncertainty, deltas, rays, M, N, T_thresh, weights_sum, amb_aud_sum, amb_eye_sum, uncertainty_sum, depth, image) + + ctx.save_for_backward(sigmas, rgbs, amb_aud, amb_eye, uncertainty, deltas, rays, weights_sum, amb_aud_sum, amb_eye_sum, uncertainty_sum, depth, image) + ctx.dims = [M, N, T_thresh] + + return weights_sum, amb_aud_sum, amb_eye_sum, uncertainty_sum, depth, image + + @staticmethod + @custom_bwd + def backward(ctx, grad_weights_sum, grad_amb_aud_sum, grad_amb_eye_sum, grad_uncertainty_sum, grad_depth, grad_image): + + # NOTE: grad_depth is not used now! It won't be propagated to sigmas. + + grad_weights_sum = grad_weights_sum.contiguous() + grad_amb_aud_sum = grad_amb_aud_sum.contiguous() + grad_amb_eye_sum = grad_amb_eye_sum.contiguous() + grad_uncertainty_sum = grad_uncertainty_sum.contiguous() + grad_image = grad_image.contiguous() + + sigmas, rgbs, amb_aud, amb_eye, uncertainty, deltas, rays, weights_sum, amb_aud_sum, amb_eye_sum, uncertainty_sum, depth, image = ctx.saved_tensors + M, N, T_thresh = ctx.dims + + grad_sigmas = torch.zeros_like(sigmas) + grad_rgbs = torch.zeros_like(rgbs) + grad_amb_aud = torch.zeros_like(amb_aud) + grad_amb_eye = torch.zeros_like(amb_eye) + grad_uncertainty = torch.zeros_like(uncertainty) + + _backend.composite_rays_train_triplane_backward(grad_weights_sum, grad_amb_aud_sum, grad_amb_eye_sum, grad_uncertainty_sum, grad_image, sigmas, rgbs, amb_aud, amb_eye, uncertainty, deltas, rays, weights_sum, amb_aud_sum, amb_eye_sum, uncertainty_sum, image, M, N, T_thresh, grad_sigmas, grad_rgbs, grad_amb_aud, grad_amb_eye, grad_uncertainty) + + return grad_sigmas, grad_rgbs, grad_amb_aud, grad_amb_eye, grad_uncertainty, None, None, None + + +composite_rays_train_triplane = _composite_rays_train_triplane.apply + + +class _composite_rays_triplane(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # need to cast sigmas & rgbs to float + def forward(ctx, n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, deltas, ambs_aud, ambs_eye, uncertainties, weights_sum, depth, image, amb_aud_sum, amb_eye_sum, uncertainty_sum, T_thresh=1e-2): + _backend.composite_rays_triplane(n_alive, n_step, T_thresh, rays_alive, rays_t, sigmas, rgbs, deltas, ambs_aud, ambs_eye, uncertainties, weights_sum, depth, image, amb_aud_sum, amb_eye_sum, uncertainty_sum) + return tuple() + + +composite_rays_triplane = _composite_rays_triplane.apply \ No newline at end of file diff --git a/raymarching/setup.py b/raymarching/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..6a7e62f71b7b3a13e05fbc4b6b53c602da86bd14 --- /dev/null +++ b/raymarching/setup.py @@ -0,0 +1,63 @@ +import os +from setuptools import setup +from torch.utils.cpp_extension import BuildExtension, CUDAExtension + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + # '-lineinfo', # to debug illegal memory access + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +''' +Usage: + +python setup.py build_ext --inplace # build extensions locally, do not install (only can be used from the parent directory) + +python setup.py install # build extensions and install (copy) to PATH. +pip install . # ditto but better (e.g., dependency & metadata handling) + +python setup.py develop # build extensions and install (symbolic) to PATH. +pip install -e . # ditto but better (e.g., dependency & metadata handling) + +''' +setup( + name='raymarching_face', # package name, import this to use python API + ext_modules=[ + CUDAExtension( + name='_raymarching_face', # extension name, import this to use CUDA API + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'raymarching.cu', + 'bindings.cpp', + ]], + extra_compile_args={ + 'cxx': c_flags, + 'nvcc': nvcc_flags, + } + ), + ], + cmdclass={ + 'build_ext': BuildExtension, + } +) \ No newline at end of file diff --git a/raymarching/src/bindings.cpp b/raymarching/src/bindings.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a9622b24c17a5cc5c6c09673e80abd094e2d7255 --- /dev/null +++ b/raymarching/src/bindings.cpp @@ -0,0 +1,39 @@ +#include + +#include "raymarching.h" + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + // utils + m.def("packbits", &packbits, "packbits (CUDA)"); + m.def("near_far_from_aabb", &near_far_from_aabb, "near_far_from_aabb (CUDA)"); + m.def("sph_from_ray", &sph_from_ray, "sph_from_ray (CUDA)"); + m.def("morton3D", &morton3D, "morton3D (CUDA)"); + m.def("morton3D_invert", &morton3D_invert, "morton3D_invert (CUDA)"); + m.def("morton3D_dilation", &morton3D_dilation, "morton3D_dilation (CUDA)"); + // train + m.def("march_rays_train", &march_rays_train, "march_rays_train (CUDA)"); + m.def("march_rays_train_backward", &march_rays_train_backward, "march_rays_train_backward (CUDA)"); + m.def("composite_rays_train_forward", &composite_rays_train_forward, "composite_rays_train_forward (CUDA)"); + m.def("composite_rays_train_backward", &composite_rays_train_backward, "composite_rays_train_backward (CUDA)"); + // infer + m.def("march_rays", &march_rays, "march rays (CUDA)"); + m.def("composite_rays", &composite_rays, "composite rays (CUDA)"); + m.def("composite_rays_ambient", &composite_rays_ambient, "composite rays with ambient (CUDA)"); + + // train + m.def("composite_rays_train_sigma_forward", &composite_rays_train_sigma_forward, "composite_rays_train_forward (CUDA)"); + m.def("composite_rays_train_sigma_backward", &composite_rays_train_sigma_backward, "composite_rays_train_backward (CUDA)"); + // infer + m.def("composite_rays_ambient_sigma", &composite_rays_ambient_sigma, "composite rays with ambient (CUDA)"); + + // uncertainty train + m.def("composite_rays_train_uncertainty_forward", &composite_rays_train_uncertainty_forward, "composite_rays_train_forward (CUDA)"); + m.def("composite_rays_train_uncertainty_backward", &composite_rays_train_uncertainty_backward, "composite_rays_train_backward (CUDA)"); + m.def("composite_rays_uncertainty", &composite_rays_uncertainty, "composite rays with ambient (CUDA)"); + + // triplane + m.def("composite_rays_train_triplane_forward", &composite_rays_train_triplane_forward, "composite_rays_train_forward (CUDA)"); + m.def("composite_rays_train_triplane_backward", &composite_rays_train_triplane_backward, "composite_rays_train_backward (CUDA)"); + m.def("composite_rays_triplane", &composite_rays_triplane, "composite rays with ambient (CUDA)"); + +} \ No newline at end of file diff --git a/raymarching/src/raymarching.cu b/raymarching/src/raymarching.cu new file mode 100644 index 0000000000000000000000000000000000000000..95462877c6b1c1f2e8d0d67522e19bfe09c2546e --- /dev/null +++ b/raymarching/src/raymarching.cu @@ -0,0 +1,2258 @@ +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#define CHECK_CUDA(x) TORCH_CHECK(x.device().is_cuda(), #x " must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be a contiguous tensor") +#define CHECK_IS_INT(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Int, #x " must be an int tensor") +#define CHECK_IS_FLOATING(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Float || x.scalar_type() == at::ScalarType::Half || x.scalar_type() == at::ScalarType::Double, #x " must be a floating tensor") + + +inline constexpr __device__ float SQRT3() { return 1.7320508075688772f; } +inline constexpr __device__ float RSQRT3() { return 0.5773502691896258f; } +inline constexpr __device__ float PI() { return 3.141592653589793f; } +inline constexpr __device__ float RPI() { return 0.3183098861837907f; } + + +template +inline __host__ __device__ T div_round_up(T val, T divisor) { + return (val + divisor - 1) / divisor; +} + +inline __host__ __device__ float signf(const float x) { + return copysignf(1.0, x); +} + +inline __host__ __device__ float clamp(const float x, const float min, const float max) { + return fminf(max, fmaxf(min, x)); +} + +inline __host__ __device__ void swapf(float& a, float& b) { + float c = a; a = b; b = c; +} + +inline __device__ int mip_from_pos(const float x, const float y, const float z, const float max_cascade) { + const float mx = fmaxf(fabsf(x), fmaxf(fabs(y), fabs(z))); + int exponent; + frexpf(mx, &exponent); // [0, 0.5) --> -1, [0.5, 1) --> 0, [1, 2) --> 1, [2, 4) --> 2, ... + return fminf(max_cascade - 1, fmaxf(0, exponent)); +} + +inline __device__ int mip_from_dt(const float dt, const float H, const float max_cascade) { + const float mx = dt * H * 0.5; + int exponent; + frexpf(mx, &exponent); + return fminf(max_cascade - 1, fmaxf(0, exponent)); +} + +inline __host__ __device__ uint32_t __expand_bits(uint32_t v) +{ + v = (v * 0x00010001u) & 0xFF0000FFu; + v = (v * 0x00000101u) & 0x0F00F00Fu; + v = (v * 0x00000011u) & 0xC30C30C3u; + v = (v * 0x00000005u) & 0x49249249u; + return v; +} + +inline __host__ __device__ uint32_t __morton3D(uint32_t x, uint32_t y, uint32_t z) +{ + uint32_t xx = __expand_bits(x); + uint32_t yy = __expand_bits(y); + uint32_t zz = __expand_bits(z); + return xx | (yy << 1) | (zz << 2); +} + +inline __host__ __device__ uint32_t __morton3D_invert(uint32_t x) +{ + x = x & 0x49249249; + x = (x | (x >> 2)) & 0xc30c30c3; + x = (x | (x >> 4)) & 0x0f00f00f; + x = (x | (x >> 8)) & 0xff0000ff; + x = (x | (x >> 16)) & 0x0000ffff; + return x; +} + + +//////////////////////////////////////////////////// +///////////// utils ///////////// +//////////////////////////////////////////////////// + +// rays_o/d: [N, 3] +// nears/fars: [N] +// scalar_t should always be float in use. +template +__global__ void kernel_near_far_from_aabb( + const scalar_t * __restrict__ rays_o, + const scalar_t * __restrict__ rays_d, + const scalar_t * __restrict__ aabb, + const uint32_t N, + const float min_near, + scalar_t * nears, scalar_t * fars +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + rays_o += n * 3; + rays_d += n * 3; + + const float ox = rays_o[0], oy = rays_o[1], oz = rays_o[2]; + const float dx = rays_d[0], dy = rays_d[1], dz = rays_d[2]; + const float rdx = 1 / dx, rdy = 1 / dy, rdz = 1 / dz; + + // get near far (assume cube scene) + float near = (aabb[0] - ox) * rdx; + float far = (aabb[3] - ox) * rdx; + if (near > far) swapf(near, far); + + float near_y = (aabb[1] - oy) * rdy; + float far_y = (aabb[4] - oy) * rdy; + if (near_y > far_y) swapf(near_y, far_y); + + if (near > far_y || near_y > far) { + nears[n] = fars[n] = std::numeric_limits::max(); + return; + } + + if (near_y > near) near = near_y; + if (far_y < far) far = far_y; + + float near_z = (aabb[2] - oz) * rdz; + float far_z = (aabb[5] - oz) * rdz; + if (near_z > far_z) swapf(near_z, far_z); + + if (near > far_z || near_z > far) { + nears[n] = fars[n] = std::numeric_limits::max(); + return; + } + + if (near_z > near) near = near_z; + if (far_z < far) far = far_z; + + if (near < min_near) near = min_near; + + nears[n] = near; + fars[n] = far; +} + + +void near_far_from_aabb(const at::Tensor rays_o, const at::Tensor rays_d, const at::Tensor aabb, const uint32_t N, const float min_near, at::Tensor nears, at::Tensor fars) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + rays_o.scalar_type(), "near_far_from_aabb", ([&] { + kernel_near_far_from_aabb<<>>(rays_o.data_ptr(), rays_d.data_ptr(), aabb.data_ptr(), N, min_near, nears.data_ptr(), fars.data_ptr()); + })); +} + + +// rays_o/d: [N, 3] +// radius: float +// coords: [N, 2] +template +__global__ void kernel_sph_from_ray( + const scalar_t * __restrict__ rays_o, + const scalar_t * __restrict__ rays_d, + const float radius, + const uint32_t N, + scalar_t * coords +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + rays_o += n * 3; + rays_d += n * 3; + coords += n * 2; + + const float ox = rays_o[0], oy = rays_o[1], oz = rays_o[2]; + const float dx = rays_d[0], dy = rays_d[1], dz = rays_d[2]; + const float rdx = 1 / dx, rdy = 1 / dy, rdz = 1 / dz; + + // solve t from || o + td || = radius + const float A = dx * dx + dy * dy + dz * dz; + const float B = ox * dx + oy * dy + oz * dz; // in fact B / 2 + const float C = ox * ox + oy * oy + oz * oz - radius * radius; + + const float t = (- B + sqrtf(B * B - A * C)) / A; // always use the larger solution (positive) + + // solve theta, phi (assume y is the up axis) + const float x = ox + t * dx, y = oy + t * dy, z = oz + t * dz; + const float theta = atan2(sqrtf(x * x + z * z), y); // [0, PI) + const float phi = atan2(z, x); // [-PI, PI) + + // normalize to [-1, 1] + coords[0] = 2 * theta * RPI() - 1; + coords[1] = phi * RPI(); +} + + +void sph_from_ray(const at::Tensor rays_o, const at::Tensor rays_d, const float radius, const uint32_t N, at::Tensor coords) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + rays_o.scalar_type(), "sph_from_ray", ([&] { + kernel_sph_from_ray<<>>(rays_o.data_ptr(), rays_d.data_ptr(), radius, N, coords.data_ptr()); + })); +} + + +// coords: int32, [N, 3] +// indices: int32, [N] +__global__ void kernel_morton3D( + const int * __restrict__ coords, + const uint32_t N, + int * indices +) { + // parallel + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + coords += n * 3; + indices[n] = __morton3D(coords[0], coords[1], coords[2]); +} + + +void morton3D(const at::Tensor coords, const uint32_t N, at::Tensor indices) { + static constexpr uint32_t N_THREAD = 128; + kernel_morton3D<<>>(coords.data_ptr(), N, indices.data_ptr()); +} + + +// indices: int32, [N] +// coords: int32, [N, 3] +__global__ void kernel_morton3D_invert( + const int * __restrict__ indices, + const uint32_t N, + int * coords +) { + // parallel + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + coords += n * 3; + + const int ind = indices[n]; + + coords[0] = __morton3D_invert(ind >> 0); + coords[1] = __morton3D_invert(ind >> 1); + coords[2] = __morton3D_invert(ind >> 2); +} + + +void morton3D_invert(const at::Tensor indices, const uint32_t N, at::Tensor coords) { + static constexpr uint32_t N_THREAD = 128; + kernel_morton3D_invert<<>>(indices.data_ptr(), N, coords.data_ptr()); +} + + +// grid: float, [C, H, H, H] +// N: int, C * H * H * H / 8 +// density_thresh: float +// bitfield: uint8, [N] +template +__global__ void kernel_packbits( + const scalar_t * __restrict__ grid, + const uint32_t N, + const float density_thresh, + uint8_t * bitfield +) { + // parallel per byte + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + grid += n * 8; + + uint8_t bits = 0; + + #pragma unroll + for (uint8_t i = 0; i < 8; i++) { + bits |= (grid[i] > density_thresh) ? ((uint8_t)1 << i) : 0; + } + + bitfield[n] = bits; +} + + +void packbits(const at::Tensor grid, const uint32_t N, const float density_thresh, at::Tensor bitfield) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grid.scalar_type(), "packbits", ([&] { + kernel_packbits<<>>(grid.data_ptr(), N, density_thresh, bitfield.data_ptr()); + })); +} + + +// grid: float, [C, H, H, H] +__global__ void kernel_morton3D_dilation( + const float * __restrict__ grid, + const uint32_t C, + const uint32_t H, + float * __restrict__ grid_dilation +) { + // parallel per byte + const uint32_t H3 = H * H * H; + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= C * H3) return; + + // locate + const uint32_t c = n / H3; + const uint32_t ind = n - c * H3; + + const uint32_t x = __morton3D_invert(ind >> 0); + const uint32_t y = __morton3D_invert(ind >> 1); + const uint32_t z = __morton3D_invert(ind >> 2); + + // manual max pool + float res = grid[n]; + + if (x + 1 < H) res = fmaxf(res, grid[c * H3 + __morton3D(x + 1, y, z)]); + if (x > 0) res = fmaxf(res, grid[c * H3 + __morton3D(x - 1, y, z)]); + if (y + 1 < H) res = fmaxf(res, grid[c * H3 + __morton3D(x, y + 1, z)]); + if (y > 0) res = fmaxf(res, grid[c * H3 + __morton3D(x, y - 1, z)]); + if (z + 1 < H) res = fmaxf(res, grid[c * H3 + __morton3D(x, y, z + 1)]); + if (z > 0) res = fmaxf(res, grid[c * H3 + __morton3D(x, y, z - 1)]); + + // write + grid_dilation[n] = res; +} + +void morton3D_dilation(const at::Tensor grid, const uint32_t C, const uint32_t H, at::Tensor grid_dilation) { + static constexpr uint32_t N_THREAD = 128; + + kernel_morton3D_dilation<<>>(grid.data_ptr(), C, H, grid_dilation.data_ptr()); +} + +//////////////////////////////////////////////////// +///////////// training ///////////// +//////////////////////////////////////////////////// + +// rays_o/d: [N, 3] +// grid: [CHHH / 8] +// xyzs, dirs, deltas: [M, 3], [M, 3], [M, 2] +// dirs: [M, 3] +// rays: [N, 3], idx, offset, num_steps +template +__global__ void kernel_march_rays_train( + const scalar_t * __restrict__ rays_o, + const scalar_t * __restrict__ rays_d, + const uint8_t * __restrict__ grid, + const float bound, + const float dt_gamma, const uint32_t max_steps, + const uint32_t N, const uint32_t C, const uint32_t H, const uint32_t M, + const scalar_t* __restrict__ nears, + const scalar_t* __restrict__ fars, + scalar_t * xyzs, scalar_t * dirs, scalar_t * deltas, + int * rays, + int * counter, + const scalar_t* __restrict__ noises +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + rays_o += n * 3; + rays_d += n * 3; + + // ray marching + const float ox = rays_o[0], oy = rays_o[1], oz = rays_o[2]; + const float dx = rays_d[0], dy = rays_d[1], dz = rays_d[2]; + const float rdx = 1 / dx, rdy = 1 / dy, rdz = 1 / dz; + const float rH = 1 / (float)H; + const float H3 = H * H * H; + + const float near = nears[n]; + const float far = fars[n]; + const float noise = noises[n]; + + const float dt_max = 2 * SQRT3() * (1 << (C - 1)) / H; + const float dt_min = fminf(dt_max, 2 * SQRT3() / max_steps); + + float t0 = near; + + // perturb + t0 += clamp(t0 * dt_gamma, dt_min, dt_max) * noise; + + // first pass: estimation of num_steps + float t = t0; + uint32_t num_steps = 0; + + //if (t < far) printf("valid ray %d t=%f near=%f far=%f \n", n, t, near, far); + + while (t < far && num_steps < max_steps) { + // current point + const float x = clamp(ox + t * dx, -bound, bound); + const float y = clamp(oy + t * dy, -bound, bound); + const float z = clamp(oz + t * dz, -bound, bound); + + const float dt = clamp(t * dt_gamma, dt_min, dt_max); + + // get mip level + const int level = max(mip_from_pos(x, y, z, C), mip_from_dt(dt, H, C)); // range in [0, C - 1] + + const float mip_bound = fminf(scalbnf(1.0f, level), bound); + const float mip_rbound = 1 / mip_bound; + + // convert to nearest grid position + const int nx = clamp(0.5 * (x * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + const int ny = clamp(0.5 * (y * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + const int nz = clamp(0.5 * (z * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + + const uint32_t index = level * H3 + __morton3D(nx, ny, nz); + const bool occ = grid[index / 8] & (1 << (index % 8)); + + // if occpuied, advance a small step, and write to output + //if (n == 0) printf("t=%f density=%f vs thresh=%f step=%d\n", t, density, density_thresh, num_steps); + + if (occ) { + num_steps++; + t += dt; + // else, skip a large step (basically skip a voxel grid) + } else { + // calc distance to next voxel + const float tx = (((nx + 0.5f + 0.5f * signf(dx)) * rH * 2 - 1) * mip_bound - x) * rdx; + const float ty = (((ny + 0.5f + 0.5f * signf(dy)) * rH * 2 - 1) * mip_bound - y) * rdy; + const float tz = (((nz + 0.5f + 0.5f * signf(dz)) * rH * 2 - 1) * mip_bound - z) * rdz; + + const float tt = t + fmaxf(0.0f, fminf(tx, fminf(ty, tz))); + // step until next voxel + do { + t += clamp(t * dt_gamma, dt_min, dt_max); + } while (t < tt); + } + } + + //printf("[n=%d] num_steps=%d, near=%f, far=%f, dt=%f, max_steps=%f\n", n, num_steps, near, far, dt_min, (far - near) / dt_min); + + // second pass: really locate and write points & dirs + uint32_t point_index = atomicAdd(counter, num_steps); + uint32_t ray_index = atomicAdd(counter + 1, 1); + + //printf("[n=%d] num_steps=%d, point_index=%d, ray_index=%d\n", n, num_steps, point_index, ray_index); + + // write rays + rays[ray_index * 3] = n; + rays[ray_index * 3 + 1] = point_index; + rays[ray_index * 3 + 2] = num_steps; + + if (num_steps == 0) return; + if (point_index + num_steps > M) return; + + xyzs += point_index * 3; + dirs += point_index * 3; + deltas += point_index * 2; + + t = t0; + uint32_t step = 0; + + while (t < far && step < num_steps) { + // current point + const float x = clamp(ox + t * dx, -bound, bound); + const float y = clamp(oy + t * dy, -bound, bound); + const float z = clamp(oz + t * dz, -bound, bound); + + const float dt = clamp(t * dt_gamma, dt_min, dt_max); + + // get mip level + const int level = max(mip_from_pos(x, y, z, C), mip_from_dt(dt, H, C)); // range in [0, C - 1] + + const float mip_bound = fminf(scalbnf(1.0f, level), bound); + const float mip_rbound = 1 / mip_bound; + + // convert to nearest grid position + const int nx = clamp(0.5 * (x * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + const int ny = clamp(0.5 * (y * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + const int nz = clamp(0.5 * (z * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + + // query grid + const uint32_t index = level * H3 + __morton3D(nx, ny, nz); + const bool occ = grid[index / 8] & (1 << (index % 8)); + + // if occpuied, advance a small step, and write to output + if (occ) { + // write step + xyzs[0] = x; + xyzs[1] = y; + xyzs[2] = z; + dirs[0] = dx; + dirs[1] = dy; + dirs[2] = dz; + t += dt; + deltas[0] = dt; + deltas[1] = t; // used to calc depth + xyzs += 3; + dirs += 3; + deltas += 2; + step++; + // else, skip a large step (basically skip a voxel grid) + } else { + // calc distance to next voxel + const float tx = (((nx + 0.5f + 0.5f * signf(dx)) * rH * 2 - 1) * mip_bound - x) * rdx; + const float ty = (((ny + 0.5f + 0.5f * signf(dy)) * rH * 2 - 1) * mip_bound - y) * rdy; + const float tz = (((nz + 0.5f + 0.5f * signf(dz)) * rH * 2 - 1) * mip_bound - z) * rdz; + const float tt = t + fmaxf(0.0f, fminf(tx, fminf(ty, tz))); + // step until next voxel + do { + t += clamp(t * dt_gamma, dt_min, dt_max); + } while (t < tt); + } + } +} + +void march_rays_train(const at::Tensor rays_o, const at::Tensor rays_d, const at::Tensor grid, const float bound, const float dt_gamma, const uint32_t max_steps, const uint32_t N, const uint32_t C, const uint32_t H, const uint32_t M, const at::Tensor nears, const at::Tensor fars, at::Tensor xyzs, at::Tensor dirs, at::Tensor deltas, at::Tensor rays, at::Tensor counter, at::Tensor noises) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + rays_o.scalar_type(), "march_rays_train", ([&] { + kernel_march_rays_train<<>>(rays_o.data_ptr(), rays_d.data_ptr(), grid.data_ptr(), bound, dt_gamma, max_steps, N, C, H, M, nears.data_ptr(), fars.data_ptr(), xyzs.data_ptr(), dirs.data_ptr(), deltas.data_ptr(), rays.data_ptr(), counter.data_ptr(), noises.data_ptr()); + })); +} + + +// grad_xyzs/dirs: [M, 3] +// rays: [N, 3] +// deltas: [M, 2] +// grad_rays_o/d: [N, 3] +template +__global__ void kernel_march_rays_train_backward( + const scalar_t * __restrict__ grad_xyzs, + const scalar_t * __restrict__ grad_dirs, + const int * __restrict__ rays, + const scalar_t * __restrict__ deltas, + const uint32_t N, const uint32_t M, + scalar_t * grad_rays_o, + scalar_t * grad_rays_d +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + grad_rays_o += n * 3; + grad_rays_d += n * 3; + + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + // empty ray, or ray that exceed max step count. + if (num_steps == 0 || offset + num_steps > M) return; + + grad_xyzs += offset * 3; + grad_dirs += offset * 3; + deltas += offset * 2; + + // accumulate + uint32_t step = 0; + while (step < num_steps) { + + grad_rays_o[0] += grad_xyzs[0]; + grad_rays_o[1] += grad_xyzs[1]; + grad_rays_o[2] += grad_xyzs[2]; + + grad_rays_d[0] += grad_xyzs[0] * deltas[1] + grad_dirs[0]; + grad_rays_d[1] += grad_xyzs[1] * deltas[1] + grad_dirs[1]; + grad_rays_d[2] += grad_xyzs[2] * deltas[1] + grad_dirs[2]; + + // locate + grad_xyzs += 3; + grad_dirs += 3; + deltas += 2; + + step++; + } +} + +void march_rays_train_backward(const at::Tensor grad_xyzs, const at::Tensor grad_dirs, const at::Tensor rays, const at::Tensor deltas, const uint32_t N, const uint32_t M, at::Tensor grad_rays_o, at::Tensor grad_rays_d) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad_xyzs.scalar_type(), "march_rays_train_backward", ([&] { + kernel_march_rays_train_backward<<>>(grad_xyzs.data_ptr(), grad_dirs.data_ptr(), rays.data_ptr(), deltas.data_ptr(), N, M, grad_rays_o.data_ptr(), grad_rays_d.data_ptr()); + })); +} + + +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N], final pixel alpha +// depth: [N,] +// image: [N, 3] +template +__global__ void kernel_composite_rays_train_forward( + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ ambient, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * weights_sum, + scalar_t * ambient_sum, + scalar_t * depth, + scalar_t * image +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + // empty ray, or ray that exceed max step count. + if (num_steps == 0 || offset + num_steps > M) { + weights_sum[index] = 0; + ambient_sum[index] = 0; + depth[index] = 0; + image[index * 3] = 0; + image[index * 3 + 1] = 0; + image[index * 3 + 2] = 0; + return; + } + + sigmas += offset; + rgbs += offset * 3; + ambient += offset; + deltas += offset * 2; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + scalar_t r = 0, g = 0, b = 0, ws = 0, d = 0, amb = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + + d += weight * deltas[1]; + + ws += weight; + + amb += ambient[0]; + + T *= 1.0f - alpha; + + // minimal remained transmittence + if (T < T_thresh) break; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // locate + sigmas++; + rgbs += 3; + ambient++; + deltas += 2; + + step++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // write + weights_sum[index] = ws; // weights_sum + ambient_sum[index] = amb; + depth[index] = d; + image[index * 3] = r; + image[index * 3 + 1] = g; + image[index * 3 + 2] = b; +} + + +void composite_rays_train_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor ambient_sum, at::Tensor depth, at::Tensor image) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + sigmas.scalar_type(), "composite_rays_train_forward", ([&] { + kernel_composite_rays_train_forward<<>>(sigmas.data_ptr(), rgbs.data_ptr(), ambient.data_ptr(), deltas.data_ptr(), rays.data_ptr(), M, N, T_thresh, weights_sum.data_ptr(), ambient_sum.data_ptr(), depth.data_ptr(), image.data_ptr()); + })); +} + + +// grad_weights_sum: [N,] +// grad: [N, 3] +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N,], weights_sum here +// image: [N, 3] +// grad_sigmas: [M] +// grad_rgbs: [M, 3] +template +__global__ void kernel_composite_rays_train_backward( + const scalar_t * __restrict__ grad_weights_sum, + const scalar_t * __restrict__ grad_ambient_sum, + const scalar_t * __restrict__ grad_image, + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ ambient, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const scalar_t * __restrict__ weights_sum, + const scalar_t * __restrict__ ambient_sum, + const scalar_t * __restrict__ image, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * grad_sigmas, + scalar_t * grad_rgbs, + scalar_t * grad_ambient +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + if (num_steps == 0 || offset + num_steps > M) return; + + grad_weights_sum += index; + grad_ambient_sum += index; + grad_image += index * 3; + weights_sum += index; + ambient_sum += index; + image += index * 3; + + sigmas += offset; + rgbs += offset * 3; + ambient += offset; + deltas += offset * 2; + + grad_sigmas += offset; + grad_rgbs += offset * 3; + grad_ambient += offset; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + const scalar_t r_final = image[0], g_final = image[1], b_final = image[2], ws_final = weights_sum[0]; + scalar_t r = 0, g = 0, b = 0, ws = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + // amb += weight * ambient[0]; + ws += weight; + + T *= 1.0f - alpha; + + // check https://note.kiui.moe/others/nerf_gradient/ for the gradient calculation. + // write grad_rgbs + grad_rgbs[0] = grad_image[0] * weight; + grad_rgbs[1] = grad_image[1] * weight; + grad_rgbs[2] = grad_image[2] * weight; + + // write grad_ambient + grad_ambient[0] = grad_ambient_sum[0]; + + // write grad_sigmas + grad_sigmas[0] = deltas[0] * ( + grad_image[0] * (T * rgbs[0] - (r_final - r)) + + grad_image[1] * (T * rgbs[1] - (g_final - g)) + + grad_image[2] * (T * rgbs[2] - (b_final - b)) + + // grad_ambient_sum[0] * (T * ambient[0] - (amb_final - amb)) + + grad_weights_sum[0] * (1 - ws_final) + ); + + //printf("[n=%d] num_steps=%d, T=%f, grad_sigmas=%f, r_final=%f, r=%f\n", n, step, T, grad_sigmas[0], r_final, r); + // minimal remained transmittence + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + // ambient++; + deltas += 2; + grad_sigmas++; + grad_rgbs += 3; + grad_ambient++; + + step++; + } +} + + +void composite_rays_train_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_ambient_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor ambient_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_ambient) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad_image.scalar_type(), "composite_rays_train_backward", ([&] { + kernel_composite_rays_train_backward<<>>(grad_weights_sum.data_ptr(), grad_ambient_sum.data_ptr(), grad_image.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), ambient.data_ptr(), deltas.data_ptr(), rays.data_ptr(), weights_sum.data_ptr(), ambient_sum.data_ptr(), image.data_ptr(), M, N, T_thresh, grad_sigmas.data_ptr(), grad_rgbs.data_ptr(), grad_ambient.data_ptr()); + })); +} + + +//////////////////////////////////////////////////// +///////////// infernce ///////////// +//////////////////////////////////////////////////// + +template +__global__ void kernel_march_rays( + const uint32_t n_alive, + const uint32_t n_step, + const int* __restrict__ rays_alive, + const scalar_t* __restrict__ rays_t, + const scalar_t* __restrict__ rays_o, + const scalar_t* __restrict__ rays_d, + const float bound, + const float dt_gamma, const uint32_t max_steps, + const uint32_t C, const uint32_t H, + const uint8_t * __restrict__ grid, + const scalar_t* __restrict__ nears, + const scalar_t* __restrict__ fars, + scalar_t* xyzs, scalar_t* dirs, scalar_t* deltas, + const scalar_t* __restrict__ noises +) { + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= n_alive) return; + + const int index = rays_alive[n]; // ray id + const float noise = noises[n]; + + // locate + rays_o += index * 3; + rays_d += index * 3; + xyzs += n * n_step * 3; + dirs += n * n_step * 3; + deltas += n * n_step * 2; + + const float ox = rays_o[0], oy = rays_o[1], oz = rays_o[2]; + const float dx = rays_d[0], dy = rays_d[1], dz = rays_d[2]; + const float rdx = 1 / dx, rdy = 1 / dy, rdz = 1 / dz; + const float rH = 1 / (float)H; + const float H3 = H * H * H; + + float t = rays_t[index]; // current ray's t + const float near = nears[index], far = fars[index]; + + const float dt_max = 2 * SQRT3() * (1 << (C - 1)) / H; + const float dt_min = fminf(dt_max, 2 * SQRT3() / max_steps); + + // march for n_step steps, record points + uint32_t step = 0; + + // introduce some randomness + t += clamp(t * dt_gamma, dt_min, dt_max) * noise; + + while (t < far && step < n_step) { + // current point + const float x = clamp(ox + t * dx, -bound, bound); + const float y = clamp(oy + t * dy, -bound, bound); + const float z = clamp(oz + t * dz, -bound, bound); + + const float dt = clamp(t * dt_gamma, dt_min, dt_max); + + // get mip level + const int level = max(mip_from_pos(x, y, z, C), mip_from_dt(dt, H, C)); // range in [0, C - 1] + + const float mip_bound = fminf(scalbnf(1, level), bound); + const float mip_rbound = 1 / mip_bound; + + // convert to nearest grid position + const int nx = clamp(0.5 * (x * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + const int ny = clamp(0.5 * (y * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + const int nz = clamp(0.5 * (z * mip_rbound + 1) * H, 0.0f, (float)(H - 1)); + + const uint32_t index = level * H3 + __morton3D(nx, ny, nz); + const bool occ = grid[index / 8] & (1 << (index % 8)); + + // if occpuied, advance a small step, and write to output + if (occ) { + // write step + xyzs[0] = x; + xyzs[1] = y; + xyzs[2] = z; + dirs[0] = dx; + dirs[1] = dy; + dirs[2] = dz; + // calc dt + t += dt; + deltas[0] = dt; + deltas[1] = t; // used to calc depth + // step + xyzs += 3; + dirs += 3; + deltas += 2; + step++; + + // else, skip a large step (basically skip a voxel grid) + } else { + // calc distance to next voxel + const float tx = (((nx + 0.5f + 0.5f * signf(dx)) * rH * 2 - 1) * mip_bound - x) * rdx; + const float ty = (((ny + 0.5f + 0.5f * signf(dy)) * rH * 2 - 1) * mip_bound - y) * rdy; + const float tz = (((nz + 0.5f + 0.5f * signf(dz)) * rH * 2 - 1) * mip_bound - z) * rdz; + const float tt = t + fmaxf(0.0f, fminf(tx, fminf(ty, tz))); + // step until next voxel + do { + t += clamp(t * dt_gamma, dt_min, dt_max); + } while (t < tt); + } + } +} + + +void march_rays(const uint32_t n_alive, const uint32_t n_step, const at::Tensor rays_alive, const at::Tensor rays_t, const at::Tensor rays_o, const at::Tensor rays_d, const float bound, const float dt_gamma, const uint32_t max_steps, const uint32_t C, const uint32_t H, const at::Tensor grid, const at::Tensor near, const at::Tensor far, at::Tensor xyzs, at::Tensor dirs, at::Tensor deltas, at::Tensor noises) { + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + rays_o.scalar_type(), "march_rays", ([&] { + kernel_march_rays<<>>(n_alive, n_step, rays_alive.data_ptr(), rays_t.data_ptr(), rays_o.data_ptr(), rays_d.data_ptr(), bound, dt_gamma, max_steps, C, H, grid.data_ptr(), near.data_ptr(), far.data_ptr(), xyzs.data_ptr(), dirs.data_ptr(), deltas.data_ptr(), noises.data_ptr()); + })); +} + + +template +__global__ void kernel_composite_rays( + const uint32_t n_alive, + const uint32_t n_step, + const float T_thresh, + int* rays_alive, + scalar_t* rays_t, + const scalar_t* __restrict__ sigmas, + const scalar_t* __restrict__ rgbs, + const scalar_t* __restrict__ deltas, + scalar_t* weights_sum, scalar_t* depth, scalar_t* image +) { + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= n_alive) return; + + const int index = rays_alive[n]; // ray id + + // locate + sigmas += n * n_step; + rgbs += n * n_step * 3; + deltas += n * n_step * 2; + + rays_t += index; + weights_sum += index; + depth += index; + image += index * 3; + + scalar_t t = rays_t[0]; // current ray's t + + scalar_t weight_sum = weights_sum[0]; + scalar_t d = depth[0]; + scalar_t r = image[0]; + scalar_t g = image[1]; + scalar_t b = image[2]; + + // accumulate + uint32_t step = 0; + while (step < n_step) { + + // ray is terminated if delta == 0 + if (deltas[0] == 0) break; + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + + /* + T_0 = 1; T_i = \prod_{j=0}^{i-1} (1 - alpha_j) + w_i = alpha_i * T_i + --> + T_i = 1 - \sum_{j=0}^{i-1} w_j + */ + const scalar_t T = 1 - weight_sum; + const scalar_t weight = alpha * T; + weight_sum += weight; + + t = deltas[1]; + d += weight * t; + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // ray is terminated if T is too small + // use a larger bound to further accelerate inference + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + deltas += 2; + step++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // rays_alive = -1 means ray is terminated early. + if (step < n_step) { + rays_alive[n] = -1; + } else { + rays_t[0] = t; + } + + weights_sum[0] = weight_sum; // this is the thing I needed! + depth[0] = d; + image[0] = r; + image[1] = g; + image[2] = b; +} + + +void composite_rays(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor weights, at::Tensor depth, at::Tensor image) { + static constexpr uint32_t N_THREAD = 128; + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + image.scalar_type(), "composite_rays", ([&] { + kernel_composite_rays<<>>(n_alive, n_step, T_thresh, rays_alive.data_ptr(), rays_t.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), deltas.data_ptr(), weights.data_ptr(), depth.data_ptr(), image.data_ptr()); + })); +} + + + +template +__global__ void kernel_composite_rays_ambient( + const uint32_t n_alive, + const uint32_t n_step, + const float T_thresh, + int* rays_alive, + scalar_t* rays_t, + const scalar_t* __restrict__ sigmas, + const scalar_t* __restrict__ rgbs, + const scalar_t* __restrict__ deltas, + const scalar_t* __restrict__ ambients, + scalar_t* weights_sum, scalar_t* depth, scalar_t* image, scalar_t* ambient_sum +) { + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= n_alive) return; + + const int index = rays_alive[n]; // ray id + + // locate + sigmas += n * n_step; + rgbs += n * n_step * 3; + deltas += n * n_step * 2; + ambients += n * n_step; + + rays_t += index; + weights_sum += index; + depth += index; + image += index * 3; + ambient_sum += index; + + scalar_t t = rays_t[0]; // current ray's t + + scalar_t weight_sum = weights_sum[0]; + scalar_t d = depth[0]; + scalar_t r = image[0]; + scalar_t g = image[1]; + scalar_t b = image[2]; + scalar_t a = ambient_sum[0]; + + // accumulate + uint32_t step = 0; + while (step < n_step) { + + // ray is terminated if delta == 0 + if (deltas[0] == 0) break; + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + + /* + T_0 = 1; T_i = \prod_{j=0}^{i-1} (1 - alpha_j) + w_i = alpha_i * T_i + --> + T_i = 1 - \sum_{j=0}^{i-1} w_j + */ + const scalar_t T = 1 - weight_sum; + const scalar_t weight = alpha * T; + weight_sum += weight; + + t = deltas[1]; + d += weight * t; + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + a += ambients[0]; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // ray is terminated if T is too small + // use a larger bound to further accelerate inference + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + deltas += 2; + step++; + ambients++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // rays_alive = -1 means ray is terminated early. + if (step < n_step) { + rays_alive[n] = -1; + } else { + rays_t[0] = t; + } + + weights_sum[0] = weight_sum; // this is the thing I needed! + depth[0] = d; + image[0] = r; + image[1] = g; + image[2] = b; + ambient_sum[0] = a; +} + + +void composite_rays_ambient(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambients, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor ambient_sum) { + static constexpr uint32_t N_THREAD = 128; + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + image.scalar_type(), "composite_rays_ambient", ([&] { + kernel_composite_rays_ambient<<>>(n_alive, n_step, T_thresh, rays_alive.data_ptr(), rays_t.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), deltas.data_ptr(), ambients.data_ptr(), weights.data_ptr(), depth.data_ptr(), image.data_ptr(), ambient_sum.data_ptr()); + })); +} + + + + + + +// -------------------------------- sigma ambient ----------------------------- + +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N], final pixel alpha +// depth: [N,] +// image: [N, 3] +template +__global__ void kernel_composite_rays_train_sigma_forward( + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ ambient, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * weights_sum, + scalar_t * ambient_sum, + scalar_t * depth, + scalar_t * image +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + // empty ray, or ray that exceed max step count. + if (num_steps == 0 || offset + num_steps > M) { + weights_sum[index] = 0; + ambient_sum[index] = 0; + depth[index] = 0; + image[index * 3] = 0; + image[index * 3 + 1] = 0; + image[index * 3 + 2] = 0; + return; + } + + sigmas += offset; + rgbs += offset * 3; + ambient += offset; + deltas += offset * 2; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + scalar_t r = 0, g = 0, b = 0, ws = 0, d = 0, amb = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + + d += weight * deltas[1]; + + ws += weight; + + amb += weight * ambient[0]; + + T *= 1.0f - alpha; + + // minimal remained transmittence + if (T < T_thresh) break; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // locate + sigmas++; + rgbs += 3; + ambient++; + deltas += 2; + + step++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // write + weights_sum[index] = ws; // weights_sum + ambient_sum[index] = amb; + depth[index] = d; + image[index * 3] = r; + image[index * 3 + 1] = g; + image[index * 3 + 2] = b; +} + + +void composite_rays_train_sigma_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor ambient_sum, at::Tensor depth, at::Tensor image) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + sigmas.scalar_type(), "composite_rays_train_sigma_forward", ([&] { + kernel_composite_rays_train_sigma_forward<<>>(sigmas.data_ptr(), rgbs.data_ptr(), ambient.data_ptr(), deltas.data_ptr(), rays.data_ptr(), M, N, T_thresh, weights_sum.data_ptr(), ambient_sum.data_ptr(), depth.data_ptr(), image.data_ptr()); + })); +} + + +// grad_weights_sum: [N,] +// grad: [N, 3] +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N,], weights_sum here +// image: [N, 3] +// grad_sigmas: [M] +// grad_rgbs: [M, 3] +template +__global__ void kernel_composite_rays_train_sigma_backward( + const scalar_t * __restrict__ grad_weights_sum, + const scalar_t * __restrict__ grad_ambient_sum, + const scalar_t * __restrict__ grad_image, + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ ambient, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const scalar_t * __restrict__ weights_sum, + const scalar_t * __restrict__ ambient_sum, + const scalar_t * __restrict__ image, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * grad_sigmas, + scalar_t * grad_rgbs, + scalar_t * grad_ambient +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + if (num_steps == 0 || offset + num_steps > M) return; + + grad_weights_sum += index; + grad_ambient_sum += index; + grad_image += index * 3; + weights_sum += index; + ambient_sum += index; + image += index * 3; + + sigmas += offset; + rgbs += offset * 3; + ambient += offset; + deltas += offset * 2; + + grad_sigmas += offset; + grad_rgbs += offset * 3; + grad_ambient += offset; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + const scalar_t r_final = image[0], g_final = image[1], b_final = image[2], ws_final = weights_sum[0], amb_final = ambient_sum[0]; + scalar_t r = 0, g = 0, b = 0, ws = 0, amb = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + amb += weight * ambient[0]; + ws += weight; + + T *= 1.0f - alpha; + + // check https://note.kiui.moe/others/nerf_gradient/ for the gradient calculation. + // write grad_rgbs + grad_rgbs[0] = grad_image[0] * weight; + grad_rgbs[1] = grad_image[1] * weight; + grad_rgbs[2] = grad_image[2] * weight; + + // write grad_ambient + grad_ambient[0] = grad_ambient_sum[0] * weight; + + // write grad_sigmas + grad_sigmas[0] = deltas[0] * ( + grad_image[0] * (T * rgbs[0] - (r_final - r)) + + grad_image[1] * (T * rgbs[1] - (g_final - g)) + + grad_image[2] * (T * rgbs[2] - (b_final - b)) + + grad_ambient_sum[0] * (T * ambient[0] - (amb_final - amb)) + + grad_weights_sum[0] * (1 - ws_final) + ); + + //printf("[n=%d] num_steps=%d, T=%f, grad_sigmas=%f, r_final=%f, r=%f\n", n, step, T, grad_sigmas[0], r_final, r); + // minimal remained transmittence + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + ambient++; + deltas += 2; + grad_sigmas++; + grad_rgbs += 3; + grad_ambient++; + + step++; + } +} + + +void composite_rays_train_sigma_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_ambient_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor ambient_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_ambient) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad_image.scalar_type(), "composite_rays_train_sigma_backward", ([&] { + kernel_composite_rays_train_sigma_backward<<>>(grad_weights_sum.data_ptr(), grad_ambient_sum.data_ptr(), grad_image.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), ambient.data_ptr(), deltas.data_ptr(), rays.data_ptr(), weights_sum.data_ptr(), ambient_sum.data_ptr(), image.data_ptr(), M, N, T_thresh, grad_sigmas.data_ptr(), grad_rgbs.data_ptr(), grad_ambient.data_ptr()); + })); +} + + +//////////////////////////////////////////////////// +///////////// infernce ///////////// +//////////////////////////////////////////////////// + + +template +__global__ void kernel_composite_rays_ambient_sigma( + const uint32_t n_alive, + const uint32_t n_step, + const float T_thresh, + int* rays_alive, + scalar_t* rays_t, + const scalar_t* __restrict__ sigmas, + const scalar_t* __restrict__ rgbs, + const scalar_t* __restrict__ deltas, + const scalar_t* __restrict__ ambients, + scalar_t* weights_sum, scalar_t* depth, scalar_t* image, scalar_t* ambient_sum +) { + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= n_alive) return; + + const int index = rays_alive[n]; // ray id + + // locate + sigmas += n * n_step; + rgbs += n * n_step * 3; + deltas += n * n_step * 2; + ambients += n * n_step; + + rays_t += index; + weights_sum += index; + depth += index; + image += index * 3; + ambient_sum += index; + + scalar_t t = rays_t[0]; // current ray's t + + scalar_t weight_sum = weights_sum[0]; + scalar_t d = depth[0]; + scalar_t r = image[0]; + scalar_t g = image[1]; + scalar_t b = image[2]; + scalar_t a = ambient_sum[0]; + + // accumulate + uint32_t step = 0; + while (step < n_step) { + + // ray is terminated if delta == 0 + if (deltas[0] == 0) break; + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + + /* + T_0 = 1; T_i = \prod_{j=0}^{i-1} (1 - alpha_j) + w_i = alpha_i * T_i + --> + T_i = 1 - \sum_{j=0}^{i-1} w_j + */ + const scalar_t T = 1 - weight_sum; + const scalar_t weight = alpha * T; + weight_sum += weight; + + t = deltas[1]; + d += weight * t; + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + a += weight * ambients[0]; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // ray is terminated if T is too small + // use a larger bound to further accelerate inference + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + deltas += 2; + step++; + ambients++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // rays_alive = -1 means ray is terminated early. + if (step < n_step) { + rays_alive[n] = -1; + } else { + rays_t[0] = t; + } + + weights_sum[0] = weight_sum; // this is the thing I needed! + depth[0] = d; + image[0] = r; + image[1] = g; + image[2] = b; + ambient_sum[0] = a; +} + + +void composite_rays_ambient_sigma(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambients, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor ambient_sum) { + static constexpr uint32_t N_THREAD = 128; + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + image.scalar_type(), "composite_rays_ambient_sigma", ([&] { + kernel_composite_rays_ambient_sigma<<>>(n_alive, n_step, T_thresh, rays_alive.data_ptr(), rays_t.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), deltas.data_ptr(), ambients.data_ptr(), weights.data_ptr(), depth.data_ptr(), image.data_ptr(), ambient_sum.data_ptr()); + })); +} + + + + + + + +// -------------------------------- uncertainty ----------------------------- + +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N], final pixel alpha +// depth: [N,] +// image: [N, 3] +template +__global__ void kernel_composite_rays_train_uncertainty_forward( + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ ambient, + const scalar_t * __restrict__ uncertainty, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * weights_sum, + scalar_t * ambient_sum, + scalar_t * uncertainty_sum, + scalar_t * depth, + scalar_t * image +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + // empty ray, or ray that exceed max step count. + if (num_steps == 0 || offset + num_steps > M) { + weights_sum[index] = 0; + ambient_sum[index] = 0; + uncertainty_sum[index] = 0; + depth[index] = 0; + image[index * 3] = 0; + image[index * 3 + 1] = 0; + image[index * 3 + 2] = 0; + return; + } + + sigmas += offset; + rgbs += offset * 3; + ambient += offset; + uncertainty += offset; + deltas += offset * 2; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + scalar_t r = 0, g = 0, b = 0, ws = 0, d = 0, amb = 0, unc = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + + d += weight * deltas[1]; + + ws += weight; + + amb += ambient[0]; + unc += weight * uncertainty[0]; + + T *= 1.0f - alpha; + + // minimal remained transmittence + if (T < T_thresh) break; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // locate + sigmas++; + rgbs += 3; + ambient++; + uncertainty++; + deltas += 2; + + step++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // write + weights_sum[index] = ws; // weights_sum + ambient_sum[index] = amb; + uncertainty_sum[index] = unc; + depth[index] = d; + image[index * 3] = r; + image[index * 3 + 1] = g; + image[index * 3 + 2] = b; +} + + +void composite_rays_train_uncertainty_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor ambient_sum, at::Tensor uncertainty_sum, at::Tensor depth, at::Tensor image) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + sigmas.scalar_type(), "composite_rays_train_uncertainty_forward", ([&] { + kernel_composite_rays_train_uncertainty_forward<<>>(sigmas.data_ptr(), rgbs.data_ptr(), ambient.data_ptr(), uncertainty.data_ptr(), deltas.data_ptr(), rays.data_ptr(), M, N, T_thresh, weights_sum.data_ptr(), ambient_sum.data_ptr(), uncertainty_sum.data_ptr(), depth.data_ptr(), image.data_ptr()); + })); +} + + +// grad_weights_sum: [N,] +// grad: [N, 3] +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N,], weights_sum here +// image: [N, 3] +// grad_sigmas: [M] +// grad_rgbs: [M, 3] +template +__global__ void kernel_composite_rays_train_uncertainty_backward( + const scalar_t * __restrict__ grad_weights_sum, + const scalar_t * __restrict__ grad_ambient_sum, + const scalar_t * __restrict__ grad_uncertainty_sum, + const scalar_t * __restrict__ grad_image, + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ ambient, + const scalar_t * __restrict__ uncertainty, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const scalar_t * __restrict__ weights_sum, + const scalar_t * __restrict__ ambient_sum, + const scalar_t * __restrict__ uncertainty_sum, + const scalar_t * __restrict__ image, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * grad_sigmas, + scalar_t * grad_rgbs, + scalar_t * grad_ambient, + scalar_t * grad_uncertainty +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + if (num_steps == 0 || offset + num_steps > M) return; + + grad_weights_sum += index; + grad_ambient_sum += index; + grad_uncertainty_sum += index; + grad_image += index * 3; + weights_sum += index; + ambient_sum += index; + uncertainty_sum += index; + image += index * 3; + + sigmas += offset; + rgbs += offset * 3; + ambient += offset; + uncertainty += offset; + deltas += offset * 2; + + grad_sigmas += offset; + grad_rgbs += offset * 3; + grad_ambient += offset; + grad_uncertainty += offset; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + const scalar_t r_final = image[0], g_final = image[1], b_final = image[2], ws_final = weights_sum[0], amb_final = ambient_sum[0], unc_final = uncertainty_sum[0]; + scalar_t r = 0, g = 0, b = 0, ws = 0, amb = 0, unc = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + // amb += ambient[0]; + unc += weight * uncertainty[0]; + ws += weight; + + T *= 1.0f - alpha; + + // check https://note.kiui.moe/others/nerf_gradient/ for the gradient calculation. + // write grad_rgbs + grad_rgbs[0] = grad_image[0] * weight; + grad_rgbs[1] = grad_image[1] * weight; + grad_rgbs[2] = grad_image[2] * weight; + + // write grad_ambient + grad_ambient[0] = grad_ambient_sum[0]; + + // write grad_unc + grad_uncertainty[0] = grad_uncertainty_sum[0] * weight; + + // write grad_sigmas + grad_sigmas[0] = deltas[0] * ( + grad_image[0] * (T * rgbs[0] - (r_final - r)) + + grad_image[1] * (T * rgbs[1] - (g_final - g)) + + grad_image[2] * (T * rgbs[2] - (b_final - b)) + + // grad_ambient_sum[0] * (T * ambient[0] - (amb_final - amb)) + + grad_uncertainty_sum[0] * (T * uncertainty[0] - (unc_final - unc)) + + grad_weights_sum[0] * (1 - ws_final) + ); + + //printf("[n=%d] num_steps=%d, T=%f, grad_sigmas=%f, r_final=%f, r=%f\n", n, step, T, grad_sigmas[0], r_final, r); + // minimal remained transmittence + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + // ambient++; + uncertainty++; + deltas += 2; + grad_sigmas++; + grad_rgbs += 3; + grad_ambient++; + grad_uncertainty++; + + step++; + } +} + + +void composite_rays_train_uncertainty_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_ambient_sum, const at::Tensor grad_uncertainty_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor ambient_sum, const at::Tensor uncertainty_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_ambient, at::Tensor grad_uncertainty) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad_image.scalar_type(), "composite_rays_train_uncertainty_backward", ([&] { + kernel_composite_rays_train_uncertainty_backward<<>>(grad_weights_sum.data_ptr(), grad_ambient_sum.data_ptr(), grad_uncertainty_sum.data_ptr(), grad_image.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), ambient.data_ptr(), uncertainty.data_ptr(), deltas.data_ptr(), rays.data_ptr(), weights_sum.data_ptr(), ambient_sum.data_ptr(), uncertainty_sum.data_ptr(), image.data_ptr(), M, N, T_thresh, grad_sigmas.data_ptr(), grad_rgbs.data_ptr(), grad_ambient.data_ptr(), grad_uncertainty.data_ptr()); + })); +} + + +//////////////////////////////////////////////////// +///////////// infernce ///////////// +//////////////////////////////////////////////////// + + +template +__global__ void kernel_composite_rays_uncertainty( + const uint32_t n_alive, + const uint32_t n_step, + const float T_thresh, + int* rays_alive, + scalar_t* rays_t, + const scalar_t* __restrict__ sigmas, + const scalar_t* __restrict__ rgbs, + const scalar_t* __restrict__ deltas, + const scalar_t* __restrict__ ambients, + const scalar_t* __restrict__ uncertainties, + scalar_t* weights_sum, scalar_t* depth, scalar_t* image, scalar_t* ambient_sum, scalar_t* uncertainty_sum +) { + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= n_alive) return; + + const int index = rays_alive[n]; // ray id + + // locate + sigmas += n * n_step; + rgbs += n * n_step * 3; + deltas += n * n_step * 2; + ambients += n * n_step; + uncertainties += n * n_step; + + rays_t += index; + weights_sum += index; + depth += index; + image += index * 3; + ambient_sum += index; + uncertainty_sum += index; + + scalar_t t = rays_t[0]; // current ray's t + + scalar_t weight_sum = weights_sum[0]; + scalar_t d = depth[0]; + scalar_t r = image[0]; + scalar_t g = image[1]; + scalar_t b = image[2]; + scalar_t a = ambient_sum[0]; + scalar_t u = uncertainty_sum[0]; + + // accumulate + uint32_t step = 0; + while (step < n_step) { + + // ray is terminated if delta == 0 + if (deltas[0] == 0) break; + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + + /* + T_0 = 1; T_i = \prod_{j=0}^{i-1} (1 - alpha_j) + w_i = alpha_i * T_i + --> + T_i = 1 - \sum_{j=0}^{i-1} w_j + */ + const scalar_t T = 1 - weight_sum; + const scalar_t weight = alpha * T; + weight_sum += weight; + + t = deltas[1]; + d += weight * t; + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + a += ambients[0]; + u += weight * uncertainties[0]; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // ray is terminated if T is too small + // use a larger bound to further accelerate inference + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + deltas += 2; + step++; + ambients++; + uncertainties++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // rays_alive = -1 means ray is terminated early. + if (step < n_step) { + rays_alive[n] = -1; + } else { + rays_t[0] = t; + } + + weights_sum[0] = weight_sum; // this is the thing I needed! + depth[0] = d; + image[0] = r; + image[1] = g; + image[2] = b; + ambient_sum[0] = a; + uncertainty_sum[0] = u; +} + + +void composite_rays_uncertainty(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambients, at::Tensor uncertainties, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor ambient_sum, at::Tensor uncertainty_sum) { + static constexpr uint32_t N_THREAD = 128; + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + image.scalar_type(), "composite_rays_uncertainty", ([&] { + kernel_composite_rays_uncertainty<<>>(n_alive, n_step, T_thresh, rays_alive.data_ptr(), rays_t.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), deltas.data_ptr(), ambients.data_ptr(), uncertainties.data_ptr(), weights.data_ptr(), depth.data_ptr(), image.data_ptr(), ambient_sum.data_ptr(), uncertainty_sum.data_ptr()); + })); +} + + + + +// -------------------------------- triplane ----------------------------- + +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N], final pixel alpha +// depth: [N,] +// image: [N, 3] +template +__global__ void kernel_composite_rays_train_triplane_forward( + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ amb_aud, + const scalar_t * __restrict__ amb_eye, + const scalar_t * __restrict__ uncertainty, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * weights_sum, + scalar_t * amb_aud_sum, + scalar_t * amb_eye_sum, + scalar_t * uncertainty_sum, + scalar_t * depth, + scalar_t * image +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + // empty ray, or ray that exceed max step count. + if (num_steps == 0 || offset + num_steps > M) { + weights_sum[index] = 0; + amb_aud_sum[index] = 0; + amb_eye_sum[index] = 0; + uncertainty_sum[index] = 0; + depth[index] = 0; + image[index * 3] = 0; + image[index * 3 + 1] = 0; + image[index * 3 + 2] = 0; + return; + } + + sigmas += offset; + rgbs += offset * 3; + amb_aud += offset; + amb_eye += offset; + uncertainty += offset; + deltas += offset * 2; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + scalar_t r = 0, g = 0, b = 0, ws = 0, d = 0, a_aud = 0, a_eye=0, unc = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + + d += weight * deltas[1]; + + ws += weight; + + a_aud += amb_aud[0]; + a_eye += amb_eye[0]; + unc += weight * uncertainty[0]; + + T *= 1.0f - alpha; + + // minimal remained transmittence + if (T < T_thresh) break; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // locate + sigmas++; + rgbs += 3; + amb_aud++; + amb_eye++; + uncertainty++; + deltas += 2; + + step++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // write + weights_sum[index] = ws; // weights_sum + amb_aud_sum[index] = a_aud; + amb_eye_sum[index] = a_eye; + uncertainty_sum[index] = unc; + depth[index] = d; + image[index * 3] = r; + image[index * 3 + 1] = g; + image[index * 3 + 2] = b; +} + + +void composite_rays_train_triplane_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor amb_aud, const at::Tensor amb_eye, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor amb_aud_sum, at::Tensor amb_eye_sum, at::Tensor uncertainty_sum, at::Tensor depth, at::Tensor image) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + sigmas.scalar_type(), "composite_rays_train_triplane_forward", ([&] { + kernel_composite_rays_train_triplane_forward<<>>(sigmas.data_ptr(), rgbs.data_ptr(), amb_aud.data_ptr(), amb_eye.data_ptr(), uncertainty.data_ptr(), deltas.data_ptr(), rays.data_ptr(), M, N, T_thresh, weights_sum.data_ptr(), amb_aud_sum.data_ptr(), amb_eye_sum.data_ptr(), uncertainty_sum.data_ptr(), depth.data_ptr(), image.data_ptr()); + })); +} + + +// grad_weights_sum: [N,] +// grad: [N, 3] +// sigmas: [M] +// rgbs: [M, 3] +// deltas: [M, 2] +// rays: [N, 3], idx, offset, num_steps +// weights_sum: [N,], weights_sum here +// image: [N, 3] +// grad_sigmas: [M] +// grad_rgbs: [M, 3] +template +__global__ void kernel_composite_rays_train_triplane_backward( + const scalar_t * __restrict__ grad_weights_sum, + const scalar_t * __restrict__ grad_amb_aud_sum, + const scalar_t * __restrict__ grad_amb_eye_sum, + const scalar_t * __restrict__ grad_uncertainty_sum, + const scalar_t * __restrict__ grad_image, + const scalar_t * __restrict__ sigmas, + const scalar_t * __restrict__ rgbs, + const scalar_t * __restrict__ amb_aud, + const scalar_t * __restrict__ amb_eye, + const scalar_t * __restrict__ uncertainty, + const scalar_t * __restrict__ deltas, + const int * __restrict__ rays, + const scalar_t * __restrict__ weights_sum, + const scalar_t * __restrict__ amb_aud_sum, + const scalar_t * __restrict__ amb_eye_sum, + const scalar_t * __restrict__ uncertainty_sum, + const scalar_t * __restrict__ image, + const uint32_t M, const uint32_t N, const float T_thresh, + scalar_t * grad_sigmas, + scalar_t * grad_rgbs, + scalar_t * grad_amb_aud, + scalar_t * grad_amb_eye, + scalar_t * grad_uncertainty +) { + // parallel per ray + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= N) return; + + // locate + uint32_t index = rays[n * 3]; + uint32_t offset = rays[n * 3 + 1]; + uint32_t num_steps = rays[n * 3 + 2]; + + if (num_steps == 0 || offset + num_steps > M) return; + + grad_weights_sum += index; + grad_amb_aud_sum += index; + grad_amb_eye_sum += index; + grad_uncertainty_sum += index; + grad_image += index * 3; + weights_sum += index; + amb_aud_sum += index; + amb_eye_sum += index; + uncertainty_sum += index; + image += index * 3; + + sigmas += offset; + rgbs += offset * 3; + amb_aud += offset; + amb_eye += offset; + uncertainty += offset; + deltas += offset * 2; + + grad_sigmas += offset; + grad_rgbs += offset * 3; + grad_amb_aud += offset; + grad_amb_eye += offset; + grad_uncertainty += offset; + + // accumulate + uint32_t step = 0; + + scalar_t T = 1.0f; + const scalar_t r_final = image[0], g_final = image[1], b_final = image[2], ws_final = weights_sum[0], unc_final = uncertainty_sum[0]; + scalar_t r = 0, g = 0, b = 0, ws = 0, amb = 0, unc = 0; + + while (step < num_steps) { + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + const scalar_t weight = alpha * T; + + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + // amb += ambient[0]; + unc += weight * uncertainty[0]; + ws += weight; + + T *= 1.0f - alpha; + + // check https://note.kiui.moe/others/nerf_gradient/ for the gradient calculation. + // write grad_rgbs + grad_rgbs[0] = grad_image[0] * weight; + grad_rgbs[1] = grad_image[1] * weight; + grad_rgbs[2] = grad_image[2] * weight; + + // write grad_ambient + grad_amb_aud[0] = grad_amb_aud_sum[0]; + grad_amb_eye[0] = grad_amb_eye_sum[0]; + + // write grad_unc + grad_uncertainty[0] = grad_uncertainty_sum[0] * weight; + + // write grad_sigmas + grad_sigmas[0] = deltas[0] * ( + grad_image[0] * (T * rgbs[0] - (r_final - r)) + + grad_image[1] * (T * rgbs[1] - (g_final - g)) + + grad_image[2] * (T * rgbs[2] - (b_final - b)) + + // grad_ambient_sum[0] * (T * ambient[0] - (amb_final - amb)) + + grad_uncertainty_sum[0] * (T * uncertainty[0] - (unc_final - unc)) + + grad_weights_sum[0] * (1 - ws_final) + ); + + //printf("[n=%d] num_steps=%d, T=%f, grad_sigmas=%f, r_final=%f, r=%f\n", n, step, T, grad_sigmas[0], r_final, r); + // minimal remained transmittence + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + // ambient++; + uncertainty++; + deltas += 2; + grad_sigmas++; + grad_rgbs += 3; + grad_amb_aud++; + grad_amb_eye++; + grad_uncertainty++; + + step++; + } +} + + +void composite_rays_train_triplane_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_amb_aud_sum, const at::Tensor grad_amb_eye_sum, const at::Tensor grad_uncertainty_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor amb_aud, const at::Tensor amb_eye, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor amb_aud_sum, const at::Tensor amb_eye_sum, const at::Tensor uncertainty_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_amb_aud, at::Tensor grad_amb_eye, at::Tensor grad_uncertainty) { + + static constexpr uint32_t N_THREAD = 128; + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad_image.scalar_type(), "composite_rays_train_triplane_backward", ([&] { + kernel_composite_rays_train_triplane_backward<<>>(grad_weights_sum.data_ptr(), grad_amb_aud_sum.data_ptr(), grad_amb_eye_sum.data_ptr(), grad_uncertainty_sum.data_ptr(), grad_image.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), amb_aud.data_ptr(), amb_eye.data_ptr(), uncertainty.data_ptr(), deltas.data_ptr(), rays.data_ptr(), weights_sum.data_ptr(), amb_aud_sum.data_ptr(), amb_eye_sum.data_ptr(), uncertainty_sum.data_ptr(), image.data_ptr(), M, N, T_thresh, grad_sigmas.data_ptr(), grad_rgbs.data_ptr(), grad_amb_aud.data_ptr(), grad_amb_eye.data_ptr(), grad_uncertainty.data_ptr()); + })); +} + + +//////////////////////////////////////////////////// +///////////// infernce ///////////// +//////////////////////////////////////////////////// + + +template +__global__ void kernel_composite_rays_triplane( + const uint32_t n_alive, + const uint32_t n_step, + const float T_thresh, + int* rays_alive, + scalar_t* rays_t, + const scalar_t* __restrict__ sigmas, + const scalar_t* __restrict__ rgbs, + const scalar_t* __restrict__ deltas, + const scalar_t* __restrict__ ambs_aud, + const scalar_t* __restrict__ ambs_eye, + const scalar_t* __restrict__ uncertainties, + scalar_t* weights_sum, scalar_t* depth, scalar_t* image, scalar_t* amb_aud_sum, scalar_t* amb_eye_sum, scalar_t* uncertainty_sum +) { + const uint32_t n = threadIdx.x + blockIdx.x * blockDim.x; + if (n >= n_alive) return; + + const int index = rays_alive[n]; // ray id + + // locate + sigmas += n * n_step; + rgbs += n * n_step * 3; + deltas += n * n_step * 2; + ambs_aud += n * n_step; + ambs_eye += n * n_step; + uncertainties += n * n_step; + + rays_t += index; + weights_sum += index; + depth += index; + image += index * 3; + amb_aud_sum += index; + amb_eye_sum += index; + uncertainty_sum += index; + + scalar_t t = rays_t[0]; // current ray's t + + scalar_t weight_sum = weights_sum[0]; + scalar_t d = depth[0]; + scalar_t r = image[0]; + scalar_t g = image[1]; + scalar_t b = image[2]; + scalar_t a_aud = amb_aud_sum[0]; + scalar_t a_eye = amb_eye_sum[0]; + scalar_t u = uncertainty_sum[0]; + + // accumulate + uint32_t step = 0; + while (step < n_step) { + + // ray is terminated if delta == 0 + if (deltas[0] == 0) break; + + const scalar_t alpha = 1.0f - __expf(- sigmas[0] * deltas[0]); + + /* + T_0 = 1; T_i = \prod_{j=0}^{i-1} (1 - alpha_j) + w_i = alpha_i * T_i + --> + T_i = 1 - \sum_{j=0}^{i-1} w_j + */ + const scalar_t T = 1 - weight_sum; + const scalar_t weight = alpha * T; + weight_sum += weight; + + t = deltas[1]; + d += weight * t; + r += weight * rgbs[0]; + g += weight * rgbs[1]; + b += weight * rgbs[2]; + a_aud += ambs_aud[0]; + a_eye += ambs_eye[0]; + u += weight * uncertainties[0]; + + //printf("[n=%d] num_steps=%d, alpha=%f, w=%f, T=%f, sum_dt=%f, d=%f\n", n, step, alpha, weight, T, sum_delta, d); + + // ray is terminated if T is too small + // use a larger bound to further accelerate inference + if (T < T_thresh) break; + + // locate + sigmas++; + rgbs += 3; + deltas += 2; + step++; + ambs_aud++; + ambs_eye++; + uncertainties++; + } + + //printf("[n=%d] rgb=(%f, %f, %f), d=%f\n", n, r, g, b, d); + + // rays_alive = -1 means ray is terminated early. + if (step < n_step) { + rays_alive[n] = -1; + } else { + rays_t[0] = t; + } + + weights_sum[0] = weight_sum; // this is the thing I needed! + depth[0] = d; + image[0] = r; + image[1] = g; + image[2] = b; + amb_aud_sum[0] = a_aud; + amb_eye_sum[0] = a_eye; + uncertainty_sum[0] = u; +} + + +void composite_rays_triplane(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambs_aud, at::Tensor ambs_eye, at::Tensor uncertainties, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor amb_aud_sum, at::Tensor amb_eye_sum, at::Tensor uncertainty_sum) { + static constexpr uint32_t N_THREAD = 128; + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + image.scalar_type(), "composite_rays_triplane", ([&] { + kernel_composite_rays_triplane<<>>(n_alive, n_step, T_thresh, rays_alive.data_ptr(), rays_t.data_ptr(), sigmas.data_ptr(), rgbs.data_ptr(), deltas.data_ptr(), ambs_aud.data_ptr(), ambs_eye.data_ptr(), uncertainties.data_ptr(), weights.data_ptr(), depth.data_ptr(), image.data_ptr(), amb_aud_sum.data_ptr(), amb_eye_sum.data_ptr(), uncertainty_sum.data_ptr()); + })); +} diff --git a/raymarching/src/raymarching.h b/raymarching/src/raymarching.h new file mode 100644 index 0000000000000000000000000000000000000000..b3a037dc4f5a3ecb55c6fd4f876096bd92667e20 --- /dev/null +++ b/raymarching/src/raymarching.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + + +void near_far_from_aabb(const at::Tensor rays_o, const at::Tensor rays_d, const at::Tensor aabb, const uint32_t N, const float min_near, at::Tensor nears, at::Tensor fars); +void sph_from_ray(const at::Tensor rays_o, const at::Tensor rays_d, const float radius, const uint32_t N, at::Tensor coords); +void morton3D(const at::Tensor coords, const uint32_t N, at::Tensor indices); +void morton3D_invert(const at::Tensor indices, const uint32_t N, at::Tensor coords); +void packbits(const at::Tensor grid, const uint32_t N, const float density_thresh, at::Tensor bitfield); +void morton3D_dilation(const at::Tensor grid, const uint32_t C, const uint32_t H, at::Tensor grid_dilation); + +void march_rays_train(const at::Tensor rays_o, const at::Tensor rays_d, const at::Tensor grid, const float bound, const float dt_gamma, const uint32_t max_steps, const uint32_t N, const uint32_t C, const uint32_t H, const uint32_t M, const at::Tensor nears, const at::Tensor fars, at::Tensor xyzs, at::Tensor dirs, at::Tensor deltas, at::Tensor rays, at::Tensor counter, at::Tensor noises); +void march_rays_train_backward(const at::Tensor grad_xyzs, const at::Tensor grad_dirs, const at::Tensor rays, const at::Tensor deltas, const uint32_t N, const uint32_t M, at::Tensor grad_rays_o, at::Tensor grad_rays_d); +void composite_rays_train_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor ambient_sum, at::Tensor depth, at::Tensor image); +void composite_rays_train_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_ambient_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor ambient_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_ambient); + +void march_rays(const uint32_t n_alive, const uint32_t n_step, const at::Tensor rays_alive, const at::Tensor rays_t, const at::Tensor rays_o, const at::Tensor rays_d, const float bound, const float dt_gamma, const uint32_t max_steps, const uint32_t C, const uint32_t H, const at::Tensor grid, const at::Tensor nears, const at::Tensor fars, at::Tensor xyzs, at::Tensor dirs, at::Tensor deltas, at::Tensor noises); +void composite_rays(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor weights_sum, at::Tensor depth, at::Tensor image); +void composite_rays_ambient(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambients, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor ambient_sum); + + +void composite_rays_train_sigma_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor ambient_sum, at::Tensor depth, at::Tensor image); +void composite_rays_train_sigma_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_ambient_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor ambient_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_ambient); + +void composite_rays_ambient_sigma(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambients, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor ambient_sum); + + +// uncertainty +void composite_rays_train_uncertainty_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor ambient_sum, at::Tensor uncertainty_sum, at::Tensor depth, at::Tensor image); +void composite_rays_train_uncertainty_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_ambient_sum, const at::Tensor grad_uncertainty_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor ambient, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor ambient_sum, const at::Tensor uncertainty_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_ambient, at::Tensor grad_uncertainty); +void composite_rays_uncertainty(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambients, at::Tensor uncertainties, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor ambient_sum, at::Tensor uncertainty_sum); + +// triplane +void composite_rays_train_triplane_forward(const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor amb_aud, const at::Tensor amb_eye, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor weights_sum, at::Tensor amb_aud_sum, at::Tensor amb_eye_sum, at::Tensor uncertainty_sum, at::Tensor depth, at::Tensor image); +void composite_rays_train_triplane_backward(const at::Tensor grad_weights_sum, const at::Tensor grad_amb_aud_sum, const at::Tensor grad_amb_eye_sum, const at::Tensor grad_uncertainty_sum, const at::Tensor grad_image, const at::Tensor sigmas, const at::Tensor rgbs, const at::Tensor amb_aud, const at::Tensor amb_eye, const at::Tensor uncertainty, const at::Tensor deltas, const at::Tensor rays, const at::Tensor weights_sum, const at::Tensor amb_aud_sum, const at::Tensor amb_eye_sum, const at::Tensor uncertainty_sum, const at::Tensor image, const uint32_t M, const uint32_t N, const float T_thresh, at::Tensor grad_sigmas, at::Tensor grad_rgbs, at::Tensor grad_amb_aud, at::Tensor grad_amb_eye, at::Tensor grad_uncertainty); +void composite_rays_triplane(const uint32_t n_alive, const uint32_t n_step, const float T_thresh, at::Tensor rays_alive, at::Tensor rays_t, at::Tensor sigmas, at::Tensor rgbs, at::Tensor deltas, at::Tensor ambs_aud, at::Tensor ambs_eye, at::Tensor uncertainties, at::Tensor weights, at::Tensor depth, at::Tensor image, at::Tensor amb_aud_sum, at::Tensor amb_eye_sum, at::Tensor uncertainty_sum); \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2d0e1936d26cedfd1bc601eecd3410cd24d3b8d5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,35 @@ +--extra-index-url https://download.pytorch.org/whl/cu113 +torch==1.12.1+cu113 +torchvision==0.13.1+cu113 +torchaudio==0.12.1 +torch-ema +ninja +trimesh +opencv-python +tensorboardX +numpy==1.24.4 +pandas==2.0.3 +tqdm +matplotlib +PyMCubes +rich +dearpygui +packaging +scipy +scikit-learn +transformers==4.36.0 +face_alignment==1.4.1 +python_speech_features +numba +resampy +pyaudio +soundfile +einops +configargparse + +lpips +imageio-ffmpeg +onnxruntime-gpu +librosa +fvcore +iopath diff --git a/scripts/install_pytorch3d.py b/scripts/install_pytorch3d.py new file mode 100644 index 0000000000000000000000000000000000000000..69408998df22809899a5cbd9e228b7b5aa944e2b --- /dev/null +++ b/scripts/install_pytorch3d.py @@ -0,0 +1,12 @@ +import sys +import torch +import subprocess + +pyt_version_str=torch.__version__.split("+")[0].replace(".", "") +version_str="".join([ + f"py3{sys.version_info.minor}_cu", + torch.version.cuda.replace(".",""), + f"_pyt{pyt_version_str}" +]) +subprocess.run(["pip", "install", "fvcore", "iopath"]) +subprocess.run(["pip", "install", f"--no-index", f"--no-cache-dir", f"pytorch3d", f"-f", f"https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/{version_str}/download.html"]) diff --git a/scripts/train_may.sh b/scripts/train_may.sh new file mode 100644 index 0000000000000000000000000000000000000000..7f5be1be49738405f53d1c0f4d59d4134894cd60 --- /dev/null +++ b/scripts/train_may.sh @@ -0,0 +1,7 @@ +dataset=May +workspace=model/trial_may +asr_model=ave + +CUDA_VISIBLE_DEVICES=0 python main.py data/$dataset --workspace $workspace -O --iters 60000 --asr_model $asr_model --preload 1 +CUDA_VISIBLE_DEVICES=0 python main.py data/$dataset --workspace $workspace -O --iters 100000 --finetune_lips --patch_size 64 --asr_model $asr_model --preload 1 +CUDA_VISIBLE_DEVICES=0 python main.py data/$dataset --workspace $workspace -O --test --asr_model $asr_model --portrait diff --git a/shencoder/__init__.py b/shencoder/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2b55c96efe1a86b2da660ccd961e48a8adc3803f --- /dev/null +++ b/shencoder/__init__.py @@ -0,0 +1 @@ +from .sphere_harmonics import SHEncoder \ No newline at end of file diff --git a/shencoder/backend.py b/shencoder/backend.py new file mode 100644 index 0000000000000000000000000000000000000000..c41c8cb507554d2ce6051b035a3c740433233db7 --- /dev/null +++ b/shencoder/backend.py @@ -0,0 +1,40 @@ +import os +from torch.utils.cpp_extension import load + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14', '-finput-charset=utf-8'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17', '/source-charset:utf-8'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +_backend = load(name='_sh_encoder', + extra_cflags=c_flags, + extra_cuda_cflags=nvcc_flags, + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'shencoder.cu', + 'bindings.cpp', + ]], + ) + +__all__ = ['_backend'] \ No newline at end of file diff --git a/shencoder/setup.py b/shencoder/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..342a6015b6f4c2cd1789ba39baa16835855f0671 --- /dev/null +++ b/shencoder/setup.py @@ -0,0 +1,50 @@ +import os +from setuptools import setup +from torch.utils.cpp_extension import BuildExtension, CUDAExtension + +_src_path = os.path.dirname(os.path.abspath(__file__)) + +nvcc_flags = [ + '-O3', '-std=c++14', + '-U__CUDA_NO_HALF_OPERATORS__', '-U__CUDA_NO_HALF_CONVERSIONS__', '-U__CUDA_NO_HALF2_OPERATORS__', +] + +if os.name == "posix": + c_flags = ['-O3', '-std=c++14'] +elif os.name == "nt": + c_flags = ['/O2', '/std:c++17'] + + # find cl.exe + def find_cl_path(): + import glob + for edition in ["Enterprise", "Professional", "BuildTools", "Community"]: + paths = sorted(glob.glob(r"C:\\Program Files (x86)\\Microsoft Visual Studio\\*\\%s\\VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64" % edition), reverse=True) + if paths: + return paths[0] + + # If cl.exe is not on path, try to find it. + if os.system("where cl.exe >nul 2>nul") != 0: + cl_path = find_cl_path() + if cl_path is None: + raise RuntimeError("Could not locate a supported Microsoft Visual C++ installation") + os.environ["PATH"] += ";" + cl_path + +setup( + name='shencoder', # package name, import this to use python API + ext_modules=[ + CUDAExtension( + name='_shencoder', # extension name, import this to use CUDA API + sources=[os.path.join(_src_path, 'src', f) for f in [ + 'shencoder.cu', + 'bindings.cpp', + ]], + extra_compile_args={ + 'cxx': c_flags, + 'nvcc': nvcc_flags, + } + ), + ], + cmdclass={ + 'build_ext': BuildExtension, + } +) \ No newline at end of file diff --git a/shencoder/sphere_harmonics.py b/shencoder/sphere_harmonics.py new file mode 100644 index 0000000000000000000000000000000000000000..7bab24e69d0c488b33f840ff9e2057cb260c3b5d --- /dev/null +++ b/shencoder/sphere_harmonics.py @@ -0,0 +1,87 @@ +import numpy as np + +import torch +import torch.nn as nn +from torch.autograd import Function +from torch.autograd.function import once_differentiable +from torch.cuda.amp import custom_bwd, custom_fwd + +try: + import _shencoder as _backend +except ImportError: + from .backend import _backend + +class _sh_encoder(Function): + @staticmethod + @custom_fwd(cast_inputs=torch.float32) # force float32 for better precision + def forward(ctx, inputs, degree, calc_grad_inputs=False): + # inputs: [B, input_dim], float in [-1, 1] + # RETURN: [B, F], float + + inputs = inputs.contiguous() + B, input_dim = inputs.shape # batch size, coord dim + output_dim = degree ** 2 + + outputs = torch.empty(B, output_dim, dtype=inputs.dtype, device=inputs.device) + + if calc_grad_inputs: + dy_dx = torch.empty(B, input_dim * output_dim, dtype=inputs.dtype, device=inputs.device) + else: + dy_dx = None + + _backend.sh_encode_forward(inputs, outputs, B, input_dim, degree, dy_dx) + + ctx.save_for_backward(inputs, dy_dx) + ctx.dims = [B, input_dim, degree] + + return outputs + + @staticmethod + #@once_differentiable + @custom_bwd + def backward(ctx, grad): + # grad: [B, C * C] + + inputs, dy_dx = ctx.saved_tensors + + if dy_dx is not None: + grad = grad.contiguous() + B, input_dim, degree = ctx.dims + grad_inputs = torch.zeros_like(inputs) + _backend.sh_encode_backward(grad, inputs, B, input_dim, degree, dy_dx, grad_inputs) + return grad_inputs, None, None + else: + return None, None, None + + + +sh_encode = _sh_encoder.apply + + +class SHEncoder(nn.Module): + def __init__(self, input_dim=3, degree=4): + super().__init__() + + self.input_dim = input_dim # coord dims, must be 3 + self.degree = degree # 0 ~ 4 + self.output_dim = degree ** 2 + + assert self.input_dim == 3, "SH encoder only support input dim == 3" + assert self.degree > 0 and self.degree <= 8, "SH encoder only supports degree in [1, 8]" + + def __repr__(self): + return f"SHEncoder: input_dim={self.input_dim} degree={self.degree}" + + def forward(self, inputs, size=1): + # inputs: [..., input_dim], normalized real world positions in [-size, size] + # return: [..., degree^2] + + inputs = inputs / size # [-1, 1] + + prefix_shape = list(inputs.shape[:-1]) + inputs = inputs.reshape(-1, self.input_dim) + + outputs = sh_encode(inputs, self.degree, inputs.requires_grad) + outputs = outputs.reshape(prefix_shape + [self.output_dim]) + + return outputs \ No newline at end of file diff --git a/shencoder/src/bindings.cpp b/shencoder/src/bindings.cpp new file mode 100644 index 0000000000000000000000000000000000000000..595b5b3a98b10ad01428fc1c6c548a8abcb3934b --- /dev/null +++ b/shencoder/src/bindings.cpp @@ -0,0 +1,8 @@ +#include + +#include "shencoder.h" + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("sh_encode_forward", &sh_encode_forward, "SH encode forward (CUDA)"); + m.def("sh_encode_backward", &sh_encode_backward, "SH encode backward (CUDA)"); +} \ No newline at end of file diff --git a/shencoder/src/shencoder.cu b/shencoder/src/shencoder.cu new file mode 100644 index 0000000000000000000000000000000000000000..0ad2700ae0289f21f331174d87d1bbf32cb4f926 --- /dev/null +++ b/shencoder/src/shencoder.cu @@ -0,0 +1,439 @@ +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include + + +#define CHECK_CUDA(x) TORCH_CHECK(x.device().is_cuda(), #x " must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be a contiguous tensor") +#define CHECK_IS_INT(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Int, #x " must be an int tensor") +#define CHECK_IS_FLOATING(x) TORCH_CHECK(x.scalar_type() == at::ScalarType::Float || x.scalar_type() == at::ScalarType::Half || x.scalar_type() == at::ScalarType::Double, #x " must be a floating tensor") + + +template +__host__ __device__ T div_round_up(T val, T divisor) { + return (val + divisor - 1) / divisor; +} + +template +__global__ void kernel_sh( + const scalar_t * __restrict__ inputs, + scalar_t * outputs, + uint32_t B, uint32_t D, uint32_t C, + scalar_t * dy_dx +) { + const uint32_t b = threadIdx.x + blockIdx.x * blockDim.x; + if (b >= B) return; + + const uint32_t C2 = C * C; + + // locate + inputs += b * D; + outputs += b * C2; + + scalar_t x = inputs[0], y = inputs[1], z = inputs[2]; + + scalar_t xy=x*y, xz=x*z, yz=y*z, x2=x*x, y2=y*y, z2=z*z, xyz=xy*z; + scalar_t x4=x2*x2, y4=y2*y2, z4=z2*z2; + scalar_t x6=x4*x2, y6=y4*y2, z6=z4*z2; + + auto write_sh = [&]() { + outputs[0] = 0.28209479177387814f ; // 1/(2*sqrt(pi)) + if (C <= 1) { return; } + outputs[1] = -0.48860251190291987f*y ; // -sqrt(3)*y/(2*sqrt(pi)) + outputs[2] = 0.48860251190291987f*z ; // sqrt(3)*z/(2*sqrt(pi)) + outputs[3] = -0.48860251190291987f*x ; // -sqrt(3)*x/(2*sqrt(pi)) + if (C <= 2) { return; } + outputs[4] = 1.0925484305920792f*xy ; // sqrt(15)*xy/(2*sqrt(pi)) + outputs[5] = -1.0925484305920792f*yz ; // -sqrt(15)*yz/(2*sqrt(pi)) + outputs[6] = 0.94617469575755997f*z2 - 0.31539156525251999f ; // sqrt(5)*(3*z2 - 1)/(4*sqrt(pi)) + outputs[7] = -1.0925484305920792f*xz ; // -sqrt(15)*xz/(2*sqrt(pi)) + outputs[8] = 0.54627421529603959f*x2 - 0.54627421529603959f*y2 ; // sqrt(15)*(x2 - y2)/(4*sqrt(pi)) + if (C <= 3) { return; } + outputs[9] = 0.59004358992664352f*y*(-3.0f*x2 + y2) ; // sqrt(70)*y*(-3*x2 + y2)/(8*sqrt(pi)) + outputs[10] = 2.8906114426405538f*xy*z ; // sqrt(105)*xy*z/(2*sqrt(pi)) + outputs[11] = 0.45704579946446572f*y*(1.0f - 5.0f*z2) ; // sqrt(42)*y*(1 - 5*z2)/(8*sqrt(pi)) + outputs[12] = 0.3731763325901154f*z*(5.0f*z2 - 3.0f) ; // sqrt(7)*z*(5*z2 - 3)/(4*sqrt(pi)) + outputs[13] = 0.45704579946446572f*x*(1.0f - 5.0f*z2) ; // sqrt(42)*x*(1 - 5*z2)/(8*sqrt(pi)) + outputs[14] = 1.4453057213202769f*z*(x2 - y2) ; // sqrt(105)*z*(x2 - y2)/(4*sqrt(pi)) + outputs[15] = 0.59004358992664352f*x*(-x2 + 3.0f*y2) ; // sqrt(70)*x*(-x2 + 3*y2)/(8*sqrt(pi)) + if (C <= 4) { return; } + outputs[16] = 2.5033429417967046f*xy*(x2 - y2) ; // 3*sqrt(35)*xy*(x2 - y2)/(4*sqrt(pi)) + outputs[17] = 1.7701307697799304f*yz*(-3.0f*x2 + y2) ; // 3*sqrt(70)*yz*(-3*x2 + y2)/(8*sqrt(pi)) + outputs[18] = 0.94617469575756008f*xy*(7.0f*z2 - 1.0f) ; // 3*sqrt(5)*xy*(7*z2 - 1)/(4*sqrt(pi)) + outputs[19] = 0.66904654355728921f*yz*(3.0f - 7.0f*z2) ; // 3*sqrt(10)*yz*(3 - 7*z2)/(8*sqrt(pi)) + outputs[20] = -3.1735664074561294f*z2 + 3.7024941420321507f*z4 + 0.31735664074561293f ; // 3*(-30*z2 + 35*z4 + 3)/(16*sqrt(pi)) + outputs[21] = 0.66904654355728921f*xz*(3.0f - 7.0f*z2) ; // 3*sqrt(10)*xz*(3 - 7*z2)/(8*sqrt(pi)) + outputs[22] = 0.47308734787878004f*(x2 - y2)*(7.0f*z2 - 1.0f) ; // 3*sqrt(5)*(x2 - y2)*(7*z2 - 1)/(8*sqrt(pi)) + outputs[23] = 1.7701307697799304f*xz*(-x2 + 3.0f*y2) ; // 3*sqrt(70)*xz*(-x2 + 3*y2)/(8*sqrt(pi)) + outputs[24] = -3.7550144126950569f*x2*y2 + 0.62583573544917614f*x4 + 0.62583573544917614f*y4 ; // 3*sqrt(35)*(-6*x2*y2 + x4 + y4)/(16*sqrt(pi)) + if (C <= 5) { return; } + outputs[25] = 0.65638205684017015f*y*(10.0f*x2*y2 - 5.0f*x4 - y4) ; // 3*sqrt(154)*y*(10*x2*y2 - 5*x4 - y4)/(32*sqrt(pi)) + outputs[26] = 8.3026492595241645f*xy*z*(x2 - y2) ; // 3*sqrt(385)*xy*z*(x2 - y2)/(4*sqrt(pi)) + outputs[27] = -0.48923829943525038f*y*(3.0f*x2 - y2)*(9.0f*z2 - 1.0f) ; // -sqrt(770)*y*(3*x2 - y2)*(9*z2 - 1)/(32*sqrt(pi)) + outputs[28] = 4.7935367849733241f*xy*z*(3.0f*z2 - 1.0f) ; // sqrt(1155)*xy*z*(3*z2 - 1)/(4*sqrt(pi)) + outputs[29] = 0.45294665119569694f*y*(14.0f*z2 - 21.0f*z4 - 1.0f) ; // sqrt(165)*y*(14*z2 - 21*z4 - 1)/(16*sqrt(pi)) + outputs[30] = 0.1169503224534236f*z*(-70.0f*z2 + 63.0f*z4 + 15.0f) ; // sqrt(11)*z*(-70*z2 + 63*z4 + 15)/(16*sqrt(pi)) + outputs[31] = 0.45294665119569694f*x*(14.0f*z2 - 21.0f*z4 - 1.0f) ; // sqrt(165)*x*(14*z2 - 21*z4 - 1)/(16*sqrt(pi)) + outputs[32] = 2.3967683924866621f*z*(x2 - y2)*(3.0f*z2 - 1.0f) ; // sqrt(1155)*z*(x2 - y2)*(3*z2 - 1)/(8*sqrt(pi)) + outputs[33] = -0.48923829943525038f*x*(x2 - 3.0f*y2)*(9.0f*z2 - 1.0f) ; // -sqrt(770)*x*(x2 - 3*y2)*(9*z2 - 1)/(32*sqrt(pi)) + outputs[34] = 2.0756623148810411f*z*(-6.0f*x2*y2 + x4 + y4) ; // 3*sqrt(385)*z*(-6*x2*y2 + x4 + y4)/(16*sqrt(pi)) + outputs[35] = 0.65638205684017015f*x*(10.0f*x2*y2 - x4 - 5.0f*y4) ; // 3*sqrt(154)*x*(10*x2*y2 - x4 - 5*y4)/(32*sqrt(pi)) + if (C <= 6) { return; } + outputs[36] = 1.3663682103838286f*xy*(-10.0f*x2*y2 + 3.0f*x4 + 3.0f*y4) ; // sqrt(6006)*xy*(-10*x2*y2 + 3*x4 + 3*y4)/(32*sqrt(pi)) + outputs[37] = 2.3666191622317521f*yz*(10.0f*x2*y2 - 5.0f*x4 - y4) ; // 3*sqrt(2002)*yz*(10*x2*y2 - 5*x4 - y4)/(32*sqrt(pi)) + outputs[38] = 2.0182596029148963f*xy*(x2 - y2)*(11.0f*z2 - 1.0f) ; // 3*sqrt(91)*xy*(x2 - y2)*(11*z2 - 1)/(8*sqrt(pi)) + outputs[39] = -0.92120525951492349f*yz*(3.0f*x2 - y2)*(11.0f*z2 - 3.0f) ; // -sqrt(2730)*yz*(3*x2 - y2)*(11*z2 - 3)/(32*sqrt(pi)) + outputs[40] = 0.92120525951492349f*xy*(-18.0f*z2 + 33.0f*z4 + 1.0f) ; // sqrt(2730)*xy*(-18*z2 + 33*z4 + 1)/(32*sqrt(pi)) + outputs[41] = 0.58262136251873131f*yz*(30.0f*z2 - 33.0f*z4 - 5.0f) ; // sqrt(273)*yz*(30*z2 - 33*z4 - 5)/(16*sqrt(pi)) + outputs[42] = 6.6747662381009842f*z2 - 20.024298714302954f*z4 + 14.684485723822165f*z6 - 0.31784601133814211f ; // sqrt(13)*(105*z2 - 315*z4 + 231*z6 - 5)/(32*sqrt(pi)) + outputs[43] = 0.58262136251873131f*xz*(30.0f*z2 - 33.0f*z4 - 5.0f) ; // sqrt(273)*xz*(30*z2 - 33*z4 - 5)/(16*sqrt(pi)) + outputs[44] = 0.46060262975746175f*(x2 - y2)*(11.0f*z2*(3.0f*z2 - 1.0f) - 7.0f*z2 + 1.0f) ; // sqrt(2730)*(x2 - y2)*(11*z2*(3*z2 - 1) - 7*z2 + 1)/(64*sqrt(pi)) + outputs[45] = -0.92120525951492349f*xz*(x2 - 3.0f*y2)*(11.0f*z2 - 3.0f) ; // -sqrt(2730)*xz*(x2 - 3*y2)*(11*z2 - 3)/(32*sqrt(pi)) + outputs[46] = 0.50456490072872406f*(11.0f*z2 - 1.0f)*(-6.0f*x2*y2 + x4 + y4) ; // 3*sqrt(91)*(11*z2 - 1)*(-6*x2*y2 + x4 + y4)/(32*sqrt(pi)) + outputs[47] = 2.3666191622317521f*xz*(10.0f*x2*y2 - x4 - 5.0f*y4) ; // 3*sqrt(2002)*xz*(10*x2*y2 - x4 - 5*y4)/(32*sqrt(pi)) + outputs[48] = 10.247761577878714f*x2*y4 - 10.247761577878714f*x4*y2 + 0.6831841051919143f*x6 - 0.6831841051919143f*y6 ; // sqrt(6006)*(15*x2*y4 - 15*x4*y2 + x6 - y6)/(64*sqrt(pi)) + if (C <= 7) { return; } + outputs[49] = 0.70716273252459627f*y*(-21.0f*x2*y4 + 35.0f*x4*y2 - 7.0f*x6 + y6) ; // 3*sqrt(715)*y*(-21*x2*y4 + 35*x4*y2 - 7*x6 + y6)/(64*sqrt(pi)) + outputs[50] = 5.2919213236038001f*xy*z*(-10.0f*x2*y2 + 3.0f*x4 + 3.0f*y4) ; // 3*sqrt(10010)*xy*z*(-10*x2*y2 + 3*x4 + 3*y4)/(32*sqrt(pi)) + outputs[51] = -0.51891557872026028f*y*(13.0f*z2 - 1.0f)*(-10.0f*x2*y2 + 5.0f*x4 + y4) ; // -3*sqrt(385)*y*(13*z2 - 1)*(-10*x2*y2 + 5*x4 + y4)/(64*sqrt(pi)) + outputs[52] = 4.1513246297620823f*xy*z*(x2 - y2)*(13.0f*z2 - 3.0f) ; // 3*sqrt(385)*xy*z*(x2 - y2)*(13*z2 - 3)/(8*sqrt(pi)) + outputs[53] = -0.15645893386229404f*y*(3.0f*x2 - y2)*(13.0f*z2*(11.0f*z2 - 3.0f) - 27.0f*z2 + 3.0f) ; // -3*sqrt(35)*y*(3*x2 - y2)*(13*z2*(11*z2 - 3) - 27*z2 + 3)/(64*sqrt(pi)) + outputs[54] = 0.44253269244498261f*xy*z*(-110.0f*z2 + 143.0f*z4 + 15.0f) ; // 3*sqrt(70)*xy*z*(-110*z2 + 143*z4 + 15)/(32*sqrt(pi)) + outputs[55] = 0.090331607582517306f*y*(-135.0f*z2 + 495.0f*z4 - 429.0f*z6 + 5.0f) ; // sqrt(105)*y*(-135*z2 + 495*z4 - 429*z6 + 5)/(64*sqrt(pi)) + outputs[56] = 0.068284276912004949f*z*(315.0f*z2 - 693.0f*z4 + 429.0f*z6 - 35.0f) ; // sqrt(15)*z*(315*z2 - 693*z4 + 429*z6 - 35)/(32*sqrt(pi)) + outputs[57] = 0.090331607582517306f*x*(-135.0f*z2 + 495.0f*z4 - 429.0f*z6 + 5.0f) ; // sqrt(105)*x*(-135*z2 + 495*z4 - 429*z6 + 5)/(64*sqrt(pi)) + outputs[58] = 0.07375544874083044f*z*(x2 - y2)*(143.0f*z2*(3.0f*z2 - 1.0f) - 187.0f*z2 + 45.0f) ; // sqrt(70)*z*(x2 - y2)*(143*z2*(3*z2 - 1) - 187*z2 + 45)/(64*sqrt(pi)) + outputs[59] = -0.15645893386229404f*x*(x2 - 3.0f*y2)*(13.0f*z2*(11.0f*z2 - 3.0f) - 27.0f*z2 + 3.0f) ; // -3*sqrt(35)*x*(x2 - 3*y2)*(13*z2*(11*z2 - 3) - 27*z2 + 3)/(64*sqrt(pi)) + outputs[60] = 1.0378311574405206f*z*(13.0f*z2 - 3.0f)*(-6.0f*x2*y2 + x4 + y4) ; // 3*sqrt(385)*z*(13*z2 - 3)*(-6*x2*y2 + x4 + y4)/(32*sqrt(pi)) + outputs[61] = -0.51891557872026028f*x*(13.0f*z2 - 1.0f)*(-10.0f*x2*y2 + x4 + 5.0f*y4) ; // -3*sqrt(385)*x*(13*z2 - 1)*(-10*x2*y2 + x4 + 5*y4)/(64*sqrt(pi)) + outputs[62] = 2.6459606618019f*z*(15.0f*x2*y4 - 15.0f*x4*y2 + x6 - y6) ; // 3*sqrt(10010)*z*(15*x2*y4 - 15*x4*y2 + x6 - y6)/(64*sqrt(pi)) + outputs[63] = 0.70716273252459627f*x*(-35.0f*x2*y4 + 21.0f*x4*y2 - x6 + 7.0f*y6) ; // 3*sqrt(715)*x*(-35*x2*y4 + 21*x4*y2 - x6 + 7*y6)/(64*sqrt(pi)) + }; + + write_sh(); + + if (dy_dx) { + scalar_t *dx = dy_dx + b * D * C2; + scalar_t *dy = dx + C2; + scalar_t *dz = dy + C2; + + auto write_sh_dx = [&]() { + dx[0] = 0.0f ; // 0 + if (C <= 1) { return; } + dx[1] = 0.0f ; // 0 + dx[2] = 0.0f ; // 0 + dx[3] = -0.48860251190291992f ; // -sqrt(3)/(2*sqrt(pi)) + if (C <= 2) { return; } + dx[4] = 1.0925484305920792f*y ; // sqrt(15)*y/(2*sqrt(pi)) + dx[5] = 0.0f ; // 0 + dx[6] = 0.0f ; // 0 + dx[7] = -1.0925484305920792f*z ; // -sqrt(15)*z/(2*sqrt(pi)) + dx[8] = 1.0925484305920792f*x ; // sqrt(15)*x/(2*sqrt(pi)) + if (C <= 3) { return; } + dx[9] = -3.5402615395598609f*xy ; // -3*sqrt(70)*xy/(4*sqrt(pi)) + dx[10] = 2.8906114426405538f*yz ; // sqrt(105)*yz/(2*sqrt(pi)) + dx[11] = 0.0f ; // 0 + dx[12] = 0.0f ; // 0 + dx[13] = 0.45704579946446572f - 2.2852289973223288f*z2 ; // sqrt(42)*(1 - 5*z2)/(8*sqrt(pi)) + dx[14] = 2.8906114426405538f*xz ; // sqrt(105)*xz/(2*sqrt(pi)) + dx[15] = -1.7701307697799304f*x2 + 1.7701307697799304f*y2 ; // 3*sqrt(70)*(-x2 + y2)/(8*sqrt(pi)) + if (C <= 4) { return; } + dx[16] = 2.5033429417967046f*y*(3.0f*x2 - y2) ; // 3*sqrt(35)*y*(3*x2 - y2)/(4*sqrt(pi)) + dx[17] = -10.620784618679583f*xy*z ; // -9*sqrt(70)*xy*z/(4*sqrt(pi)) + dx[18] = 0.94617469575756008f*y*(7.0f*z2 - 1.0f) ; // 3*sqrt(5)*y*(7*z2 - 1)/(4*sqrt(pi)) + dx[19] = 0.0f ; // 0 + dx[20] = 0.0f ; // 0 + dx[21] = 0.66904654355728921f*z*(3.0f - 7.0f*z2) ; // 3*sqrt(10)*z*(3 - 7*z2)/(8*sqrt(pi)) + dx[22] = 0.94617469575756008f*x*(7.0f*z2 - 1.0f) ; // 3*sqrt(5)*x*(7*z2 - 1)/(4*sqrt(pi)) + dx[23] = 5.3103923093397913f*z*(-x2 + y2) ; // 9*sqrt(70)*z*(-x2 + y2)/(8*sqrt(pi)) + dx[24] = 2.5033429417967046f*x*(x2 - 3.0f*y2) ; // 3*sqrt(35)*x*(x2 - 3*y2)/(4*sqrt(pi)) + if (C <= 5) { return; } + dx[25] = 13.127641136803401f*xy*(-x2 + y2) ; // 15*sqrt(154)*xy*(-x2 + y2)/(8*sqrt(pi)) + dx[26] = 8.3026492595241645f*yz*(3.0f*x2 - y2) ; // 3*sqrt(385)*yz*(3*x2 - y2)/(4*sqrt(pi)) + dx[27] = 2.9354297966115022f*xy*(1.0f - 9.0f*z2) ; // 3*sqrt(770)*xy*(1 - 9*z2)/(16*sqrt(pi)) + dx[28] = 4.7935367849733241f*yz*(3.0f*z2 - 1.0f) ; // sqrt(1155)*yz*(3*z2 - 1)/(4*sqrt(pi)) + dx[29] = 0.0f ; // 0 + dx[30] = 0.0f ; // 0 + dx[31] = 6.3412531167397574f*z2 - 9.5118796751096362f*z4 - 0.45294665119569694f ; // sqrt(165)*(14*z2 - 21*z4 - 1)/(16*sqrt(pi)) + dx[32] = 4.7935367849733241f*xz*(3.0f*z2 - 1.0f) ; // sqrt(1155)*xz*(3*z2 - 1)/(4*sqrt(pi)) + dx[33] = -13.209434084751759f*x2*z2 + 1.4677148983057511f*x2 + 13.209434084751759f*y2*z2 - 1.4677148983057511f*y2 ; // 3*sqrt(770)*(-9*x2*z2 + x2 + 9*y2*z2 - y2)/(32*sqrt(pi)) + dx[34] = 8.3026492595241645f*xz*(x2 - 3.0f*y2) ; // 3*sqrt(385)*xz*(x2 - 3*y2)/(4*sqrt(pi)) + dx[35] = 19.6914617052051f*x2*y2 - 3.2819102842008503f*x4 - 3.2819102842008503f*y4 ; // 15*sqrt(154)*(6*x2*y2 - x4 - y4)/(32*sqrt(pi)) + if (C <= 6) { return; } + dx[36] = 4.0991046311514854f*y*(-10.0f*x2*y2 + 5.0f*x4 + y4) ; // 3*sqrt(6006)*y*(-10*x2*y2 + 5*x4 + y4)/(32*sqrt(pi)) + dx[37] = 47.332383244635047f*xy*z*(-x2 + y2) ; // 15*sqrt(2002)*xy*z*(-x2 + y2)/(8*sqrt(pi)) + dx[38] = 2.0182596029148963f*y*(3.0f*x2 - y2)*(11.0f*z2 - 1.0f) ; // 3*sqrt(91)*y*(3*x2 - y2)*(11*z2 - 1)/(8*sqrt(pi)) + dx[39] = 5.5272315570895412f*xy*z*(3.0f - 11.0f*z2) ; // 3*sqrt(2730)*xy*z*(3 - 11*z2)/(16*sqrt(pi)) + dx[40] = 0.92120525951492349f*y*(-18.0f*z2 + 33.0f*z4 + 1.0f) ; // sqrt(2730)*y*(-18*z2 + 33*z4 + 1)/(32*sqrt(pi)) + dx[41] = 0.0f ; // 0 + dx[42] = 0.0f ; // 0 + dx[43] = 0.58262136251873131f*z*(30.0f*z2 - 33.0f*z4 - 5.0f) ; // sqrt(273)*z*(30*z2 - 33*z4 - 5)/(16*sqrt(pi)) + dx[44] = 0.92120525951492349f*x*(-18.0f*z2 + 33.0f*z4 + 1.0f) ; // sqrt(2730)*x*(-18*z2 + 33*z4 + 1)/(32*sqrt(pi)) + dx[45] = -2.7636157785447706f*z*(x2 - y2)*(11.0f*z2 - 3.0f) ; // -3*sqrt(2730)*z*(x2 - y2)*(11*z2 - 3)/(32*sqrt(pi)) + dx[46] = 2.0182596029148963f*x*(x2 - 3.0f*y2)*(11.0f*z2 - 1.0f) ; // 3*sqrt(91)*x*(x2 - 3*y2)*(11*z2 - 1)/(8*sqrt(pi)) + dx[47] = 11.833095811158762f*z*(6.0f*x2*y2 - x4 - y4) ; // 15*sqrt(2002)*z*(6*x2*y2 - x4 - y4)/(32*sqrt(pi)) + dx[48] = 4.0991046311514854f*x*(-10.0f*x2*y2 + x4 + 5.0f*y4) ; // 3*sqrt(6006)*x*(-10*x2*y2 + x4 + 5*y4)/(32*sqrt(pi)) + if (C <= 7) { return; } + dx[49] = 9.9002782553443485f*xy*(10.0f*x2*y2 - 3.0f*x4 - 3.0f*y4) ; // 21*sqrt(715)*xy*(10*x2*y2 - 3*x4 - 3*y4)/(32*sqrt(pi)) + dx[50] = 15.875763970811402f*yz*(-10.0f*x2*y2 + 5.0f*x4 + y4) ; // 9*sqrt(10010)*yz*(-10*x2*y2 + 5*x4 + y4)/(32*sqrt(pi)) + dx[51] = -10.378311574405206f*xy*(x2 - y2)*(13.0f*z2 - 1.0f) ; // -15*sqrt(385)*xy*(x2 - y2)*(13*z2 - 1)/(16*sqrt(pi)) + dx[52] = 4.1513246297620823f*yz*(3.0f*x2 - y2)*(13.0f*z2 - 3.0f) ; // 3*sqrt(385)*yz*(3*x2 - y2)*(13*z2 - 3)/(8*sqrt(pi)) + dx[53] = 0.93875360317376422f*xy*(66.0f*z2 - 143.0f*z4 - 3.0f) ; // 9*sqrt(35)*xy*(66*z2 - 143*z4 - 3)/(32*sqrt(pi)) + dx[54] = 0.44253269244498261f*yz*(-110.0f*z2 + 143.0f*z4 + 15.0f) ; // 3*sqrt(70)*yz*(-110*z2 + 143*z4 + 15)/(32*sqrt(pi)) + dx[55] = 0.0f ; // 0 + dx[56] = 0.0f ; // 0 + dx[57] = -12.194767023639836f*z2 + 44.714145753346067f*z4 - 38.752259652899923f*z6 + 0.45165803791258652f ; // sqrt(105)*(-135*z2 + 495*z4 - 429*z6 + 5)/(64*sqrt(pi)) + dx[58] = 0.44253269244498261f*xz*(-110.0f*z2 + 143.0f*z4 + 15.0f) ; // 3*sqrt(70)*xz*(-110*z2 + 143*z4 + 15)/(32*sqrt(pi)) + dx[59] = 30.97886890473422f*x2*z2 - 67.120882626924143f*x2*z4 - 1.4081304047606462f*x2 - 30.97886890473422f*y2*z2 + 67.120882626924143f*y2*z4 + 1.4081304047606462f*y2 ; // 9*sqrt(35)*(66*x2*z2 - 143*x2*z4 - 3*x2 - 66*y2*z2 + 143*y2*z4 + 3*y2)/(64*sqrt(pi)) + dx[60] = 4.1513246297620823f*xz*(x2 - 3.0f*y2)*(13.0f*z2 - 3.0f) ; // 3*sqrt(385)*xz*(x2 - 3*y2)*(13*z2 - 3)/(8*sqrt(pi)) + dx[61] = -0.51891557872026028f*(13.0f*z2 - 1.0f)*(-10.0f*x2*y2 + 4.0f*x2*(x2 - 5.0f*y2) + x4 + 5.0f*y4) ; // -3*sqrt(385)*(13*z2 - 1)*(-10*x2*y2 + 4*x2*(x2 - 5*y2) + x4 + 5*y4)/(64*sqrt(pi)) + dx[62] = 15.875763970811402f*xz*(-10.0f*x2*y2 + x4 + 5.0f*y4) ; // 9*sqrt(10010)*xz*(-10*x2*y2 + x4 + 5*y4)/(32*sqrt(pi)) + dx[63] = -74.252086915082614f*x2*y4 + 74.252086915082614f*x4*y2 - 4.9501391276721742f*x6 + 4.9501391276721742f*y6 ; // 21*sqrt(715)*(-15*x2*y4 + 15*x4*y2 - x6 + y6)/(64*sqrt(pi)) + }; + + auto write_sh_dy = [&]() { + dy[0] = 0.0f ; // 0 + if (C <= 1) { return; } + dy[1] = -0.48860251190291992f ; // -sqrt(3)/(2*sqrt(pi)) + dy[2] = 0.0f ; // 0 + dy[3] = 0.0f ; // 0 + if (C <= 2) { return; } + dy[4] = 1.0925484305920792f*x ; // sqrt(15)*x/(2*sqrt(pi)) + dy[5] = -1.0925484305920792f*z ; // -sqrt(15)*z/(2*sqrt(pi)) + dy[6] = 0.0f ; // 0 + dy[7] = 0.0f ; // 0 + dy[8] = -1.0925484305920792f*y ; // -sqrt(15)*y/(2*sqrt(pi)) + if (C <= 3) { return; } + dy[9] = -1.7701307697799304f*x2 + 1.7701307697799304f*y2 ; // 3*sqrt(70)*(-x2 + y2)/(8*sqrt(pi)) + dy[10] = 2.8906114426405538f*xz ; // sqrt(105)*xz/(2*sqrt(pi)) + dy[11] = 0.45704579946446572f - 2.2852289973223288f*z2 ; // sqrt(42)*(1 - 5*z2)/(8*sqrt(pi)) + dy[12] = 0.0f ; // 0 + dy[13] = 0.0f ; // 0 + dy[14] = -2.8906114426405538f*yz ; // -sqrt(105)*yz/(2*sqrt(pi)) + dy[15] = 3.5402615395598609f*xy ; // 3*sqrt(70)*xy/(4*sqrt(pi)) + if (C <= 4) { return; } + dy[16] = 2.5033429417967046f*x*(x2 - 3.0f*y2) ; // 3*sqrt(35)*x*(x2 - 3*y2)/(4*sqrt(pi)) + dy[17] = 5.3103923093397913f*z*(-x2 + y2) ; // 9*sqrt(70)*z*(-x2 + y2)/(8*sqrt(pi)) + dy[18] = 0.94617469575756008f*x*(7.0f*z2 - 1.0f) ; // 3*sqrt(5)*x*(7*z2 - 1)/(4*sqrt(pi)) + dy[19] = 0.66904654355728921f*z*(3.0f - 7.0f*z2) ; // 3*sqrt(10)*z*(3 - 7*z2)/(8*sqrt(pi)) + dy[20] = 0.0f ; // 0 + dy[21] = 0.0f ; // 0 + dy[22] = 0.94617469575756008f*y*(1.0f - 7.0f*z2) ; // 3*sqrt(5)*y*(1 - 7*z2)/(4*sqrt(pi)) + dy[23] = 10.620784618679583f*xy*z ; // 9*sqrt(70)*xy*z/(4*sqrt(pi)) + dy[24] = 2.5033429417967046f*y*(-3.0f*x2 + y2) ; // 3*sqrt(35)*y*(-3*x2 + y2)/(4*sqrt(pi)) + if (C <= 5) { return; } + dy[25] = 19.6914617052051f*x2*y2 - 3.2819102842008503f*x4 - 3.2819102842008503f*y4 ; // 15*sqrt(154)*(6*x2*y2 - x4 - y4)/(32*sqrt(pi)) + dy[26] = 8.3026492595241645f*xz*(x2 - 3.0f*y2) ; // 3*sqrt(385)*xz*(x2 - 3*y2)/(4*sqrt(pi)) + dy[27] = -1.4677148983057511f*(x2 - y2)*(9.0f*z2 - 1.0f) ; // -3*sqrt(770)*(x2 - y2)*(9*z2 - 1)/(32*sqrt(pi)) + dy[28] = 4.7935367849733241f*xz*(3.0f*z2 - 1.0f) ; // sqrt(1155)*xz*(3*z2 - 1)/(4*sqrt(pi)) + dy[29] = 6.3412531167397574f*z2 - 9.5118796751096362f*z4 - 0.45294665119569694f ; // sqrt(165)*(14*z2 - 21*z4 - 1)/(16*sqrt(pi)) + dy[30] = 0.0f ; // 0 + dy[31] = 0.0f ; // 0 + dy[32] = 4.7935367849733241f*yz*(1.0f - 3.0f*z2) ; // sqrt(1155)*yz*(1 - 3*z2)/(4*sqrt(pi)) + dy[33] = 2.9354297966115022f*xy*(9.0f*z2 - 1.0f) ; // 3*sqrt(770)*xy*(9*z2 - 1)/(16*sqrt(pi)) + dy[34] = 8.3026492595241645f*yz*(-3.0f*x2 + y2) ; // 3*sqrt(385)*yz*(-3*x2 + y2)/(4*sqrt(pi)) + dy[35] = 13.127641136803401f*xy*(x2 - y2) ; // 15*sqrt(154)*xy*(x2 - y2)/(8*sqrt(pi)) + if (C <= 6) { return; } + dy[36] = 4.0991046311514854f*x*(-10.0f*x2*y2 + x4 + 5.0f*y4) ; // 3*sqrt(6006)*x*(-10*x2*y2 + x4 + 5*y4)/(32*sqrt(pi)) + dy[37] = 11.833095811158762f*z*(6.0f*x2*y2 - x4 - y4) ; // 15*sqrt(2002)*z*(6*x2*y2 - x4 - y4)/(32*sqrt(pi)) + dy[38] = 2.0182596029148963f*x*(x2 - 3.0f*y2)*(11.0f*z2 - 1.0f) ; // 3*sqrt(91)*x*(x2 - 3*y2)*(11*z2 - 1)/(8*sqrt(pi)) + dy[39] = -2.7636157785447706f*z*(x2 - y2)*(11.0f*z2 - 3.0f) ; // -3*sqrt(2730)*z*(x2 - y2)*(11*z2 - 3)/(32*sqrt(pi)) + dy[40] = 0.92120525951492349f*x*(-18.0f*z2 + 33.0f*z4 + 1.0f) ; // sqrt(2730)*x*(-18*z2 + 33*z4 + 1)/(32*sqrt(pi)) + dy[41] = 0.58262136251873131f*z*(30.0f*z2 - 33.0f*z4 - 5.0f) ; // sqrt(273)*z*(30*z2 - 33*z4 - 5)/(16*sqrt(pi)) + dy[42] = 0.0f ; // 0 + dy[43] = 0.0f ; // 0 + dy[44] = 0.92120525951492349f*y*(18.0f*z2 - 33.0f*z4 - 1.0f) ; // sqrt(2730)*y*(18*z2 - 33*z4 - 1)/(32*sqrt(pi)) + dy[45] = 5.5272315570895412f*xy*z*(11.0f*z2 - 3.0f) ; // 3*sqrt(2730)*xy*z*(11*z2 - 3)/(16*sqrt(pi)) + dy[46] = -2.0182596029148963f*y*(3.0f*x2 - y2)*(11.0f*z2 - 1.0f) ; // -3*sqrt(91)*y*(3*x2 - y2)*(11*z2 - 1)/(8*sqrt(pi)) + dy[47] = 47.332383244635047f*xy*z*(x2 - y2) ; // 15*sqrt(2002)*xy*z*(x2 - y2)/(8*sqrt(pi)) + dy[48] = 4.0991046311514854f*y*(10.0f*x2*y2 - 5.0f*x4 - y4) ; // 3*sqrt(6006)*y*(10*x2*y2 - 5*x4 - y4)/(32*sqrt(pi)) + if (C <= 7) { return; } + dy[49] = -74.252086915082614f*x2*y4 + 74.252086915082614f*x4*y2 - 4.9501391276721742f*x6 + 4.9501391276721742f*y6 ; // 21*sqrt(715)*(-15*x2*y4 + 15*x4*y2 - x6 + y6)/(64*sqrt(pi)) + dy[50] = 15.875763970811402f*xz*(-10.0f*x2*y2 + x4 + 5.0f*y4) ; // 9*sqrt(10010)*xz*(-10*x2*y2 + x4 + 5*y4)/(32*sqrt(pi)) + dy[51] = 0.51891557872026028f*(13.0f*z2 - 1.0f)*(10.0f*x2*y2 - 5.0f*x4 + 4.0f*y2*(5.0f*x2 - y2) - y4) ; // 3*sqrt(385)*(13*z2 - 1)*(10*x2*y2 - 5*x4 + 4*y2*(5*x2 - y2) - y4)/(64*sqrt(pi)) + dy[52] = 4.1513246297620823f*xz*(x2 - 3.0f*y2)*(13.0f*z2 - 3.0f) ; // 3*sqrt(385)*xz*(x2 - 3*y2)*(13*z2 - 3)/(8*sqrt(pi)) + dy[53] = -0.46937680158688211f*(x2 - y2)*(13.0f*z2*(11.0f*z2 - 3.0f) - 27.0f*z2 + 3.0f) ; // -9*sqrt(35)*(x2 - y2)*(13*z2*(11*z2 - 3) - 27*z2 + 3)/(64*sqrt(pi)) + dy[54] = 0.44253269244498261f*xz*(-110.0f*z2 + 143.0f*z4 + 15.0f) ; // 3*sqrt(70)*xz*(-110*z2 + 143*z4 + 15)/(32*sqrt(pi)) + dy[55] = -12.194767023639836f*z2 + 44.714145753346067f*z4 - 38.752259652899923f*z6 + 0.45165803791258652f ; // sqrt(105)*(-135*z2 + 495*z4 - 429*z6 + 5)/(64*sqrt(pi)) + dy[56] = 0.0f ; // 0 + dy[57] = 0.0f ; // 0 + dy[58] = 0.44253269244498261f*yz*(110.0f*z2 - 143.0f*z4 - 15.0f) ; // 3*sqrt(70)*yz*(110*z2 - 143*z4 - 15)/(32*sqrt(pi)) + dy[59] = 0.93875360317376422f*xy*(-66.0f*z2 + 143.0f*z4 + 3.0f) ; // 9*sqrt(35)*xy*(-66*z2 + 143*z4 + 3)/(32*sqrt(pi)) + dy[60] = -4.1513246297620823f*yz*(3.0f*x2 - y2)*(13.0f*z2 - 3.0f) ; // -3*sqrt(385)*yz*(3*x2 - y2)*(13*z2 - 3)/(8*sqrt(pi)) + dy[61] = 10.378311574405206f*xy*(x2 - y2)*(13.0f*z2 - 1.0f) ; // 15*sqrt(385)*xy*(x2 - y2)*(13*z2 - 1)/(16*sqrt(pi)) + dy[62] = 15.875763970811402f*yz*(10.0f*x2*y2 - 5.0f*x4 - y4) ; // 9*sqrt(10010)*yz*(10*x2*y2 - 5*x4 - y4)/(32*sqrt(pi)) + dy[63] = 9.9002782553443485f*xy*(-10.0f*x2*y2 + 3.0f*x4 + 3.0f*y4) ; // 21*sqrt(715)*xy*(-10*x2*y2 + 3*x4 + 3*y4)/(32*sqrt(pi)) + }; + + auto write_sh_dz = [&]() { + dz[0] = 0.0f ; // 0 + if (C <= 1) { return; } + dz[1] = 0.0f ; // 0 + dz[2] = 0.48860251190291992f ; // sqrt(3)/(2*sqrt(pi)) + dz[3] = 0.0f ; // 0 + if (C <= 2) { return; } + dz[4] = 0.0f ; // 0 + dz[5] = -1.0925484305920792f*y ; // -sqrt(15)*y/(2*sqrt(pi)) + dz[6] = 1.8923493915151202f*z ; // 3*sqrt(5)*z/(2*sqrt(pi)) + dz[7] = -1.0925484305920792f*x ; // -sqrt(15)*x/(2*sqrt(pi)) + dz[8] = 0.0f ; // 0 + if (C <= 3) { return; } + dz[9] = 0.0f ; // 0 + dz[10] = 2.8906114426405538f*xy ; // sqrt(105)*xy/(2*sqrt(pi)) + dz[11] = -4.5704579946446566f*yz ; // -5*sqrt(42)*yz/(4*sqrt(pi)) + dz[12] = 5.597644988851731f*z2 - 1.1195289977703462f ; // 3*sqrt(7)*(5*z2 - 1)/(4*sqrt(pi)) + dz[13] = -4.5704579946446566f*xz ; // -5*sqrt(42)*xz/(4*sqrt(pi)) + dz[14] = 1.4453057213202769f*x2 - 1.4453057213202769f*y2 ; // sqrt(105)*(x2 - y2)/(4*sqrt(pi)) + dz[15] = 0.0f ; // 0 + if (C <= 4) { return; } + dz[16] = 0.0f ; // 0 + dz[17] = 1.7701307697799304f*y*(-3.0f*x2 + y2) ; // 3*sqrt(70)*y*(-3*x2 + y2)/(8*sqrt(pi)) + dz[18] = 13.246445740605839f*xy*z ; // 21*sqrt(5)*xy*z/(2*sqrt(pi)) + dz[19] = 2.0071396306718676f*y*(1.0f - 7.0f*z2) ; // 9*sqrt(10)*y*(1 - 7*z2)/(8*sqrt(pi)) + dz[20] = 14.809976568128603f*z*z*z - 6.3471328149122579f*z ; // (105*z**3 - 45*z)/(4*sqrt(pi)) + dz[21] = 2.0071396306718676f*x*(1.0f - 7.0f*z2) ; // 9*sqrt(10)*x*(1 - 7*z2)/(8*sqrt(pi)) + dz[22] = 6.6232228703029197f*z*(x2 - y2) ; // 21*sqrt(5)*z*(x2 - y2)/(4*sqrt(pi)) + dz[23] = 1.7701307697799304f*x*(-x2 + 3.0f*y2) ; // 3*sqrt(70)*x*(-x2 + 3*y2)/(8*sqrt(pi)) + dz[24] = 0.0f ; // 0 + if (C <= 5) { return; } + dz[25] = 0.0f ; // 0 + dz[26] = 8.3026492595241645f*xy*(x2 - y2) ; // 3*sqrt(385)*xy*(x2 - y2)/(4*sqrt(pi)) + dz[27] = 8.8062893898345074f*yz*(-3.0f*x2 + y2) ; // 9*sqrt(770)*yz*(-3*x2 + y2)/(16*sqrt(pi)) + dz[28] = 4.7935367849733241f*xy*(9.0f*z2 - 1.0f) ; // sqrt(1155)*xy*(9*z2 - 1)/(4*sqrt(pi)) + dz[29] = 12.682506233479513f*yz*(1.0f - 3.0f*z2) ; // 7*sqrt(165)*yz*(1 - 3*z2)/(4*sqrt(pi)) + dz[30] = -24.559567715218954f*z2 + 36.839351572828434f*z4 + 1.754254836801354f ; // 15*sqrt(11)*(-14*z2 + 21*z4 + 1)/(16*sqrt(pi)) + dz[31] = 12.682506233479513f*xz*(1.0f - 3.0f*z2) ; // 7*sqrt(165)*xz*(1 - 3*z2)/(4*sqrt(pi)) + dz[32] = 2.3967683924866621f*(x2 - y2)*(9.0f*z2 - 1.0f) ; // sqrt(1155)*(x2 - y2)*(9*z2 - 1)/(8*sqrt(pi)) + dz[33] = 8.8062893898345074f*xz*(-x2 + 3.0f*y2) ; // 9*sqrt(770)*xz*(-x2 + 3*y2)/(16*sqrt(pi)) + dz[34] = -12.453973889286246f*x2*y2 + 2.0756623148810411f*x4 + 2.0756623148810411f*y4 ; // 3*sqrt(385)*(-6*x2*y2 + x4 + y4)/(16*sqrt(pi)) + dz[35] = 0.0f ; // 0 + if (C <= 6) { return; } + dz[36] = 0.0f ; // 0 + dz[37] = 2.3666191622317521f*y*(10.0f*x2*y2 - 5.0f*x4 - y4) ; // 3*sqrt(2002)*y*(10*x2*y2 - 5*x4 - y4)/(32*sqrt(pi)) + dz[38] = 44.401711264127719f*xy*z*(x2 - y2) ; // 33*sqrt(91)*xy*z*(x2 - y2)/(4*sqrt(pi)) + dz[39] = -2.7636157785447706f*y*(3.0f*x2 - y2)*(11.0f*z2 - 1.0f) ; // -3*sqrt(2730)*y*(3*x2 - y2)*(11*z2 - 1)/(32*sqrt(pi)) + dz[40] = 11.054463114179082f*xy*z*(11.0f*z2 - 3.0f) ; // 3*sqrt(2730)*xy*z*(11*z2 - 3)/(8*sqrt(pi)) + dz[41] = 2.9131068125936568f*y*(18.0f*z2 - 33.0f*z4 - 1.0f) ; // 5*sqrt(273)*y*(18*z2 - 33*z4 - 1)/(16*sqrt(pi)) + dz[42] = 2.6699064952403937f*z*(-30.0f*z2 + 33.0f*z4 + 5.0f) ; // 21*sqrt(13)*z*(-30*z2 + 33*z4 + 5)/(16*sqrt(pi)) + dz[43] = 2.9131068125936568f*x*(18.0f*z2 - 33.0f*z4 - 1.0f) ; // 5*sqrt(273)*x*(18*z2 - 33*z4 - 1)/(16*sqrt(pi)) + dz[44] = 5.5272315570895412f*z*(x2 - y2)*(11.0f*z2 - 3.0f) ; // 3*sqrt(2730)*z*(x2 - y2)*(11*z2 - 3)/(16*sqrt(pi)) + dz[45] = -2.7636157785447706f*x*(x2 - 3.0f*y2)*(11.0f*z2 - 1.0f) ; // -3*sqrt(2730)*x*(x2 - 3*y2)*(11*z2 - 1)/(32*sqrt(pi)) + dz[46] = 11.10042781603193f*z*(-6.0f*x2*y2 + x4 + y4) ; // 33*sqrt(91)*z*(-6*x2*y2 + x4 + y4)/(16*sqrt(pi)) + dz[47] = 2.3666191622317521f*x*(10.0f*x2*y2 - x4 - 5.0f*y4) ; // 3*sqrt(2002)*x*(10*x2*y2 - x4 - 5*y4)/(32*sqrt(pi)) + dz[48] = 0.0f ; // 0 + if (C <= 7) { return; } + dz[49] = 0.0f ; // 0 + dz[50] = 5.2919213236038001f*xy*(-10.0f*x2*y2 + 3.0f*x4 + 3.0f*y4) ; // 3*sqrt(10010)*xy*(-10*x2*y2 + 3*x4 + 3*y4)/(32*sqrt(pi)) + dz[51] = 13.491805046726766f*yz*(10.0f*x2*y2 - 5.0f*x4 - y4) ; // 39*sqrt(385)*yz*(10*x2*y2 - 5*x4 - y4)/(32*sqrt(pi)) + dz[52] = 12.453973889286248f*xy*(x2 - y2)*(13.0f*z2 - 1.0f) ; // 9*sqrt(385)*xy*(x2 - y2)*(13*z2 - 1)/(8*sqrt(pi)) + dz[53] = -6.8841930899409371f*yz*(3.0f*x2 - y2)*(13.0f*z2 - 3.0f) ; // -33*sqrt(35)*yz*(3*x2 - y2)*(13*z2 - 3)/(16*sqrt(pi)) + dz[54] = 2.2126634622249131f*xy*(-66.0f*z2 + 143.0f*z4 + 3.0f) ; // 15*sqrt(70)*xy*(-66*z2 + 143*z4 + 3)/(32*sqrt(pi)) + dz[55] = 1.6259689364853116f*yz*(110.0f*z2 - 143.0f*z4 - 15.0f) ; // 9*sqrt(105)*yz*(110*z2 - 143*z4 - 15)/(32*sqrt(pi)) + dz[56] = 64.528641681844675f*z2 - 236.60501950009714f*z4 + 205.05768356675085f*z6 - 2.3899496919201733f ; // 7*sqrt(15)*(135*z2 - 495*z4 + 429*z6 - 5)/(32*sqrt(pi)) + dz[57] = 1.6259689364853116f*xz*(110.0f*z2 - 143.0f*z4 - 15.0f) ; // 9*sqrt(105)*xz*(110*z2 - 143*z4 - 15)/(32*sqrt(pi)) + dz[58] = 0.07375544874083044f*(x2 - y2)*(143.0f*z2*(3.0f*z2 - 1.0f) + 132.0f*z2*(13.0f*z2 - 5.0f) - 187.0f*z2 + 45.0f) ; // sqrt(70)*(x2 - y2)*(143*z2*(3*z2 - 1) + 132*z2*(13*z2 - 5) - 187*z2 + 45)/(64*sqrt(pi)) + dz[59] = -6.8841930899409371f*xz*(x2 - 3.0f*y2)*(13.0f*z2 - 3.0f) ; // -33*sqrt(35)*xz*(x2 - 3*y2)*(13*z2 - 3)/(16*sqrt(pi)) + dz[60] = 3.1134934723215619f*(13.0f*z2 - 1.0f)*(-6.0f*x2*y2 + x4 + y4) ; // 9*sqrt(385)*(13*z2 - 1)*(-6*x2*y2 + x4 + y4)/(32*sqrt(pi)) + dz[61] = 13.491805046726766f*xz*(10.0f*x2*y2 - x4 - 5.0f*y4) ; // 39*sqrt(385)*xz*(10*x2*y2 - x4 - 5*y4)/(32*sqrt(pi)) + dz[62] = 39.6894099270285f*x2*y4 - 39.6894099270285f*x4*y2 + 2.6459606618019f*x6 - 2.6459606618019f*y6 ; // 3*sqrt(10010)*(15*x2*y4 - 15*x4*y2 + x6 - y6)/(64*sqrt(pi)) + dz[63] = 0.0f ; // 0 + }; + write_sh_dx(); + write_sh_dy(); + write_sh_dz(); + } +} + + +template +__global__ void kernel_sh_backward( + const scalar_t * __restrict__ grad, + const scalar_t * __restrict__ inputs, + uint32_t B, uint32_t D, uint32_t C, + const scalar_t * __restrict__ dy_dx, + scalar_t * grad_inputs +) { + const uint32_t t = threadIdx.x + blockIdx.x * blockDim.x; + const uint32_t b = t / D; + if (b >= B) return; + + const uint32_t d = t - b * D; + const uint32_t C2 = C * C; + + // locate + grad += b * C2; + dy_dx += b * D * C2 + d * C2; + + for (int ch = 0; ch < C2; ch++) { + grad_inputs[t] += grad[ch] * dy_dx[ch]; + //printf("t=%d, b=%d, d=%d, ch=%d, grad=%f (+= %f * %f)\n", t, b, d, ch, grad_inputs[t], grad[ch], dy_dx[ch]); + } + +} + +// inputs: [B, D], float, in [0, 1] +// outputs: [B, L * C], float +template +void sh_encode_forward_cuda(const scalar_t *inputs, scalar_t *outputs, const uint32_t B, const uint32_t D, const uint32_t C, scalar_t *dy_dx) { + static constexpr uint32_t N_THREADS = 256; + kernel_sh<<>>(inputs, outputs, B, D, C, dy_dx); +} + + +template +void sh_encode_backward_cuda(const scalar_t *grad, const scalar_t *inputs, const uint32_t B, const uint32_t D, const uint32_t C, scalar_t *dy_dx, scalar_t *grad_inputs) { + static constexpr uint32_t N_THREADS = 256; + kernel_sh_backward<<>>(grad, inputs, B, D, C, dy_dx, grad_inputs); +} + + +void sh_encode_forward(at::Tensor inputs, at::Tensor outputs, const uint32_t B, const uint32_t D, const uint32_t C, at::optional dy_dx) { + CHECK_CUDA(inputs); + CHECK_CUDA(outputs); + // CHECK_CUDA(dy_dx); + + CHECK_CONTIGUOUS(inputs); + CHECK_CONTIGUOUS(outputs); + // CHECK_CONTIGUOUS(dy_dx); + + CHECK_IS_FLOATING(inputs); + CHECK_IS_FLOATING(outputs); + // CHECK_IS_FLOATING(dy_dx); + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + inputs.scalar_type(), "sh_encode_forward_cuda", ([&] { + sh_encode_forward_cuda(inputs.data_ptr(), outputs.data_ptr(), B, D, C, dy_dx.has_value() ? dy_dx.value().data_ptr() : nullptr); + })); +} + +void sh_encode_backward(at::Tensor grad, at::Tensor inputs, const uint32_t B, const uint32_t D, const uint32_t C, at::Tensor dy_dx, at::Tensor grad_inputs) { + CHECK_CUDA(grad); + CHECK_CUDA(inputs); + CHECK_CUDA(dy_dx); + CHECK_CUDA(grad_inputs); + + CHECK_CONTIGUOUS(grad); + CHECK_CONTIGUOUS(inputs); + CHECK_CONTIGUOUS(dy_dx); + CHECK_CONTIGUOUS(grad_inputs); + + CHECK_IS_FLOATING(grad); + CHECK_IS_FLOATING(inputs); + CHECK_IS_FLOATING(dy_dx); + CHECK_IS_FLOATING(grad_inputs); + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + grad.scalar_type(), "sh_encode_backward_cuda", ([&] { + sh_encode_backward_cuda(grad.data_ptr(), inputs.data_ptr(), B, D, C, dy_dx.data_ptr(), grad_inputs.data_ptr()); + })); +} \ No newline at end of file diff --git a/shencoder/src/shencoder.h b/shencoder/src/shencoder.h new file mode 100644 index 0000000000000000000000000000000000000000..f9e89facb848940d87c0dec390d991ab2c5d1dd9 --- /dev/null +++ b/shencoder/src/shencoder.h @@ -0,0 +1,10 @@ +# pragma once + +#include +#include + +// inputs: [B, D], float, in [-1, 1] +// outputs: [B, F], float + +void sh_encode_forward(at::Tensor inputs, at::Tensor outputs, const uint32_t B, const uint32_t D, const uint32_t C, at::optional dy_dx); +void sh_encode_backward(at::Tensor grad, at::Tensor inputs, const uint32_t B, const uint32_t D, const uint32_t C, at::Tensor dy_dx, at::Tensor grad_inputs); \ No newline at end of file