├── LICENSE ├── README.md ├── examples └── dsod │ ├── demo.py │ ├── eval.py │ └── train.py └── torchcv ├── __init__.py ├── datasets ├── __init__.py ├── listdataset.py ├── mscoco │ ├── coco17_train.txt │ └── coco17_val.txt └── voc │ ├── voc07_test.txt │ ├── voc07_test_difficult.txt │ ├── voc07_trainval.txt │ ├── voc12_test.txt │ └── voc12_trainval.txt ├── evaluations ├── __init__.py └── voc_eval.py ├── loss ├── __init__.py ├── focal_loss.py └── ssd_loss.py ├── models ├── __init__.py ├── dsod │ ├── __init__.py │ ├── densenet.py │ └── dsod.py └── ssd │ ├── __init__.py │ ├── box_coder.py │ ├── net.py │ └── nms │ ├── __init__.py │ ├── build.py │ ├── make.sh │ ├── pth_nms.py │ └── src │ ├── cuda │ ├── nms_kernel.cu │ └── nms_kernel.h │ ├── nms.c │ ├── nms.h │ ├── nms_cuda.c │ └── nms_cuda.h ├── transforms ├── __init__.py ├── random_crop.py ├── random_distort.py ├── random_flip.py ├── random_paste.py ├── resize.py └── scale_jitter.py ├── utils ├── __init__.py ├── box.py ├── config.py ├── meshgrid.py └── one_hot_embedding.py └── visualizations ├── __init__.py ├── vis_image.py └── visdom.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 kuangliu 4 | Copyright (c) 2018 Yun Chen for the directory of torchcv/models/dsod and examples/dsod 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | Working in progress to reproduce [DSOD: Learning Deeply Supervised Object Detectors from Scratch](http://openaccess.thecvf.com/content_ICCV_2017/papers/Shen_DSOD_Learning_Deeply_ICCV_2017_paper.pdf) 4 | 5 | Original Implementation in Caffe could be found from [here](https://github.com/szq0214/DSOD) 6 | 7 | This implementation is based on [torchcv](https://github.com/kuangliu/torchcv):a PyTorch vision library mimics ChainerCV 8 | 9 | 10 | see train code at `examples/dsod/train.py` 11 | 12 | see model at `torchcv/models/dsod/' 13 | -------------------------------------------------------------------------------- /examples/dsod/demo.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | import torchvision.transforms as transforms 4 | 5 | from PIL import Image, ImageDraw 6 | from torch.autograd import Variable 7 | from torchcv.models.fpnssd import FPNSSD512 8 | from torchcv.models.ssd import SSD512, SSDBoxCoder 9 | 10 | 11 | print('Loading model..') 12 | net = FPNSSD512(num_classes=21) 13 | net.load_state_dict(torch.load('./examples/ssd/checkpoint/params.pth')) 14 | net.eval() 15 | 16 | print('Loading image..') 17 | img = Image.open('./image/000020.jpg') 18 | ow = oh = 512 19 | img = img.resize((ow,oh)) 20 | 21 | print('Predicting..') 22 | transform = transforms.Compose([ 23 | transforms.ToTensor(), 24 | transforms.Normalize((0.485,0.456,0.406), (0.229,0.224,0.225)) 25 | ]) 26 | x = transform(img) 27 | x = Variable(x, volatile=True) 28 | loc_preds, cls_preds = net(x.unsqueeze(0)) 29 | 30 | print('Decoding..') 31 | box_coder = SSDBoxCoder(net) 32 | boxes, labels, scores = box_coder.decode( 33 | loc_preds.data.squeeze(), F.softmax(cls_preds.squeeze(), dim=1).data) 34 | print(labels) 35 | print(scores) 36 | 37 | draw = ImageDraw.Draw(img) 38 | for box in boxes: 39 | draw.rectangle(list(box), outline='red') 40 | img.show() 41 | -------------------------------------------------------------------------------- /examples/dsod/eval.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torchvision 3 | import torch.nn.functional as F 4 | import torchvision.transforms as transforms 5 | 6 | from torch.autograd import Variable 7 | from torchcv.transforms import resize 8 | from torchcv.datasets import ListDataset 9 | from torchcv.evaluations.voc_eval import voc_eval 10 | from torchcv.models.ssd import SSD300, SSDBoxCoder 11 | from torchcv.models.fpnssd.net import FPNSSD512 12 | from PIL import Image 13 | import numpy as np 14 | 15 | print('Loading model..') 16 | net = FPNSSD512(num_classes=21) 17 | net.load_state_dict(torch.load('./examples/ssd/checkpoint/ckpt.pth')['net']) 18 | net.cuda() 19 | net.eval() 20 | 21 | print('Preparing dataset..') 22 | img_size = 512 23 | def transform(img, boxes, labels): 24 | img, boxes = resize(img, boxes, size=(img_size,img_size)) 25 | img = transforms.Compose([ 26 | transforms.ToTensor(), 27 | transforms.Normalize((0.485,0.456,0.406),(0.229,0.224,0.225)) 28 | ])(img) 29 | return img, boxes, labels 30 | 31 | dataset = ListDataset(root='/home/claude.cy/.data/all_images', \ 32 | list_file='torchcv/datasets/voc/voc07_test.txt', 33 | transform=transform) 34 | dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, num_workers=2) 35 | box_coder = SSDBoxCoder(net) 36 | 37 | pred_boxes = [] 38 | pred_labels = [] 39 | pred_scores = [] 40 | gt_boxes = [] 41 | gt_labels = [] 42 | 43 | with open('torchcv/datasets/voc/voc07_test_difficult.txt') as f: 44 | gt_difficults = [] 45 | for line in f.readlines(): 46 | line = line.strip().split() 47 | d = np.array([int(x) for x in line[1:]]) 48 | gt_difficults.append(d) 49 | 50 | def eval(net, dataset): 51 | for i, (inputs, box_targets, label_targets) in enumerate(dataloader): 52 | print('%d/%d' % (i, len(dataloader))) 53 | gt_boxes.append(box_targets.squeeze(0)) 54 | gt_labels.append(label_targets.squeeze(0)) 55 | 56 | loc_preds, cls_preds = net(Variable(inputs.cuda(), volatile=True)) 57 | box_preds, label_preds, score_preds = box_coder.decode( 58 | loc_preds.cpu().data.squeeze(), 59 | F.softmax(cls_preds.squeeze(), dim=1).cpu().data, 60 | score_thresh=0.01) 61 | 62 | pred_boxes.append(box_preds) 63 | pred_labels.append(label_preds) 64 | pred_scores.append(score_preds) 65 | 66 | print(voc_eval( 67 | pred_boxes, pred_labels, pred_scores, 68 | gt_boxes, gt_labels, gt_difficults, 69 | iou_thresh=0.5, use_07_metric=True)) 70 | 71 | eval(net, dataset) 72 | -------------------------------------------------------------------------------- /examples/dsod/train.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import os 4 | import random 5 | 6 | import matplotlib 7 | import numpy as np 8 | import torch 9 | import torch.backends.cudnn as cudnn 10 | import torch.nn.functional as F 11 | import torch.optim as optim 12 | import torchvision.transforms as transforms 13 | from PIL import Image, ImageDraw, ImageFile 14 | from torch.autograd import Variable 15 | from torchnet.meter import AverageValueMeter 16 | from tqdm import tqdm 17 | 18 | from torchcv.datasets import ListDataset 19 | from torchcv.evaluations.voc_eval import voc_eval 20 | from torchcv.loss import SSDLoss 21 | from torchcv.models import DSOD 22 | from torchcv.models.ssd import SSDBoxCoder 23 | from torchcv.transforms import (random_crop, random_distort, random_flip, 24 | random_paste, resize) 25 | from torchcv.utils.config import opt 26 | from torchcv.visualizations import Visualizer 27 | 28 | ImageFile.LOAD_TRUNCATED_IMAGES = True 29 | matplotlib.use('agg') 30 | 31 | 32 | 33 | 34 | 35 | 36 | def caffe_normalize(x): 37 | return transforms.Compose([ 38 | transforms.Lambda(lambda x:255*x[[2,1,0]]) , 39 | transforms.Normalize([104,117,123], (1,1,1)), # make it the same as caffe 40 | # bgr and 0-255 41 | ])(x) 42 | def Transform(box_coder, train=True): 43 | def train_(img, boxes, labels): 44 | img = random_distort(img) 45 | if random.random() < 0.5: 46 | img, boxes = random_paste(img, boxes, max_ratio=4, fill=(123, 116, 103)) 47 | img, boxes, labels = random_crop(img, boxes, labels) 48 | img, boxes = resize(img, boxes, size=(opt.img_size, opt.img_size), random_interpolation=True) 49 | img, boxes = random_flip(img, boxes) 50 | img = transforms.Compose([ 51 | transforms.ToTensor(), 52 | caffe_normalize 53 | ])(img) 54 | boxes, labels = box_coder.encode(boxes, labels) 55 | return img, boxes, labels 56 | 57 | def test_(img, boxes, labels): 58 | img, boxes = resize(img, boxes, size=(opt.img_size, opt.img_size)) 59 | img = transforms.Compose([ 60 | transforms.ToTensor(), 61 | caffe_normalize 62 | ])(img) 63 | boxes, labels = box_coder.encode(boxes, labels) 64 | return img, boxes, labels 65 | 66 | return train_ if train else test_ 67 | 68 | 69 | def eval(net,test_num=10000): 70 | net.eval() 71 | 72 | def transform(img, boxes, labels): 73 | img, boxes = resize(img, boxes, size=(opt.img_size, opt.img_size)) 74 | img = transforms.Compose([ 75 | transforms.ToTensor(), 76 | caffe_normalize 77 | ])(img) 78 | return img, boxes, labels 79 | 80 | dataset = ListDataset(root=opt.data_root, \ 81 | list_file=opt.voc07_test, 82 | transform=transform) 83 | dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, num_workers=8) 84 | box_coder = SSDBoxCoder(net) 85 | 86 | pred_boxes = [] 87 | pred_labels = [] 88 | pred_scores = [] 89 | gt_boxes = [] 90 | gt_labels = [] 91 | 92 | with open('torchcv/datasets/voc/voc07_test_difficult.txt') as f: 93 | gt_difficults = [] 94 | for line in f.readlines(): 95 | line = line.strip().split() 96 | d = np.array([int(x) for x in line[1:]]) 97 | gt_difficults.append(d) 98 | 99 | for i, (inputs, box_targets, label_targets) in tqdm(enumerate(dataloader)): 100 | gt_boxes.append(box_targets.squeeze(0)) 101 | gt_labels.append(label_targets.squeeze(0)) 102 | 103 | loc_preds, cls_preds = net(Variable(inputs.cuda(), volatile=True)) 104 | box_preds, label_preds, score_preds = box_coder.decode( 105 | loc_preds.cpu().data.squeeze(), 106 | F.softmax(cls_preds.squeeze(), dim=1).cpu().data, 107 | score_thresh=0.01) 108 | 109 | pred_boxes.append(box_preds) 110 | pred_labels.append(label_preds) 111 | pred_scores.append(score_preds) 112 | if i==test_num:break 113 | 114 | aps = (voc_eval( 115 | pred_boxes, pred_labels, pred_scores, 116 | gt_boxes, gt_labels, gt_difficults, 117 | iou_thresh=0.5, use_07_metric=True)) 118 | net.train() 119 | return aps 120 | 121 | 122 | def predict(net, box_coder, img): 123 | net.eval() 124 | if isinstance(img, str): 125 | img = Image.open(img) 126 | ow = oh = 300 127 | img = img.resize((ow, oh)) 128 | transform = transforms.Compose([ 129 | transforms.ToTensor(), 130 | caffe_normalize 131 | ]) 132 | x = transform(img).cuda() 133 | x = Variable(x, volatile=True) 134 | loc_preds, cls_preds = net(x.unsqueeze(0)) 135 | try: 136 | boxes, labels, scores = box_coder.decode( 137 | loc_preds.data.cpu().squeeze(), F.softmax(cls_preds.squeeze().cpu(), dim=1).data) 138 | except:print('except in predict') 139 | draw = ImageDraw.Draw(img) 140 | for box in boxes: 141 | draw.rectangle(list(box), outline='red') 142 | net.train() 143 | return img 144 | 145 | 146 | def main(**kwargs): 147 | opt._parse(kwargs) 148 | 149 | vis = Visualizer(env=opt.env) 150 | 151 | # Model 152 | print('==> Building model..') 153 | net = DSOD(num_classes=21) 154 | start_epoch = 0 # start from epoch 0 or last epoch 155 | 156 | 157 | 158 | # Dataset 159 | print('==> Preparing dataset..') 160 | box_coder = SSDBoxCoder(net) 161 | 162 | trainset = ListDataset(root=opt.data_root, 163 | list_file=[opt.voc07_trainval, opt.voc12_trainval], 164 | transform=Transform(box_coder, True)) 165 | 166 | trainloader = torch.utils.data.DataLoader(trainset, 167 | batch_size=opt.batch_size, 168 | shuffle=True, 169 | num_workers=8, 170 | pin_memory=True) 171 | 172 | net.cuda() 173 | net = torch.nn.DataParallel(net, device_ids=range(torch.cuda.device_count())) 174 | cudnn.benchmark = True 175 | if opt.load_path is not None: 176 | print('==> Resuming from checkpoint..') 177 | checkpoint = torch.load(opt.load_path) 178 | net.module.load_state_dict(checkpoint['net']) 179 | 180 | criterion = SSDLoss(num_classes=21) 181 | optimizer = optim.SGD(net.parameters(), lr=opt.lr, momentum=0.9, weight_decay=5e-4) 182 | 183 | best_map_ = 0 184 | best_loss = 1e100 185 | for epoch in range(start_epoch, start_epoch + 200): 186 | print('\nEpoch: %d' % epoch) 187 | net.train() 188 | train_loss = 0 189 | optimizer.zero_grad() 190 | ix = 0 191 | for batch_idx, (inputs, loc_targets, cls_targets) in tqdm(enumerate(trainloader)): 192 | inputs = Variable(inputs.cuda()) 193 | loc_targets = Variable(loc_targets.cuda()) 194 | cls_targets = Variable(cls_targets.cuda()) 195 | 196 | loc_preds, cls_preds = net(inputs) 197 | ix+=1 198 | loss = criterion(loc_preds, loc_targets, cls_preds, cls_targets) 199 | loss.backward() 200 | train_loss += loss.data[0] 201 | if (batch_idx+1) % (opt.iter_size) == 0: 202 | # if True: 203 | for name,p in net.named_parameters():p.grad.data.div_(ix) 204 | ix = 0 205 | optimizer.step() 206 | optimizer.zero_grad() 207 | 208 | 209 | if (batch_idx + 1) % opt.plot_every == 0: 210 | vis.plot('loss', train_loss / (batch_idx + 1)) 211 | 212 | img = predict(net, box_coder, os.path.join(opt.data_root, trainset.fnames[batch_idx])) 213 | vis.img('predict', np.array(img).transpose(2, 0, 1)) 214 | 215 | if os.path.exists(opt.debug_file): 216 | import ipdb 217 | ipdb.set_trace() 218 | 219 | # if (epoch+1)%10 == 0 : 220 | # state = { 221 | # 'net': net.module.state_dict(), 222 | # # 'map': best_map_, 223 | # 'epoch': epoch, 224 | # } 225 | # torch.save(state, opt.checkpoint + '/%s.pth' % epoch) 226 | # if (epoch+1) % 30 == 0: 227 | # for param_group in optimizer.param_groups: 228 | # param_group['lr'] *= 0.1 229 | current_loss = train_loss/(1+batch_idx) 230 | if current_loss< best_loss: 231 | best_loss = current_loss 232 | torch.save(net.module.state_dict(), '/tmp/dsod.pth') 233 | 234 | 235 | if (epoch+1)%opt.eval_every ==0: 236 | net.module.load_state_dict(torch.load('/tmp/dsod.pth')) 237 | 238 | aps = eval(net.module) 239 | map_ = aps['map'] 240 | if map_ > best_map_: 241 | print('Saving..') 242 | state = { 243 | 'net': net.module.state_dict(), 244 | 'map': best_map_, 245 | 'epoch': epoch, 246 | } 247 | best_map_ = map_ 248 | if not os.path.isdir(os.path.dirname(opt.checkpoint)): 249 | os.mkdir(os.path.dirname(opt.checkpoint)) 250 | best_path = opt.checkpoint + '/%s.pth' % best_map_ 251 | torch.save(state, best_path) 252 | else: 253 | net.module.load_state_dict(torch.load(best_path)['net']) 254 | for param_group in optimizer.param_groups: 255 | param_group['lr'] *= 0.1 256 | vis.log(dict(epoch=(epoch+1),map=map_,loss=train_loss / (batch_idx + 1))) 257 | 258 | 259 | 260 | 261 | if __name__ == '__main__': 262 | import fire 263 | 264 | fire.Fire() 265 | -------------------------------------------------------------------------------- /torchcv/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv import utils 2 | from torchcv import datasets 3 | from torchcv import transforms 4 | from torchcv import visualizations 5 | -------------------------------------------------------------------------------- /torchcv/datasets/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.datasets.listdataset import ListDataset 2 | -------------------------------------------------------------------------------- /torchcv/datasets/listdataset.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import os 4 | import sys 5 | import random 6 | 7 | import torch 8 | import torch.utils.data as data 9 | import torchvision.transforms as transforms 10 | 11 | from PIL import Image 12 | 13 | 14 | class ListDataset(data.Dataset): 15 | '''Load image/labels/boxes from a list file. 16 | 17 | The list file is like: 18 | a.jpg xmin ymin xmax ymax label xmin ymin xmax ymax label ... 19 | ''' 20 | def __init__(self, root, list_file, transform=None): 21 | ''' 22 | Args: 23 | root: (str) ditectory to images. 24 | list_file: (str/[str]) path to index file. 25 | transform: (function) image/box transforms. 26 | ''' 27 | self.root = root 28 | self.transform = transform 29 | 30 | self.fnames = [] 31 | self.boxes = [] 32 | self.labels = [] 33 | 34 | if isinstance(list_file, list): 35 | # Cat multiple list files together. 36 | # This is especially useful for voc07/voc12 combination. 37 | tmp_file = '/tmp/listfile.txt' 38 | os.system('cat %s > %s' % (' '.join(list_file), tmp_file)) 39 | list_file = tmp_file 40 | 41 | with open(list_file) as f: 42 | lines = f.readlines() 43 | self.num_imgs = len(lines) 44 | 45 | for line in lines: 46 | splited = line.strip().split() 47 | self.fnames.append(splited[0]) 48 | num_boxes = (len(splited) - 1) // 5 49 | box = [] 50 | label = [] 51 | for i in range(num_boxes): 52 | xmin = splited[1+5*i] 53 | ymin = splited[2+5*i] 54 | xmax = splited[3+5*i] 55 | ymax = splited[4+5*i] 56 | c = splited[5+5*i] 57 | box.append([float(xmin),float(ymin),float(xmax),float(ymax)]) 58 | label.append(int(c)) 59 | self.boxes.append(torch.Tensor(box)) 60 | self.labels.append(torch.LongTensor(label)) 61 | 62 | def __getitem__(self, idx): 63 | '''Load image. 64 | 65 | Args: 66 | idx: (int) image index. 67 | 68 | Returns: 69 | img: (tensor) image tensor. 70 | boxes: (tensor) bounding box targets. 71 | labels: (tensor) class label targets. 72 | ''' 73 | # Load image and boxes. 74 | fname = self.fnames[idx] 75 | file_path = os.path.join(self.root, fname) 76 | img = Image.open(file_path) 77 | if img.mode != 'RGB': 78 | img = img.convert('RGB') 79 | 80 | boxes = self.boxes[idx].clone() # use clone to avoid any potential change. 81 | labels = self.labels[idx].clone() 82 | 83 | if self.transform: 84 | img, boxes, labels = self.transform(img, boxes, labels) 85 | return img, boxes, labels 86 | 87 | def __len__(self): 88 | return self.num_imgs 89 | -------------------------------------------------------------------------------- /torchcv/datasets/voc/voc07_test_difficult.txt: -------------------------------------------------------------------------------- 1 | 000001.jpg 0 0 2 | 000002.jpg 0 3 | 000003.jpg 0 0 4 | 000004.jpg 0 0 0 0 0 0 0 5 | 000006.jpg 0 0 0 1 1 1 1 0 6 | 000008.jpg 0 7 | 000010.jpg 0 0 8 | 000011.jpg 0 9 | 000013.jpg 0 10 | 000014.jpg 0 0 0 0 0 0 1 11 | 000015.jpg 0 12 | 000018.jpg 0 13 | 000022.jpg 0 0 14 | 000025.jpg 0 0 0 0 0 0 0 0 0 0 1 15 | 000027.jpg 0 16 | 000028.jpg 0 17 | 000029.jpg 0 18 | 000031.jpg 0 19 | 000037.jpg 0 20 | 000038.jpg 0 0 0 21 | 000040.jpg 0 22 | 000043.jpg 0 0 0 23 | 000045.jpg 0 24 | 000049.jpg 0 25 | 000053.jpg 0 26 | 000054.jpg 0 27 | 000055.jpg 0 0 1 0 28 | 000056.jpg 0 29 | 000057.jpg 0 30 | 000058.jpg 0 0 0 0 31 | 000059.jpg 0 0 0 0 0 1 32 | 000062.jpg 0 33 | 000067.jpg 0 34 | 000068.jpg 0 35 | 000069.jpg 0 0 36 | 000070.jpg 0 1 37 | 000071.jpg 0 38 | 000074.jpg 0 39 | 000075.jpg 0 40 | 000076.jpg 0 0 0 0 0 0 0 0 0 0 0 41 | 000079.jpg 0 42 | 000080.jpg 1 1 1 0 1 1 0 1 1 43 | 000082.jpg 0 0 44 | 000084.jpg 0 0 1 0 0 1 0 45 | 000085.jpg 1 1 0 0 46 | 000086.jpg 0 1 1 47 | 000087.jpg 0 48 | 000088.jpg 0 49 | 000090.jpg 0 0 1 50 | 000092.jpg 0 51 | 000094.jpg 0 1 52 | 000096.jpg 0 0 53 | 000097.jpg 0 0 0 54 | 000098.jpg 0 55 | 000100.jpg 0 56 | 000103.jpg 0 0 0 1 1 1 1 1 1 57 | 000105.jpg 0 0 0 58 | 000106.jpg 0 59 | 000108.jpg 0 0 0 60 | 000111.jpg 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 61 | 000114.jpg 0 62 | 000115.jpg 0 63 | 000116.jpg 1 0 0 0 64 | 000119.jpg 0 65 | 000124.jpg 0 0 0 0 1 66 | 000126.jpg 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 67 | 000127.jpg 1 1 0 0 0 68 | 000128.jpg 0 1 1 1 1 1 1 1 69 | 000135.jpg 0 70 | 000136.jpg 0 1 71 | 000137.jpg 0 1 1 72 | 000139.jpg 0 0 0 73 | 000144.jpg 1 0 0 0 0 0 0 0 74 | 000145.jpg 0 1 75 | 000148.jpg 0 76 | 000149.jpg 0 77 | 000151.jpg 0 0 78 | 000152.jpg 0 0 0 0 79 | 000155.jpg 1 0 0 0 0 0 80 | 000157.jpg 0 0 81 | 000160.jpg 0 82 | 000166.jpg 0 0 0 0 0 0 83 | 000167.jpg 0 84 | 000168.jpg 0 0 85 | 000172.jpg 0 86 | 000175.jpg 0 87 | 000176.jpg 0 0 0 0 88 | 000178.jpg 0 0 0 1 1 0 0 1 1 0 1 1 1 1 89 | 000179.jpg 0 0 1 0 0 90 | 000181.jpg 0 1 1 0 0 1 91 | 000182.jpg 1 0 92 | 000183.jpg 0 93 | 000185.jpg 0 0 0 94 | 000186.jpg 0 95 | 000188.jpg 0 0 0 0 96 | 000191.jpg 0 0 1 1 1 1 1 0 1 1 0 0 1 0 97 | 000195.jpg 0 98 | 000196.jpg 0 0 0 1 0 99 | 000197.jpg 0 100 | 000199.jpg 0 101 | 000201.jpg 0 0 0 0 0 102 | 000202.jpg 0 0 103 | 000204.jpg 0 104 | 000205.jpg 0 0 0 105 | 000206.jpg 1 1 1 0 106 | 000212.jpg 0 0 0 0 1 0 0 0 0 0 0 107 | 000213.jpg 0 108 | 000216.jpg 0 109 | 000217.jpg 0 0 0 0 1 1 0 0 1 110 | 000223.jpg 0 1 111 | 000226.jpg 0 1 0 1 1 1 0 1 0 1 0 0 112 | 000227.jpg 0 0 113 | 000230.jpg 0 0 114 | 000231.jpg 0 0 115 | 000234.jpg 0 0 0 0 116 | 000237.jpg 0 0 117 | 000238.jpg 0 0 118 | 000239.jpg 0 0 0 119 | 000240.jpg 0 0 0 0 0 0 0 1 1 120 | 000243.jpg 0 121 | 000247.jpg 0 0 0 122 | 000248.jpg 0 0 123 | 000252.jpg 0 0 0 124 | 000253.jpg 0 125 | 000254.jpg 0 0 0 1 1 126 | 000255.jpg 0 127 | 000258.jpg 0 0 128 | 000260.jpg 0 0 129 | 000261.jpg 0 0 130 | 000264.jpg 0 0 131 | 000265.jpg 0 1 0 0 0 0 0 132 | 000267.jpg 0 133 | 000271.jpg 0 0 0 134 | 000272.jpg 0 135 | 000273.jpg 0 136 | 000274.jpg 0 137 | 000277.jpg 0 1 138 | 000279.jpg 0 0 0 139 | 000280.jpg 0 0 0 0 0 140 | 000281.jpg 0 141 | 000283.jpg 0 0 0 0 142 | 000284.jpg 0 143 | 000286.jpg 0 0 144 | 000287.jpg 0 1 0 145 | 000290.jpg 0 146 | 000291.jpg 0 0 0 0 147 | 000292.jpg 0 148 | 000293.jpg 0 0 0 0 0 0 149 | 000295.jpg 0 1 150 | 000297.jpg 0 0 0 151 | 000299.jpg 1 1 0 1 0 0 1 152 | 000300.jpg 0 153 | 000301.jpg 0 0 1 154 | 000309.jpg 0 155 | 000310.jpg 0 0 0 0 156 | 000313.jpg 0 0 0 0 0 0 0 157 | 000314.jpg 0 0 1 1 1 0 0 1 0 158 | 000315.jpg 0 0 0 159 | 000316.jpg 0 160 | 000319.jpg 0 0 0 161 | 000324.jpg 0 162 | 000326.jpg 0 163 | 000327.jpg 0 0 1 1 1 1 1 164 | 000330.jpg 0 0 165 | 000333.jpg 0 166 | 000335.jpg 0 167 | 000339.jpg 0 0 0 0 0 168 | 000341.jpg 0 1 0 0 0 0 0 169 | 000342.jpg 1 0 170 | 000345.jpg 0 171 | 000346.jpg 0 0 0 0 172 | 000348.jpg 0 0 0 0 173 | 000350.jpg 1 1 0 174 | 000351.jpg 0 175 | 000353.jpg 0 1 1 176 | 000356.jpg 0 0 177 | 000357.jpg 0 178 | 000358.jpg 0 0 179 | 000360.jpg 0 1 1 1 180 | 000361.jpg 0 0 181 | 000362.jpg 0 182 | 000364.jpg 0 0 0 183 | 000365.jpg 0 184 | 000366.jpg 0 0 0 185 | 000368.jpg 0 186 | 000369.jpg 0 1 0 0 0 187 | 000371.jpg 0 188 | 000375.jpg 0 189 | 000376.jpg 0 190 | 000377.jpg 0 0 0 0 0 0 0 0 0 0 0 191 | 000378.jpg 0 0 192 | 000383.jpg 0 0 193 | 000384.jpg 0 194 | 000385.jpg 0 0 195 | 000386.jpg 0 0 0 196 | 000388.jpg 0 0 197 | 000389.jpg 1 0 198 | 000390.jpg 0 199 | 000392.jpg 0 0 200 | 000393.jpg 0 0 201 | 000397.jpg 0 0 1 1 0 0 202 | 000398.jpg 0 203 | 000399.jpg 0 204 | 000401.jpg 0 0 205 | 000402.jpg 0 1 1 206 | 000405.jpg 0 207 | 000409.jpg 0 208 | 000410.jpg 0 1 0 0 209 | 000412.jpg 0 0 210 | 000413.jpg 0 0 0 0 1 1 1 211 | 000414.jpg 0 0 0 212 | 000415.jpg 0 213 | 000418.jpg 0 214 | 000421.jpg 0 0 215 | 000422.jpg 0 1 1 1 216 | 000423.jpg 0 0 217 | 000425.jpg 0 218 | 000426.jpg 0 219 | 000429.jpg 0 1 0 220 | 000432.jpg 0 0 221 | 000434.jpg 0 0 222 | 000436.jpg 0 223 | 000437.jpg 0 0 224 | 000440.jpg 0 225 | 000441.jpg 0 226 | 000442.jpg 0 227 | 000444.jpg 0 1 228 | 000445.jpg 0 0 0 0 0 0 0 229 | 000447.jpg 0 1 0 230 | 000449.jpg 0 0 1 0 0 231 | 000451.jpg 0 232 | 000452.jpg 0 1 233 | 000453.jpg 0 0 234 | 000455.jpg 0 0 235 | 000456.jpg 0 0 236 | 000457.jpg 0 237 | 000458.jpg 0 0 1 0 1 238 | 000465.jpg 0 239 | 000466.jpg 0 240 | 000467.jpg 1 0 0 0 1 0 0 0 0 0 0 241 | 000471.jpg 0 242 | 000472.jpg 0 243 | 000473.jpg 0 244 | 000475.jpg 0 0 1 1 245 | 000478.jpg 0 246 | 000479.jpg 0 247 | 000481.jpg 0 0 0 248 | 000485.jpg 0 1 1 249 | 000487.jpg 0 0 0 1 0 250 | 000488.jpg 0 251 | 000490.jpg 1 0 0 0 0 1 252 | 000493.jpg 0 0 0 0 0 253 | 000495.jpg 0 254 | 000497.jpg 0 0 0 0 0 255 | 000502.jpg 0 256 | 000504.jpg 0 0 0 0 257 | 000505.jpg 0 0 0 258 | 000506.jpg 1 0 1 1 0 259 | 000507.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 260 | 000510.jpg 1 1 1 1 0 0 0 0 0 261 | 000511.jpg 0 262 | 000512.jpg 0 263 | 000517.jpg 0 0 0 0 264 | 000521.jpg 0 265 | 000527.jpg 0 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 266 | 000529.jpg 0 1 267 | 000532.jpg 0 0 0 0 268 | 000533.jpg 0 1 0 269 | 000534.jpg 0 270 | 000536.jpg 0 0 271 | 000538.jpg 1 1 0 272 | 000539.jpg 1 0 273 | 000542.jpg 0 274 | 000546.jpg 0 0 275 | 000547.jpg 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 276 | 000548.jpg 0 277 | 000551.jpg 0 0 0 278 | 000553.jpg 0 279 | 000556.jpg 0 280 | 000557.jpg 0 281 | 000558.jpg 0 0 282 | 000560.jpg 0 283 | 000561.jpg 0 0 284 | 000562.jpg 0 0 285 | 000566.jpg 0 286 | 000567.jpg 0 0 287 | 000568.jpg 0 288 | 000569.jpg 0 289 | 000570.jpg 0 0 290 | 000571.jpg 0 0 0 1 1 0 0 1 1 291 | 000572.jpg 0 0 292 | 000573.jpg 1 0 293 | 000574.jpg 0 0 294 | 000575.jpg 0 0 0 295 | 000576.jpg 0 296 | 000578.jpg 0 0 1 297 | 000580.jpg 0 298 | 000584.jpg 0 1 299 | 000585.jpg 0 1 300 | 000586.jpg 0 0 301 | 000587.jpg 1 0 0 0 0 0 302 | 000593.jpg 1 0 1 0 303 | 000594.jpg 0 0 304 | 000595.jpg 1 1 1 0 0 0 0 305 | 000596.jpg 0 1 306 | 000600.jpg 0 307 | 000602.jpg 0 0 308 | 000603.jpg 0 309 | 000604.jpg 0 0 310 | 000606.jpg 0 0 0 0 0 0 1 311 | 000607.jpg 0 0 0 0 0 0 0 312 | 000611.jpg 0 0 313 | 000614.jpg 0 314 | 000615.jpg 1 0 0 315 | 000616.jpg 0 0 316 | 000617.jpg 0 0 317 | 000618.jpg 0 0 318 | 000621.jpg 1 1 0 0 0 319 | 000623.jpg 0 0 320 | 000624.jpg 0 0 0 0 0 0 0 0 0 321 | 000627.jpg 0 322 | 000629.jpg 0 0 323 | 000630.jpg 0 0 324 | 000631.jpg 0 0 325 | 000634.jpg 0 0 0 326 | 000636.jpg 0 327 | 000638.jpg 1 0 328 | 000639.jpg 0 329 | 000640.jpg 0 330 | 000641.jpg 0 0 331 | 000642.jpg 0 0 332 | 000643.jpg 1 0 0 333 | 000644.jpg 1 0 334 | 000646.jpg 0 0 0 0 335 | 000649.jpg 0 0 336 | 000650.jpg 0 0 337 | 000651.jpg 0 338 | 000652.jpg 0 0 0 339 | 000655.jpg 0 0 340 | 000658.jpg 0 1 341 | 000659.jpg 0 0 342 | 000662.jpg 0 0 1 343 | 000664.jpg 0 344 | 000665.jpg 0 345 | 000666.jpg 0 1 0 0 346 | 000668.jpg 0 347 | 000669.jpg 0 1 0 348 | 000670.jpg 0 0 349 | 000673.jpg 0 350 | 000674.jpg 0 351 | 000678.jpg 0 352 | 000679.jpg 0 353 | 000681.jpg 0 354 | 000683.jpg 0 0 1 355 | 000687.jpg 1 0 1 1 1 1 1 0 0 0 0 0 356 | 000691.jpg 0 0 357 | 000692.jpg 0 0 0 0 358 | 000693.jpg 0 0 0 0 0 0 0 0 0 0 0 359 | 000696.jpg 0 0 0 360 | 000697.jpg 0 0 361 | 000698.jpg 0 0 0 362 | 000701.jpg 0 363 | 000703.jpg 0 364 | 000704.jpg 0 0 0 0 365 | 000706.jpg 0 0 0 0 0 366 | 000708.jpg 0 367 | 000715.jpg 0 0 1 368 | 000716.jpg 0 369 | 000718.jpg 0 0 370 | 000719.jpg 0 1 0 0 0 0 0 0 0 371 | 000721.jpg 0 372 | 000722.jpg 0 373 | 000723.jpg 0 1 0 0 0 0 374 | 000724.jpg 0 375 | 000725.jpg 0 0 0 0 376 | 000727.jpg 0 0 0 0 0 0 1 0 377 | 000732.jpg 1 0 378 | 000734.jpg 0 0 379 | 000735.jpg 0 0 0 380 | 000736.jpg 0 381 | 000737.jpg 0 1 0 0 382 | 000741.jpg 0 0 383 | 000743.jpg 0 0 384 | 000744.jpg 0 0 0 0 0 0 0 0 0 0 0 0 385 | 000745.jpg 0 1 386 | 000747.jpg 0 387 | 000749.jpg 0 1 0 0 0 388 | 000751.jpg 0 389 | 000757.jpg 0 390 | 000758.jpg 0 0 0 391 | 000759.jpg 0 392 | 000762.jpg 1 0 0 1 0 0 0 1 393 | 000765.jpg 0 394 | 000766.jpg 0 395 | 000769.jpg 0 0 1 396 | 000773.jpg 0 397 | 000775.jpg 0 398 | 000778.jpg 0 399 | 000779.jpg 0 400 | 000781.jpg 0 401 | 000783.jpg 0 0 402 | 000784.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 403 | 000785.jpg 0 404 | 000788.jpg 1 0 0 0 405 | 000789.jpg 0 0 0 0 1 406 | 000790.jpg 0 407 | 000792.jpg 0 1 408 | 000795.jpg 0 409 | 000798.jpg 0 0 410 | 000801.jpg 0 1 411 | 000803.jpg 0 412 | 000807.jpg 0 413 | 000809.jpg 0 0 0 0 414 | 000811.jpg 0 415 | 000813.jpg 0 416 | 000817.jpg 0 417 | 000819.jpg 0 0 418 | 000821.jpg 0 419 | 000824.jpg 0 1 420 | 000825.jpg 0 0 421 | 000833.jpg 0 422 | 000835.jpg 0 0 423 | 000836.jpg 0 0 424 | 000837.jpg 0 425 | 000838.jpg 0 426 | 000839.jpg 0 0 0 0 0 0 0 0 427 | 000840.jpg 0 0 428 | 000841.jpg 0 429 | 000844.jpg 0 430 | 000846.jpg 0 0 0 0 0 0 0 0 0 431 | 000852.jpg 0 0 0 0 0 432 | 000853.jpg 0 433 | 000856.jpg 1 1 0 0 434 | 000858.jpg 0 0 0 1 0 435 | 000861.jpg 0 436 | 000864.jpg 0 437 | 000866.jpg 0 0 438 | 000869.jpg 0 439 | 000870.jpg 1 0 0 0 440 | 000873.jpg 0 441 | 000875.jpg 0 1 442 | 000877.jpg 0 443 | 000881.jpg 0 1 444 | 000883.jpg 0 1 0 0 445 | 000884.jpg 0 446 | 000886.jpg 0 0 0 447 | 000890.jpg 0 0 0 448 | 000891.jpg 0 0 449 | 000893.jpg 0 0 0 1 0 0 0 450 | 000894.jpg 0 0 1 451 | 000897.jpg 0 0 452 | 000901.jpg 0 0 453 | 000905.jpg 0 454 | 000907.jpg 0 1 0 455 | 000909.jpg 0 456 | 000910.jpg 0 0 0 0 1 457 | 000913.jpg 0 0 458 | 000914.jpg 0 459 | 000916.jpg 0 0 1 0 460 | 000922.jpg 0 1 0 461 | 000924.jpg 0 0 0 1 1 462 | 000925.jpg 0 0 463 | 000927.jpg 0 0 464 | 000928.jpg 0 0 465 | 000930.jpg 0 0 466 | 000932.jpg 0 467 | 000933.jpg 0 468 | 000938.jpg 0 0 1 469 | 000939.jpg 0 470 | 000940.jpg 0 0 0 0 471 | 000941.jpg 0 472 | 000942.jpg 0 0 0 0 473 | 000944.jpg 0 474 | 000945.jpg 0 475 | 000952.jpg 0 0 0 1 476 | 000953.jpg 0 1 0 477 | 000955.jpg 0 478 | 000956.jpg 0 0 479 | 000957.jpg 0 1 480 | 000959.jpg 0 0 0 0 0 0 481 | 000960.jpg 0 0 0 0 0 1 0 0 482 | 000961.jpg 0 1 0 0 1 1 1 483 | 000963.jpg 0 484 | 000968.jpg 0 485 | 000969.jpg 0 0 486 | 000970.jpg 0 0 487 | 000974.jpg 0 1 488 | 000975.jpg 0 1 489 | 000976.jpg 0 490 | 000978.jpg 1 0 0 1 491 | 000979.jpg 0 0 0 492 | 000981.jpg 0 1 493 | 000983.jpg 0 494 | 000984.jpg 0 0 1 1 0 0 0 0 495 | 000985.jpg 0 496 | 000986.jpg 0 0 0 0 0 0 0 1 497 | 000988.jpg 0 498 | 000990.jpg 0 0 0 1 0 499 | 000992.jpg 0 0 0 500 | 000994.jpg 0 0 0 501 | 000995.jpg 0 0 502 | 000998.jpg 0 503 | 001000.jpg 0 504 | 001003.jpg 0 505 | 001005.jpg 0 506 | 001006.jpg 0 0 507 | 001007.jpg 0 508 | 001013.jpg 0 509 | 001016.jpg 0 510 | 001019.jpg 0 511 | 001020.jpg 0 512 | 001021.jpg 0 0 0 0 513 | 001022.jpg 0 514 | 001023.jpg 1 1 0 1 1 1 1 1 0 1 1 1 515 | 001025.jpg 1 1 0 516 | 001026.jpg 0 0 0 0 517 | 001029.jpg 0 518 | 001030.jpg 0 519 | 001031.jpg 0 0 520 | 001032.jpg 0 521 | 001033.jpg 0 0 522 | 001034.jpg 0 523 | 001035.jpg 0 0 0 0 1 1 524 | 001037.jpg 0 0 0 0 0 525 | 001038.jpg 0 526 | 001039.jpg 0 0 0 0 0 1 1 1 0 527 | 001040.jpg 1 0 0 0 528 | 001044.jpg 0 0 529 | 001046.jpg 0 530 | 001047.jpg 1 0 1 0 0 0 1 531 | 001048.jpg 0 532 | 001049.jpg 0 533 | 001051.jpg 0 534 | 001054.jpg 0 535 | 001055.jpg 0 0 536 | 001058.jpg 0 537 | 001059.jpg 0 1 538 | 001063.jpg 0 0 1 1 539 | 001065.jpg 0 0 0 540 | 001067.jpg 0 0 0 0 541 | 001070.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 542 | 001075.jpg 0 0 543 | 001076.jpg 0 0 0 544 | 001080.jpg 0 0 545 | 001081.jpg 0 0 546 | 001085.jpg 0 0 0 0 1 1 0 0 547 | 001086.jpg 0 0 0 548 | 001087.jpg 0 549 | 001088.jpg 0 550 | 001089.jpg 0 551 | 001090.jpg 0 552 | 001094.jpg 0 553 | 001095.jpg 0 0 0 1 554 | 001096.jpg 0 0 555 | 001098.jpg 0 556 | 001099.jpg 0 0 0 0 0 557 | 001100.jpg 0 558 | 001103.jpg 0 559 | 001105.jpg 0 0 0 0 0 560 | 001108.jpg 0 0 0 561 | 001111.jpg 0 0 1 1 562 | 001114.jpg 0 563 | 001115.jpg 0 0 564 | 001116.jpg 0 565 | 001117.jpg 0 566 | 001118.jpg 0 0 0 0 1 567 | 001120.jpg 0 0 0 0 0 568 | 001122.jpg 0 569 | 001123.jpg 0 570 | 001126.jpg 0 571 | 001128.jpg 1 0 572 | 001131.jpg 0 573 | 001132.jpg 0 1 574 | 001133.jpg 0 1 0 0 0 575 | 001134.jpg 0 0 1 576 | 001135.jpg 0 577 | 001138.jpg 0 0 0 0 0 0 578 | 001139.jpg 0 0 579 | 001141.jpg 0 0 0 0 0 0 0 0 1 580 | 001146.jpg 0 581 | 001150.jpg 0 0 0 1 582 | 001153.jpg 0 583 | 001155.jpg 1 1 0 584 | 001157.jpg 0 0 0 585 | 001159.jpg 0 0 586 | 001162.jpg 0 587 | 001163.jpg 0 0 0 1 1 1 1 0 588 | 001165.jpg 0 0 0 0 589 | 001167.jpg 0 0 1 0 590 | 001169.jpg 0 1 1 0 1 0 1 1 1 0 0 1 591 | 001173.jpg 0 0 592 | 001177.jpg 0 0 0 1 1 593 | 001178.jpg 0 594 | 001179.jpg 0 0 0 595 | 001180.jpg 0 1 0 596 | 001181.jpg 0 597 | 001183.jpg 0 0 0 598 | 001188.jpg 0 0 0 0 0 0 0 0 0 1 1 1 1 599 | 001189.jpg 0 0 0 0 0 1 1 0 0 600 | 001190.jpg 0 601 | 001193.jpg 0 602 | 001195.jpg 0 603 | 001196.jpg 0 604 | 001197.jpg 0 605 | 001198.jpg 0 1 0 606 | 001202.jpg 0 0 607 | 001208.jpg 0 608 | 001210.jpg 0 0 0 0 0 0 609 | 001213.jpg 0 610 | 001216.jpg 0 0 611 | 001217.jpg 1 0 0 0 0 612 | 001218.jpg 0 613 | 001219.jpg 0 1 614 | 001220.jpg 0 0 0 615 | 001222.jpg 1 0 1 0 0 0 616 | 001223.jpg 0 617 | 001227.jpg 0 0 1 1 0 1 618 | 001228.jpg 0 0 0 0 0 0 0 0 0 0 619 | 001232.jpg 0 620 | 001235.jpg 0 0 621 | 001238.jpg 0 0 622 | 001242.jpg 0 623 | 001243.jpg 0 624 | 001244.jpg 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 625 | 001245.jpg 0 0 0 626 | 001246.jpg 0 627 | 001249.jpg 0 628 | 001251.jpg 1 0 1 0 0 0 629 | 001252.jpg 0 630 | 001253.jpg 1 0 1 631 | 001255.jpg 0 0 632 | 001256.jpg 1 1 0 0 0 1 633 | 001257.jpg 0 634 | 001261.jpg 0 0 0 0 635 | 001262.jpg 0 636 | 001264.jpg 0 637 | 001267.jpg 0 0 0 1 0 638 | 001271.jpg 0 1 1 0 1 0 0 639 | 001275.jpg 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 640 | 001276.jpg 1 1 0 0 0 0 0 1 1 1 1 0 641 | 001278.jpg 0 642 | 001280.jpg 0 643 | 001282.jpg 0 0 0 644 | 001283.jpg 0 645 | 001285.jpg 0 0 646 | 001291.jpg 0 647 | 001295.jpg 0 648 | 001296.jpg 0 0 649 | 001297.jpg 0 0 650 | 001300.jpg 0 651 | 001301.jpg 0 0 0 652 | 001302.jpg 1 1 1 0 0 653 | 001303.jpg 0 654 | 001305.jpg 0 655 | 001306.jpg 0 656 | 001307.jpg 1 1 1 0 1 0 0 0 0 0 0 0 0 0 657 | 001308.jpg 0 0 1 658 | 001313.jpg 0 659 | 001317.jpg 0 660 | 001318.jpg 0 1 661 | 001319.jpg 0 0 662 | 001320.jpg 0 0 663 | 001321.jpg 0 664 | 001322.jpg 0 665 | 001328.jpg 0 1 666 | 001329.jpg 0 0 667 | 001331.jpg 0 0 0 668 | 001335.jpg 0 669 | 001336.jpg 0 0 670 | 001338.jpg 0 0 671 | 001339.jpg 0 672 | 001340.jpg 0 0 0 0 673 | 001342.jpg 0 0 1 1 1 1 1 1 674 | 001344.jpg 0 675 | 001347.jpg 1 0 0 676 | 001349.jpg 0 677 | 001351.jpg 1 1 0 0 0 678 | 001353.jpg 0 0 0 679 | 001354.jpg 0 0 0 0 0 0 0 680 | 001355.jpg 0 681 | 001356.jpg 0 1 682 | 001357.jpg 0 0 683 | 001358.jpg 0 0 0 0 684 | 001359.jpg 0 685 | 001363.jpg 0 0 0 0 0 686 | 001366.jpg 0 0 0 0 0 0 687 | 001367.jpg 0 0 688 | 001368.jpg 0 689 | 001369.jpg 0 0 690 | 001370.jpg 0 0 0 0 691 | 001372.jpg 0 0 692 | 001373.jpg 0 693 | 001374.jpg 0 694 | 001376.jpg 0 0 695 | 001377.jpg 0 696 | 001379.jpg 0 697 | 001380.jpg 0 698 | 001381.jpg 0 699 | 001382.jpg 0 0 0 0 0 0 0 0 0 700 | 001389.jpg 0 701 | 001391.jpg 0 1 0 702 | 001392.jpg 0 0 0 703 | 001394.jpg 0 0 704 | 001396.jpg 0 0 1 705 | 001398.jpg 0 706 | 001399.jpg 0 0 707 | 001401.jpg 1 0 708 | 001403.jpg 0 0 0 0 1 0 0 0 0 0 0 0 1 1 709 | 001407.jpg 0 1 1 1 0 0 1 0 710 | 001410.jpg 0 0 1 0 0 1 0 0 0 1 1 711 | 001411.jpg 0 0 1 0 712 | 001412.jpg 0 0 713 | 001415.jpg 0 714 | 001416.jpg 0 0 0 0 1 1 715 | 001417.jpg 0 0 716 | 001419.jpg 0 0 0 1 717 | 001422.jpg 0 718 | 001423.jpg 0 719 | 001424.jpg 0 0 0 1 720 | 001425.jpg 0 721 | 001428.jpg 0 0 1 722 | 001429.jpg 0 0 0 723 | 001431.jpg 1 0 1 0 724 | 001433.jpg 0 725 | 001435.jpg 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 726 | 001437.jpg 0 0 0 0 727 | 001438.jpg 0 0 1 728 | 001440.jpg 0 729 | 001446.jpg 0 0 730 | 001447.jpg 0 0 731 | 001448.jpg 0 0 1 732 | 001449.jpg 0 0 0 733 | 001452.jpg 0 0 734 | 001454.jpg 0 735 | 001456.jpg 0 0 0 736 | 001458.jpg 0 737 | 001459.jpg 1 0 0 0 0 738 | 001461.jpg 0 739 | 001462.jpg 0 740 | 001469.jpg 0 0 0 741 | 001471.jpg 0 742 | 001473.jpg 0 0 743 | 001474.jpg 0 0 744 | 001476.jpg 0 0 0 1 0 0 0 1 1 1 1 1 0 745 | 001477.jpg 0 0 0 0 746 | 001478.jpg 0 747 | 001482.jpg 0 0 0 0 0 748 | 001487.jpg 0 749 | 001489.jpg 1 1 1 1 0 0 0 0 0 0 750 | 001491.jpg 0 0 0 751 | 001495.jpg 0 752 | 001496.jpg 0 0 0 0 0 0 0 0 753 | 001500.jpg 0 754 | 001502.jpg 0 0 755 | 001503.jpg 0 756 | 001505.jpg 0 757 | 001506.jpg 0 0 0 758 | 001507.jpg 0 759 | 001508.jpg 0 1 0 0 1 1 1 1 760 | 001511.jpg 0 0 1 0 1 761 | 001513.jpg 0 0 762 | 001516.jpg 0 0 0 0 0 0 0 0 763 | 001518.jpg 0 0 0 0 764 | 001519.jpg 0 1 765 | 001520.jpg 0 766 | 001525.jpg 0 767 | 001527.jpg 0 0 0 768 | 001530.jpg 0 769 | 001533.jpg 0 0 0 1 770 | 001534.jpg 0 1 1 1 0 0 0 771 | 001535.jpg 0 772 | 001538.jpg 0 0 0 0 0 0 773 | 001540.jpg 1 0 774 | 001542.jpg 0 1 775 | 001546.jpg 0 776 | 001547.jpg 0 777 | 001549.jpg 0 0 778 | 001550.jpg 0 1 779 | 001551.jpg 0 0 0 780 | 001552.jpg 0 0 781 | 001558.jpg 0 0 782 | 001560.jpg 0 783 | 001562.jpg 0 784 | 001564.jpg 0 0 0 0 1 785 | 001566.jpg 0 786 | 001567.jpg 0 787 | 001568.jpg 0 788 | 001569.jpg 0 0 0 1 0 1 789 | 001570.jpg 0 790 | 001572.jpg 0 0 1 0 1 0 1 0 791 | 001573.jpg 0 792 | 001574.jpg 0 793 | 001575.jpg 0 0 0 0 0 1 0 0 794 | 001578.jpg 0 0 795 | 001581.jpg 0 0 0 0 0 796 | 001583.jpg 0 0 797 | 001584.jpg 0 798 | 001585.jpg 0 0 0 799 | 001587.jpg 0 800 | 001589.jpg 0 0 801 | 001591.jpg 0 802 | 001592.jpg 0 0 803 | 001596.jpg 0 804 | 001599.jpg 0 0 1 1 805 | 001600.jpg 1 1 1 1 0 806 | 001601.jpg 0 1 807 | 001602.jpg 0 1 808 | 001605.jpg 0 1 1 1 809 | 001606.jpg 0 0 0 0 0 0 810 | 001609.jpg 0 1 1 1 1 811 | 001613.jpg 0 0 812 | 001615.jpg 0 813 | 001616.jpg 0 814 | 001619.jpg 0 0 0 0 815 | 001620.jpg 0 0 0 0 816 | 001621.jpg 0 817 | 001623.jpg 0 0 818 | 001624.jpg 0 0 819 | 001625.jpg 0 0 0 820 | 001626.jpg 0 1 1 1 821 | 001629.jpg 0 0 0 822 | 001631.jpg 0 0 823 | 001634.jpg 0 824 | 001635.jpg 0 0 1 0 1 1 1 1 1 1 1 1 825 | 001637.jpg 0 826 | 001639.jpg 0 0 827 | 001641.jpg 0 0 1 1 828 | 001644.jpg 0 0 1 0 829 | 001645.jpg 0 830 | 001646.jpg 0 0 1 831 | 001648.jpg 1 0 0 0 832 | 001652.jpg 0 0 0 1 0 833 | 001655.jpg 0 834 | 001656.jpg 0 0 835 | 001657.jpg 0 0 1 0 836 | 001658.jpg 0 0 0 0 0 837 | 001659.jpg 0 838 | 001660.jpg 0 839 | 001663.jpg 0 840 | 001664.jpg 0 841 | 001665.jpg 1 0 842 | 001666.jpg 0 1 1 843 | 001667.jpg 0 844 | 001668.jpg 0 0 0 0 0 0 845 | 001670.jpg 0 0 846 | 001671.jpg 1 0 0 0 847 | 001672.jpg 0 848 | 001674.jpg 0 1 1 1 1 849 | 001679.jpg 0 850 | 001681.jpg 0 0 851 | 001687.jpg 0 0 852 | 001692.jpg 0 0 853 | 001694.jpg 0 854 | 001695.jpg 0 855 | 001696.jpg 0 0 0 0 1 856 | 001697.jpg 0 857 | 001698.jpg 0 0 858 | 001700.jpg 0 859 | 001701.jpg 0 860 | 001702.jpg 0 861 | 001703.jpg 0 0 1 862 | 001704.jpg 0 863 | 001705.jpg 0 0 1 864 | 001706.jpg 0 0 865 | 001709.jpg 0 1 0 866 | 001710.jpg 0 0 0 1 867 | 001712.jpg 1 0 0 0 868 | 001715.jpg 0 0 1 869 | 001716.jpg 1 1 0 1 1 1 1 1 1 870 | 001719.jpg 0 871 | 001720.jpg 0 0 0 0 0 0 0 0 872 | 001722.jpg 0 0 0 873 | 001728.jpg 0 0 0 1 874 | 001731.jpg 0 0 0 0 875 | 001735.jpg 0 0 876 | 001736.jpg 0 877 | 001737.jpg 0 878 | 001740.jpg 0 879 | 001742.jpg 0 0 880 | 001743.jpg 0 0 881 | 001744.jpg 0 882 | 001745.jpg 0 0 0 1 0 0 0 0 883 | 001748.jpg 0 0 884 | 001751.jpg 0 885 | 001753.jpg 0 886 | 001757.jpg 0 0 0 0 0 0 887 | 001760.jpg 0 0 0 0 0 0 0 888 | 001762.jpg 0 0 889 | 001763.jpg 0 0 0 1 890 | 001764.jpg 1 0 0 0 0 1 891 | 001767.jpg 0 892 | 001769.jpg 0 0 0 0 893 | 001770.jpg 0 0 0 0 894 | 001773.jpg 1 0 0 895 | 001774.jpg 0 896 | 001776.jpg 0 0 0 0 1 897 | 001779.jpg 0 0 898 | 001781.jpg 0 0 899 | 001783.jpg 0 0 900 | 001786.jpg 0 901 | 001788.jpg 0 902 | 001790.jpg 0 903 | 001791.jpg 0 904 | 001792.jpg 0 0 0 0 0 0 0 0 0 0 0 0 905 | 001794.jpg 0 0 906 | 001796.jpg 0 907 | 001798.jpg 0 0 0 1 908 | 001802.jpg 0 0 0 909 | 001803.jpg 0 910 | 001804.jpg 0 911 | 001805.jpg 0 0 1 1 0 912 | 001808.jpg 0 0 0 0 913 | 001811.jpg 1 1 1 1 1 0 1 0 914 | 001812.jpg 0 1 0 0 1 1 915 | 001813.jpg 0 916 | 001814.jpg 0 917 | 001815.jpg 0 918 | 001817.jpg 0 919 | 001819.jpg 0 0 920 | 001820.jpg 0 921 | 001822.jpg 0 922 | 001823.jpg 0 0 923 | 001824.jpg 0 0 924 | 001826.jpg 1 0 0 925 | 001829.jpg 0 926 | 001831.jpg 0 0 0 0 0 927 | 001835.jpg 0 928 | 001838.jpg 0 929 | 001839.jpg 1 1 0 0 0 0 0 0 0 930 | 001844.jpg 0 931 | 001846.jpg 0 932 | 001848.jpg 0 933 | 001850.jpg 0 0 0 0 934 | 001851.jpg 0 0 1 935 | 001852.jpg 0 0 936 | 001856.jpg 0 0 0 0 1 937 | 001857.jpg 0 0 0 0 0 0 1 938 | 001859.jpg 0 939 | 001863.jpg 0 940 | 001865.jpg 0 941 | 001866.jpg 0 0 942 | 001867.jpg 0 0 1 0 943 | 001868.jpg 0 0 944 | 001869.jpg 0 945 | 001871.jpg 0 946 | 001873.jpg 0 947 | 001874.jpg 0 948 | 001876.jpg 0 949 | 001879.jpg 0 950 | 001880.jpg 0 0 0 951 | 001883.jpg 0 0 0 952 | 001884.jpg 1 0 0 0 953 | 001885.jpg 1 0 954 | 001886.jpg 0 955 | 001889.jpg 0 0 0 0 1 0 0 956 | 001890.jpg 0 957 | 001891.jpg 0 0 0 958 | 001893.jpg 0 0 0 0 1 1 1 0 1 0 0 0 0 0 959 | 001895.jpg 0 1 1 1 960 | 001897.jpg 0 961 | 001900.jpg 0 962 | 001905.jpg 0 1 0 0 0 963 | 001908.jpg 0 964 | 001909.jpg 0 965 | 001910.jpg 0 966 | 001912.jpg 0 967 | 001913.jpg 0 968 | 001914.jpg 0 1 1 0 0 969 | 001916.jpg 0 0 0 0 0 0 0 0 0 1 0 0 0 970 | 001917.jpg 0 0 0 971 | 001919.jpg 0 972 | 001921.jpg 0 1 0 1 0 0 1 1 1 1 973 | 001923.jpg 0 0 0 0 0 974 | 001924.jpg 0 0 975 | 001925.jpg 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 976 | 001926.jpg 0 0 977 | 001929.jpg 0 978 | 001935.jpg 0 0 1 979 | 001939.jpg 0 980 | 001942.jpg 0 0 1 0 0 981 | 001943.jpg 0 982 | 001946.jpg 0 983 | 001947.jpg 0 0 0 0 0 984 | 001949.jpg 0 0 0 1 0 985 | 001951.jpg 0 986 | 001953.jpg 0 0 1 1 1 987 | 001955.jpg 0 0 988 | 001956.jpg 0 989 | 001957.jpg 1 1 0 990 | 001959.jpg 0 991 | 001961.jpg 0 0 992 | 001965.jpg 0 0 993 | 001966.jpg 0 0 994 | 001967.jpg 0 995 | 001968.jpg 0 996 | 001969.jpg 0 0 0 0 1 997 | 001973.jpg 0 0 998 | 001974.jpg 0 0 0 0 0 1 0 0 999 | 001975.jpg 0 0 1 1 0 0 0 0 0 0 1000 | 001979.jpg 0 0 1001 | 001983.jpg 0 1002 | 001984.jpg 0 0 0 1003 | 001986.jpg 0 1004 | 001987.jpg 0 1005 | 001988.jpg 0 0 1006 | 001990.jpg 1 0 0 0 0 0 0 1007 | 001991.jpg 0 0 1008 | 001992.jpg 0 0 0 1 1009 | 001993.jpg 0 0 1 1010 | 001994.jpg 0 1011 | 001996.jpg 0 0 1012 | 001997.jpg 0 1013 | 001998.jpg 0 0 1014 | 002003.jpg 0 1015 | 002005.jpg 0 0 1 1016 | 002007.jpg 0 1017 | 002008.jpg 0 0 1018 | 002009.jpg 0 1019 | 002010.jpg 1 0 1020 | 002013.jpg 0 1021 | 002014.jpg 0 1022 | 002016.jpg 1 0 1023 | 002017.jpg 0 1024 | 002018.jpg 0 0 0 0 0 1 1025 | 002026.jpg 1 0 0 0 0 1026 | 002028.jpg 0 1 1027 | 002029.jpg 0 1028 | 002031.jpg 0 0 1029 | 002032.jpg 0 1030 | 002033.jpg 0 0 0 0 1031 | 002035.jpg 0 0 0 0 0 0 1032 | 002038.jpg 0 1033 | 002040.jpg 0 0 0 0 0 0 1034 | 002041.jpg 0 0 1035 | 002044.jpg 0 1036 | 002046.jpg 0 0 1037 | 002048.jpg 0 1038 | 002050.jpg 0 0 1039 | 002052.jpg 0 1040 | 002053.jpg 0 1041 | 002057.jpg 0 1042 | 002059.jpg 0 1043 | 002060.jpg 0 0 1044 | 002062.jpg 0 0 0 1045 | 002065.jpg 0 1 1046 | 002066.jpg 0 1047 | 002071.jpg 0 0 0 0 0 1 0 0 1048 | 002072.jpg 0 0 1049 | 002073.jpg 0 1050 | 002074.jpg 0 0 0 0 1051 | 002075.jpg 0 1052 | 002076.jpg 0 1053 | 002077.jpg 1 0 1054 | 002078.jpg 0 1055 | 002079.jpg 0 0 1056 | 002080.jpg 0 1057 | 002081.jpg 0 0 1058 | 002084.jpg 0 1059 | 002085.jpg 0 1060 | 002087.jpg 0 0 0 0 0 0 1 1061 | 002089.jpg 0 1062 | 002092.jpg 0 0 1063 | 002093.jpg 0 1064 | 002097.jpg 0 1065 | 002100.jpg 0 0 0 1066 | 002103.jpg 0 1067 | 002105.jpg 0 0 1068 | 002106.jpg 0 1069 | 002107.jpg 0 1070 | 002110.jpg 0 0 0 1071 | 002111.jpg 0 0 0 0 0 1072 | 002113.jpg 0 1073 | 002115.jpg 0 0 1074 | 002118.jpg 1 0 0 0 0 0 1 1075 | 002119.jpg 0 0 0 0 0 1 1076 | 002121.jpg 0 0 1077 | 002122.jpg 0 1078 | 002123.jpg 0 0 0 1 1079 | 002127.jpg 0 1080 | 002128.jpg 0 1081 | 002130.jpg 0 1082 | 002131.jpg 0 1083 | 002133.jpg 0 0 0 1084 | 002137.jpg 0 0 0 0 0 1085 | 002138.jpg 0 1086 | 002141.jpg 0 0 0 0 0 1 0 1 1087 | 002143.jpg 0 1088 | 002144.jpg 0 0 0 0 1 1089 | 002147.jpg 0 1090 | 002148.jpg 0 1091 | 002149.jpg 0 1 1 1092 | 002150.jpg 0 1093 | 002154.jpg 1 0 1 1 1 0 0 0 0 1094 | 002157.jpg 0 1095 | 002159.jpg 0 0 1 0 0 1096 | 002160.jpg 0 0 1097 | 002161.jpg 0 0 0 1098 | 002162.jpg 0 1099 | 002164.jpg 0 1 1100 | 002167.jpg 0 1 1 0 1101 | 002168.jpg 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1102 | 002173.jpg 0 1103 | 002175.jpg 0 1104 | 002177.jpg 0 0 0 0 0 1105 | 002185.jpg 0 0 0 0 0 0 1 0 0 0 0 1 0 1106 | 002188.jpg 0 1107 | 002189.jpg 0 0 0 1 0 0 1108 | 002195.jpg 0 0 1109 | 002198.jpg 0 1110 | 002200.jpg 0 1111 | 002203.jpg 0 0 1112 | 002204.jpg 0 0 1113 | 002205.jpg 0 1114 | 002206.jpg 0 1115 | 002207.jpg 0 0 0 0 1116 | 002210.jpg 0 1 1117 | 002211.jpg 0 0 1 0 1 1 0 0 0 0 0 1118 | 002216.jpg 0 0 1119 | 002217.jpg 0 0 0 0 0 0 1120 | 002222.jpg 0 1121 | 002223.jpg 0 0 0 1 1 1 1 0 1122 | 002225.jpg 0 1123 | 002227.jpg 0 0 1124 | 002229.jpg 0 0 1125 | 002230.jpg 1 0 0 1126 | 002231.jpg 0 0 0 1 0 0 0 0 1127 | 002232.jpg 0 0 1 1128 | 002235.jpg 1 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1129 | 002236.jpg 0 1130 | 002239.jpg 0 0 0 0 0 0 0 1131 | 002240.jpg 0 1 0 1132 | 002242.jpg 0 0 0 1 0 0 0 1133 | 002243.jpg 0 1134 | 002245.jpg 0 0 0 0 1135 | 002246.jpg 0 0 1 1 1136 | 002250.jpg 0 0 1 0 1137 | 002252.jpg 0 0 1138 | 002254.jpg 0 0 0 0 1139 | 002258.jpg 0 1140 | 002262.jpg 0 1141 | 002264.jpg 0 1142 | 002269.jpg 0 0 1143 | 002271.jpg 0 1144 | 002274.jpg 0 0 1145 | 002275.jpg 0 1146 | 002282.jpg 0 1147 | 002283.jpg 0 0 1148 | 002286.jpg 0 0 1149 | 002289.jpg 0 1150 | 002292.jpg 0 1151 | 002294.jpg 0 0 0 0 0 0 1152 | 002295.jpg 0 1153 | 002296.jpg 0 1154 | 002297.jpg 0 0 0 1155 | 002298.jpg 0 0 0 1 1156 | 002299.jpg 0 1157 | 002301.jpg 1 1 0 0 0 0 0 0 0 0 0 0 0 1158 | 002303.jpg 0 1159 | 002304.jpg 0 1160 | 002309.jpg 0 1161 | 002312.jpg 0 1162 | 002313.jpg 0 1163 | 002314.jpg 0 0 1 0 1 0 1164 | 002316.jpg 0 1165 | 002317.jpg 0 0 0 0 0 0 1166 | 002319.jpg 0 1 1167 | 002322.jpg 0 0 0 0 1 1 1168 | 002325.jpg 0 0 0 0 0 0 1169 | 002326.jpg 1 0 0 0 0 0 1170 | 002327.jpg 0 1171 | 002331.jpg 0 0 0 0 0 1 0 0 1172 | 002336.jpg 0 0 1173 | 002338.jpg 0 0 0 1 1 0 0 1174 | 002339.jpg 0 1175 | 002341.jpg 0 0 0 0 1176 | 002344.jpg 0 1177 | 002346.jpg 0 1178 | 002349.jpg 0 1179 | 002351.jpg 0 1 1180 | 002353.jpg 0 1 0 1 1181 | 002356.jpg 0 1182 | 002357.jpg 0 1183 | 002358.jpg 0 1184 | 002360.jpg 0 0 1185 | 002363.jpg 0 0 0 0 1186 | 002365.jpg 0 0 1187 | 002370.jpg 1 1 1 0 1188 | 002379.jpg 0 1 1 1 0 0 0 1189 | 002380.jpg 0 1190 | 002381.jpg 0 1191 | 002383.jpg 0 0 0 0 1192 | 002386.jpg 0 1193 | 002388.jpg 0 1194 | 002389.jpg 0 0 1 0 0 1 1 1 1 1 1195 | 002390.jpg 0 1 1196 | 002394.jpg 0 0 0 0 0 0 1197 | 002395.jpg 0 1198 | 002396.jpg 0 1199 | 002397.jpg 0 0 1200 | 002398.jpg 0 0 1201 | 002399.jpg 0 0 1 1202 | 002400.jpg 0 1203 | 002402.jpg 0 1 0 0 1 1 0 0 1204 | 002406.jpg 0 1205 | 002408.jpg 0 1 1206 | 002409.jpg 0 0 1207 | 002412.jpg 0 0 1208 | 002414.jpg 0 1 1 1 1209 | 002416.jpg 0 1 1210 | 002418.jpg 0 1 1211 | 002421.jpg 0 0 1212 | 002422.jpg 0 1213 | 002424.jpg 0 1214 | 002426.jpg 0 0 1215 | 002428.jpg 0 0 1216 | 002429.jpg 0 0 0 0 1217 | 002430.jpg 0 0 1218 | 002431.jpg 0 1219 | 002432.jpg 0 1220 | 002434.jpg 0 1221 | 002438.jpg 0 0 1222 | 002440.jpg 0 1223 | 002446.jpg 0 0 0 0 0 0 1224 | 002447.jpg 0 1225 | 002449.jpg 0 1 0 1 0 0 0 1226 | 002451.jpg 1 0 0 1227 | 002453.jpg 0 0 1228 | 002455.jpg 0 0 0 0 1229 | 002457.jpg 0 1230 | 002463.jpg 0 0 0 0 1 1 1231 | 002464.jpg 1 0 1232 | 002467.jpg 0 0 0 0 1233 | 002469.jpg 0 0 1234 | 002473.jpg 0 1235 | 002474.jpg 0 0 0 1236 | 002475.jpg 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1237 | 002482.jpg 0 1238 | 002484.jpg 0 0 0 0 1 0 1239 | 002485.jpg 0 0 1240 | 002486.jpg 0 0 0 0 0 0 0 1241 | 002487.jpg 0 0 1242 | 002488.jpg 0 0 1243 | 002489.jpg 0 1 1244 | 002495.jpg 0 1245 | 002498.jpg 0 0 1246 | 002499.jpg 0 1 1 0 1247 | 002503.jpg 0 0 1 1 1 1 0 1248 | 002506.jpg 0 0 0 1 1 1249 | 002507.jpg 0 0 1250 | 002509.jpg 0 1251 | 002510.jpg 0 0 1 1 1 0 0 0 1252 | 002511.jpg 0 0 1253 | 002515.jpg 0 1 1254 | 002516.jpg 0 0 0 0 0 0 1255 | 002517.jpg 0 1256 | 002521.jpg 0 1257 | 002522.jpg 0 1 1258 | 002526.jpg 0 1259 | 002527.jpg 0 1260 | 002528.jpg 0 1261 | 002530.jpg 0 0 1262 | 002531.jpg 0 1 0 1263 | 002532.jpg 0 0 0 1264 | 002535.jpg 0 1 1265 | 002536.jpg 0 0 1266 | 002538.jpg 0 0 0 1 1267 | 002541.jpg 0 1 1268 | 002543.jpg 0 0 0 1 1 1 1269 | 002548.jpg 0 0 0 1270 | 002550.jpg 0 1271 | 002551.jpg 1 0 0 0 0 0 1272 | 002552.jpg 0 1 1273 | 002553.jpg 0 1274 | 002556.jpg 0 1275 | 002557.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1276 | 002560.jpg 0 1277 | 002562.jpg 0 0 0 1278 | 002568.jpg 0 0 1279 | 002570.jpg 0 1280 | 002573.jpg 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1281 | 002574.jpg 1 0 1282 | 002575.jpg 0 0 0 0 1 0 0 0 1283 | 002576.jpg 0 1284 | 002577.jpg 0 1285 | 002580.jpg 1 1 1 0 0 1286 | 002581.jpg 0 1287 | 002582.jpg 0 0 0 0 0 0 0 0 1 1288 | 002583.jpg 0 0 1289 | 002587.jpg 0 0 0 0 0 1 1 1290 | 002588.jpg 0 0 1291 | 002591.jpg 0 0 0 0 1292 | 002592.jpg 0 1293 | 002596.jpg 0 0 0 0 1294 | 002597.jpg 0 0 1295 | 002601.jpg 0 1296 | 002602.jpg 0 0 0 1297 | 002604.jpg 0 0 0 0 1298 | 002607.jpg 0 1 1299 | 002608.jpg 0 1300 | 002610.jpg 1 1 1 0 1301 | 002612.jpg 0 0 1302 | 002614.jpg 0 1 1 0 0 0 0 0 0 0 0 0 1303 | 002616.jpg 0 1304 | 002617.jpg 0 0 1 1305 | 002619.jpg 0 1306 | 002620.jpg 0 0 1307 | 002622.jpg 0 0 0 0 0 1308 | 002623.jpg 0 0 1309 | 002624.jpg 0 0 0 1310 | 002626.jpg 1 1 1 1 1 0 0 0 0 1 1 0 0 1311 | 002628.jpg 0 0 0 1312 | 002629.jpg 0 1313 | 002630.jpg 0 0 0 1314 | 002631.jpg 0 0 0 0 1315 | 002638.jpg 1 0 0 0 1316 | 002639.jpg 0 0 0 1317 | 002640.jpg 0 1318 | 002642.jpg 0 1319 | 002644.jpg 0 1320 | 002650.jpg 0 0 0 1 1321 | 002651.jpg 0 1322 | 002652.jpg 0 0 1323 | 002654.jpg 0 0 1324 | 002655.jpg 0 0 1325 | 002656.jpg 1 0 0 0 1326 | 002660.jpg 0 0 1327 | 002661.jpg 0 1328 | 002663.jpg 0 0 1329 | 002665.jpg 0 1330 | 002671.jpg 0 0 1331 | 002672.jpg 0 1332 | 002673.jpg 1 0 1333 | 002674.jpg 1 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1334 | 002676.jpg 0 0 0 0 0 0 1 1335 | 002679.jpg 0 1336 | 002681.jpg 0 1337 | 002685.jpg 0 0 0 0 0 0 0 0 0 0 1 1338 | 002686.jpg 0 0 0 1339 | 002687.jpg 0 0 1340 | 002688.jpg 0 1341 | 002692.jpg 0 0 0 1342 | 002694.jpg 0 1 1343 | 002698.jpg 0 0 1344 | 002700.jpg 0 1 1345 | 002701.jpg 0 0 1 1 1 1 0 1 1 1346 | 002703.jpg 0 0 1347 | 002705.jpg 0 0 1 1 1 1 0 0 1348 | 002707.jpg 0 1349 | 002708.jpg 0 0 1350 | 002711.jpg 0 0 1351 | 002712.jpg 0 0 1352 | 002716.jpg 0 0 0 0 0 1 1 1353 | 002719.jpg 0 0 0 0 0 1354 | 002720.jpg 0 1355 | 002724.jpg 0 0 0 1 1 1 1 1356 | 002725.jpg 0 1357 | 002726.jpg 0 0 0 0 0 1358 | 002728.jpg 0 0 0 1359 | 002729.jpg 0 0 0 1360 | 002731.jpg 0 0 1361 | 002733.jpg 0 1362 | 002736.jpg 0 1363 | 002739.jpg 0 0 0 0 1364 | 002740.jpg 0 0 1365 | 002742.jpg 0 1366 | 002743.jpg 0 0 0 0 0 0 1367 | 002746.jpg 1 0 1368 | 002748.jpg 0 1 1369 | 002750.jpg 0 0 0 1 1 1370 | 002752.jpg 0 0 1 1 1 1371 | 002753.jpg 0 0 0 1372 | 002754.jpg 0 1373 | 002756.jpg 0 0 1374 | 002758.jpg 0 0 0 0 0 1375 | 002761.jpg 0 1376 | 002764.jpg 0 1377 | 002768.jpg 0 0 1378 | 002769.jpg 0 1379 | 002770.jpg 0 1380 | 002771.jpg 0 1381 | 002773.jpg 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1382 | 002777.jpg 0 0 1 1 0 1 0 1383 | 002780.jpg 0 0 1384 | 002781.jpg 0 0 0 0 0 0 0 0 0 0 0 1385 | 002787.jpg 0 0 0 1386 | 002788.jpg 0 0 1 0 0 0 0 1 0 0 0 1 1 1 1387 | 002789.jpg 0 0 1 1 1 1 1 1 1 0 1 1 1 1388 | 002790.jpg 0 0 1 1 1 1 1 1389 | 002792.jpg 0 0 0 0 1 1390 | 002793.jpg 0 0 0 1391 | 002797.jpg 0 0 1392 | 002799.jpg 0 1393 | 002802.jpg 0 0 0 1394 | 002805.jpg 0 1395 | 002806.jpg 0 0 1396 | 002808.jpg 0 0 0 1 1397 | 002809.jpg 0 1 1 0 1 1398 | 002811.jpg 0 0 1399 | 002813.jpg 0 0 0 1400 | 002814.jpg 0 1401 | 002818.jpg 0 1 0 0 0 0 0 1 1 1 1 1 1402 | 002819.jpg 0 0 0 1403 | 002821.jpg 0 0 0 0 1404 | 002822.jpg 0 1405 | 002823.jpg 0 0 1406 | 002824.jpg 0 1407 | 002825.jpg 0 1408 | 002828.jpg 0 1 1 1409 | 002829.jpg 0 1410 | 002830.jpg 0 0 0 0 0 1411 | 002831.jpg 0 1412 | 002832.jpg 0 0 0 0 1 0 0 0 0 1413 | 002837.jpg 0 1414 | 002839.jpg 0 1415 | 002840.jpg 0 1416 | 002843.jpg 0 0 1417 | 002846.jpg 0 1 0 1418 | 002849.jpg 0 1419 | 002850.jpg 0 0 0 1420 | 002851.jpg 0 1421 | 002852.jpg 0 0 0 1422 | 002853.jpg 0 1423 | 002856.jpg 0 0 0 0 1 1 1 1424 | 002857.jpg 0 0 1425 | 002860.jpg 0 0 0 1426 | 002861.jpg 0 1427 | 002862.jpg 0 0 0 0 1 1 1428 | 002863.jpg 0 0 0 0 0 1 0 1429 | 002865.jpg 1 1 0 1 1 1 0 1 1430 | 002871.jpg 0 1431 | 002872.jpg 1 0 1432 | 002874.jpg 1 0 0 1433 | 002876.jpg 0 1434 | 002877.jpg 0 1435 | 002878.jpg 0 0 0 0 1436 | 002882.jpg 0 1 0 1437 | 002883.jpg 0 1438 | 002885.jpg 0 0 0 0 1439 | 002887.jpg 0 1 0 1440 | 002888.jpg 0 0 0 1 1441 | 002890.jpg 0 1442 | 002892.jpg 0 1443 | 002894.jpg 0 1 1444 | 002895.jpg 0 0 1445 | 002897.jpg 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1446 | 002898.jpg 0 1447 | 002900.jpg 0 1448 | 002902.jpg 0 1449 | 002903.jpg 0 1450 | 002904.jpg 0 0 1 0 0 0 1451 | 002905.jpg 0 0 1 1452 | 002907.jpg 0 1453 | 002908.jpg 0 1454 | 002909.jpg 0 0 1455 | 002911.jpg 0 0 0 0 1456 | 002918.jpg 0 1 0 1457 | 002920.jpg 0 1 0 0 0 0 0 1 1 1458 | 002921.jpg 0 0 1459 | 002922.jpg 0 1460 | 002923.jpg 0 1461 | 002925.jpg 0 0 0 0 0 0 0 1462 | 002926.jpg 0 0 1463 | 002927.jpg 0 0 0 1464 | 002928.jpg 0 1465 | 002929.jpg 0 1466 | 002930.jpg 0 0 0 0 1 0 0 0 1467 | 002936.jpg 0 1468 | 002945.jpg 1 0 0 0 1 0 1469 | 002948.jpg 0 1470 | 002949.jpg 0 1471 | 002950.jpg 0 0 1472 | 002951.jpg 0 0 0 0 0 0 1473 | 002955.jpg 0 1 1474 | 002959.jpg 0 1475 | 002961.jpg 0 1476 | 002964.jpg 0 0 0 0 0 1 1477 | 002968.jpg 0 1478 | 002970.jpg 0 1479 | 002971.jpg 0 0 0 0 0 1480 | 002972.jpg 0 0 1481 | 002973.jpg 0 1482 | 002974.jpg 0 0 0 0 0 0 0 1 0 1483 | 002979.jpg 0 1484 | 002980.jpg 0 1485 | 002981.jpg 0 0 1 0 1486 | 002982.jpg 0 0 1487 | 002983.jpg 0 1488 | 002985.jpg 0 1489 | 002991.jpg 0 1490 | 002993.jpg 0 1 1491 | 002996.jpg 0 0 0 0 0 0 0 0 1 1 0 1492 | 002997.jpg 0 1493 | 002998.jpg 0 1494 | 002999.jpg 0 0 0 0 0 0 1 1495 | 003001.jpg 0 1496 | 003006.jpg 0 0 1 1 0 0 1 0 0 0 1 0 1 1497 | 003010.jpg 0 0 0 1498 | 003012.jpg 0 0 0 1499 | 003014.jpg 0 0 0 0 0 1500 | 003016.jpg 0 0 1501 | 003018.jpg 0 1502 | 003019.jpg 0 1503 | 003020.jpg 0 0 0 0 0 0 1504 | 003022.jpg 0 0 1505 | 003025.jpg 0 0 0 0 0 1506 | 003026.jpg 0 0 1507 | 003029.jpg 0 0 0 1508 | 003030.jpg 0 1509 | 003033.jpg 0 1510 | 003035.jpg 0 1511 | 003036.jpg 0 0 1512 | 003037.jpg 0 1 1513 | 003040.jpg 0 1514 | 003041.jpg 0 0 0 0 0 0 1515 | 003043.jpg 0 1516 | 003046.jpg 0 1517 | 003048.jpg 0 1518 | 003049.jpg 0 0 0 1 0 0 1 0 1 1 1519 | 003050.jpg 0 0 1 0 1 0 1520 | 003052.jpg 0 0 0 0 0 0 0 1521 | 003055.jpg 0 1522 | 003059.jpg 0 1523 | 003060.jpg 0 1524 | 003062.jpg 0 0 0 1525 | 003067.jpg 0 0 0 0 0 1526 | 003068.jpg 0 1527 | 003069.jpg 0 1528 | 003070.jpg 0 1 0 0 0 0 1529 | 003071.jpg 0 1530 | 003073.jpg 0 1531 | 003075.jpg 0 0 0 0 1532 | 003076.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1533 | 003079.jpg 0 1534 | 003080.jpg 0 1535 | 003081.jpg 0 0 1536 | 003084.jpg 0 0 0 0 0 0 0 1 1 1 1 0 1537 | 003087.jpg 0 0 1 1538 | 003091.jpg 0 0 1539 | 003095.jpg 0 1540 | 003096.jpg 0 1541 | 003097.jpg 0 0 1542 | 003099.jpg 0 1543 | 003101.jpg 0 0 0 0 1544 | 003104.jpg 0 1545 | 003109.jpg 0 1546 | 003111.jpg 0 0 0 1547 | 003113.jpg 0 0 0 1548 | 003114.jpg 0 1549 | 003115.jpg 0 0 0 0 0 1550 | 003119.jpg 0 1551 | 003123.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1552 | 003125.jpg 0 1553 | 003128.jpg 0 1554 | 003130.jpg 0 1555 | 003131.jpg 0 1556 | 003132.jpg 0 0 1557 | 003136.jpg 0 1558 | 003139.jpg 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 1559 | 003141.jpg 1 1 0 0 1 1 1 1 0 1560 | 003143.jpg 0 1561 | 003144.jpg 0 1562 | 003148.jpg 0 0 0 0 0 0 0 1563 | 003151.jpg 0 0 1 1564 | 003152.jpg 0 0 0 1565 | 003153.jpg 0 0 0 0 1566 | 003156.jpg 0 1567 | 003158.jpg 0 1568 | 003160.jpg 0 0 1569 | 003166.jpg 0 1570 | 003167.jpg 0 0 1 0 1571 | 003168.jpg 0 1572 | 003171.jpg 0 1573 | 003172.jpg 0 0 0 0 1574 | 003173.jpg 1 0 0 1575 | 003174.jpg 0 1576 | 003179.jpg 0 0 0 1577 | 003180.jpg 0 1578 | 003182.jpg 0 1 0 1 1579 | 003187.jpg 0 0 1580 | 003190.jpg 0 1 0 0 1581 | 003191.jpg 0 1582 | 003192.jpg 0 0 1583 | 003193.jpg 0 0 0 1 1 1584 | 003196.jpg 0 0 1585 | 003197.jpg 1 0 1586 | 003198.jpg 0 0 1587 | 003201.jpg 0 0 0 1588 | 003203.jpg 0 1589 | 003206.jpg 0 0 1590 | 003208.jpg 0 1591 | 003209.jpg 0 0 1592 | 003212.jpg 0 1593 | 003215.jpg 0 1594 | 003217.jpg 0 0 1595 | 003220.jpg 0 0 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1596 | 003221.jpg 0 0 0 0 0 1 1 1597 | 003222.jpg 0 0 1598 | 003224.jpg 0 1 0 1599 | 003225.jpg 0 1 0 0 0 1600 | 003226.jpg 0 1601 | 003227.jpg 0 1602 | 003230.jpg 0 1603 | 003232.jpg 0 0 1604 | 003234.jpg 0 0 0 0 0 0 1 1605 | 003235.jpg 0 0 1606 | 003237.jpg 0 0 1607 | 003238.jpg 0 1608 | 003241.jpg 0 1609 | 003245.jpg 0 0 0 1 1 0 0 0 1610 | 003246.jpg 0 1611 | 003248.jpg 0 1612 | 003249.jpg 0 0 0 0 1613 | 003251.jpg 0 0 0 0 0 1614 | 003252.jpg 1 0 0 0 0 0 1615 | 003257.jpg 1 0 1616 | 003263.jpg 0 1617 | 003264.jpg 0 1 0 1618 | 003265.jpg 0 1 0 1619 | 003266.jpg 0 1620 | 003267.jpg 0 1621 | 003268.jpg 0 1 1622 | 003275.jpg 0 1623 | 003276.jpg 0 0 0 0 0 0 0 0 1 1624 | 003277.jpg 0 1625 | 003278.jpg 0 0 0 1 1626 | 003281.jpg 0 0 0 0 0 0 1 0 1 1 1 1627 | 003283.jpg 0 1628 | 003286.jpg 0 1629 | 003287.jpg 0 1630 | 003288.jpg 0 1631 | 003289.jpg 0 0 0 0 0 1 1 1632 | 003291.jpg 0 1633 | 003295.jpg 0 0 1634 | 003297.jpg 0 0 1 1 1 1 0 1635 | 003298.jpg 0 1636 | 003302.jpg 0 1 1637 | 003304.jpg 0 0 1638 | 003305.jpg 0 0 1 1639 | 003306.jpg 0 1640 | 003309.jpg 0 0 0 0 1641 | 003310.jpg 0 1642 | 003312.jpg 0 1643 | 003314.jpg 0 0 1 1 0 0 1644 | 003315.jpg 0 0 0 1 1645 | 003317.jpg 0 1646 | 003318.jpg 0 1647 | 003319.jpg 0 1 1648 | 003321.jpg 0 0 0 1 0 1649 | 003322.jpg 0 0 1650 | 003323.jpg 0 1 1 0 0 0 1 0 0 0 1651 | 003324.jpg 0 0 1652 | 003326.jpg 0 1653 | 003328.jpg 0 0 1654 | 003329.jpg 0 1655 | 003332.jpg 0 0 1656 | 003333.jpg 0 0 1657 | 003334.jpg 0 0 1658 | 003340.jpg 0 0 1 1659 | 003341.jpg 1 0 0 0 0 0 0 0 0 1660 | 003342.jpg 0 1661 | 003345.jpg 1 1 1 1 1 1 0 0 1 1 1 0 0 1662 | 003346.jpg 0 0 1663 | 003347.jpg 0 1664 | 003348.jpg 0 0 0 0 1665 | 003352.jpg 0 1 0 1666 | 003353.jpg 0 1667 | 003357.jpg 0 0 0 1 0 1668 | 003358.jpg 0 1669 | 003361.jpg 0 1670 | 003364.jpg 0 1671 | 003366.jpg 0 0 0 0 1672 | 003368.jpg 0 0 1673 | 003371.jpg 0 0 1674 | 003372.jpg 0 1675 | 003375.jpg 0 1676 | 003378.jpg 0 0 0 0 1677 | 003381.jpg 0 1678 | 003383.jpg 0 0 0 1679 | 003384.jpg 1 0 0 1680 | 003385.jpg 0 0 0 0 0 1681 | 003387.jpg 0 1682 | 003388.jpg 0 0 0 0 0 0 0 1 0 0 0 0 1 1683 | 003389.jpg 0 1684 | 003393.jpg 0 1685 | 003394.jpg 0 1 1686 | 003399.jpg 0 0 0 1 0 0 0 1687 | 003400.jpg 0 1688 | 003402.jpg 0 0 1689 | 003405.jpg 0 1690 | 003409.jpg 0 1 0 1691 | 003411.jpg 0 1692 | 003414.jpg 0 0 0 0 0 0 1693 | 003418.jpg 0 0 0 1 1694 | 003423.jpg 0 0 0 1695 | 003426.jpg 0 1696 | 003427.jpg 0 0 1697 | 003428.jpg 0 1698 | 003431.jpg 0 0 0 1699 | 003432.jpg 0 0 1700 | 003434.jpg 0 0 0 0 0 0 0 1701 | 003437.jpg 0 1702 | 003438.jpg 0 1703 | 003440.jpg 0 1704 | 003442.jpg 0 0 0 1705 | 003445.jpg 0 1 1706 | 003446.jpg 0 0 1707 | 003447.jpg 0 1708 | 003448.jpg 1 0 0 1 1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 1709 | 003454.jpg 0 1710 | 003456.jpg 0 1711 | 003457.jpg 0 1712 | 003459.jpg 1 0 1 1 1 0 0 0 0 1 1 0 0 0 1713 | 003460.jpg 0 1714 | 003463.jpg 0 1715 | 003467.jpg 0 1716 | 003471.jpg 0 0 0 0 0 1 1 1 0 1717 | 003472.jpg 0 1718 | 003473.jpg 0 0 1719 | 003474.jpg 0 1720 | 003475.jpg 0 0 0 0 1721 | 003476.jpg 0 1 1722 | 003478.jpg 0 1723 | 003479.jpg 0 1 1 1 1724 | 003480.jpg 0 1725 | 003481.jpg 1 0 0 0 1726 | 003482.jpg 0 0 0 1 1727 | 003483.jpg 0 0 0 0 1728 | 003485.jpg 1 0 0 1729 | 003486.jpg 0 0 0 1 0 1 1 0 1 1 1 1730 | 003488.jpg 0 0 0 0 0 0 0 1731 | 003490.jpg 0 0 1 1732 | 003494.jpg 0 0 0 1733 | 003495.jpg 0 1734 | 003498.jpg 0 1735 | 003501.jpg 0 0 0 1736 | 003502.jpg 0 1 0 0 0 0 0 1737 | 003503.jpg 0 0 0 0 0 1738 | 003504.jpg 0 1739 | 003505.jpg 0 0 1740 | 003507.jpg 0 0 1741 | 003512.jpg 0 0 1742 | 003513.jpg 0 1 1743 | 003514.jpg 0 0 1744 | 003515.jpg 0 0 0 0 0 0 1745 | 003517.jpg 0 0 0 0 0 0 1746 | 003520.jpg 0 0 0 1747 | 003523.jpg 0 1748 | 003526.jpg 0 1749 | 003527.jpg 0 0 0 0 0 1750 | 003531.jpg 0 0 1751 | 003532.jpg 1 1 0 1752 | 003533.jpg 0 1753 | 003534.jpg 0 0 0 0 0 0 1754 | 003535.jpg 0 1755 | 003538.jpg 0 0 1756 | 003540.jpg 0 1757 | 003541.jpg 0 0 1 1758 | 003542.jpg 0 0 1 0 0 0 0 0 1 1759 | 003543.jpg 0 0 1 0 0 0 0 1760 | 003544.jpg 1 1 0 1761 | 003545.jpg 0 1762 | 003547.jpg 0 1763 | 003552.jpg 0 1764 | 003553.jpg 0 0 1 1 1765 | 003557.jpg 0 0 1766 | 003558.jpg 0 0 1767 | 003559.jpg 0 1768 | 003560.jpg 0 1769 | 003561.jpg 0 1770 | 003562.jpg 0 0 1771 | 003563.jpg 0 0 0 1772 | 003568.jpg 0 1 1773 | 003569.jpg 0 1 1774 | 003570.jpg 0 1775 | 003571.jpg 0 1776 | 003572.jpg 0 0 0 1777 | 003573.jpg 0 0 0 0 0 1778 | 003574.jpg 0 1779 | 003578.jpg 0 0 0 1 0 1 1 1 1 1780 | 003579.jpg 0 0 1781 | 003581.jpg 0 0 0 1782 | 003582.jpg 0 1783 | 003583.jpg 0 1 0 0 1784 | 003584.jpg 0 0 1785 | 003590.jpg 0 0 0 0 0 0 0 0 1786 | 003591.jpg 0 1 1787 | 003592.jpg 0 0 0 1 0 0 1788 | 003595.jpg 0 0 0 0 1 0 0 0 0 0 0 0 1789 | 003598.jpg 0 0 0 0 0 0 1 1790 | 003600.jpg 1 0 0 1791 | 003601.jpg 1 1 1 1 0 1792 | 003602.jpg 0 0 0 1793 | 003607.jpg 0 1794 | 003610.jpg 0 1795 | 003612.jpg 0 0 1796 | 003613.jpg 0 0 1797 | 003615.jpg 0 1798 | 003616.jpg 0 1799 | 003617.jpg 0 0 0 1 0 0 1 0 1800 | 003619.jpg 0 0 0 0 0 0 1801 | 003624.jpg 0 1802 | 003626.jpg 0 0 0 1803 | 003630.jpg 0 1804 | 003631.jpg 0 0 0 0 0 0 0 1 0 0 0 0 1805 | 003633.jpg 0 0 0 0 0 1806 | 003637.jpg 0 1807 | 003641.jpg 0 0 1808 | 003643.jpg 0 1 0 1 0 1809 | 003647.jpg 0 0 1810 | 003649.jpg 0 0 0 0 0 1 0 0 0 0 0 0 1811 | 003650.jpg 0 0 1 1812 | 003652.jpg 0 0 0 0 1 1 1813 | 003653.jpg 0 1814 | 003659.jpg 0 1815 | 003661.jpg 0 1816 | 003665.jpg 0 0 0 0 1 1817 | 003666.jpg 0 1818 | 003668.jpg 0 1819 | 003670.jpg 0 0 1820 | 003672.jpg 0 1 1821 | 003676.jpg 0 0 0 1822 | 003677.jpg 0 0 0 0 1823 | 003680.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1824 | 003682.jpg 0 0 1825 | 003683.jpg 0 1826 | 003686.jpg 0 1827 | 003687.jpg 0 1828 | 003689.jpg 0 1 1 0 0 1829 | 003692.jpg 0 0 0 0 0 0 0 1 1830 | 003693.jpg 0 0 1 0 1 1831 | 003697.jpg 0 0 0 1832 | 003701.jpg 0 0 0 0 0 0 1833 | 003702.jpg 0 1834 | 003707.jpg 0 1 0 1835 | 003710.jpg 0 1836 | 003712.jpg 0 1837 | 003715.jpg 0 1838 | 003716.jpg 0 1839 | 003718.jpg 0 1840 | 003719.jpg 0 1841 | 003720.jpg 0 0 0 0 1 0 1842 | 003723.jpg 0 0 0 1 1843 | 003724.jpg 0 1844 | 003725.jpg 0 0 0 0 1 1845 | 003726.jpg 0 1846 | 003728.jpg 0 0 1847 | 003730.jpg 0 0 1848 | 003731.jpg 0 0 1849 | 003733.jpg 1 0 0 0 1850 | 003734.jpg 0 0 0 0 1851 | 003736.jpg 0 0 0 0 1852 | 003737.jpg 0 0 1853 | 003738.jpg 0 1854 | 003739.jpg 0 0 1855 | 003741.jpg 0 1856 | 003742.jpg 1 0 1857 | 003744.jpg 0 1858 | 003745.jpg 0 1859 | 003746.jpg 0 0 0 0 0 0 0 1860 | 003747.jpg 0 1861 | 003755.jpg 0 0 0 1862 | 003756.jpg 0 1863 | 003757.jpg 0 1864 | 003761.jpg 0 0 1 0 0 1865 | 003762.jpg 0 0 1866 | 003764.jpg 0 0 1867 | 003765.jpg 0 0 0 0 0 0 0 0 0 0 1868 | 003766.jpg 0 1869 | 003768.jpg 0 0 1870 | 003769.jpg 0 1 1 1 1 0 1871 | 003770.jpg 0 1 1 1 1 1872 | 003771.jpg 0 0 0 0 1873 | 003775.jpg 0 0 1874 | 003776.jpg 0 0 1 1875 | 003777.jpg 0 1 1876 | 003778.jpg 0 0 0 0 1877 | 003782.jpg 0 1878 | 003785.jpg 0 1879 | 003787.jpg 0 0 0 0 0 1880 | 003789.jpg 0 1881 | 003794.jpg 0 1 1882 | 003795.jpg 0 0 0 0 0 0 1883 | 003799.jpg 0 0 1884 | 003800.jpg 0 1885 | 003801.jpg 0 1886 | 003802.jpg 0 1887 | 003804.jpg 0 1888 | 003805.jpg 0 1889 | 003810.jpg 0 0 0 0 1890 | 003812.jpg 0 1891 | 003813.jpg 0 1892 | 003815.jpg 0 1 1 0 0 1893 | 003816.jpg 0 1894 | 003819.jpg 0 0 0 1 1895 | 003822.jpg 0 1896 | 003823.jpg 0 1897 | 003825.jpg 0 0 0 1898 | 003829.jpg 0 0 1 0 1 0 1 1 1899 | 003831.jpg 0 0 1900 | 003832.jpg 0 1901 | 003833.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1902 | 003836.jpg 0 1903 | 003839.jpg 0 0 0 1904 | 003840.jpg 0 1905 | 003841.jpg 0 1906 | 003842.jpg 0 1907 | 003843.jpg 0 1908 | 003850.jpg 0 1909 | 003851.jpg 0 0 0 0 0 0 1910 | 003852.jpg 0 1911 | 003853.jpg 0 1 0 1 1 0 1 0 0 1 0 0 1912 | 003854.jpg 0 1913 | 003858.jpg 0 0 0 0 0 0 0 1914 | 003862.jpg 0 1915 | 003864.jpg 0 1916 | 003867.jpg 0 0 0 0 1917 | 003870.jpg 0 1918 | 003873.jpg 0 1919 | 003875.jpg 0 0 0 0 1920 | 003878.jpg 0 1921 | 003880.jpg 0 0 1922 | 003881.jpg 0 0 0 0 1923 | 003882.jpg 0 0 0 0 0 0 0 0 0 0 0 0 1924 | 003883.jpg 0 1925 | 003884.jpg 1 1 0 0 0 1 1926 | 003888.jpg 0 1927 | 003892.jpg 0 1928 | 003893.jpg 1 0 1929 | 003894.jpg 0 1 1 1930 | 003896.jpg 0 0 0 1 0 0 1 1 1 1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 1931 | 003897.jpg 0 0 1 1932 | 003900.jpg 0 1 1933 | 003901.jpg 0 1934 | 003902.jpg 0 1 1 1 1935 | 003903.jpg 0 0 0 0 1936 | 003904.jpg 0 1937 | 003906.jpg 0 0 1938 | 003908.jpg 0 1939 | 003909.jpg 0 0 0 1940 | 003910.jpg 0 0 1941 | 003914.jpg 0 0 0 0 0 0 0 1942 | 003916.jpg 0 1943 | 003917.jpg 0 1944 | 003920.jpg 0 1945 | 003922.jpg 0 0 1946 | 003925.jpg 0 1947 | 003927.jpg 0 1948 | 003928.jpg 1 1 1 0 1949 | 003929.jpg 0 0 0 0 1 1950 | 003930.jpg 0 1951 | 003931.jpg 0 1952 | 003933.jpg 0 1953 | 003934.jpg 0 0 1954 | 003938.jpg 0 1955 | 003940.jpg 0 0 1956 | 003942.jpg 0 0 1957 | 003943.jpg 1 0 1 1 0 0 0 0 0 0 0 0 0 1958 | 003944.jpg 0 0 0 1959 | 003950.jpg 1 0 1 1 1 1 1960 | 003951.jpg 0 0 1961 | 003952.jpg 0 1 1962 | 003955.jpg 0 0 0 0 0 1963 | 003958.jpg 0 1964 | 003959.jpg 0 0 0 0 0 1 0 1965 | 003962.jpg 0 1966 | 003964.jpg 0 1967 | 003967.jpg 1 0 0 0 0 0 1 0 1968 | 003968.jpg 0 0 1969 | 003972.jpg 0 0 0 1970 | 003975.jpg 0 1971 | 003976.jpg 0 0 1972 | 003977.jpg 0 1973 | 003978.jpg 0 0 1974 | 003980.jpg 0 1975 | 003981.jpg 0 0 1976 | 003982.jpg 0 1 1 1977 | 003985.jpg 0 1978 | 003989.jpg 0 0 0 0 0 0 0 0 1979 | 003995.jpg 0 0 1980 | 003999.jpg 0 0 1981 | 004000.jpg 0 0 1982 | 004001.jpg 0 1 0 1983 | 004002.jpg 0 1984 | 004004.jpg 0 0 1985 | 004006.jpg 0 0 0 0 0 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1986 | 004007.jpg 0 1987 | 004018.jpg 0 1988 | 004021.jpg 0 1989 | 004022.jpg 0 0 1 1 0 1990 | 004024.jpg 1 0 0 0 1991 | 004026.jpg 0 0 1992 | 004027.jpg 0 0 0 0 0 0 1 0 1993 | 004029.jpg 0 0 0 1994 | 004030.jpg 0 0 0 1995 | 004032.jpg 0 1 1996 | 004036.jpg 0 1997 | 004038.jpg 0 0 0 1 1 1998 | 004040.jpg 0 0 0 1999 | 004041.jpg 0 0 2000 | 004042.jpg 0 0 2001 | 004043.jpg 0 0 2002 | 004044.jpg 0 2003 | 004045.jpg 0 1 1 2004 | 004048.jpg 0 2005 | 004049.jpg 0 0 2006 | 004050.jpg 0 2007 | 004053.jpg 0 1 0 0 1 1 2008 | 004054.jpg 0 0 0 0 0 0 0 2009 | 004055.jpg 0 0 2010 | 004056.jpg 0 0 0 2011 | 004059.jpg 1 1 0 0 1 1 1 1 1 2012 | 004061.jpg 1 0 2013 | 004062.jpg 0 2014 | 004063.jpg 1 0 0 2015 | 004064.jpg 0 0 1 2016 | 004065.jpg 0 0 0 1 2017 | 004068.jpg 0 0 0 1 0 0 2018 | 004070.jpg 0 0 2019 | 004071.jpg 0 2020 | 004072.jpg 0 0 0 2021 | 004074.jpg 0 0 2022 | 004078.jpg 0 2023 | 004079.jpg 0 2024 | 004080.jpg 0 2025 | 004081.jpg 0 0 2026 | 004083.jpg 0 0 2027 | 004084.jpg 0 0 2028 | 004086.jpg 0 0 2029 | 004088.jpg 0 2030 | 004090.jpg 0 0 0 2031 | 004094.jpg 0 0 2032 | 004096.jpg 0 2033 | 004097.jpg 0 2034 | 004098.jpg 0 0 0 0 2035 | 004099.jpg 0 0 2036 | 004101.jpg 0 0 1 1 1 2037 | 004103.jpg 0 1 1 0 1 1 2038 | 004104.jpg 0 0 2039 | 004107.jpg 0 2040 | 004109.jpg 0 1 0 0 0 1 2041 | 004112.jpg 0 0 2042 | 004114.jpg 0 2043 | 004115.jpg 0 2044 | 004116.jpg 0 0 2045 | 004118.jpg 0 0 0 0 0 0 2046 | 004119.jpg 0 1 0 2047 | 004123.jpg 1 0 2048 | 004124.jpg 0 0 2049 | 004125.jpg 0 0 2050 | 004126.jpg 0 0 2051 | 004127.jpg 0 0 2052 | 004128.jpg 0 1 0 0 0 0 0 0 0 1 1 2053 | 004130.jpg 0 2054 | 004132.jpg 0 0 0 0 2055 | 004134.jpg 0 0 0 0 0 0 0 0 0 2056 | 004139.jpg 0 1 1 2057 | 004144.jpg 0 0 0 1 1 2058 | 004147.jpg 0 2059 | 004151.jpg 0 2060 | 004153.jpg 0 1 2061 | 004154.jpg 0 0 1 0 0 1 0 0 0 0 0 1 1 2062 | 004155.jpg 0 2063 | 004156.jpg 0 2064 | 004157.jpg 0 2065 | 004159.jpg 0 2066 | 004160.jpg 0 1 2067 | 004161.jpg 0 2068 | 004162.jpg 0 1 1 0 1 1 1 1 0 1 1 2069 | 004165.jpg 0 2070 | 004166.jpg 1 1 1 1 1 1 0 0 2071 | 004167.jpg 0 0 0 1 0 0 2072 | 004172.jpg 0 2073 | 004173.jpg 1 0 2074 | 004175.jpg 0 2075 | 004176.jpg 0 2076 | 004177.jpg 0 0 2077 | 004179.jpg 0 0 0 1 0 2078 | 004180.jpg 1 1 0 1 2079 | 004181.jpg 0 2080 | 004182.jpg 0 2081 | 004183.jpg 0 0 0 2082 | 004184.jpg 0 2083 | 004187.jpg 0 1 0 2084 | 004188.jpg 0 0 0 0 2085 | 004197.jpg 0 2086 | 004198.jpg 0 0 0 0 2087 | 004199.jpg 0 2088 | 004202.jpg 0 0 2089 | 004206.jpg 0 2090 | 004207.jpg 0 1 1 2091 | 004208.jpg 0 0 2092 | 004210.jpg 1 0 2093 | 004211.jpg 0 2094 | 004213.jpg 0 0 0 2095 | 004214.jpg 0 0 2096 | 004216.jpg 0 2097 | 004217.jpg 0 2098 | 004218.jpg 0 0 0 0 0 0 0 1 0 2099 | 004219.jpg 1 0 0 0 0 0 0 2100 | 004222.jpg 0 1 0 0 2101 | 004225.jpg 0 1 0 2102 | 004226.jpg 0 2103 | 004227.jpg 0 0 1 2104 | 004233.jpg 0 1 0 2105 | 004234.jpg 0 1 2106 | 004235.jpg 0 2107 | 004236.jpg 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2108 | 004238.jpg 0 0 0 2109 | 004240.jpg 0 0 2110 | 004243.jpg 0 0 0 0 0 0 0 0 0 0 1 0 2111 | 004245.jpg 0 0 0 2112 | 004248.jpg 0 0 0 1 0 2113 | 004249.jpg 0 0 2114 | 004250.jpg 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 2115 | 004251.jpg 0 2116 | 004252.jpg 1 0 0 2117 | 004254.jpg 0 0 2118 | 004260.jpg 0 0 2119 | 004261.jpg 0 2120 | 004262.jpg 0 2121 | 004266.jpg 0 0 2122 | 004267.jpg 0 2123 | 004268.jpg 0 0 0 0 0 0 1 0 2124 | 004276.jpg 0 0 0 0 0 0 2125 | 004277.jpg 0 2126 | 004278.jpg 0 2127 | 004282.jpg 0 2128 | 004285.jpg 0 0 1 0 2129 | 004288.jpg 0 0 0 0 2130 | 004289.jpg 1 0 0 0 2131 | 004290.jpg 0 0 1 2132 | 004294.jpg 0 0 2133 | 004297.jpg 0 0 2134 | 004299.jpg 0 0 0 0 2135 | 004301.jpg 0 0 2136 | 004302.jpg 0 2137 | 004305.jpg 0 0 0 0 0 1 1 1 2138 | 004306.jpg 0 0 2139 | 004308.jpg 0 0 0 2140 | 004309.jpg 0 1 1 0 2141 | 004311.jpg 1 0 0 1 0 0 2142 | 004313.jpg 0 2143 | 004314.jpg 0 2144 | 004316.jpg 0 2145 | 004317.jpg 0 0 0 0 1 2146 | 004319.jpg 1 1 1 0 2147 | 004320.jpg 0 1 2148 | 004324.jpg 0 0 2149 | 004328.jpg 0 2150 | 004330.jpg 0 0 2151 | 004332.jpg 0 2152 | 004334.jpg 0 2153 | 004335.jpg 0 2154 | 004336.jpg 0 0 2155 | 004337.jpg 0 0 0 0 0 0 1 1 1 1 2156 | 004340.jpg 0 0 0 0 2157 | 004342.jpg 0 0 0 0 0 2158 | 004343.jpg 0 2159 | 004344.jpg 0 0 2160 | 004348.jpg 1 1 0 2161 | 004350.jpg 0 2162 | 004353.jpg 0 2163 | 004355.jpg 0 0 0 0 0 0 2164 | 004357.jpg 0 0 0 0 2165 | 004358.jpg 0 2166 | 004362.jpg 0 0 2167 | 004363.jpg 1 0 0 0 2168 | 004366.jpg 0 0 0 0 2169 | 004373.jpg 0 0 0 1 0 0 2170 | 004374.jpg 0 2171 | 004375.jpg 0 0 2172 | 004377.jpg 0 0 1 1 0 0 2173 | 004378.jpg 0 0 0 0 2174 | 004381.jpg 0 0 2175 | 004382.jpg 0 2176 | 004383.jpg 0 2177 | 004385.jpg 0 2178 | 004388.jpg 0 2179 | 004393.jpg 1 0 2180 | 004394.jpg 0 2181 | 004395.jpg 0 0 2182 | 004398.jpg 0 2183 | 004399.jpg 0 1 2184 | 004400.jpg 0 2185 | 004401.jpg 0 2186 | 004402.jpg 0 1 2187 | 004403.jpg 0 2188 | 004406.jpg 0 2189 | 004407.jpg 0 2190 | 004408.jpg 0 0 0 0 0 2191 | 004410.jpg 1 0 0 2192 | 004412.jpg 0 1 2193 | 004413.jpg 0 2194 | 004414.jpg 0 1 1 1 2195 | 004415.jpg 0 2196 | 004416.jpg 0 2197 | 004417.jpg 0 0 0 0 0 0 2198 | 004418.jpg 0 0 2199 | 004419.jpg 0 0 2200 | 004420.jpg 0 0 2201 | 004422.jpg 1 1 1 1 1 1 1 0 1 1 2202 | 004425.jpg 0 2203 | 004426.jpg 0 0 0 2204 | 004427.jpg 0 2205 | 004428.jpg 0 0 2206 | 004431.jpg 0 2207 | 004435.jpg 0 0 0 2208 | 004440.jpg 1 0 2209 | 004442.jpg 0 1 1 2210 | 004443.jpg 0 0 1 1 1 0 2211 | 004444.jpg 0 1 2212 | 004445.jpg 0 0 0 0 0 2213 | 004447.jpg 0 0 0 0 0 2214 | 004448.jpg 0 0 0 2215 | 004449.jpg 0 0 0 1 0 1 1 0 0 1 0 0 2216 | 004451.jpg 0 0 0 1 1 1 1 1 1 1 2217 | 004453.jpg 0 2218 | 004454.jpg 0 2219 | 004456.jpg 0 0 2220 | 004458.jpg 0 2221 | 004460.jpg 0 2222 | 004461.jpg 0 2223 | 004462.jpg 0 0 0 0 0 1 1 2224 | 004465.jpg 0 0 0 0 2225 | 004467.jpg 0 2226 | 004469.jpg 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2227 | 004472.jpg 0 2228 | 004473.jpg 0 2229 | 004475.jpg 0 1 0 1 1 2230 | 004476.jpg 0 0 0 0 0 0 2231 | 004477.jpg 0 1 1 2232 | 004478.jpg 0 0 1 1 0 0 1 1 2233 | 004480.jpg 0 0 2234 | 004482.jpg 0 0 0 2235 | 004483.jpg 0 2236 | 004485.jpg 0 0 0 0 0 0 0 2237 | 004486.jpg 0 0 0 0 0 2238 | 004489.jpg 0 2239 | 004491.jpg 0 0 0 2240 | 004492.jpg 0 0 2241 | 004497.jpg 0 0 0 0 2242 | 004501.jpg 0 0 0 1 2243 | 004503.jpg 0 2244 | 004504.jpg 0 2245 | 004505.jpg 0 1 2246 | 004506.jpg 0 2247 | 004511.jpg 0 0 2248 | 004513.jpg 0 2249 | 004515.jpg 0 0 2250 | 004516.jpg 0 0 0 0 2251 | 004521.jpg 0 0 1 1 2252 | 004522.jpg 0 2253 | 004523.jpg 0 0 0 1 1 0 0 2254 | 004525.jpg 0 0 2255 | 004529.jpg 0 2256 | 004531.jpg 0 2257 | 004533.jpg 0 2258 | 004534.jpg 0 0 0 1 2259 | 004536.jpg 0 0 0 2260 | 004538.jpg 0 0 2261 | 004541.jpg 0 0 2262 | 004543.jpg 0 0 2263 | 004545.jpg 0 0 0 0 0 1 2264 | 004546.jpg 0 0 2265 | 004547.jpg 0 0 2266 | 004550.jpg 0 2267 | 004554.jpg 0 2268 | 004556.jpg 0 2269 | 004557.jpg 0 2270 | 004559.jpg 0 0 1 1 0 0 0 0 1 1 1 0 0 1 2271 | 004560.jpg 0 0 0 0 0 2272 | 004561.jpg 0 0 2273 | 004564.jpg 0 0 2274 | 004567.jpg 0 1 2275 | 004568.jpg 1 0 2276 | 004569.jpg 0 0 2277 | 004572.jpg 0 2278 | 004573.jpg 0 0 0 2279 | 004575.jpg 0 1 2280 | 004577.jpg 0 0 2281 | 004578.jpg 0 2282 | 004580.jpg 0 0 0 0 2283 | 004582.jpg 0 0 2284 | 004583.jpg 0 2285 | 004586.jpg 0 2286 | 004589.jpg 0 0 2287 | 004590.jpg 0 1 0 0 0 0 0 2288 | 004593.jpg 0 2289 | 004594.jpg 0 1 1 1 1 2290 | 004596.jpg 0 2291 | 004598.jpg 0 0 0 0 0 0 0 2292 | 004599.jpg 0 0 0 0 2293 | 004602.jpg 0 2294 | 004603.jpg 0 2295 | 004608.jpg 0 2296 | 004610.jpg 0 0 0 2297 | 004613.jpg 0 2298 | 004614.jpg 0 2299 | 004615.jpg 1 0 2300 | 004616.jpg 0 2301 | 004617.jpg 0 0 0 2302 | 004619.jpg 0 2303 | 004620.jpg 0 0 1 2304 | 004621.jpg 0 2305 | 004624.jpg 0 2306 | 004629.jpg 0 0 0 0 0 0 0 0 2307 | 004633.jpg 0 2308 | 004635.jpg 0 0 2309 | 004637.jpg 0 0 0 0 2310 | 004638.jpg 0 2311 | 004639.jpg 0 2312 | 004640.jpg 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 2313 | 004641.jpg 0 1 0 2314 | 004642.jpg 0 0 2315 | 004645.jpg 0 2316 | 004646.jpg 0 2317 | 004650.jpg 1 0 0 2318 | 004657.jpg 0 1 2319 | 004658.jpg 0 2320 | 004659.jpg 0 2321 | 004661.jpg 0 0 0 0 2322 | 004663.jpg 0 2323 | 004664.jpg 0 2324 | 004665.jpg 0 0 0 1 2325 | 004666.jpg 0 0 0 0 0 0 0 0 2326 | 004667.jpg 0 0 0 0 2327 | 004668.jpg 0 0 0 0 2328 | 004669.jpg 0 0 2329 | 004670.jpg 0 2330 | 004677.jpg 0 0 2331 | 004678.jpg 0 0 2332 | 004680.jpg 0 2333 | 004681.jpg 0 2334 | 004684.jpg 0 2335 | 004688.jpg 0 2336 | 004690.jpg 0 2337 | 004695.jpg 0 1 2338 | 004696.jpg 1 0 0 2339 | 004697.jpg 1 0 2340 | 004698.jpg 1 0 1 0 0 0 0 1 1 1 2341 | 004700.jpg 0 2342 | 004703.jpg 0 0 2343 | 004704.jpg 1 0 1 2344 | 004709.jpg 0 2345 | 004711.jpg 0 0 2346 | 004712.jpg 0 1 0 0 1 1 1 1 0 0 2347 | 004713.jpg 0 2348 | 004716.jpg 0 0 1 2349 | 004717.jpg 0 0 0 0 2350 | 004720.jpg 0 0 2351 | 004721.jpg 0 0 0 0 0 2352 | 004724.jpg 0 2353 | 004725.jpg 1 1 1 1 0 1 0 2354 | 004726.jpg 0 0 2355 | 004728.jpg 0 2356 | 004729.jpg 0 2357 | 004730.jpg 0 2358 | 004731.jpg 0 0 1 0 0 2359 | 004733.jpg 0 2360 | 004734.jpg 0 2361 | 004736.jpg 0 2362 | 004738.jpg 0 0 2363 | 004739.jpg 0 0 0 2364 | 004740.jpg 0 0 0 0 0 1 2365 | 004741.jpg 0 0 2366 | 004744.jpg 0 0 1 2367 | 004745.jpg 0 0 0 0 2368 | 004749.jpg 0 0 2369 | 004751.jpg 1 0 2370 | 004752.jpg 0 2371 | 004755.jpg 0 2372 | 004756.jpg 0 0 2373 | 004757.jpg 0 0 2374 | 004758.jpg 0 2375 | 004759.jpg 0 2376 | 004762.jpg 0 1 1 1 1 0 1 2377 | 004763.jpg 0 0 2378 | 004764.jpg 1 0 0 0 2379 | 004765.jpg 0 0 2380 | 004766.jpg 0 0 0 2381 | 004767.jpg 0 2382 | 004769.jpg 0 0 0 0 0 2383 | 004771.jpg 0 0 0 0 0 2384 | 004772.jpg 0 2385 | 004774.jpg 0 2386 | 004775.jpg 0 2387 | 004778.jpg 0 2388 | 004780.jpg 0 0 0 0 1 1 1 1 1 0 1 1 1 2389 | 004781.jpg 0 0 0 0 0 0 0 2390 | 004784.jpg 0 2391 | 004787.jpg 0 2392 | 004791.jpg 0 0 0 0 0 1 1 1 2393 | 004795.jpg 0 2394 | 004798.jpg 0 2395 | 004800.jpg 0 0 0 2396 | 004802.jpg 0 2397 | 004803.jpg 0 0 2398 | 004804.jpg 0 0 0 1 1 1 2399 | 004806.jpg 0 2400 | 004807.jpg 0 0 2401 | 004809.jpg 0 2402 | 004810.jpg 0 0 1 0 0 0 0 2403 | 004811.jpg 0 0 2404 | 004813.jpg 0 0 0 2405 | 004817.jpg 0 2406 | 004819.jpg 0 0 0 0 0 0 0 0 0 0 0 2407 | 004820.jpg 0 2408 | 004821.jpg 0 2409 | 004822.jpg 0 0 2410 | 004824.jpg 0 0 2411 | 004827.jpg 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2412 | 004829.jpg 0 2413 | 004833.jpg 0 2414 | 004835.jpg 0 0 0 0 2415 | 004838.jpg 0 2416 | 004843.jpg 0 1 1 2417 | 004844.jpg 0 0 0 1 0 2418 | 004845.jpg 0 2419 | 004847.jpg 0 2420 | 004851.jpg 0 2421 | 004853.jpg 0 2422 | 004854.jpg 0 0 2423 | 004855.jpg 0 0 0 0 1 2424 | 004858.jpg 0 2425 | 004860.jpg 0 2426 | 004861.jpg 0 2427 | 004862.jpg 0 0 0 2428 | 004864.jpg 0 0 0 0 0 2429 | 004865.jpg 0 2430 | 004870.jpg 0 0 0 0 2431 | 004871.jpg 0 2432 | 004874.jpg 0 0 2433 | 004875.jpg 0 2434 | 004877.jpg 0 0 2435 | 004880.jpg 0 0 2436 | 004881.jpg 0 1 1 1 2437 | 004883.jpg 0 2438 | 004884.jpg 0 2439 | 004887.jpg 0 0 2440 | 004888.jpg 0 0 2441 | 004889.jpg 0 1 0 0 2442 | 004891.jpg 0 2443 | 004892.jpg 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 2444 | 004893.jpg 0 0 2445 | 004894.jpg 0 2446 | 004899.jpg 1 1 0 0 2447 | 004900.jpg 0 0 2448 | 004901.jpg 0 2449 | 004904.jpg 0 0 0 0 0 2450 | 004906.jpg 0 2451 | 004908.jpg 1 0 2452 | 004909.jpg 0 2453 | 004914.jpg 0 2454 | 004915.jpg 0 0 2455 | 004917.jpg 0 0 2456 | 004918.jpg 0 0 2457 | 004919.jpg 0 2458 | 004920.jpg 0 0 2459 | 004921.jpg 0 2460 | 004922.jpg 0 0 0 1 2461 | 004923.jpg 0 0 0 0 0 2462 | 004924.jpg 0 2463 | 004925.jpg 0 0 2464 | 004927.jpg 0 0 0 1 1 1 1 1 1 0 0 0 1 2465 | 004930.jpg 0 0 2466 | 004932.jpg 0 0 2467 | 004933.jpg 0 2468 | 004934.jpg 0 0 2469 | 004937.jpg 0 0 0 0 0 0 0 2470 | 004940.jpg 0 2471 | 004941.jpg 0 0 2472 | 004942.jpg 0 2473 | 004944.jpg 0 0 0 2474 | 004945.jpg 0 2475 | 004947.jpg 0 0 0 2476 | 004949.jpg 0 0 0 0 1 2477 | 004952.jpg 0 2478 | 004957.jpg 0 2479 | 004959.jpg 0 0 0 0 0 0 0 0 0 2480 | 004964.jpg 0 0 0 2481 | 004965.jpg 0 0 2482 | 004969.jpg 0 2483 | 004970.jpg 0 2484 | 004971.jpg 0 1 0 0 2485 | 004975.jpg 0 2486 | 004978.jpg 0 0 0 0 0 2487 | 004979.jpg 0 2488 | 004980.jpg 1 0 1 0 0 1 0 2489 | 004981.jpg 0 2490 | 004988.jpg 0 2491 | 004989.jpg 1 0 2492 | 004993.jpg 0 2493 | 004996.jpg 0 2494 | 005000.jpg 0 2495 | 005002.jpg 0 0 0 2496 | 005005.jpg 0 0 2497 | 005008.jpg 0 2498 | 005009.jpg 0 2499 | 005010.jpg 1 0 2500 | 005011.jpg 0 2501 | 005012.jpg 0 0 0 2502 | 005013.jpg 0 2503 | 005015.jpg 0 2504 | 005017.jpg 0 0 0 0 0 0 0 1 1 2505 | 005019.jpg 0 0 2506 | 005021.jpg 0 2507 | 005022.jpg 0 2508 | 005025.jpg 0 0 0 0 1 2509 | 005030.jpg 0 1 2510 | 005031.jpg 0 0 0 0 2511 | 005034.jpg 0 2512 | 005035.jpg 0 0 0 0 0 0 0 2513 | 005038.jpg 0 2514 | 005040.jpg 0 0 1 2515 | 005041.jpg 0 1 0 0 0 0 0 1 1 2516 | 005043.jpg 0 2517 | 005044.jpg 0 0 0 0 0 0 1 1 2518 | 005046.jpg 0 2519 | 005048.jpg 0 2520 | 005049.jpg 0 0 0 0 0 0 2521 | 005050.jpg 0 0 2522 | 005051.jpg 0 0 2523 | 005053.jpg 0 1 0 0 2524 | 005059.jpg 0 2525 | 005060.jpg 0 0 0 0 0 0 0 0 0 1 2526 | 005066.jpg 0 1 2527 | 005069.jpg 0 0 2528 | 005070.jpg 0 2529 | 005074.jpg 0 0 0 1 1 0 1 0 2530 | 005075.jpg 0 2531 | 005076.jpg 0 2532 | 005080.jpg 0 2533 | 005082.jpg 0 0 0 0 2534 | 005083.jpg 0 2535 | 005087.jpg 0 0 2536 | 005088.jpg 0 0 0 0 1 0 0 0 0 0 0 1 2537 | 005089.jpg 0 2538 | 005091.jpg 0 0 0 2539 | 005092.jpg 0 0 0 0 0 0 2540 | 005095.jpg 0 1 2541 | 005096.jpg 0 2542 | 005098.jpg 0 0 2543 | 005099.jpg 0 2544 | 005100.jpg 0 0 1 1 1 2545 | 005103.jpg 0 0 1 2546 | 005105.jpg 0 0 0 1 0 0 2547 | 005106.jpg 0 0 2548 | 005109.jpg 0 2549 | 005112.jpg 0 0 0 0 0 2550 | 005113.jpg 0 1 2551 | 005115.jpg 0 2552 | 005117.jpg 0 0 2553 | 005118.jpg 0 0 0 2554 | 005119.jpg 0 0 2555 | 005120.jpg 0 1 0 0 2556 | 005123.jpg 0 2557 | 005125.jpg 0 0 2558 | 005126.jpg 0 2559 | 005127.jpg 0 2560 | 005132.jpg 0 0 2561 | 005133.jpg 0 0 2562 | 005137.jpg 0 1 2563 | 005139.jpg 0 0 2564 | 005140.jpg 0 0 0 2565 | 005141.jpg 0 0 0 2566 | 005142.jpg 0 2567 | 005147.jpg 0 0 0 0 0 0 1 2568 | 005148.jpg 0 0 1 0 0 1 1 2569 | 005149.jpg 0 0 2570 | 005151.jpg 0 0 0 0 2571 | 005152.jpg 0 0 2572 | 005154.jpg 0 2573 | 005155.jpg 0 2574 | 005157.jpg 0 1 2575 | 005158.jpg 0 2576 | 005162.jpg 0 2577 | 005163.jpg 1 1 0 0 1 2578 | 005164.jpg 0 0 0 2579 | 005165.jpg 0 2580 | 005166.jpg 0 0 2581 | 005167.jpg 0 2582 | 005170.jpg 0 0 0 0 0 0 2583 | 005172.jpg 0 2584 | 005174.jpg 1 1 0 0 1 2585 | 005178.jpg 0 2586 | 005180.jpg 0 0 0 0 0 1 2587 | 005182.jpg 0 0 2588 | 005184.jpg 0 0 0 0 0 0 0 2589 | 005187.jpg 0 1 1 0 2590 | 005188.jpg 0 2591 | 005192.jpg 0 0 0 1 2592 | 005193.jpg 0 0 2593 | 005194.jpg 0 2594 | 005196.jpg 0 0 0 0 1 1 1 2595 | 005197.jpg 0 0 0 2596 | 005198.jpg 0 2597 | 005200.jpg 0 2598 | 005201.jpg 0 2599 | 005204.jpg 0 0 2600 | 005205.jpg 0 0 0 0 0 0 0 0 0 0 2601 | 005206.jpg 0 2602 | 005207.jpg 0 2603 | 005211.jpg 0 2604 | 005213.jpg 0 2605 | 005216.jpg 0 2606 | 005218.jpg 0 0 2607 | 005221.jpg 0 2608 | 005225.jpg 0 0 2609 | 005226.jpg 0 0 0 0 0 0 0 2610 | 005227.jpg 0 2611 | 005228.jpg 0 0 2612 | 005232.jpg 0 0 2613 | 005233.jpg 0 0 0 0 0 1 0 1 1 0 0 0 0 1 1 2614 | 005234.jpg 0 1 2615 | 005235.jpg 0 2616 | 005237.jpg 0 0 2617 | 005238.jpg 0 2618 | 005240.jpg 0 0 2619 | 005241.jpg 0 2620 | 005243.jpg 0 2621 | 005247.jpg 0 2622 | 005249.jpg 0 2623 | 005250.jpg 0 0 2624 | 005251.jpg 0 0 0 2625 | 005252.jpg 0 0 0 2626 | 005255.jpg 0 1 0 0 1 2627 | 005256.jpg 0 2628 | 005261.jpg 0 0 0 0 0 1 2629 | 005265.jpg 0 2630 | 005266.jpg 0 0 0 0 1 2631 | 005271.jpg 0 2632 | 005272.jpg 0 0 1 2633 | 005275.jpg 0 2634 | 005276.jpg 0 0 0 0 0 0 0 1 0 2635 | 005277.jpg 0 2636 | 005279.jpg 0 2637 | 005280.jpg 0 2638 | 005282.jpg 0 2639 | 005284.jpg 0 0 0 0 2640 | 005286.jpg 0 0 2641 | 005287.jpg 0 0 2642 | 005289.jpg 0 0 2643 | 005291.jpg 1 1 1 0 0 0 0 2644 | 005294.jpg 0 2645 | 005295.jpg 0 0 0 2646 | 005296.jpg 0 0 1 2647 | 005299.jpg 1 0 0 1 0 1 1 2648 | 005300.jpg 0 2649 | 005301.jpg 0 0 0 0 0 0 0 1 0 2650 | 005302.jpg 0 0 1 0 1 1 1 1 1 1 1 1 1 2651 | 005308.jpg 0 0 0 0 0 0 2652 | 005309.jpg 0 2653 | 005313.jpg 0 0 2654 | 005316.jpg 0 0 0 0 0 0 2655 | 005317.jpg 0 2656 | 005321.jpg 0 0 2657 | 005322.jpg 0 2658 | 005323.jpg 0 0 2659 | 005324.jpg 0 0 1 2660 | 005329.jpg 0 0 0 1 1 1 1 0 1 2661 | 005330.jpg 0 2662 | 005332.jpg 0 0 1 2663 | 005333.jpg 0 0 2664 | 005334.jpg 0 2665 | 005335.jpg 0 1 0 1 2666 | 005339.jpg 0 0 0 0 1 2667 | 005341.jpg 0 2668 | 005342.jpg 0 1 1 0 0 0 2669 | 005347.jpg 0 0 0 0 0 2670 | 005353.jpg 0 2671 | 005354.jpg 0 0 0 0 2672 | 005356.jpg 0 0 2673 | 005357.jpg 0 0 2674 | 005359.jpg 0 1 2675 | 005361.jpg 0 2676 | 005362.jpg 1 1 0 0 0 0 0 1 1 2677 | 005364.jpg 0 2678 | 005366.jpg 0 0 1 1 2679 | 005372.jpg 0 2680 | 005375.jpg 0 0 2681 | 005376.jpg 0 2682 | 005377.jpg 0 0 0 0 2683 | 005381.jpg 0 1 2684 | 005382.jpg 0 2685 | 005386.jpg 0 2686 | 005390.jpg 0 2687 | 005392.jpg 0 0 0 0 2688 | 005394.jpg 0 2689 | 005399.jpg 0 0 2690 | 005400.jpg 0 0 2691 | 005401.jpg 0 2692 | 005402.jpg 0 2693 | 005403.jpg 0 2694 | 005409.jpg 0 0 2695 | 005411.jpg 0 0 2696 | 005412.jpg 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2697 | 005415.jpg 0 0 0 0 0 0 1 2698 | 005422.jpg 0 2699 | 005425.jpg 0 0 2700 | 005426.jpg 0 2701 | 005427.jpg 0 1 2702 | 005428.jpg 0 2703 | 005432.jpg 0 2704 | 005435.jpg 0 2705 | 005437.jpg 0 2706 | 005442.jpg 0 0 0 0 0 0 0 0 1 1 1 2707 | 005443.jpg 0 2708 | 005444.jpg 0 2709 | 005446.jpg 0 2710 | 005447.jpg 0 0 0 0 1 0 0 2711 | 005449.jpg 0 2712 | 005452.jpg 0 2713 | 005456.jpg 0 0 0 2714 | 005458.jpg 0 0 2715 | 005459.jpg 0 0 0 0 2716 | 005460.jpg 0 2717 | 005462.jpg 0 2718 | 005463.jpg 0 2719 | 005464.jpg 0 0 1 1 1 2720 | 005466.jpg 0 0 2721 | 005468.jpg 0 0 1 0 0 2722 | 005472.jpg 0 2723 | 005473.jpg 0 0 2724 | 005474.jpg 0 1 2725 | 005476.jpg 0 2726 | 005477.jpg 0 0 0 0 0 0 2727 | 005479.jpg 0 0 2728 | 005480.jpg 0 2729 | 005482.jpg 0 0 2730 | 005484.jpg 0 0 1 2731 | 005488.jpg 0 0 2732 | 005490.jpg 0 2733 | 005491.jpg 0 0 1 2734 | 005492.jpg 0 2735 | 005493.jpg 0 2736 | 005494.jpg 0 0 2737 | 005495.jpg 0 2738 | 005498.jpg 0 0 0 2739 | 005500.jpg 0 0 2740 | 005501.jpg 0 2741 | 005502.jpg 0 0 0 2742 | 005503.jpg 0 0 2743 | 005504.jpg 0 2744 | 005505.jpg 0 0 2745 | 005506.jpg 0 0 0 0 2746 | 005512.jpg 0 0 2747 | 005513.jpg 0 0 2748 | 005516.jpg 0 2749 | 005520.jpg 0 0 0 0 0 0 0 0 1 2750 | 005523.jpg 0 0 0 0 0 0 2751 | 005525.jpg 0 2752 | 005528.jpg 0 2753 | 005529.jpg 0 1 2754 | 005532.jpg 0 0 0 1 0 0 1 0 2755 | 005533.jpg 0 0 0 0 0 1 0 2756 | 005534.jpg 0 2757 | 005537.jpg 0 2758 | 005538.jpg 0 0 2759 | 005540.jpg 0 0 0 0 2760 | 005543.jpg 0 2761 | 005545.jpg 0 0 1 2762 | 005546.jpg 0 0 0 0 0 0 2763 | 005548.jpg 0 0 0 2764 | 005551.jpg 0 2765 | 005553.jpg 0 0 2766 | 005555.jpg 0 0 2767 | 005556.jpg 1 1 1 0 0 2768 | 005557.jpg 0 2769 | 005558.jpg 0 1 0 2770 | 005560.jpg 0 0 2771 | 005561.jpg 0 0 0 2772 | 005562.jpg 0 2773 | 005564.jpg 0 2774 | 005565.jpg 0 2775 | 005567.jpg 0 0 0 2776 | 005569.jpg 0 2777 | 005570.jpg 0 0 0 0 0 0 0 0 1 0 2778 | 005571.jpg 0 2779 | 005572.jpg 0 2780 | 005575.jpg 0 2781 | 005578.jpg 0 0 2782 | 005580.jpg 0 2783 | 005581.jpg 0 0 2784 | 005587.jpg 0 2785 | 005589.jpg 0 0 1 0 2786 | 005594.jpg 0 2787 | 005595.jpg 0 0 2788 | 005596.jpg 0 0 0 0 0 0 0 2789 | 005597.jpg 1 1 1 1 1 1 0 1 0 0 0 0 0 2790 | 005598.jpg 0 2791 | 005602.jpg 0 0 2792 | 005604.jpg 0 0 0 2793 | 005607.jpg 0 2794 | 005610.jpg 0 0 2795 | 005612.jpg 0 0 0 1 1 0 1 2796 | 005616.jpg 0 0 2797 | 005617.jpg 0 0 2798 | 005619.jpg 0 2799 | 005621.jpg 0 0 2800 | 005622.jpg 0 0 0 0 0 0 0 0 0 0 0 2801 | 005623.jpg 0 2802 | 005626.jpg 1 0 2803 | 005627.jpg 0 0 0 1 0 1 0 2804 | 005628.jpg 0 2805 | 005632.jpg 0 2806 | 005633.jpg 1 1 1 0 0 2807 | 005634.jpg 1 0 2808 | 005635.jpg 0 0 0 1 0 0 0 1 1 1 1 2809 | 005638.jpg 0 0 2810 | 005642.jpg 0 2811 | 005643.jpg 0 2812 | 005646.jpg 0 0 0 2813 | 005649.jpg 0 2814 | 005650.jpg 0 1 2815 | 005651.jpg 0 2816 | 005656.jpg 0 0 0 0 0 0 0 2817 | 005659.jpg 0 0 0 2818 | 005661.jpg 0 0 0 1 1 1 1 1 2819 | 005663.jpg 0 1 0 0 2820 | 005665.jpg 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2821 | 005666.jpg 1 1 1 0 0 0 1 1 1 1 2822 | 005667.jpg 0 0 1 1 1 1 1 1 1 1 2823 | 005670.jpg 0 0 1 0 0 0 2824 | 005671.jpg 0 2825 | 005673.jpg 0 0 0 0 0 0 0 0 1 1 2826 | 005675.jpg 1 0 0 2827 | 005677.jpg 0 0 0 0 2828 | 005678.jpg 0 0 2829 | 005681.jpg 0 2830 | 005683.jpg 0 2831 | 005684.jpg 0 2832 | 005688.jpg 0 0 2833 | 005689.jpg 0 2834 | 005690.jpg 0 2835 | 005691.jpg 0 2836 | 005692.jpg 0 2837 | 005694.jpg 0 2838 | 005698.jpg 0 0 0 0 0 0 1 1 1 2839 | 005703.jpg 0 0 0 0 2840 | 005706.jpg 0 2841 | 005707.jpg 0 2842 | 005708.jpg 0 0 0 0 0 0 2843 | 005709.jpg 0 0 2844 | 005711.jpg 0 0 0 1 1 2845 | 005712.jpg 0 0 1 2846 | 005717.jpg 1 0 0 0 0 0 0 0 0 0 0 2847 | 005720.jpg 0 0 2848 | 005721.jpg 0 0 0 0 0 2849 | 005722.jpg 0 0 2850 | 005724.jpg 0 0 2851 | 005725.jpg 0 0 1 1 0 0 1 1 2852 | 005726.jpg 1 0 2853 | 005727.jpg 0 1 1 2854 | 005733.jpg 0 0 1 2855 | 005734.jpg 1 0 1 0 1 2856 | 005737.jpg 0 1 2857 | 005739.jpg 0 1 0 2858 | 005744.jpg 0 2859 | 005745.jpg 0 0 1 1 2860 | 005746.jpg 0 0 0 0 2861 | 005748.jpg 0 0 2862 | 005750.jpg 0 0 2863 | 005751.jpg 0 2864 | 005753.jpg 0 0 0 0 1 2865 | 005754.jpg 0 0 0 0 0 0 2866 | 005758.jpg 0 0 2867 | 005759.jpg 0 0 0 0 1 0 1 2868 | 005763.jpg 0 0 0 2869 | 005766.jpg 0 0 0 0 0 0 2870 | 005767.jpg 0 0 2871 | 005770.jpg 0 2872 | 005771.jpg 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 2873 | 005772.jpg 0 2874 | 005774.jpg 0 0 2875 | 005775.jpg 0 0 2876 | 005776.jpg 0 2877 | 005777.jpg 0 0 0 0 2878 | 005778.jpg 0 0 0 0 0 2879 | 005785.jpg 0 1 2880 | 005787.jpg 0 2881 | 005792.jpg 0 0 2882 | 005793.jpg 0 2883 | 005795.jpg 0 2884 | 005797.jpg 0 0 0 2885 | 005798.jpg 0 0 0 0 0 0 0 0 2886 | 005800.jpg 1 0 2887 | 005801.jpg 0 2888 | 005802.jpg 0 2889 | 005804.jpg 0 0 0 0 0 1 2890 | 005807.jpg 0 2891 | 005808.jpg 0 0 0 1 2892 | 005809.jpg 0 0 1 1 0 0 0 0 1 2893 | 005810.jpg 0 2894 | 005816.jpg 0 0 2895 | 005820.jpg 0 2896 | 005822.jpg 0 0 2897 | 005823.jpg 0 0 0 1 0 2898 | 005827.jpg 0 0 2899 | 005832.jpg 0 0 2900 | 005833.jpg 1 0 2901 | 005834.jpg 0 2902 | 005835.jpg 0 0 1 0 0 0 0 2903 | 005837.jpg 0 2904 | 005842.jpg 0 0 0 1 0 0 2905 | 005844.jpg 0 0 0 0 0 2906 | 005846.jpg 0 2907 | 005847.jpg 0 0 2908 | 005848.jpg 0 0 2909 | 005849.jpg 0 0 0 1 0 1 0 1 2910 | 005855.jpg 0 2911 | 005857.jpg 0 0 2912 | 005858.jpg 0 0 0 1 0 0 2913 | 005862.jpg 0 0 2914 | 005865.jpg 1 1 0 0 0 0 0 0 0 2915 | 005866.jpg 0 0 0 0 0 2916 | 005869.jpg 0 0 0 2917 | 005870.jpg 0 0 0 0 1 2918 | 005871.jpg 0 2919 | 005872.jpg 0 2920 | 005876.jpg 0 2921 | 005880.jpg 1 1 1 1 1 1 0 2922 | 005882.jpg 0 0 0 1 1 2923 | 005883.jpg 0 0 0 0 0 0 1 1 0 1 2924 | 005886.jpg 0 2925 | 005887.jpg 0 0 2926 | 005890.jpg 0 0 2927 | 005891.jpg 0 2928 | 005892.jpg 0 2929 | 005896.jpg 0 2930 | 005898.jpg 0 1 0 0 1 0 0 1 1 1 1 0 0 1 1 0 2931 | 005900.jpg 0 0 0 0 0 0 2932 | 005902.jpg 0 0 0 2933 | 005904.jpg 0 2934 | 005907.jpg 0 0 0 0 0 0 0 2935 | 005913.jpg 0 2936 | 005915.jpg 0 0 2937 | 005916.jpg 0 0 0 2938 | 005921.jpg 0 0 0 0 0 0 2939 | 005922.jpg 0 0 0 0 2940 | 005924.jpg 0 0 2941 | 005925.jpg 0 0 0 0 2942 | 005926.jpg 0 0 0 2943 | 005927.jpg 0 1 2944 | 005929.jpg 0 2945 | 005931.jpg 0 0 0 0 0 0 0 2946 | 005932.jpg 0 2947 | 005933.jpg 0 2948 | 005934.jpg 0 1 2949 | 005935.jpg 1 1 0 2950 | 005936.jpg 0 0 2951 | 005937.jpg 0 0 0 0 0 1 1 2952 | 005939.jpg 0 1 2953 | 005941.jpg 0 0 0 1 1 0 2954 | 005942.jpg 0 0 1 1 1 2955 | 005943.jpg 0 0 0 2956 | 005944.jpg 0 0 2957 | 005945.jpg 0 0 0 2958 | 005946.jpg 0 2959 | 005949.jpg 0 2960 | 005950.jpg 0 0 2961 | 005953.jpg 0 1 2962 | 005955.jpg 0 2963 | 005957.jpg 0 2964 | 005958.jpg 0 0 2965 | 005959.jpg 0 0 1 2966 | 005962.jpg 0 2967 | 005965.jpg 0 2968 | 005966.jpg 0 0 2969 | 005967.jpg 0 0 2970 | 005969.jpg 0 2971 | 005972.jpg 0 2972 | 005973.jpg 0 0 2973 | 005974.jpg 0 2974 | 005976.jpg 0 0 1 0 2975 | 005977.jpg 0 0 2976 | 005978.jpg 0 2977 | 005982.jpg 0 0 1 0 0 0 0 2978 | 005986.jpg 0 2979 | 005987.jpg 0 2980 | 005993.jpg 0 2981 | 005994.jpg 1 1 1 1 0 1 2982 | 005997.jpg 0 0 2983 | 005999.jpg 0 2984 | 006002.jpg 0 1 0 2985 | 006003.jpg 0 0 2986 | 006006.jpg 0 2987 | 006007.jpg 0 2988 | 006008.jpg 0 2989 | 006010.jpg 0 0 0 0 1 1 1 1 0 0 1 1 2990 | 006013.jpg 0 0 2991 | 006014.jpg 0 1 1 2992 | 006015.jpg 0 1 2993 | 006016.jpg 0 1 0 0 2994 | 006017.jpg 0 0 1 0 2995 | 006019.jpg 0 2996 | 006021.jpg 0 2997 | 006022.jpg 0 0 2998 | 006024.jpg 0 0 2999 | 006031.jpg 0 3000 | 006032.jpg 0 0 0 0 0 0 0 0 3001 | 006034.jpg 0 3002 | 006036.jpg 0 0 1 3003 | 006037.jpg 0 3004 | 006039.jpg 0 3005 | 006040.jpg 0 0 0 0 0 3006 | 006044.jpg 0 3007 | 006047.jpg 1 0 0 0 3008 | 006048.jpg 0 0 3009 | 006049.jpg 0 0 0 0 3010 | 006050.jpg 0 0 0 3011 | 006051.jpg 0 0 0 0 0 0 3012 | 006052.jpg 0 3013 | 006053.jpg 0 3014 | 006054.jpg 0 0 0 0 3015 | 006056.jpg 0 1 0 0 1 0 3016 | 006057.jpg 0 0 0 0 0 1 3017 | 006059.jpg 0 0 3018 | 006060.jpg 0 0 3019 | 006063.jpg 0 3020 | 006064.jpg 0 3021 | 006068.jpg 0 1 3022 | 006072.jpg 0 0 3023 | 006075.jpg 0 3024 | 006076.jpg 0 0 3025 | 006077.jpg 0 3026 | 006080.jpg 0 3027 | 006081.jpg 0 1 0 0 1 1 1 1 3028 | 006082.jpg 0 0 0 3029 | 006083.jpg 0 0 3030 | 006085.jpg 1 0 0 0 1 1 1 3031 | 006086.jpg 0 1 1 3032 | 006087.jpg 0 3033 | 006090.jpg 0 3034 | 006092.jpg 0 0 1 3035 | 006093.jpg 0 0 0 1 0 1 1 0 3036 | 006094.jpg 0 0 3037 | 006099.jpg 0 3038 | 006101.jpg 0 0 0 3039 | 006102.jpg 0 3040 | 006106.jpg 0 0 3041 | 006109.jpg 0 3042 | 006110.jpg 0 0 3043 | 006112.jpg 0 3044 | 006113.jpg 0 1 1 0 1 0 0 3045 | 006114.jpg 0 3046 | 006115.jpg 0 1 0 0 3047 | 006116.jpg 0 3048 | 006118.jpg 0 0 3049 | 006119.jpg 0 0 3050 | 006121.jpg 0 0 0 3051 | 006122.jpg 0 0 0 3052 | 006126.jpg 0 0 0 3053 | 006127.jpg 0 3054 | 006132.jpg 0 0 3055 | 006137.jpg 0 0 0 3056 | 006138.jpg 0 3057 | 006142.jpg 1 0 0 0 0 0 0 1 3058 | 006143.jpg 0 0 3059 | 006144.jpg 0 0 3060 | 006145.jpg 0 0 0 0 0 0 1 0 1 1 0 3061 | 006147.jpg 0 0 3062 | 006149.jpg 0 3063 | 006152.jpg 0 0 0 0 0 0 1 1 1 1 1 1 0 3064 | 006154.jpg 0 3065 | 006155.jpg 0 0 0 0 1 0 0 0 0 1 1 1 1 3066 | 006157.jpg 0 0 3067 | 006160.jpg 0 3068 | 006164.jpg 0 3069 | 006165.jpg 0 0 3070 | 006167.jpg 0 0 0 3071 | 006168.jpg 0 3072 | 006169.jpg 1 1 0 0 0 0 0 3073 | 006173.jpg 0 0 0 0 0 0 0 3074 | 006178.jpg 0 0 0 0 0 0 0 0 3075 | 006182.jpg 0 0 3076 | 006186.jpg 0 3077 | 006191.jpg 0 3078 | 006192.jpg 0 0 3079 | 006193.jpg 0 0 0 0 0 3080 | 006194.jpg 0 3081 | 006195.jpg 0 0 0 0 0 0 0 1 3082 | 006197.jpg 0 3083 | 006199.jpg 0 0 3084 | 006200.jpg 0 0 0 3085 | 006204.jpg 0 1 3086 | 006205.jpg 0 0 1 1 3087 | 006207.jpg 0 0 3088 | 006211.jpg 0 3089 | 006213.jpg 0 0 0 0 3090 | 006217.jpg 0 0 0 0 0 0 0 0 3091 | 006226.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3092 | 006227.jpg 0 3093 | 006228.jpg 0 3094 | 006231.jpg 0 3095 | 006232.jpg 0 3096 | 006237.jpg 0 0 3097 | 006239.jpg 0 1 0 0 3098 | 006242.jpg 0 0 0 0 1 3099 | 006244.jpg 0 3100 | 006245.jpg 0 3101 | 006246.jpg 0 3102 | 006248.jpg 0 0 0 0 0 0 3103 | 006253.jpg 0 0 3104 | 006255.jpg 0 3105 | 006256.jpg 0 0 3106 | 006257.jpg 0 0 0 3107 | 006263.jpg 0 3108 | 006265.jpg 0 3109 | 006266.jpg 0 0 0 0 0 3110 | 006268.jpg 0 3111 | 006271.jpg 1 1 0 3112 | 006273.jpg 0 0 3113 | 006274.jpg 0 0 0 0 0 0 1 3114 | 006278.jpg 0 3115 | 006280.jpg 0 3116 | 006283.jpg 0 0 3117 | 006287.jpg 1 0 0 3118 | 006288.jpg 1 0 0 0 3119 | 006292.jpg 0 0 0 0 3120 | 006293.jpg 0 1 3121 | 006294.jpg 0 3122 | 006297.jpg 0 1 0 0 3123 | 006298.jpg 0 3124 | 006302.jpg 0 0 1 1 3125 | 006303.jpg 0 0 3126 | 006307.jpg 0 0 0 1 0 0 1 3127 | 006308.jpg 0 0 3128 | 006310.jpg 0 3129 | 006311.jpg 0 0 3130 | 006312.jpg 0 0 3131 | 006313.jpg 1 0 0 0 0 0 3132 | 006315.jpg 0 3133 | 006316.jpg 0 0 0 3134 | 006317.jpg 0 0 0 3135 | 006322.jpg 0 3136 | 006324.jpg 0 0 3137 | 006326.jpg 0 0 3138 | 006327.jpg 0 0 1 0 0 1 1 1 3139 | 006328.jpg 0 3140 | 006331.jpg 0 1 3141 | 006332.jpg 0 0 1 1 1 1 3142 | 006333.jpg 0 0 0 1 1 3143 | 006334.jpg 0 0 0 0 1 0 0 3144 | 006336.jpg 0 3145 | 006340.jpg 0 0 0 0 3146 | 006342.jpg 0 3147 | 006343.jpg 0 3148 | 006345.jpg 0 3149 | 006347.jpg 0 0 0 3150 | 006354.jpg 0 0 1 3151 | 006356.jpg 0 3152 | 006358.jpg 0 0 0 0 1 1 0 0 0 1 1 0 1 3153 | 006359.jpg 0 0 0 0 1 3154 | 006360.jpg 0 0 0 3155 | 006361.jpg 1 0 0 0 3156 | 006364.jpg 0 0 0 3157 | 006365.jpg 0 0 3158 | 006368.jpg 0 0 3159 | 006370.jpg 0 1 1 1 1 1 1 1 1 1 1 3160 | 006372.jpg 0 3161 | 006373.jpg 0 0 3162 | 006376.jpg 0 0 0 3163 | 006378.jpg 0 0 0 0 1 3164 | 006379.jpg 0 0 0 3165 | 006380.jpg 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3166 | 006383.jpg 0 3167 | 006384.jpg 0 0 3168 | 006386.jpg 0 0 0 1 0 1 1 3169 | 006388.jpg 0 3170 | 006389.jpg 0 3171 | 006390.jpg 0 0 0 0 3172 | 006393.jpg 0 0 0 0 1 3173 | 006394.jpg 0 3174 | 006397.jpg 0 0 3175 | 006399.jpg 0 0 3176 | 006401.jpg 0 0 0 1 1 0 0 0 1 1 3177 | 006402.jpg 0 0 3178 | 006403.jpg 0 0 3179 | 006405.jpg 0 1 0 3180 | 006406.jpg 0 0 0 0 0 3181 | 006407.jpg 0 0 0 3182 | 006408.jpg 0 3183 | 006410.jpg 0 0 3184 | 006412.jpg 0 3185 | 006413.jpg 0 0 3186 | 006414.jpg 0 0 3187 | 006415.jpg 0 3188 | 006416.jpg 0 3189 | 006420.jpg 0 3190 | 006422.jpg 0 0 3191 | 006423.jpg 0 1 0 3192 | 006426.jpg 0 0 0 1 3193 | 006431.jpg 0 0 3194 | 006432.jpg 0 0 0 0 0 0 0 3195 | 006435.jpg 0 0 3196 | 006439.jpg 0 3197 | 006441.jpg 0 3198 | 006446.jpg 0 0 0 3199 | 006451.jpg 0 0 3200 | 006452.jpg 0 1 0 0 3201 | 006453.jpg 0 0 0 0 0 3202 | 006454.jpg 0 3203 | 006457.jpg 0 0 3204 | 006460.jpg 0 0 3205 | 006461.jpg 1 0 0 1 1 0 0 1 3206 | 006464.jpg 0 0 3207 | 006467.jpg 0 3208 | 006469.jpg 0 0 0 0 0 0 0 0 3209 | 006471.jpg 0 1 0 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 3210 | 006477.jpg 0 0 1 0 0 3211 | 006478.jpg 0 0 0 1 0 3212 | 006479.jpg 0 3213 | 006481.jpg 0 0 0 0 0 3214 | 006485.jpg 0 3215 | 006487.jpg 0 0 0 3216 | 006489.jpg 0 0 3217 | 006490.jpg 0 0 0 0 1 3218 | 006491.jpg 0 0 3219 | 006493.jpg 0 0 1 1 3220 | 006494.jpg 0 3221 | 006496.jpg 0 1 0 0 3222 | 006498.jpg 0 3223 | 006500.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 3224 | 006502.jpg 0 3225 | 006504.jpg 0 1 3226 | 006505.jpg 0 0 0 0 3227 | 006508.jpg 0 1 1 1 0 0 3228 | 006510.jpg 0 3229 | 006511.jpg 0 3230 | 006513.jpg 0 3231 | 006514.jpg 0 0 3232 | 006516.jpg 0 0 3233 | 006517.jpg 0 1 1 0 0 0 0 0 3234 | 006518.jpg 0 0 3235 | 006521.jpg 0 0 3236 | 006522.jpg 0 3237 | 006525.jpg 0 3238 | 006526.jpg 0 3239 | 006527.jpg 0 0 1 1 1 1 0 0 0 3240 | 006528.jpg 0 3241 | 006531.jpg 0 0 1 3242 | 006533.jpg 0 3243 | 006535.jpg 0 0 3244 | 006537.jpg 0 3245 | 006539.jpg 0 0 3246 | 006540.jpg 0 0 3247 | 006541.jpg 1 1 1 0 0 1 1 1 0 0 0 0 1 0 3248 | 006544.jpg 0 0 0 0 3249 | 006545.jpg 0 1 3250 | 006546.jpg 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 3251 | 006552.jpg 0 0 0 0 0 3252 | 006554.jpg 0 3253 | 006555.jpg 0 0 3254 | 006557.jpg 0 0 3255 | 006558.jpg 0 3256 | 006559.jpg 0 3257 | 006561.jpg 0 0 3258 | 006563.jpg 1 1 0 3259 | 006566.jpg 0 0 3260 | 006567.jpg 0 0 0 0 0 0 0 1 1 3261 | 006568.jpg 0 3262 | 006571.jpg 0 0 3263 | 006573.jpg 0 3264 | 006574.jpg 0 0 0 0 1 1 0 1 3265 | 006577.jpg 0 0 1 0 3266 | 006579.jpg 0 1 3267 | 006580.jpg 0 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 3268 | 006581.jpg 0 0 0 1 1 3269 | 006582.jpg 0 3270 | 006586.jpg 0 0 3271 | 006589.jpg 0 3272 | 006590.jpg 0 3273 | 006591.jpg 0 0 0 3274 | 006592.jpg 0 0 1 3275 | 006594.jpg 0 0 0 1 0 0 0 3276 | 006596.jpg 0 0 3277 | 006598.jpg 1 0 3278 | 006600.jpg 0 1 3279 | 006601.jpg 0 3280 | 006604.jpg 1 0 1 0 3281 | 006607.jpg 0 1 3282 | 006608.jpg 0 1 0 0 0 3283 | 006613.jpg 0 0 3284 | 006614.jpg 0 3285 | 006615.jpg 0 3286 | 006616.jpg 0 3287 | 006620.jpg 0 0 3288 | 006623.jpg 0 0 3289 | 006624.jpg 1 1 1 1 0 0 0 0 3290 | 006629.jpg 0 0 0 3291 | 006630.jpg 0 0 1 3292 | 006633.jpg 0 0 0 0 3293 | 006634.jpg 0 3294 | 006639.jpg 0 3295 | 006640.jpg 0 0 3296 | 006641.jpg 0 3297 | 006642.jpg 0 3298 | 006644.jpg 0 0 0 1 1 3299 | 006646.jpg 0 1 0 0 0 0 3300 | 006649.jpg 0 3301 | 006650.jpg 0 3302 | 006651.jpg 0 3303 | 006653.jpg 0 3304 | 006655.jpg 0 3305 | 006656.jpg 0 0 0 3306 | 006659.jpg 0 0 0 0 3307 | 006662.jpg 1 1 1 0 0 0 0 3308 | 006663.jpg 0 0 0 0 0 0 0 0 0 1 3309 | 006665.jpg 0 1 3310 | 006669.jpg 0 0 0 3311 | 006672.jpg 0 0 3312 | 006675.jpg 0 3313 | 006676.jpg 0 0 3314 | 006680.jpg 0 3315 | 006683.jpg 0 3316 | 006685.jpg 0 3317 | 006686.jpg 0 0 0 0 0 3318 | 006688.jpg 0 0 3319 | 006691.jpg 0 0 3320 | 006692.jpg 0 3321 | 006693.jpg 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 0 3322 | 006700.jpg 0 3323 | 006701.jpg 0 3324 | 006705.jpg 1 0 0 3325 | 006710.jpg 0 0 0 0 0 3326 | 006711.jpg 0 3327 | 006712.jpg 0 3328 | 006713.jpg 0 0 0 0 3329 | 006715.jpg 0 3330 | 006716.jpg 0 0 0 3331 | 006717.jpg 0 0 3332 | 006720.jpg 0 3333 | 006721.jpg 1 0 1 1 1 0 3334 | 006723.jpg 0 3335 | 006724.jpg 0 0 3336 | 006728.jpg 0 3337 | 006729.jpg 0 3338 | 006732.jpg 0 0 0 3339 | 006733.jpg 0 0 1 3340 | 006737.jpg 0 0 3341 | 006741.jpg 0 3342 | 006742.jpg 0 0 3343 | 006743.jpg 0 0 0 3344 | 006744.jpg 0 0 3345 | 006745.jpg 1 0 1 0 1 0 3346 | 006746.jpg 0 0 0 0 3347 | 006749.jpg 0 3348 | 006750.jpg 0 0 3349 | 006752.jpg 0 3350 | 006754.jpg 0 3351 | 006756.jpg 0 1 1 3352 | 006757.jpg 0 0 0 0 0 0 3353 | 006758.jpg 0 0 0 3354 | 006763.jpg 0 3355 | 006764.jpg 0 0 3356 | 006767.jpg 0 0 3357 | 006770.jpg 0 1 1 1 1 1 3358 | 006771.jpg 0 0 0 0 0 0 0 0 3359 | 006774.jpg 0 0 0 3360 | 006775.jpg 0 0 3361 | 006776.jpg 0 0 3362 | 006778.jpg 0 0 3363 | 006779.jpg 0 0 3364 | 006780.jpg 0 0 3365 | 006785.jpg 0 3366 | 006787.jpg 0 0 0 0 0 3367 | 006788.jpg 0 3368 | 006790.jpg 0 3369 | 006791.jpg 0 3370 | 006792.jpg 0 0 0 1 3371 | 006793.jpg 0 0 1 3372 | 006795.jpg 0 1 0 3373 | 006796.jpg 0 0 0 0 0 0 0 1 0 0 0 1 1 3374 | 006798.jpg 0 0 3375 | 006801.jpg 0 3376 | 006804.jpg 0 0 0 0 3377 | 006807.jpg 0 3378 | 006809.jpg 0 3379 | 006811.jpg 0 0 3380 | 006812.jpg 0 0 3381 | 006815.jpg 0 0 1 1 3382 | 006816.jpg 0 0 3383 | 006817.jpg 0 0 0 1 1 1 3384 | 006818.jpg 0 3385 | 006820.jpg 0 3386 | 006823.jpg 0 0 3387 | 006826.jpg 0 1 0 0 0 0 0 3388 | 006830.jpg 0 0 0 0 1 0 3389 | 006831.jpg 0 3390 | 006832.jpg 0 3391 | 006834.jpg 0 3392 | 006837.jpg 1 1 0 3393 | 006843.jpg 0 0 0 3394 | 006846.jpg 0 3395 | 006851.jpg 0 0 3396 | 006853.jpg 0 3397 | 006854.jpg 0 0 0 3398 | 006856.jpg 0 3399 | 006857.jpg 0 0 0 3400 | 006861.jpg 0 0 0 0 3401 | 006863.jpg 1 0 0 0 0 0 0 3402 | 006870.jpg 0 3403 | 006871.jpg 0 3404 | 006872.jpg 0 3405 | 006873.jpg 0 0 3406 | 006875.jpg 0 0 3407 | 006877.jpg 0 3408 | 006879.jpg 0 0 0 0 3409 | 006881.jpg 0 3410 | 006882.jpg 0 0 1 1 1 1 3411 | 006885.jpg 0 0 1 1 0 0 0 1 3412 | 006888.jpg 0 0 3413 | 006889.jpg 0 3414 | 006890.jpg 0 3415 | 006891.jpg 0 0 3416 | 006894.jpg 0 0 3417 | 006895.jpg 0 0 3418 | 006897.jpg 0 0 3419 | 006898.jpg 0 0 3420 | 006901.jpg 0 0 3421 | 006902.jpg 0 0 1 3422 | 006904.jpg 0 3423 | 006905.jpg 0 3424 | 006906.jpg 0 0 0 0 0 0 0 0 0 3425 | 006907.jpg 0 3426 | 006913.jpg 0 3427 | 006915.jpg 0 0 1 1 1 1 0 3428 | 006920.jpg 0 0 1 1 0 0 0 3429 | 006921.jpg 0 0 0 1 0 1 0 1 3430 | 006923.jpg 0 0 0 3431 | 006925.jpg 0 0 0 1 1 3432 | 006926.jpg 0 0 3433 | 006927.jpg 0 0 3434 | 006928.jpg 0 3435 | 006929.jpg 0 3436 | 006936.jpg 0 0 3437 | 006937.jpg 0 0 3438 | 006938.jpg 0 0 0 0 3439 | 006941.jpg 0 0 0 0 0 0 0 0 0 3440 | 006942.jpg 0 3441 | 006946.jpg 0 3442 | 006951.jpg 0 0 3443 | 006954.jpg 0 0 0 0 0 3444 | 006955.jpg 0 0 0 3445 | 006957.jpg 0 0 0 0 3446 | 006960.jpg 0 0 3447 | 006961.jpg 0 3448 | 006964.jpg 0 0 0 0 0 0 0 1 3449 | 006967.jpg 0 3450 | 006969.jpg 0 3451 | 006970.jpg 0 3452 | 006973.jpg 0 0 3453 | 006974.jpg 0 3454 | 006975.jpg 0 0 3455 | 006977.jpg 0 3456 | 006978.jpg 0 3457 | 006979.jpg 0 3458 | 006980.jpg 0 3459 | 006982.jpg 0 0 0 1 3460 | 006984.jpg 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 3461 | 006985.jpg 0 3462 | 006986.jpg 0 0 1 0 0 3463 | 006991.jpg 0 3464 | 006992.jpg 0 0 0 0 3465 | 006993.jpg 0 3466 | 006996.jpg 0 3467 | 006997.jpg 0 3468 | 006998.jpg 0 3469 | 006999.jpg 0 3470 | 007000.jpg 0 0 3471 | 007001.jpg 0 3472 | 007005.jpg 0 0 1 3473 | 007010.jpg 0 3474 | 007012.jpg 0 1 3475 | 007013.jpg 0 1 3476 | 007014.jpg 0 3477 | 007015.jpg 0 3478 | 007017.jpg 0 0 0 0 3479 | 007019.jpg 1 0 0 0 3480 | 007024.jpg 0 3481 | 007026.jpg 0 0 0 3482 | 007027.jpg 0 3483 | 007028.jpg 1 1 0 0 0 0 3484 | 007030.jpg 0 3485 | 007032.jpg 0 0 0 3486 | 007034.jpg 0 0 3487 | 007037.jpg 0 3488 | 007041.jpg 0 3489 | 007043.jpg 0 0 0 3490 | 007044.jpg 0 0 0 3491 | 007047.jpg 0 3492 | 007051.jpg 0 1 3493 | 007053.jpg 1 0 0 0 0 0 0 0 3494 | 007055.jpg 0 3495 | 007057.jpg 0 1 0 0 0 0 0 3496 | 007060.jpg 0 0 0 0 0 1 3497 | 007061.jpg 0 1 3498 | 007063.jpg 0 3499 | 007066.jpg 0 3500 | 007067.jpg 0 0 1 0 1 3501 | 007069.jpg 0 0 0 1 1 1 3502 | 007076.jpg 0 3503 | 007081.jpg 0 0 0 3504 | 007082.jpg 0 0 1 1 1 1 1 1 3505 | 007083.jpg 0 3506 | 007085.jpg 0 0 3507 | 007087.jpg 0 3508 | 007091.jpg 0 3509 | 007094.jpg 0 3510 | 007096.jpg 0 3511 | 007098.jpg 0 0 3512 | 007099.jpg 0 3513 | 007102.jpg 0 3514 | 007103.jpg 0 3515 | 007106.jpg 0 1 1 1 0 3516 | 007107.jpg 0 3517 | 007110.jpg 0 1 1 1 0 0 0 0 3518 | 007111.jpg 0 3519 | 007112.jpg 0 0 0 0 0 0 0 0 3520 | 007115.jpg 0 3521 | 007116.jpg 0 3522 | 007118.jpg 0 0 1 1 3523 | 007119.jpg 0 3524 | 007120.jpg 0 0 1 1 1 1 1 0 3525 | 007124.jpg 0 0 3526 | 007126.jpg 0 0 0 0 3527 | 007127.jpg 0 0 3528 | 007131.jpg 0 3529 | 007134.jpg 0 0 1 1 0 0 3530 | 007135.jpg 0 3531 | 007136.jpg 0 0 0 3532 | 007137.jpg 0 0 0 0 0 0 0 0 0 3533 | 007142.jpg 0 0 3534 | 007143.jpg 0 3535 | 007145.jpg 0 3536 | 007151.jpg 0 3537 | 007155.jpg 0 3538 | 007156.jpg 0 0 0 3539 | 007157.jpg 0 1 0 0 3540 | 007158.jpg 0 3541 | 007160.jpg 0 3542 | 007161.jpg 0 3543 | 007164.jpg 0 1 1 0 0 3544 | 007169.jpg 0 1 1 3545 | 007170.jpg 1 0 0 0 3546 | 007171.jpg 0 0 3547 | 007173.jpg 0 1 0 3548 | 007175.jpg 0 3549 | 007176.jpg 0 0 3550 | 007178.jpg 0 0 1 3551 | 007179.jpg 0 0 0 0 3552 | 007181.jpg 0 0 3553 | 007183.jpg 0 3554 | 007186.jpg 0 0 0 0 0 0 3555 | 007188.jpg 0 3556 | 007190.jpg 0 3557 | 007192.jpg 0 3558 | 007195.jpg 0 0 3559 | 007196.jpg 0 0 0 3560 | 007198.jpg 0 1 1 0 3561 | 007199.jpg 0 3562 | 007201.jpg 0 3563 | 007202.jpg 0 1 0 0 1 1 1 1 0 3564 | 007203.jpg 0 0 0 1 3565 | 007206.jpg 0 0 3566 | 007207.jpg 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 3567 | 007209.jpg 0 3568 | 007218.jpg 0 3569 | 007220.jpg 0 0 1 0 3570 | 007221.jpg 0 3571 | 007225.jpg 0 0 0 0 3572 | 007226.jpg 0 3573 | 007228.jpg 0 1 0 0 0 0 3574 | 007229.jpg 0 3575 | 007231.jpg 0 3576 | 007232.jpg 0 0 3577 | 007233.jpg 0 3578 | 007235.jpg 0 0 3579 | 007237.jpg 0 0 0 0 0 0 1 0 1 1 0 1 3580 | 007238.jpg 0 3581 | 007239.jpg 0 3582 | 007240.jpg 1 1 1 1 0 3583 | 007242.jpg 0 1 0 3584 | 007246.jpg 0 0 3585 | 007248.jpg 0 3586 | 007251.jpg 0 3587 | 007252.jpg 0 0 3588 | 007253.jpg 0 1 3589 | 007254.jpg 0 3590 | 007255.jpg 0 0 0 0 3591 | 007257.jpg 0 3592 | 007262.jpg 0 3593 | 007264.jpg 0 0 3594 | 007265.jpg 0 3595 | 007267.jpg 0 1 0 0 3596 | 007268.jpg 0 0 3597 | 007269.jpg 0 0 0 3598 | 007272.jpg 0 3599 | 007273.jpg 0 3600 | 007277.jpg 0 3601 | 007278.jpg 0 3602 | 007281.jpg 0 1 0 0 3603 | 007282.jpg 0 0 0 3604 | 007286.jpg 0 3605 | 007287.jpg 0 3606 | 007288.jpg 0 3607 | 007290.jpg 0 0 1 3608 | 007291.jpg 0 3609 | 007293.jpg 0 0 0 0 3610 | 007301.jpg 0 0 0 0 1 3611 | 007303.jpg 0 0 3612 | 007304.jpg 0 3613 | 007306.jpg 0 0 0 0 0 3614 | 007307.jpg 0 0 3615 | 007309.jpg 0 3616 | 007310.jpg 0 0 3617 | 007312.jpg 1 0 3618 | 007313.jpg 0 3619 | 007315.jpg 0 1 3620 | 007316.jpg 0 3621 | 007317.jpg 0 0 3622 | 007319.jpg 0 0 1 0 3623 | 007320.jpg 0 0 3624 | 007321.jpg 0 0 0 3625 | 007324.jpg 0 0 0 0 3626 | 007326.jpg 0 3627 | 007328.jpg 0 0 3628 | 007331.jpg 0 3629 | 007332.jpg 0 1 0 0 0 0 0 0 3630 | 007333.jpg 0 0 3631 | 007335.jpg 0 0 0 1 1 0 0 1 3632 | 007337.jpg 0 0 1 3633 | 007338.jpg 0 0 0 1 3634 | 007339.jpg 0 0 0 0 3635 | 007340.jpg 0 3636 | 007341.jpg 0 0 0 3637 | 007342.jpg 1 0 3638 | 007345.jpg 0 0 3639 | 007347.jpg 1 0 1 1 3640 | 007348.jpg 0 0 3641 | 007349.jpg 0 0 1 1 0 3642 | 007352.jpg 0 0 0 3643 | 007353.jpg 0 3644 | 007354.jpg 0 1 1 3645 | 007355.jpg 0 0 0 3646 | 007357.jpg 0 0 1 3647 | 007358.jpg 0 0 0 3648 | 007360.jpg 0 1 3649 | 007362.jpg 0 1 0 1 3650 | 007364.jpg 0 1 0 3651 | 007366.jpg 0 1 1 3652 | 007367.jpg 0 1 1 3653 | 007368.jpg 0 0 0 0 1 0 0 3654 | 007371.jpg 0 0 3655 | 007377.jpg 0 3656 | 007378.jpg 0 3657 | 007379.jpg 0 3658 | 007380.jpg 0 3659 | 007382.jpg 0 0 1 1 0 3660 | 007384.jpg 0 0 3661 | 007386.jpg 0 3662 | 007387.jpg 0 3663 | 007391.jpg 0 1 1 1 3664 | 007392.jpg 0 0 3665 | 007393.jpg 0 1 0 1 1 3666 | 007395.jpg 0 0 0 3667 | 007397.jpg 1 0 1 0 1 3668 | 007399.jpg 0 3669 | 007400.jpg 0 1 3670 | 007401.jpg 0 0 0 3671 | 007402.jpg 0 3672 | 007403.jpg 0 3673 | 007404.jpg 0 0 1 3674 | 007405.jpg 1 0 0 1 1 0 3675 | 007406.jpg 1 0 0 1 0 0 0 0 0 0 1 0 3676 | 007407.jpg 0 3677 | 007409.jpg 0 0 3678 | 007412.jpg 0 0 3679 | 007415.jpg 0 0 0 1 1 3680 | 007418.jpg 0 3681 | 007420.jpg 0 3682 | 007423.jpg 0 0 0 0 3683 | 007426.jpg 0 1 3684 | 007428.jpg 0 0 0 0 0 0 3685 | 007429.jpg 0 3686 | 007430.jpg 0 3687 | 007434.jpg 0 3688 | 007440.jpg 0 0 3689 | 007441.jpg 0 3690 | 007442.jpg 0 1 1 1 1 1 1 1 1 3691 | 007444.jpg 0 0 3692 | 007447.jpg 0 0 0 0 0 0 0 0 3693 | 007450.jpg 0 3694 | 007452.jpg 1 0 1 0 0 0 3695 | 007453.jpg 1 0 0 3696 | 007455.jpg 0 3697 | 007456.jpg 0 0 0 0 0 0 3698 | 007459.jpg 0 3699 | 007462.jpg 0 0 0 3700 | 007463.jpg 0 3701 | 007464.jpg 0 0 3702 | 007469.jpg 0 3703 | 007471.jpg 0 1 1 1 0 0 1 1 0 3704 | 007472.jpg 0 1 3705 | 007473.jpg 0 3706 | 007476.jpg 0 0 3707 | 007478.jpg 0 0 3708 | 007485.jpg 0 0 3709 | 007487.jpg 0 3710 | 007488.jpg 0 3711 | 007492.jpg 0 0 3712 | 007494.jpg 0 1 0 0 0 0 0 3713 | 007495.jpg 0 3714 | 007496.jpg 0 0 1 1 3715 | 007499.jpg 0 0 3716 | 007500.jpg 0 0 3717 | 007501.jpg 0 0 3718 | 007502.jpg 0 3719 | 007504.jpg 0 3720 | 007505.jpg 0 3721 | 007507.jpg 0 0 0 3722 | 007508.jpg 0 0 1 3723 | 007509.jpg 0 0 3724 | 007510.jpg 0 0 0 3725 | 007512.jpg 0 0 3726 | 007514.jpg 0 3727 | 007515.jpg 0 0 3728 | 007516.jpg 0 0 0 3729 | 007518.jpg 0 0 0 0 0 0 0 3730 | 007520.jpg 0 0 1 1 3731 | 007522.jpg 0 0 1 3732 | 007529.jpg 0 3733 | 007531.jpg 0 0 0 3734 | 007532.jpg 0 0 1 1 0 0 1 0 0 3735 | 007534.jpg 0 0 3736 | 007539.jpg 0 3737 | 007541.jpg 0 3738 | 007542.jpg 0 3739 | 007545.jpg 0 3740 | 007548.jpg 0 1 3741 | 007549.jpg 0 0 0 3742 | 007550.jpg 0 3743 | 007552.jpg 1 0 3744 | 007553.jpg 0 0 0 0 0 1 0 3745 | 007554.jpg 0 0 0 0 1 1 1 1 1 3746 | 007556.jpg 0 3747 | 007557.jpg 0 3748 | 007560.jpg 0 3749 | 007561.jpg 0 0 3750 | 007562.jpg 0 0 3751 | 007564.jpg 0 0 3752 | 007567.jpg 0 0 0 0 1 1 0 0 0 0 3753 | 007569.jpg 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3754 | 007573.jpg 0 0 1 0 0 0 1 3755 | 007574.jpg 0 3756 | 007577.jpg 0 0 0 0 1 0 3757 | 007580.jpg 0 0 1 1 3758 | 007581.jpg 0 0 3759 | 007582.jpg 0 3760 | 007583.jpg 0 0 0 3761 | 007584.jpg 0 3762 | 007587.jpg 0 0 3763 | 007588.jpg 0 3764 | 007589.jpg 0 0 0 1 3765 | 007591.jpg 0 1 3766 | 007593.jpg 0 0 1 1 1 1 1 3767 | 007595.jpg 0 3768 | 007596.jpg 0 0 0 0 0 3769 | 007597.jpg 0 0 3770 | 007598.jpg 1 0 1 0 0 0 0 3771 | 007599.jpg 0 0 3772 | 007602.jpg 0 0 0 0 3773 | 007604.jpg 0 3774 | 007607.jpg 0 3775 | 007608.jpg 0 3776 | 007609.jpg 0 0 3777 | 007610.jpg 0 1 3778 | 007613.jpg 0 0 3779 | 007616.jpg 0 0 3780 | 007617.jpg 0 0 3781 | 007620.jpg 0 1 1 0 3782 | 007623.jpg 0 0 3783 | 007625.jpg 0 0 0 0 3784 | 007627.jpg 0 0 3785 | 007628.jpg 1 0 1 3786 | 007630.jpg 0 3787 | 007632.jpg 0 3788 | 007634.jpg 0 0 0 0 0 0 0 1 1 0 0 1 1 1 3789 | 007635.jpg 0 3790 | 007636.jpg 0 0 3791 | 007638.jpg 0 3792 | 007641.jpg 0 0 0 0 0 3793 | 007643.jpg 0 0 3794 | 007644.jpg 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 3795 | 007645.jpg 0 1 0 0 0 1 3796 | 007646.jpg 0 0 3797 | 007648.jpg 0 0 0 0 0 3798 | 007651.jpg 0 1 3799 | 007652.jpg 1 1 0 3800 | 007658.jpg 0 0 0 0 3801 | 007659.jpg 0 3802 | 007660.jpg 0 1 1 1 1 1 1 1 3803 | 007661.jpg 0 3804 | 007665.jpg 0 0 0 3805 | 007669.jpg 0 3806 | 007674.jpg 0 1 3807 | 007676.jpg 0 1 1 1 1 1 1 1 1 0 3808 | 007681.jpg 0 3809 | 007684.jpg 0 0 1 1 1 3810 | 007686.jpg 0 3811 | 007689.jpg 0 0 3812 | 007690.jpg 0 0 0 1 1 3813 | 007693.jpg 0 3814 | 007695.jpg 0 0 3815 | 007698.jpg 0 3816 | 007700.jpg 0 1 0 0 1 3817 | 007701.jpg 0 0 0 0 1 3818 | 007703.jpg 0 3819 | 007706.jpg 0 0 3820 | 007707.jpg 0 1 0 0 3821 | 007708.jpg 0 1 1 3822 | 007710.jpg 0 0 3823 | 007711.jpg 0 3824 | 007714.jpg 0 0 0 3825 | 007716.jpg 0 3826 | 007717.jpg 0 3827 | 007719.jpg 0 0 0 3828 | 007722.jpg 1 1 1 0 0 1 1 1 1 0 1 3829 | 007725.jpg 0 0 3830 | 007726.jpg 0 0 1 1 3831 | 007728.jpg 0 0 3832 | 007730.jpg 0 3833 | 007733.jpg 0 0 3834 | 007734.jpg 0 0 3835 | 007737.jpg 0 3836 | 007738.jpg 0 3837 | 007739.jpg 0 0 0 1 0 3838 | 007741.jpg 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 3839 | 007744.jpg 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3840 | 007747.jpg 0 0 0 1 3841 | 007750.jpg 0 0 3842 | 007752.jpg 0 0 1 3843 | 007755.jpg 0 3844 | 007756.jpg 0 1 0 3845 | 007757.jpg 0 0 0 1 3846 | 007759.jpg 0 0 0 1 1 1 3847 | 007761.jpg 0 0 1 3848 | 007764.jpg 0 3849 | 007766.jpg 0 0 3850 | 007769.jpg 0 0 3851 | 007770.jpg 0 0 0 3852 | 007771.jpg 0 3853 | 007774.jpg 0 3854 | 007778.jpg 0 0 3855 | 007780.jpg 0 0 0 3856 | 007782.jpg 0 3857 | 007783.jpg 0 1 0 0 1 3858 | 007784.jpg 0 3859 | 007785.jpg 0 0 0 0 0 3860 | 007787.jpg 0 3861 | 007788.jpg 0 3862 | 007789.jpg 1 0 1 1 1 1 1 1 1 1 1 3863 | 007792.jpg 0 0 1 3864 | 007794.jpg 0 3865 | 007796.jpg 0 3866 | 007797.jpg 0 0 3867 | 007800.jpg 0 3868 | 007801.jpg 0 0 0 0 3869 | 007802.jpg 0 3870 | 007804.jpg 0 3871 | 007805.jpg 0 3872 | 007806.jpg 0 1 1 1 3873 | 007807.jpg 0 0 3874 | 007808.jpg 0 0 0 3875 | 007811.jpg 0 0 0 3876 | 007816.jpg 1 0 1 0 1 0 3877 | 007817.jpg 0 0 1 3878 | 007818.jpg 1 0 0 0 0 0 1 1 1 1 3879 | 007822.jpg 0 0 0 3880 | 007823.jpg 0 3881 | 007825.jpg 0 3882 | 007827.jpg 0 3883 | 007828.jpg 0 0 3884 | 007829.jpg 0 3885 | 007830.jpg 0 3886 | 007832.jpg 0 0 0 3887 | 007835.jpg 0 0 0 0 1 1 1 3888 | 007837.jpg 0 0 3889 | 007839.jpg 0 0 1 1 0 3890 | 007842.jpg 0 3891 | 007844.jpg 0 3892 | 007846.jpg 0 0 3893 | 007848.jpg 0 3894 | 007849.jpg 1 0 1 0 0 0 0 0 3895 | 007850.jpg 0 3896 | 007851.jpg 0 3897 | 007852.jpg 0 3898 | 007858.jpg 0 0 0 1 1 0 3899 | 007860.jpg 0 0 3900 | 007861.jpg 0 0 0 1 1 1 3901 | 007862.jpg 0 0 0 0 0 0 0 0 1 1 0 3902 | 007866.jpg 0 3903 | 007867.jpg 0 3904 | 007870.jpg 0 3905 | 007871.jpg 0 0 0 3906 | 007874.jpg 0 0 3907 | 007875.jpg 0 3908 | 007879.jpg 0 3909 | 007880.jpg 0 3910 | 007881.jpg 0 3911 | 007882.jpg 0 0 1 0 1 1 3912 | 007887.jpg 0 3913 | 007888.jpg 0 0 3914 | 007891.jpg 0 3915 | 007892.jpg 0 3916 | 007893.jpg 0 3917 | 007894.jpg 0 0 0 0 0 0 3918 | 007895.jpg 0 1 3919 | 007896.jpg 0 0 0 1 0 0 0 0 0 0 0 0 0 3920 | 007903.jpg 0 0 0 3921 | 007904.jpg 0 0 0 0 0 1 0 3922 | 007906.jpg 0 0 0 0 0 1 0 0 0 1 3923 | 007907.jpg 0 3924 | 007912.jpg 0 0 1 3925 | 007913.jpg 0 0 0 3926 | 007917.jpg 0 0 0 3927 | 007918.jpg 0 0 3928 | 007922.jpg 0 3929 | 007927.jpg 0 0 0 3930 | 007929.jpg 0 0 0 0 0 1 3931 | 007930.jpg 0 3932 | 007934.jpg 0 3933 | 007936.jpg 0 3934 | 007937.jpg 1 1 1 0 3935 | 007938.jpg 0 0 3936 | 007941.jpg 0 3937 | 007942.jpg 0 0 0 0 3938 | 007944.jpg 0 1 1 3939 | 007945.jpg 0 1 3940 | 007948.jpg 0 1 3941 | 007949.jpg 1 0 0 0 0 3942 | 007951.jpg 0 0 3943 | 007952.jpg 0 3944 | 007955.jpg 0 3945 | 007957.jpg 0 0 0 3946 | 007960.jpg 0 3947 | 007961.jpg 0 0 0 0 0 1 0 3948 | 007962.jpg 0 0 1 3949 | 007965.jpg 0 0 0 3950 | 007966.jpg 0 0 3951 | 007967.jpg 0 0 0 3952 | 007969.jpg 0 0 0 0 0 0 0 1 0 1 3953 | 007972.jpg 0 0 0 0 3954 | 007973.jpg 0 3955 | 007975.jpg 0 0 3956 | 007977.jpg 0 3957 | 007978.jpg 0 0 3958 | 007981.jpg 0 3959 | 007982.jpg 0 0 0 1 3960 | 007983.jpg 0 0 3961 | 007985.jpg 0 0 3962 | 007986.jpg 0 3963 | 007988.jpg 0 3964 | 007989.jpg 0 1 1 1 3965 | 007990.jpg 0 3966 | 007992.jpg 0 0 0 3967 | 007993.jpg 0 0 3968 | 007994.jpg 0 0 0 0 1 0 0 3969 | 007995.jpg 0 3970 | 008000.jpg 1 0 1 1 3971 | 008003.jpg 0 0 3972 | 008006.jpg 0 3973 | 008007.jpg 0 3974 | 008010.jpg 0 0 0 0 0 0 3975 | 008011.jpg 0 3976 | 008013.jpg 0 3977 | 008014.jpg 0 1 3978 | 008015.jpg 0 3979 | 008016.jpg 0 3980 | 008018.jpg 0 0 1 3981 | 008020.jpg 0 3982 | 008021.jpg 0 3983 | 008022.jpg 0 0 0 3984 | 008025.jpg 0 3985 | 008027.jpg 0 0 3986 | 008028.jpg 0 0 3987 | 008030.jpg 0 3988 | 008034.jpg 0 0 0 0 3989 | 008035.jpg 0 0 0 0 3990 | 008038.jpg 0 0 0 0 3991 | 008039.jpg 1 0 0 1 0 0 0 0 3992 | 008041.jpg 0 1 3993 | 008045.jpg 0 1 1 0 3994 | 008046.jpg 0 0 0 0 0 1 0 0 1 3995 | 008047.jpg 0 0 0 0 0 3996 | 008050.jpg 0 0 1 0 0 3997 | 008052.jpg 0 0 3998 | 008054.jpg 0 3999 | 008055.jpg 0 0 0 0 0 0 0 0 0 4000 | 008056.jpg 0 0 4001 | 008058.jpg 0 0 0 0 4002 | 008059.jpg 0 0 1 1 4003 | 008065.jpg 0 4004 | 008066.jpg 0 4005 | 008070.jpg 0 0 0 0 4006 | 008071.jpg 0 0 4007 | 008073.jpg 0 1 0 0 0 0 4008 | 008074.jpg 0 0 0 0 4009 | 008077.jpg 0 0 0 1 4010 | 008078.jpg 0 4011 | 008080.jpg 0 1 0 4012 | 008081.jpg 0 1 0 0 0 0 0 0 0 0 4013 | 008088.jpg 0 1 0 4014 | 008089.jpg 0 0 4015 | 008090.jpg 0 0 0 1 1 0 4016 | 008092.jpg 0 4017 | 008094.jpg 0 1 1 4018 | 008097.jpg 0 4019 | 008099.jpg 0 0 1 1 4020 | 008102.jpg 0 0 4021 | 008104.jpg 0 0 0 0 0 0 0 0 1 0 4022 | 008109.jpg 0 0 4023 | 008110.jpg 0 0 0 0 0 4024 | 008111.jpg 0 0 0 1 4025 | 008113.jpg 0 0 0 1 0 4026 | 008114.jpg 0 0 4027 | 008118.jpg 0 0 4028 | 008119.jpg 0 4029 | 008120.jpg 0 0 1 0 4030 | 008123.jpg 0 4031 | 008124.jpg 0 0 4032 | 008126.jpg 0 0 0 1 4033 | 008128.jpg 0 0 4034 | 008129.jpg 0 4035 | 008131.jpg 0 0 1 4036 | 008133.jpg 0 4037 | 008134.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4038 | 008135.jpg 1 0 4039 | 008136.jpg 0 4040 | 008143.jpg 0 4041 | 008145.jpg 0 0 4042 | 008146.jpg 0 4043 | 008147.jpg 0 0 4044 | 008148.jpg 0 4045 | 008149.jpg 0 4046 | 008152.jpg 0 0 0 0 0 4047 | 008153.jpg 0 1 1 1 1 4048 | 008154.jpg 0 4049 | 008155.jpg 0 0 4050 | 008156.jpg 0 0 0 4051 | 008157.jpg 0 0 0 4052 | 008158.jpg 0 1 0 4053 | 008161.jpg 0 0 1 0 0 0 4054 | 008162.jpg 0 0 1 4055 | 008165.jpg 0 1 4056 | 008167.jpg 0 0 4057 | 008170.jpg 0 0 0 4058 | 008172.jpg 0 0 4059 | 008176.jpg 0 1 4060 | 008178.jpg 0 0 0 4061 | 008179.jpg 0 4062 | 008181.jpg 0 4063 | 008182.jpg 0 1 1 4064 | 008183.jpg 0 0 4065 | 008184.jpg 0 1 4066 | 008185.jpg 0 4067 | 008187.jpg 0 0 0 4068 | 008192.jpg 0 0 0 1 0 0 0 4069 | 008193.jpg 0 4070 | 008194.jpg 0 4071 | 008195.jpg 0 0 4072 | 008196.jpg 0 0 1 1 4073 | 008198.jpg 0 1 4074 | 008201.jpg 0 0 1 1 4075 | 008205.jpg 0 0 4076 | 008206.jpg 0 4077 | 008207.jpg 0 0 0 0 0 0 0 0 0 0 0 0 1 4078 | 008210.jpg 1 1 1 1 0 4079 | 008212.jpg 0 1 0 1 1 1 1 4080 | 008214.jpg 0 4081 | 008215.jpg 0 1 0 0 1 4082 | 008217.jpg 0 0 1 4083 | 008219.jpg 1 0 1 4084 | 008221.jpg 0 4085 | 008227.jpg 0 4086 | 008228.jpg 0 4087 | 008230.jpg 0 0 1 0 1 4088 | 008231.jpg 0 0 0 1 1 1 1 4089 | 008233.jpg 0 0 1 4090 | 008234.jpg 0 0 0 4091 | 008237.jpg 0 0 0 4092 | 008238.jpg 0 0 1 4093 | 008239.jpg 1 0 0 4094 | 008240.jpg 0 0 4095 | 008242.jpg 0 4096 | 008243.jpg 0 4097 | 008245.jpg 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 4098 | 008246.jpg 0 0 0 0 4099 | 008247.jpg 0 4100 | 008249.jpg 0 0 0 4101 | 008255.jpg 1 0 0 4102 | 008256.jpg 0 0 4103 | 008257.jpg 0 1 1 0 4104 | 008259.jpg 0 0 0 0 0 0 4105 | 008264.jpg 0 0 1 1 4106 | 008265.jpg 0 0 4107 | 008266.jpg 0 4108 | 008267.jpg 0 0 4109 | 008270.jpg 0 4110 | 008271.jpg 0 0 0 0 0 0 0 0 0 0 4111 | 008273.jpg 0 4112 | 008274.jpg 0 4113 | 008276.jpg 0 0 4114 | 008277.jpg 0 0 0 4115 | 008278.jpg 0 0 0 4116 | 008283.jpg 0 4117 | 008286.jpg 0 4118 | 008287.jpg 0 0 0 1 1 4119 | 008288.jpg 0 0 4120 | 008289.jpg 0 4121 | 008290.jpg 0 0 0 4122 | 008291.jpg 0 4123 | 008298.jpg 0 1 0 0 4124 | 008303.jpg 0 0 4125 | 008304.jpg 0 0 4126 | 008305.jpg 0 4127 | 008308.jpg 0 4128 | 008309.jpg 1 0 0 4129 | 008314.jpg 0 0 4130 | 008321.jpg 0 4131 | 008324.jpg 0 0 0 4132 | 008325.jpg 1 0 0 0 4133 | 008328.jpg 0 4134 | 008330.jpg 0 4135 | 008331.jpg 0 0 4136 | 008333.jpg 0 4137 | 008334.jpg 0 4138 | 008337.jpg 0 4139 | 008339.jpg 0 4140 | 008340.jpg 0 4141 | 008343.jpg 0 4142 | 008344.jpg 0 0 0 0 0 4143 | 008347.jpg 0 0 1 0 4144 | 008348.jpg 0 4145 | 008350.jpg 0 0 4146 | 008352.jpg 0 4147 | 008353.jpg 0 4148 | 008354.jpg 0 0 4149 | 008356.jpg 0 4150 | 008357.jpg 0 0 0 0 4151 | 008358.jpg 0 4152 | 008361.jpg 0 4153 | 008362.jpg 0 1 0 1 4154 | 008363.jpg 0 0 1 1 1 1 0 4155 | 008366.jpg 0 4156 | 008367.jpg 0 0 0 0 0 0 0 4157 | 008369.jpg 0 0 4158 | 008371.jpg 0 4159 | 008373.jpg 0 0 0 0 4160 | 008375.jpg 0 4161 | 008377.jpg 0 0 4162 | 008378.jpg 0 4163 | 008379.jpg 0 4164 | 008380.jpg 0 1 4165 | 008382.jpg 1 0 1 1 1 1 0 1 1 4166 | 008383.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4167 | 008389.jpg 0 1 0 0 1 1 1 0 0 4168 | 008392.jpg 0 0 4169 | 008393.jpg 0 0 0 0 4170 | 008394.jpg 0 4171 | 008395.jpg 0 4172 | 008396.jpg 0 0 4173 | 008399.jpg 0 0 4174 | 008400.jpg 0 0 0 1 4175 | 008401.jpg 0 4176 | 008402.jpg 0 0 0 0 0 0 0 0 4177 | 008404.jpg 0 4178 | 008405.jpg 0 0 0 0 4179 | 008406.jpg 1 1 0 4180 | 008407.jpg 0 0 0 0 0 1 1 4181 | 008408.jpg 0 4182 | 008411.jpg 0 4183 | 008412.jpg 0 1 4184 | 008414.jpg 0 1 4185 | 008417.jpg 0 4186 | 008418.jpg 0 0 0 0 1 0 1 1 0 4187 | 008419.jpg 0 4188 | 008420.jpg 0 4189 | 008421.jpg 0 4190 | 008428.jpg 0 4191 | 008431.jpg 0 0 0 4192 | 008432.jpg 0 4193 | 008435.jpg 0 4194 | 008436.jpg 0 0 4195 | 008439.jpg 1 0 4196 | 008440.jpg 0 4197 | 008441.jpg 0 0 4198 | 008446.jpg 0 0 4199 | 008447.jpg 0 0 0 4200 | 008448.jpg 0 1 4201 | 008451.jpg 0 0 1 4202 | 008455.jpg 0 0 0 4203 | 008457.jpg 0 0 0 0 0 0 4204 | 008458.jpg 0 0 0 1 4205 | 008459.jpg 0 0 1 1 0 1 4206 | 008460.jpg 0 4207 | 008463.jpg 0 0 0 4208 | 008464.jpg 0 1 1 0 0 1 1 1 1 4209 | 008469.jpg 0 0 4210 | 008471.jpg 0 0 4211 | 008473.jpg 0 4212 | 008474.jpg 0 0 4213 | 008476.jpg 0 0 4214 | 008479.jpg 0 0 1 0 4215 | 008480.jpg 1 0 0 0 0 0 0 1 0 4216 | 008481.jpg 0 0 1 1 4217 | 008486.jpg 0 1 0 0 4218 | 008487.jpg 0 4219 | 008488.jpg 0 0 0 4220 | 008489.jpg 0 4221 | 008490.jpg 0 0 1 1 0 4222 | 008491.jpg 0 0 4223 | 008493.jpg 0 0 0 0 0 0 4224 | 008496.jpg 0 0 0 0 4225 | 008497.jpg 0 4226 | 008500.jpg 0 4227 | 008501.jpg 0 0 0 1 0 1 1 4228 | 008504.jpg 0 1 0 1 1 0 0 1 0 0 0 0 0 0 1 4229 | 008505.jpg 1 0 0 0 4230 | 008507.jpg 0 1 4231 | 008508.jpg 0 4232 | 008510.jpg 0 0 4233 | 008511.jpg 0 4234 | 008515.jpg 0 4235 | 008516.jpg 0 0 4236 | 008520.jpg 0 0 0 0 0 0 1 1 4237 | 008525.jpg 0 0 4238 | 008527.jpg 0 1 1 1 0 1 4239 | 008528.jpg 0 0 0 0 0 0 0 1 1 1 1 1 4240 | 008531.jpg 0 0 1 0 1 4241 | 008532.jpg 0 4242 | 008537.jpg 0 1 0 0 1 1 4243 | 008538.jpg 0 4244 | 008539.jpg 0 4245 | 008540.jpg 0 0 1 0 4246 | 008543.jpg 0 0 1 4247 | 008544.jpg 0 1 4248 | 008545.jpg 0 0 4249 | 008546.jpg 0 4250 | 008547.jpg 0 0 0 0 4251 | 008548.jpg 0 0 0 0 0 0 1 0 4252 | 008551.jpg 0 0 0 0 4253 | 008552.jpg 0 4254 | 008554.jpg 0 0 4255 | 008555.jpg 0 4256 | 008560.jpg 0 0 1 0 1 0 4257 | 008561.jpg 0 0 4258 | 008563.jpg 0 0 4259 | 008565.jpg 0 4260 | 008566.jpg 0 0 4261 | 008567.jpg 0 4262 | 008569.jpg 1 0 0 0 0 4263 | 008570.jpg 0 4264 | 008571.jpg 0 4265 | 008574.jpg 0 0 4266 | 008575.jpg 0 4267 | 008577.jpg 0 0 4268 | 008578.jpg 0 0 4269 | 008579.jpg 0 0 0 0 0 0 0 0 0 1 4270 | 008580.jpg 0 4271 | 008583.jpg 0 0 0 1 0 4272 | 008589.jpg 0 4273 | 008590.jpg 0 1 1 1 1 1 1 1 1 1 4274 | 008591.jpg 0 1 0 0 0 0 4275 | 008593.jpg 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 4276 | 008594.jpg 0 1 4277 | 008597.jpg 0 0 4278 | 008598.jpg 0 0 0 0 4279 | 008599.jpg 0 0 0 0 4280 | 008600.jpg 0 4281 | 008603.jpg 0 0 4282 | 008605.jpg 0 1 0 0 0 0 4283 | 008609.jpg 0 4284 | 008611.jpg 0 4285 | 008613.jpg 0 4286 | 008614.jpg 0 1 1 4287 | 008616.jpg 0 0 0 0 0 4288 | 008619.jpg 0 0 0 0 4289 | 008622.jpg 0 1 4290 | 008623.jpg 0 0 4291 | 008625.jpg 0 0 0 4292 | 008626.jpg 0 0 1 0 0 4293 | 008627.jpg 0 4294 | 008629.jpg 0 4295 | 008630.jpg 0 4296 | 008631.jpg 0 4297 | 008632.jpg 0 4298 | 008634.jpg 1 0 4299 | 008637.jpg 0 4300 | 008640.jpg 0 4301 | 008641.jpg 0 0 4302 | 008642.jpg 0 0 4303 | 008643.jpg 0 0 4304 | 008646.jpg 0 0 4305 | 008648.jpg 0 0 4306 | 008649.jpg 0 4307 | 008650.jpg 0 4308 | 008651.jpg 0 4309 | 008652.jpg 0 0 0 4310 | 008656.jpg 0 4311 | 008657.jpg 0 4312 | 008658.jpg 0 4313 | 008659.jpg 0 4314 | 008660.jpg 0 4315 | 008661.jpg 0 0 0 4316 | 008662.jpg 0 4317 | 008664.jpg 0 4318 | 008666.jpg 0 0 4319 | 008668.jpg 0 0 4320 | 008669.jpg 0 0 0 0 4321 | 008671.jpg 0 0 0 1 0 4322 | 008672.jpg 0 4323 | 008673.jpg 0 0 4324 | 008674.jpg 0 4325 | 008675.jpg 0 4326 | 008677.jpg 0 4327 | 008678.jpg 0 0 1 4328 | 008679.jpg 0 1 4329 | 008681.jpg 0 0 4330 | 008682.jpg 0 0 0 4331 | 008684.jpg 0 4332 | 008685.jpg 0 4333 | 008686.jpg 0 0 0 4334 | 008689.jpg 0 0 0 0 0 0 0 0 4335 | 008693.jpg 0 4336 | 008694.jpg 0 0 0 0 4337 | 008696.jpg 0 4338 | 008697.jpg 1 0 4339 | 008700.jpg 0 0 1 4340 | 008703.jpg 0 4341 | 008704.jpg 1 0 1 4342 | 008705.jpg 0 1 4343 | 008707.jpg 0 0 0 4344 | 008708.jpg 0 0 0 4345 | 008711.jpg 0 0 1 1 4346 | 008712.jpg 0 4347 | 008714.jpg 0 4348 | 008715.jpg 0 4349 | 008719.jpg 1 0 1 4350 | 008721.jpg 0 0 0 4351 | 008724.jpg 0 4352 | 008726.jpg 0 0 4353 | 008729.jpg 0 4354 | 008734.jpg 0 0 0 0 0 0 0 4355 | 008735.jpg 0 0 4356 | 008736.jpg 0 4357 | 008737.jpg 0 4358 | 008740.jpg 0 0 1 4359 | 008743.jpg 0 4360 | 008745.jpg 0 0 0 0 4361 | 008746.jpg 0 0 0 0 4362 | 008751.jpg 1 1 1 0 1 1 0 0 0 0 0 0 0 0 1 4363 | 008754.jpg 0 0 0 1 0 0 0 0 4364 | 008758.jpg 0 0 0 0 0 0 4365 | 008761.jpg 0 1 1 4366 | 008762.jpg 1 1 0 0 4367 | 008763.jpg 0 4368 | 008765.jpg 0 0 0 0 0 0 0 0 0 4369 | 008767.jpg 0 4370 | 008774.jpg 0 0 0 4371 | 008777.jpg 0 4372 | 008778.jpg 0 0 4373 | 008779.jpg 0 4374 | 008780.jpg 0 0 0 0 1 1 1 1 4375 | 008781.jpg 0 4376 | 008782.jpg 0 4377 | 008785.jpg 0 0 0 4378 | 008786.jpg 0 0 0 0 0 0 0 0 1 4379 | 008787.jpg 0 4380 | 008788.jpg 0 0 1 0 4381 | 008789.jpg 0 4382 | 008791.jpg 0 4383 | 008792.jpg 0 0 4384 | 008795.jpg 0 1 4385 | 008797.jpg 0 0 0 0 1 0 1 1 0 0 4386 | 008798.jpg 0 0 1 4387 | 008800.jpg 0 0 4388 | 008802.jpg 0 0 4389 | 008803.jpg 0 0 0 4390 | 008804.jpg 0 0 4391 | 008807.jpg 0 0 4392 | 008808.jpg 0 0 0 4393 | 008812.jpg 0 0 4394 | 008816.jpg 0 4395 | 008818.jpg 0 0 4396 | 008820.jpg 0 0 4397 | 008821.jpg 1 0 0 1 4398 | 008824.jpg 0 0 0 0 0 0 0 0 1 4399 | 008825.jpg 0 4400 | 008827.jpg 0 0 4401 | 008828.jpg 1 0 0 0 0 0 0 0 0 4402 | 008829.jpg 0 0 0 0 0 4403 | 008830.jpg 0 4404 | 008832.jpg 0 4405 | 008834.jpg 0 4406 | 008839.jpg 0 0 0 0 1 4407 | 008842.jpg 0 4408 | 008844.jpg 0 0 4409 | 008845.jpg 0 0 4410 | 008846.jpg 0 0 4411 | 008850.jpg 0 0 0 0 4412 | 008851.jpg 0 4413 | 008852.jpg 0 1 4414 | 008853.jpg 0 4415 | 008855.jpg 0 4416 | 008857.jpg 0 0 0 4417 | 008860.jpg 0 4418 | 008861.jpg 0 4419 | 008863.jpg 0 1 0 0 0 1 0 0 0 4420 | 008864.jpg 0 0 0 0 0 0 0 0 4421 | 008866.jpg 0 4422 | 008868.jpg 0 0 0 0 4423 | 008869.jpg 0 1 0 1 0 1 1 4424 | 008870.jpg 0 4425 | 008875.jpg 0 0 4426 | 008877.jpg 0 4427 | 008881.jpg 0 4428 | 008882.jpg 0 0 4429 | 008887.jpg 0 0 0 4430 | 008889.jpg 0 4431 | 008893.jpg 0 0 1 4432 | 008894.jpg 0 0 4433 | 008895.jpg 0 0 0 0 1 0 0 4434 | 008896.jpg 0 4435 | 008897.jpg 0 0 0 4436 | 008898.jpg 0 4437 | 008899.jpg 0 0 4438 | 008901.jpg 0 0 0 0 4439 | 008902.jpg 0 0 4440 | 008903.jpg 0 1 0 4441 | 008904.jpg 0 4442 | 008906.jpg 0 1 4443 | 008907.jpg 0 0 4444 | 008908.jpg 0 4445 | 008910.jpg 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 4446 | 008912.jpg 0 0 0 0 4447 | 008915.jpg 0 0 0 4448 | 008916.jpg 0 0 0 1 4449 | 008918.jpg 1 0 0 0 4450 | 008922.jpg 0 0 0 1 0 0 4451 | 008924.jpg 0 4452 | 008925.jpg 0 0 0 0 1 0 0 0 0 0 0 0 0 4453 | 008928.jpg 0 0 0 0 0 0 0 0 4454 | 008934.jpg 0 4455 | 008935.jpg 0 4456 | 008937.jpg 0 0 0 0 4457 | 008938.jpg 0 4458 | 008941.jpg 0 1 0 0 4459 | 008945.jpg 0 0 4460 | 008946.jpg 0 1 4461 | 008947.jpg 0 0 0 0 4462 | 008949.jpg 0 4463 | 008950.jpg 0 4464 | 008952.jpg 0 0 4465 | 008954.jpg 0 0 0 0 0 0 4466 | 008956.jpg 0 4467 | 008957.jpg 0 1 0 0 0 0 4468 | 008959.jpg 0 4469 | 008963.jpg 1 1 0 0 0 4470 | 008964.jpg 0 0 1 4471 | 008972.jpg 0 4472 | 008974.jpg 0 0 4473 | 008977.jpg 0 4474 | 008981.jpg 0 4475 | 008984.jpg 0 0 4476 | 008986.jpg 0 0 4477 | 008990.jpg 0 0 4478 | 008991.jpg 0 0 0 4479 | 008992.jpg 0 4480 | 008993.jpg 0 0 4481 | 008994.jpg 0 0 4482 | 008996.jpg 0 0 1 4483 | 008998.jpg 0 1 0 0 0 0 4484 | 009001.jpg 0 4485 | 009003.jpg 0 4486 | 009008.jpg 0 0 4487 | 009009.jpg 0 4488 | 009010.jpg 0 0 1 4489 | 009011.jpg 0 4490 | 009012.jpg 0 0 0 1 4491 | 009013.jpg 0 0 0 4492 | 009014.jpg 0 0 0 0 4493 | 009017.jpg 0 0 0 4494 | 009021.jpg 0 4495 | 009023.jpg 0 0 0 1 0 0 4496 | 009025.jpg 0 4497 | 009026.jpg 0 4498 | 009028.jpg 0 0 4499 | 009030.jpg 0 4500 | 009031.jpg 0 0 1 1 4501 | 009033.jpg 1 0 0 0 0 0 0 0 0 4502 | 009038.jpg 0 4503 | 009040.jpg 0 4504 | 009041.jpg 0 0 4505 | 009043.jpg 0 4506 | 009044.jpg 0 0 0 0 0 0 4507 | 009046.jpg 0 0 1 0 4508 | 009047.jpg 0 0 0 0 0 0 0 0 4509 | 009050.jpg 0 0 4510 | 009052.jpg 0 0 4511 | 009054.jpg 0 4512 | 009055.jpg 0 1 4513 | 009056.jpg 0 0 0 0 0 0 4514 | 009057.jpg 0 4515 | 009061.jpg 0 4516 | 009062.jpg 0 4517 | 009065.jpg 0 4518 | 009067.jpg 0 0 4519 | 009069.jpg 0 0 0 4520 | 009070.jpg 0 4521 | 009071.jpg 0 4522 | 009074.jpg 0 0 4523 | 009075.jpg 0 0 0 0 0 0 0 0 1 4524 | 009076.jpg 0 4525 | 009077.jpg 0 0 0 0 0 0 0 1 1 0 0 4526 | 009081.jpg 0 4527 | 009082.jpg 0 4528 | 009083.jpg 0 4529 | 009084.jpg 0 0 0 1 1 1 1 0 0 0 4530 | 009088.jpg 0 4531 | 009090.jpg 0 1 4532 | 009092.jpg 0 0 0 0 4533 | 009093.jpg 0 4534 | 009095.jpg 0 1 1 0 4535 | 009096.jpg 0 4536 | 009097.jpg 0 4537 | 009101.jpg 0 0 0 0 0 0 4538 | 009102.jpg 0 0 0 4539 | 009103.jpg 0 0 4540 | 009104.jpg 0 4541 | 009107.jpg 0 4542 | 009109.jpg 1 1 1 0 4543 | 009110.jpg 0 4544 | 009111.jpg 0 1 0 1 4545 | 009115.jpg 0 0 4546 | 009118.jpg 0 1 4547 | 009119.jpg 0 0 0 1 1 1 4548 | 009120.jpg 0 4549 | 009122.jpg 0 0 1 0 0 4550 | 009124.jpg 0 0 4551 | 009125.jpg 0 0 0 0 0 1 4552 | 009127.jpg 0 0 0 0 0 4553 | 009130.jpg 0 0 4554 | 009132.jpg 0 4555 | 009134.jpg 0 0 4556 | 009135.jpg 0 4557 | 009137.jpg 1 1 1 1 0 1 1 4558 | 009139.jpg 0 0 0 0 1 1 0 1 0 4559 | 009140.jpg 0 4560 | 009142.jpg 0 4561 | 009143.jpg 1 0 0 4562 | 009145.jpg 0 0 0 4563 | 009146.jpg 0 4564 | 009149.jpg 0 0 0 4565 | 009152.jpg 0 0 4566 | 009154.jpg 0 1 1 1 1 1 1 1 4567 | 009156.jpg 0 0 0 0 1 0 1 1 1 1 0 1 4568 | 009158.jpg 0 4569 | 009164.jpg 0 0 0 0 0 4570 | 009165.jpg 0 0 0 0 0 1 1 0 4571 | 009167.jpg 0 4572 | 009169.jpg 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 4573 | 009170.jpg 0 0 0 1 4574 | 009171.jpg 0 0 0 0 0 0 0 0 0 1 0 4575 | 009172.jpg 1 0 0 0 0 0 0 0 0 4576 | 009176.jpg 0 4577 | 009182.jpg 0 0 1 1 4578 | 009183.jpg 0 4579 | 009188.jpg 0 4580 | 009190.jpg 0 4581 | 009198.jpg 0 4582 | 009199.jpg 0 4583 | 009201.jpg 0 0 4584 | 009203.jpg 0 4585 | 009204.jpg 0 1 4586 | 009206.jpg 0 4587 | 009207.jpg 0 4588 | 009210.jpg 0 4589 | 009211.jpg 0 4590 | 009216.jpg 0 0 4591 | 009217.jpg 0 4592 | 009219.jpg 0 0 0 1 0 0 4593 | 009220.jpg 0 4594 | 009222.jpg 0 0 4595 | 009223.jpg 0 0 0 4596 | 009225.jpg 0 1 0 1 4597 | 009226.jpg 0 4598 | 009228.jpg 0 0 4599 | 009229.jpg 0 0 0 0 4600 | 009231.jpg 0 0 0 0 0 0 4601 | 009232.jpg 0 4602 | 009233.jpg 0 4603 | 009234.jpg 0 4604 | 009235.jpg 0 4605 | 009237.jpg 1 0 0 0 0 0 0 0 4606 | 009240.jpg 0 0 0 0 4607 | 009241.jpg 0 1 1 4608 | 009243.jpg 0 4609 | 009248.jpg 0 4610 | 009253.jpg 0 0 4611 | 009256.jpg 0 4612 | 009257.jpg 0 4613 | 009258.jpg 0 0 4614 | 009260.jpg 0 4615 | 009261.jpg 1 0 1 1 4616 | 009262.jpg 0 4617 | 009263.jpg 0 0 4618 | 009264.jpg 0 4619 | 009265.jpg 0 1 1 4620 | 009266.jpg 0 4621 | 009267.jpg 0 0 0 1 4622 | 009274.jpg 0 0 0 4623 | 009275.jpg 0 4624 | 009276.jpg 0 1 4625 | 009277.jpg 0 0 4626 | 009280.jpg 0 4627 | 009284.jpg 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 4628 | 009292.jpg 0 0 1 4629 | 009293.jpg 0 4630 | 009294.jpg 0 0 4631 | 009297.jpg 1 0 0 0 0 0 0 0 0 0 0 4632 | 009298.jpg 0 4633 | 009300.jpg 0 0 4634 | 009301.jpg 0 4635 | 009302.jpg 0 0 4636 | 009304.jpg 1 1 0 0 4637 | 009305.jpg 0 4638 | 009310.jpg 0 0 1 0 4639 | 009311.jpg 0 1 0 0 1 4640 | 009313.jpg 0 1 0 4641 | 009314.jpg 0 0 0 0 0 4642 | 009317.jpg 0 0 4643 | 009319.jpg 0 1 4644 | 009320.jpg 0 0 0 0 1 0 4645 | 009321.jpg 0 4646 | 009322.jpg 0 0 0 0 0 0 0 0 1 0 4647 | 009328.jpg 1 0 0 0 0 4648 | 009329.jpg 0 4649 | 009332.jpg 0 1 0 4650 | 009335.jpg 0 4651 | 009338.jpg 0 4652 | 009340.jpg 0 4653 | 009341.jpg 0 4654 | 009344.jpg 0 0 0 4655 | 009345.jpg 0 1 0 0 0 4656 | 009346.jpg 0 0 4657 | 009352.jpg 0 0 4658 | 009353.jpg 0 4659 | 009355.jpg 0 1 1 1 1 4660 | 009356.jpg 0 0 0 0 0 0 0 0 0 4661 | 009357.jpg 0 0 4662 | 009360.jpg 0 4663 | 009361.jpg 0 0 0 0 4664 | 009363.jpg 0 0 4665 | 009364.jpg 0 0 0 0 1 4666 | 009366.jpg 0 4667 | 009367.jpg 0 0 0 4668 | 009369.jpg 0 0 4669 | 009370.jpg 0 0 4670 | 009372.jpg 0 4671 | 009376.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4672 | 009379.jpg 0 0 0 4673 | 009380.jpg 0 0 4674 | 009381.jpg 0 0 4675 | 009383.jpg 0 4676 | 009384.jpg 0 0 0 1 1 1 0 0 4677 | 009385.jpg 0 4678 | 009387.jpg 0 1 1 0 4679 | 009390.jpg 0 4680 | 009391.jpg 0 4681 | 009395.jpg 0 4682 | 009396.jpg 0 0 4683 | 009397.jpg 0 0 1 4684 | 009399.jpg 0 4685 | 009400.jpg 0 4686 | 009402.jpg 0 4687 | 009403.jpg 0 4688 | 009404.jpg 0 0 4689 | 009415.jpg 0 0 0 0 1 4690 | 009416.jpg 0 0 4691 | 009423.jpg 0 0 0 1 4692 | 009425.jpg 0 4693 | 009426.jpg 0 4694 | 009427.jpg 0 4695 | 009428.jpg 0 4696 | 009430.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4697 | 009431.jpg 0 0 4698 | 009435.jpg 0 0 4699 | 009436.jpg 0 0 1 4700 | 009441.jpg 0 0 4701 | 009442.jpg 0 4702 | 009444.jpg 0 1 0 1 1 1 1 4703 | 009447.jpg 0 4704 | 009449.jpg 0 4705 | 009450.jpg 0 0 0 0 1 0 4706 | 009451.jpg 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 4707 | 009452.jpg 1 0 0 0 0 4708 | 009453.jpg 0 4709 | 009462.jpg 0 4710 | 009467.jpg 0 0 0 4711 | 009471.jpg 0 4712 | 009473.jpg 0 0 0 4713 | 009474.jpg 0 4714 | 009475.jpg 0 0 4715 | 009478.jpg 0 0 1 4716 | 009482.jpg 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 1 0 1 4717 | 009483.jpg 0 4718 | 009485.jpg 0 4719 | 009486.jpg 0 1 1 1 1 0 1 4720 | 009487.jpg 0 0 0 4721 | 009489.jpg 0 4722 | 009492.jpg 0 4723 | 009493.jpg 0 0 4724 | 009495.jpg 0 0 0 4725 | 009498.jpg 0 1 1 1 4726 | 009501.jpg 0 4727 | 009503.jpg 0 4728 | 009505.jpg 0 0 4729 | 009506.jpg 0 4730 | 009509.jpg 0 4731 | 009510.jpg 0 4732 | 009511.jpg 0 0 0 4733 | 009513.jpg 0 1 4734 | 009514.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 4735 | 009521.jpg 1 0 1 1 1 4736 | 009522.jpg 0 4737 | 009525.jpg 0 0 4738 | 009529.jpg 1 1 0 0 0 0 0 0 4739 | 009530.jpg 0 0 0 0 1 4740 | 009534.jpg 0 0 0 0 4741 | 009535.jpg 0 0 4742 | 009536.jpg 0 0 4743 | 009538.jpg 0 1 4744 | 009539.jpg 0 0 0 1 0 0 0 0 0 4745 | 009544.jpg 0 4746 | 009547.jpg 0 0 0 1 0 4747 | 009548.jpg 0 0 1 1 1 1 1 4748 | 009552.jpg 0 4749 | 009553.jpg 0 0 0 0 0 0 0 0 0 4750 | 009554.jpg 0 0 1 4751 | 009555.jpg 0 4752 | 009556.jpg 0 0 0 4753 | 009559.jpg 0 0 0 0 4754 | 009561.jpg 0 0 0 4755 | 009563.jpg 0 0 0 0 4756 | 009564.jpg 0 0 0 0 0 1 4757 | 009569.jpg 0 0 4758 | 009570.jpg 0 0 0 4759 | 009572.jpg 0 4760 | 009574.jpg 0 0 0 0 4761 | 009575.jpg 0 4762 | 009578.jpg 0 4763 | 009581.jpg 0 1 0 0 4764 | 009582.jpg 1 0 4765 | 009583.jpg 0 0 0 4766 | 009589.jpg 0 4767 | 009590.jpg 0 0 0 1 0 4768 | 009592.jpg 0 1 4769 | 009593.jpg 0 0 4770 | 009594.jpg 0 4771 | 009595.jpg 0 1 4772 | 009599.jpg 0 0 4773 | 009601.jpg 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4774 | 009602.jpg 0 0 0 0 0 0 0 0 4775 | 009604.jpg 0 4776 | 009606.jpg 0 1 0 1 0 0 0 4777 | 009607.jpg 0 0 4778 | 009608.jpg 0 4779 | 009610.jpg 0 4780 | 009612.jpg 0 4781 | 009616.jpg 0 4782 | 009622.jpg 0 0 4783 | 009624.jpg 0 4784 | 009625.jpg 0 4785 | 009626.jpg 0 0 0 4786 | 009628.jpg 1 0 0 4787 | 009630.jpg 0 0 0 0 0 0 4788 | 009631.jpg 0 0 1 0 4789 | 009632.jpg 0 4790 | 009633.jpg 0 1 1 0 0 0 0 0 4791 | 009635.jpg 0 1 4792 | 009639.jpg 0 4793 | 009640.jpg 0 4794 | 009642.jpg 0 4795 | 009643.jpg 0 0 1 1 4796 | 009645.jpg 0 0 0 4797 | 009646.jpg 0 0 4798 | 009648.jpg 0 4799 | 009651.jpg 1 1 0 4800 | 009652.jpg 0 4801 | 009653.jpg 0 0 0 4802 | 009657.jpg 0 0 4803 | 009660.jpg 0 0 0 4804 | 009661.jpg 0 0 0 1 4805 | 009662.jpg 1 1 1 0 4806 | 009663.jpg 0 0 0 4807 | 009665.jpg 0 0 0 0 0 4808 | 009669.jpg 0 4809 | 009672.jpg 0 0 4810 | 009673.jpg 0 0 4811 | 009674.jpg 0 0 0 0 4812 | 009675.jpg 0 4813 | 009677.jpg 0 0 4814 | 009680.jpg 0 0 1 0 4815 | 009682.jpg 0 0 4816 | 009683.jpg 0 1 4817 | 009688.jpg 0 0 4818 | 009689.jpg 0 0 4819 | 009690.jpg 0 0 0 0 4820 | 009694.jpg 0 0 0 4821 | 009696.jpg 0 0 4822 | 009697.jpg 1 0 4823 | 009701.jpg 0 4824 | 009704.jpg 0 0 0 0 0 0 0 0 1 0 0 0 0 4825 | 009705.jpg 0 0 1 0 0 0 4826 | 009708.jpg 0 0 0 0 4827 | 009714.jpg 1 0 4828 | 009715.jpg 0 0 0 1 4829 | 009716.jpg 0 4830 | 009720.jpg 0 4831 | 009722.jpg 0 0 4832 | 009723.jpg 0 0 0 1 1 0 4833 | 009725.jpg 0 4834 | 009727.jpg 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4835 | 009728.jpg 0 0 4836 | 009730.jpg 0 0 4837 | 009731.jpg 0 4838 | 009736.jpg 0 4839 | 009739.jpg 0 0 1 4840 | 009740.jpg 0 4841 | 009741.jpg 0 0 0 0 0 0 4842 | 009742.jpg 1 0 1 4843 | 009744.jpg 0 0 1 1 4844 | 009750.jpg 0 0 0 0 0 4845 | 009751.jpg 0 4846 | 009752.jpg 0 4847 | 009753.jpg 0 4848 | 009757.jpg 0 4849 | 009759.jpg 0 4850 | 009760.jpg 0 4851 | 009765.jpg 0 4852 | 009766.jpg 1 0 0 4853 | 009768.jpg 1 0 1 1 0 0 0 1 4854 | 009769.jpg 0 4855 | 009770.jpg 0 4856 | 009771.jpg 0 0 4857 | 009775.jpg 0 4858 | 009777.jpg 0 0 0 0 4859 | 009779.jpg 0 0 0 0 0 4860 | 009782.jpg 0 0 0 0 0 0 0 0 0 1 0 1 0 4861 | 009783.jpg 0 4862 | 009784.jpg 0 4863 | 009786.jpg 0 0 4864 | 009787.jpg 0 0 0 0 0 1 4865 | 009788.jpg 0 1 4866 | 009791.jpg 0 4867 | 009793.jpg 0 4868 | 009795.jpg 0 4869 | 009798.jpg 0 0 0 0 0 0 0 1 1 0 1 4870 | 009799.jpg 0 0 4871 | 009802.jpg 0 0 0 0 4872 | 009803.jpg 0 0 4873 | 009804.jpg 0 0 0 0 0 0 0 0 0 1 1 4874 | 009806.jpg 0 1 1 1 0 0 1 0 4875 | 009811.jpg 0 0 0 4876 | 009812.jpg 1 0 0 4877 | 009814.jpg 0 4878 | 009815.jpg 0 0 1 1 1 0 0 4879 | 009817.jpg 0 4880 | 009818.jpg 0 0 0 0 4881 | 009820.jpg 0 4882 | 009821.jpg 0 4883 | 009824.jpg 0 4884 | 009826.jpg 0 4885 | 009827.jpg 0 0 0 4886 | 009829.jpg 0 0 0 1 1 0 0 4887 | 009835.jpg 0 4888 | 009837.jpg 0 4889 | 009838.jpg 0 4890 | 009840.jpg 0 0 0 1 0 4891 | 009843.jpg 1 0 4892 | 009844.jpg 0 0 0 0 4893 | 009846.jpg 0 0 4894 | 009847.jpg 0 0 0 4895 | 009849.jpg 0 4896 | 009850.jpg 0 0 0 0 4897 | 009853.jpg 1 0 1 0 1 1 4898 | 009854.jpg 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4899 | 009856.jpg 0 0 0 4900 | 009857.jpg 0 0 4901 | 009861.jpg 0 0 0 0 0 4902 | 009864.jpg 0 4903 | 009866.jpg 0 4904 | 009871.jpg 0 0 0 0 4905 | 009873.jpg 0 4906 | 009875.jpg 0 0 4907 | 009876.jpg 0 4908 | 009883.jpg 0 4909 | 009885.jpg 0 0 0 0 1 4910 | 009888.jpg 0 4911 | 009889.jpg 0 4912 | 009890.jpg 0 0 4913 | 009891.jpg 0 4914 | 009892.jpg 0 4915 | 009893.jpg 0 0 4916 | 009895.jpg 0 0 0 0 0 1 1 4917 | 009899.jpg 0 4918 | 009901.jpg 0 0 0 1 1 1 0 1 4919 | 009903.jpg 0 0 0 0 1 0 4920 | 009906.jpg 0 0 0 0 4921 | 009907.jpg 0 4922 | 009909.jpg 0 0 4923 | 009910.jpg 0 0 4924 | 009912.jpg 0 4925 | 009914.jpg 1 1 0 4926 | 009915.jpg 0 0 0 0 4927 | 009916.jpg 0 0 0 4928 | 009919.jpg 0 4929 | 009921.jpg 0 4930 | 009922.jpg 0 4931 | 009924.jpg 0 4932 | 009925.jpg 0 4933 | 009927.jpg 0 4934 | 009928.jpg 0 0 0 0 0 4935 | 009929.jpg 0 4936 | 009930.jpg 1 1 0 4937 | 009931.jpg 0 0 0 0 0 4938 | 009933.jpg 0 4939 | 009934.jpg 0 4940 | 009936.jpg 0 4941 | 009937.jpg 0 0 4942 | 009941.jpg 0 0 0 0 0 0 0 0 0 1 4943 | 009943.jpg 0 4944 | 009948.jpg 0 0 4945 | 009951.jpg 0 1 1 0 0 4946 | 009952.jpg 0 4947 | 009953.jpg 0 4948 | 009956.jpg 0 4949 | 009957.jpg 0 0 4950 | 009960.jpg 0 0 4951 | 009962.jpg 0 0 0 0 1 4952 | 009963.jpg 0 4953 | -------------------------------------------------------------------------------- /torchcv/evaluations/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.evaluations.voc_eval import voc_eval 2 | -------------------------------------------------------------------------------- /torchcv/evaluations/voc_eval.py: -------------------------------------------------------------------------------- 1 | '''Compute PASCAL_VOC MAP. 2 | 3 | Reference: 4 | https://github.com/chainer/chainercv/blob/master/chainercv/evaluations/eval_detection_voc.py 5 | ''' 6 | from __future__ import division 7 | 8 | import six 9 | import itertools 10 | import numpy as np 11 | 12 | from collections import defaultdict 13 | 14 | 15 | def voc_eval(pred_bboxes, pred_labels, pred_scores, gt_bboxes, gt_labels, 16 | gt_difficults=None, iou_thresh=0.5, use_07_metric=True): 17 | '''Wrap VOC evaluation for PyTorch.''' 18 | pred_bboxes = [xy2yx(b).numpy() for b in pred_bboxes] 19 | pred_labels = [label.numpy() for label in pred_labels] 20 | pred_scores = [score.numpy() for score in pred_scores] 21 | gt_bboxes = [xy2yx(b).numpy() for b in gt_bboxes] 22 | gt_labels = [label.numpy() for label in gt_labels] 23 | return eval_detection_voc( 24 | pred_bboxes, pred_labels, pred_scores, gt_bboxes, 25 | gt_labels, gt_difficults, iou_thresh, use_07_metric) 26 | 27 | def xy2yx(boxes): 28 | '''Convert box (xmin,ymin,xmax,ymax) to (ymin,xmin,ymax,xmax).''' 29 | c0 = boxes[:,0].clone() 30 | c2 = boxes[:,2].clone() 31 | boxes[:,0] = boxes[:,1] 32 | boxes[:,1] = c0 33 | boxes[:,2] = boxes[:,3] 34 | boxes[:,3] = c2 35 | return boxes 36 | 37 | def bbox_iou(bbox_a, bbox_b): 38 | '''Calculate the Intersection of Unions (IoUs) between bounding boxes. 39 | 40 | Args: 41 | bbox_a (array): An array whose shape is :math:`(N, 4)`. 42 | :math:`N` is the number of bounding boxes. 43 | The dtype should be :obj:`numpy.float32`. 44 | bbox_b (array): An array similar to :obj:`bbox_a`, 45 | whose shape is :math:`(K, 4)`. 46 | The dtype should be :obj:`numpy.float32`. 47 | 48 | Returns: 49 | array: 50 | An array whose shape is :math:`(N, K)`. \ 51 | An element at index :math:`(n, k)` contains IoUs between \ 52 | :math:`n` th bounding box in :obj:`bbox_a` and :math:`k` th bounding \ 53 | box in :obj:`bbox_b`. 54 | ''' 55 | # top left 56 | tl = np.maximum(bbox_a[:, None, :2], bbox_b[:, :2]) 57 | # bottom right 58 | br = np.minimum(bbox_a[:, None, 2:], bbox_b[:, 2:]) 59 | 60 | area_i = np.prod(br - tl, axis=2) * (tl < br).all(axis=2) 61 | area_a = np.prod(bbox_a[:, 2:] - bbox_a[:, :2], axis=1) 62 | area_b = np.prod(bbox_b[:, 2:] - bbox_b[:, :2], axis=1) 63 | return area_i / (area_a[:, None] + area_b - area_i) 64 | 65 | def eval_detection_voc( 66 | pred_bboxes, pred_labels, pred_scores, gt_bboxes, gt_labels, 67 | gt_difficults=None, 68 | iou_thresh=0.5, use_07_metric=False): 69 | """Calculate average precisions based on evaluation code of PASCAL VOC. 70 | 71 | This function evaluates predicted bounding boxes obtained from a dataset 72 | which has :math:`N` images by using average precision for each class. 73 | The code is based on the evaluation code used in PASCAL VOC Challenge. 74 | 75 | Args: 76 | pred_bboxes (iterable of numpy.ndarray): An iterable of :math:`N` 77 | sets of bounding boxes. 78 | Its index corresponds to an index for the base dataset. 79 | Each element of :obj:`pred_bboxes` is a set of coordinates 80 | of bounding boxes. This is an array whose shape is :math:`(R, 4)`, 81 | where :math:`R` corresponds 82 | to the number of bounding boxes, which may vary among boxes. 83 | The second axis corresponds to 84 | :math:`y_{min}, x_{min}, y_{max}, x_{max}` of a bounding box. 85 | pred_labels (iterable of numpy.ndarray): An iterable of labels. 86 | Similar to :obj:`pred_bboxes`, its index corresponds to an 87 | index for the base dataset. Its length is :math:`N`. 88 | pred_scores (iterable of numpy.ndarray): An iterable of confidence 89 | scores for predicted bounding boxes. Similar to :obj:`pred_bboxes`, 90 | its index corresponds to an index for the base dataset. 91 | Its length is :math:`N`. 92 | gt_bboxes (iterable of numpy.ndarray): An iterable of ground truth 93 | bounding boxes 94 | whose length is :math:`N`. An element of :obj:`gt_bboxes` is a 95 | bounding box whose shape is :math:`(R, 4)`. Note that the number of 96 | bounding boxes in each image does not need to be same as the number 97 | of corresponding predicted boxes. 98 | gt_labels (iterable of numpy.ndarray): An iterable of ground truth 99 | labels which are organized similarly to :obj:`gt_bboxes`. 100 | gt_difficults (iterable of numpy.ndarray): An iterable of boolean 101 | arrays which is organized similarly to :obj:`gt_bboxes`. 102 | This tells whether the 103 | corresponding ground truth bounding box is difficult or not. 104 | By default, this is :obj:`None`. In that case, this function 105 | considers all bounding boxes to be not difficult. 106 | iou_thresh (float): A prediction is correct if its Intersection over 107 | Union with the ground truth is above this value. 108 | use_07_metric (bool): Whether to use PASCAL VOC 2007 evaluation metric 109 | for calculating average precision. The default value is 110 | :obj:`False`. 111 | 112 | Returns: 113 | dict: 114 | 115 | The keys, value-types and the description of the values are listed 116 | below. 117 | 118 | * **ap** (*numpy.ndarray*): An array of average precisions. \ 119 | The :math:`l`-th value corresponds to the average precision \ 120 | for class :math:`l`. If class :math:`l` does not exist in \ 121 | either :obj:`pred_labels` or :obj:`gt_labels`, the corresponding \ 122 | value is set to :obj:`numpy.nan`. 123 | * **map** (*float*): The average of Average Precisions over classes. 124 | 125 | """ 126 | 127 | prec, rec = calc_detection_voc_prec_rec( 128 | pred_bboxes, pred_labels, pred_scores, 129 | gt_bboxes, gt_labels, gt_difficults, 130 | iou_thresh=iou_thresh) 131 | 132 | ap = calc_detection_voc_ap(prec, rec, use_07_metric=use_07_metric) 133 | 134 | return {'ap': ap, 'map': np.nanmean(ap)} 135 | 136 | 137 | def calc_detection_voc_prec_rec( 138 | pred_bboxes, pred_labels, pred_scores, gt_bboxes, gt_labels, 139 | gt_difficults=None, 140 | iou_thresh=0.5): 141 | """Calculate precision and recall based on evaluation code of PASCAL VOC. 142 | 143 | This function calculates precision and recall of 144 | predicted bounding boxes obtained from a dataset which has :math:`N` 145 | images. 146 | The code is based on the evaluation code used in PASCAL VOC Challenge. 147 | 148 | Args: 149 | pred_bboxes (iterable of numpy.ndarray): An iterable of :math:`N` 150 | sets of bounding boxes. 151 | Its index corresponds to an index for the base dataset. 152 | Each element of :obj:`pred_bboxes` is a set of coordinates 153 | of bounding boxes. This is an array whose shape is :math:`(R, 4)`, 154 | where :math:`R` corresponds 155 | to the number of bounding boxes, which may vary among boxes. 156 | The second axis corresponds to 157 | :math:`y_{min}, x_{min}, y_{max}, x_{max}` of a bounding box. 158 | pred_labels (iterable of numpy.ndarray): An iterable of labels. 159 | Similar to :obj:`pred_bboxes`, its index corresponds to an 160 | index for the base dataset. Its length is :math:`N`. 161 | pred_scores (iterable of numpy.ndarray): An iterable of confidence 162 | scores for predicted bounding boxes. Similar to :obj:`pred_bboxes`, 163 | its index corresponds to an index for the base dataset. 164 | Its length is :math:`N`. 165 | gt_bboxes (iterable of numpy.ndarray): An iterable of ground truth 166 | bounding boxes 167 | whose length is :math:`N`. An element of :obj:`gt_bboxes` is a 168 | bounding box whose shape is :math:`(R, 4)`. Note that the number of 169 | bounding boxes in each image does not need to be same as the number 170 | of corresponding predicted boxes. 171 | gt_labels (iterable of numpy.ndarray): An iterable of ground truth 172 | labels which are organized similarly to :obj:`gt_bboxes`. 173 | gt_difficults (iterable of numpy.ndarray): An iterable of boolean 174 | arrays which is organized similarly to :obj:`gt_bboxes`. 175 | This tells whether the 176 | corresponding ground truth bounding box is difficult or not. 177 | By default, this is :obj:`None`. In that case, this function 178 | considers all bounding boxes to be not difficult. 179 | iou_thresh (float): A prediction is correct if its Intersection over 180 | Union with the ground truth is above this value.. 181 | 182 | Returns: 183 | tuple of two lists: 184 | This function returns two lists: :obj:`prec` and :obj:`rec`. 185 | 186 | * :obj:`prec`: A list of arrays. :obj:`prec[l]` is precision \ 187 | for class :math:`l`. If class :math:`l` does not exist in \ 188 | either :obj:`pred_labels` or :obj:`gt_labels`, :obj:`prec[l]` is \ 189 | set to :obj:`None`. 190 | * :obj:`rec`: A list of arrays. :obj:`rec[l]` is recall \ 191 | for class :math:`l`. If class :math:`l` that is not marked as \ 192 | difficult does not exist in \ 193 | :obj:`gt_labels`, :obj:`rec[l]` is \ 194 | set to :obj:`None`. 195 | 196 | """ 197 | 198 | pred_bboxes = iter(pred_bboxes) 199 | pred_labels = iter(pred_labels) 200 | pred_scores = iter(pred_scores) 201 | gt_bboxes = iter(gt_bboxes) 202 | gt_labels = iter(gt_labels) 203 | if gt_difficults is None: 204 | gt_difficults = itertools.repeat(None) 205 | else: 206 | gt_difficults = iter(gt_difficults) 207 | 208 | n_pos = defaultdict(int) 209 | score = defaultdict(list) 210 | match = defaultdict(list) 211 | 212 | for pred_bbox, pred_label, pred_score, gt_bbox, gt_label, gt_difficult in \ 213 | six.moves.zip( 214 | pred_bboxes, pred_labels, pred_scores, 215 | gt_bboxes, gt_labels, gt_difficults): 216 | 217 | if gt_difficult is None: 218 | gt_difficult = np.zeros(gt_bbox.shape[0], dtype=bool) 219 | 220 | for l in np.unique(np.concatenate((pred_label, gt_label)).astype(int)): 221 | pred_mask_l = pred_label == l 222 | pred_bbox_l = pred_bbox[pred_mask_l] 223 | pred_score_l = pred_score[pred_mask_l] 224 | # sort by score 225 | order = pred_score_l.argsort()[::-1] 226 | pred_bbox_l = pred_bbox_l[order] 227 | pred_score_l = pred_score_l[order] 228 | 229 | gt_mask_l = gt_label == l 230 | gt_bbox_l = gt_bbox[gt_mask_l] 231 | gt_difficult_l = gt_difficult[gt_mask_l] 232 | 233 | n_pos[l] += np.logical_not(gt_difficult_l).sum() 234 | score[l].extend(pred_score_l) 235 | 236 | if len(pred_bbox_l) == 0: 237 | continue 238 | if len(gt_bbox_l) == 0: 239 | match[l].extend((0,) * pred_bbox_l.shape[0]) 240 | continue 241 | 242 | # VOC evaluation follows integer typed bounding boxes. 243 | pred_bbox_l = pred_bbox_l.copy() 244 | pred_bbox_l[:, 2:] += 1 245 | gt_bbox_l = gt_bbox_l.copy() 246 | gt_bbox_l[:, 2:] += 1 247 | 248 | iou = bbox_iou(pred_bbox_l, gt_bbox_l) 249 | gt_index = iou.argmax(axis=1) 250 | # set -1 if there is no matching ground truth 251 | gt_index[iou.max(axis=1) < iou_thresh] = -1 252 | del iou 253 | 254 | selec = np.zeros(gt_bbox_l.shape[0], dtype=bool) 255 | for gt_idx in gt_index: 256 | if gt_idx >= 0: 257 | if gt_difficult_l[gt_idx]: 258 | match[l].append(-1) 259 | else: 260 | if not selec[gt_idx]: 261 | match[l].append(1) 262 | else: 263 | match[l].append(0) 264 | selec[gt_idx] = True 265 | else: 266 | match[l].append(0) 267 | 268 | # for iter_ in ( 269 | # pred_bboxes, pred_labels, pred_scores, 270 | # gt_bboxes, gt_labels, gt_difficults): 271 | # if next(iter_, None) is not None: 272 | # raise ValueError('Length of input iterables need to be same.') 273 | 274 | n_fg_class = max(n_pos.keys()) + 1 275 | prec = [None] * n_fg_class 276 | rec = [None] * n_fg_class 277 | 278 | for l in n_pos.keys(): 279 | score_l = np.array(score[l]) 280 | match_l = np.array(match[l], dtype=np.int8) 281 | 282 | order = score_l.argsort()[::-1] 283 | match_l = match_l[order] 284 | 285 | tp = np.cumsum(match_l == 1) 286 | fp = np.cumsum(match_l == 0) 287 | 288 | # If an element of fp + tp is 0, 289 | # the corresponding element of prec[l] is nan. 290 | prec[l] = tp / (fp + tp) 291 | # If n_pos[l] is 0, rec[l] is None. 292 | if n_pos[l] > 0: 293 | rec[l] = tp / n_pos[l] 294 | 295 | return prec, rec 296 | 297 | 298 | def calc_detection_voc_ap(prec, rec, use_07_metric=False): 299 | """Calculate average precisions based on evaluation code of PASCAL VOC. 300 | 301 | This function calculates average precisions 302 | from given precisions and recalls. 303 | The code is based on the evaluation code used in PASCAL VOC Challenge. 304 | 305 | Args: 306 | prec (list of numpy.array): A list of arrays. 307 | :obj:`prec[l]` indicates precision for class :math:`l`. 308 | If :obj:`prec[l]` is :obj:`None`, this function returns 309 | :obj:`numpy.nan` for class :math:`l`. 310 | rec (list of numpy.array): A list of arrays. 311 | :obj:`rec[l]` indicates recall for class :math:`l`. 312 | If :obj:`rec[l]` is :obj:`None`, this function returns 313 | :obj:`numpy.nan` for class :math:`l`. 314 | use_07_metric (bool): Whether to use PASCAL VOC 2007 evaluation metric 315 | for calculating average precision. The default value is 316 | :obj:`False`. 317 | 318 | Returns: 319 | ~numpy.ndarray: 320 | This function returns an array of average precisions. 321 | The :math:`l`-th value corresponds to the average precision 322 | for class :math:`l`. If :obj:`prec[l]` or :obj:`rec[l]` is 323 | :obj:`None`, the corresponding value is set to :obj:`numpy.nan`. 324 | 325 | """ 326 | 327 | n_fg_class = len(prec) 328 | ap = np.empty(n_fg_class) 329 | for l in six.moves.range(n_fg_class): 330 | if prec[l] is None or rec[l] is None: 331 | ap[l] = np.nan 332 | continue 333 | 334 | if use_07_metric: 335 | # 11 point metric 336 | ap[l] = 0 337 | for t in np.arange(0., 1.1, 0.1): 338 | if np.sum(rec[l] >= t) == 0: 339 | p = 0 340 | else: 341 | p = np.max(np.nan_to_num(prec[l])[rec[l] >= t]) 342 | ap[l] += p / 11 343 | else: 344 | # correct AP calculation 345 | # first append sentinel values at the end 346 | mpre = np.concatenate(([0], np.nan_to_num(prec[l]), [0])) 347 | mrec = np.concatenate(([0], rec[l], [1])) 348 | 349 | mpre = np.maximum.accumulate(mpre[::-1])[::-1] 350 | 351 | # to calculate area under PR curve, look for points 352 | # where X axis (recall) changes value 353 | i = np.where(mrec[1:] != mrec[:-1])[0] 354 | 355 | # and sum (\Delta recall) * prec 356 | ap[l] = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) 357 | 358 | return ap 359 | -------------------------------------------------------------------------------- /torchcv/loss/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.loss.ssd_loss import SSDLoss 2 | from torchcv.loss.focal_loss import FocalLoss 3 | -------------------------------------------------------------------------------- /torchcv/loss/focal_loss.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import torch 4 | import torch.nn as nn 5 | import torch.nn.functional as F 6 | 7 | from torch.autograd import Variable 8 | from torchcv.utils import one_hot_embedding 9 | 10 | 11 | class FocalLoss(nn.Module): 12 | def __init__(self, num_classes): 13 | super(FocalLoss, self).__init__() 14 | self.num_classes = num_classes 15 | 16 | def focal_loss_sigmoid(self, x, y): 17 | '''Sigmoid version of focal loss. 18 | 19 | This is described in the original paper. 20 | With BCELoss, the background should not be counted in num_classes. 21 | 22 | Args: 23 | x: (tensor) predictions, sized [N,D]. 24 | y: (tensor) targets, sized [N,]. 25 | 26 | Return: 27 | (tensor) focal loss. 28 | ''' 29 | alpha = 0.25 30 | gamma = 2 31 | 32 | t = one_hot_embedding(y.data.cpu(), 1+self.num_classes) 33 | t = t[:,1:] # exclude background 34 | t = Variable(t).cuda() 35 | 36 | p = x.sigmoid() 37 | pt = p*t + (1-p)*(1-t) # pt = p if t > 0 else 1-p 38 | w = alpha*t + (1-alpha)*(1-t) # w = alpha if t > 0 else 1-alpha 39 | w = w * (1-pt).pow(gamma) 40 | return F.binary_cross_entropy_with_logits(x, t, w, size_average=False) 41 | 42 | def focal_loss_softmax(self, x, y): 43 | '''Softmax version of focal loss. 44 | 45 | With CrossEntropyLoss, the background need to be counted in num_classes. 46 | 47 | Args: 48 | x: (tensor) predictions, sized [N,D]. 49 | y: (tensor) targets, sized [N,]. 50 | 51 | Return: 52 | (tensor) focal loss. 53 | ''' 54 | t = one_hot_embedding(y.data.cpu(), self.num_classes) 55 | t = Variable(t).cuda() # [N,D] 56 | p = F.softmax(x, dim=1) # [N,D] 57 | pt = (p*t).sum(1) # [N,] 58 | loss = F.cross_entropy(x, y, reduce=False) # [N,] 59 | loss = (1-pt).pow(2) * loss 60 | return loss.sum() 61 | 62 | def focal_loss_sigmoid_alt(self, x, y): 63 | '''Focal loss alternative. 64 | 65 | Args: 66 | x: (tensor) predictions, sized [N,D]. 67 | y: (tensor) targets, sized [N,]. 68 | 69 | Return: 70 | (tensor) focal loss. 71 | ''' 72 | alpha = 0.25 73 | 74 | t = one_hot_embedding(y.data.cpu(), 1+self.num_classes) 75 | t = t[:,1:] 76 | t = Variable(t).cuda() 77 | 78 | xt = x*(2*t-1) # xt = x if t > 0 else -x 79 | pt = (2*xt+1).sigmoid() 80 | 81 | w = alpha*t + (1-alpha)*(1-t) 82 | loss = -w*pt.log() / 2 83 | return loss.sum() 84 | 85 | def forward(self, loc_preds, loc_targets, cls_preds, cls_targets): 86 | '''Compute loss between (loc_preds, loc_targets) and (cls_preds, cls_targets). 87 | 88 | Args: 89 | loc_preds: (tensor) predicted locations, sized [batch_size, #anchors, 4]. 90 | loc_targets: (tensor) encoded target locations, sized [batch_size, #anchors, 4]. 91 | cls_preds: (tensor) predicted class confidences, sized [batch_size, #anchors, #classes]. 92 | cls_targets: (tensor) encoded target labels, sized [batch_size, #anchors]. 93 | 94 | loss: 95 | (tensor) loss = SmoothL1Loss(loc_preds, loc_targets) + FocalLoss(cls_preds, cls_targets). 96 | ''' 97 | batch_size, num_boxes = cls_targets.size() 98 | pos = cls_targets > 0 # [N,#anchors] 99 | num_pos = pos.data.long().sum() 100 | 101 | #=============================================================== 102 | # loc_loss = SmoothL1Loss(pos_loc_preds, pos_loc_targets) 103 | #=============================================================== 104 | mask = pos.unsqueeze(2).expand_as(loc_preds) # [N,#anchors,4] 105 | masked_loc_preds = loc_preds[mask].view(-1,4) # [#pos,4] 106 | masked_loc_targets = loc_targets[mask].view(-1,4) # [#pos,4] 107 | loc_loss = F.smooth_l1_loss(masked_loc_preds, masked_loc_targets, size_average=False) 108 | 109 | #=============================================================== 110 | # cls_loss = FocalLoss(cls_preds, cls_targets) 111 | #=============================================================== 112 | pos_neg = cls_targets > -1 # exclude ignored anchors 113 | mask = pos_neg.unsqueeze(2).expand_as(cls_preds) 114 | masked_cls_preds = cls_preds[mask].view(-1,self.num_classes) 115 | cls_loss = self.focal_loss_sigmoid(masked_cls_preds, cls_targets[pos_neg]) 116 | 117 | print('loc_loss: %.3f | cls_loss: %.3f' % (loc_loss.data[0]/num_pos, cls_loss.data[0]/num_pos), end=' | ') 118 | loss = (loc_loss+cls_loss)/num_pos 119 | return loss 120 | -------------------------------------------------------------------------------- /torchcv/loss/ssd_loss.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | 3 | import torch 4 | import torch.nn as nn 5 | import torch.nn.functional as F 6 | 7 | from torch.autograd import Variable 8 | from torchcv.utils import one_hot_embedding 9 | 10 | 11 | class SSDLoss(nn.Module): 12 | def __init__(self, num_classes): 13 | super(SSDLoss, self).__init__() 14 | self.num_classes = num_classes 15 | 16 | def _hard_negative_mining(self, cls_loss, pos): 17 | '''Return negative indices that is 3x the number as postive indices. 18 | 19 | Args: 20 | cls_loss: (tensor) cross entroy loss between cls_preds and cls_targets, sized [N,#anchors]. 21 | pos: (tensor) positive class mask, sized [N,#anchors]. 22 | 23 | Return: 24 | (tensor) negative indices, sized [N,#anchors]. 25 | ''' 26 | cls_loss = cls_loss * (pos.float() - 1) 27 | 28 | _, idx = cls_loss.sort(1) # sort by negative losses 29 | _, rank = idx.sort(1) # [N,#anchors] 30 | 31 | num_neg = 3*pos.long().sum(1) # [N,] 32 | neg = rank < num_neg[:,None] # [N,#anchors] 33 | return neg 34 | 35 | def forward(self, loc_preds, loc_targets, cls_preds, cls_targets): 36 | '''Compute loss between (loc_preds, loc_targets) and (cls_preds, cls_targets). 37 | 38 | Args: 39 | loc_preds: (tensor) predicted locations, sized [N, #anchors, 4]. 40 | loc_targets: (tensor) encoded target locations, sized [N, #anchors, 4]. 41 | cls_preds: (tensor) predicted class confidences, sized [N, #anchors, #classes]. 42 | cls_targets: (tensor) encoded target labels, sized [N, #anchors]. 43 | 44 | loss: 45 | (tensor) loss = SmoothL1Loss(loc_preds, loc_targets) + CrossEntropyLoss(cls_preds, cls_targets). 46 | ''' 47 | pos = cls_targets > 0 # [N,#anchors] 48 | batch_size = pos.size(0) 49 | num_pos = pos.data.long().sum() 50 | 51 | #=============================================================== 52 | # loc_loss = SmoothL1Loss(pos_loc_preds, pos_loc_targets) 53 | #=============================================================== 54 | mask = pos.unsqueeze(2).expand_as(loc_preds) # [N,#anchors,4] 55 | loc_loss = F.smooth_l1_loss(loc_preds[mask], loc_targets[mask], size_average=False) 56 | 57 | #=============================================================== 58 | # cls_loss = CrossEntropyLoss(cls_preds, cls_targets) 59 | #=============================================================== 60 | cls_loss = F.cross_entropy(cls_preds.view(-1,self.num_classes), \ 61 | cls_targets.view(-1), reduce=False) # [N*#anchors,] 62 | cls_loss = cls_loss.view(batch_size, -1) 63 | cls_loss[cls_targets<0] = 0 # set ignored loss to 0 64 | neg = self._hard_negative_mining(cls_loss, pos) # [N,#anchors] 65 | cls_loss = cls_loss[pos|neg].sum() 66 | num_pos += 0.001 # smooth 67 | # print('loc_loss: %.3f | cls_loss: %.3f' \ 68 | # % (loc_loss.data[0]/(0.01+num_pos), cls_loss.data[0]/(num_pos+0.01)), end=' | ') 69 | loss = (loc_loss+cls_loss)/num_pos 70 | return loss 71 | -------------------------------------------------------------------------------- /torchcv/models/__init__.py: -------------------------------------------------------------------------------- 1 | # from torchcv.models.fpnssd.net import FPNSSD512 2 | 3 | # from torchcv.models.retinanet.box_coder import BoxCoder 4 | # from torchcv.models.retinanet.retinanet import RetinaNet 5 | 6 | # from torchcv.models.ssd.net import SSD300, SSD512 7 | from torchcv.models.ssd.box_coder import SSDBoxCoder 8 | from torchcv.models.dsod.dsod import DSOD -------------------------------------------------------------------------------- /torchcv/models/dsod/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenyuntc/dsod.pytorch/f954085154d4fcad96f623f8572c21d8607ea698/torchcv/models/dsod/__init__.py -------------------------------------------------------------------------------- /torchcv/models/dsod/densenet.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | import torch as t 5 | from torch.autograd import Variable 6 | 7 | 8 | def stem(): 9 | return nn.Sequential( 10 | nn.Conv2d(3, 64, 3, 2, 1,bias=False), 11 | nn.BatchNorm2d(64), 12 | nn.ReLU(inplace=True), 13 | nn.Conv2d(64, 64, 3,1,1,bias=False), 14 | nn.BatchNorm2d(64), 15 | nn.ReLU(inplace=True), 16 | nn.Conv2d(64, 128, 3,1,1,bias=False), 17 | nn.BatchNorm2d(128), 18 | nn.ReLU(inplace=True), 19 | nn.MaxPool2d(2, 2,ceil_mode=True) 20 | ) 21 | 22 | 23 | class DenseLayer(nn.Module): 24 | 25 | def __init__(self, inC, midC=192, growth_rate=48): 26 | super(DenseLayer, self).__init__() 27 | self.model_name = 'DenseLayer' 28 | self.conv = nn.Sequential( 29 | nn.BatchNorm2d(inC), 30 | nn.ReLU(inplace=True), 31 | nn.Conv2d(inC, midC, 1,bias=False), 32 | nn.BatchNorm2d(midC), 33 | nn.ReLU(inplace=True), 34 | nn.Conv2d(midC, growth_rate, 3, padding=1,bias=False), 35 | ) 36 | 37 | def forward(self, x): 38 | y = self.conv(x) 39 | y = t.cat([x, y], 1) 40 | return y 41 | 42 | 43 | class DenseBlock(nn.Module): 44 | def __init__(self, layer_num, inC, midC=192,growth_rate=48): 45 | super(DenseBlock, self).__init__() 46 | self.model_name = 'DenseBlock' 47 | layers = [] 48 | layers.append(DenseLayer(inC,midC,growth_rate)) 49 | for layer_idx in range(1, layer_num): 50 | layers.append(DenseLayer(inC+growth_rate*layer_idx,midC,growth_rate)) 51 | self.dense = nn.Sequential(*layers) 52 | 53 | def forward(self, x): 54 | return self.dense(x) 55 | 56 | 57 | class TransitionLayer(nn.Module): 58 | 59 | def __init__(self, inC, outC,pool=False): 60 | super(TransitionLayer, self).__init__() 61 | self.model_name = 'TransitionLayer' 62 | self.conv = nn.Sequential( 63 | nn.BatchNorm2d(inC), 64 | nn.ReLU(inplace=True), 65 | nn.Conv2d(inC,outC,1,bias=False) 66 | ) 67 | self.pool = nn.MaxPool2d(2,2,ceil_mode=True) if pool else lambda x: x 68 | 69 | 70 | def forward(self, x): 71 | x = self.conv(x) 72 | return (x,self.pool(x)) 73 | 74 | class DenseSupervision1(nn.Module): 75 | 76 | def __init__(self,inC,outC=256): 77 | super(DenseSupervision1, self).__init__() 78 | self.model_name='DenseSupervision' 79 | 80 | self.right = nn.Sequential( 81 | # nn.BatchNorm2d(inC), 82 | # nn.ReLU(inplace=True), 83 | # nn.Conv2d(inC,outC,1), 84 | nn.MaxPool2d(2,2,ceil_mode=True), 85 | nn.BatchNorm2d(inC), 86 | nn.ReLU(inplace=True), 87 | nn.Conv2d(inC,outC,1,bias=False) 88 | ) 89 | 90 | def forward(self,x1,x2): 91 | # x1 should be f1 92 | right = self.right(x1) 93 | return t.cat([x2,right],1) 94 | 95 | 96 | class DenseSupervision(nn.Module): 97 | 98 | def __init__(self,inC,outC=128): 99 | super(DenseSupervision, self).__init__() 100 | self.model_name='DenseSupervision' 101 | self.left = nn.Sequential( 102 | nn.MaxPool2d(2,2,ceil_mode=True), 103 | nn.BatchNorm2d(inC), 104 | nn.ReLU(inplace=True), 105 | nn.Conv2d(inC,outC,1,bias=False) 106 | ) 107 | self.right = nn.Sequential( 108 | nn.BatchNorm2d(inC), 109 | nn.ReLU(inplace=True), 110 | nn.Conv2d(inC,outC,1,bias=False), 111 | nn.BatchNorm2d(outC), 112 | nn.ReLU(inplace=True), 113 | nn.Conv2d(outC,outC,3,2,1,bias=False) 114 | ) 115 | 116 | def forward(self,x): 117 | left = self.left(x) 118 | right = self.right(x) 119 | return t.cat([left,right],1) 120 | 121 | class DenseNet(nn.Module): 122 | 123 | def __init__(self): 124 | super(DenseNet, self).__init__() 125 | self.model_name='DenseNet' 126 | 127 | self.stem = stem() 128 | self.dense1 = DenseBlock(6,128) 129 | self.trans1 = TransitionLayer(416,416,pool=True) 130 | self.dense2 = DenseBlock(8,416) 131 | self.trans2 = TransitionLayer(800,800,pool=True) 132 | self.dense3 = DenseBlock(8,800) 133 | self.trans3 = TransitionLayer(1184,1184) #TODO:论文中是1120但是代码中是 1184, 而且这样才符合下一个densenetblock的growthrate 134 | self.dense4 = DenseBlock(8,1184) 135 | # TODO: 论文中的输出 形状是1568 136 | self.trans4 = TransitionLayer(1568,256) 137 | 138 | self.dense_sup1 = DenseSupervision1(800,256) 139 | self.dense_sup2 = DenseSupervision(512,256) 140 | self.dense_sup3 = DenseSupervision(512,128) 141 | self.dense_sup4 = DenseSupervision(256,128) 142 | self.dense_sup5 = DenseSupervision(256,128) 143 | 144 | 145 | def forward(self,x): 146 | x = self.stem(x) 147 | 148 | x = self.dense1(x) 149 | _,x = self.trans1(x) 150 | 151 | x = self.dense2(x) 152 | f1,x = self.trans2(x) 153 | 154 | x = self.dense3(x) 155 | _,x = self.trans3(x) 156 | 157 | x = self.dense4(x) 158 | _,x = self.trans4(x) 159 | 160 | f2 = self.dense_sup1(f1,x) 161 | f3 = self.dense_sup2(f2) 162 | f4 = self.dense_sup3(f3) 163 | f5 = self.dense_sup4(f4) 164 | f6 = self.dense_sup5(f5) 165 | return f1,f2,f3,f4,f5,f6 166 | 167 | if __name__ == '__main__': 168 | m = DenseNet() 169 | input = t.autograd.Variable(t.randn(1,3,300,300)) 170 | o = m(input) 171 | for ii in o: 172 | print(ii.shape) 173 | -------------------------------------------------------------------------------- /torchcv/models/dsod/dsod.py: -------------------------------------------------------------------------------- 1 | import torch 2 | t = torch 3 | import torch.nn as nn 4 | import torch.nn.functional as F 5 | 6 | from torchcv.models.dsod.densenet import DenseNet 7 | from torch.autograd import Variable 8 | import torch 9 | import torch.nn as nn 10 | from torch.autograd import Function 11 | from torch.autograd import Variable 12 | import torch.nn.init as init 13 | 14 | class L2Norm(nn.Module): 15 | def __init__(self,n_channels, scale): 16 | super(L2Norm,self).__init__() 17 | self.n_channels = n_channels 18 | self.gamma = scale or None 19 | self.eps = 1e-10 20 | self.weight = nn.Parameter(torch.Tensor(self.n_channels)) 21 | self.reset_parameters() 22 | 23 | def reset_parameters(self): 24 | init.constant(self.weight,self.gamma) 25 | 26 | def forward(self, x): 27 | norm = x.pow(2).sum(dim=1, keepdim=True).sqrt()+self.eps 28 | #x /= norm 29 | x = torch.div(x,norm) 30 | out = self.weight.unsqueeze(0).unsqueeze(2).unsqueeze(3).expand_as(x) * x 31 | return out 32 | 33 | class DSOD(nn.Module): 34 | steps = (8, 16, 32, 64, 100, 300) 35 | # default bounding box sizes for each feature map. 36 | box_sizes = (30.0, 60.0, 111., 162., 213., 264., 315.) 37 | aspect_ratios = ((2,), (2, 3), (2, 3), (2, 3), (2,), (2,)) 38 | # fm_sizes = (64, 32, 16, 8, 4, 2, 1) 39 | fm_sizes = (38, 19, 10, 5, 3, 2) 40 | 41 | 42 | def __init__(self, num_classes): 43 | super(DSOD, self).__init__() 44 | self.num_classes = num_classes 45 | self.extractor = DenseNet() 46 | self.loc_layers = nn.ModuleList() 47 | self.cls_layers = nn.ModuleList() 48 | 49 | in_channels = [800,512,512,256,256,256] 50 | num_anchors = (4, 6, 6, 6, 4, 4) 51 | for inC,num_anchor in zip(in_channels,num_anchors): 52 | # self.loc_layers += [nn.Conv2d(inC, num_anchor*4, kernel_size=3, padding=1)] 53 | # self.cls_layers += [nn.Conv2d(inC, num_anchor* num_classes, kernel_size=3, padding=1) 54 | # ] 55 | self.loc_layers += [nn.Sequential(nn.Conv2d(inC, 56 | num_anchor*4, kernel_size=3, padding=1,bias=False), 57 | nn.BatchNorm2d(num_anchor*4) 58 | )] 59 | self.cls_layers += [nn.Sequential(nn.Conv2d(inC, 60 | num_anchor* num_classes, kernel_size=3, padding=1,bias=False), 61 | nn.BatchNorm2d(num_anchor* num_classes) 62 | )] 63 | self.normalize = nn.ModuleList([L2Norm(chan,20) for chan in in_channels]) 64 | 65 | self.reset_parameters() 66 | 67 | def forward(self, x): 68 | loc_preds = [] 69 | cls_preds = [] 70 | xs = self.extractor(x) 71 | for i, x in enumerate(xs): 72 | x = self.normalize[i](x) 73 | loc_pred = self.loc_layers[i](x) 74 | loc_pred = loc_pred.permute(0, 2, 3, 1).contiguous() 75 | loc_preds.append(loc_pred.view(loc_pred.size(0), -1, 4)) 76 | 77 | cls_pred = self.cls_layers[i](x) 78 | cls_pred = cls_pred.permute(0, 2, 3, 1).contiguous() 79 | cls_preds.append(cls_pred.view( 80 | cls_pred.size(0), -1, self.num_classes)) 81 | 82 | loc_preds = torch.cat(loc_preds, 1) 83 | cls_preds = torch.cat(cls_preds, 1) 84 | return loc_preds, cls_preds 85 | 86 | def reset_parameters(self): 87 | for name,param in self.extractor.named_parameters(): 88 | if hasattr(param,'weight'): 89 | nn.init.xavier_uniform(param.weight.data,gain=nn.init.calculate_gain('relu')) 90 | 91 | for name,param in self.loc_layers.named_parameters(): 92 | if hasattr(param,'weight'): 93 | nn.init.normal(param.weight.data,std=0.01) 94 | 95 | for name,param in self.cls_layers.named_parameters(): 96 | if hasattr(param,'weight'): 97 | nn.init.normal(param.weight.data,std=0.01) 98 | 99 | if __name__ == '__main__': 100 | m = DSOD(21) 101 | input = t.autograd.Variable(t.randn(1,3,300,300)) 102 | o = m(input) 103 | for ii in o: 104 | print(ii.shape) 105 | -------------------------------------------------------------------------------- /torchcv/models/ssd/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.models.ssd.net import SSD300, SSD512 2 | from torchcv.models.ssd.box_coder import SSDBoxCoder 3 | -------------------------------------------------------------------------------- /torchcv/models/ssd/box_coder.py: -------------------------------------------------------------------------------- 1 | '''Encode object boxes and labels.''' 2 | import math 3 | import torch 4 | import itertools 5 | 6 | from torchcv.utils import meshgrid 7 | from torchcv.utils.box import box_iou, box_nms, change_box_order 8 | 9 | from torchcv.models.ssd.nms.pth_nms import pth_nms as nms_gpu 10 | class SSDBoxCoder: 11 | def __init__(self, ssd_model): 12 | self.steps = ssd_model.steps 13 | self.box_sizes = ssd_model.box_sizes 14 | self.aspect_ratios = ssd_model.aspect_ratios 15 | self.fm_sizes = ssd_model.fm_sizes 16 | self.default_boxes = self._get_default_boxes() 17 | 18 | def _get_default_boxes(self): 19 | boxes = [] 20 | for i, fm_size in enumerate(self.fm_sizes): 21 | for h, w in itertools.product(range(fm_size), repeat=2): 22 | cx = (w + 0.5) * self.steps[i] 23 | cy = (h + 0.5) * self.steps[i] 24 | 25 | s = self.box_sizes[i] 26 | boxes.append((cx, cy, s, s)) 27 | 28 | s = math.sqrt(self.box_sizes[i] * self.box_sizes[i+1]) 29 | boxes.append((cx, cy, s, s)) 30 | 31 | s = self.box_sizes[i] 32 | for ar in self.aspect_ratios[i]: 33 | boxes.append((cx, cy, s * math.sqrt(ar), s / math.sqrt(ar))) 34 | boxes.append((cx, cy, s / math.sqrt(ar), s * math.sqrt(ar))) 35 | return torch.Tensor(boxes) # xywh 36 | 37 | def encode(self, boxes, labels): 38 | '''Encode target bounding boxes and class labels. 39 | 40 | SSD coding rules: 41 | tx = (x - anchor_x) / (variance[0]*anchor_w) 42 | ty = (y - anchor_y) / (variance[0]*anchor_h) 43 | tw = log(w / anchor_w) / variance[1] 44 | th = log(h / anchor_h) / variance[1] 45 | 46 | Args: 47 | boxes: (tensor) bounding boxes of (xmin,ymin,xmax,ymax), sized [#obj, 4]. 48 | labels: (tensor) object class labels, sized [#obj,]. 49 | 50 | Returns: 51 | loc_targets: (tensor) encoded bounding boxes, sized [#anchors,4]. 52 | cls_targets: (tensor) encoded class labels, sized [#anchors,]. 53 | 54 | Reference: 55 | https://github.com/chainer/chainercv/blob/master/chainercv/links/model/ssd/multibox_coder.py 56 | ''' 57 | def argmax(x): 58 | v, i = x.max(0) 59 | j = v.max(0)[1][0] 60 | return (i[j], j) 61 | 62 | default_boxes = self.default_boxes # xywh 63 | default_boxes = change_box_order(default_boxes, 'xywh2xyxy') 64 | 65 | ious = box_iou(default_boxes, boxes) # [#anchors, #obj] 66 | index = torch.LongTensor(len(default_boxes)).fill_(-1) 67 | masked_ious = ious.clone() 68 | while True: 69 | i, j = argmax(masked_ious) 70 | if masked_ious[i,j] < 1e-6: 71 | break 72 | index[i] = j 73 | masked_ious[i,:] = 0 74 | masked_ious[:,j] = 0 75 | 76 | mask = (index<0) & (ious.max(1)[0]>=0.5) 77 | if mask.any(): 78 | index[mask] = ious[mask.nonzero().squeeze()].max(1)[1] 79 | 80 | boxes = boxes[index.clamp(min=0)] # negative index not supported 81 | boxes = change_box_order(boxes, 'xyxy2xywh') 82 | default_boxes = change_box_order(default_boxes, 'xyxy2xywh') 83 | 84 | variances = (0.1, 0.2) 85 | loc_xy = (boxes[:,:2]-default_boxes[:,:2]) / default_boxes[:,2:] / variances[0] 86 | loc_wh = torch.log(boxes[:,2:]/default_boxes[:,2:]) / variances[1] 87 | loc_targets = torch.cat([loc_xy,loc_wh], 1) 88 | cls_targets = 1 + labels[index.clamp(min=0)] 89 | cls_targets[index<0] = 0 90 | return loc_targets, cls_targets 91 | 92 | def decode(self, loc_preds, cls_preds, score_thresh=0.6, nms_thresh=0.45): 93 | '''Decode predicted loc/cls back to real box locations and class labels. 94 | 95 | Args: 96 | loc_preds: (tensor) predicted loc, sized [8732,4]. 97 | cls_preds: (tensor) predicted conf, sized [8732,21]. 98 | score_thresh: (float) threshold for object confidence score. 99 | nms_thresh: (float) threshold for box nms. 100 | 101 | Returns: 102 | boxes: (tensor) bbox locations, sized [#obj,4]. 103 | labels: (tensor) class labels, sized [#obj,]. 104 | ''' 105 | variances = (0.1, 0.2) 106 | xy = loc_preds[:,:2] * variances[0] * self.default_boxes[:,2:] + self.default_boxes[:,:2] 107 | wh = torch.exp(loc_preds[:,2:]*variances[1]) * self.default_boxes[:,2:] 108 | box_preds = torch.cat([xy-wh/2, xy+wh/2], 1) 109 | 110 | boxes = [] 111 | labels = [] 112 | scores = [] 113 | num_classes = cls_preds.size(1) 114 | for i in range(num_classes-1): 115 | score = cls_preds[:,i+1] # class i corresponds to (i+1) column 116 | mask = score > score_thresh 117 | if not mask.any(): 118 | continue 119 | box = box_preds[mask.nonzero().squeeze()] 120 | score = score[mask] 121 | 122 | keep = nms_gpu(torch.cat([box,score[:,None]],1).cuda(),nms_thresh).cpu() 123 | boxes.append(box[keep]) 124 | labels.append(torch.LongTensor(len(box[keep])).fill_(i)) 125 | scores.append(score[keep]) 126 | if len(boxes)==0:return boxes, labels, scores 127 | boxes = torch.cat(boxes, 0) 128 | labels = torch.cat(labels, 0) 129 | scores = torch.cat(scores, 0) 130 | return boxes, labels, scores 131 | -------------------------------------------------------------------------------- /torchcv/models/ssd/net.py: -------------------------------------------------------------------------------- 1 | '''SSD model with VGG16 as feature extractor.''' 2 | import torch 3 | import torch.nn as nn 4 | import torch.nn.functional as F 5 | 6 | from torch.autograd import Variable 7 | 8 | 9 | class VGG16(nn.Module): 10 | def __init__(self): 11 | super(VGG16, self).__init__() 12 | self.layers = self._make_layers() 13 | 14 | def forward(self, x): 15 | y = self.layers(x) 16 | return y 17 | 18 | def _make_layers(self): 19 | '''VGG16 layers.''' 20 | cfg = [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512] 21 | layers = [] 22 | in_channels = 3 23 | for x in cfg: 24 | if x == 'M': 25 | layers += [nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True)] 26 | else: 27 | layers += [nn.Conv2d(in_channels, x, kernel_size=3, padding=1), 28 | nn.ReLU(True)] 29 | in_channels = x 30 | return nn.Sequential(*layers) 31 | 32 | 33 | class L2Norm(nn.Module): 34 | '''L2Norm layer across all channels.''' 35 | def __init__(self, in_features, scale): 36 | super(L2Norm, self).__init__() 37 | self.weight = nn.Parameter(torch.Tensor(in_features)) 38 | self.reset_parameters(scale) 39 | 40 | def reset_parameters(self, scale): 41 | nn.init.constant(self.weight, scale) 42 | 43 | def forward(self, x): 44 | x = F.normalize(x, dim=1) 45 | scale = self.weight[None,:,None,None] 46 | return scale * x 47 | 48 | 49 | class VGG16Extractor300(nn.Module): 50 | def __init__(self): 51 | super(VGG16Extractor300, self).__init__() 52 | 53 | self.features = VGG16() 54 | self.norm4 = L2Norm(512, 20) 55 | 56 | self.conv5_1 = nn.Conv2d(512, 512, kernel_size=3, padding=1, dilation=1) 57 | self.conv5_2 = nn.Conv2d(512, 512, kernel_size=3, padding=1, dilation=1) 58 | self.conv5_3 = nn.Conv2d(512, 512, kernel_size=3, padding=1, dilation=1) 59 | 60 | self.conv6 = nn.Conv2d(512, 1024, kernel_size=3, padding=6, dilation=6) 61 | self.conv7 = nn.Conv2d(1024, 1024, kernel_size=1) 62 | 63 | self.conv8_1 = nn.Conv2d(1024, 256, kernel_size=1) 64 | self.conv8_2 = nn.Conv2d(256, 512, kernel_size=3, stride=2, padding=1) 65 | 66 | self.conv9_1 = nn.Conv2d(512, 128, kernel_size=1) 67 | self.conv9_2 = nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1) 68 | 69 | self.conv10_1 = nn.Conv2d(256, 128, kernel_size=1) 70 | self.conv10_2 = nn.Conv2d(128, 256, kernel_size=3) 71 | 72 | self.conv11_1 = nn.Conv2d(256, 128, kernel_size=1) 73 | self.conv11_2 = nn.Conv2d(128, 256, kernel_size=3) 74 | 75 | def forward(self, x): 76 | hs = [] 77 | h = self.features(x) 78 | hs.append(self.norm4(h)) # conv4_3 79 | 80 | h = F.max_pool2d(h, kernel_size=2, stride=2, ceil_mode=True) 81 | 82 | h = F.relu(self.conv5_1(h)) 83 | h = F.relu(self.conv5_2(h)) 84 | h = F.relu(self.conv5_3(h)) 85 | h = F.max_pool2d(h, kernel_size=3, stride=1, padding=1, ceil_mode=True) 86 | 87 | h = F.relu(self.conv6(h)) 88 | h = F.relu(self.conv7(h)) 89 | hs.append(h) # conv7 90 | 91 | h = F.relu(self.conv8_1(h)) 92 | h = F.relu(self.conv8_2(h)) 93 | hs.append(h) # conv8_2 94 | 95 | h = F.relu(self.conv9_1(h)) 96 | h = F.relu(self.conv9_2(h)) 97 | hs.append(h) # conv9_2 98 | 99 | h = F.relu(self.conv10_1(h)) 100 | h = F.relu(self.conv10_2(h)) 101 | hs.append(h) # conv10_2 102 | 103 | h = F.relu(self.conv11_1(h)) 104 | h = F.relu(self.conv11_2(h)) 105 | hs.append(h) # conv11_2 106 | return hs 107 | 108 | 109 | class SSD300(nn.Module): 110 | steps = (8, 16, 32, 64, 100, 300) 111 | box_sizes = (30, 60, 111, 162, 213, 264, 315) # default bounding box sizes for each feature map. 112 | aspect_ratios = ((2,), (2,3), (2,3), (2,3), (2,), (2,)) 113 | fm_sizes = (38, 19, 10, 5, 3, 1) 114 | 115 | def __init__(self, num_classes): 116 | super(SSD300, self).__init__() 117 | self.num_classes = num_classes 118 | self.num_anchors = (4, 6, 6, 6, 4, 4) 119 | self.in_channels = (512, 1024, 512, 256, 256, 256) 120 | 121 | self.extractor = VGG16Extractor300() 122 | self.loc_layers = nn.ModuleList() 123 | self.cls_layers = nn.ModuleList() 124 | for i in range(len(self.in_channels)): 125 | self.loc_layers += [nn.Conv2d(self.in_channels[i], self.num_anchors[i]*4, kernel_size=3, padding=1)] 126 | self.cls_layers += [nn.Conv2d(self.in_channels[i], self.num_anchors[i]*self.num_classes, kernel_size=3, padding=1)] 127 | 128 | def forward(self, x): 129 | loc_preds = [] 130 | cls_preds = [] 131 | xs = self.extractor(x) 132 | for i, x in enumerate(xs): 133 | loc_pred = self.loc_layers[i](x) 134 | loc_pred = loc_pred.permute(0,2,3,1).contiguous() 135 | loc_preds.append(loc_pred.view(loc_pred.size(0),-1,4)) 136 | 137 | cls_pred = self.cls_layers[i](x) 138 | cls_pred = cls_pred.permute(0,2,3,1).contiguous() 139 | cls_preds.append(cls_pred.view(cls_pred.size(0),-1,self.num_classes)) 140 | 141 | loc_preds = torch.cat(loc_preds, 1) 142 | cls_preds = torch.cat(cls_preds, 1) 143 | return loc_preds, cls_preds 144 | 145 | 146 | class VGG16Extractor512(nn.Module): 147 | def __init__(self): 148 | super(VGG16Extractor512, self).__init__() 149 | 150 | self.features = VGG16() 151 | self.norm4 = L2Norm(512, 20) 152 | 153 | self.conv5_1 = nn.Conv2d(512, 512, kernel_size=3, padding=1, dilation=1) 154 | self.conv5_2 = nn.Conv2d(512, 512, kernel_size=3, padding=1, dilation=1) 155 | self.conv5_3 = nn.Conv2d(512, 512, kernel_size=3, padding=1, dilation=1) 156 | 157 | self.conv6 = nn.Conv2d(512, 1024, kernel_size=3, padding=6, dilation=6) 158 | self.conv7 = nn.Conv2d(1024, 1024, kernel_size=1) 159 | 160 | self.conv8_1 = nn.Conv2d(1024, 256, kernel_size=1) 161 | self.conv8_2 = nn.Conv2d(256, 512, kernel_size=3, padding=1, stride=2) 162 | 163 | self.conv9_1 = nn.Conv2d(512, 128, kernel_size=1) 164 | self.conv9_2 = nn.Conv2d(128, 256, kernel_size=3, padding=1, stride=2) 165 | 166 | self.conv10_1 = nn.Conv2d(256, 128, kernel_size=1) 167 | self.conv10_2 = nn.Conv2d(128, 256, kernel_size=3, padding=1, stride=2) 168 | 169 | self.conv11_1 = nn.Conv2d(256, 128, kernel_size=1) 170 | self.conv11_2 = nn.Conv2d(128, 256, kernel_size=3, padding=1, stride=2) 171 | 172 | self.conv12_1 = nn.Conv2d(256, 128, kernel_size=1) 173 | self.conv12_2 = nn.Conv2d(128, 256, kernel_size=4, padding=1) 174 | 175 | def forward(self, x): 176 | hs = [] 177 | h = self.features(x) 178 | hs.append(self.norm4(h)) # conv4_3 179 | 180 | h = F.max_pool2d(h, kernel_size=2, stride=2, ceil_mode=True) 181 | 182 | h = F.relu(self.conv5_1(h)) 183 | h = F.relu(self.conv5_2(h)) 184 | h = F.relu(self.conv5_3(h)) 185 | h = F.max_pool2d(h, kernel_size=3, padding=1, stride=1, ceil_mode=True) 186 | 187 | h = F.relu(self.conv6(h)) 188 | h = F.relu(self.conv7(h)) 189 | hs.append(h) # conv7 190 | 191 | h = F.relu(self.conv8_1(h)) 192 | h = F.relu(self.conv8_2(h)) 193 | hs.append(h) # conv8_2 194 | 195 | h = F.relu(self.conv9_1(h)) 196 | h = F.relu(self.conv9_2(h)) 197 | hs.append(h) # conv9_2 198 | 199 | h = F.relu(self.conv10_1(h)) 200 | h = F.relu(self.conv10_2(h)) 201 | hs.append(h) # conv10_2 202 | 203 | h = F.relu(self.conv11_1(h)) 204 | h = F.relu(self.conv11_2(h)) 205 | hs.append(h) # conv11_2 206 | 207 | h = F.relu(self.conv12_1(h)) 208 | h = F.relu(self.conv12_2(h)) 209 | hs.append(h) # conv12_2 210 | return hs 211 | 212 | 213 | class SSD512(nn.Module): 214 | steps = (8, 16, 32, 64, 128, 256, 512) 215 | box_sizes = (35.84, 76.8, 153.6, 230.4, 307.2, 384.0, 460.8, 537.6) # default bounding box sizes for each feature map. 216 | aspect_ratios = ((2,), (2, 3), (2, 3), (2, 3), (2, 3), (2,), (2,)) 217 | fm_sizes = (64, 32, 16, 8, 4, 2, 1) 218 | 219 | def __init__(self, num_classes): 220 | super(SSD512, self).__init__() 221 | self.num_classes = num_classes 222 | self.num_anchors = (4, 6, 6, 6, 6, 4, 4) 223 | self.in_channels = (512, 1024, 512, 256, 256, 256, 256) 224 | 225 | self.extractor = VGG16Extractor512() 226 | self.loc_layers = nn.ModuleList() 227 | self.cls_layers = nn.ModuleList() 228 | for i in range(len(self.in_channels)): 229 | self.loc_layers += [nn.Conv2d(self.in_channels[i], self.num_anchors[i]*4, kernel_size=3, padding=1)] 230 | self.cls_layers += [nn.Conv2d(self.in_channels[i], self.num_anchors[i]*self.num_classes, kernel_size=3, padding=1)] 231 | 232 | def forward(self, x): 233 | loc_preds = [] 234 | cls_preds = [] 235 | xs = self.extractor(x) 236 | for i, x in enumerate(xs): 237 | loc_pred = self.loc_layers[i](x) 238 | loc_pred = loc_pred.permute(0,2,3,1).contiguous() 239 | loc_preds.append(loc_pred.view(loc_pred.size(0),-1,4)) 240 | 241 | cls_pred = self.cls_layers[i](x) 242 | cls_pred = cls_pred.permute(0,2,3,1).contiguous() 243 | cls_preds.append(cls_pred.view(cls_pred.size(0),-1,self.num_classes)) 244 | 245 | loc_preds = torch.cat(loc_preds, 1) 246 | cls_preds = torch.cat(cls_preds, 1) 247 | return loc_preds, cls_preds 248 | 249 | 250 | def test(): 251 | net = SSD300(21) 252 | loc_preds, cls_preds = net(Variable(torch.randn(1,3,300,300))) 253 | print(loc_preds.size(), cls_preds.size()) 254 | 255 | # test() 256 | -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenyuntc/dsod.pytorch/f954085154d4fcad96f623f8572c21d8607ea698/torchcv/models/ssd/nms/__init__.py -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/build.py: -------------------------------------------------------------------------------- 1 | import os 2 | import torch 3 | from torch.utils.ffi import create_extension 4 | 5 | 6 | sources = ['src/nms.c'] 7 | headers = ['src/nms.h'] 8 | defines = [] 9 | with_cuda = False 10 | 11 | if torch.cuda.is_available(): 12 | print('Including CUDA code.') 13 | sources += ['src/nms_cuda.c'] 14 | headers += ['src/nms_cuda.h'] 15 | defines += [('WITH_CUDA', None)] 16 | with_cuda = True 17 | 18 | this_file = os.path.dirname(os.path.realpath(__file__)) 19 | print(this_file) 20 | extra_objects = ['src/cuda/nms_kernel.cu.o'] 21 | extra_objects = [os.path.join(this_file, fname) for fname in extra_objects] 22 | 23 | ffi = create_extension( 24 | '_ext.nms', 25 | headers=headers, 26 | sources=sources, 27 | define_macros=defines, 28 | relative_to=__file__, 29 | with_cuda=with_cuda, 30 | extra_objects=extra_objects 31 | ) 32 | 33 | if __name__ == '__main__': 34 | ffi.build() 35 | -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/make.sh: -------------------------------------------------------------------------------- 1 | cd torchcv/models/ssd/nms/src/cuda/ 2 | echo "Compiling nms kernels by nvcc..." 3 | nvcc -c -o nms_kernel.cu.o nms_kernel.cu -x cu -Xcompiler -fPIC -arch=sm_52 4 | cd ../../ 5 | python build.py 6 | cd ../../../../ -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/pth_nms.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from ._ext import nms 3 | import numpy as np 4 | 5 | def pth_nms(dets, thresh): 6 | """ 7 | dets has to be a tensor 8 | """ 9 | if False:pass 10 | else: 11 | x1 = dets[:, 0] 12 | y1 = dets[:, 1] 13 | x2 = dets[:, 2] 14 | y2 = dets[:, 3] 15 | scores = dets[:, 4] 16 | 17 | areas = (x2 - x1 + 1) * (y2 - y1 + 1) 18 | order = scores.sort(0, descending=True)[1] 19 | # order = torch.from_numpy(np.ascontiguousarray(scores.cpu().numpy().argsort()[::-1])).long().cuda() 20 | 21 | dets = dets[order].contiguous() 22 | 23 | keep = torch.LongTensor(dets.size(0)) 24 | num_out = torch.LongTensor(1) 25 | # keep = torch.cuda.LongTensor(dets.size(0)) 26 | # num_out = torch.cuda.LongTensor(1) 27 | nms.gpu_nms(keep, num_out, dets, thresh) 28 | 29 | return order[keep[:num_out[0]].cuda()].contiguous() 30 | # return order[keep[:num_out[0]]].contiguous() 31 | 32 | -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/src/cuda/nms_kernel.cu: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------ 2 | // Faster R-CNN 3 | // Copyright (c) 2015 Microsoft 4 | // Licensed under The MIT License [see fast-rcnn/LICENSE for details] 5 | // Written by Shaoqing Ren 6 | // ------------------------------------------------------------------ 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | 11 | #include 12 | #include 13 | #include 14 | #include "nms_kernel.h" 15 | 16 | __device__ inline float devIoU(float const * const a, float const * const b) { 17 | float left = fmaxf(a[0], b[0]), right = fminf(a[2], b[2]); 18 | float top = fmaxf(a[1], b[1]), bottom = fminf(a[3], b[3]); 19 | float width = fmaxf(right - left + 1, 0.f), height = fmaxf(bottom - top + 1, 0.f); 20 | float interS = width * height; 21 | float Sa = (a[2] - a[0] + 1) * (a[3] - a[1] + 1); 22 | float Sb = (b[2] - b[0] + 1) * (b[3] - b[1] + 1); 23 | return interS / (Sa + Sb - interS); 24 | } 25 | 26 | __global__ void nms_kernel(const int n_boxes, const float nms_overlap_thresh, 27 | const float *dev_boxes, unsigned long long *dev_mask) { 28 | const int row_start = blockIdx.y; 29 | const int col_start = blockIdx.x; 30 | 31 | // if (row_start > col_start) return; 32 | 33 | const int row_size = 34 | fminf(n_boxes - row_start * threadsPerBlock, threadsPerBlock); 35 | const int col_size = 36 | fminf(n_boxes - col_start * threadsPerBlock, threadsPerBlock); 37 | 38 | __shared__ float block_boxes[threadsPerBlock * 5]; 39 | if (threadIdx.x < col_size) { 40 | block_boxes[threadIdx.x * 5 + 0] = 41 | dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 0]; 42 | block_boxes[threadIdx.x * 5 + 1] = 43 | dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 1]; 44 | block_boxes[threadIdx.x * 5 + 2] = 45 | dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 2]; 46 | block_boxes[threadIdx.x * 5 + 3] = 47 | dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 3]; 48 | block_boxes[threadIdx.x * 5 + 4] = 49 | dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 4]; 50 | } 51 | __syncthreads(); 52 | 53 | if (threadIdx.x < row_size) { 54 | const int cur_box_idx = threadsPerBlock * row_start + threadIdx.x; 55 | const float *cur_box = dev_boxes + cur_box_idx * 5; 56 | int i = 0; 57 | unsigned long long t = 0; 58 | int start = 0; 59 | if (row_start == col_start) { 60 | start = threadIdx.x + 1; 61 | } 62 | for (i = start; i < col_size; i++) { 63 | if (devIoU(cur_box, block_boxes + i * 5) > nms_overlap_thresh) { 64 | t |= 1ULL << i; 65 | } 66 | } 67 | const int col_blocks = DIVUP(n_boxes, threadsPerBlock); 68 | dev_mask[cur_box_idx * col_blocks + col_start] = t; 69 | } 70 | } 71 | 72 | 73 | void _nms(int boxes_num, float * boxes_dev, 74 | unsigned long long * mask_dev, float nms_overlap_thresh) { 75 | 76 | dim3 blocks(DIVUP(boxes_num, threadsPerBlock), 77 | DIVUP(boxes_num, threadsPerBlock)); 78 | dim3 threads(threadsPerBlock); 79 | nms_kernel<<>>(boxes_num, 80 | nms_overlap_thresh, 81 | boxes_dev, 82 | mask_dev); 83 | } 84 | 85 | #ifdef __cplusplus 86 | } 87 | #endif 88 | -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/src/cuda/nms_kernel.h: -------------------------------------------------------------------------------- 1 | #ifndef _NMS_KERNEL 2 | #define _NMS_KERNEL 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #define DIVUP(m,n) ((m) / (n) + ((m) % (n) > 0)) 9 | int const threadsPerBlock = sizeof(unsigned long long) * 8; 10 | 11 | void _nms(int boxes_num, float * boxes_dev, 12 | unsigned long long * mask_dev, float nms_overlap_thresh); 13 | 14 | #ifdef __cplusplus 15 | } 16 | #endif 17 | 18 | #endif 19 | 20 | -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/src/nms.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int cpu_nms(THLongTensor * keep_out, THLongTensor * num_out, THFloatTensor * boxes, THLongTensor * order, THFloatTensor * areas, float nms_overlap_thresh) { 5 | // boxes has to be sorted 6 | THArgCheck(THLongTensor_isContiguous(keep_out), 0, "keep_out must be contiguous"); 7 | THArgCheck(THLongTensor_isContiguous(boxes), 2, "boxes must be contiguous"); 8 | THArgCheck(THLongTensor_isContiguous(order), 3, "order must be contiguous"); 9 | THArgCheck(THLongTensor_isContiguous(areas), 4, "areas must be contiguous"); 10 | // Number of ROIs 11 | long boxes_num = THFloatTensor_size(boxes, 0); 12 | long boxes_dim = THFloatTensor_size(boxes, 1); 13 | 14 | long * keep_out_flat = THLongTensor_data(keep_out); 15 | float * boxes_flat = THFloatTensor_data(boxes); 16 | long * order_flat = THLongTensor_data(order); 17 | float * areas_flat = THFloatTensor_data(areas); 18 | 19 | THByteTensor* suppressed = THByteTensor_newWithSize1d(boxes_num); 20 | THByteTensor_fill(suppressed, 0); 21 | unsigned char * suppressed_flat = THByteTensor_data(suppressed); 22 | 23 | // nominal indices 24 | int i, j; 25 | // sorted indices 26 | int _i, _j; 27 | // temp variables for box i's (the box currently under consideration) 28 | float ix1, iy1, ix2, iy2, iarea; 29 | // variables for computing overlap with box j (lower scoring box) 30 | float xx1, yy1, xx2, yy2; 31 | float w, h; 32 | float inter, ovr; 33 | 34 | long num_to_keep = 0; 35 | for (_i=0; _i < boxes_num; ++_i) { 36 | i = order_flat[_i]; 37 | if (suppressed_flat[i] == 1) { 38 | continue; 39 | } 40 | keep_out_flat[num_to_keep++] = i; 41 | ix1 = boxes_flat[i * boxes_dim]; 42 | iy1 = boxes_flat[i * boxes_dim + 1]; 43 | ix2 = boxes_flat[i * boxes_dim + 2]; 44 | iy2 = boxes_flat[i * boxes_dim + 3]; 45 | iarea = areas_flat[i]; 46 | for (_j = _i + 1; _j < boxes_num; ++_j) { 47 | j = order_flat[_j]; 48 | if (suppressed_flat[j] == 1) { 49 | continue; 50 | } 51 | xx1 = fmaxf(ix1, boxes_flat[j * boxes_dim]); 52 | yy1 = fmaxf(iy1, boxes_flat[j * boxes_dim + 1]); 53 | xx2 = fminf(ix2, boxes_flat[j * boxes_dim + 2]); 54 | yy2 = fminf(iy2, boxes_flat[j * boxes_dim + 3]); 55 | w = fmaxf(0.0, xx2 - xx1 + 1); 56 | h = fmaxf(0.0, yy2 - yy1 + 1); 57 | inter = w * h; 58 | ovr = inter / (iarea + areas_flat[j] - inter); 59 | if (ovr >= nms_overlap_thresh) { 60 | suppressed_flat[j] = 1; 61 | } 62 | } 63 | } 64 | 65 | long *num_out_flat = THLongTensor_data(num_out); 66 | *num_out_flat = num_to_keep; 67 | THByteTensor_free(suppressed); 68 | return 1; 69 | } -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/src/nms.h: -------------------------------------------------------------------------------- 1 | int cpu_nms(THLongTensor * keep_out, THLongTensor * num_out, THFloatTensor * boxes, THLongTensor * order, THFloatTensor * areas, float nms_overlap_thresh); -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/src/nms_cuda.c: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------ 2 | // Faster R-CNN 3 | // Copyright (c) 2015 Microsoft 4 | // Licensed under The MIT License [see fast-rcnn/LICENSE for details] 5 | // Written by Shaoqing Ren 6 | // ------------------------------------------------------------------ 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include "cuda/nms_kernel.h" 13 | 14 | 15 | extern THCState *state; 16 | 17 | int gpu_nms(THLongTensor * keep, THLongTensor* num_out, THCudaTensor * boxes, float nms_overlap_thresh) { 18 | // boxes has to be sorted 19 | THArgCheck(THLongTensor_isContiguous(keep), 0, "boxes must be contiguous"); 20 | THArgCheck(THCudaTensor_isContiguous(state, boxes), 2, "boxes must be contiguous"); 21 | // Number of ROIs 22 | int boxes_num = THCudaTensor_size(state, boxes, 0); 23 | int boxes_dim = THCudaTensor_size(state, boxes, 1); 24 | 25 | float* boxes_flat = THCudaTensor_data(state, boxes); 26 | 27 | const int col_blocks = DIVUP(boxes_num, threadsPerBlock); 28 | THCudaLongTensor * mask = THCudaLongTensor_newWithSize2d(state, boxes_num, col_blocks); 29 | unsigned long long* mask_flat = THCudaLongTensor_data(state, mask); 30 | 31 | _nms(boxes_num, boxes_flat, mask_flat, nms_overlap_thresh); 32 | 33 | THLongTensor * mask_cpu = THLongTensor_newWithSize2d(boxes_num, col_blocks); 34 | THLongTensor_copyCuda(state, mask_cpu, mask); 35 | THCudaLongTensor_free(state, mask); 36 | 37 | unsigned long long * mask_cpu_flat = THLongTensor_data(mask_cpu); 38 | 39 | THLongTensor * remv_cpu = THLongTensor_newWithSize1d(col_blocks); 40 | unsigned long long* remv_cpu_flat = THLongTensor_data(remv_cpu); 41 | THLongTensor_fill(remv_cpu, 0); 42 | 43 | long * keep_flat = THLongTensor_data(keep); 44 | long num_to_keep = 0; 45 | 46 | int i, j; 47 | for (i = 0; i < boxes_num; i++) { 48 | int nblock = i / threadsPerBlock; 49 | int inblock = i % threadsPerBlock; 50 | 51 | if (!(remv_cpu_flat[nblock] & (1ULL << inblock))) { 52 | keep_flat[num_to_keep++] = i; 53 | unsigned long long *p = &mask_cpu_flat[0] + i * col_blocks; 54 | for (j = nblock; j < col_blocks; j++) { 55 | remv_cpu_flat[j] |= p[j]; 56 | } 57 | } 58 | } 59 | 60 | long * num_out_flat = THLongTensor_data(num_out); 61 | * num_out_flat = num_to_keep; 62 | 63 | THLongTensor_free(mask_cpu); 64 | THLongTensor_free(remv_cpu); 65 | 66 | return 1; 67 | } 68 | -------------------------------------------------------------------------------- /torchcv/models/ssd/nms/src/nms_cuda.h: -------------------------------------------------------------------------------- 1 | int gpu_nms(THLongTensor * keep_out, THLongTensor* num_out, THCudaTensor * boxes, float nms_overlap_thresh); -------------------------------------------------------------------------------- /torchcv/transforms/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.transforms.resize import resize 2 | from torchcv.transforms.random_flip import random_flip 3 | from torchcv.transforms.random_crop import random_crop 4 | from torchcv.transforms.random_paste import random_paste 5 | from torchcv.transforms.scale_jitter import scale_jitter 6 | from torchcv.transforms.random_distort import random_distort 7 | -------------------------------------------------------------------------------- /torchcv/transforms/random_crop.py: -------------------------------------------------------------------------------- 1 | '''This random crop strategy is described in paper: 2 | [1] SSD: Single Shot MultiBox Detector 3 | ''' 4 | import math 5 | import torch 6 | import random 7 | 8 | from PIL import Image 9 | from torchcv.utils.box import box_iou, box_clamp 10 | 11 | 12 | def random_crop( 13 | img, boxes, labels, 14 | min_scale=0.3, 15 | max_aspect_ratio=2.): 16 | '''Randomly crop a PIL image. 17 | 18 | Args: 19 | img: (PIL.Image) image. 20 | boxes: (tensor) bounding boxes, sized [#obj, 4]. 21 | labels: (tensor) bounding box labels, sized [#obj,]. 22 | min_scale: (float) minimal image width/height scale. 23 | max_aspect_ratio: (float) maximum width/height aspect ratio. 24 | 25 | Returns: 26 | img: (PIL.Image) cropped image. 27 | boxes: (tensor) object boxes. 28 | labels: (tensor) object labels. 29 | ''' 30 | imw, imh = img.size 31 | params = [(0, 0, imw, imh)] # crop roi (x,y,w,h) out 32 | for min_iou in (0, 0.1, 0.3, 0.5, 0.7, 0.9): 33 | for _ in range(100): 34 | scale = random.uniform(min_scale, 1) 35 | aspect_ratio = random.uniform( 36 | max(1/max_aspect_ratio, scale*scale), 37 | min(max_aspect_ratio, 1/(scale*scale))) 38 | w = int(imw * scale * math.sqrt(aspect_ratio)) 39 | h = int(imh * scale / math.sqrt(aspect_ratio)) 40 | 41 | x = random.randrange(imw - w) 42 | y = random.randrange(imh - h) 43 | 44 | roi = torch.Tensor([[x,y,x+w,y+h]]) 45 | ious = box_iou(boxes, roi) 46 | if ious.min() >= min_iou: 47 | params.append((x,y,w,h)) 48 | break 49 | 50 | x,y,w,h = random.choice(params) 51 | img = img.crop((x,y,x+w,y+h)) 52 | 53 | center = (boxes[:,:2] + boxes[:,2:]) / 2 54 | mask = (center[:,0]>=x) & (center[:,0]<=x+w) \ 55 | & (center[:,1]>=y) & (center[:,1]<=y+h) 56 | if mask.any(): 57 | boxes = boxes[mask.nonzero().squeeze()] - torch.Tensor([x,y,x,y]) 58 | boxes = box_clamp(boxes, 0,0,w,h) 59 | labels = labels[mask] 60 | else: 61 | boxes = torch.Tensor([[0,0,0,0]]) 62 | labels = torch.LongTensor([0]) 63 | return img, boxes, labels 64 | -------------------------------------------------------------------------------- /torchcv/transforms/random_distort.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import random 3 | import torchvision.transforms as transforms 4 | 5 | from PIL import Image 6 | 7 | 8 | def random_distort( 9 | img, 10 | brightness_delta=32/255., 11 | contrast_delta=0.5, 12 | saturation_delta=0.5, 13 | hue_delta=18/255.): 14 | '''A color related data augmentation used in SSD. 15 | 16 | Args: 17 | img: (PIL.Image) image to be color augmented. 18 | brightness_delta: (float) shift of brightness, range from [1-delta,1+delta]. 19 | contrast_delta: (float) shift of contrast, range from [1-delta,1+delta]. 20 | saturation_delta: (float) shift of saturation, range from [1-delta,1+delta]. 21 | hue_delta: (float) shift of hue, range from [-delta,delta]. 22 | 23 | Returns: 24 | img: (PIL.Image) color augmented image. 25 | ''' 26 | def brightness(img, delta): 27 | if random.random() < 0.5: 28 | img = transforms.ColorJitter(brightness=delta)(img) 29 | return img 30 | 31 | def contrast(img, delta): 32 | if random.random() < 0.5: 33 | img = transforms.ColorJitter(contrast=delta)(img) 34 | return img 35 | 36 | def saturation(img, delta): 37 | if random.random() < 0.5: 38 | img = transforms.ColorJitter(saturation=delta)(img) 39 | return img 40 | 41 | def hue(img, delta): 42 | if random.random() < 0.5: 43 | img = transforms.ColorJitter(hue=delta)(img) 44 | return img 45 | 46 | img = brightness(img, brightness_delta) 47 | if random.random() < 0.5: 48 | img = contrast(img, contrast_delta) 49 | img = saturation(img, saturation_delta) 50 | img = hue(img, hue_delta) 51 | else: 52 | img = saturation(img, saturation_delta) 53 | img = hue(img, hue_delta) 54 | img = contrast(img, contrast_delta) 55 | return img 56 | -------------------------------------------------------------------------------- /torchcv/transforms/random_flip.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import random 3 | 4 | from PIL import Image 5 | 6 | 7 | def random_flip(img, boxes): 8 | '''Randomly flip PIL image. 9 | 10 | If boxes is not None, flip boxes accordingly. 11 | 12 | Args: 13 | img: (PIL.Image) image to be flipped. 14 | boxes: (tensor) object boxes, sized [#obj,4]. 15 | 16 | Returns: 17 | img: (PIL.Image) randomly flipped image. 18 | boxes: (tensor) randomly flipped boxes. 19 | ''' 20 | if random.random() < 0.5: 21 | img = img.transpose(Image.FLIP_LEFT_RIGHT) 22 | w = img.width 23 | if boxes is not None: 24 | xmin = w - boxes[:,2] 25 | xmax = w - boxes[:,0] 26 | boxes[:,0] = xmin 27 | boxes[:,2] = xmax 28 | return img, boxes 29 | -------------------------------------------------------------------------------- /torchcv/transforms/random_paste.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import random 3 | 4 | from PIL import Image 5 | 6 | 7 | def random_paste(img, boxes, max_ratio=4, fill=0): 8 | '''Randomly paste the input image on a larger canvas. 9 | 10 | If boxes is not None, adjust boxes accordingly. 11 | 12 | Args: 13 | img: (PIL.Image) image to be flipped. 14 | boxes: (tensor) object boxes, sized [#obj,4]. 15 | max_ratio: (int) maximum ratio of expansion. 16 | fill: (tuple) the RGB value to fill the canvas. 17 | 18 | Returns: 19 | canvas: (PIL.Image) canvas with image pasted. 20 | boxes: (tensor) adjusted object boxes. 21 | ''' 22 | w, h = img.size 23 | ratio = random.uniform(1, max_ratio) 24 | ow, oh = int(w*ratio), int(h*ratio) 25 | canvas = Image.new('RGB', (ow,oh), fill) 26 | 27 | x = random.randint(0, ow - w) 28 | y = random.randint(0, oh - h) 29 | canvas.paste(img, (x,y)) 30 | 31 | if boxes is not None: 32 | boxes = boxes + torch.Tensor([x,y,x,y]) 33 | return canvas, boxes 34 | -------------------------------------------------------------------------------- /torchcv/transforms/resize.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import random 3 | 4 | from PIL import Image 5 | 6 | 7 | def resize(img, boxes, size, max_size=1000, random_interpolation=False): 8 | '''Resize the input PIL image to given size. 9 | 10 | If boxes is not None, resize boxes accordingly. 11 | 12 | Args: 13 | img: (PIL.Image) image to be resized. 14 | boxes: (tensor) object boxes, sized [#obj,4]. 15 | size: (tuple or int) 16 | - if is tuple, resize image to the size. 17 | - if is int, resize the shorter side to the size while maintaining the aspect ratio. 18 | max_size: (int) when size is int, limit the image longer size to max_size. 19 | This is essential to limit the usage of GPU memory. 20 | random_interpolation: (bool) randomly choose a resize interpolation method. 21 | 22 | Returns: 23 | img: (PIL.Image) resized image. 24 | boxes: (tensor) resized boxes. 25 | 26 | Example: 27 | >> img, boxes = resize(img, boxes, 600) # resize shorter side to 600 28 | >> img, boxes = resize(img, boxes, (500,600)) # resize image size to (500,600) 29 | >> img, _ = resize(img, None, (500,600)) # resize image only 30 | ''' 31 | w, h = img.size 32 | if isinstance(size, int): 33 | size_min = min(w,h) 34 | size_max = max(w,h) 35 | sw = sh = float(size) / size_min 36 | if sw * size_max > max_size: 37 | sw = sh = float(max_size) / size_max 38 | ow = int(w * sw + 0.5) 39 | oh = int(h * sh + 0.5) 40 | else: 41 | ow, oh = size 42 | sw = float(ow) / w 43 | sh = float(oh) / h 44 | 45 | method = random.choice([ 46 | Image.BOX, 47 | Image.NEAREST, 48 | Image.HAMMING, 49 | Image.BICUBIC, 50 | Image.LANCZOS, 51 | Image.BILINEAR]) if random_interpolation else Image.BILINEAR 52 | img = img.resize((ow,oh), method) 53 | if boxes is not None: 54 | boxes = boxes * torch.Tensor([sw,sh,sw,sh]) 55 | return img, boxes 56 | -------------------------------------------------------------------------------- /torchcv/transforms/scale_jitter.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import random 3 | 4 | from PIL import Image 5 | 6 | 7 | def scale_jitter(img, boxes, sizes, max_size=1400): 8 | '''Randomly scale image shorter side to one of the sizes. 9 | 10 | If boxes is not None, resize boxes accordingly. 11 | 12 | Args: 13 | img: (PIL.Image) image to be resized. 14 | boxes: (tensor) object boxes, sized [#obj,4]. 15 | sizes: (tuple) scale sizes. 16 | max_size: (int) limit the image longer size to max_size. 17 | 18 | Returns: 19 | img: (PIL.Image) resized image. 20 | boxes: (tensor) resized boxes. 21 | ''' 22 | w, h = img.size 23 | size_min = min(w,h) 24 | size_max = max(w,h) 25 | size = random.choice(sizes) 26 | sw = sh = float(size) / size_min 27 | if sw * size_max > max_size: 28 | sw = sh = float(max_size) / size_max 29 | 30 | ow = int(w * sw + 0.5) 31 | oh = int(h * sh + 0.5) 32 | img = img.resize((ow,oh), Image.BILINEAR) 33 | 34 | if boxes is not None: 35 | boxes = boxes * torch.Tensor([sw,sh,sw,sh]) 36 | return img, boxes 37 | -------------------------------------------------------------------------------- /torchcv/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.utils.box import box_iou 2 | from torchcv.utils.box import box_nms 3 | from torchcv.utils.box import box_clamp 4 | from torchcv.utils.box import box_select 5 | from torchcv.utils.box import change_box_order 6 | 7 | from torchcv.utils.meshgrid import meshgrid 8 | from torchcv.utils.one_hot_embedding import one_hot_embedding 9 | -------------------------------------------------------------------------------- /torchcv/utils/box.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | 4 | def change_box_order(boxes, order): 5 | '''Change box order between (xmin,ymin,xmax,ymax) and (xcenter,ycenter,width,height). 6 | 7 | Args: 8 | boxes: (tensor) bounding boxes, sized [N,4]. 9 | order: (str) either 'xyxy2xywh' or 'xywh2xyxy'. 10 | 11 | Returns: 12 | (tensor) converted bounding boxes, sized [N,4]. 13 | ''' 14 | assert order in ['xyxy2xywh','xywh2xyxy'] 15 | a = boxes[:,:2] 16 | b = boxes[:,2:] 17 | if order == 'xyxy2xywh': 18 | return torch.cat([(a+b)/2,b-a], 1) 19 | return torch.cat([a-b/2,a+b/2], 1) 20 | 21 | def box_clamp(boxes, xmin, ymin, xmax, ymax): 22 | '''Clamp boxes. 23 | 24 | Args: 25 | boxes: (tensor) bounding boxes of (xmin,ymin,xmax,ymax), sized [N,4]. 26 | xmin: (number) min value of x. 27 | ymin: (number) min value of y. 28 | xmax: (number) max value of x. 29 | ymax: (number) max value of y. 30 | 31 | Returns: 32 | (tensor) clamped boxes. 33 | ''' 34 | boxes[:,0].clamp_(min=xmin, max=xmax) 35 | boxes[:,1].clamp_(min=ymin, max=ymax) 36 | boxes[:,2].clamp_(min=xmin, max=xmax) 37 | boxes[:,3].clamp_(min=ymin, max=ymax) 38 | return boxes 39 | 40 | def box_select(boxes, xmin, ymin, xmax, ymax): 41 | '''Select boxes in range (xmin,ymin,xmax,ymax). 42 | 43 | Args: 44 | boxes: (tensor) bounding boxes of (xmin,ymin,xmax,ymax), sized [N,4]. 45 | xmin: (number) min value of x. 46 | ymin: (number) min value of y. 47 | xmax: (number) max value of x. 48 | ymax: (number) max value of y. 49 | 50 | Returns: 51 | (tensor) selected boxes, sized [M,4]. 52 | (tensor) selected mask, sized [N,]. 53 | ''' 54 | mask = (boxes[:,0]>=xmin) & (boxes[:,1]>=ymin) \ 55 | & (boxes[:,2]<=xmax) & (boxes[:,3]<=ymax) 56 | boxes = boxes[mask.nonzero().squeeze(),:] 57 | return boxes, mask 58 | 59 | def box_iou(box1, box2): 60 | '''Compute the intersection over union of two set of boxes. 61 | 62 | The box order must be (xmin, ymin, xmax, ymax). 63 | 64 | Args: 65 | box1: (tensor) bounding boxes, sized [N,4]. 66 | box2: (tensor) bounding boxes, sized [M,4]. 67 | 68 | Return: 69 | (tensor) iou, sized [N,M]. 70 | 71 | Reference: 72 | https://github.com/chainer/chainercv/blob/master/chainercv/utils/bbox/bbox_iou.py 73 | ''' 74 | N = box1.size(0) 75 | M = box2.size(0) 76 | 77 | lt = torch.max(box1[:,None,:2], box2[:,:2]) # [N,M,2] 78 | rb = torch.min(box1[:,None,2:], box2[:,2:]) # [N,M,2] 79 | 80 | wh = (rb-lt).clamp(min=0) # [N,M,2] 81 | inter = wh[:,:,0] * wh[:,:,1] # [N,M] 82 | 83 | area1 = (box1[:,2]-box1[:,0]) * (box1[:,3]-box1[:,1]) # [N,] 84 | area2 = (box2[:,2]-box2[:,0]) * (box2[:,3]-box2[:,1]) # [M,] 85 | iou = inter / (area1[:,None] + area2 - inter) 86 | return iou 87 | 88 | import numpy as np 89 | def box_nms_numpy(bboxes, scores=None, threshold=0.5, limit=None): 90 | bboxes = bboxes.numpy() 91 | scores = scores.numpy() 92 | if len(bboxes) == 0: 93 | return np.zeros((0,), dtype=np.int32) 94 | 95 | if scores is not None: 96 | order = scores.argsort()[::-1] 97 | bboxes = bboxes[order] 98 | bbox_area = np.prod(bboxes[:, 2:] - bboxes[:, :2], axis=1) 99 | 100 | selec = np.zeros(bboxes.shape[0], dtype=bool) 101 | for i, b in enumerate(bboxes): 102 | tl = np.maximum(b[:2], bboxes[selec, :2]) 103 | br = np.minimum(b[2:], bboxes[selec, 2:]) 104 | area = np.prod(br - tl, axis=1) * (tl < br).all(axis=1) 105 | 106 | iou = area / (bbox_area[i] + bbox_area[selec] - area) 107 | if (iou >= threshold).any(): 108 | continue 109 | 110 | selec[i] = True 111 | if limit is not None and np.count_nonzero(selec) >= limit: 112 | break 113 | 114 | selec = np.where(selec)[0] 115 | if scores is not None: 116 | selec = order[selec] 117 | return torch.from_numpy(selec).long() 118 | 119 | def box_nms(bboxes, scores, threshold=0.5, mode='union'): 120 | '''Non maximum suppression. 121 | 122 | Args: 123 | bboxes: (tensor) bounding boxes, sized [N,4]. 124 | scores: (tensor) confidence scores, sized [N,]. 125 | threshold: (float) overlap threshold. 126 | mode: (str) 'union' or 'min'. 127 | 128 | Returns: 129 | keep: (tensor) selected indices. 130 | 131 | Reference: 132 | https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/nms/py_cpu_nms.py 133 | ''' 134 | x1 = bboxes[:,0] 135 | y1 = bboxes[:,1] 136 | x2 = bboxes[:,2] 137 | y2 = bboxes[:,3] 138 | 139 | areas = (x2-x1) * (y2-y1) 140 | _, order = scores.sort(0, descending=True) 141 | 142 | keep = [] 143 | while order.numel() > 0: 144 | i = order[0] 145 | keep.append(i) 146 | 147 | if order.numel() == 1: 148 | break 149 | 150 | xx1 = x1[order[1:]].clamp(min=x1[i]) 151 | yy1 = y1[order[1:]].clamp(min=y1[i]) 152 | xx2 = x2[order[1:]].clamp(max=x2[i]) 153 | yy2 = y2[order[1:]].clamp(max=y2[i]) 154 | 155 | w = (xx2-xx1).clamp(min=0) 156 | h = (yy2-yy1).clamp(min=0) 157 | inter = w*h 158 | 159 | if mode == 'union': 160 | ovr = inter / (areas[i] + areas[order[1:]] - inter) 161 | elif mode == 'min': 162 | ovr = inter / areas[order[1:]].clamp(max=areas[i]) 163 | else: 164 | raise TypeError('Unknown nms mode: %s.' % mode) 165 | 166 | ids = (ovr<=threshold).nonzero().squeeze() 167 | if ids.numel() == 0: 168 | break 169 | order = order[ids+1] 170 | return torch.LongTensor(keep) 171 | -------------------------------------------------------------------------------- /torchcv/utils/config.py: -------------------------------------------------------------------------------- 1 | from pprint import pprint 2 | class Config: 3 | lr = 0.1 4 | resume = False 5 | checkpoint = '/home/claude.cy/file/ssd/checkpoint/' 6 | data_root = '/home/claude.cy/.data/all_images' 7 | voc07_trainval = 'torchcv/datasets/voc/voc07_trainval.txt' 8 | voc12_trainval = 'torchcv/datasets/voc/voc12_trainval.txt' 9 | voc07_test = 'torchcv/datasets/voc/voc07_test.txt' 10 | batch_size = 32 11 | num_worker = 8 12 | plot_every = 20 13 | debug_file = '/tmp/debugdsod' 14 | load_path = None #'examples/ssd/checkpoint/ckpt.pth' 15 | img_size = 300 16 | env = 'dsod' 17 | iter_size = 4 18 | eval_every=5 19 | 20 | def _parse(self, kwargs): 21 | state_dict = self._state_dict() 22 | for k, v in kwargs.items(): 23 | if k not in state_dict: 24 | raise ValueError('UnKnown Option: "--%s"' % k) 25 | setattr(self, k, v) 26 | 27 | print('======user config========') 28 | pprint(self._state_dict()) 29 | print('==========end============') 30 | 31 | def _state_dict(self): 32 | return {k: getattr(self, k) for k, _ in Config.__dict__.items() \ 33 | if not k.startswith('_')} 34 | 35 | 36 | opt = Config() 37 | -------------------------------------------------------------------------------- /torchcv/utils/meshgrid.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | 4 | def meshgrid(x, y, row_major=True): 5 | '''Return meshgrid in range x & y. 6 | 7 | Args: 8 | x: (int) first dim range. 9 | y: (int) second dim range. 10 | row_major: (bool) row major or column major. 11 | 12 | Returns: 13 | (tensor) meshgrid, sized [x*y,2] 14 | 15 | Example: 16 | >> meshgrid(3,2) 17 | 0 0 18 | 1 0 19 | 2 0 20 | 0 1 21 | 1 1 22 | 2 1 23 | [torch.FloatTensor of size 6x2] 24 | 25 | >> meshgrid(3,2,row_major=False) 26 | 0 0 27 | 0 1 28 | 0 2 29 | 1 0 30 | 1 1 31 | 1 2 32 | [torch.FloatTensor of size 6x2] 33 | ''' 34 | a = torch.arange(0,x) 35 | b = torch.arange(0,y) 36 | xx = a.repeat(y).view(-1,1) 37 | yy = b.view(-1,1).repeat(1,x).view(-1,1) 38 | return torch.cat([xx,yy],1) if row_major else torch.cat([yy,xx],1) 39 | -------------------------------------------------------------------------------- /torchcv/utils/one_hot_embedding.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | 4 | def one_hot_embedding(labels, num_classes): 5 | '''Embedding labels to one-hot. 6 | 7 | Args: 8 | labels: (LongTensor) class labels, sized [N,]. 9 | num_classes: (int) number of classes. 10 | 11 | Returns: 12 | (tensor) encoded labels, sized [N,#classes]. 13 | ''' 14 | y = torch.eye(num_classes) # [D,D] 15 | return y[labels] # [N,D] 16 | -------------------------------------------------------------------------------- /torchcv/visualizations/__init__.py: -------------------------------------------------------------------------------- 1 | from torchcv.visualizations.vis_image import vis_image 2 | from torchcv.visualizations.visdom import Visualizer 3 | -------------------------------------------------------------------------------- /torchcv/visualizations/vis_image.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torchvision 3 | import matplotlib.pyplot as plt 4 | 5 | 6 | def vis_image(img, boxes=None, label_names=None, scores=None): 7 | '''Visualize a color image. 8 | 9 | Args: 10 | img: (PIL.Image/tensor) image to visualize. 11 | boxes: (tensor) bounding boxes, sized [#obj, 4]. 12 | label_names: (list) label names. 13 | scores: (list) confidence scores. 14 | 15 | Reference: 16 | https://github.com/chainer/chainercv/blob/master/chainercv/visualizations/vis_bbox.py 17 | https://github.com/chainer/chainercv/blob/master/chainercv/visualizations/vis_image.py 18 | ''' 19 | # Plot image 20 | fig = plt.figure() 21 | ax = fig.add_subplot(1, 1, 1) 22 | if isinstance(img, torch.Tensor): 23 | img = torchvision.transforms.ToPILImage()(img) 24 | ax.imshow(img) 25 | 26 | # Plot boxes 27 | if boxes is not None: 28 | for i, bb in enumerate(boxes): 29 | xy = (bb[0], bb[1]) 30 | width = bb[2] - bb[0] + 1 31 | height = bb[3] - bb[1] + 1 32 | 33 | ax.add_patch(plt.Rectangle( 34 | xy, width, height, fill=False, edgecolor='red', linewidth=2)) 35 | 36 | caption = [] 37 | if label_names is not None: 38 | caption.append(label_names[i]) 39 | 40 | if scores is not None: 41 | caption.append('{:.2f}'.format(scores[i])) 42 | 43 | if len(caption) > 0: 44 | ax.text(bb[0], bb[1], 45 | ': '.join(caption), 46 | style='italic', 47 | bbox={'facecolor': 'white', 'alpha': 0.7, 'pad': 10}) 48 | # Show 49 | plt.show() 50 | -------------------------------------------------------------------------------- /torchcv/visualizations/visdom.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | import numpy as np 4 | import matplotlib 5 | import torch as t 6 | import visdom 7 | 8 | matplotlib.use('Agg') 9 | from matplotlib import pyplot as plot 10 | 11 | # from data.voc_dataset import VOC_BBOX_LABEL_NAMES 12 | 13 | 14 | VOC_BBOX_LABEL_NAMES = ( 15 | 'fly', 16 | 'bike', 17 | 'bird', 18 | 'boat', 19 | 'pin', 20 | 'bus', 21 | 'c', 22 | 'cat', 23 | 'chair', 24 | 'cow', 25 | 'table', 26 | 'dog', 27 | 'horse', 28 | 'moto', 29 | 'p', 30 | 'plant', 31 | 'shep', 32 | 'sofa', 33 | 'train', 34 | 'tv', 35 | ) 36 | 37 | 38 | def vis_image(img, ax=None): 39 | """Visualize a color image. 40 | Args: 41 | img (~numpy.ndarray): An array of shape :math:`(3, height, width)`. 42 | This is in RGB format and the range of its value is 43 | :math:`[0, 255]`. 44 | ax (matplotlib.axes.Axis): The visualization is displayed on this 45 | axis. If this is :obj:`None` (default), a new axis is created. 46 | Returns: 47 | ~matploblib.axes.Axes: 48 | Returns the Axes object with the plot for further tweaking. 49 | """ 50 | 51 | if ax is None: 52 | fig = plot.figure() 53 | ax = fig.add_subplot(1, 1, 1) 54 | # CHW -> HWC 55 | img = img.transpose((1, 2, 0)) 56 | ax.imshow(img.astype(np.uint8)) 57 | return ax 58 | 59 | 60 | def vis_bbox(img, bbox, label=None, score=None, ax=None): 61 | """Visualize bounding boxes inside image. 62 | Args: 63 | img (~numpy.ndarray): An array of shape :math:`(3, height, width)`. 64 | This is in RGB format and the range of its value is 65 | :math:`[0, 255]`. 66 | bbox (~numpy.ndarray): An array of shape :math:`(R, 4)`, where 67 | :math:`R` is the number of bounding boxes in the image. 68 | Each element is organized 69 | by :math:`(y_{min}, x_{min}, y_{max}, x_{max})` in the second axis. 70 | label (~numpy.ndarray): An integer array of shape :math:`(R,)`. 71 | The values correspond to id for label names stored in 72 | :obj:`label_names`. This is optional. 73 | score (~numpy.ndarray): A float array of shape :math:`(R,)`. 74 | Each value indicates how confident the prediction is. 75 | This is optional. 76 | label_names (iterable of strings): Name of labels ordered according 77 | to label ids. If this is :obj:`None`, labels will be skipped. 78 | ax (matplotlib.axes.Axis): The visualization is displayed on this 79 | axis. If this is :obj:`None` (default), a new axis is created. 80 | Returns: 81 | ~matploblib.axes.Axes: 82 | Returns the Axes object with the plot for further tweaking. 83 | """ 84 | 85 | label_names = list(VOC_BBOX_LABEL_NAMES) + ['bg'] 86 | # add for index `-1` 87 | if label is not None and not len(bbox) == len(label): 88 | raise ValueError('The length of label must be same as that of bbox') 89 | if score is not None and not len(bbox) == len(score): 90 | raise ValueError('The length of score must be same as that of bbox') 91 | 92 | # Returns newly instantiated matplotlib.axes.Axes object if ax is None 93 | ax = vis_image(img, ax=ax) 94 | 95 | # If there is no bounding box to display, visualize the image and exit. 96 | if len(bbox) == 0: 97 | return ax 98 | 99 | for i, bb in enumerate(bbox): 100 | xy = (bb[1], bb[0]) 101 | height = bb[2] - bb[0] 102 | width = bb[3] - bb[1] 103 | ax.add_patch(plot.Rectangle( 104 | xy, width, height, fill=False, edgecolor='red', linewidth=2)) 105 | 106 | caption = list() 107 | 108 | if label is not None and label_names is not None: 109 | lb = label[i] 110 | if not (-1 <= lb < len(label_names)): # modfy here to add backgroud 111 | raise ValueError('No corresponding name is given') 112 | caption.append(label_names[lb]) 113 | if score is not None: 114 | sc = score[i] 115 | caption.append('{:.2f}'.format(sc)) 116 | 117 | if len(caption) > 0: 118 | ax.text(bb[1], bb[0], 119 | ': '.join(caption), 120 | style='italic', 121 | bbox={'facecolor': 'white', 'alpha': 0.5, 'pad': 0}) 122 | return ax 123 | 124 | 125 | def fig2data(fig): 126 | """ 127 | brief Convert a Matplotlib figure to a 4D numpy array with RGBA 128 | channels and return it 129 | @param fig: a matplotlib figure 130 | @return a numpy 3D array of RGBA values 131 | """ 132 | # draw the renderer 133 | fig.canvas.draw() 134 | 135 | # Get the RGBA buffer from the figure 136 | w, h = fig.canvas.get_width_height() 137 | buf = np.fromstring(fig.canvas.tostring_argb(), dtype=np.uint8) 138 | buf.shape = (w, h, 4) 139 | 140 | # canvas.tostring_argb give pixmap in ARGB mode. Roll the ALPHA channel to have it in RGBA mode 141 | buf = np.roll(buf, 3, axis=2) 142 | return buf.reshape(h, w, 4) 143 | 144 | 145 | def fig4vis(fig): 146 | """ 147 | convert figure to ndarray 148 | """ 149 | ax = fig.get_figure() 150 | img_data = fig2data(ax).astype(np.int32) 151 | plot.close() 152 | # HWC->CHW 153 | return img_data[:, :, :3].transpose((2, 0, 1)) / 255. 154 | 155 | 156 | def visdom_bbox(*args, **kwargs): 157 | fig = vis_bbox(*args, **kwargs) 158 | data = fig4vis(fig) 159 | return data 160 | 161 | 162 | class Visualizer(object): 163 | """ 164 | wrapper for visdom 165 | you can still access naive visdom function by 166 | self.line, self.scater,self._send,etc. 167 | due to the implementation of `__getattr__` 168 | """ 169 | 170 | def __init__(self, env='default', **kwargs): 171 | self.vis = visdom.Visdom(env=env, **kwargs) 172 | self._vis_kw = kwargs 173 | 174 | # e.g.(’loss',23) the 23th value of loss 175 | self.index = {} 176 | self.log_text = '' 177 | 178 | def reinit(self, env='default', **kwargs): 179 | """ 180 | change the config of visdom 181 | """ 182 | self.vis = visdom.Visdom(env=env, **kwargs) 183 | return self 184 | 185 | def plot_many(self, d): 186 | """ 187 | plot multi values 188 | @params d: dict (name,value) i.e. ('loss',0.11) 189 | """ 190 | for k, v in d.items(): 191 | if v is not None: 192 | self.plot(k, v) 193 | 194 | def img_many(self, d): 195 | for k, v in d.items(): 196 | self.img(k, v) 197 | 198 | def plot(self, name, y, **kwargs): 199 | """ 200 | self.plot('loss',1.00) 201 | """ 202 | x = self.index.get(name, 0) 203 | self.vis.line(Y=np.array([y]), X=np.array([x]), 204 | win=name, 205 | opts=dict(title=name), 206 | update=None if x == 0 else 'append', 207 | **kwargs 208 | ) 209 | self.index[name] = x + 1 210 | 211 | def img(self, name, img_, **kwargs): 212 | """ 213 | self.img('input_img',t.Tensor(64,64)) 214 | self.img('input_imgs',t.Tensor(3,64,64)) 215 | self.img('input_imgs',t.Tensor(100,1,64,64)) 216 | self.img('input_imgs',t.Tensor(100,3,64,64),nrows=10) 217 | !!!don‘t ~~self.img('input_imgs',t.Tensor(100,64,64),nrows=10)~~!!! 218 | """ 219 | self.vis.images(t.Tensor(img_).cpu().numpy(), 220 | win=name, 221 | opts=dict(title=name), 222 | **kwargs 223 | ) 224 | 225 | def log(self, info, win='log_text'): 226 | """ 227 | self.log({'loss':1,'lr':0.0001}) 228 | """ 229 | self.log_text += ('[{time}] {info}
'.format( 230 | time=time.strftime('%m%d_%H%M%S'), \ 231 | info=info)) 232 | self.vis.text(self.log_text, win) 233 | 234 | def __getattr__(self, name): 235 | return getattr(self.vis, name) 236 | 237 | def state_dict(self): 238 | return { 239 | 'index': self.index, 240 | 'vis_kw': self._vis_kw, 241 | 'log_text': self.log_text, 242 | 'env': self.vis.env 243 | } 244 | 245 | def load_state_dict(self, d): 246 | self.vis = visdom.Visdom(env=d.get('env', self.vis.env), **(self.d.get('vis_kw'))) 247 | self.log_text = d.get('log_text', '') 248 | self.index = d.get('index', dict()) 249 | return self --------------------------------------------------------------------------------