From e5492786b1cece71c3557b7575b7ddd87061b09f Mon Sep 17 00:00:00 2001 From: smoky Date: Tue, 2 Jan 2018 16:23:27 +0900 Subject: [PATCH 01/13] modify create_tf_record_from_db.py --- stylelens/object_detection/create_tf_record_from_db.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/stylelens/object_detection/create_tf_record_from_db.py b/stylelens/object_detection/create_tf_record_from_db.py index 6f6ff5f..df9352c 100644 --- a/stylelens/object_detection/create_tf_record_from_db.py +++ b/stylelens/object_detection/create_tf_record_from_db.py @@ -96,13 +96,8 @@ def dict_to_tf_example(data, image_subdirectory='JPEGImages'): ymax.append(float(data['bbox']['y2']) / height) classes_text.append(data['category_name'].encode('utf8')) classes.append(int(data['category_class'])) -<<<<<<< Updated upstream - difficult = int([0]) - truncated = int([0]) -======= difficult = [0] truncated = [0] ->>>>>>> Stashed changes poses.append('Frontal'.encode('utf8')) example = tf.train.Example(features=tf.train.Features(feature={ From 0c837c448397eaeea39ea047a62418c2c8184b5a Mon Sep 17 00:00:00 2001 From: smoky Date: Thu, 4 Jan 2018 11:06:45 +0900 Subject: [PATCH 02/13] make get_object_by_fabric.py --- .../get_object_by_fabric.py | 69 ++++++ .../get_object_by_fabric.sh | 11 + .../list_attr_cloth_fabric.txt | 218 ++++++++++++++++++ .../ssd_inception_v2_3class.config | 2 +- 4 files changed, 299 insertions(+), 1 deletion(-) create mode 100644 stylelens/attr_classification/get_object_by_fabric.py create mode 100755 stylelens/attr_classification/get_object_by_fabric.sh create mode 100644 stylelens/attr_classification/list_attr_cloth_fabric.txt diff --git a/stylelens/attr_classification/get_object_by_fabric.py b/stylelens/attr_classification/get_object_by_fabric.py new file mode 100644 index 0000000..bc6ad5a --- /dev/null +++ b/stylelens/attr_classification/get_object_by_fabric.py @@ -0,0 +1,69 @@ +from __future__ import print_function +from stylelens_dataset.objects import Objects +from pprint import pprint +import os +import tensorboard as tf +import urllib.request as urllib + +ATTR_CLOTH_FILE = './list_attr_cloth_fabric.txt' + +api_instance = Objects() + +flags = tf.app.flags +flags.DEFINE_string('fabric_dataset_path', '', 'Path to fabric_dataset_path') +FLAGS = flags.FLAGS + +def get_attribute_clothes(): + attr_cloth = open(ATTR_CLOTH_FILE, 'r') + attribute_clothes = [] + for pair in attr_cloth.readlines(): + map = pair.strip().rsplit(' ', 1) + attr = {} + attr['name'] = map[0].strip() + attr['type'] = map[1] + attribute_clothes.append(attr) + return attribute_clothes + + +def download_image_from_url(url, filename): + try: + urllib.urlretrieve(url, filename) + except urllib.HTTPError: + pass + +def main(_): + fabric_dataset_path = FLAGS.fabric_dataset_path + try: + + attrs = get_attribute_clothes() + + for attr in attrs: + print(attr['name']) + + offset = 0 + limit = 100 + + + os.chdir(fabric_dataset_path) + try: + os.mkdir(attr['name']) + except FileExistsError: + pass + os.chdir(attr['name']) + + while True: + res = api_instance.get_objects_by_fabric(attr['name'], offset=offset, limit=limit) + # save image by fabric attr + for idx in range(len(res)): + url = res[idx]['url'] + _id = str(res[idx]['_id']) + filename = _id + '.jpg' + print(res[idx]) + download_image_from_url(url, str(filename)) + if limit > len(res): + break + else: + offset = offset + limit + + except Exception as e: + print("Exception when calling get_images_by_source: %s\n" % e) diff --git a/stylelens/attr_classification/get_object_by_fabric.sh b/stylelens/attr_classification/get_object_by_fabric.sh new file mode 100755 index 0000000..3743794 --- /dev/null +++ b/stylelens/attr_classification/get_object_by_fabric.sh @@ -0,0 +1,11 @@ +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export DB_DATASET_HOST="35.187.193.199" +export DB_DATASET_NAME="bl-db-dataset" +export DB_DATASET_PORT="27017" +#export DATASET_PATH='gs://bluelens-style-model/object_detection' + +echo $PYTHONPATH + +python get_object_by_fabric.py \ + --fabric_dataset_path=/home/lion/fabric_dataset diff --git a/stylelens/attr_classification/list_attr_cloth_fabric.txt b/stylelens/attr_classification/list_attr_cloth_fabric.txt new file mode 100644 index 0000000..f401f95 --- /dev/null +++ b/stylelens/attr_classification/list_attr_cloth_fabric.txt @@ -0,0 +1,218 @@ +acid 2 +acid wash 2 +applique 2 +bead 2 +beaded 2 +beaded chiffon 2 +beaded sheer 2 +bejeweled 2 +bleach 2 +bleached 2 +bleached denim 2 +brocade 2 +burnout 2 +cable 2 +cable knit 2 +cable-knit 2 +canvas 2 +chambray 2 +chambray drawstring 2 +chenille 2 +chiffon 2 +chiffon lace 2 +chiffon layered 2 +chiffon shirt 2 +chino 2 +chunky 2 +chunky knit 2 +classic cotton 2 +classic denim 2 +classic knit 2 +classic woven 2 +clean 2 +clean wash 2 +cloud 2 +cloud wash 2 +coated 2 +corduroy 2 +cotton 2 +cotton drawstring 2 +cotton knit 2 +cotton-blend 2 +crepe 2 +crepe woven 2 +crinkled 2 +crochet 2 +crochet embroidered 2 +crochet knit 2 +crochet lace 2 +crochet mesh 2 +crochet overlay 2 +crocheted 2 +crocheted lace 2 +cuffed denim 2 +cutout lace 2 +damask 2 +denim 2 +denim drawstring 2 +denim shirt 2 +denim utility 2 +dip-dye 2 +dip-dyed 2 +distressed 2 +dye 2 +elasticized 2 +embellished 2 +embroidered 2 +embroidered gauze 2 +embroidered lace 2 +embroidered mesh 2 +embroidered woven 2 +embroidery 2 +eyelash 2 +eyelash knit 2 +eyelash lace 2 +eyelet 2 +faded 2 +fair 2 +fair isle 2 +faux 2 +faux fur 2 +faux leather 2 +faux shearling 2 +faux suede 2 +feather 2 +floral knit 2 +floral lace 2 +floral mesh 2 +foulard 2 +frayed 2 +french 2 +french terry 2 +fur 2 +fuzzy 2 +fuzzy knit 2 +gauze 2 +gauzy 2 +gem 2 +georgette 2 +gingham 2 +glass 2 +glitter 2 +heathered 2 +heathered knit 2 +herringbone 2 +jacquard 2 +knit 2 +knit lace 2 +lace 2 +lace layered 2 +lace mesh 2 +lace overlay 2 +lace panel 2 +lace paneled 2 +lace pleated 2 +lace print 2 +lace sheer 2 +lace-paneled 2 +lacy 2 +lattice 2 +layered 2 +leather 2 +leather paneled 2 +leather quilted 2 +leather-paneled 2 +led 2 +loop 2 +loose 2 +loose-knit 2 +mesh 2 +mesh overlay 2 +mesh panel 2 +mesh paneled 2 +mesh-paneled 2 +metallic 2 +mineral 2 +mineral wash 2 +neon 2 +neoprene 2 +nets 2 +netted 2 +nylon 2 +oil 2 +organza 2 +origami 2 +overlay 2 +panel 2 +paneled 2 +patched 2 +patchwork 2 +perforated 2 +pima 2 +pintuck 2 +pintuck pleated 2 +pintucked 2 +plaid 2 +plaid shirt 2 +pleat 2 +pleated 2 +pleated woven 2 +pointelle 2 +ponte 2 +print satin 2 +print scuba 2 +purl 2 +quilted 2 +rhinestone 2 +rib 2 +rib-knit 2 +ribbed 2 +ribbed-knit 2 +ripped 2 +ruched 2 +ruffle 2 +ruffled 2 +sateen 2 +satin 2 +scuba 2 +seam 2 +seamless 2 +seersucker 2 +semi-sheer 2 +sequin 2 +sequined 2 +shaggy 2 +shearling 2 +sheer 2 +sheer-paneled 2 +shirred 2 +shredded 2 +sleek 2 +slick 2 +slub 2 +slub-knit 2 +sparkling 2 +stone 2 +stone washed 2 +stones 2 +stretch 2 +stretch-knit 2 +studded 2 +suede 2 +tapestry 2 +tartan 2 +terry 2 +textured 2 +textured woven 2 +tie-dye 2 +tiered 2 +tile 2 +tulle 2 +tweed 2 +twill 2 +velvet 2 +velveteen 2 +waffle 2 +wash 2 +washed 2 +woven 2 diff --git a/stylelens/object_detection/ssd_inception_v2_3class.config b/stylelens/object_detection/ssd_inception_v2_3class.config index ce0ea0b..0ee37d0 100644 --- a/stylelens/object_detection/ssd_inception_v2_3class.config +++ b/stylelens/object_detection/ssd_inception_v2_3class.config @@ -155,7 +155,7 @@ train_config: { # empirically found to be sufficient enough to train the pets dataset. This # effectively bypasses the learning rate schedule (the learning rate will # never decay). Remove the below line to train indefinitely. - num_steps: 200000 + # num_steps: 200000 data_augmentation_options { random_horizontal_flip { } From 1a53e794196fcff7f349b961f6abb86ef31c9f9c Mon Sep 17 00:00:00 2001 From: "lion@MAGI-7G" Date: Thu, 4 Jan 2018 11:18:51 +0900 Subject: [PATCH 03/13] object_detectoin merge --- stylelens/object_detection/create_od_train_record.sh | 4 ++-- stylelens/object_detection/create_tf_record_from_db.py | 7 +------ stylelens/object_detection/train.sh | 1 + 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/stylelens/object_detection/create_od_train_record.sh b/stylelens/object_detection/create_od_train_record.sh index 373e738..526e5f5 100755 --- a/stylelens/object_detection/create_od_train_record.sh +++ b/stylelens/object_detection/create_od_train_record.sh @@ -8,5 +8,5 @@ export DB_DATASET_PORT="27017" echo $PYTHONPATH python create_tf_record_from_db.py \ - --train_output_path=./train.record \ - --eval_output_path=./eval.record + --train_output_path=./tfrecord_dataset/train.record \ + --eval_output_path=./tfrecord_dataset/eval.record diff --git a/stylelens/object_detection/create_tf_record_from_db.py b/stylelens/object_detection/create_tf_record_from_db.py index 6f6ff5f..be6c9a6 100644 --- a/stylelens/object_detection/create_tf_record_from_db.py +++ b/stylelens/object_detection/create_tf_record_from_db.py @@ -71,7 +71,7 @@ def dict_to_tf_example(data, image_subdirectory='JPEGImages'): is not a valid JPEG """ - full_path = os.path.join('/dataset', data['file']) + full_path = os.path.join('/home/lion/dataset', data['file']) with tf.gfile.GFile(full_path, 'rb') as fid: encoded_jpg = fid.read() encoded_jpg_io = io.BytesIO(encoded_jpg) @@ -96,13 +96,8 @@ def dict_to_tf_example(data, image_subdirectory='JPEGImages'): ymax.append(float(data['bbox']['y2']) / height) classes_text.append(data['category_name'].encode('utf8')) classes.append(int(data['category_class'])) -<<<<<<< Updated upstream - difficult = int([0]) - truncated = int([0]) -======= difficult = [0] truncated = [0] ->>>>>>> Stashed changes poses.append('Frontal'.encode('utf8')) example = tf.train.Example(features=tf.train.Features(feature={ diff --git a/stylelens/object_detection/train.sh b/stylelens/object_detection/train.sh index df79884..e284486 100755 --- a/stylelens/object_detection/train.sh +++ b/stylelens/object_detection/train.sh @@ -8,5 +8,6 @@ export MODEL_BASE_PATH='/home/lion/dataset/deepfashion3' python ./train.py \ --logtostderr \ + --num_clones 7 \ --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ --train_dir=$MODEL_BASE_PATH/models/model/train From 0754fa300cf485b8933a9648adf01e29a8840084 Mon Sep 17 00:00:00 2001 From: "lion@MAGI-7G" Date: Fri, 5 Jan 2018 13:34:00 +0900 Subject: [PATCH 04/13] modify get_object_by_fabric.py --- .../attr_classification/get_object_by_fabric.py | 13 ++++++++----- .../attr_classification/get_object_by_fabric.sh | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/stylelens/attr_classification/get_object_by_fabric.py b/stylelens/attr_classification/get_object_by_fabric.py index bc6ad5a..b675cb1 100644 --- a/stylelens/attr_classification/get_object_by_fabric.py +++ b/stylelens/attr_classification/get_object_by_fabric.py @@ -2,7 +2,8 @@ from stylelens_dataset.objects import Objects from pprint import pprint import os -import tensorboard as tf +import time +import tensorflow as tf import urllib.request as urllib ATTR_CLOTH_FILE = './list_attr_cloth_fabric.txt' @@ -31,25 +32,25 @@ def download_image_from_url(url, filename): except urllib.HTTPError: pass + def main(_): fabric_dataset_path = FLAGS.fabric_dataset_path + # time.sleep(7200) try: attrs = get_attribute_clothes() - for attr in attrs: print(attr['name']) - offset = 0 limit = 100 - os.chdir(fabric_dataset_path) try: os.mkdir(attr['name']) except FileExistsError: pass os.chdir(attr['name']) + while True: res = api_instance.get_objects_by_fabric(attr['name'], offset=offset, limit=limit) @@ -58,7 +59,6 @@ def main(_): url = res[idx]['url'] _id = str(res[idx]['_id']) filename = _id + '.jpg' - print(res[idx]) download_image_from_url(url, str(filename)) if limit > len(res): break @@ -67,3 +67,6 @@ def main(_): except Exception as e: print("Exception when calling get_images_by_source: %s\n" % e) + +if __name__ == '__main__': + tf.app.run() diff --git a/stylelens/attr_classification/get_object_by_fabric.sh b/stylelens/attr_classification/get_object_by_fabric.sh index 3743794..cc3537f 100755 --- a/stylelens/attr_classification/get_object_by_fabric.sh +++ b/stylelens/attr_classification/get_object_by_fabric.sh @@ -1,4 +1,4 @@ -source activate bl-magi +#source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim export DB_DATASET_HOST="35.187.193.199" export DB_DATASET_NAME="bl-db-dataset" @@ -8,4 +8,4 @@ export DB_DATASET_PORT="27017" echo $PYTHONPATH python get_object_by_fabric.py \ - --fabric_dataset_path=/home/lion/fabric_dataset + --fabric_dataset_path=/home/lion/fabric_dataset/ From a4c1604157520c7ab233bcfbb92fa0b203351a23 Mon Sep 17 00:00:00 2001 From: smoky Date: Fri, 5 Jan 2018 13:41:03 +0900 Subject: [PATCH 05/13] make attr_classification --- .../inceptionv3_retrain.py | 1080 +++++++++++++++++ .../retrain_run_inference.py | 55 + .../deepfashion}/get_object_by_fabric.py | 0 .../deepfashion}/get_object_by_fabric.sh | 0 .../deepfashion}/list_attr_cloth_fabric.txt | 0 5 files changed, 1135 insertions(+) create mode 100644 stylelens/attr_classification/inceptionv3_retrain.py create mode 100644 stylelens/attr_classification/retrain_run_inference.py rename stylelens/{attr_classification => dataset/deepfashion}/get_object_by_fabric.py (100%) rename stylelens/{attr_classification => dataset/deepfashion}/get_object_by_fabric.sh (100%) rename stylelens/{attr_classification => dataset/deepfashion}/list_attr_cloth_fabric.txt (100%) diff --git a/stylelens/attr_classification/inceptionv3_retrain.py b/stylelens/attr_classification/inceptionv3_retrain.py new file mode 100644 index 0000000..e275fbd --- /dev/null +++ b/stylelens/attr_classification/inceptionv3_retrain.py @@ -0,0 +1,1080 @@ +# -*- coding: utf-8 -*- + +"""Inception v3 architecture 모델을 이용한 간단한 Transfer Learning (TensorBoard 포함) + +This example shows how to take a Inception v3 architecture model trained on +ImageNet images, and train a new top layer that can recognize other classes of +images. + +The top layer receives as input a 2048-dimensional vector for each image. We +train a softmax layer on top of this representation. Assuming the softmax layer +contains N labels, this corresponds to learning N + 2048*N model parameters +corresponding to the learned biases and weights. + +Here's an example, which assumes you have a folder containing class-named +subfolders, each full of images for each label. The example folder flower_photos +should have a structure like this: + +~/flower_photos/daisy/photo1.jpg +~/flower_photos/daisy/photo2.jpg +... +~/flower_photos/rose/anotherphoto77.jpg +... +~/flower_photos/sunflower/somepicture.jpg + +The subfolder names are important, since they define what label is applied to +each image, but the filenames themselves don't matter. Once your images are +prepared, you can run the training with a command like this: + + +```bash +bazel build tensorflow/examples/image_retraining:retrain && \ +bazel-bin/tensorflow/examples/image_retraining/retrain \ + --image_dir ~/flower_photos +``` + +Or, if you have a pip installation of tensorflow, `retrain.py` can be run +without bazel: + +```bash +python tensorflow/examples/image_retraining/retrain.py \ + --image_dir ~/flower_photos +``` + +You can replace the image_dir argument with any folder containing subfolders of +images. The label for each image is taken from the name of the subfolder it's +in. + +This produces a new model file that can be loaded and run by any TensorFlow +program, for example the label_image sample code. + + +To use with TensorBoard: + +By default, this script will log summaries to /tmp/retrain_logs directory + +Visualize the summaries with this command: + +tensorboard --logdir /tmp/retrain_logs + +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import argparse +from datetime import datetime +import hashlib +import os.path +import random +import re +import struct +import sys +import tarfile + +import numpy as np +from six.moves import urllib +import tensorflow as tf + +from tensorflow.python.framework import graph_util +from tensorflow.python.framework import tensor_shape +from tensorflow.python.platform import gfile +from tensorflow.python.util import compat + +FLAGS = None + +# 모든 파라미터들은 특정한 모델 architecture와 묶여(tied) 있다. +# 우리는 Inception v3를 사용할 것이다. 이는 tensor 이름이나 사이즈들을 포함하고 있다. +# 만약 당신이 이 스크립트를 다른 모델에 사용하고 싶다면, +# 당신이 사용하는 network를 반영하도록 tensor 이름이나 사이즈들을 변경해야만 할 것이다. +DATA_URL = 'http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz' +BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0' +BOTTLENECK_TENSOR_SIZE = 2048 +MODEL_INPUT_WIDTH = 299 +MODEL_INPUT_HEIGHT = 299 +MODEL_INPUT_DEPTH = 3 +JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0' +RESIZED_INPUT_TENSOR_NAME = 'ResizeBilinear:0' +MAX_NUM_IMAGES_PER_CLASS = 2 ** 27 - 1 # ~134M + + +def create_image_lists(image_dir, testing_percentage, validation_percentage): + """file system으로부터 training 이미지들의 list를 만든다. + + 이미지 디렉토리로부터 sub folder들을 분석하고, 그들을 training, testing, validation sets으로 나눈다. + 그리고 각각의 label을 위한 이미지 list와 그들의 경로(path)를 나타내는 자료구조(data structure)를 반환한다. + + 인수들(Args): + image_dir: 이미지들의 subfolder들을 포함한 folder의 String path. + testing_percentage: 전체 이미지중 테스트를 위해 사용되는 비율을 나타내는 Integer. + validation_percentage: 전체 이미지중 validation을 위해 사용되는 비율을 나타내는 Integer. + + 반환값들(Returns): + 각각의 label subfolder를 위한 enrtry를 포함한 dictionary A dictionary + (각각의 label에서 이미지드릉ㄴ training, testing, validation sets으로 나뉘어져 있다.) + """ + if not gfile.Exists(image_dir): + print("Image directory '" + image_dir + "' not found.") + return None + result = {} + sub_dirs = [x[0] for x in gfile.Walk(image_dir)] + # root directory는 처음에 온다. 따라서 이를 skip한다. + is_root_dir = True + for sub_dir in sub_dirs: + if is_root_dir: + is_root_dir = False + continue + extensions = ['jpg', 'jpeg', 'JPG', 'JPEG'] + file_list = [] + dir_name = os.path.basename(sub_dir) + if dir_name == image_dir: + continue + print("Looking for images in '" + dir_name + "'") + for extension in extensions: + file_glob = os.path.join(image_dir, dir_name, '*.' + extension) + file_list.extend(gfile.Glob(file_glob)) + if not file_list: + print('No files found') + continue + if len(file_list) < 20: + print('WARNING: Folder has less than 20 images, which may cause issues.') + elif len(file_list) > MAX_NUM_IMAGES_PER_CLASS: + print('WARNING: Folder {} has more than {} images. Some images will ' + 'never be selected.'.format(dir_name, MAX_NUM_IMAGES_PER_CLASS)) + label_name = re.sub(r'[^a-z0-9]+', ' ', dir_name.lower()) + training_images = [] + testing_images = [] + validation_images = [] + for file_name in file_list: + base_name = os.path.basename(file_name) + # 어떤 이미지로 리스트를 만들지 결정할때 파일 이름에 "_nohash_"가 포함되어 있으면 이를 무시할 수 있다. + # 이를 이용해서, 데이터셋을 만드는 사람은 서로 비슷한 사진들을 grouping할 수있다. + # 예를 들어, plant disease를 데이터셋을 만들기 위해서, 여러 장의 같은 잎사귀(leaf)를 grouping할 수 있다. + hash_name = re.sub(r'_nohash_.*$', '', file_name) + # 이는 일종의 마법처럼 보일 수 있다. 하지만, 우리는 이 파일이 training sets로 갈지, testing sets로 갈지, validation sets로 갈지 결정해야만 한다. + # 그리고 우리는 더많은 파일들이 추가되더라도, 같은 set에 이미 존재하는 파일들이 유지되길 원한다. + # 그렇게 하기 위해서는, 우리는 파일 이름 그자체로부터 결정하는 안정적인 방법이 있어야만 한다. + # 따라서, 우리는 파일 이름을 hash하고, 이를 이를 할당하는데 사용하는 확률을 결정하는데 사용한다. + hash_name_hashed = hashlib.sha1(compat.as_bytes(hash_name)).hexdigest() + percentage_hash = ((int(hash_name_hashed, 16) % + (MAX_NUM_IMAGES_PER_CLASS + 1)) * + (100.0 / MAX_NUM_IMAGES_PER_CLASS)) + if percentage_hash < validation_percentage: + validation_images.append(base_name) + elif percentage_hash < (testing_percentage + validation_percentage): + testing_images.append(base_name) + else: + training_images.append(base_name) + result[label_name] = { + 'dir': dir_name, + 'training': training_images, + 'testing': testing_images, + 'validation': validation_images, + } + return result + + +def get_image_path(image_lists, label_name, index, image_dir, category): + """"주어진 index에 대한 이미지 경로(path)를 리턴한다. + + 인수들(Args): + image_lists: 각각의 label에 대한 training image들의 Dictionary. + label_name: 우리가 얻고자하는 이미지의 Label string. + index: 우리가 얻고자하는 이미지의 Int offset. 이는 레이블에 대한 가능한 이미지의 개수에 따라 moduloed 될 것이다. + 따라서 임의의 큰값이 될 수도 있다. + image_dir: training 이미지들의 subfolder들을 포함하고 있는 Root folder string + category: training, testing, 또는 validation sets으로부터 이미지에 pull할 Name string + + 반환값(Returns): + 요청된 파라미터들이 만나게 될 이미지에 대한 파일 시스템 경로(file system path) string + + """ + if label_name not in image_lists: + tf.logging.fatal('Label does not exist %s.', label_name) + label_lists = image_lists[label_name] + if category not in label_lists: + tf.logging.fatal('Category does not exist %s.', category) + category_list = label_lists[category] + if not category_list: + tf.logging.fatal('Label %s has no images in the category %s.', + label_name, category) + mod_index = index % len(category_list) + base_name = category_list[mod_index] + sub_dir = label_lists['dir'] + full_path = os.path.join(image_dir, sub_dir, base_name) + return full_path + + +def get_bottleneck_path(image_lists, label_name, index, bottleneck_dir, + category): + """"Returns a path to a bottleneck file for a label at the given index. + + Args: + image_lists: Dictionary of training images for each label. + label_name: Label string we want to get an image for. + index: Integer offset of the image we want. This will be moduloed by the + available number of images for the label, so it can be arbitrarily large. + bottleneck_dir: Folder string holding cached files of bottleneck values. + category: Name string of set to pull images from - training, testing, or + validation. + + Returns: + File system path string to an image that meets the requested parameters. + """ + return get_image_path(image_lists, label_name, index, bottleneck_dir, + category) + '.txt' + + +def create_inception_graph(): + """"Creates a graph from saved GraphDef file and returns a Graph object. + + Returns: + Graph holding the trained Inception network, and various tensors we'll be + manipulating. + """ + with tf.Graph().as_default() as graph: + model_filename = os.path.join( + FLAGS.model_dir, 'classify_image_graph_def.pb') + with gfile.FastGFile(model_filename, 'rb') as f: + graph_def = tf.GraphDef() + graph_def.ParseFromString(f.read()) + bottleneck_tensor, jpeg_data_tensor, resized_input_tensor = ( + tf.import_graph_def(graph_def, name='', return_elements=[ + BOTTLENECK_TENSOR_NAME, JPEG_DATA_TENSOR_NAME, + RESIZED_INPUT_TENSOR_NAME])) + return graph, bottleneck_tensor, jpeg_data_tensor, resized_input_tensor + + +def run_bottleneck_on_image(sess, image_data, image_data_tensor, + bottleneck_tensor): + """Runs inference on an image to extract the 'bottleneck' summary layer. + + Args: + sess: Current active TensorFlow Session. + image_data: String of raw JPEG data. + image_data_tensor: Input data layer in the graph. + bottleneck_tensor: Layer before the final softmax. + + Returns: + Numpy array of bottleneck values. + """ + bottleneck_values = sess.run( + bottleneck_tensor, + {image_data_tensor: image_data}) + bottleneck_values = np.squeeze(bottleneck_values) + return bottleneck_values + + +def maybe_download_and_extract(): + """Download and extract model tar file. + + If the pretrained model we're using doesn't already exist, this function + downloads it from the TensorFlow.org website and unpacks it into a directory. + """ + dest_directory = FLAGS.model_dir + if not os.path.exists(dest_directory): + os.makedirs(dest_directory) + filename = DATA_URL.split('/')[-1] + filepath = os.path.join(dest_directory, filename) + if not os.path.exists(filepath): + + def _progress(count, block_size, total_size): + sys.stdout.write('\r>> Downloading %s %.1f%%' % + (filename, + float(count * block_size) / float(total_size) * 100.0)) + sys.stdout.flush() + + filepath, _ = urllib.request.urlretrieve(DATA_URL, + filepath, + _progress) + print() + statinfo = os.stat(filepath) + print('Successfully downloaded', filename, statinfo.st_size, 'bytes.') + tarfile.open(filepath, 'r:gz').extractall(dest_directory) + + +def ensure_dir_exists(dir_name): + """Makes sure the folder exists on disk. + + Args: + dir_name: Path string to the folder we want to create. + """ + if not os.path.exists(dir_name): + os.makedirs(dir_name) + + +def write_list_of_floats_to_file(list_of_floats, file_path): + """Writes a given list of floats to a binary file. + + Args: + list_of_floats: List of floats we want to write to a file. + file_path: Path to a file where list of floats will be stored. + + """ + + s = struct.pack('d' * BOTTLENECK_TENSOR_SIZE, *list_of_floats) + with open(file_path, 'wb') as f: + f.write(s) + + +def read_list_of_floats_from_file(file_path): + """Reads list of floats from a given file. + + Args: + file_path: Path to a file where list of floats was stored. + Returns: + Array of bottleneck values (list of floats). + + """ + + with open(file_path, 'rb') as f: + s = struct.unpack('d' * BOTTLENECK_TENSOR_SIZE, f.read()) + return list(s) + + +bottleneck_path_2_bottleneck_values = {} + + +def create_bottleneck_file(bottleneck_path, image_lists, label_name, index, + image_dir, category, sess, jpeg_data_tensor, + bottleneck_tensor): + """Create a single bottleneck file.""" + print('Creating bottleneck at ' + bottleneck_path) + image_path = get_image_path(image_lists, label_name, index, + image_dir, category) + if not gfile.Exists(image_path): + tf.logging.fatal('File does not exist %s', image_path) + image_data = gfile.FastGFile(image_path, 'rb').read() + try: + bottleneck_values = run_bottleneck_on_image( + sess, image_data, jpeg_data_tensor, bottleneck_tensor) + except: + raise RuntimeError('Error during processing file %s' % image_path) + + bottleneck_string = ','.join(str(x) for x in bottleneck_values) + with open(bottleneck_path, 'w') as bottleneck_file: + bottleneck_file.write(bottleneck_string) + + +def get_or_create_bottleneck(sess, image_lists, label_name, index, image_dir, + category, bottleneck_dir, jpeg_data_tensor, + bottleneck_tensor): + """Retrieves or calculates bottleneck values for an image. + + If a cached version of the bottleneck data exists on-disk, return that, + otherwise calculate the data and save it to disk for future use. + + Args: + sess: The current active TensorFlow Session. + image_lists: Dictionary of training images for each label. + label_name: Label string we want to get an image for. + index: Integer offset of the image we want. This will be modulo-ed by the + available number of images for the label, so it can be arbitrarily large. + image_dir: Root folder string of the subfolders containing the training + images. + category: Name string of which set to pull images from - training, testing, + or validation. + bottleneck_dir: Folder string holding cached files of bottleneck values. + jpeg_data_tensor: The tensor to feed loaded jpeg data into. + bottleneck_tensor: The output tensor for the bottleneck values. + + Returns: + Numpy array of values produced by the bottleneck layer for the image. + """ + label_lists = image_lists[label_name] + sub_dir = label_lists['dir'] + sub_dir_path = os.path.join(bottleneck_dir, sub_dir) + ensure_dir_exists(sub_dir_path) + bottleneck_path = get_bottleneck_path(image_lists, label_name, index, + bottleneck_dir, category) + if not os.path.exists(bottleneck_path): + create_bottleneck_file(bottleneck_path, image_lists, label_name, index, + image_dir, category, sess, jpeg_data_tensor, + bottleneck_tensor) + with open(bottleneck_path, 'r') as bottleneck_file: + bottleneck_string = bottleneck_file.read() + did_hit_error = False + try: + bottleneck_values = [float(x) for x in bottleneck_string.split(',')] + except ValueError: + print('Invalid float found, recreating bottleneck') + did_hit_error = True + if did_hit_error: + create_bottleneck_file(bottleneck_path, image_lists, label_name, index, + image_dir, category, sess, jpeg_data_tensor, + bottleneck_tensor) + with open(bottleneck_path, 'r') as bottleneck_file: + bottleneck_string = bottleneck_file.read() + # Allow exceptions to propagate here, since they shouldn't happen after a + # fresh creation + bottleneck_values = [float(x) for x in bottleneck_string.split(',')] + return bottleneck_values + + +def cache_bottlenecks(sess, image_lists, image_dir, bottleneck_dir, + jpeg_data_tensor, bottleneck_tensor): + """Ensures all the training, testing, and validation bottlenecks are cached. + + Because we're likely to read the same image multiple times (if there are no + distortions applied during training) it can speed things up a lot if we + calculate the bottleneck layer values once for each image during + preprocessing, and then just read those cached values repeatedly during + training. Here we go through all the images we've found, calculate those + values, and save them off. + + Args: + sess: The current active TensorFlow Session. + image_lists: Dictionary of training images for each label. + image_dir: Root folder string of the subfolders containing the training + images. + bottleneck_dir: Folder string holding cached files of bottleneck values. + jpeg_data_tensor: Input tensor for jpeg data from file. + bottleneck_tensor: The penultimate output layer of the graph. + + Returns: + Nothing. + """ + how_many_bottlenecks = 0 + ensure_dir_exists(bottleneck_dir) + for label_name, label_lists in image_lists.items(): + for category in ['training', 'testing', 'validation']: + category_list = label_lists[category] + for index, unused_base_name in enumerate(category_list): + get_or_create_bottleneck(sess, image_lists, label_name, index, + image_dir, category, bottleneck_dir, + jpeg_data_tensor, bottleneck_tensor) + + how_many_bottlenecks += 1 + if how_many_bottlenecks % 100 == 0: + print(str(how_many_bottlenecks) + ' bottleneck files created.') + + +def get_random_cached_bottlenecks(sess, image_lists, how_many, category, + bottleneck_dir, image_dir, jpeg_data_tensor, + bottleneck_tensor): + """Retrieves bottleneck values for cached images. + + If no distortions are being applied, this function can retrieve the cached + bottleneck values directly from disk for images. It picks a random set of + images from the specified category. + + Args: + sess: Current TensorFlow Session. + image_lists: Dictionary of training images for each label. + how_many: If positive, a random sample of this size will be chosen. + If negative, all bottlenecks will be retrieved. + category: Name string of which set to pull from - training, testing, or + validation. + bottleneck_dir: Folder string holding cached files of bottleneck values. + image_dir: Root folder string of the subfolders containing the training + images. + jpeg_data_tensor: The layer to feed jpeg image data into. + bottleneck_tensor: The bottleneck output layer of the CNN graph. + + Returns: + List of bottleneck arrays, their corresponding ground truths, and the + relevant filenames. + """ + class_count = len(image_lists.keys()) + bottlenecks = [] + ground_truths = [] + filenames = [] + if how_many >= 0: + # Retrieve a random sample of bottlenecks. + for unused_i in range(how_many): + label_index = random.randrange(class_count) + label_name = list(image_lists.keys())[label_index] + image_index = random.randrange(MAX_NUM_IMAGES_PER_CLASS + 1) + image_name = get_image_path(image_lists, label_name, image_index, + image_dir, category) + bottleneck = get_or_create_bottleneck(sess, image_lists, label_name, + image_index, image_dir, category, + bottleneck_dir, jpeg_data_tensor, + bottleneck_tensor) + ground_truth = np.zeros(class_count, dtype=np.float32) + ground_truth[label_index] = 1.0 + bottlenecks.append(bottleneck) + ground_truths.append(ground_truth) + filenames.append(image_name) + else: + # Retrieve all bottlenecks. + for label_index, label_name in enumerate(image_lists.keys()): + for image_index, image_name in enumerate( + image_lists[label_name][category]): + image_name = get_image_path(image_lists, label_name, image_index, + image_dir, category) + bottleneck = get_or_create_bottleneck(sess, image_lists, label_name, + image_index, image_dir, category, + bottleneck_dir, jpeg_data_tensor, + bottleneck_tensor) + ground_truth = np.zeros(class_count, dtype=np.float32) + ground_truth[label_index] = 1.0 + bottlenecks.append(bottleneck) + ground_truths.append(ground_truth) + filenames.append(image_name) + return bottlenecks, ground_truths, filenames + + +def get_random_distorted_bottlenecks( + sess, image_lists, how_many, category, image_dir, input_jpeg_tensor, + distorted_image, resized_input_tensor, bottleneck_tensor): + """Retrieves bottleneck values for training images, after distortions. + + If we're training with distortions like crops, scales, or flips, we have to + recalculate the full model for every image, and so we can't use cached + bottleneck values. Instead we find random images for the requested category, + run them through the distortion graph, and then the full graph to get the + bottleneck results for each. + + Args: + sess: Current TensorFlow Session. + image_lists: Dictionary of training images for each label. + how_many: The integer number of bottleneck values to return. + category: Name string of which set of images to fetch - training, testing, + or validation. + image_dir: Root folder string of the subfolders containing the training + images. + input_jpeg_tensor: The input layer we feed the image data to. + distorted_image: The output node of the distortion graph. + resized_input_tensor: The input node of the recognition graph. + bottleneck_tensor: The bottleneck output layer of the CNN graph. + + Returns: + List of bottleneck arrays and their corresponding ground truths. + """ + class_count = len(image_lists.keys()) + bottlenecks = [] + ground_truths = [] + for unused_i in range(how_many): + label_index = random.randrange(class_count) + label_name = list(image_lists.keys())[label_index] + image_index = random.randrange(MAX_NUM_IMAGES_PER_CLASS + 1) + image_path = get_image_path(image_lists, label_name, image_index, image_dir, + category) + if not gfile.Exists(image_path): + tf.logging.fatal('File does not exist %s', image_path) + jpeg_data = gfile.FastGFile(image_path, 'rb').read() + # Note that we materialize the distorted_image_data as a numpy array before + # sending running inference on the image. This involves 2 memory copies and + # might be optimized in other implementations. + distorted_image_data = sess.run(distorted_image, + {input_jpeg_tensor: jpeg_data}) + bottleneck = run_bottleneck_on_image(sess, distorted_image_data, + resized_input_tensor, + bottleneck_tensor) + ground_truth = np.zeros(class_count, dtype=np.float32) + ground_truth[label_index] = 1.0 + bottlenecks.append(bottleneck) + ground_truths.append(ground_truth) + return bottlenecks, ground_truths + + +def should_distort_images(flip_left_right, random_crop, random_scale, + random_brightness): + """Whether any distortions are enabled, from the input flags. + + Args: + flip_left_right: Boolean whether to randomly mirror images horizontally. + random_crop: Integer percentage setting the total margin used around the + crop box. + random_scale: Integer percentage of how much to vary the scale by. + random_brightness: Integer range to randomly multiply the pixel values by. + + Returns: + Boolean value indicating whether any distortions should be applied. + """ + return (flip_left_right or (random_crop != 0) or (random_scale != 0) or + (random_brightness != 0)) + + +def add_input_distortions(flip_left_right, random_crop, random_scale, + random_brightness): + """Creates the operations to apply the specified distortions. + + During training it can help to improve the results if we run the images + through simple distortions like crops, scales, and flips. These reflect the + kind of variations we expect in the real world, and so can help train the + model to cope with natural data more effectively. Here we take the supplied + parameters and construct a network of operations to apply them to an image. + + Cropping + ~~~~~~~~ + + Cropping is done by placing a bounding box at a random position in the full + image. The cropping parameter controls the size of that box relative to the + input image. If it's zero, then the box is the same size as the input and no + cropping is performed. If the value is 50%, then the crop box will be half the + width and height of the input. In a diagram it looks like this: + + < width > + +---------------------+ + | | + | width - crop% | + | < > | + | +------+ | + | | | | + | | | | + | | | | + | +------+ | + | | + | | + +---------------------+ + + Scaling + ~~~~~~~ + + Scaling is a lot like cropping, except that the bounding box is always + centered and its size varies randomly within the given range. For example if + the scale percentage is zero, then the bounding box is the same size as the + input and no scaling is applied. If it's 50%, then the bounding box will be in + a random range between half the width and height and full size. + + Args: + flip_left_right: Boolean whether to randomly mirror images horizontally. + random_crop: Integer percentage setting the total margin used around the + crop box. + random_scale: Integer percentage of how much to vary the scale by. + random_brightness: Integer range to randomly multiply the pixel values by. + graph. + + Returns: + The jpeg input layer and the distorted result tensor. + """ + + jpeg_data = tf.placeholder(tf.string, name='DistortJPGInput') + decoded_image = tf.image.decode_jpeg(jpeg_data, channels=MODEL_INPUT_DEPTH) + decoded_image_as_float = tf.cast(decoded_image, dtype=tf.float32) + decoded_image_4d = tf.expand_dims(decoded_image_as_float, 0) + margin_scale = 1.0 + (random_crop / 100.0) + resize_scale = 1.0 + (random_scale / 100.0) + margin_scale_value = tf.constant(margin_scale) + resize_scale_value = tf.random_uniform(tensor_shape.scalar(), + minval=1.0, + maxval=resize_scale) + scale_value = tf.multiply(margin_scale_value, resize_scale_value) + precrop_width = tf.multiply(scale_value, MODEL_INPUT_WIDTH) + precrop_height = tf.multiply(scale_value, MODEL_INPUT_HEIGHT) + precrop_shape = tf.stack([precrop_height, precrop_width]) + precrop_shape_as_int = tf.cast(precrop_shape, dtype=tf.int32) + precropped_image = tf.image.resize_bilinear(decoded_image_4d, + precrop_shape_as_int) + precropped_image_3d = tf.squeeze(precropped_image, squeeze_dims=[0]) + cropped_image = tf.random_crop(precropped_image_3d, + [MODEL_INPUT_HEIGHT, MODEL_INPUT_WIDTH, + MODEL_INPUT_DEPTH]) + if flip_left_right: + flipped_image = tf.image.random_flip_left_right(cropped_image) + else: + flipped_image = cropped_image + brightness_min = 1.0 - (random_brightness / 100.0) + brightness_max = 1.0 + (random_brightness / 100.0) + brightness_value = tf.random_uniform(tensor_shape.scalar(), + minval=brightness_min, + maxval=brightness_max) + brightened_image = tf.multiply(flipped_image, brightness_value) + distort_result = tf.expand_dims(brightened_image, 0, name='DistortResult') + return jpeg_data, distort_result + + +def variable_summaries(var): + """Attach a lot of summaries to a Tensor (for TensorBoard visualization).""" + with tf.name_scope('summaries'): + mean = tf.reduce_mean(var) + tf.summary.scalar('mean', mean) + with tf.name_scope('stddev'): + stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean))) + tf.summary.scalar('stddev', stddev) + tf.summary.scalar('max', tf.reduce_max(var)) + tf.summary.scalar('min', tf.reduce_min(var)) + tf.summary.histogram('histogram', var) + + +def add_final_training_ops(class_count, final_tensor_name, bottleneck_tensor): + """Adds a new softmax and fully-connected layer for training. + + We need to retrain the top layer to identify our new classes, so this function + adds the right operations to the graph, along with some variables to hold the + weights, and then sets up all the gradients for the backward pass. + + The set up for the softmax and fully-connected layers is based on: + https://tensorflow.org/versions/master/tutorials/mnist/beginners/index.html + + Args: + class_count: Integer of how many categories of things we're trying to + recognize. + final_tensor_name: Name string for the new final node that produces results. + bottleneck_tensor: The output of the main CNN graph. + + Returns: + The tensors for the training and cross entropy results, and tensors for the + bottleneck input and ground truth input. + """ + with tf.name_scope('input'): + bottleneck_input = tf.placeholder_with_default( + bottleneck_tensor, shape=[None, BOTTLENECK_TENSOR_SIZE], + name='BottleneckInputPlaceholder') + + ground_truth_input = tf.placeholder(tf.float32, + [None, class_count], + name='GroundTruthInput') + + # Organizing the following ops as `final_training_ops` so they're easier + # to see in TensorBoard + layer_name = 'final_training_ops' + with tf.name_scope(layer_name): + with tf.name_scope('weights'): + initial_value = tf.truncated_normal([BOTTLENECK_TENSOR_SIZE, class_count], + stddev=0.001) + + layer_weights = tf.Variable(initial_value, name='final_weights') + + variable_summaries(layer_weights) + with tf.name_scope('biases'): + layer_biases = tf.Variable(tf.zeros([class_count]), name='final_biases') + variable_summaries(layer_biases) + with tf.name_scope('Wx_plus_b'): + logits = tf.matmul(bottleneck_input, layer_weights) + layer_biases + tf.summary.histogram('pre_activations', logits) + + final_tensor = tf.nn.softmax(logits, name=final_tensor_name) + tf.summary.histogram('activations', final_tensor) + + with tf.name_scope('cross_entropy'): + cross_entropy = tf.nn.softmax_cross_entropy_with_logits( + labels=ground_truth_input, logits=logits) + with tf.name_scope('total'): + cross_entropy_mean = tf.reduce_mean(cross_entropy) + tf.summary.scalar('cross_entropy', cross_entropy_mean) + + with tf.name_scope('train'): + optimizer = tf.train.GradientDescentOptimizer(FLAGS.learning_rate) + train_step = optimizer.minimize(cross_entropy_mean) + + return (train_step, cross_entropy_mean, bottleneck_input, ground_truth_input, + final_tensor) + + +def add_evaluation_step(result_tensor, ground_truth_tensor): + """Inserts the operations we need to evaluate the accuracy of our results. + + Args: + result_tensor: The new final node that produces results. + ground_truth_tensor: The node we feed ground truth data + into. + + Returns: + Tuple of (evaluation step, prediction). + """ + with tf.name_scope('accuracy'): + with tf.name_scope('correct_prediction'): + prediction = tf.argmax(result_tensor, 1) + correct_prediction = tf.equal( + prediction, tf.argmax(ground_truth_tensor, 1)) + with tf.name_scope('accuracy'): + evaluation_step = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) + tf.summary.scalar('accuracy', evaluation_step) + return evaluation_step, prediction + + +def main(_): + # TensorBoard의 summaries를 write할 directory를 설정한다. + if tf.gfile.Exists(FLAGS.summaries_dir): + tf.gfile.DeleteRecursively(FLAGS.summaries_dir) + tf.gfile.MakeDirs(FLAGS.summaries_dir) + + # pre-trained graph를 생성한다. + maybe_download_and_extract() + graph, bottleneck_tensor, jpeg_data_tensor, resized_image_tensor = ( + create_inception_graph()) + + # 폴더 구조를 살펴보고, 모든 이미지에 대한 lists를 생성한다. + image_lists = create_image_lists(FLAGS.image_dir, FLAGS.testing_percentage, + FLAGS.validation_percentage) + class_count = len(image_lists.keys()) + if class_count == 0: + print('No valid folders of images found at ' + FLAGS.image_dir) + return -1 + if class_count == 1: + print('Only one valid folder of images found at ' + FLAGS.image_dir + + ' - multiple classes are needed for classification.') + return -1 + + # 커맨드라인 flag에 distortion에 관련된 설정이 있으면 distortion들을 적용한다. + do_distort_images = should_distort_images( + FLAGS.flip_left_right, FLAGS.random_crop, FLAGS.random_scale, + FLAGS.random_brightness) + + with tf.Session(graph=graph) as sess: + + if do_distort_images: + # 우리는 distortion들을 적용할것이다. 따라서 필요한 연산들(operations)을 설정한다. + (distorted_jpeg_data_tensor, + distorted_image_tensor) = add_input_distortions( + FLAGS.flip_left_right, FLAGS.random_crop, + FLAGS.random_scale, FLAGS.random_brightness) + else: + # 우리는 계산된 'bottleneck' 이미지 summaries를 가지고 있다. + # 이를 disk에 캐싱(caching)할 것이다. + cache_bottlenecks(sess, image_lists, FLAGS.image_dir, + FLAGS.bottleneck_dir, jpeg_data_tensor, + bottleneck_tensor) + + # 우리가 학습시킬(training) 새로운 layer를 추가한다. + (train_step, cross_entropy, bottleneck_input, ground_truth_input, + final_tensor) = add_final_training_ops(len(image_lists.keys()), + FLAGS.final_tensor_name, + bottleneck_tensor) + + # 우리의 새로운 layer의 정확도를 평가(evalute)하기 위한 새로운 operation들을 생성한다. + evaluation_step, prediction = add_evaluation_step( + final_tensor, ground_truth_input) + + # 모든 summaries를 합치고(merge) summaries_dir에 쓴다.(write) + merged = tf.summary.merge_all() + train_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/train', + sess.graph) + + validation_writer = tf.summary.FileWriter( + FLAGS.summaries_dir + '/validation') + + # 우리의 모든 가중치들(weights)과 그들의 초기값들을 설정한다. + init = tf.global_variables_initializer() + sess.run(init) + + # 커맨드 라인에서 지정한 횟수만큼 학습을 진행한다. + for i in range(FLAGS.how_many_training_steps): + # bottleneck 값들의 batch를 얻는다. 이는 매번 distortion을 적용하고 계산하거나, + # disk에 저장된 chache로부터 얻을 수 있다. + if do_distort_images: + (train_bottlenecks, + train_ground_truth) = get_random_distorted_bottlenecks( + sess, image_lists, FLAGS.train_batch_size, 'training', + FLAGS.image_dir, distorted_jpeg_data_tensor, + distorted_image_tensor, resized_image_tensor, bottleneck_tensor) + else: + (train_bottlenecks, + train_ground_truth, _) = get_random_cached_bottlenecks( + sess, image_lists, FLAGS.train_batch_size, 'training', + FLAGS.bottleneck_dir, FLAGS.image_dir, jpeg_data_tensor, + bottleneck_tensor) + # grpah에 bottleneck과 ground truth를 feed하고, training step을 진행한다. + # TensorBoard를 위한 'merged' op을 이용해서 training summaries을 capture한다. + + train_summary, _ = sess.run( + [merged, train_step], + feed_dict={bottleneck_input: train_bottlenecks, + ground_truth_input: train_ground_truth}) + train_writer.add_summary(train_summary, i) + + # 일정 step마다 graph의 training이 얼마나 잘 되고 있는지 출력한다. + is_last_step = (i + 1 == FLAGS.how_many_training_steps) + if (i % FLAGS.eval_step_interval) == 0 or is_last_step: + train_accuracy, cross_entropy_value = sess.run( + [evaluation_step, cross_entropy], + feed_dict={bottleneck_input: train_bottlenecks, + ground_truth_input: train_ground_truth}) + print('%s: Step %d: Train accuracy = %.1f%%' % (datetime.now(), i, + train_accuracy * 100)) + print('%s: Step %d: Cross entropy = %f' % (datetime.now(), i, + cross_entropy_value)) + validation_bottlenecks, validation_ground_truth, _ = ( + get_random_cached_bottlenecks( + sess, image_lists, FLAGS.validation_batch_size, 'validation', + FLAGS.bottleneck_dir, FLAGS.image_dir, jpeg_data_tensor, + bottleneck_tensor)) + # validation step을 진행한다. + # TensorBoard를 위한 'merged' op을 이용해서 training summaries을 capture한다. + validation_summary, validation_accuracy = sess.run( + [merged, evaluation_step], + feed_dict={bottleneck_input: validation_bottlenecks, + ground_truth_input: validation_ground_truth}) + validation_writer.add_summary(validation_summary, i) + print('%s: Step %d: Validation accuracy = %.1f%% (N=%d)' % + (datetime.now(), i, validation_accuracy * 100, + len(validation_bottlenecks))) + + # 트레이닝 과정이 모두 끝났다. + # 따라서 이전에 보지 못했던 이미지를 통해 마지막 test 평가(evalution)을 진행한다. + test_bottlenecks, test_ground_truth, test_filenames = ( + get_random_cached_bottlenecks(sess, image_lists, FLAGS.test_batch_size, + 'testing', FLAGS.bottleneck_dir, + FLAGS.image_dir, jpeg_data_tensor, + bottleneck_tensor)) + test_accuracy, predictions = sess.run( + [evaluation_step, prediction], + feed_dict={bottleneck_input: test_bottlenecks, + ground_truth_input: test_ground_truth}) + print('Final test accuracy = %.1f%% (N=%d)' % ( + test_accuracy * 100, len(test_bottlenecks))) + + if FLAGS.print_misclassified_test_images: + print('=== MISCLASSIFIED TEST IMAGES ===') + for i, test_filename in enumerate(test_filenames): + if predictions[i] != test_ground_truth[i].argmax(): + print('%70s %s' % (test_filename, + list(image_lists.keys())[predictions[i]])) + + # 학습된 graph와 weights들을 포함한 labels를 쓴다.(write) + output_graph_def = graph_util.convert_variables_to_constants( + sess, graph.as_graph_def(), [FLAGS.final_tensor_name]) + with gfile.FastGFile(FLAGS.output_graph, 'wb') as f: + f.write(output_graph_def.SerializeToString()) + with gfile.FastGFile(FLAGS.output_labels, 'w') as f: + f.write('\n'.join(image_lists.keys()) + '\n') + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument( + '--image_dir', + type=str, + default='', + help='Path to folders of labeled images.' + ) + parser.add_argument( + '--output_graph', + type=str, + default='/tmp/output_graph.pb', + help='Where to save the trained graph.' + ) + parser.add_argument( + '--output_labels', + type=str, + default='/tmp/output_labels.txt', + help='Where to save the trained graph\'s labels.' + ) + parser.add_argument( + '--summaries_dir', + type=str, + default='/tmp/retrain_logs', + help='Where to save summary logs for TensorBoard.' + ) + parser.add_argument( + '--how_many_training_steps', + type=int, + default=20000, + help='How many training steps to run before ending.' + ) + parser.add_argument( + '--learning_rate', + type=float, + default=0.001, + help='How large a learning rate to use when training.' + ) + parser.add_argument( + '--testing_percentage', + type=int, + default=10, + help='What percentage of images to use as a test set.' + ) + parser.add_argument( + '--validation_percentage', + type=int, + default=10, + help='What percentage of images to use as a validation set.' + ) + parser.add_argument( + '--eval_step_interval', + type=int, + default=10, + help='How often to evaluate the training results.' + ) + parser.add_argument( + '--train_batch_size', + type=int, + default=100, + help='How many images to train on at a time.' + ) + parser.add_argument( + '--test_batch_size', + type=int, + default=-1, + help="""\ + How many images to test on. This test set is only used once, to evaluate + the final accuracy of the model after training completes. + A value of -1 causes the entire test set to be used, which leads to more + stable results across runs.\ + """ + ) + parser.add_argument( + '--validation_batch_size', + type=int, + default=100, + help="""\ + How many images to use in an evaluation batch. This validation set is + used much more often than the test set, and is an early indicator of how + accurate the model is during training. + A value of -1 causes the entire validation set to be used, which leads to + more stable results across training iterations, but may be slower on large + training sets.\ + """ + ) + parser.add_argument( + '--print_misclassified_test_images', + default=False, + help="""\ + Whether to print out a list of all misclassified test images.\ + """, + action='store_true' + ) + parser.add_argument( + '--model_dir', + type=str, + default='/tmp/imagenet', + help="""\ + Path to classify_image_graph_def.pb, + imagenet_synset_to_human_label_map.txt, and + imagenet_2012_challenge_label_map_proto.pbtxt.\ + """ + ) + parser.add_argument( + '--bottleneck_dir', + type=str, + default='/tmp/bottleneck', + help='Path to cache bottleneck layer values as files.' + ) + parser.add_argument( + '--final_tensor_name', + type=str, + default='final_result', + help="""\ + The name of the output classification layer in the retrained graph.\ + """ + ) + parser.add_argument( + '--flip_left_right', + default=False, + help="""\ + Whether to randomly flip half of the training images horizontally.\ + """, + action='store_true' + ) + parser.add_argument( + '--random_crop', + type=int, + default=0, + help="""\ + A percentage determining how much of a margin to randomly crop off the + training images.\ + """ + ) + parser.add_argument( + '--random_scale', + type=int, + default=0, + help="""\ + A percentage determining how much to randomly scale up the size of the + training images by.\ + """ + ) + parser.add_argument( + '--random_brightness', + type=int, + default=0, + help="""\ + A percentage determining how much to randomly multiply the training image + input pixels up or down by.\ + """ + ) + FLAGS, unparsed = parser.parse_known_args() + tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) diff --git a/stylelens/attr_classification/retrain_run_inference.py b/stylelens/attr_classification/retrain_run_inference.py new file mode 100644 index 0000000..e388e39 --- /dev/null +++ b/stylelens/attr_classification/retrain_run_inference.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +"""Inception v3 architecture 모델을 retraining한 모델을 이용해서 이미지에 대한 추론(inference)을 진행하는 예제""" + +import numpy as np +import tensorflow as tf + +imagePath = '/tmp/test_pants1.jpg' # 추론을 진행할 이미지 경로 +modelFullPath = '/tmp/output_graph.pb' # 읽어들일 graph 파일 경로 +labelsFullPath = '/tmp/output_labels.txt' # 읽어들일 labels 파일 경로 + + +def create_graph(): + """저장된(saved) GraphDef 파일로부터 graph를 생성하고 saver를 반환한다.""" + # 저장된(saved) graph_def.pb로부터 graph를 생성한다. + with tf.gfile.FastGFile(modelFullPath, 'rb') as f: + graph_def = tf.GraphDef() + graph_def.ParseFromString(f.read()) + _ = tf.import_graph_def(graph_def, name='') + + +def run_inference_on_image(): + answer = None + + if not tf.gfile.Exists(imagePath): + tf.logging.fatal('File does not exist %s', imagePath) + return answer + + image_data = tf.gfile.FastGFile(imagePath, 'rb').read() + + # 저장된(saved) GraphDef 파일로부터 graph를 생성한다. + create_graph() + + with tf.Session() as sess: + + softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') + predictions = sess.run(softmax_tensor, + {'DecodeJpeg/contents:0': image_data}) + predictions = np.squeeze(predictions) + + top_k = predictions.argsort()[-5:][::-1] # 가장 높은 확률을 가진 5개(top 5)의 예측값(predictions)을 얻는다. + f = open(labelsFullPath, 'rb') + lines = f.readlines() + labels = [str(w).replace("\n", "") for w in lines] + for node_id in top_k: + human_string = labels[node_id] + score = predictions[node_id] + print('%s (score = %.5f)' % (human_string, score)) + + answer = labels[top_k[0]] + return answer + + +if __name__ == '__main__': + run_inference_on_image() diff --git a/stylelens/attr_classification/get_object_by_fabric.py b/stylelens/dataset/deepfashion/get_object_by_fabric.py similarity index 100% rename from stylelens/attr_classification/get_object_by_fabric.py rename to stylelens/dataset/deepfashion/get_object_by_fabric.py diff --git a/stylelens/attr_classification/get_object_by_fabric.sh b/stylelens/dataset/deepfashion/get_object_by_fabric.sh similarity index 100% rename from stylelens/attr_classification/get_object_by_fabric.sh rename to stylelens/dataset/deepfashion/get_object_by_fabric.sh diff --git a/stylelens/attr_classification/list_attr_cloth_fabric.txt b/stylelens/dataset/deepfashion/list_attr_cloth_fabric.txt similarity index 100% rename from stylelens/attr_classification/list_attr_cloth_fabric.txt rename to stylelens/dataset/deepfashion/list_attr_cloth_fabric.txt From a2a5e52318a8a5cc3caf9bee3868f273de811855 Mon Sep 17 00:00:00 2001 From: "lion@MAGI-7G" Date: Wed, 10 Jan 2018 17:53:54 +0900 Subject: [PATCH 06/13] [STYL-71] fabric classification --- .../eval_fabric_classification.sh | 15 + .../inceptionv3_retrain.py | 1080 ----------------- .../retrain_run_inference.py | 55 - .../train_fabric_classification.sh | 16 + .../dataset/deepfashion/build_image_data.py | 384 ++++++ .../dataset/deepfashion/build_image_data.sh | 14 + .../dataset/deepfashion/fabric_label.txt | 218 ++++ .../deepfashion/get_object_by_fabric.py | 9 +- .../deepfashion/get_object_by_fabric.sh | 2 +- .../deepfashion/read_tfrecoed_example.py | 20 + stylelens/dataset/deepfashion/test.py | 48 + tensorflow/export.sh | 15 + tensorflow/slim/datasets/color.py | 98 ++ tensorflow/slim/datasets/dataset_factory.py | 8 + .../datasets/download_and_convert_color.py | 212 ++++ .../datasets/download_and_convert_fabric.py | 212 ++++ tensorflow/slim/datasets/fabric.py | 98 ++ tensorflow/slim/download_and_convert_data.py | 10 + tensorflow/slim/eval_image_classifier.py | 12 +- tensorflow/slim/train_image_classifier.py | 10 +- 20 files changed, 1386 insertions(+), 1150 deletions(-) create mode 100755 stylelens/attr_classification/eval_fabric_classification.sh delete mode 100644 stylelens/attr_classification/inceptionv3_retrain.py delete mode 100644 stylelens/attr_classification/retrain_run_inference.py create mode 100755 stylelens/attr_classification/train_fabric_classification.sh create mode 100644 stylelens/dataset/deepfashion/build_image_data.py create mode 100755 stylelens/dataset/deepfashion/build_image_data.sh create mode 100644 stylelens/dataset/deepfashion/fabric_label.txt create mode 100644 stylelens/dataset/deepfashion/read_tfrecoed_example.py create mode 100644 stylelens/dataset/deepfashion/test.py create mode 100755 tensorflow/export.sh create mode 100644 tensorflow/slim/datasets/color.py create mode 100644 tensorflow/slim/datasets/download_and_convert_color.py create mode 100644 tensorflow/slim/datasets/download_and_convert_fabric.py create mode 100644 tensorflow/slim/datasets/fabric.py diff --git a/stylelens/attr_classification/eval_fabric_classification.sh b/stylelens/attr_classification/eval_fabric_classification.sh new file mode 100755 index 0000000..8cedbee --- /dev/null +++ b/stylelens/attr_classification/eval_fabric_classification.sh @@ -0,0 +1,15 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/fabric_model/model/train' +export EVAL_DIR_PATH='/home/lion/attr_dataset/fabric_model/model/eval' +export DATASET_DIR_PATH='/home/lion/attr_dataset/fabric_model/data/dataset' + +python /home/lion/bl-magi/tensorflow/slim/eval_image_classifier.py \ + --alsologtostderr\ + --eval_dir=$EVAL_DIR_PATH\ + --checkpoint_path=$TRAIN_DIR_PATH\ + --dataset_dir=$DATASET_DIR_PATH\ + --dataset_name=fabric\ + --dataset_split_name=validation\ + --model_name=inception_v3 diff --git a/stylelens/attr_classification/inceptionv3_retrain.py b/stylelens/attr_classification/inceptionv3_retrain.py deleted file mode 100644 index e275fbd..0000000 --- a/stylelens/attr_classification/inceptionv3_retrain.py +++ /dev/null @@ -1,1080 +0,0 @@ -# -*- coding: utf-8 -*- - -"""Inception v3 architecture 모델을 이용한 간단한 Transfer Learning (TensorBoard 포함) - -This example shows how to take a Inception v3 architecture model trained on -ImageNet images, and train a new top layer that can recognize other classes of -images. - -The top layer receives as input a 2048-dimensional vector for each image. We -train a softmax layer on top of this representation. Assuming the softmax layer -contains N labels, this corresponds to learning N + 2048*N model parameters -corresponding to the learned biases and weights. - -Here's an example, which assumes you have a folder containing class-named -subfolders, each full of images for each label. The example folder flower_photos -should have a structure like this: - -~/flower_photos/daisy/photo1.jpg -~/flower_photos/daisy/photo2.jpg -... -~/flower_photos/rose/anotherphoto77.jpg -... -~/flower_photos/sunflower/somepicture.jpg - -The subfolder names are important, since they define what label is applied to -each image, but the filenames themselves don't matter. Once your images are -prepared, you can run the training with a command like this: - - -```bash -bazel build tensorflow/examples/image_retraining:retrain && \ -bazel-bin/tensorflow/examples/image_retraining/retrain \ - --image_dir ~/flower_photos -``` - -Or, if you have a pip installation of tensorflow, `retrain.py` can be run -without bazel: - -```bash -python tensorflow/examples/image_retraining/retrain.py \ - --image_dir ~/flower_photos -``` - -You can replace the image_dir argument with any folder containing subfolders of -images. The label for each image is taken from the name of the subfolder it's -in. - -This produces a new model file that can be loaded and run by any TensorFlow -program, for example the label_image sample code. - - -To use with TensorBoard: - -By default, this script will log summaries to /tmp/retrain_logs directory - -Visualize the summaries with this command: - -tensorboard --logdir /tmp/retrain_logs - -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import argparse -from datetime import datetime -import hashlib -import os.path -import random -import re -import struct -import sys -import tarfile - -import numpy as np -from six.moves import urllib -import tensorflow as tf - -from tensorflow.python.framework import graph_util -from tensorflow.python.framework import tensor_shape -from tensorflow.python.platform import gfile -from tensorflow.python.util import compat - -FLAGS = None - -# 모든 파라미터들은 특정한 모델 architecture와 묶여(tied) 있다. -# 우리는 Inception v3를 사용할 것이다. 이는 tensor 이름이나 사이즈들을 포함하고 있다. -# 만약 당신이 이 스크립트를 다른 모델에 사용하고 싶다면, -# 당신이 사용하는 network를 반영하도록 tensor 이름이나 사이즈들을 변경해야만 할 것이다. -DATA_URL = 'http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz' -BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0' -BOTTLENECK_TENSOR_SIZE = 2048 -MODEL_INPUT_WIDTH = 299 -MODEL_INPUT_HEIGHT = 299 -MODEL_INPUT_DEPTH = 3 -JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0' -RESIZED_INPUT_TENSOR_NAME = 'ResizeBilinear:0' -MAX_NUM_IMAGES_PER_CLASS = 2 ** 27 - 1 # ~134M - - -def create_image_lists(image_dir, testing_percentage, validation_percentage): - """file system으로부터 training 이미지들의 list를 만든다. - - 이미지 디렉토리로부터 sub folder들을 분석하고, 그들을 training, testing, validation sets으로 나눈다. - 그리고 각각의 label을 위한 이미지 list와 그들의 경로(path)를 나타내는 자료구조(data structure)를 반환한다. - - 인수들(Args): - image_dir: 이미지들의 subfolder들을 포함한 folder의 String path. - testing_percentage: 전체 이미지중 테스트를 위해 사용되는 비율을 나타내는 Integer. - validation_percentage: 전체 이미지중 validation을 위해 사용되는 비율을 나타내는 Integer. - - 반환값들(Returns): - 각각의 label subfolder를 위한 enrtry를 포함한 dictionary A dictionary - (각각의 label에서 이미지드릉ㄴ training, testing, validation sets으로 나뉘어져 있다.) - """ - if not gfile.Exists(image_dir): - print("Image directory '" + image_dir + "' not found.") - return None - result = {} - sub_dirs = [x[0] for x in gfile.Walk(image_dir)] - # root directory는 처음에 온다. 따라서 이를 skip한다. - is_root_dir = True - for sub_dir in sub_dirs: - if is_root_dir: - is_root_dir = False - continue - extensions = ['jpg', 'jpeg', 'JPG', 'JPEG'] - file_list = [] - dir_name = os.path.basename(sub_dir) - if dir_name == image_dir: - continue - print("Looking for images in '" + dir_name + "'") - for extension in extensions: - file_glob = os.path.join(image_dir, dir_name, '*.' + extension) - file_list.extend(gfile.Glob(file_glob)) - if not file_list: - print('No files found') - continue - if len(file_list) < 20: - print('WARNING: Folder has less than 20 images, which may cause issues.') - elif len(file_list) > MAX_NUM_IMAGES_PER_CLASS: - print('WARNING: Folder {} has more than {} images. Some images will ' - 'never be selected.'.format(dir_name, MAX_NUM_IMAGES_PER_CLASS)) - label_name = re.sub(r'[^a-z0-9]+', ' ', dir_name.lower()) - training_images = [] - testing_images = [] - validation_images = [] - for file_name in file_list: - base_name = os.path.basename(file_name) - # 어떤 이미지로 리스트를 만들지 결정할때 파일 이름에 "_nohash_"가 포함되어 있으면 이를 무시할 수 있다. - # 이를 이용해서, 데이터셋을 만드는 사람은 서로 비슷한 사진들을 grouping할 수있다. - # 예를 들어, plant disease를 데이터셋을 만들기 위해서, 여러 장의 같은 잎사귀(leaf)를 grouping할 수 있다. - hash_name = re.sub(r'_nohash_.*$', '', file_name) - # 이는 일종의 마법처럼 보일 수 있다. 하지만, 우리는 이 파일이 training sets로 갈지, testing sets로 갈지, validation sets로 갈지 결정해야만 한다. - # 그리고 우리는 더많은 파일들이 추가되더라도, 같은 set에 이미 존재하는 파일들이 유지되길 원한다. - # 그렇게 하기 위해서는, 우리는 파일 이름 그자체로부터 결정하는 안정적인 방법이 있어야만 한다. - # 따라서, 우리는 파일 이름을 hash하고, 이를 이를 할당하는데 사용하는 확률을 결정하는데 사용한다. - hash_name_hashed = hashlib.sha1(compat.as_bytes(hash_name)).hexdigest() - percentage_hash = ((int(hash_name_hashed, 16) % - (MAX_NUM_IMAGES_PER_CLASS + 1)) * - (100.0 / MAX_NUM_IMAGES_PER_CLASS)) - if percentage_hash < validation_percentage: - validation_images.append(base_name) - elif percentage_hash < (testing_percentage + validation_percentage): - testing_images.append(base_name) - else: - training_images.append(base_name) - result[label_name] = { - 'dir': dir_name, - 'training': training_images, - 'testing': testing_images, - 'validation': validation_images, - } - return result - - -def get_image_path(image_lists, label_name, index, image_dir, category): - """"주어진 index에 대한 이미지 경로(path)를 리턴한다. - - 인수들(Args): - image_lists: 각각의 label에 대한 training image들의 Dictionary. - label_name: 우리가 얻고자하는 이미지의 Label string. - index: 우리가 얻고자하는 이미지의 Int offset. 이는 레이블에 대한 가능한 이미지의 개수에 따라 moduloed 될 것이다. - 따라서 임의의 큰값이 될 수도 있다. - image_dir: training 이미지들의 subfolder들을 포함하고 있는 Root folder string - category: training, testing, 또는 validation sets으로부터 이미지에 pull할 Name string - - 반환값(Returns): - 요청된 파라미터들이 만나게 될 이미지에 대한 파일 시스템 경로(file system path) string - - """ - if label_name not in image_lists: - tf.logging.fatal('Label does not exist %s.', label_name) - label_lists = image_lists[label_name] - if category not in label_lists: - tf.logging.fatal('Category does not exist %s.', category) - category_list = label_lists[category] - if not category_list: - tf.logging.fatal('Label %s has no images in the category %s.', - label_name, category) - mod_index = index % len(category_list) - base_name = category_list[mod_index] - sub_dir = label_lists['dir'] - full_path = os.path.join(image_dir, sub_dir, base_name) - return full_path - - -def get_bottleneck_path(image_lists, label_name, index, bottleneck_dir, - category): - """"Returns a path to a bottleneck file for a label at the given index. - - Args: - image_lists: Dictionary of training images for each label. - label_name: Label string we want to get an image for. - index: Integer offset of the image we want. This will be moduloed by the - available number of images for the label, so it can be arbitrarily large. - bottleneck_dir: Folder string holding cached files of bottleneck values. - category: Name string of set to pull images from - training, testing, or - validation. - - Returns: - File system path string to an image that meets the requested parameters. - """ - return get_image_path(image_lists, label_name, index, bottleneck_dir, - category) + '.txt' - - -def create_inception_graph(): - """"Creates a graph from saved GraphDef file and returns a Graph object. - - Returns: - Graph holding the trained Inception network, and various tensors we'll be - manipulating. - """ - with tf.Graph().as_default() as graph: - model_filename = os.path.join( - FLAGS.model_dir, 'classify_image_graph_def.pb') - with gfile.FastGFile(model_filename, 'rb') as f: - graph_def = tf.GraphDef() - graph_def.ParseFromString(f.read()) - bottleneck_tensor, jpeg_data_tensor, resized_input_tensor = ( - tf.import_graph_def(graph_def, name='', return_elements=[ - BOTTLENECK_TENSOR_NAME, JPEG_DATA_TENSOR_NAME, - RESIZED_INPUT_TENSOR_NAME])) - return graph, bottleneck_tensor, jpeg_data_tensor, resized_input_tensor - - -def run_bottleneck_on_image(sess, image_data, image_data_tensor, - bottleneck_tensor): - """Runs inference on an image to extract the 'bottleneck' summary layer. - - Args: - sess: Current active TensorFlow Session. - image_data: String of raw JPEG data. - image_data_tensor: Input data layer in the graph. - bottleneck_tensor: Layer before the final softmax. - - Returns: - Numpy array of bottleneck values. - """ - bottleneck_values = sess.run( - bottleneck_tensor, - {image_data_tensor: image_data}) - bottleneck_values = np.squeeze(bottleneck_values) - return bottleneck_values - - -def maybe_download_and_extract(): - """Download and extract model tar file. - - If the pretrained model we're using doesn't already exist, this function - downloads it from the TensorFlow.org website and unpacks it into a directory. - """ - dest_directory = FLAGS.model_dir - if not os.path.exists(dest_directory): - os.makedirs(dest_directory) - filename = DATA_URL.split('/')[-1] - filepath = os.path.join(dest_directory, filename) - if not os.path.exists(filepath): - - def _progress(count, block_size, total_size): - sys.stdout.write('\r>> Downloading %s %.1f%%' % - (filename, - float(count * block_size) / float(total_size) * 100.0)) - sys.stdout.flush() - - filepath, _ = urllib.request.urlretrieve(DATA_URL, - filepath, - _progress) - print() - statinfo = os.stat(filepath) - print('Successfully downloaded', filename, statinfo.st_size, 'bytes.') - tarfile.open(filepath, 'r:gz').extractall(dest_directory) - - -def ensure_dir_exists(dir_name): - """Makes sure the folder exists on disk. - - Args: - dir_name: Path string to the folder we want to create. - """ - if not os.path.exists(dir_name): - os.makedirs(dir_name) - - -def write_list_of_floats_to_file(list_of_floats, file_path): - """Writes a given list of floats to a binary file. - - Args: - list_of_floats: List of floats we want to write to a file. - file_path: Path to a file where list of floats will be stored. - - """ - - s = struct.pack('d' * BOTTLENECK_TENSOR_SIZE, *list_of_floats) - with open(file_path, 'wb') as f: - f.write(s) - - -def read_list_of_floats_from_file(file_path): - """Reads list of floats from a given file. - - Args: - file_path: Path to a file where list of floats was stored. - Returns: - Array of bottleneck values (list of floats). - - """ - - with open(file_path, 'rb') as f: - s = struct.unpack('d' * BOTTLENECK_TENSOR_SIZE, f.read()) - return list(s) - - -bottleneck_path_2_bottleneck_values = {} - - -def create_bottleneck_file(bottleneck_path, image_lists, label_name, index, - image_dir, category, sess, jpeg_data_tensor, - bottleneck_tensor): - """Create a single bottleneck file.""" - print('Creating bottleneck at ' + bottleneck_path) - image_path = get_image_path(image_lists, label_name, index, - image_dir, category) - if not gfile.Exists(image_path): - tf.logging.fatal('File does not exist %s', image_path) - image_data = gfile.FastGFile(image_path, 'rb').read() - try: - bottleneck_values = run_bottleneck_on_image( - sess, image_data, jpeg_data_tensor, bottleneck_tensor) - except: - raise RuntimeError('Error during processing file %s' % image_path) - - bottleneck_string = ','.join(str(x) for x in bottleneck_values) - with open(bottleneck_path, 'w') as bottleneck_file: - bottleneck_file.write(bottleneck_string) - - -def get_or_create_bottleneck(sess, image_lists, label_name, index, image_dir, - category, bottleneck_dir, jpeg_data_tensor, - bottleneck_tensor): - """Retrieves or calculates bottleneck values for an image. - - If a cached version of the bottleneck data exists on-disk, return that, - otherwise calculate the data and save it to disk for future use. - - Args: - sess: The current active TensorFlow Session. - image_lists: Dictionary of training images for each label. - label_name: Label string we want to get an image for. - index: Integer offset of the image we want. This will be modulo-ed by the - available number of images for the label, so it can be arbitrarily large. - image_dir: Root folder string of the subfolders containing the training - images. - category: Name string of which set to pull images from - training, testing, - or validation. - bottleneck_dir: Folder string holding cached files of bottleneck values. - jpeg_data_tensor: The tensor to feed loaded jpeg data into. - bottleneck_tensor: The output tensor for the bottleneck values. - - Returns: - Numpy array of values produced by the bottleneck layer for the image. - """ - label_lists = image_lists[label_name] - sub_dir = label_lists['dir'] - sub_dir_path = os.path.join(bottleneck_dir, sub_dir) - ensure_dir_exists(sub_dir_path) - bottleneck_path = get_bottleneck_path(image_lists, label_name, index, - bottleneck_dir, category) - if not os.path.exists(bottleneck_path): - create_bottleneck_file(bottleneck_path, image_lists, label_name, index, - image_dir, category, sess, jpeg_data_tensor, - bottleneck_tensor) - with open(bottleneck_path, 'r') as bottleneck_file: - bottleneck_string = bottleneck_file.read() - did_hit_error = False - try: - bottleneck_values = [float(x) for x in bottleneck_string.split(',')] - except ValueError: - print('Invalid float found, recreating bottleneck') - did_hit_error = True - if did_hit_error: - create_bottleneck_file(bottleneck_path, image_lists, label_name, index, - image_dir, category, sess, jpeg_data_tensor, - bottleneck_tensor) - with open(bottleneck_path, 'r') as bottleneck_file: - bottleneck_string = bottleneck_file.read() - # Allow exceptions to propagate here, since they shouldn't happen after a - # fresh creation - bottleneck_values = [float(x) for x in bottleneck_string.split(',')] - return bottleneck_values - - -def cache_bottlenecks(sess, image_lists, image_dir, bottleneck_dir, - jpeg_data_tensor, bottleneck_tensor): - """Ensures all the training, testing, and validation bottlenecks are cached. - - Because we're likely to read the same image multiple times (if there are no - distortions applied during training) it can speed things up a lot if we - calculate the bottleneck layer values once for each image during - preprocessing, and then just read those cached values repeatedly during - training. Here we go through all the images we've found, calculate those - values, and save them off. - - Args: - sess: The current active TensorFlow Session. - image_lists: Dictionary of training images for each label. - image_dir: Root folder string of the subfolders containing the training - images. - bottleneck_dir: Folder string holding cached files of bottleneck values. - jpeg_data_tensor: Input tensor for jpeg data from file. - bottleneck_tensor: The penultimate output layer of the graph. - - Returns: - Nothing. - """ - how_many_bottlenecks = 0 - ensure_dir_exists(bottleneck_dir) - for label_name, label_lists in image_lists.items(): - for category in ['training', 'testing', 'validation']: - category_list = label_lists[category] - for index, unused_base_name in enumerate(category_list): - get_or_create_bottleneck(sess, image_lists, label_name, index, - image_dir, category, bottleneck_dir, - jpeg_data_tensor, bottleneck_tensor) - - how_many_bottlenecks += 1 - if how_many_bottlenecks % 100 == 0: - print(str(how_many_bottlenecks) + ' bottleneck files created.') - - -def get_random_cached_bottlenecks(sess, image_lists, how_many, category, - bottleneck_dir, image_dir, jpeg_data_tensor, - bottleneck_tensor): - """Retrieves bottleneck values for cached images. - - If no distortions are being applied, this function can retrieve the cached - bottleneck values directly from disk for images. It picks a random set of - images from the specified category. - - Args: - sess: Current TensorFlow Session. - image_lists: Dictionary of training images for each label. - how_many: If positive, a random sample of this size will be chosen. - If negative, all bottlenecks will be retrieved. - category: Name string of which set to pull from - training, testing, or - validation. - bottleneck_dir: Folder string holding cached files of bottleneck values. - image_dir: Root folder string of the subfolders containing the training - images. - jpeg_data_tensor: The layer to feed jpeg image data into. - bottleneck_tensor: The bottleneck output layer of the CNN graph. - - Returns: - List of bottleneck arrays, their corresponding ground truths, and the - relevant filenames. - """ - class_count = len(image_lists.keys()) - bottlenecks = [] - ground_truths = [] - filenames = [] - if how_many >= 0: - # Retrieve a random sample of bottlenecks. - for unused_i in range(how_many): - label_index = random.randrange(class_count) - label_name = list(image_lists.keys())[label_index] - image_index = random.randrange(MAX_NUM_IMAGES_PER_CLASS + 1) - image_name = get_image_path(image_lists, label_name, image_index, - image_dir, category) - bottleneck = get_or_create_bottleneck(sess, image_lists, label_name, - image_index, image_dir, category, - bottleneck_dir, jpeg_data_tensor, - bottleneck_tensor) - ground_truth = np.zeros(class_count, dtype=np.float32) - ground_truth[label_index] = 1.0 - bottlenecks.append(bottleneck) - ground_truths.append(ground_truth) - filenames.append(image_name) - else: - # Retrieve all bottlenecks. - for label_index, label_name in enumerate(image_lists.keys()): - for image_index, image_name in enumerate( - image_lists[label_name][category]): - image_name = get_image_path(image_lists, label_name, image_index, - image_dir, category) - bottleneck = get_or_create_bottleneck(sess, image_lists, label_name, - image_index, image_dir, category, - bottleneck_dir, jpeg_data_tensor, - bottleneck_tensor) - ground_truth = np.zeros(class_count, dtype=np.float32) - ground_truth[label_index] = 1.0 - bottlenecks.append(bottleneck) - ground_truths.append(ground_truth) - filenames.append(image_name) - return bottlenecks, ground_truths, filenames - - -def get_random_distorted_bottlenecks( - sess, image_lists, how_many, category, image_dir, input_jpeg_tensor, - distorted_image, resized_input_tensor, bottleneck_tensor): - """Retrieves bottleneck values for training images, after distortions. - - If we're training with distortions like crops, scales, or flips, we have to - recalculate the full model for every image, and so we can't use cached - bottleneck values. Instead we find random images for the requested category, - run them through the distortion graph, and then the full graph to get the - bottleneck results for each. - - Args: - sess: Current TensorFlow Session. - image_lists: Dictionary of training images for each label. - how_many: The integer number of bottleneck values to return. - category: Name string of which set of images to fetch - training, testing, - or validation. - image_dir: Root folder string of the subfolders containing the training - images. - input_jpeg_tensor: The input layer we feed the image data to. - distorted_image: The output node of the distortion graph. - resized_input_tensor: The input node of the recognition graph. - bottleneck_tensor: The bottleneck output layer of the CNN graph. - - Returns: - List of bottleneck arrays and their corresponding ground truths. - """ - class_count = len(image_lists.keys()) - bottlenecks = [] - ground_truths = [] - for unused_i in range(how_many): - label_index = random.randrange(class_count) - label_name = list(image_lists.keys())[label_index] - image_index = random.randrange(MAX_NUM_IMAGES_PER_CLASS + 1) - image_path = get_image_path(image_lists, label_name, image_index, image_dir, - category) - if not gfile.Exists(image_path): - tf.logging.fatal('File does not exist %s', image_path) - jpeg_data = gfile.FastGFile(image_path, 'rb').read() - # Note that we materialize the distorted_image_data as a numpy array before - # sending running inference on the image. This involves 2 memory copies and - # might be optimized in other implementations. - distorted_image_data = sess.run(distorted_image, - {input_jpeg_tensor: jpeg_data}) - bottleneck = run_bottleneck_on_image(sess, distorted_image_data, - resized_input_tensor, - bottleneck_tensor) - ground_truth = np.zeros(class_count, dtype=np.float32) - ground_truth[label_index] = 1.0 - bottlenecks.append(bottleneck) - ground_truths.append(ground_truth) - return bottlenecks, ground_truths - - -def should_distort_images(flip_left_right, random_crop, random_scale, - random_brightness): - """Whether any distortions are enabled, from the input flags. - - Args: - flip_left_right: Boolean whether to randomly mirror images horizontally. - random_crop: Integer percentage setting the total margin used around the - crop box. - random_scale: Integer percentage of how much to vary the scale by. - random_brightness: Integer range to randomly multiply the pixel values by. - - Returns: - Boolean value indicating whether any distortions should be applied. - """ - return (flip_left_right or (random_crop != 0) or (random_scale != 0) or - (random_brightness != 0)) - - -def add_input_distortions(flip_left_right, random_crop, random_scale, - random_brightness): - """Creates the operations to apply the specified distortions. - - During training it can help to improve the results if we run the images - through simple distortions like crops, scales, and flips. These reflect the - kind of variations we expect in the real world, and so can help train the - model to cope with natural data more effectively. Here we take the supplied - parameters and construct a network of operations to apply them to an image. - - Cropping - ~~~~~~~~ - - Cropping is done by placing a bounding box at a random position in the full - image. The cropping parameter controls the size of that box relative to the - input image. If it's zero, then the box is the same size as the input and no - cropping is performed. If the value is 50%, then the crop box will be half the - width and height of the input. In a diagram it looks like this: - - < width > - +---------------------+ - | | - | width - crop% | - | < > | - | +------+ | - | | | | - | | | | - | | | | - | +------+ | - | | - | | - +---------------------+ - - Scaling - ~~~~~~~ - - Scaling is a lot like cropping, except that the bounding box is always - centered and its size varies randomly within the given range. For example if - the scale percentage is zero, then the bounding box is the same size as the - input and no scaling is applied. If it's 50%, then the bounding box will be in - a random range between half the width and height and full size. - - Args: - flip_left_right: Boolean whether to randomly mirror images horizontally. - random_crop: Integer percentage setting the total margin used around the - crop box. - random_scale: Integer percentage of how much to vary the scale by. - random_brightness: Integer range to randomly multiply the pixel values by. - graph. - - Returns: - The jpeg input layer and the distorted result tensor. - """ - - jpeg_data = tf.placeholder(tf.string, name='DistortJPGInput') - decoded_image = tf.image.decode_jpeg(jpeg_data, channels=MODEL_INPUT_DEPTH) - decoded_image_as_float = tf.cast(decoded_image, dtype=tf.float32) - decoded_image_4d = tf.expand_dims(decoded_image_as_float, 0) - margin_scale = 1.0 + (random_crop / 100.0) - resize_scale = 1.0 + (random_scale / 100.0) - margin_scale_value = tf.constant(margin_scale) - resize_scale_value = tf.random_uniform(tensor_shape.scalar(), - minval=1.0, - maxval=resize_scale) - scale_value = tf.multiply(margin_scale_value, resize_scale_value) - precrop_width = tf.multiply(scale_value, MODEL_INPUT_WIDTH) - precrop_height = tf.multiply(scale_value, MODEL_INPUT_HEIGHT) - precrop_shape = tf.stack([precrop_height, precrop_width]) - precrop_shape_as_int = tf.cast(precrop_shape, dtype=tf.int32) - precropped_image = tf.image.resize_bilinear(decoded_image_4d, - precrop_shape_as_int) - precropped_image_3d = tf.squeeze(precropped_image, squeeze_dims=[0]) - cropped_image = tf.random_crop(precropped_image_3d, - [MODEL_INPUT_HEIGHT, MODEL_INPUT_WIDTH, - MODEL_INPUT_DEPTH]) - if flip_left_right: - flipped_image = tf.image.random_flip_left_right(cropped_image) - else: - flipped_image = cropped_image - brightness_min = 1.0 - (random_brightness / 100.0) - brightness_max = 1.0 + (random_brightness / 100.0) - brightness_value = tf.random_uniform(tensor_shape.scalar(), - minval=brightness_min, - maxval=brightness_max) - brightened_image = tf.multiply(flipped_image, brightness_value) - distort_result = tf.expand_dims(brightened_image, 0, name='DistortResult') - return jpeg_data, distort_result - - -def variable_summaries(var): - """Attach a lot of summaries to a Tensor (for TensorBoard visualization).""" - with tf.name_scope('summaries'): - mean = tf.reduce_mean(var) - tf.summary.scalar('mean', mean) - with tf.name_scope('stddev'): - stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean))) - tf.summary.scalar('stddev', stddev) - tf.summary.scalar('max', tf.reduce_max(var)) - tf.summary.scalar('min', tf.reduce_min(var)) - tf.summary.histogram('histogram', var) - - -def add_final_training_ops(class_count, final_tensor_name, bottleneck_tensor): - """Adds a new softmax and fully-connected layer for training. - - We need to retrain the top layer to identify our new classes, so this function - adds the right operations to the graph, along with some variables to hold the - weights, and then sets up all the gradients for the backward pass. - - The set up for the softmax and fully-connected layers is based on: - https://tensorflow.org/versions/master/tutorials/mnist/beginners/index.html - - Args: - class_count: Integer of how many categories of things we're trying to - recognize. - final_tensor_name: Name string for the new final node that produces results. - bottleneck_tensor: The output of the main CNN graph. - - Returns: - The tensors for the training and cross entropy results, and tensors for the - bottleneck input and ground truth input. - """ - with tf.name_scope('input'): - bottleneck_input = tf.placeholder_with_default( - bottleneck_tensor, shape=[None, BOTTLENECK_TENSOR_SIZE], - name='BottleneckInputPlaceholder') - - ground_truth_input = tf.placeholder(tf.float32, - [None, class_count], - name='GroundTruthInput') - - # Organizing the following ops as `final_training_ops` so they're easier - # to see in TensorBoard - layer_name = 'final_training_ops' - with tf.name_scope(layer_name): - with tf.name_scope('weights'): - initial_value = tf.truncated_normal([BOTTLENECK_TENSOR_SIZE, class_count], - stddev=0.001) - - layer_weights = tf.Variable(initial_value, name='final_weights') - - variable_summaries(layer_weights) - with tf.name_scope('biases'): - layer_biases = tf.Variable(tf.zeros([class_count]), name='final_biases') - variable_summaries(layer_biases) - with tf.name_scope('Wx_plus_b'): - logits = tf.matmul(bottleneck_input, layer_weights) + layer_biases - tf.summary.histogram('pre_activations', logits) - - final_tensor = tf.nn.softmax(logits, name=final_tensor_name) - tf.summary.histogram('activations', final_tensor) - - with tf.name_scope('cross_entropy'): - cross_entropy = tf.nn.softmax_cross_entropy_with_logits( - labels=ground_truth_input, logits=logits) - with tf.name_scope('total'): - cross_entropy_mean = tf.reduce_mean(cross_entropy) - tf.summary.scalar('cross_entropy', cross_entropy_mean) - - with tf.name_scope('train'): - optimizer = tf.train.GradientDescentOptimizer(FLAGS.learning_rate) - train_step = optimizer.minimize(cross_entropy_mean) - - return (train_step, cross_entropy_mean, bottleneck_input, ground_truth_input, - final_tensor) - - -def add_evaluation_step(result_tensor, ground_truth_tensor): - """Inserts the operations we need to evaluate the accuracy of our results. - - Args: - result_tensor: The new final node that produces results. - ground_truth_tensor: The node we feed ground truth data - into. - - Returns: - Tuple of (evaluation step, prediction). - """ - with tf.name_scope('accuracy'): - with tf.name_scope('correct_prediction'): - prediction = tf.argmax(result_tensor, 1) - correct_prediction = tf.equal( - prediction, tf.argmax(ground_truth_tensor, 1)) - with tf.name_scope('accuracy'): - evaluation_step = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) - tf.summary.scalar('accuracy', evaluation_step) - return evaluation_step, prediction - - -def main(_): - # TensorBoard의 summaries를 write할 directory를 설정한다. - if tf.gfile.Exists(FLAGS.summaries_dir): - tf.gfile.DeleteRecursively(FLAGS.summaries_dir) - tf.gfile.MakeDirs(FLAGS.summaries_dir) - - # pre-trained graph를 생성한다. - maybe_download_and_extract() - graph, bottleneck_tensor, jpeg_data_tensor, resized_image_tensor = ( - create_inception_graph()) - - # 폴더 구조를 살펴보고, 모든 이미지에 대한 lists를 생성한다. - image_lists = create_image_lists(FLAGS.image_dir, FLAGS.testing_percentage, - FLAGS.validation_percentage) - class_count = len(image_lists.keys()) - if class_count == 0: - print('No valid folders of images found at ' + FLAGS.image_dir) - return -1 - if class_count == 1: - print('Only one valid folder of images found at ' + FLAGS.image_dir + - ' - multiple classes are needed for classification.') - return -1 - - # 커맨드라인 flag에 distortion에 관련된 설정이 있으면 distortion들을 적용한다. - do_distort_images = should_distort_images( - FLAGS.flip_left_right, FLAGS.random_crop, FLAGS.random_scale, - FLAGS.random_brightness) - - with tf.Session(graph=graph) as sess: - - if do_distort_images: - # 우리는 distortion들을 적용할것이다. 따라서 필요한 연산들(operations)을 설정한다. - (distorted_jpeg_data_tensor, - distorted_image_tensor) = add_input_distortions( - FLAGS.flip_left_right, FLAGS.random_crop, - FLAGS.random_scale, FLAGS.random_brightness) - else: - # 우리는 계산된 'bottleneck' 이미지 summaries를 가지고 있다. - # 이를 disk에 캐싱(caching)할 것이다. - cache_bottlenecks(sess, image_lists, FLAGS.image_dir, - FLAGS.bottleneck_dir, jpeg_data_tensor, - bottleneck_tensor) - - # 우리가 학습시킬(training) 새로운 layer를 추가한다. - (train_step, cross_entropy, bottleneck_input, ground_truth_input, - final_tensor) = add_final_training_ops(len(image_lists.keys()), - FLAGS.final_tensor_name, - bottleneck_tensor) - - # 우리의 새로운 layer의 정확도를 평가(evalute)하기 위한 새로운 operation들을 생성한다. - evaluation_step, prediction = add_evaluation_step( - final_tensor, ground_truth_input) - - # 모든 summaries를 합치고(merge) summaries_dir에 쓴다.(write) - merged = tf.summary.merge_all() - train_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/train', - sess.graph) - - validation_writer = tf.summary.FileWriter( - FLAGS.summaries_dir + '/validation') - - # 우리의 모든 가중치들(weights)과 그들의 초기값들을 설정한다. - init = tf.global_variables_initializer() - sess.run(init) - - # 커맨드 라인에서 지정한 횟수만큼 학습을 진행한다. - for i in range(FLAGS.how_many_training_steps): - # bottleneck 값들의 batch를 얻는다. 이는 매번 distortion을 적용하고 계산하거나, - # disk에 저장된 chache로부터 얻을 수 있다. - if do_distort_images: - (train_bottlenecks, - train_ground_truth) = get_random_distorted_bottlenecks( - sess, image_lists, FLAGS.train_batch_size, 'training', - FLAGS.image_dir, distorted_jpeg_data_tensor, - distorted_image_tensor, resized_image_tensor, bottleneck_tensor) - else: - (train_bottlenecks, - train_ground_truth, _) = get_random_cached_bottlenecks( - sess, image_lists, FLAGS.train_batch_size, 'training', - FLAGS.bottleneck_dir, FLAGS.image_dir, jpeg_data_tensor, - bottleneck_tensor) - # grpah에 bottleneck과 ground truth를 feed하고, training step을 진행한다. - # TensorBoard를 위한 'merged' op을 이용해서 training summaries을 capture한다. - - train_summary, _ = sess.run( - [merged, train_step], - feed_dict={bottleneck_input: train_bottlenecks, - ground_truth_input: train_ground_truth}) - train_writer.add_summary(train_summary, i) - - # 일정 step마다 graph의 training이 얼마나 잘 되고 있는지 출력한다. - is_last_step = (i + 1 == FLAGS.how_many_training_steps) - if (i % FLAGS.eval_step_interval) == 0 or is_last_step: - train_accuracy, cross_entropy_value = sess.run( - [evaluation_step, cross_entropy], - feed_dict={bottleneck_input: train_bottlenecks, - ground_truth_input: train_ground_truth}) - print('%s: Step %d: Train accuracy = %.1f%%' % (datetime.now(), i, - train_accuracy * 100)) - print('%s: Step %d: Cross entropy = %f' % (datetime.now(), i, - cross_entropy_value)) - validation_bottlenecks, validation_ground_truth, _ = ( - get_random_cached_bottlenecks( - sess, image_lists, FLAGS.validation_batch_size, 'validation', - FLAGS.bottleneck_dir, FLAGS.image_dir, jpeg_data_tensor, - bottleneck_tensor)) - # validation step을 진행한다. - # TensorBoard를 위한 'merged' op을 이용해서 training summaries을 capture한다. - validation_summary, validation_accuracy = sess.run( - [merged, evaluation_step], - feed_dict={bottleneck_input: validation_bottlenecks, - ground_truth_input: validation_ground_truth}) - validation_writer.add_summary(validation_summary, i) - print('%s: Step %d: Validation accuracy = %.1f%% (N=%d)' % - (datetime.now(), i, validation_accuracy * 100, - len(validation_bottlenecks))) - - # 트레이닝 과정이 모두 끝났다. - # 따라서 이전에 보지 못했던 이미지를 통해 마지막 test 평가(evalution)을 진행한다. - test_bottlenecks, test_ground_truth, test_filenames = ( - get_random_cached_bottlenecks(sess, image_lists, FLAGS.test_batch_size, - 'testing', FLAGS.bottleneck_dir, - FLAGS.image_dir, jpeg_data_tensor, - bottleneck_tensor)) - test_accuracy, predictions = sess.run( - [evaluation_step, prediction], - feed_dict={bottleneck_input: test_bottlenecks, - ground_truth_input: test_ground_truth}) - print('Final test accuracy = %.1f%% (N=%d)' % ( - test_accuracy * 100, len(test_bottlenecks))) - - if FLAGS.print_misclassified_test_images: - print('=== MISCLASSIFIED TEST IMAGES ===') - for i, test_filename in enumerate(test_filenames): - if predictions[i] != test_ground_truth[i].argmax(): - print('%70s %s' % (test_filename, - list(image_lists.keys())[predictions[i]])) - - # 학습된 graph와 weights들을 포함한 labels를 쓴다.(write) - output_graph_def = graph_util.convert_variables_to_constants( - sess, graph.as_graph_def(), [FLAGS.final_tensor_name]) - with gfile.FastGFile(FLAGS.output_graph, 'wb') as f: - f.write(output_graph_def.SerializeToString()) - with gfile.FastGFile(FLAGS.output_labels, 'w') as f: - f.write('\n'.join(image_lists.keys()) + '\n') - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument( - '--image_dir', - type=str, - default='', - help='Path to folders of labeled images.' - ) - parser.add_argument( - '--output_graph', - type=str, - default='/tmp/output_graph.pb', - help='Where to save the trained graph.' - ) - parser.add_argument( - '--output_labels', - type=str, - default='/tmp/output_labels.txt', - help='Where to save the trained graph\'s labels.' - ) - parser.add_argument( - '--summaries_dir', - type=str, - default='/tmp/retrain_logs', - help='Where to save summary logs for TensorBoard.' - ) - parser.add_argument( - '--how_many_training_steps', - type=int, - default=20000, - help='How many training steps to run before ending.' - ) - parser.add_argument( - '--learning_rate', - type=float, - default=0.001, - help='How large a learning rate to use when training.' - ) - parser.add_argument( - '--testing_percentage', - type=int, - default=10, - help='What percentage of images to use as a test set.' - ) - parser.add_argument( - '--validation_percentage', - type=int, - default=10, - help='What percentage of images to use as a validation set.' - ) - parser.add_argument( - '--eval_step_interval', - type=int, - default=10, - help='How often to evaluate the training results.' - ) - parser.add_argument( - '--train_batch_size', - type=int, - default=100, - help='How many images to train on at a time.' - ) - parser.add_argument( - '--test_batch_size', - type=int, - default=-1, - help="""\ - How many images to test on. This test set is only used once, to evaluate - the final accuracy of the model after training completes. - A value of -1 causes the entire test set to be used, which leads to more - stable results across runs.\ - """ - ) - parser.add_argument( - '--validation_batch_size', - type=int, - default=100, - help="""\ - How many images to use in an evaluation batch. This validation set is - used much more often than the test set, and is an early indicator of how - accurate the model is during training. - A value of -1 causes the entire validation set to be used, which leads to - more stable results across training iterations, but may be slower on large - training sets.\ - """ - ) - parser.add_argument( - '--print_misclassified_test_images', - default=False, - help="""\ - Whether to print out a list of all misclassified test images.\ - """, - action='store_true' - ) - parser.add_argument( - '--model_dir', - type=str, - default='/tmp/imagenet', - help="""\ - Path to classify_image_graph_def.pb, - imagenet_synset_to_human_label_map.txt, and - imagenet_2012_challenge_label_map_proto.pbtxt.\ - """ - ) - parser.add_argument( - '--bottleneck_dir', - type=str, - default='/tmp/bottleneck', - help='Path to cache bottleneck layer values as files.' - ) - parser.add_argument( - '--final_tensor_name', - type=str, - default='final_result', - help="""\ - The name of the output classification layer in the retrained graph.\ - """ - ) - parser.add_argument( - '--flip_left_right', - default=False, - help="""\ - Whether to randomly flip half of the training images horizontally.\ - """, - action='store_true' - ) - parser.add_argument( - '--random_crop', - type=int, - default=0, - help="""\ - A percentage determining how much of a margin to randomly crop off the - training images.\ - """ - ) - parser.add_argument( - '--random_scale', - type=int, - default=0, - help="""\ - A percentage determining how much to randomly scale up the size of the - training images by.\ - """ - ) - parser.add_argument( - '--random_brightness', - type=int, - default=0, - help="""\ - A percentage determining how much to randomly multiply the training image - input pixels up or down by.\ - """ - ) - FLAGS, unparsed = parser.parse_known_args() - tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) diff --git a/stylelens/attr_classification/retrain_run_inference.py b/stylelens/attr_classification/retrain_run_inference.py deleted file mode 100644 index e388e39..0000000 --- a/stylelens/attr_classification/retrain_run_inference.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -"""Inception v3 architecture 모델을 retraining한 모델을 이용해서 이미지에 대한 추론(inference)을 진행하는 예제""" - -import numpy as np -import tensorflow as tf - -imagePath = '/tmp/test_pants1.jpg' # 추론을 진행할 이미지 경로 -modelFullPath = '/tmp/output_graph.pb' # 읽어들일 graph 파일 경로 -labelsFullPath = '/tmp/output_labels.txt' # 읽어들일 labels 파일 경로 - - -def create_graph(): - """저장된(saved) GraphDef 파일로부터 graph를 생성하고 saver를 반환한다.""" - # 저장된(saved) graph_def.pb로부터 graph를 생성한다. - with tf.gfile.FastGFile(modelFullPath, 'rb') as f: - graph_def = tf.GraphDef() - graph_def.ParseFromString(f.read()) - _ = tf.import_graph_def(graph_def, name='') - - -def run_inference_on_image(): - answer = None - - if not tf.gfile.Exists(imagePath): - tf.logging.fatal('File does not exist %s', imagePath) - return answer - - image_data = tf.gfile.FastGFile(imagePath, 'rb').read() - - # 저장된(saved) GraphDef 파일로부터 graph를 생성한다. - create_graph() - - with tf.Session() as sess: - - softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') - predictions = sess.run(softmax_tensor, - {'DecodeJpeg/contents:0': image_data}) - predictions = np.squeeze(predictions) - - top_k = predictions.argsort()[-5:][::-1] # 가장 높은 확률을 가진 5개(top 5)의 예측값(predictions)을 얻는다. - f = open(labelsFullPath, 'rb') - lines = f.readlines() - labels = [str(w).replace("\n", "") for w in lines] - for node_id in top_k: - human_string = labels[node_id] - score = predictions[node_id] - print('%s (score = %.5f)' % (human_string, score)) - - answer = labels[top_k[0]] - return answer - - -if __name__ == '__main__': - run_inference_on_image() diff --git a/stylelens/attr_classification/train_fabric_classification.sh b/stylelens/attr_classification/train_fabric_classification.sh new file mode 100755 index 0000000..946d1a0 --- /dev/null +++ b/stylelens/attr_classification/train_fabric_classification.sh @@ -0,0 +1,16 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/fabric_model/model/train' +export DATASET_DIR_PATH='/home/lion/attr_dataset/fabric_model/data/dataset' + +python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ + --train_dir=$TRAIN_DIR_PATH\ + --dataset_dir=$DATASET_DIR_PATH\ + --dataset_name=fabric\ + --dataset_split_name=train\ + --num_clones 7 \ + --model_name=inception_v3\ + --checkpoint_path=/home/lion/attr_dataset/fabric_model/data/checkpoints/inception_v3.ckpt\ + --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits\ + --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits diff --git a/stylelens/dataset/deepfashion/build_image_data.py b/stylelens/dataset/deepfashion/build_image_data.py new file mode 100644 index 0000000..2669f6a --- /dev/null +++ b/stylelens/dataset/deepfashion/build_image_data.py @@ -0,0 +1,384 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from datetime import datetime +import os +import random +import sys +import threading + +import numpy as np +import tensorflow as tf + +tf.app.flags.DEFINE_string('train_directory', '', + 'Training data directory') +tf.app.flags.DEFINE_string('validation_directory', '', + 'Validation data directory') +tf.app.flags.DEFINE_string('output_directory', '', + 'Output data directory') + +tf.app.flags.DEFINE_integer('train_shards', 2, + 'Number of shards in training TFRecord files.') +tf.app.flags.DEFINE_integer('validation_shards', 2, + 'Number of shards in validation TFRecord files.') + +tf.app.flags.DEFINE_integer('num_threads', 2, + 'Number of threads to preprocess the images.') + +# The labels file contains a list of valid labels are held in this file. +# Assumes that the file contains entries as such: +# dog +# cat +# flower +# where each line corresponds to a label. We map each label contained in +# the file to an integer corresponding to the line number starting from 0. +tf.app.flags.DEFINE_string('labels_file', '', 'Labels file') + + +FLAGS = tf.app.flags.FLAGS + + +def _int64_feature(value): + """Wrapper for inserting int64 features into Example proto.""" + if not isinstance(value, list): + value = [value] + return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) + + +def _bytes_feature(value): + """Wrapper for inserting bytes features into Example proto.""" + return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) + + +def _convert_to_example(filename, image_buffer, label, text, height, width): + """Build an Example proto for an example. + + Args: + filename: string, path to an image file, e.g., '/path/to/example.JPG' + image_buffer: string, JPEG encoding of RGB image + label: integer, identifier for the ground truth for the network + text: string, unique human-readable, e.g. 'dog' + height: integer, image height in pixels + width: integer, image width in pixels + Returns: + Example proto + """ + + colorspace = 'RGB' + channels = 3 + image_format = 'JPEG' + + example = tf.train.Example(features=tf.train.Features(feature={ + 'image/height': _int64_feature(height), + 'image/width': _int64_feature(width), + 'image/colorspace': _bytes_feature(tf.compat.as_bytes(colorspace)), + 'image/channels': _int64_feature(channels), + 'image/class/label': _int64_feature(label), + 'image/class/text': _bytes_feature(tf.compat.as_bytes(text)), + 'image/format': _bytes_feature(tf.compat.as_bytes(image_format)), + 'image/filename': _bytes_feature(tf.compat.as_bytes(os.path.basename(filename))), + 'image/encoded': _bytes_feature(tf.compat.as_bytes(image_buffer))})) + return example + + +class ImageCoder(object): + """Helper class that provides TensorFlow image coding utilities.""" + + def __init__(self): + # Create a single Session to run all image coding calls. + self._sess = tf.Session() + + # Initializes function that converts PNG to JPEG data. + self._png_data = tf.placeholder(dtype=tf.string) + image = tf.image.decode_png(self._png_data, channels=3) + self._png_to_jpeg = tf.image.encode_jpeg(image, format='rgb', quality=100) + + # Initializes function that decodes RGB JPEG data. + self._decode_jpeg_data = tf.placeholder(dtype=tf.string) + self._decode_jpeg = tf.image.decode_jpeg(self._decode_jpeg_data, channels=3) + + def png_to_jpeg(self, image_data): + return self._sess.run(self._png_to_jpeg, + feed_dict={self._png_data: image_data}) + + def decode_jpeg(self, image_data): + image = self._sess.run(self._decode_jpeg, + feed_dict={self._decode_jpeg_data: image_data}) + assert len(image.shape) == 3 + assert image.shape[2] == 3 + return image + + +def _is_png(filename): + """Determine if a file contains a PNG format image. + + Args: + filename: string, path of the image file. + + Returns: + boolean indicating if the image is a PNG. + """ + return filename.endswith('.png') + + +def _process_image(filename, coder): + """Process a single image file. + + Args: + filename: string, path to an image file e.g., '/path/to/example.JPG'. + coder: instance of ImageCoder to provide TensorFlow image coding utils. + Returns: + image_buffer: string, JPEG encoding of RGB image. + height: integer, image height in pixels. + width: integer, image width in pixels. + """ + # Read the image file. + with tf.gfile.FastGFile(filename, 'rb') as f: + image_data = f.read() + + # Convert any PNG to JPEG's for consistency. + if _is_png(filename): + print('Converting PNG to JPEG for %s' % filename) + image_data = coder.png_to_jpeg(image_data) + + # Decode the RGB JPEG. + image = coder.decode_jpeg(image_data) + + # Check that image converted to RGB + assert len(image.shape) == 3 + height = image.shape[0] + width = image.shape[1] + assert image.shape[2] == 3 + + return image_data, height, width + + +def _process_image_files_batch(coder, thread_index, ranges, name, filenames, + texts, labels, num_shards): + """Processes and saves list of images as TFRecord in 1 thread. + + Args: + coder: instance of ImageCoder to provide TensorFlow image coding utils. + thread_index: integer, unique batch to run index is within [0, len(ranges)). + ranges: list of pairs of integers specifying ranges of each batches to + analyze in parallel. + name: string, unique identifier specifying the data set + filenames: list of strings; each string is a path to an image file + texts: list of strings; each string is human readable, e.g. 'dog' + labels: list of integer; each integer identifies the ground truth + num_shards: integer number of shards for this data set. + """ + # Each thread produces N shards where N = int(num_shards / num_threads). + # For instance, if num_shards = 128, and the num_threads = 2, then the first + # thread would produce shards [0, 64). + num_threads = len(ranges) + assert not num_shards % num_threads + num_shards_per_batch = int(num_shards / num_threads) + + shard_ranges = np.linspace(ranges[thread_index][0], + ranges[thread_index][1], + num_shards_per_batch + 1).astype(int) + num_files_in_thread = ranges[thread_index][1] - ranges[thread_index][0] + + counter = 0 + for s in range(num_shards_per_batch): + # Generate a sharded version of the file name, e.g. 'train-00002-of-00010' + shard = thread_index * num_shards_per_batch + s + output_filename = '%s-%.5d-of-%.5d' % (name, shard, num_shards) + output_file = os.path.join(FLAGS.output_directory, output_filename) + writer = tf.python_io.TFRecordWriter(output_file) + + shard_counter = 0 + files_in_shard = np.arange(shard_ranges[s], shard_ranges[s + 1], dtype=int) + for i in files_in_shard: + filename = filenames[i] + label = labels[i] + text = texts[i] + + try: + image_buffer, height, width = _process_image(filename, coder) + except Exception as e: + print(e) + print('SKIPPED: Unexpected error while decoding %s.' % filename) + continue + + example = _convert_to_example(filename, image_buffer, label, + text, height, width) + writer.write(example.SerializeToString()) + shard_counter += 1 + counter += 1 + + if not counter % 1000: + print('%s [thread %d]: Processed %d of %d images in thread batch.' % + (datetime.now(), thread_index, counter, num_files_in_thread)) + sys.stdout.flush() + + writer.close() + print('%s [thread %d]: Wrote %d images to %s' % + (datetime.now(), thread_index, shard_counter, output_file)) + sys.stdout.flush() + shard_counter = 0 + print('%s [thread %d]: Wrote %d images to %d shards.' % + (datetime.now(), thread_index, counter, num_files_in_thread)) + sys.stdout.flush() + + +def _process_image_files(name, filenames, texts, labels, num_shards): + """Process and save list of images as TFRecord of Example protos. + + Args: + name: string, unique identifier specifying the data set + filenames: list of strings; each string is a path to an image file + texts: list of strings; each string is human readable, e.g. 'dog' + labels: list of integer; each integer identifies the ground truth + num_shards: integer number of shards for this data set. + """ + assert len(filenames) == len(texts) + assert len(filenames) == len(labels) + + # Break all images into batches with a [ranges[i][0], ranges[i][1]]. + spacing = np.linspace(0, len(filenames), FLAGS.num_threads + 1).astype(np.int) + ranges = [] + for i in range(len(spacing) - 1): + ranges.append([spacing[i], spacing[i + 1]]) + + # Launch a thread for each batch. + print('Launching %d threads for spacings: %s' % (FLAGS.num_threads, ranges)) + sys.stdout.flush() + + # Create a mechanism for monitoring when all threads are finished. + coord = tf.train.Coordinator() + + # Create a generic TensorFlow-based utility for converting all image codings. + coder = ImageCoder() + + threads = [] + for thread_index in range(len(ranges)): + args = (coder, thread_index, ranges, name, filenames, + texts, labels, num_shards) + t = threading.Thread(target=_process_image_files_batch, args=args) + t.start() + threads.append(t) + + # Wait for all the threads to terminate. + coord.join(threads) + print('%s: Finished writing all %d images in data set.' % + (datetime.now(), len(filenames))) + sys.stdout.flush() + + +def _find_image_files(data_dir, labels_file): + """Build a list of all images files and labels in the data set. + + Args: + data_dir: string, path to the root directory of images. + + Assumes that the image data set resides in JPEG files located in + the following directory structure. + + data_dir/dog/another-image.JPEG + data_dir/dog/my-image.jpg + + where 'dog' is the label associated with these images. + + labels_file: string, path to the labels file. + + The list of valid labels are held in this file. Assumes that the file + contains entries as such: + dog + cat + flower + where each line corresponds to a label. We map each label contained in + the file to an integer starting with the integer 0 corresponding to the + label contained in the first line. + + Returns: + filenames: list of strings; each string is a path to an image file. + texts: list of strings; each string is the class, e.g. 'dog' + labels: list of integer; each integer identifies the ground truth. + """ + print('Determining list of input files and labels from %s.' % data_dir) + unique_labels = [l.strip() for l in tf.gfile.FastGFile( + labels_file, 'r').readlines()] + + labels = [] + filenames = [] + texts = [] + + # Leave label index 0 empty as a background class. + label_index = 1 + # Construct the list of JPEG files and labels. + for text in unique_labels: + jpeg_file_path = '%s/%s/*' % (data_dir, text) + matching_files = tf.gfile.Glob(jpeg_file_path) + + labels.extend([label_index] * len(matching_files)) + texts.extend([text] * len(matching_files)) + filenames.extend(matching_files) + + if not label_index % 100: + print('Finished finding files in %d of %d classes.' % ( + label_index, len(labels))) + label_index += 1 + + # Shuffle the ordering of all image files in order to guarantee + # random ordering of the images with respect to label in the + # saved TFRecord files. Make the randomization repeatable. + shuffled_index = list(range(len(filenames))) + random.seed(12345) + random.shuffle(shuffled_index) + + filenames = [filenames[i] for i in shuffled_index] + texts = [texts[i] for i in shuffled_index] + labels = [labels[i] for i in shuffled_index] + + print('Found %d JPEG files across %d labels inside %s.' % + (len(filenames), len(unique_labels), data_dir)) + return filenames, texts, labels + + +def _process_dataset(name, directory, num_shards, labels_file): + """Process a complete data set and save it as a TFRecord. + + Args: + name: string, unique identifier specifying the data set. + directory: string, root path to the data set. + num_shards: integer number of shards for this data set. + labels_file: string, path to the labels file. + """ + filenames, texts, labels = _find_image_files(directory, labels_file) + _process_image_files(name, filenames, texts, labels, num_shards) + + +def main(unused_argv): + assert not FLAGS.train_shards % FLAGS.num_threads, ( + 'Please make the FLAGS.num_threads commensurate with FLAGS.train_shards') + assert not FLAGS.validation_shards % FLAGS.num_threads, ( + 'Please make the FLAGS.num_threads commensurate with ' + 'FLAGS.validation_shards') + print('Saving results to %s' % FLAGS.output_directory) + + # Run it! + _process_dataset('validation', FLAGS.validation_directory, + FLAGS.validation_shards, FLAGS.labels_file) + _process_dataset('train', FLAGS.train_directory, + FLAGS.train_shards, FLAGS.labels_file) + + +if __name__ == '__main__': + tf.app.run() diff --git a/stylelens/dataset/deepfashion/build_image_data.sh b/stylelens/dataset/deepfashion/build_image_data.sh new file mode 100755 index 0000000..88a8850 --- /dev/null +++ b/stylelens/dataset/deepfashion/build_image_data.sh @@ -0,0 +1,14 @@ +#source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +# export DB_DATASET_HOST="35.187.193.199" +# export DB_DATASET_NAME="bl-db-dataset" +# export DB_DATASET_PORT="27017" +# export DATASET_PATH='gs://bluelens-style-model/object_detection' + +echo $PYTHONPATH + +python build_image_data.py \ + --train_directory=/home/lion/attr_dataset/fabric_dataset/TRAIN_DIR\ + --validation_directory=/home/lion/attr_dataset/fabric_dataset/VALIDATION_DIR\ + --output_directory=/home/lion/attr_dataset/fabric_model/data\ + --labels_file=/home/lion/attr_dataset/fabric_model/data/fabric_label.txt diff --git a/stylelens/dataset/deepfashion/fabric_label.txt b/stylelens/dataset/deepfashion/fabric_label.txt new file mode 100644 index 0000000..3d5ba98 --- /dev/null +++ b/stylelens/dataset/deepfashion/fabric_label.txt @@ -0,0 +1,218 @@ +acid +acid_wash +applique +bead +beaded +beaded_chiffon +beaded_sheer +bejeweled +bleach +bleached +bleached_denim +brocade +burnout +cable +cable_knit +cable-knit +canvas +chambray +chambray_drawstring +chenille +chiffon +chiffon_lace +chiffon_layered +chiffon_shirt +chino +chunky +chunky_knit +classic_cotton +classic_denim +classic_knit +classic_woven +clean +clean_wash +cloud +cloud_wash +coated +corduroy +cotton +cotton_drawstring +cotton_knit +cotton-blend +crepe +crepe_woven +crinkled +crochet +crochet_embroidered +crochet_knit +crochet_lace +crochet_mesh +crochet_overlay +crocheted +crocheted_lace +cuffed_denim +cutout_lace +damask +denim +denim_drawstring +denim_shirt +denim_utility +dip-dye +dip-dyed +distressed +dye +elasticized +embellished +embroidered +embroidered_gauze +embroidered_lace +embroidered_mesh +embroidered_woven +embroidery +eyelash +eyelash_knit +eyelash_lace +eyelet +faded +fair +fair_isle +faux +faux_fur +faux_leather +faux_shearling +faux_suede +feather +floral_knit +floral_lace +floral_mesh +foulard +frayed +french +french_terry +fur +fuzzy +fuzzy_knit +gauze +gauzy +gem +georgette +gingham +glass +glitter +heathered +heathered_knit +herringbone +jacquard +knit +knit_lace +lace +lace_layered +lace_mesh +lace_overlay +lace_panel +lace_paneled +lace_pleated +lace_print +lace_sheer +lace-paneled +lacy +lattice +layered +leather +leather_paneled +leather_quilted +leather-paneled +led +loop +loose +loose-knit +mesh +mesh_overlay +mesh_panel +mesh_paneled +mesh-paneled +metallic +mineral +mineral_wash +neon +neoprene +nets +netted +nylon +oil +organza +origami +overlay +panel +paneled +patched +patchwork +perforated +pima +pintuck +pintuck_pleated +pintucked +plaid +plaid_shirt +pleat +pleated +pleated_woven +pointelle +ponte +print_satin +print_scuba +purl +quilted +rhinestone +rib +rib-knit +ribbed +ribbed-knit +ripped +ruched +ruffle +ruffled +sateen +satin +scuba +seam +seamless +seersucker +semi-sheer +sequin +sequined +shaggy +shearling +sheer +sheer-paneled +shirred +shredded +sleek +slick +slub +slub-knit +sparkling +stone +stone_washed +stones +stretch +stretch-knit +studded +suede +tapestry +tartan +terry +textured +textured_woven +tie-dye +tiered +tile +tulle +tweed +twill +velvet +velveteen +waffle +wash +washed +woven diff --git a/stylelens/dataset/deepfashion/get_object_by_fabric.py b/stylelens/dataset/deepfashion/get_object_by_fabric.py index b675cb1..68f344d 100644 --- a/stylelens/dataset/deepfashion/get_object_by_fabric.py +++ b/stylelens/dataset/deepfashion/get_object_by_fabric.py @@ -2,6 +2,7 @@ from stylelens_dataset.objects import Objects from pprint import pprint import os +import string import time import tensorflow as tf import urllib.request as urllib @@ -41,15 +42,17 @@ def main(_): attrs = get_attribute_clothes() for attr in attrs: print(attr['name']) + attr_name = attr['name'].replace(" ", "_") + offset = 0 limit = 100 os.chdir(fabric_dataset_path) try: - os.mkdir(attr['name']) + os.mkdir(attr_name) except FileExistsError: pass - os.chdir(attr['name']) + os.chdir(attr_name) while True: @@ -64,7 +67,7 @@ def main(_): break else: offset = offset + limit - + except Exception as e: print("Exception when calling get_images_by_source: %s\n" % e) diff --git a/stylelens/dataset/deepfashion/get_object_by_fabric.sh b/stylelens/dataset/deepfashion/get_object_by_fabric.sh index cc3537f..002f5dc 100755 --- a/stylelens/dataset/deepfashion/get_object_by_fabric.sh +++ b/stylelens/dataset/deepfashion/get_object_by_fabric.sh @@ -8,4 +8,4 @@ export DB_DATASET_PORT="27017" echo $PYTHONPATH python get_object_by_fabric.py \ - --fabric_dataset_path=/home/lion/fabric_dataset/ + --fabric_dataset_path=/home/lion/attr_dataset/fabric_dataset diff --git a/stylelens/dataset/deepfashion/read_tfrecoed_example.py b/stylelens/dataset/deepfashion/read_tfrecoed_example.py new file mode 100644 index 0000000..71cb6c2 --- /dev/null +++ b/stylelens/dataset/deepfashion/read_tfrecoed_example.py @@ -0,0 +1,20 @@ +import os + +f = open("list_attr_cloth_fabric.txt", "r") +f1 = open("fabric_label.txt", "a") + +while True: + line = f.readline() + if not line: + break + attr = line.split() + a = "" + for i in range(len(attr)-1): + if len(attr) > 2 and i != 0: + a += '_' + a += attr[i] + f1.write(a + '\n') + + +f.close() +f1.close() diff --git a/stylelens/dataset/deepfashion/test.py b/stylelens/dataset/deepfashion/test.py new file mode 100644 index 0000000..8b09df2 --- /dev/null +++ b/stylelens/dataset/deepfashion/test.py @@ -0,0 +1,48 @@ +import os +import shutil + +fabric_dataset_path = "/home/lion/attr_dataset/fabric_dataset/" +train_path = "/home/lion/attr_dataset/fabric_dataset/TRAIN_DIR" +eval_path = "/home/lion/attr_dataset/fabric_dataset/VALIDATION_DIR" +f = open("list_attr_cloth_fabric.txt", "r") + +while True: + line = f.readline() + if not line: + break + attr = line.split() + a = "" + for i in range(len(attr)-1): + if len(attr) > 2 and i != 0: + a += '_' + a += attr[i] + + attr_path = os.path.join(fabric_dataset_path, a) + try : + flies = os.listdir(attr_path) + file_count = len(flies) + train_num = int(0.8 * file_count) + test_num = file_count - train_num + file_list = [] + for (dirpath, dirnames, filenames) in os.walk(attr_path): + file_list.extend(filenames) + t_path = os.path.join(train_path, a) + e_path = os.path.join(eval_path, a) + os.chdir(train_path) + os.mkdir(a) + os.chdir(eval_path) + os.mkdir(a) + + for i in range(file_count): + file_path = os.path.join(attr_path,file_list[i]) + if i < train_num: + shutil.copy2(file_path, t_path) + else: + shutil.copy2(file_path, e_path) + #print(attr[0],file_count) + except OSError: + pass + + #print(train_num, test_num) +f.close() + diff --git a/tensorflow/export.sh b/tensorflow/export.sh new file mode 100755 index 0000000..5212ef2 --- /dev/null +++ b/tensorflow/export.sh @@ -0,0 +1,15 @@ +#! /bin/bash + +source activate bl-magi +#export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export PYTHONPATH=$PYTHONPATH:./slim:'pwd'/object_detection +#export MODEL_BASE_PATH='gs://bluelens-style-model/object_detection' +echo $PYTHONPATH +export MODEL_BASE_PATH='/home/lion/dataset/deepfashion3' +export TRAIN_PATH=$MODEL_BASE_PATH/models/model/train/model.ckpt-$1 + +python object_detection/export_inference_graph.py \ + --input_type image_tensor \ + --pipeline_config_path $MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --trained_checkpoint_prefix ${TRAIN_PATH} \ + --output_directory output_inference_graph.pb diff --git a/tensorflow/slim/datasets/color.py b/tensorflow/slim/datasets/color.py new file mode 100644 index 0000000..b9fb971 --- /dev/null +++ b/tensorflow/slim/datasets/color.py @@ -0,0 +1,98 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Provides data for the flowers dataset. + +The dataset scripts used to create the dataset can be found at: +tensorflow/models/research/slim/datasets/download_and_convert_flowers.py +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import tensorflow as tf + +from datasets import dataset_utils + +slim = tf.contrib.slim + +_FILE_PATTERN = 'color_%s_*.tfrecord' + +SPLITS_TO_SIZES = {'train': 104244, 'validation': 11583} + +_NUM_CLASSES = 12 + +_ITEMS_TO_DESCRIPTIONS = { + 'image': 'A color image of varying size.', + 'label': 'A single integer between 0 and 4', +} + + +def get_split(split_name, dataset_dir, file_pattern=None, reader=None): + """Gets a dataset tuple with instructions for reading flowers. + + Args: + split_name: A train/validation split name. + dataset_dir: The base directory of the dataset sources. + file_pattern: The file pattern to use when matching the dataset sources. + It is assumed that the pattern contains a '%s' string so that the split + name can be inserted. + reader: The TensorFlow reader type. + + Returns: + A `Dataset` namedtuple. + + Raises: + ValueError: if `split_name` is not a valid train/validation split. + """ + if split_name not in SPLITS_TO_SIZES: + raise ValueError('split name %s was not recognized.' % split_name) + + if not file_pattern: + file_pattern = _FILE_PATTERN + file_pattern = os.path.join(dataset_dir, file_pattern % split_name) + + # Allowing None in the signature so that dataset_factory can use the default. + if reader is None: + reader = tf.TFRecordReader + + keys_to_features = { + 'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''), + 'image/format': tf.FixedLenFeature((), tf.string, default_value='png'), + 'image/class/label': tf.FixedLenFeature( + [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)), + } + + items_to_handlers = { + 'image': slim.tfexample_decoder.Image(), + 'label': slim.tfexample_decoder.Tensor('image/class/label'), + } + + decoder = slim.tfexample_decoder.TFExampleDecoder( + keys_to_features, items_to_handlers) + + labels_to_names = None + if dataset_utils.has_labels(dataset_dir): + labels_to_names = dataset_utils.read_label_file(dataset_dir) + + return slim.dataset.Dataset( + data_sources=file_pattern, + reader=reader, + decoder=decoder, + num_samples=SPLITS_TO_SIZES[split_name], + items_to_descriptions=_ITEMS_TO_DESCRIPTIONS, + num_classes=_NUM_CLASSES, + labels_to_names=labels_to_names) diff --git a/tensorflow/slim/datasets/dataset_factory.py b/tensorflow/slim/datasets/dataset_factory.py index 141079a..26f6b64 100644 --- a/tensorflow/slim/datasets/dataset_factory.py +++ b/tensorflow/slim/datasets/dataset_factory.py @@ -22,12 +22,20 @@ from datasets import flowers from datasets import imagenet from datasets import mnist +#---------add--------------- +from datasets import fabric +from datasets import color +#-------------------------- datasets_map = { 'cifar10': cifar10, 'flowers': flowers, 'imagenet': imagenet, 'mnist': mnist, + #-------add-------- + 'fabric': fabric, + 'color': color, + #----------------- } diff --git a/tensorflow/slim/datasets/download_and_convert_color.py b/tensorflow/slim/datasets/download_and_convert_color.py new file mode 100644 index 0000000..2ffaa12 --- /dev/null +++ b/tensorflow/slim/datasets/download_and_convert_color.py @@ -0,0 +1,212 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +r"""Downloads and converts Flowers data to TFRecords of TF-Example protos. + +This module downloads the Flowers data, uncompresses it, reads the files +that make up the Flowers data and creates two TFRecord datasets: one for train +and one for test. Each TFRecord dataset is comprised of a set of TF-Example +protocol buffers, each of which contain a single image and label. + +The script should take about a minute to run. + +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import os +import random +import sys + +import tensorflow as tf + +from datasets import dataset_utils + +# The URL where the Flowers data can be downloaded. +#_DATA_URL = 'http://download.tensorflow.org/example_images/flower_photos.tgz' + +# The number of images in the validation set. +_NUM_VALIDATION = 11583 + +# Seed for repeatability. +_RANDOM_SEED = 0 + +# The number of shards per dataset split. +_NUM_SHARDS = 5 + + +class ImageReader(object): + """Helper class that provides TensorFlow image coding utilities.""" + + def __init__(self): + # Initializes function that decodes RGB JPEG data. + self._decode_jpeg_data = tf.placeholder(dtype=tf.string) + self._decode_jpeg = tf.image.decode_jpeg(self._decode_jpeg_data, channels=3) + + def read_image_dims(self, sess, image_data): + image = self.decode_jpeg(sess, image_data) + return image.shape[0], image.shape[1] + + def decode_jpeg(self, sess, image_data): + image = sess.run(self._decode_jpeg, + feed_dict={self._decode_jpeg_data: image_data}) + assert len(image.shape) == 3 + assert image.shape[2] == 3 + return image + + +def _get_filenames_and_classes(dataset_dir): + """Returns a list of filenames and inferred class names. + + Args: + dataset_dir: A directory containing a set of subdirectories representing + class names. Each subdirectory should contain PNG or JPG encoded images. + + Returns: + A list of image file paths, relative to `dataset_dir` and the list of + subdirectories, representing class names. + """ + color_root = os.path.join(dataset_dir, 'images') + directories = [] + class_names = [] + + for filename in os.listdir(color_root): + path = os.path.join(color_root, filename) + if os.path.isdir(path): + directories.append(path) + class_names.append(filename) + + photo_filenames = [] + for directory in directories: + for filename in os.listdir(directory): + path = os.path.join(directory, filename) + photo_filenames.append(path) + + return photo_filenames, sorted(class_names) + + +def _get_dataset_filename(dataset_dir, split_name, shard_id): + output_filename = 'color_%s_%05d-of-%05d.tfrecord' % ( + split_name, shard_id, _NUM_SHARDS) + return os.path.join(dataset_dir, output_filename) + + +def _convert_dataset(split_name, filenames, class_names_to_ids, dataset_dir): + """Converts the given filenames to a TFRecord dataset. + + Args: + split_name: The name of the dataset, either 'train' or 'validation'. + filenames: A list of absolute paths to png or jpg images. + class_names_to_ids: A dictionary from class names (strings) to ids + (integers). + dataset_dir: The directory where the converted datasets are stored. + """ + assert split_name in ['train', 'validation'] + + num_per_shard = int(math.ceil(len(filenames) / float(_NUM_SHARDS))) + + with tf.Graph().as_default(): + image_reader = ImageReader() + + with tf.Session('') as sess: + + for shard_id in range(_NUM_SHARDS): + output_filename = _get_dataset_filename( + dataset_dir, split_name, shard_id) + + with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer: + start_ndx = shard_id * num_per_shard + end_ndx = min((shard_id+1) * num_per_shard, len(filenames)) + for i in range(start_ndx, end_ndx): + sys.stdout.write('\r>> Converting image %d/%d shard %d' % ( + i+1, len(filenames), shard_id)) + sys.stdout.flush() + + # Read the filename: + image_data = tf.gfile.FastGFile(filenames[i], 'rb').read() + height, width = image_reader.read_image_dims(sess, image_data) + + class_name = os.path.basename(os.path.dirname(filenames[i])) + class_id = class_names_to_ids[class_name] + + example = dataset_utils.image_to_tfexample( + image_data, b'jpg', height, width, class_id) + tfrecord_writer.write(example.SerializeToString()) + + sys.stdout.write('\n') + sys.stdout.flush() + + +def _clean_up_temporary_files(dataset_dir): + """Removes temporary files used to create the dataset. + + Args: + dataset_dir: The directory where the temporary files are stored. + """ + filename = _DATA_URL.split('/')[-1] + filepath = os.path.join(dataset_dir, filename) + tf.gfile.Remove(filepath) + + tmp_dir = os.path.join(dataset_dir, 'images') + tf.gfile.DeleteRecursively(tmp_dir) + + +def _dataset_exists(dataset_dir): + for split_name in ['train', 'validation']: + for shard_id in range(_NUM_SHARDS): + output_filename = _get_dataset_filename( + dataset_dir, split_name, shard_id) + if not tf.gfile.Exists(output_filename): + return False + return True + + +def run(dataset_dir): + """Runs the download and conversion operation. + + Args: + dataset_dir: The dataset directory where the dataset is stored. + """ + if not tf.gfile.Exists(dataset_dir): + tf.gfile.MakeDirs(dataset_dir) + + if _dataset_exists(dataset_dir): + print('Dataset files already exist. Exiting without re-creating them.') + return + + #dataset_utils.download_and_uncompress_tarball(_DATA_URL, dataset_dir) + photo_filenames, class_names = _get_filenames_and_classes(dataset_dir) + class_names_to_ids = dict(zip(class_names, range(len(class_names)))) + + # Divide into train and test: + random.seed(_RANDOM_SEED) + random.shuffle(photo_filenames) + training_filenames = photo_filenames[_NUM_VALIDATION:] + validation_filenames = photo_filenames[:_NUM_VALIDATION] + + # First, convert the training and validation sets. + _convert_dataset('train', training_filenames, class_names_to_ids, + dataset_dir) + _convert_dataset('validation', validation_filenames, class_names_to_ids, + dataset_dir) + + # Finally, write the labels file: + labels_to_class_names = dict(zip(range(len(class_names)), class_names)) + dataset_utils.write_label_file(labels_to_class_names, dataset_dir) + + #_clean_up_temporary_files(dataset_dir) + print('\nFinished converting the Flowers dataset!') diff --git a/tensorflow/slim/datasets/download_and_convert_fabric.py b/tensorflow/slim/datasets/download_and_convert_fabric.py new file mode 100644 index 0000000..89c37b9 --- /dev/null +++ b/tensorflow/slim/datasets/download_and_convert_fabric.py @@ -0,0 +1,212 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +r"""Downloads and converts Flowers data to TFRecords of TF-Example protos. + +This module downloads the Flowers data, uncompresses it, reads the files +that make up the Flowers data and creates two TFRecord datasets: one for train +and one for test. Each TFRecord dataset is comprised of a set of TF-Example +protocol buffers, each of which contain a single image and label. + +The script should take about a minute to run. + +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import os +import random +import sys + +import tensorflow as tf + +from datasets import dataset_utils + +# The URL where the Flowers data can be downloaded. +#_DATA_URL = 'http://download.tensorflow.org/example_images/flower_photos.tgz' + +# The number of images in the validation set. +_NUM_VALIDATION = 35948 + +# Seed for repeatability. +_RANDOM_SEED = 0 + +# The number of shards per dataset split. +_NUM_SHARDS = 5 + + +class ImageReader(object): + """Helper class that provides TensorFlow image coding utilities.""" + + def __init__(self): + # Initializes function that decodes RGB JPEG data. + self._decode_jpeg_data = tf.placeholder(dtype=tf.string) + self._decode_jpeg = tf.image.decode_jpeg(self._decode_jpeg_data, channels=3) + + def read_image_dims(self, sess, image_data): + image = self.decode_jpeg(sess, image_data) + return image.shape[0], image.shape[1] + + def decode_jpeg(self, sess, image_data): + image = sess.run(self._decode_jpeg, + feed_dict={self._decode_jpeg_data: image_data}) + assert len(image.shape) == 3 + assert image.shape[2] == 3 + return image + + +def _get_filenames_and_classes(dataset_dir): + """Returns a list of filenames and inferred class names. + + Args: + dataset_dir: A directory containing a set of subdirectories representing + class names. Each subdirectory should contain PNG or JPG encoded images. + + Returns: + A list of image file paths, relative to `dataset_dir` and the list of + subdirectories, representing class names. + """ + fabric_root = os.path.join(dataset_dir, 'images') + directories = [] + class_names = [] + + for filename in os.listdir(fabric_root): + path = os.path.join(fabric_root, filename) + if os.path.isdir(path): + directories.append(path) + class_names.append(filename) + + photo_filenames = [] + for directory in directories: + for filename in os.listdir(directory): + path = os.path.join(directory, filename) + photo_filenames.append(path) + + return photo_filenames, sorted(class_names) + + +def _get_dataset_filename(dataset_dir, split_name, shard_id): + output_filename = 'fabric_%s_%05d-of-%05d.tfrecord' % ( + split_name, shard_id, _NUM_SHARDS) + return os.path.join(dataset_dir, output_filename) + + +def _convert_dataset(split_name, filenames, class_names_to_ids, dataset_dir): + """Converts the given filenames to a TFRecord dataset. + + Args: + split_name: The name of the dataset, either 'train' or 'validation'. + filenames: A list of absolute paths to png or jpg images. + class_names_to_ids: A dictionary from class names (strings) to ids + (integers). + dataset_dir: The directory where the converted datasets are stored. + """ + assert split_name in ['train', 'validation'] + + num_per_shard = int(math.ceil(len(filenames) / float(_NUM_SHARDS))) + + with tf.Graph().as_default(): + image_reader = ImageReader() + + with tf.Session('') as sess: + + for shard_id in range(_NUM_SHARDS): + output_filename = _get_dataset_filename( + dataset_dir, split_name, shard_id) + + with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer: + start_ndx = shard_id * num_per_shard + end_ndx = min((shard_id+1) * num_per_shard, len(filenames)) + for i in range(start_ndx, end_ndx): + sys.stdout.write('\r>> Converting image %d/%d shard %d' % ( + i+1, len(filenames), shard_id)) + sys.stdout.flush() + + # Read the filename: + image_data = tf.gfile.FastGFile(filenames[i], 'rb').read() + height, width = image_reader.read_image_dims(sess, image_data) + + class_name = os.path.basename(os.path.dirname(filenames[i])) + class_id = class_names_to_ids[class_name] + + example = dataset_utils.image_to_tfexample( + image_data, b'jpg', height, width, class_id) + tfrecord_writer.write(example.SerializeToString()) + + sys.stdout.write('\n') + sys.stdout.flush() + + +def _clean_up_temporary_files(dataset_dir): + """Removes temporary files used to create the dataset. + + Args: + dataset_dir: The directory where the temporary files are stored. + """ + filename = _DATA_URL.split('/')[-1] + filepath = os.path.join(dataset_dir, filename) + tf.gfile.Remove(filepath) + + tmp_dir = os.path.join(dataset_dir, 'images') + tf.gfile.DeleteRecursively(tmp_dir) + + +def _dataset_exists(dataset_dir): + for split_name in ['train', 'validation']: + for shard_id in range(_NUM_SHARDS): + output_filename = _get_dataset_filename( + dataset_dir, split_name, shard_id) + if not tf.gfile.Exists(output_filename): + return False + return True + + +def run(dataset_dir): + """Runs the download and conversion operation. + + Args: + dataset_dir: The dataset directory where the dataset is stored. + """ + if not tf.gfile.Exists(dataset_dir): + tf.gfile.MakeDirs(dataset_dir) + + if _dataset_exists(dataset_dir): + print('Dataset files already exist. Exiting without re-creating them.') + return + + #dataset_utils.download_and_uncompress_tarball(_DATA_URL, dataset_dir) + photo_filenames, class_names = _get_filenames_and_classes(dataset_dir) + class_names_to_ids = dict(zip(class_names, range(len(class_names)))) + + # Divide into train and test: + random.seed(_RANDOM_SEED) + random.shuffle(photo_filenames) + training_filenames = photo_filenames[_NUM_VALIDATION:] + validation_filenames = photo_filenames[:_NUM_VALIDATION] + + # First, convert the training and validation sets. + _convert_dataset('train', training_filenames, class_names_to_ids, + dataset_dir) + _convert_dataset('validation', validation_filenames, class_names_to_ids, + dataset_dir) + + # Finally, write the labels file: + labels_to_class_names = dict(zip(range(len(class_names)), class_names)) + dataset_utils.write_label_file(labels_to_class_names, dataset_dir) + + #_clean_up_temporary_files(dataset_dir) + print('\nFinished converting the Flowers dataset!') diff --git a/tensorflow/slim/datasets/fabric.py b/tensorflow/slim/datasets/fabric.py new file mode 100644 index 0000000..c9f3ae2 --- /dev/null +++ b/tensorflow/slim/datasets/fabric.py @@ -0,0 +1,98 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Provides data for the flowers dataset. + +The dataset scripts used to create the dataset can be found at: +tensorflow/models/research/slim/datasets/download_and_convert_flowers.py +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import tensorflow as tf + +from datasets import dataset_utils + +slim = tf.contrib.slim + +_FILE_PATTERN = 'fabric_%s_*.tfrecord' + +SPLITS_TO_SIZES = {'train': 143362, 'validation': 35948} + +_NUM_CLASSES = 218 + +_ITEMS_TO_DESCRIPTIONS = { + 'image': 'A color image of varying size.', + 'label': 'A single integer between 0 and 4', +} + + +def get_split(split_name, dataset_dir, file_pattern=None, reader=None): + """Gets a dataset tuple with instructions for reading flowers. + + Args: + split_name: A train/validation split name. + dataset_dir: The base directory of the dataset sources. + file_pattern: The file pattern to use when matching the dataset sources. + It is assumed that the pattern contains a '%s' string so that the split + name can be inserted. + reader: The TensorFlow reader type. + + Returns: + A `Dataset` namedtuple. + + Raises: + ValueError: if `split_name` is not a valid train/validation split. + """ + if split_name not in SPLITS_TO_SIZES: + raise ValueError('split name %s was not recognized.' % split_name) + + if not file_pattern: + file_pattern = _FILE_PATTERN + file_pattern = os.path.join(dataset_dir, file_pattern % split_name) + + # Allowing None in the signature so that dataset_factory can use the default. + if reader is None: + reader = tf.TFRecordReader + + keys_to_features = { + 'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''), + 'image/format': tf.FixedLenFeature((), tf.string, default_value='png'), + 'image/class/label': tf.FixedLenFeature( + [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)), + } + + items_to_handlers = { + 'image': slim.tfexample_decoder.Image(), + 'label': slim.tfexample_decoder.Tensor('image/class/label'), + } + + decoder = slim.tfexample_decoder.TFExampleDecoder( + keys_to_features, items_to_handlers) + + labels_to_names = None + if dataset_utils.has_labels(dataset_dir): + labels_to_names = dataset_utils.read_label_file(dataset_dir) + + return slim.dataset.Dataset( + data_sources=file_pattern, + reader=reader, + decoder=decoder, + num_samples=SPLITS_TO_SIZES[split_name], + items_to_descriptions=_ITEMS_TO_DESCRIPTIONS, + num_classes=_NUM_CLASSES, + labels_to_names=labels_to_names) diff --git a/tensorflow/slim/download_and_convert_data.py b/tensorflow/slim/download_and_convert_data.py index 924a3a4..0a2efc2 100644 --- a/tensorflow/slim/download_and_convert_data.py +++ b/tensorflow/slim/download_and_convert_data.py @@ -39,6 +39,10 @@ from datasets import download_and_convert_cifar10 from datasets import download_and_convert_flowers from datasets import download_and_convert_mnist +#-------------------add-------------------------- +from datasets import download_and_convert_fabric +from datasets import download_and_convert_color +#----------------------------------------------- FLAGS = tf.app.flags.FLAGS @@ -65,6 +69,12 @@ def main(_): download_and_convert_flowers.run(FLAGS.dataset_dir) elif FLAGS.dataset_name == 'mnist': download_and_convert_mnist.run(FLAGS.dataset_dir) + #-------------------add------------------------- + elif FLAGS.dataset_name == 'fabric': + download_and_convert_fabric.run(FLAGS.dataset_dir) + elif FLAGS.dataset_name == 'color': + download_and_convert_color.run(FLAGS.dataset_dir) + #----------------------------------------------- else: raise ValueError( 'dataset_name [%s] was not recognized.' % FLAGS.dataset_name) diff --git a/tensorflow/slim/eval_image_classifier.py b/tensorflow/slim/eval_image_classifier.py index 82d10d9..390199a 100644 --- a/tensorflow/slim/eval_image_classifier.py +++ b/tensorflow/slim/eval_image_classifier.py @@ -28,7 +28,7 @@ slim = tf.contrib.slim tf.app.flags.DEFINE_integer( - 'batch_size', 100, 'The number of samples in each batch.') + 'batch_size', 7, 'The number of samples in each batch.') tf.app.flags.DEFINE_integer( 'max_num_batches', None, @@ -38,25 +38,25 @@ 'master', '', 'The address of the TensorFlow master to use.') tf.app.flags.DEFINE_string( - 'checkpoint_path', '/tmp/tfmodel/', + 'checkpoint_path', '', 'The directory where the model was written to or an absolute path to a ' 'checkpoint file.') tf.app.flags.DEFINE_string( - 'eval_dir', '/tmp/tfmodel/', 'Directory where the results are saved to.') + 'eval_dir', '', 'Directory where the results are saved to.') tf.app.flags.DEFINE_integer( 'num_preprocessing_threads', 4, 'The number of threads used to create the batches.') tf.app.flags.DEFINE_string( - 'dataset_name', 'imagenet', 'The name of the dataset to load.') + 'dataset_name', '', 'The name of the dataset to load.') tf.app.flags.DEFINE_string( - 'dataset_split_name', 'test', 'The name of the train/test split.') + 'dataset_split_name', '', 'The name of the train/test split.') tf.app.flags.DEFINE_string( - 'dataset_dir', None, 'The directory where the dataset files are stored.') + 'dataset_dir', '', 'The directory where the dataset files are stored.') tf.app.flags.DEFINE_integer( 'labels_offset', 0, diff --git a/tensorflow/slim/train_image_classifier.py b/tensorflow/slim/train_image_classifier.py index bd7280d..e0d8d78 100644 --- a/tensorflow/slim/train_image_classifier.py +++ b/tensorflow/slim/train_image_classifier.py @@ -34,7 +34,7 @@ 'train_dir', '/tmp/tfmodel/', 'Directory where checkpoints and event logs are written to.') -tf.app.flags.DEFINE_integer('num_clones', 1, +tf.app.flags.DEFINE_integer('num_clones', 7, 'Number of model clones to deploy.') tf.app.flags.DEFINE_boolean('clone_on_cpu', False, @@ -187,7 +187,7 @@ 'as `None`, then the model_name flag is used.') tf.app.flags.DEFINE_integer( - 'batch_size', 32, 'The number of samples in each batch.') + 'batch_size', 91, 'The number of samples in each batch.') tf.app.flags.DEFINE_integer( 'train_image_size', None, 'Train image size') @@ -200,16 +200,16 @@ ##################### tf.app.flags.DEFINE_string( - 'checkpoint_path', None, + 'checkpoint_path', '', 'The path to a checkpoint from which to fine-tune.') tf.app.flags.DEFINE_string( - 'checkpoint_exclude_scopes', None, + 'checkpoint_exclude_scopes', '', 'Comma-separated list of scopes of variables to exclude when restoring ' 'from a checkpoint.') tf.app.flags.DEFINE_string( - 'trainable_scopes', None, + 'trainable_scopes', '', 'Comma-separated list of scopes to filter the set of variables to train.' 'By default, None would train all the variables.') From 96d5b1954553a563e6f9a3657aba865960490445 Mon Sep 17 00:00:00 2001 From: "lion@MAGI-7G" Date: Mon, 15 Jan 2018 17:38:57 +0900 Subject: [PATCH 07/13] Resolved [STYL-91]: generated TFrecord for category classification. --- tensorflow/slim/datasets/category.py | 98 +++++++++ tensorflow/slim/datasets/dataset_factory.py | 4 +- .../datasets/download_and_convert_category.py | 205 ++++++++++++++++++ tensorflow/slim/download_and_convert_data.py | 3 + 4 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 tensorflow/slim/datasets/category.py create mode 100644 tensorflow/slim/datasets/download_and_convert_category.py diff --git a/tensorflow/slim/datasets/category.py b/tensorflow/slim/datasets/category.py new file mode 100644 index 0000000..1eaa5a7 --- /dev/null +++ b/tensorflow/slim/datasets/category.py @@ -0,0 +1,98 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Provides data for the flowers dataset. + +The dataset scripts used to create the dataset can be found at: +tensorflow/models/research/slim/datasets/download_and_convert_flowers.py +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import tensorflow as tf + +from datasets import dataset_utils + +slim = tf.contrib.slim + +_FILE_PATTERN = 'category_%s_*.tfrecord' + +SPLITS_TO_SIZES = {'train': 257086, 'validation': 32136} + +_NUM_CLASSES = 50 + +_ITEMS_TO_DESCRIPTIONS = { + 'image': 'A category image of varying size.', + 'label': 'A single integer between 0 and 4', +} + + +def get_split(split_name, dataset_dir, file_pattern=None, reader=None): + """Gets a dataset tuple with instructions for reading flowers. + + Args: + split_name: A train/validation split name. + dataset_dir: The base directory of the dataset sources. + file_pattern: The file pattern to use when matching the dataset sources. + It is assumed that the pattern contains a '%s' string so that the split + name can be inserted. + reader: The TensorFlow reader type. + + Returns: + A `Dataset` namedtuple. + + Raises: + ValueError: if `split_name` is not a valid train/validation split. + """ + if split_name not in SPLITS_TO_SIZES: + raise ValueError('split name %s was not recognized.' % split_name) + + if not file_pattern: + file_pattern = _FILE_PATTERN + file_pattern = os.path.join(dataset_dir, file_pattern % split_name) + + # Allowing None in the signature so that dataset_factory can use the default. + if reader is None: + reader = tf.TFRecordReader + + keys_to_features = { + 'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''), + 'image/format': tf.FixedLenFeature((), tf.string, default_value='png'), + 'image/class/label': tf.FixedLenFeature( + [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)), + } + + items_to_handlers = { + 'image': slim.tfexample_decoder.Image(), + 'label': slim.tfexample_decoder.Tensor('image/class/label'), + } + + decoder = slim.tfexample_decoder.TFExampleDecoder( + keys_to_features, items_to_handlers) + + labels_to_names = None + if dataset_utils.has_labels(dataset_dir): + labels_to_names = dataset_utils.read_label_file(dataset_dir) + + return slim.dataset.Dataset( + data_sources=file_pattern, + reader=reader, + decoder=decoder, + num_samples=SPLITS_TO_SIZES[split_name], + items_to_descriptions=_ITEMS_TO_DESCRIPTIONS, + num_classes=_NUM_CLASSES, + labels_to_names=labels_to_names) diff --git a/tensorflow/slim/datasets/dataset_factory.py b/tensorflow/slim/datasets/dataset_factory.py index 26f6b64..eed5200 100644 --- a/tensorflow/slim/datasets/dataset_factory.py +++ b/tensorflow/slim/datasets/dataset_factory.py @@ -25,6 +25,7 @@ #---------add--------------- from datasets import fabric from datasets import color +from datasets import category #-------------------------- datasets_map = { @@ -34,7 +35,8 @@ 'mnist': mnist, #-------add-------- 'fabric': fabric, - 'color': color, + 'color': color, + 'category': category, #----------------- } diff --git a/tensorflow/slim/datasets/download_and_convert_category.py b/tensorflow/slim/datasets/download_and_convert_category.py new file mode 100644 index 0000000..134ae54 --- /dev/null +++ b/tensorflow/slim/datasets/download_and_convert_category.py @@ -0,0 +1,205 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +r"""Downloads and converts Flowers data to TFRecords of TF-Example protos. + +This module downloads the Flowers data, uncompresses it, reads the files +that make up the Flowers data and creates two TFRecord datasets: one for train +and one for test. Each TFRecord dataset is comprised of a set of TF-Example +protocol buffers, each of which contain a single image and label. + +The script should take about a minute to run. + +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math +import os +import random +import sys + +import tensorflow as tf + +from datasets import dataset_utils + + +# The number of images in the validation set. +_NUM_VALIDATION = 32136 + +# Seed for repeatability. +_RANDOM_SEED = 5 + +# The number of shards per dataset split. +_NUM_SHARDS = 5 + + +class ImageReader(object): + """Helper class that provides TensorFlow image coding utilities.""" + + def __init__(self): + # Initializes function that decodes RGB JPEG data. + self._decode_jpeg_data = tf.placeholder(dtype=tf.string) + self._decode_jpeg = tf.image.decode_jpeg(self._decode_jpeg_data, channels=3) + + def read_image_dims(self, sess, image_data): + image = self.decode_jpeg(sess, image_data) + return image.shape[0], image.shape[1] + + def decode_jpeg(self, sess, image_data): + image = sess.run(self._decode_jpeg, + feed_dict={self._decode_jpeg_data: image_data}) + assert len(image.shape) == 3 + assert image.shape[2] == 3 + return image + + +def _get_filenames_and_classes(dataset_dir): + """Returns a list of filenames and inferred class names. + + Args: + dataset_dir: A directory containing a set of subdirectories representing + class names. Each subdirectory should contain PNG or JPG encoded images. + + Returns: + A list of image file paths, relative to `dataset_dir` and the list of + subdirectories, representing class names. + """ + category_root = os.path.join(dataset_dir, 'images') + directories = [] + class_names = [] + + for filename in os.listdir(category_root): + path = os.path.join(category_root, filename) + if os.path.isdir(path): + directories.append(path) + class_names.append(filename) + + photo_filenames = [] + for directory in directories: + for filename in os.listdir(directory): + path = os.path.join(directory, filename) + photo_filenames.append(path) + + return photo_filenames, sorted(class_names) + + +def _get_dataset_filename(dataset_dir, split_name, shard_id): + output_filename = 'category_%s_%05d-of-%05d.tfrecord' % ( + split_name, shard_id, _NUM_SHARDS) + return os.path.join(dataset_dir, output_filename) + + +def _convert_dataset(split_name, filenames, class_names_to_ids, dataset_dir): + """Converts the given filenames to a TFRecord dataset. + + Args: + split_name: The name of the dataset, either 'train' or 'validation'. + filenames: A list of absolute paths to png or jpg images. + class_names_to_ids: A dictionary from class names (strings) to ids + (integers). + dataset_dir: The directory where the converted datasets are stored. + """ + assert split_name in ['train', 'validation'] + + num_per_shard = int(math.ceil(len(filenames) / float(_NUM_SHARDS))) + + with tf.Graph().as_default(): + image_reader = ImageReader() + + with tf.Session('') as sess: + + for shard_id in range(_NUM_SHARDS): + output_filename = _get_dataset_filename( + dataset_dir, split_name, shard_id) + + with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer: + start_ndx = shard_id * num_per_shard + end_ndx = min((shard_id+1) * num_per_shard, len(filenames)) + for i in range(start_ndx, end_ndx): + sys.stdout.write('\r>> Converting image %d/%d shard %d' % ( + i+1, len(filenames), shard_id)) + sys.stdout.flush() + + # Read the filename: + image_data = tf.gfile.FastGFile(filenames[i], 'rb').read() + height, width = image_reader.read_image_dims(sess, image_data) + class_name = os.path.basename(os.path.dirname(filenames[i])) + class_id = class_names_to_ids[class_name] + example = dataset_utils.image_to_tfexample(image_data, b'jpg', height, width, class_id) + tfrecord_writer.write(example.SerializeToString()) + + sys.stdout.write('\n') + sys.stdout.flush() + + +def _clean_up_temporary_files(dataset_dir): + """Removes temporary files used to create the dataset. + + Args: + dataset_dir: The directory where the temporary files are stored. + """ + filename = _DATA_URL.split('/')[-1] + filepath = os.path.join(dataset_dir, filename) + tf.gfile.Remove(filepath) + + #tmp_dir = os.path.join(dataset_dir, 'images') + tf.gfile.DeleteRecursively(tmp_dir) + + +def _dataset_exists(dataset_dir): + for split_name in ['train', 'validation']: + for shard_id in range(_NUM_SHARDS): + output_filename = _get_dataset_filename( + dataset_dir, split_name, shard_id) + if not tf.gfile.Exists(output_filename): + return False + return True + + +def run(dataset_dir): + """Runs the download and conversion operation. + + Args: + dataset_dir: The dataset directory where the dataset is stored. + """ + if not tf.gfile.Exists(dataset_dir): + tf.gfile.MakeDirs(dataset_dir) + + if _dataset_exists(dataset_dir): + print('Dataset files already exist. Exiting without re-creating them.') + return + + #dataset_utils.download_and_uncompress_tarball(_DATA_URL, dataset_dir) + photo_filenames, class_names = _get_filenames_and_classes(dataset_dir) + class_names_to_ids = dict(zip(class_names, range(len(class_names)))) + + # Divide into train and test: + random.seed(_RANDOM_SEED) + random.shuffle(photo_filenames) + training_filenames = photo_filenames[_NUM_VALIDATION:] + validation_filenames = photo_filenames[:_NUM_VALIDATION] + + # First, convert the training and validation sets. + _convert_dataset('train', training_filenames, class_names_to_ids, dataset_dir) + _convert_dataset('validation', validation_filenames, class_names_to_ids, dataset_dir) + + # Finally, write the labels file: + labels_to_class_names = dict(zip(range(len(class_names)), class_names)) + dataset_utils.write_label_file(labels_to_class_names, dataset_dir) + + #_clean_up_temporary_files(dataset_dir) + print('\nFinished converting the Categories dataset!') diff --git a/tensorflow/slim/download_and_convert_data.py b/tensorflow/slim/download_and_convert_data.py index 0a2efc2..aeebd89 100644 --- a/tensorflow/slim/download_and_convert_data.py +++ b/tensorflow/slim/download_and_convert_data.py @@ -42,6 +42,7 @@ #-------------------add-------------------------- from datasets import download_and_convert_fabric from datasets import download_and_convert_color +from datasets import download_and_convert_category #----------------------------------------------- FLAGS = tf.app.flags.FLAGS @@ -74,6 +75,8 @@ def main(_): download_and_convert_fabric.run(FLAGS.dataset_dir) elif FLAGS.dataset_name == 'color': download_and_convert_color.run(FLAGS.dataset_dir) + elif FLAGS.dataset_name == 'category': + download_and_convert_category.run(FLAGS.dataset_dir) #----------------------------------------------- else: raise ValueError( From 8597f8eb6a3d80980855f3b80f5a46e1a08245b2 Mon Sep 17 00:00:00 2001 From: BluehackRano Date: Tue, 16 Jan 2018 10:41:58 +0900 Subject: [PATCH 08/13] [STYL-94] color classification --- .../color_model/eval_color_classification.sh | 15 ++++ .../color_model/train_color_classification.sh | 18 ++++ .../dataset/deepfashion/build_image_data.sh | 4 - .../generate_color_classifier_dataset.py | 90 +++++++++++++++++++ .../generate_color_classifier_dataset.sh | 13 +++ .../deepfashion/read_tfrecoed_example.py | 20 ----- stylelens/dataset/deepfashion/test.py | 48 ---------- tensorflow/export.sh | 2 +- tensorflow/slim/convert_tf_category.sh | 9 ++ tensorflow/slim/convert_tf_color.sh | 9 ++ tensorflow/slim/datasets/color.py | 2 +- .../datasets/download_and_convert_color.py | 23 ++--- tensorflow/slim/eval_image_classifier.py | 4 +- tensorflow/slim/export_inference_graph.py | 2 +- tensorflow/slim/train_image_classifier.py | 16 ++-- 15 files changed, 178 insertions(+), 97 deletions(-) create mode 100755 stylelens/attr_classification/color_model/eval_color_classification.sh create mode 100755 stylelens/attr_classification/color_model/train_color_classification.sh create mode 100644 stylelens/dataset/deepfashion/generate_color_classifier_dataset.py create mode 100755 stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh delete mode 100644 stylelens/dataset/deepfashion/read_tfrecoed_example.py delete mode 100644 stylelens/dataset/deepfashion/test.py create mode 100755 tensorflow/slim/convert_tf_category.sh create mode 100755 tensorflow/slim/convert_tf_color.sh diff --git a/stylelens/attr_classification/color_model/eval_color_classification.sh b/stylelens/attr_classification/color_model/eval_color_classification.sh new file mode 100755 index 0000000..59364ae --- /dev/null +++ b/stylelens/attr_classification/color_model/eval_color_classification.sh @@ -0,0 +1,15 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train' +export EVAL_DIR_PATH='/home/lion/attr_dataset/color_model/model/eval' +export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset' + +python /home/lion/bl-magi/tensorflow/slim/eval_image_classifier.py \ + --alsologtostderr\ + --eval_dir=$EVAL_DIR_PATH\ + --checkpoint_path=$TRAIN_DIR_PATH\ + --dataset_dir=$DATASET_DIR_PATH\ + --dataset_name=color\ + --dataset_split_name=validation\ + --model_name=inception_v3 diff --git a/stylelens/attr_classification/color_model/train_color_classification.sh b/stylelens/attr_classification/color_model/train_color_classification.sh new file mode 100755 index 0000000..c5f4533 --- /dev/null +++ b/stylelens/attr_classification/color_model/train_color_classification.sh @@ -0,0 +1,18 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train' +export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset' +export CHECKPOINT_PATH='/home/lion/attr_dataset/color_model/data/checkpoints/inception_v3.ckpt' + + +python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ + --train_dir=$TRAIN_DIR_PATH\ + --dataset_dir=$DATASET_DIR_PATH\ + --dataset_name=color\ + --dataset_split_name=train\ + --num_clones=6\ + --model_name=inception_v3\ + --checkpoint_path=/home/lion/attr_dataset/color_model/data/checkpoints/inception_v3.ckpt\ + --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits\ + --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits diff --git a/stylelens/dataset/deepfashion/build_image_data.sh b/stylelens/dataset/deepfashion/build_image_data.sh index 88a8850..8e71d4d 100755 --- a/stylelens/dataset/deepfashion/build_image_data.sh +++ b/stylelens/dataset/deepfashion/build_image_data.sh @@ -1,9 +1,5 @@ #source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim -# export DB_DATASET_HOST="35.187.193.199" -# export DB_DATASET_NAME="bl-db-dataset" -# export DB_DATASET_PORT="27017" -# export DATASET_PATH='gs://bluelens-style-model/object_detection' echo $PYTHONPATH diff --git a/stylelens/dataset/deepfashion/generate_color_classifier_dataset.py b/stylelens/dataset/deepfashion/generate_color_classifier_dataset.py new file mode 100644 index 0000000..f776368 --- /dev/null +++ b/stylelens/dataset/deepfashion/generate_color_classifier_dataset.py @@ -0,0 +1,90 @@ +from __future__ import print_function +from stylelens_dataset.colors import Colors +from pprint import pprint +import os +import string +import time +import tensorflow as tf +import urllib.request as urllib +# import redis +# from bluelens_log import Logging + +api_instance = Colors() + +flags = tf.app.flags +flags.DEFINE_string('color_dataset_path', '', 'Path to color_dataset_path') +FLAGS = flags.FLAGS + +''' +REDIS_SERVER = os.environ['REDIS_SERVER'] +REDIS_PASSWORD = os.environ['REDIS_PASSWORD'] +options = { + 'REDIS_SERVER': REDIS_SERVER, + 'REDIS_PASSWORD': REDIS_PASSWORD +} +log = Logging(options, tag='generate-color-classifier-dataset') +rconn = redis.StrictRedis(REDIS_SERVER, decode_responses=True, port=6379, password=REDIS_PASSWORD) +''' + +def get_colors(classes): + color_dataset_path = FLAGS.color_dataset_path + + try: + for clazz in classes: + color_name = clazz['name'] + + os.chdir(color_dataset_path) + try: + os.mkdir(color_name) + except FileExistsError: + pass + os.chdir(color_name) + + pprint('get_colors API... color : ' + color_name) + + offset = 0 + limit = 100 + i = 0 + while True: + colors = api_instance.get_colors_by_name(color_name, offset=offset, limit=limit) + + for color in colors: + _id = str(color['_id']) + download_image_from_url(color['file'], _id + '.jpg') + # pprint(color_object_list) + + if limit > len(colors): + break + else: + offset += limit + i += 1 + pprint('get_colors API... color : ' + color_name + ' / ' + str(i)) + + pprint('get_colors API... color : ' + color_name + ' ALL Done !') + + except Exception as e: + print("Exception when calling get_colors_by_name: %s\n" % e) + +def get_color_classes(): + try: + classes = api_instance.get_classes() + return classes + except Exception as e: + print("Exception when calling get_color_classes: %s\n" % e) + return None + +def download_image_from_url(url, filename): + try: + urllib.urlretrieve(url, filename) + except urllib.HTTPError: + pass + + +def main(_): + # log.info('Start generate-color-classifier-dataset') + classes = get_color_classes() + if classes: + get_colors(classes) + +if __name__ == '__main__': + tf.app.run() diff --git a/stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh b/stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh new file mode 100755 index 0000000..17ffca2 --- /dev/null +++ b/stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh @@ -0,0 +1,13 @@ +#source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export DB_DATASET_HOST="35.187.193.199" +export DB_DATASET_NAME="bl-db-dataset" +export DB_DATASET_PORT="27017" +export REDIS_SERVER="bl-mem-store-index-prod.stylelens.io" +export REDIS_PASSWORD="BZ8oHd2pfD4j" +#export DATASET_PATH='gs://bluelens-style-model/object_detection' + +echo $PYTHONPATH + +python generate_color_classifier_dataset.py \ + --color_dataset_path=/home/lion/attr_dataset/color_model/data/images diff --git a/stylelens/dataset/deepfashion/read_tfrecoed_example.py b/stylelens/dataset/deepfashion/read_tfrecoed_example.py deleted file mode 100644 index 71cb6c2..0000000 --- a/stylelens/dataset/deepfashion/read_tfrecoed_example.py +++ /dev/null @@ -1,20 +0,0 @@ -import os - -f = open("list_attr_cloth_fabric.txt", "r") -f1 = open("fabric_label.txt", "a") - -while True: - line = f.readline() - if not line: - break - attr = line.split() - a = "" - for i in range(len(attr)-1): - if len(attr) > 2 and i != 0: - a += '_' - a += attr[i] - f1.write(a + '\n') - - -f.close() -f1.close() diff --git a/stylelens/dataset/deepfashion/test.py b/stylelens/dataset/deepfashion/test.py deleted file mode 100644 index 8b09df2..0000000 --- a/stylelens/dataset/deepfashion/test.py +++ /dev/null @@ -1,48 +0,0 @@ -import os -import shutil - -fabric_dataset_path = "/home/lion/attr_dataset/fabric_dataset/" -train_path = "/home/lion/attr_dataset/fabric_dataset/TRAIN_DIR" -eval_path = "/home/lion/attr_dataset/fabric_dataset/VALIDATION_DIR" -f = open("list_attr_cloth_fabric.txt", "r") - -while True: - line = f.readline() - if not line: - break - attr = line.split() - a = "" - for i in range(len(attr)-1): - if len(attr) > 2 and i != 0: - a += '_' - a += attr[i] - - attr_path = os.path.join(fabric_dataset_path, a) - try : - flies = os.listdir(attr_path) - file_count = len(flies) - train_num = int(0.8 * file_count) - test_num = file_count - train_num - file_list = [] - for (dirpath, dirnames, filenames) in os.walk(attr_path): - file_list.extend(filenames) - t_path = os.path.join(train_path, a) - e_path = os.path.join(eval_path, a) - os.chdir(train_path) - os.mkdir(a) - os.chdir(eval_path) - os.mkdir(a) - - for i in range(file_count): - file_path = os.path.join(attr_path,file_list[i]) - if i < train_num: - shutil.copy2(file_path, t_path) - else: - shutil.copy2(file_path, e_path) - #print(attr[0],file_count) - except OSError: - pass - - #print(train_num, test_num) -f.close() - diff --git a/tensorflow/export.sh b/tensorflow/export.sh index 5212ef2..216ee98 100755 --- a/tensorflow/export.sh +++ b/tensorflow/export.sh @@ -12,4 +12,4 @@ python object_detection/export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path $MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ --trained_checkpoint_prefix ${TRAIN_PATH} \ - --output_directory output_inference_graph.pb + --output_directory output_inference_graph_$1.pb diff --git a/tensorflow/slim/convert_tf_category.sh b/tensorflow/slim/convert_tf_category.sh new file mode 100755 index 0000000..9028c43 --- /dev/null +++ b/tensorflow/slim/convert_tf_category.sh @@ -0,0 +1,9 @@ +#source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../slim +export DATASET_PATH=/home/lion/attr_dataset/category_model/data/dataset + +echo $PYTHONPATH + +python download_and_convert_data.py \ + --dataset_name=category\ + --dataset_dir=$DATASET_PATH diff --git a/tensorflow/slim/convert_tf_color.sh b/tensorflow/slim/convert_tf_color.sh new file mode 100755 index 0000000..06c1e7b --- /dev/null +++ b/tensorflow/slim/convert_tf_color.sh @@ -0,0 +1,9 @@ +#source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../slim +export DATASET_PATH=/home/lion/attr_dataset/color_model/data/ + +echo $PYTHONPATH + +python download_and_convert_data.py \ + --dataset_name=color\ + --dataset_dir=$DATASET_PATH diff --git a/tensorflow/slim/datasets/color.py b/tensorflow/slim/datasets/color.py index b9fb971..c7f2692 100644 --- a/tensorflow/slim/datasets/color.py +++ b/tensorflow/slim/datasets/color.py @@ -31,7 +31,7 @@ _FILE_PATTERN = 'color_%s_*.tfrecord' -SPLITS_TO_SIZES = {'train': 104244, 'validation': 11583} +SPLITS_TO_SIZES = {'train': 96627, 'validation': 10736} _NUM_CLASSES = 12 diff --git a/tensorflow/slim/datasets/download_and_convert_color.py b/tensorflow/slim/datasets/download_and_convert_color.py index 2ffaa12..335204a 100644 --- a/tensorflow/slim/datasets/download_and_convert_color.py +++ b/tensorflow/slim/datasets/download_and_convert_color.py @@ -36,14 +36,12 @@ from datasets import dataset_utils -# The URL where the Flowers data can be downloaded. -#_DATA_URL = 'http://download.tensorflow.org/example_images/flower_photos.tgz' # The number of images in the validation set. -_NUM_VALIDATION = 11583 +_NUM_VALIDATION = 10736 # Seed for repeatability. -_RANDOM_SEED = 0 +_RANDOM_SEED = 5 # The number of shards per dataset split. _NUM_SHARDS = 5 @@ -137,14 +135,11 @@ def _convert_dataset(split_name, filenames, class_names_to_ids, dataset_dir): sys.stdout.flush() # Read the filename: - image_data = tf.gfile.FastGFile(filenames[i], 'rb').read() + image_data = tf.gfile.FastGFile(filenames[i], 'rb').read() height, width = image_reader.read_image_dims(sess, image_data) - class_name = os.path.basename(os.path.dirname(filenames[i])) class_id = class_names_to_ids[class_name] - - example = dataset_utils.image_to_tfexample( - image_data, b'jpg', height, width, class_id) + example = dataset_utils.image_to_tfexample(image_data, b'jpg', height, width, class_id) tfrecord_writer.write(example.SerializeToString()) sys.stdout.write('\n') @@ -161,7 +156,7 @@ def _clean_up_temporary_files(dataset_dir): filepath = os.path.join(dataset_dir, filename) tf.gfile.Remove(filepath) - tmp_dir = os.path.join(dataset_dir, 'images') + #tmp_dir = os.path.join(dataset_dir, 'images') tf.gfile.DeleteRecursively(tmp_dir) @@ -199,14 +194,12 @@ def run(dataset_dir): validation_filenames = photo_filenames[:_NUM_VALIDATION] # First, convert the training and validation sets. - _convert_dataset('train', training_filenames, class_names_to_ids, - dataset_dir) - _convert_dataset('validation', validation_filenames, class_names_to_ids, - dataset_dir) + _convert_dataset('train', training_filenames, class_names_to_ids, dataset_dir) + _convert_dataset('validation', validation_filenames, class_names_to_ids, dataset_dir) # Finally, write the labels file: labels_to_class_names = dict(zip(range(len(class_names)), class_names)) dataset_utils.write_label_file(labels_to_class_names, dataset_dir) #_clean_up_temporary_files(dataset_dir) - print('\nFinished converting the Flowers dataset!') + print('\nFinished converting the Colors dataset!') diff --git a/tensorflow/slim/eval_image_classifier.py b/tensorflow/slim/eval_image_classifier.py index 390199a..0e39be8 100644 --- a/tensorflow/slim/eval_image_classifier.py +++ b/tensorflow/slim/eval_image_classifier.py @@ -20,15 +20,17 @@ import math import tensorflow as tf +import os from datasets import dataset_factory from nets import nets_factory from preprocessing import preprocessing_factory +os.environ['CUDA_VISIBLE_DEVICES'] = '-1' slim = tf.contrib.slim tf.app.flags.DEFINE_integer( - 'batch_size', 7, 'The number of samples in each batch.') + 'batch_size', 42, 'The number of samples in each batch.') tf.app.flags.DEFINE_integer( 'max_num_batches', None, diff --git a/tensorflow/slim/export_inference_graph.py b/tensorflow/slim/export_inference_graph.py index 56f28a5..c5521b8 100644 --- a/tensorflow/slim/export_inference_graph.py +++ b/tensorflow/slim/export_inference_graph.py @@ -81,7 +81,7 @@ def with the variables inlined as constants using: 'Batch size for the exported model. Defaulted to "None" so batch size can ' 'be specified at model runtime.') -tf.app.flags.DEFINE_string('dataset_name', 'imagenet', +tf.app.flags.DEFINE_string('dataset_name', 'color', 'The name of the dataset to use with the model.') tf.app.flags.DEFINE_integer( diff --git a/tensorflow/slim/train_image_classifier.py b/tensorflow/slim/train_image_classifier.py index e0d8d78..843b39d 100644 --- a/tensorflow/slim/train_image_classifier.py +++ b/tensorflow/slim/train_image_classifier.py @@ -127,11 +127,11 @@ tf.app.flags.DEFINE_string( 'learning_rate_decay_type', - 'exponential', + 'fixed', 'Specifies how the learning rate is decayed. One of "fixed", "exponential",' ' or "polynomial"') -tf.app.flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.') +tf.app.flags.DEFINE_float('learning_rate', 0.005, 'Initial learning rate.') tf.app.flags.DEFINE_float( 'end_learning_rate', 0.0001, @@ -144,7 +144,7 @@ 'learning_rate_decay_factor', 0.94, 'Learning rate decay factor.') tf.app.flags.DEFINE_float( - 'num_epochs_per_decay', 2.0, + 'num_epochs_per_decay', 5000.0, 'Number of epochs after which learning rate decays.') tf.app.flags.DEFINE_bool( @@ -165,13 +165,13 @@ ####################### tf.app.flags.DEFINE_string( - 'dataset_name', 'imagenet', 'The name of the dataset to load.') + 'dataset_name', '', 'The name of the dataset to load.') tf.app.flags.DEFINE_string( 'dataset_split_name', 'train', 'The name of the train/test split.') tf.app.flags.DEFINE_string( - 'dataset_dir', None, 'The directory where the dataset files are stored.') + 'dataset_dir', '', 'The directory where the dataset files are stored.') tf.app.flags.DEFINE_integer( 'labels_offset', 0, @@ -187,7 +187,7 @@ 'as `None`, then the model_name flag is used.') tf.app.flags.DEFINE_integer( - 'batch_size', 91, 'The number of samples in each batch.') + 'batch_size', 126, 'The number of samples in each batch.') tf.app.flags.DEFINE_integer( 'train_image_size', None, 'Train image size') @@ -552,6 +552,9 @@ def clone_fn(batch_queue): # Merge all summaries together. summary_op = tf.summary.merge(list(summaries), name='summary_op') + session_config = tf.ConfigProto(allow_soft_placement = True, + log_device_placement = False) + session_config.gpu_options.allow_growth = True ########################### # Kicks off the training. # @@ -561,6 +564,7 @@ def clone_fn(batch_queue): logdir=FLAGS.train_dir, master=FLAGS.master, is_chief=(FLAGS.task == 0), + session_config = session_config, init_fn=_get_init_fn(), summary_op=summary_op, number_of_steps=FLAGS.max_number_of_steps, From d7f5a4ba15508d0cde808cd9391bb89627c953aa Mon Sep 17 00:00:00 2001 From: BluehackRano Date: Mon, 22 Jan 2018 14:37:10 +0900 Subject: [PATCH 09/13] [STYL-119]category classification --- .../eval_category_classification.sh | 15 + .../train_category_classification.sh | 19 + .../color_model/eval_color_classification.sh | 6 +- .../eval_color_classification_nocheckpoint.sh | 15 + .../attr_classification/color_model/test.sh | 19 + .../color_model/test/black_jarket.jpg | Bin 0 -> 55088 bytes .../color_model/test/blue_jean.jpg | Bin 0 -> 67041 bytes .../color_model/test/brown_cloth.jpg | Bin 0 -> 49837 bytes .../color_model/test/green_cloth.jpg | Bin 0 -> 49638 bytes .../color_model/test/grey_shirt.jpg | Bin 0 -> 30750 bytes .../color_model/test/orange_cloth.jpg | Bin 0 -> 115247 bytes .../color_model/test/purple_one.jpg | Bin 0 -> 17467 bytes .../color_model/test/red_skirt.jpg | Bin 0 -> 40907 bytes .../color_model/test_color.py | 85 +++++ .../color_model/train_color_classification.sh | 23 +- ...train_color_classification_nocheckpoint.sh | 17 + .../eval_fabric_classification.sh | 0 .../train_fabric_classification.sh | 0 .../freeze_graph/bl-text-classifier | 1 + .../freeze_graph/freeze_graph.py | 350 ++++++++++++++++++ .../freeze_graph/frozen_graph.sh | 13 + .../freeze_graph/upload_model.py | 23 ++ .../freeze_graph/upload_model.sh | 9 + .../dataset/deepfashion/get_object_by_fabric. | 0 tensorflow/slim/datasets/category.py | 2 +- .../datasets/download_and_convert_category.py | 4 +- .../datasets/download_and_convert_color.py | 2 +- tensorflow/slim/eval_image_classifier.py | 5 + tensorflow/slim/train_image_classifier.py | 16 +- 29 files changed, 599 insertions(+), 25 deletions(-) create mode 100755 stylelens/attr_classification/category_model/eval_category_classification.sh create mode 100755 stylelens/attr_classification/category_model/train_category_classification.sh create mode 100755 stylelens/attr_classification/color_model/eval_color_classification_nocheckpoint.sh create mode 100755 stylelens/attr_classification/color_model/test.sh create mode 100644 stylelens/attr_classification/color_model/test/black_jarket.jpg create mode 100644 stylelens/attr_classification/color_model/test/blue_jean.jpg create mode 100644 stylelens/attr_classification/color_model/test/brown_cloth.jpg create mode 100644 stylelens/attr_classification/color_model/test/green_cloth.jpg create mode 100644 stylelens/attr_classification/color_model/test/grey_shirt.jpg create mode 100644 stylelens/attr_classification/color_model/test/orange_cloth.jpg create mode 100644 stylelens/attr_classification/color_model/test/purple_one.jpg create mode 100644 stylelens/attr_classification/color_model/test/red_skirt.jpg create mode 100644 stylelens/attr_classification/color_model/test_color.py create mode 100755 stylelens/attr_classification/color_model/train_color_classification_nocheckpoint.sh rename stylelens/attr_classification/{ => fabric_model}/eval_fabric_classification.sh (100%) rename stylelens/attr_classification/{ => fabric_model}/train_fabric_classification.sh (100%) create mode 160000 stylelens/attr_classification/freeze_graph/bl-text-classifier create mode 100644 stylelens/attr_classification/freeze_graph/freeze_graph.py create mode 100755 stylelens/attr_classification/freeze_graph/frozen_graph.sh create mode 100644 stylelens/attr_classification/freeze_graph/upload_model.py create mode 100755 stylelens/attr_classification/freeze_graph/upload_model.sh create mode 100644 stylelens/dataset/deepfashion/get_object_by_fabric. diff --git a/stylelens/attr_classification/category_model/eval_category_classification.sh b/stylelens/attr_classification/category_model/eval_category_classification.sh new file mode 100755 index 0000000..1b2b439 --- /dev/null +++ b/stylelens/attr_classification/category_model/eval_category_classification.sh @@ -0,0 +1,15 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/category_model/model/train' +export EVAL_DIR_PATH='/home/lion/attr_dataset/category_model/model/eval' +export DATASET_DIR_PATH='/home/lion/attr_dataset/category_model/data/dataset' + +python /home/lion/bl-magi/tensorflow/slim/eval_image_classifier.py \ + --alsologtostderr\ + --eval_dir=$EVAL_DIR_PATH\ + --checkpoint_path=$TRAIN_DIR_PATH\ + --dataset_dir=$DATASET_DIR_PATH\ + --dataset_name=category\ + --dataset_split_name=validation\ + --model_name=inception_v3 diff --git a/stylelens/attr_classification/category_model/train_category_classification.sh b/stylelens/attr_classification/category_model/train_category_classification.sh new file mode 100755 index 0000000..9c61878 --- /dev/null +++ b/stylelens/attr_classification/category_model/train_category_classification.sh @@ -0,0 +1,19 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/category_model/model/train' +export DATASET_DIR_PATH='/home/lion/attr_dataset/category_model/data/dataset' +export CHECKPOINT_PATH='/home/lion/attr_dataset/category_model/data/checkpoints/inception_v3.ckpt' + + +python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ + --train_dir=$TRAIN_DIR_PATH \ + --dataset_dir=$DATASET_DIR_PATH \ + --dataset_name=category \ + --dataset_split_name=train \ + --num_clones=7 \ + --batch_size=224\ + --model_name=inception_v3 \ + --checkpoint_path=/home/lion/attr_dataset/category_model/data/checkpoints/inception_v3.ckpt \ + --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \ + --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits diff --git a/stylelens/attr_classification/color_model/eval_color_classification.sh b/stylelens/attr_classification/color_model/eval_color_classification.sh index 59364ae..8cf3a36 100755 --- a/stylelens/attr_classification/color_model/eval_color_classification.sh +++ b/stylelens/attr_classification/color_model/eval_color_classification.sh @@ -1,9 +1,9 @@ #! /bin/bash source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: -export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train' -export EVAL_DIR_PATH='/home/lion/attr_dataset/color_model/model/eval' -export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset' +export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train1' +export EVAL_DIR_PATH='/home/lion/attr_dataset/color_model/model/eval1' +export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset1' python /home/lion/bl-magi/tensorflow/slim/eval_image_classifier.py \ --alsologtostderr\ diff --git a/stylelens/attr_classification/color_model/eval_color_classification_nocheckpoint.sh b/stylelens/attr_classification/color_model/eval_color_classification_nocheckpoint.sh new file mode 100755 index 0000000..de14c6e --- /dev/null +++ b/stylelens/attr_classification/color_model/eval_color_classification_nocheckpoint.sh @@ -0,0 +1,15 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train2' +export EVAL_DIR_PATH='/home/lion/attr_dataset/color_model/model/eval2' +export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset1' + +python /home/lion/bl-magi/tensorflow/slim/eval_image_classifier.py \ + --alsologtostderr\ + --eval_dir=$EVAL_DIR_PATH\ + --checkpoint_path=$TRAIN_DIR_PATH\ + --dataset_dir=$DATASET_DIR_PATH\ + --dataset_name=color\ + --dataset_split_name=validation\ + --model_name=inception_v3 diff --git a/stylelens/attr_classification/color_model/test.sh b/stylelens/attr_classification/color_model/test.sh new file mode 100755 index 0000000..2fbd98f --- /dev/null +++ b/stylelens/attr_classification/color_model/test.sh @@ -0,0 +1,19 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export MODEL_PATH='/home/lion/attr_dataset/color_model/model/train2/model.ckpt-54229' +export LABEL_PATH='/home/lion/attr_dataset/color_model/data/dataset1/labels.txt' +export DATA_PATH='/home/lion/bl-magi/stylelens/attr_classification/color_model/test/' + +python test_color.py \ + --model_path=$MODEL_PATH \ + --model_name=inception_v3 \ + --label_path=$LABEL_PATH \ + --data_path=$DATA_PATH + + + + + + + diff --git a/stylelens/attr_classification/color_model/test/black_jarket.jpg b/stylelens/attr_classification/color_model/test/black_jarket.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33bab0786019dc6be7121a1745267f6ef2bbb13d GIT binary patch literal 55088 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 M$b`M^{_p7j0DhTPS^xk5 literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test/blue_jean.jpg b/stylelens/attr_classification/color_model/test/blue_jean.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97bbea71fc911d2128dfc9f27837fdf113f2381c GIT binary patch literal 67041 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 z zH22QG%D=bqt{UT#BJ9csgfBdmgeXn+@6QP$axfEaw{pA+q{%G6U*SIZg9(L1tiD{5 z?+hm?!8aKJ+L_n=>_qNJpeW=XrSpoF%J{_@*xV_mHsV*i$|%bk{E*zYJ~>&EY^5ky zUIP;6u2majAObF%7hq!eTNAxpn{5(YEynOMVpRj(r@0JD~aou`1Vu<^$^ z0&+I?3sAshdle2L5--iPHV9_JFbJ<{md2>+0B~V`7lPA#e zgc>KH6~!33RCHWwzPUwIT`>3++k=n+1Ys|49J@0(yrc|EpeOS7)2YsoqY9fIl}EHV z8Wb5A%Tv%5hF2!w1!8YV4|~Q6UGc;X^%!*Y@NW%+R^Nll#2)^!3*k^MDdgChe0t7f#L#vWck_BNa z20k`c{u|bAhCuq3q zt@2io3FHAC%$US-a4J|q!T?FBkJo%L^a<+!0F{4lI{bC+aDs$2waOhP{Bb&XZ&}cE z7EUNX0$?3`^TO~}JLq@rN9J+1^?^2CaJr`EH~}q_L@BpdKMlH9fb>WTw54DBhttgl zG}K`n@m-xWhYkd0!J>;I40{l{#|>cMCP#7cm73x<0BIp*!Mf`<{c)Wff-qV+5WPkm z8y$pN-jo~y;~U^EOf%4eO%jk{Ja7vwjK={qLj_9l)awANjJO|ZO+k?ysM(I%vUs4j zahpa06^R*#Bu3;%P9Z@wg;ccaPJ#9gH&>z|VH*=Pox5?&J^&!4dK;G$^?3uLHe&@` zBEscs&nr*^C>VTJ3@(&c#=hhh+0ips5c3eMR@y4V|o+}RA<9o^BSe#2~RAwCw?mq`AgLG~+ zD{5wZaezYKS2?nfn?yK8DhO#Y+Q_~i(I)^^qykVeGR}`J^DVhmcA<&l-;M;ylsZ{4 z;&Zq8Ki&Ou{vAIU;4y7(3i}JhR9fuLkL!=VSPK|x?>E+e>zM$Acs~9y#1cCz!nfxa z=Z1h(ppWBQZt07MK10-jVd=0lv|YSGM}cAkOVkbR!`CDu0T;0B4HH)$9w{O=Qe)%V zAHM-vK@E`B|l;T!3#woG>beoN4WGVi#*a96`~1B zz~(bJAnvWT6=G%AbMrweonB8B52CVzh>mNhPj8Yn*#-Qe;ejS(C@ z5tKTQksJXsc%dDCudxzSD^SivR{(T;@tuhJOp>kk%Y(+8J!}dE?d^if!yDm{h+Hsj zIvbi_JOdJVdAA zXLe!T%s3d$G(mHpTX)>}Q5^k&E7oH3N#tk0@_)CV?s?ZY_l^+=Sb1%D;6=TJ>#gHF z5ioi7-ush*FaR<;&K&yx0KPC$!6 zibqDoAHRnmA|bD41KWqI9w7_aa0Sq0`kvwunw(}xjhLsz-xLUlNYPJg+C0OXH5!4H zgiPym=0|!)N~aPA*J9M=BLou-P~Euliat0C0#O=3mop17Ua5p(2nZ6#OQV?$UM%ja zg;d)KU1S*2Jh2sIR6sKS0HIEJHkKkF$D-yKX1E7*W{q72mV!E=#R4Q~rwRsGAqtcz z&RI~V3}|QQ0Z`0?Tq=yk1dt=VH{4E#6lR6secCT+d-5kZN&={lnq=K*;uu9tdIp_m zpy}Zkb@~lUFqj2pQ%dDrp;ZMqwKDg=NaRv7RN9LJ4rQ9#$Aw6hDNSU6OtsYFC18gy zmg|v_if@3Z3S$eB`U~VW#9d=b>%$YEu8vpO)oZf??R!FGGdFk?6>}wvgK#yB*?x)+ zOhr_03-x|n@^uan(AL50v!#w3!cd?P93R<`0rBsOngF6H5w7e^7c+yZ!W6(1b!%n? z@t$3fhQP9$N%uGh01TEmHCVB7SG{nelm*aHxy8&o#&dXq^bd9!n5IR*e!QqEuu(c6 z6aCi^ZNs{ClJ~2Gxc?A%n$3*k5)XxF7TxJlPi!Eoj5_)3A#2sZvtoq_WiB#<- zx-=7@>hT3JXehnDRXe{t0qpF8i{PMNB-VJtnIO}!nFvPZb;L8c0w#@UL@A2-X9B5d z7HKHV?1^!6mo>gt!8Y$HHp$@Sgs?(0Dy)Wc+E(pqYzd5uFSF6?X%YB>f**zF7i9;b z%O<|?x` z3IR@%WfX^Dur^^btPpvGEL$By=P2(iaaW3kU_byNcNLk2-JSqztUOFj4DG~X!R8t! z$h5`a0J5k&aAy#}oRQjuW=!@%GXcj6It@|!`s4vLwv$-xXk<^2B&7l%6wYvyTj63P z!k|LNOs}kZstYV&SP?ov(VTa}m-p1n%N@nWl;j|3QA}H&{ET7XqJctCa6?2_w%(2m zC0R`=hZlb4?;sYY1`Nj|bhy~#Eag{~lp;FI*b&3mXnCMm@VmJ#QxA?N#Ihlgd@i1m z&zFQ=0LfBD?=P1b>3|G`r+Ccqx8ocz9xv;k@_)DR8T>X#MILwm0DKD~EU#X#5|$9- zMc=+1(-PC=p3mcvp@=*)xwBE?D960b$&Y#KnS~_AOXllug6GEzoRAZCw7D@EobiF8 zB-#+_t}Mv%%42mF(oCP&nBin14nS~vx*ylR5tPv+Ok3prhnc|rj4c?t1s}NP(Liu$ z0yfbR(~vL1LIvz#f(rzAB#pjA$wUsp>@1v6m|>z*CCEBZKrVTsEmNA9ISA5Bx}&g2 z%pNE2ZlE<>JF>(kgvlnxh+`~FDDJ73jmDsWS{8HdWaf4Fg&K4WB3D2!6wI%96|AHJ z0ao@dAn&5LPLeO-aWNFDnxsu2>)i(GT>!zk+|N>DZ&Lpl=jtQIZaliD&}DZ`(X8FB;M_D0pt*~<5=MsCJKz9fJ9GEj$?_7(XpWbbLBviA=I~Mpj^L zUY&Sy+>VK`LAJ-UNm~L!B>+)X35O7qtC-iNRGR_;Xm*!SUgOA0MCK`#RVLwR#kN&y zGzz!@JK+n#tuPJDCjw@{H^^eCC)HiF=*nqQFg?c?ak1EpO|NrZ7DeBINF ziWp0aDE__eVhCuQU;8wdbyTo@j|O>ve1 z2IgQLX#vSGzIX)U1PyLdnQw`%cm_gcD)}6T&br_rFCK)8;s!SGr6e2B={;jPqmE2f zk+{zP0LlK&JTt?Bl{XW|5opZ05n3qUdkUE}YDRcZnyS)*n?N0$l~sII}FcdlFl$6)UGao>-JfWS$r zF3$|_{{XxSAh$_GL#H#=_%a+w^^U>3g(=w1c|$UlO)r$79oFNHkxJ@_BSNIlSk86C zk--^gRpQg(<_y+UhSEld2V}glI*26}+W-lgRLeL)CTY@Fy5-T2O;Yg4LiR8ZG^Td* z0_I&rLhuX_*spcKqu{{`7)hxHt%eRzC<+@Ejfs*bbC+o=VKl0@kx(I#a2#&}LlvP^ z4S=!m5E&r@2_m7a8+=EUHtd=tEVz7mnBqZFXjBv(65n*1;!O=zi;Lt$T+(qMZNs7! z1B(eXto6ZL009Ff53{Eq96&-4e8hXmHXCxn7`S94pCO&(ITk}a7%V)LK6>J)!r(Aq zYBw#_>~S+ocBs?C=UB&%B^hp$5IhhfV;-kA8KQV>XZb(b!{?Ka*8r}V zq{?*s_WckYRA7c{eJ>0Y>~QiJP8DlH;Bt`XF>0df*M3FohH;-eb;vatIk?A#^*KoU|W&5(@w{c}s&JYjfWO zlWQ1Yp!pUZGdyGGSVCC3*u8`6jEopz*+iB~51+hnOjN4P)SsYY7kS_f=V2AHX4pjW zAC{`B3q-az109L>TE(W)$LAR_)Zh?NGZ0LJ6J_w+Yms1rpeYbHvzbKmc?o_fZdH7+ zG2|S;$drG?eBhg z;;a@JcgZzK$tflI;1Qw)$J_6P2?z+OULCR%LBdS!~1bht&oz#3)azr`_B+3&8{Is)OD-kauir#jSw_DFOctuIVUNMUYx8R zw(??q0L26&VOUWTn8zdu%dNJlhbJzP&AdfKbO-_w(A0Uj-Z&%L#2jHA6q)?+F;}38 zP}2}kWXaOWq`7hu#urQ`rg=4Xh@=gs_FJ1rgM=iTVYE99_qZN-$3?{32G%HmZM=y@ z0GLt^3*XIZnG6py8i%9QL5ddJiU)o zl!#!ukL!yVF9W?~*zf0&C)HU?qnh2y(I>oc+{xw(ufFGwVt~QZDsSWW;wAXsq)x2+Go!Q6mJF_(@A0FS>7lFGt8!k(zm%E91;RGSTP?H8KbOlz!kuua_Qw#At#1%twMl8mUNqP~Ba9w~*k`I$voRvZ+TL_aXpIHmTjS#0os?WhJb*wzB zO(H^^J;({F95EF@K@A%B0_P>;R6*EM2pQ z718|=7t<2C0}_rV4y}&@o+Pv~YrHYx=NUlmJbIkR-T)0guO0{r6SvBJ z>xWoi>eqZpDQLP_Ao=q5!QoyKQu)TYs;LSog8_*t`*0^5B;=7pL7h_ZQ?8}Ytj~Fz zW8|<@IL^(Q;iB@QFIUO$rSZtJxP+rh`u*dcfUTBiSXJ?s;@{JS5*5r?tFsqJTI)Or zM5c@_iMr*FQ@nE%%`5^sAE@wNuXR0@LqJU6TJw{>K%xMLGxy)aBi9L38My#q1@e!% z=Bh#P41mbBp1=n5@CyVH8z=+7CsvL)3@{+1OC;N~Npr06k@O+hpku0yrpv;{=x{D% z&Sb~&>J!xZ4CCaFxSjP^_@p19N`l~KB5IB(ab;Y5ls z_!#NH_Lq1_k%19`B~IRgjNuT}0YGvBW~WZYX82_c0e}N;Bp15Ro^PcoR4oggA{#I7 zzyN?ta)cLQR1)00#1nB9p^k%U?7_sra0e>O=iVHb9Kp^XJ2oaD%db;>UTGCpg@a+5 zxr5hDK5EoP07?ao>*6s~qPVfnz-&u?k^ULPsT(mijU zAOPXJ$mdo%_sV4;up2iX+Fd_!(ZvjTIfdCCnxW^H>jb5RN%|cAy5nF1Q85fR21=OG z%34E^9qROmea!PdNFgX6QYUC|l1jlWE)QbA9yrQeLXp+bZ@ihtc#~LNjs_aH(9ho* zk~l$8K{hlgvU}zyKrzD1n_$c;b&ez;J*RbC-U<#R4)bv{!igY-HByO0Ni=-Cplicn9or_$Bdl@^Ie=zh zK`@CtWZ;TzV#58iq#?&PRZAqX5;o&~F~YRpx{^CI~e!8Yi6V92ioU zJ2MYkp7X>2SyJfv{=em49DQq_K6&@SCYMaOPyQSRF(R>e1`4`w1;x2P?Z8s7vgqJu z4i9j@xADX#7h5Hd%ltUn&5%x6_;>p8oZ?}&cMWUy=5w-hj&^@;y5fqoq1a^pK6tc4 zJ;%q_34v=u3}ROw{o+?t0T}pUeR8k?&<9D|?~J;OE3bTDD()ire3^C*biAb5(hAyq zj9#xPdqIMuAWWm@cN^jzq!OWAbo6#m*Acl&L7+jidER+BFc!{4NMu@P$LOGhmMaVw zX#q@Mz9`(>8habV-+j|OC>5qc%^MdUOA$B58!Ww=C~gt)(~2fHTG0e0z@JtAV_pvw2=72#|TvGfUD7;muU_!ie@GhK;@+ogZelfk_k?L!&wWL zTTm&gLECFj8B7-E$;`|qCdPrxm*NLl6P}9zwt5ctt$Zj-qa>n|zu#w#a#Em@qTD(Q zJZIG5sbZT-iym!m3ypF`U?T=ejQGy`^T!302(heq)R}djD?L=%pnqTF_`UGt>qmUP-1yjBijZG4!eA_>MC+HG!3vhcj@=K^qk9+$UFp6czv6hR#Aa!WFrffb2Ip#F(a0G_S^^BTI9SJi`G8(Kmi01=AG)ea`9tCP3nFb)+wc307;R1yy5al)@wgblloQOw5V-mQ~zRRdEtCL>C6V1<} zRR*xuKC&Ce@$t-*Vst+v@+ZYC)4;UDD&X@S(u%>rXE54^7pPh5}=5sQQ}&$HhMAxj2eq-~d|&k0E0nJVCCC0O!{U1%Tf?BoYN6qzn>)bA)%mbp{0z z1#gK@8gG~gOnQhAPMJcEY}XVjNZ!#x3|~iOZeCic5h?>fGf%8%tH6!era-`HjdrGT za*^B$P!ar*ub+-mG$kN}!|(i`?fiUm=YN@lEv3oh#{rf$WZUQC z*8m_YS9tH&C{V=}&&RF;u%laEr|-i|2@K6m2V4R%YSlp9`Nlb-5QP~G=hy3=H4%~| zH$OAJSpWf1vD52@=o6rOzEYav&WRQ@z1?e!a*av|ufGr11nR9>dp#SRX;M`f4RV=N zL`>t)gX5OMrDy)C%{S=?J3~NJQf<6o#x6N*s6kzWElZ{dUoxw5ubGb~874k> zr4EFGZ0U95Iec?5VCn$K?yz&~=ZLR@l!Am)-(EQwNj4e|o2O3k#WCe0c{}w#$^PH? ze>~0L;Z$SDW#>*vQ7-_PB@uAo14J0Pwq$rg^@r%YbOw+VWqVB3BkxCnxPAYPv*20X^4yZ$(- z3wp4N{=9N!KuBIN0$|+8x#l$?0D61B*9%GK)%D1dSi3XY+WoxVAiiZFs!?@B4?^D@ zUPS?b7Z*PO{P^VKxY)puFPItfA3Q+VNTf{92_v~vTqFTNx(YSIRm&$`LW$@T0(Cbn zJ|<2JS<(kF(Dez1owJRq!05!W_R*ftjs;6JBi0_XgZXDX(g>o62f>__9fRTIDGC5q zZi_>4TJw-IDi^Ab2Xqc3eBJ~|qg7->xWzJ88l00z7;EKSCL=b}d}0d2VIb+MxcRSW zvVp~u!%GU9esr1HZ@vq1namB2xQ#r>v;d*S$$l@cBwKANlnXoCCYC-G-3)}0YKT^tmoD6y=uh8lQyRPq#Z1i2Bamj^TaGIe0HO?^CT8%<$Cf}) z1a3@@z&L?rubX;-Jo5oqK zJ~}ykpa_8s{Qm&+ly~`#PDY#G5S6(oNuBmBk( z2L!g3fxs*jO?$?;z)(SMbNzDF3MG= z$;r5^G4m_cX{B+KiU%qHk-SR9bD$wd zSFQ#Dea%ka40&QCB~aowW#b+q*};VI%+O$12(mn}p18`mHnu)}Z}#Ih1Zhk= zb%G$STH-uJ!zsupi|L=7ay3v@A^=QxB{xX-$3G~!6*a73p5p5z!T<`9 zjJ%2bn&Ycj3*i)QW|_>#o+$u??Tjc`b#a+>IDw^;SysDC7B`*bRM)7Pc$XuK*;%M^ z6J;O}aVO3l(?2|{Lx3eanayzd;ZD}VEe$ZbOv5HICY9U?%7XgB)u#&v6s*P#`3zyt zzIEstas^J%Ek{2fmB!>u8J%4$IBJT#;V^{2lKkRhn2-bs6pYqAW?wu4hyeoR1I`Qa z$k34kc`@4H-KGrZiQt1k0f)ht-SBV<#BQKypXC1le?B?C%Z=c8h&d4PSB#Yx;Nk({ zjad8h!=Ly zG0`#Ph)_^3hd>2eT`M_>+Z8MZgyq9d>7Sd*&h%sImaU=i?4k z*9xTWnO2Pr$C1y4OIWIGgJHZ(7`xvafe2%giL)~wVR+Rgv!dyy%9LX~>y`>i0|ae! zBYG*|S@N(TiwCmq65eNorv-JAp4T-`dHtBQ1-=YAvFn+ugCkl5N4!!VVXuiT4A0GKd zppmTgeCLvNhK?RM3Rz*wpI_erfF)A^C-cA(sGi?F957>Eb2{P36?KkHMzm^zdgMl+ zZ=sxE2^4j#e>_2q84dznkXk;wIRi@I!q3q*c|INq1R7l6viRjFC_P}`sr~RooSC*W zT$#z&Hcu4{guV>0&DXwUR6(T(-a<~QI`_dgy;Rd4%a##S9{7Nn5Ue0QZE0b-nRz1= zt_4$DPRv|#oC^X>**ezDV>;TTEffS2Gp%=XhVgC5P6hc4uf2aDrPe99AqTjZ(T)|% zD5)hXI?7C*xQ^8uz#fpDL3~4!3Lq9i0PhT#7cT+24K!0Q&C=K|bvS34vQcr<7#X>i zGnlymyt!w*S4DUNx1i-P0L1-_aNN^SMw&KZ?7`nMaN93*Kdcubvn|Arm0=!f0t%IKBAC43r@qlDa=rhjIo8ne{l( zNZR2uGxP^2G|UNa_gnzs8Gtj(@0f~%Pdk0_9I^CZS@V#*m2$KTsgFE<1tUj!?c@ic zkcHdz$|%isBL4tfI{_e_rf=)X+R}VG{Z1jY%=9Y$oK+}@gL!wx45}f#d*BQ}kIXo` zf!5Kd!MVIJE3vhH!+PoUo-nEqK7`+cT-IPvG6;{y^~6ZEgMh5^?$~VJc*~lMwMbyh z`Yd>%Y9XjQE_LPtE<3ygDu;GQvBf(mcz`g06#yNw zwObyXb`2q6w3Sddr1D%|I5ZTU47pfEJG;g>QExKR&evhT5qVLJff|Ct6wBirfJR}8 zrNzz_#%8Z2Wsr(k-({KdudW$npizM9)MxL?EOMKZCT>y}zaF@O7qjn^11ldqE|K@6 zoeznAdgL@KXJL%}f64y-AMl`PZ|w0QGPMu)9Hfjn%^A#?0}9N)9q^ez&I~_pj=4li zs=&`@caIH|qGz{h>w@x4WGG8VsKbEe>`eG?kQalL%YIk1;8sZ(23gKBd~-?y{{RB? za3^GGhIjpEmOFVfO*P|;$xPCfX1EuKLZ&7)&6-mty83-^n`s*V0Jz{Gob*gTZb8IQ zMz8&M!NWB%t#6H>jeQ3dc80#M07ilzfl-)fzXzv{0R-^gpAWCokYhLuq{s5SQw!KN z5PXJTbC!+9LXRm!tByrA)sf2iVT#@35s^^y=!>mfi8>;HP~qfIj%9v zW++TTWc%NT7d+7o6{fx1CF}2k*|XRS128AETiUT;yC!4PB$551g~w^OIjpSCycyRJ zwqsI4G#r}!^L556GqF^swjWm*<%;M^5tW@pFP(e{lP(ShnDpn(&l3=8>_0Jsj!;cc9f6(xtqMmqEsCI^rjua`8 zdrvom00aZQb;J;)gEfDLfi$4YsKWmMJoqdInql_vTFVCk@pimgP=eM~$Hyqjs$p@7 z`aB}20|{n+1CATCL0_*1I0PtW6aDdc!R=z(lgCd14heN@caME=&jNZ84RyePiGBwb zCUOb6*S-jIQDQIR@}PR#*B^#Y_Z$>L4!Z06=07BHpalIMSW63Q(2nO`xhNfh2$6?m z=6IPzf|@z6UQ^ywvT55Pb9Ipa0Otq=4@zK}I?KN$#@E{}V+CZ+aW-OSIXI__4+EI9 z#MX`}6@=M=V;0F|JoMNFfcB$a?X8>P02LJ~VowVh=$Peez#HHW`*z{a21#;*sKRAo z>ixjFbVC86j#t!0p1B)o03(``w92~pc?AeTZ7T!zc!0+_8xrUK z`EraRr1NJQB&{)TpCsd8*pW*&$Bq*a!lTy&AXFDLJ#Zx@9zAiQMH~lx@!&`>ZM2WT)P2C_r=2z#JtE*0r$?m{vQ7T2W4a%6M^bwU0puReP@^(m>!OiG=Cf7ArWmX z2wkPD#!1LXs)i^%1`&7XfUFjUl76PlgMDv^X<6j0Jtf5Q@Qh*0HXZi~op;8YO;B8H zbh|uG0ytTogirM!zCamd1OutxuhWZ74hW!`(0+aT;Tl?iv6|e)H@^7%GZEbWte*h# z?};52c94-pcEcX&IA=6$7B4T@BX>IV)6VmV|c$; z3jnA!-z!Lgni=`vQ1a;S&jVt!$G+E36SGBMcmDZgPB1AmLz%%j0yKOd8|ElQD&{&k z7_CS!czp3`YgX4u;&A>WaX@+S`rxfp$QWzlaZNy`W>1}*cmW+Tj`&jwqba~L;E%st zNHUZh42RL${{Ry54XSw{7<_V!g{!)9@X?v^%PE#mU~}W1e+TjS1B-$(yquC$NU{6) zNA=`{X<=qyeve)E$mE!+8Y=C?d|$3IXuAe3%@e=AF-zZ3MW?kVzP;(8%V~mL+Pyrg zpvcHX#Aw;>k9t9d$Hf?#E1|9sN@{qKi38aBC0tc znzbJD%&<}b?8sN$^T2l)b+&{_w z{{ZWqf8QQo#wicw$1c##95sji4145l5Z@w-Est+pn8YQUuDJBV6zK4h5r@uk%#{^T$s1=(vi|@)frCV3N0wtwZAL6c zQm*!TVR*`V(kf;=^uN)>3KR-p9-4jGJ@Ps>qM#A$CSyF3qw|PN0%T?HTz@be=MFwM z-L2vwn@9smAE48Xa){Fw7BB}^JSL%_MxM~mTgU0bm9i;F-q;`Sgai>{G~ZtT0Lk(D z;j{bveDL$n1OEV51rUjG!onzKxDZkT;J9^m&(z_9K&$}5bX{8#;waPQe1lAjG?XpcX$B>qfzSe;=-q*{OJC8(OeoDjx@v-6MA?94T9YK z{P2Yncr_nBcv`mr!#vl6EJbVh;F2sOz|fu_JOd(u`t{8Rfc-i3&c8n#oHz^8$uP*h zU+2dF!ty&B$H5ZnseAkr%AW)MN#r}B-lLt1K2A*FWz!x?b9t>Q|^~fAv8U{9V5tN0i&=(i_ z#xcj&=V4*Ic_qVy0dEaRdtxXFQzW z-KAt-9y{Su=5_~1z9zzAYrFBx<9NWc%;pITVE(nj=u9D*eRBsacxJEl#8^UV^U1S5 znb7*d#vlh?xuXw0_`-sh#XswW2S?-U@rlQWzsN`;9A(n{o{aE`kl~qkJ(K-;moRK< z$c^!ji+Ic{_J~b%%iX@XQ457ds)3~Q;l_Dki3_-Vxrd(K6HyBmE3Y^o8N7^OP`VOt ztW0uG9ScnLvpV94$vyDreP8t8#5t*QCab>wI0z+$krt==aoee$#l@#y4nKjrnLc@8 z7dA#We_!%{yZ#@?JB7mg!@yw1DRgn6QW0MqC8xVLt57K(5h$By{C>P<^sCb-lpk8JMscgjaGP}}-&AqN1)Uq4)M z1lRunlZpV18Desn0FQzF^5Fr&$A`NW?TO9=NbDmEd$R5{e_Gf?!u%Q8L zofvpJi86u{GqvZ0qO&xiOAny&%OFS#2xfPE@sMDMrr<90U!C!cL-aadTmfccKzzP5 zaY1h1H-GPZ6o^|h{ZD+#796nnJ~y5Sf=r8K;qUyP?*9Oef9+x71Te0S5g?Tf#~MO{ zI4}Be>;SRQeQ{JfE%ED;7pU(02j2t?op=bnafsC3^8WxlU<;ga)V^mJ0cC}u(an+2 zTT}Sp1kWc&yZv$Hbd@)CemG`DA0c}8%NB5UGvlr+Lx?W6X*}`|CLu^x`k}(L;CN!Z zKqsZkJWWU&sh>Ij0MDLU z0{sB3W#`o|T83O8@p4ZqzEGZ z{@xCvMq65L@Zi8*hTQt&PCg2u35DXpt69k=4Ngr-@E<>~GZ$Ed$-+McrZ{BJTxuwa zsPUE2{SMw4wj*JG)#6kSZ*N!i;7}ehCiyQgMdggijC4cuugCHEIp5*NkN|e$BiVlV z&ByDmXYdvSaIZPq%@Ba9Z5D@LM&HYAa)_|Bqk7>)Cj|5RUL+!R70Z6O zrm!G5A>)u?g9QqI^N=HmhL7)+2piRxzefQe!f9med*G(6|*N> z^~PaJt5XyB;>fTwOD_PL7<+MQ-LJp+clkdzh_baKul|#Y;YLnb_l^r&iTM)+>(;}8Q%<)Ve?}4k(or|Bn{c*^H1esK|`o}4P p;Jk+4{&2~FA;!Kn%l)At@jm!qix!c-em!tl3PC@}y4 literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test/brown_cloth.jpg b/stylelens/attr_classification/color_model/test/brown_cloth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36ce2e9f5310cce9e8c64deac98387fa0849edda GIT binary patch literal 49837 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

35*5GFgG-C2ir*@Dl3UNnbCKc|*TxtqEenM#zn! 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 literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test/green_cloth.jpg b/stylelens/attr_classification/color_model/test/green_cloth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d814e823cef285a7ed9339254b89849f09de1707 GIT binary patch literal 49638 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 literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test/grey_shirt.jpg b/stylelens/attr_classification/color_model/test/grey_shirt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b992dbc3f7b44cd391b362aaf7b0bd9452b1a92 GIT binary patch literal 30750 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 j-h|&@(%_U9wYxX<{XrWoKI9^c literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test/orange_cloth.jpg b/stylelens/attr_classification/color_model/test/orange_cloth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..819853c284760316fb9bc15892b216974429eb26 GIT binary patch literal 115247 zcmbTdcQo5?{5~9lplZ}6MA52fwPvl@d#}){qE)p@jasp(J!7?1f?A1{(poi&mY_9C zjG~HIp|;rLm(TZm&hz~9{P8@`o%6m=a^Cly^Lm{-d5!D3-j|b?a{y+2Z9Q!O1qA>= zL4E-)rvVxON{au+e>3HOg9`ZHOie`vq@tmwq4}Q+L`O>lq65*;&|aaXqyKM^-!WXF zXZY{Ke_!&yTPdl5Kx%pr4d{QC{C}D*I{+-Sz!l0lAcY`+l7#}uLUH*W03q8+{XgcB zjs4$2K?$UyrU8-7xI$h~&rCKS2qYU#O}3c4I+T1LK*d6R?Ye{-4XfD`kf1l4WF)eP zR!F_JlimE+wy@MwpC~$d4o)s^o*OqsZizyrWn}Nm$t!4RYH91}>giip!mX?yJhX9q z=Jedz#nsLCm7jk=U=Skubxdqrd_rPIW>$92o44) z_Px6Y*W1@WGKwD?pP2kTHNQYuTv}dPC9du4?(LHf4v&sc{_~3h0Q_IK$n*cBUo2$5 zDE~VH(0_hWPzI1MAPW`sbqShlYG$A(-mHR>k+f{;$fDX#Iw2|ZZT6==zvwxHrRQ(# z{O8*Lc=rF!v8exFp8a2r{oj5~0T_T3BG#OSR|RegUeqX^_rh%T_n5vGU`!Ey_}ww0wN)En^3&4oji z5|g!qo)v_B-Y$JMjf%~>X}hW1RdVI*!5k|4ey!_Ox;{ecBqp8W$XqyNThTH;P9C^V z)a4cy%jr8CFyTr4RxisArj)-~mO`VD=0?XMky<(Ik6{DIZ|N5o6qXC_jP4b>(pQcy zVc49L{SL}1!Za<>g|f8VC8mp9b|ykapzBo15VocGrqIkDkNjwxo{hHQ9t{hDQo5uh#<+ljHYECNp@`<)v;5mz^ zbg5KPbwc@yY7ZKSEtLZV$xF8=I8N}n!s+C|&h>QE-%Ys|U-21<4>u7fn#w)8!uVWh zRg$VXI8NeOUBL{a4U0}DVe+L@w8Wv2H^3qo$T*Ac;o7}qu&F75%8x)aaZ-u(3M{cr zE&pos#^JY%fJPognm)U4+Grx8P|5kLbOp^E$k30?1MQ-10l2rnkZYRuHt!tjY^vHh zC>nEb688eBXUqH(KpC02UzV-__MW8As$n!)G3pcoP1IZEh_ckpT}aO`Fb9wRPHXTU zgo^k9GxZPo_SrU8q4$NF*Eh`iUR7ofaaEYRZTGzz|8bK$>;M)%gb?S=`O_gHk~%wf z#gID@7ZqHfKj>j<{BK8PGkRk%$oKE6Xx&<^y8Npv{|IS=No&?(%_YyYFU0r9pG@pm zt&)QE7&(Y^utt2PUsLk^MK{m5{$DT7{subo?HLJ3{27EceX;hvc5pg7ro6394d1+3 zC98!~&gQm_&a}8DH8frDMs*ytrU%@+Oj!xyLToe0h`?PY< z`{;n(DUuI_NVM#n3m#?F5*6xItl&&$m=mqcz-1=C+Gn?Mpy+x**w@W z8P9rC^<-|j+JK*e3OMM-X)&|UCt4<0DF6bDatF>??rMAQIp?PI$g{gxiz%c=?5~@B z4k6%ut+*xSdZ65tn3MgoNKb2I5Wvz<;_%B@9N59{1TXmvl{G$(kHnQ~eglfM8TabW zF{0{uBZ6d9e*q&N@%ccx*?ih0Eb5lx1x_J0DcM;$A~H6%Ch8zN-E+75cJjn-BLQJ& zfPc5UT{Bh!J-T7?ZBse|Ow1z0wDgx$W(wcUW?@D1lQ>1%oM8mx}J& z6t%kE7>QD#N1E1x8o?|Bl!(+6-4*b1nbt;Qy$o|IQ>kInp0hluM3}yL<)z!3A41FL z)Y2j_iIFl>msB@Tht`~xtnQQ?es``rzLQ7uRIb3IP0cui?diaHuX)U?BGn!4V&T7 zvb7is>N7hY(V#YG+$6Lq0T9?QDRneoXizx-L4m`3Se#L94JpP}LyIgrdl+3iz>aJi zuUQ9`vmQ^Y&Ljg%R5*a}o`jyC(wx-@8H!oA4 zR%hu&yA+gec?+nB+aiyJRF-b+Wnxlo_zewgL}=Th6j9lno3Q)5Tm-N;c_$tvS1t&4 zC>X7#Rx|c-_MDzcy^66DidZV{TAI5Ccrm@EyVtKIrZk?&(7Zsrs{Wo z+)j0)R)%WjRj)O!IbT=D+C}7e>g^XPwg`R5=e+YG^v#ag1^xP5_06TiZKiLhNvmud z?gQ%oG|B(-kMVQ@bGy3#+&LyL==6Sl&5GSpr|qxZDp%NaMS|@nGr_ka&ah<}B~q`9!JRcd2xIsWA7KPcyzWo0ef6Hy|mH zZTKYsV(S*5@UknYT6#eK(K*k;^7K$1w$eAkcY|ohx)46?PWYQ#zDI&2PkmFS`NjU@ z8#k`d@M-HcBZG|$7LK~oxA{f%z9-R!8KKYF1r&Z(9wOs@%A*5aegxa@-}+VVVG{UD z#l2vPSEK1sB~t?8OE%zhw7K&i5`&LcuzeTy2pW#FXF8Te3AB!q0wX*37N&)md}#X) zvGK3A*pxguTqRa<*gyN|GB#DmBNCoXwn=IBn1ev@AJf%D5TV!v#iimmdM z@J^izw!j0q7p+fNUGAGRmo9p2Zz)%g`Cbg4xvvgDzVn3Dy7O%o1cQI|Mj{Db8o(Kr zPX2|jj3HME?r0~DIwQgP+O)PkCeMZTm~)iM3zGyDs+TO%Nn4FB*!w4TX@1uwoSO~z zuAIv$?-LuwN=Q2IFmF~&@{W#V) zBb+BuivS>D{sb=+J(=OhPxjv6GuEkxXKS1Axh=-~FEVviDmhZe5AnIO2wP_BsCARW zZ3nxLCcv59P7@fZeof2TFg3q|j+rIzd9`k#bMiGe&Sb~(b;C-wr8KGo^h57yQl)3% z-JgF;)u0jgR2VFpWQxo!skT)Vu!0dxuyeP6wK4LzOMp$KZZs8RS1ETz)RK` zU$uE9RIl2PNDN?wewo`FP+bdVfS23)n(4NB3|wb_tSUl6+e4WkF%OX5$W+)>&2^mp z_hDJ&+{&IGPXndI8lf6kx@!(e-g;rvQ`F%7WTspajR;-+?guKYHm_FKdXub!U z$pU0#vWcn9t?P^FTrTq7R|=?5RbA6v4A?MjTFkBMp!7Ym6mNA1%hrn$`@*n)4i({& z-^fL2QaRu~@6ieEl{HXf9^)CA*3DFY{!uunWQ^t#N?o)xZ1VV)whs43WcT*aAChEP zqcf}%KMBUJa4i>ksS&F0hrU+rH#xF2ZY87{E>|h!?U?pTGP)K)th5y(6!5E8z>aO| ziM)+rQB|7vO!yGb>z-TPNcQc(%o{Q|gZI(%hI?xgiJv$WMi4w&*EC-Z_%^ZbrhNVz~kt@-Y7TJ1o z+$XsY@cTmKZ3Y5JiKQ~1poMfd7-tb~ywuo7B2$m&K+OCDA@#V-985#Uw=<3^yhbN4 zn9Z6Q`Il`U?DX~Al78XERw{zU*c4YlG!~0KBl@2pUKLt#NE0*H%_|tvwPY*;mIE=4 zwmw?IoewNE@=)!cmyEqLxAZGx2^015K1@o%<~-_=slG!9FVL60*%kVKV!qZw;9Y;}hdhDnJ8Me+|`ticI=m zSE6(*X7e~jTvyga)g1~lzuJx%FU+Jp85(U+u*eQt^xrS{fCPZk^!-PXdD{s3;E0Zh zCkd-^rK+6Z(RBXuiM?{@;`ADGpvV3-}43e4$cXy3ggyi zYyk&zX$Q{R*N(zF4=XPLbXLu*N!;Agp|Sk%8re$#t1~oWr$yw$#Nx~3GkE1u*{;XS z?=~gLo;U7_yuTjw{Kev@Mk`1BIbt{y{qM8RV;=CueuLuOw7;JZQXQRAc~4USn!lUbE_TktO3t++J*tz#kt zQtDD(J>X($TMBPzunl*0jmbJ6H)n4zoJ;E}h39seNDeLzFay$Y4DU8jf6T+l^FnALGzpY@1OCXOPMW~(ol`sMR(mZ%xI)>1lM3QZ z+!Q^?`7~{N#XY-6s!>Gn-Hj6D{VAb@1*f?$=c|*x=`e|@FLz|6TWYOa8-7d1Ft8p) zE-IXytDM6JMD7$FcNNfdTtfetq*UHiJ<DrZwM^W37I5`jR?VMM;C%eK*zP5uYc#w|qx8|tWXMR&9iSNC25wee zp)xoOb~V`kU+2!?-n>e}hn(dA9-~n~d)1DM#T9NK-Y1+A2CW$NNmDW`*O#(dA3g`^ z<*G#{lLX&fk5y3`4?|W?t@)eTP3v+$))21n;kwr=zb_MHD}^$?Csxoqztpf`kg7_U zt?Wg8t$yg4A9%>;CVKDpa!yx6j6AbrX15lUxr4&0#Exz-EZYv=IS9=uz4OopE;7x| zkd(Y*l^-LGwPE0rHd&?CvenaJy zvmcIvsGedCn?!_PZNV2+zXp(sByI5JP>9KR;VTmO1ddbH*4eArY`UQZsIq(~HCn1p z95VE;^sKkj0<08tW%o2f^|-kK_-i*Q2XxZ)xr%Y&Sc9q@Or=^4dUC<84%IJVSonZ6+2N@p z5+`bmGz1;xVXjO*pRh#(s>JAI$HdR;NE8W(Uc=K?t*VJAIhSg$@-9sw98SkF6vFCR zlT#7HVzyPQO#I9(<#~x#7U;|1bIWbjug=?rRm4Jx-Vf_JWzkCbZl zsDjO(xF^N~2qX;LN5NcxdoffEQw)k30Di2+sv5ym*O=^WSoDOhm_wZ-RB_e!sJTwt z+n`z|FH0#@J4JGlta<*0y6lp2FrsS5VyNqpfM2mv>l z;UaxljKcKn$`8QU_IiS!XIls}oI|zJmU@D4(%4~Z7PxK?f{gE|g44RPL{#(<g=3wWyIR3o-9lq&r)jvs_?eNsK6bG4zsU3jm5 zBch@(^Q`g{et8!;=tUjEO-^8mM+D`_IXSX zKl4y$EE!QzxdgaEQodXQaCZ|CjonzT89gz3+r|TrlIrjG7=>*8>6-}a>vmdbTccnf zr?-o>^MDn|NXu2Lky*Wq-xauJswKy}F~GA!nYUD&qd``gPzDq;n)_tTyppS$Wpnq| z=;R8a!ONVwZfaL3#z$^YTVe~h{#c2U0RJ_m=Rr43W9`DZ?%9tEB=ZGNSlTtG zng_izj1}myj3w!YrA5v3yjyR$&T8!gi1ynij}6QlQZ}poD{sx{JM&)xM(RSmPbq(| z`rnZ$duwOZlD2sgDmIYg9QF0C!V41miG*!qwumDk`}3#q>-Te@+<1tbphKEZ`HA^& zm%T?Oyv9{RR9vMRnUF6i!kGK7R`2bnE1LP;RW#g!nb)(J)c|;Ywr#KRqNl2Qb6!p< zj5G*O;BcPzyLVIlcj#AZ9Z|MdFQkTSokj`Mx3$4dG>>i-@9q=k%wXLYD~VPAQDfx`ZwNg zIw(|?M-YZ(X+n9|?eauLdk*ot&hn!pkGL4O9Q~#FtmYpvT|}a9g5IT8=&lm5#f*sM zFF$Dinl~m6F8C*zCdV}9)o?t)ixt>w;6p{*A)~K`c#eD?!OX87HZ&y$!c|2exFPLL zrl%6ac!d5;pxef)P>=CP&JK6PrxhRj9zNLnoHl&Q)700u-Ym}XX?3u?i{`P2>9jy# z+FLsK+$IS7;UjSs!G9HD949$r%lpRT-zvuvE0@zMSE!c?i>*_A+|*pE_VNN_>US1z z2pH8JvGup~6%X}yuiombeO4*)Pe$nx(HmP+d8kJ1&jhFEq1mV0A$D&bjHG?@cz&c8 zT+(BN5qam))WP54i(F+?v>tA#6Nd#f}azA`9V9{`3s@fMjwreTzwhzB0~hmq^<(A%@!;cde35#y~jtv&HuTNjUrva zzr5I!_oGgki}%Km+s~!pY5_hPBMoTm>E9Tez-?dC-X_A!k=G<1f9Mwm$5IVJ(h%bF zPO7%|kcmy=gU*hjOMqSVRrhAI;Z1bDs(rbm)nhI79TL^^xQ}kXY~Vux#%#O5(d&~l!?a@B`;Nj5 zk2c}jKtVaV=F&Vre+#9r!z@BNPR3l>eOu%!Yw{e++pPVBk&VEQ9}XN>Enamj@@F%| zhiz|lKgv*^!<&mv)nr#pt4XmPScVVa-X3351t{YV;kyr(~!|C ztllZhVQ$Av4ywSwgrHlqLh5Zy=OzrJd!$g4m6F@CgjH|TkN+Nk{mK%YT&<~+gDu6I zF6y7d84R2wiKe}AH8gG=RdWn!ZYiB&gV1jnkg%m;VIEbvmzJ|#5Nu7vPM7^Txj4~M zU&lj+#{|TB%g>-9s(QR?`;`o>tS6S{42&RsM=`w#F0?J<%n3YBRUxg6TD>3f6eDS) zT%);9Mg~fSas+Jk^%8kD){etY z47j05Y|3_elPJCQxuxeZ3Kkd&2vi!`7lx(~YrxR8O~ zr7-aJXm#o{ZW z)T|MFsAi8mZkS$n4y6M1;v2HJF_-ThP;}v8$v!wEs!IQRw!#Kr`l*sH5noLHA+i;M z9e5r$4;qQj>_cK`jZ(x=E@C*t(RV@IV0v5UvT&dQdQ&Iz@FQYWL|)reqH{psT3&uA z4B9ptqk)nz-M{iy`4;}#Y^8$Op_q$VZR=HO)4(uSK3!k*Z z)ZX(hs=Na*xt-r51AxNQXYxnB6-Q;89<{FH7Pi!XqPkVD9M=Lu-FF(l-#_`96tWR+ zwZ~&*b>Uw5#y2m+AoCa?mdU*I;|G6vadg!3axlLl;f}NE#F?h_`-*T-N38Sngo4Bm3og+m#-sQ6KuXqA?QGlsydGX>xkgDq zPL)e_D}f!=Q8_jzs9BD<@sgPanRbp4$>9-~YLERfyT}K3RU)w%WsbmW-%LgYZg%QT z?=HD_Ux00ttRRxM@3y>sxw!WD5^!o4_RV*S=o^@+I{My6Gyu-si;X2QU3Cki-noTO2EH&~Smv;MD7DAb z|1~T`XZsRhuw$HZqxw%>U2n`o+h+twb(rtPETopPylB9Wz(hx^`4uv7+Z{sL-U5n0 z_-OWiqFC9HH)h$>%clC*9!+-HBrfaNHkqoE|=`IUcoM(czQdJwVhM$H-9t~S6?PM4HBc8 zH`&bE@7w%}hK0IUG<|H+;T&hZJN3klH*_3^FEf(tjzb>k0kr+0`XoT24InZR6(TyWj7RNZz@U2X~VU=7LU zQ6_kAeCvF4jmgm-9`@ay+0%3X{TAh#VZg(gpo2Jn^-8afU}w;d%U7}|CTuJP+~thv4*(>ztQURt+8%C zVRskEy^$#->_dSuHnDhM$FQUQZXuL$!ghFNuUfqDp+ow;K8p))5_?k>ZO6HL`ku`v zmQk3SC>!J7>Ic(P#eTiZkuFvl%HJ9hQCfhxv}zlqE;+&?)s*f?_oqEA#`F%E*jkF0 zXIkZhs0iz(UkKPa+6ulZDrFz_I)U|YM7vTYEO%R(VVl+;M z0ZCXcF4Fsumw@Uj^b?*V_gQQIkc(kpc#tKs^ZeHM+<1(RT5@K$b%wI>EXi*oRgDY% zP^u>!Y^o!wHrhxuHQ*-Zwn@%8j0M3H3)b8+S*=8S73RXSsn7~(J=OiqXeU!0<19B? z^v0SL$r^a2-PrOkvVg93z{kYO;;gfSD!`6>cCJ4go`X1J}t ziM7|fN7*84*WPmBURZuiUEDdtpbJqZ%JtH2Ag*=YEEuQCyv2vqrZR0tFKsPDa=}3= ztd22jTHz*P9D6-|)ATj%q)sf+ao)lXE6s(5mWG!A4GUTvHyhp}LT49a>G0%BqO5AC zHL!d>7lDB_5!JC+=`*Hq#G{Yu1iq$HwO+ZEHqgZWfDwaYR)*+3&n`jnfM*ouf-7>i z4*n%qqL1)v?<2X-&~1Gr7KJ zH@4)HAkm=MQrkaoyi%mC2$U075Q<)+^f5%4zn%#!L#vv@l%3z9ENNPa~s-w-$}o>`7)iL-H#dd}#5 zG#UZSP~6dHo#rl`{yRFJJ=~K`73#9Fo7Nw-6PYFxbO~@V=O#FHNy*A7s!7*Gbs6j) zu8-G|mz5P zUM#UogMbd*s?v#v}mhk}g+t%dqjC+c_ zoCuaQe71iHh>8yTd6M>Teg{KRyuy)W^3})e;H=o2csw`p)^!TqaO(tg67`a6QeLoI0fGm{oU-!(?>$;6YhuT$n8CeFmKXY5A>5~)$kEB2D8$`2`G zX0kbdWlH;`rrYIH4Ht{{l_+6eZgkbpvu<=3uZ%zje7RG&JCYN+>7ZfxF- z!sD!B%!n)EXM?rJhqZ=kVApq@);-?vfEmc%fXl3ocd@P30w3eyVG*d{N@jd7#O6(S;Q8WfuXI#{_-#KbSD@dWIe zF2*;gbb8<( z%Zq-huBSq|nJKIiSu*|%Xs_pGj^q@#m+GmaF@?aAIVYhrnFqbZ*K1 z-B%XKKtL*qRh(&byt?-tIE~!*ktp_ zQ0+{k6vv#CQQqs;`5=Kzc&TbDdfW2?j1Z)Rui6P_qdQzHp>e&vhk zk;067@<4L;smKqj;5NPHt-*&hhWGX;x8fx=d7*BLXuuh?<4s_c&2QOOGu;$@1DQGT!Gl6aOcUVA|Wf$hZ%zH5*MK0+tQEJ1RQ*cxu3W? zdi40m7=$3Qw98f6g=nDyeVgZxh5i=E<*Vd_13*r{c2 z1U0u3Dk}k8OR2!9z+%j@NJ#y>uSzq*G;dDDJt$$MMWVXLlm#dzvy6k`%A#;DM8JSv zt=h`?>zeCD-UIS#>*ucOD-o{!aab8ck4aTj);t7&>?{`qcCe8i;V zNQEDn6mMD?Pm1FHxacqvBT}w0Qt%Nuv93+yov8kZMKYF(r3Yai;ZHaj?aG`yHLGtP z!m@SsKCusD@)B(~^S-EU>jBB!QVl=ZpKAiJ7eASd`Cu9dCr+BH^f&z(oh|by+%}P+ zs+!pVBWf|$e2Mo*tMr7EC#N%lR;fcik#jBo(F)`nQ{>^_=kKf*jw#RnsqLQE4&6x& ztt96A>uxv%C&W+b%qmgK97D*fU61x4X|3U$vC=>4#v3*_>3?KPU?w9&6BvJQKAN=L z5~{qaH~2yKXvlu-IbO!S`nju~*VaeWKOOsJ_iFbWqZh2&o`RI_?_-|EAX0jxA-1`T z(&sWH5BpQ4&E3|&lBSivII#=HWXAa@i(}~97ti-x{BD@$Z0jR4whhp<_c^uSt@4*b z_$oa7D^?KuFEj{jCyKxQuH%k?ka9g~i_G?lN(q1_M%pQkRG3nhb~N8yfP$!o`362e z<3}(fCWfb&aDTz8^tFN5Z$84&6qA}ia9I6q-w^Pcwdb8zXK9WU$)$1jt&=C~U5DdX zaLC1;5N2*7bpDW4@a;p@9^+u^fxlOjWr#M1IpAZ@$wf-gy4~K~hRq$#qK2${Sq>fq zq`gp5u~qcvv9$V*r|1R2JnmKE!aCE{N%2y@SAx6v#jgl5zm{O%a5qWZbNN>Yh$&-D z_tYSCLBZQDDSSK0Zs#CjQ5!6Fi=o5$<@|%p5aw;?E;!HEcn_} zf9hWY>Nwfz{>pi#y?q!p+GVYfTDwrK`sgS?|4aLWToOKG$0=S@n1Rv+luFu1{_uS< z1$DDUt|Ir~Qs83I_vI>Kj~||D&8tj_&0hlIU+p=0RB6dQgZlT=DOoS!&e-42^}L_| zngrSYq$JAu#vP+8?4J;**Mfp+J-7tCCRlBU{wXW131Ql~AC)&d;QG=(=^)9~^SV!l z=0knH&a4%xQwHmogtRMxNe3xM?lRTO`L~0g9y4?%c>=L8(Jv2k?Bid1Gnq7BG;T6q z{QT)PisJSES`&YCSHCq09<|&<xj@2Lo|DPF7?&Vm%N&NdX5EyxYe=uli!CGHL|?J$J^3yNe0{t_GfWha#R z@dA>>`{I9{R<1H4Zov{WXkne~mF(3$$XDi~COHGk5A`2q;~Y1p|K`4ozg_L;ajTB$ z#ewyaLes5&42 zkC042%Wqhp*}kMO3N~o{(HS?Z@V0k#avdjd$liT4GJdeIU?jMaY?Jbd=1NO~M1LLs zTr{b(B8+DzWNo1MvA#p#ectB|UTP}RMg{XjCK{xghXdVB`wG`}rp(PBVb{or>$_Ej zyGhmc9FIld**A2cVP*vqbgQtyt*Nhe?NE^Kt$6jvPis*Ix>oD_twH(uQ^% z2t}zV_~P>XaHX%h%WBfDSHkp1ZgpHS(=FLatA2n4C^3$KllGpX=K4njlpJNK&^jW! zmC5f00|zvF5z$9aGd9KQGJEKT!1%lTj1uED`men}8AYh^W{! z3On#$RVCu|9pFehIiWN+tZ;~rd}W<@Aev8g<7k9B^qs!$?j+Pm4SFpQV$-^V+@lz+ zwni$yG@HurL$H+?f5$UH?B9mT_z{F1l6_5e-}NegKD=sX3i;Z=h+`>vbnaSI9WZ&=lfJS|BYlpwS5)ydA~^|l%J5c}QM z+4p?UFjpT`3eNd$B*qLolBq>9#VluUVuKZox+gVJP4(F_oh8RKNQSrO7cx0G@slLj zHw}Y+C`SjV2N;K1BHho5p#7 z3L)oi`If9Wu%$OvQSZcZRicAbcKsKci|ZWff?ts@)6QdBu@F2^$rfM_l;>|FP7*Tp zCCR9`T^_5DH|$6TrcR_x-bGN%mh1L^6dKQs=Z^gqZGk*fHJ{8OQJF>fT0r*&R#LS^ zEAo64EPvHJ8l6SG2M7$wFPEC?tyBwQlq|BG)1l+z{1I#{WF@PKcbW}*;1Jt(;Wh86 zl-J*ZTm(>?()E8T^p9WH&@TE8z;r}X6-RaTNe9gh%DfD<0-@kJ+NSNfBE480%t zLNF>?=>q)g2}ua&X4>i~y&zjIB=YgF>~qlRS?xas3y8XWsjBLr$tlb&W#fDKQtExc z3NjUX7SHsDo4W%td#F5SVDY9maycsv>DyR{c5y`+o$3U(?`a$bSISg%3qKg4xb=fQ z!-~F;AJAjKI(fG(OfYO@Ryt{csoTiHa~NfR z{{56P`e3MbQ-&Sxd!0tx;}ReXa?tD8Y8s`;D10NS>e)fw5Rj_~(S* z5`Q`rT~(~mw-+hN&0gk!IJtXFsy0dDDV`3rTY30JK+lW1J|p@PaQhAB@CRfB6DWLp zRL33s=v~3`n`X%OaDJW9+`jWdnM~M54Jy#UOC7Dmn)+?nd7phOI!@AO(={o)-Bd!E zHbf(>lOLKdZqG8r!FCB~D2_bZvy1WFS?OuNHO8v5O-j!AA@r1M?sfmhK4p8j-qe-u zCXk|i03r7pGd4GHS+0>%Ii=2Ff0Yo;@sj9slQjxa5Ou-T^*K_Bj+2JIUl9X~+NX!OL7*d9Ud)Omka-eLZ*g<#fwj zLtCNS_?rWN#__#P`iif9ajIeUTLs(3Fgup*@ovw!!2|tbAuKzQEE&FFBigf`-BHdD zpm0?g*X+G#7Kb=)6{mdtQF%m#=fz2g@e{jP=N~sVU5^SR*pm zof{=6Nh(9GMG@P@0RHTW&Uq=q7W35C*Jm`F9yPg-Vc3nV^F*DcWFKcJ9XFpYwphvJ z^zO|!HTT*_Gt79e(Wk9ELa`oslpMJcof}6dlCO!my~EFIsfnHZlYho#``F&~?l(;3 zw&R?5Oi&^5F#OsRg_19RWq)LQ{=JOt&3Kr|81v(r0kfWnJl1SDgrcYfOPzz{srttz zpbB6wn9ujQCBRYJ!yLS4mo)dogDZXbs@%`j@5TeV%4cdG3=7OFq zlAxMMTY$WN+3Gr1sd~3Kq2#)?Vq9t1W0!-IhR7Pbv)enLP2BxFf7X7^14nnN7+=gx z>{ol2x(4KOH8#a?DLruV^xd*gRoS+I{JuHefs#lg+>iF4qEmWp%f-seTMK!|zHjMm z56AGf%Cs&Z`bx?KxQ z5BEA*sl5d7tYiPJZ23ucS!P3X!mpgEV2^IzjeTiD8b}#9?w#kG+*b6PBcq(>B4ogd z|L9^xYv=Jw?51=hxK=}mTI){AcV~<$U3`eZ1X@ z?q|Qz8aCyA&z|Z z6j-4ed+5mDw8Fl=ng&L%ksno=t#=ysQC)n6&i9^*`*@OVcRg>RC~(NZZCX^t#3q3N zcox0sD)Qt*781O&U$NN+@}8>sS-1_FH|>q)18i9}h+*_Kg|54aSP-oi(~_C=Yks8C zp5OYIh~@g{#+ig_h4-i{FlJvV7x6knbE|80EEi=fBK8+*26&$(6UHlh6T|Y?K4>)S zYYKScmQ3~dY20Rt^RB@v=q!YgM;80+{XU|DQn-=AK-?_3+DK|d&5{@rGQw@N*p}3K zMyD#JovDyR)pmi~lANV#f&i(s8fqTF+x;&gKUyFb@FgoDt`qog3nk}OBkOnfzWZ9{ z_c@8ON35IbzxK7hVgEL5#Z*7~W0|mdHk}+ls-7VsG8v8$>Lhk+2s%gI3nsVxlj!vg z)86uz!eMaNEQ)B;FO*DjLl)}7=(Rt3WNN?pIKI*c;NyL4$v`V7H{@%>N><*1@!}Lz z&*1MUhV-N0YvBs6ZnV{c>7lCYWM)b#t-tDLIr+((Sgk=VbKp94Ptc~Ke>p-unX2O@#kaEl2VE36p_gnZ11fp zI=v$}O0;_CUacD?KYK{y8T1?UipG)w~|JFi<*Bs-+W zRr4nNMWZ7aO>7V~aw~}}dN4OFyYQ1SUAMX7RFJ2Z955AxVDpifEtyngiMG6>310z~ zvkRCd-&+lJ(V`*%6A@UEw88Wj0&024WBhw<3YBaMRS=)(+G_^Xek1i0N~Vhj(f-!` z(krpOFwtq>UalbfYSYL^oIdBNlJ?m{{i=PSk>)>PR+>3l$Ol}s=7VfBgWd&p1=-Fb zPZw&2h9F0`RZ>>IY~$iW=$v9=S4^||={osUd%_CtD=&YQ57CitZ+rAeS_x2lip88v zOk4uC;o-dPr91shSEQSb?i#UV#XBT$PY219aEn?YS%*1DTW*dn+AnXi`vP!=z8z<6 zAjI;rzV$^-C_klmzH%_@ksJGnuhfsv9?zfuLn}0&?6WV;O7Boz2u#%Yi69eSig5(r zRaJp*Dhs@{h!;=LaMme2nUx;-1Q>^tW5T@WhpdDxUHLMosN~TQBJo*n3ef)~K}M zm>zCn8+2yViK$83<2TOQF}{l-g-5jBb>yq^kPiO)(J?QK{ny_qVaX3V{P*<%9SfgY z+5IRQl3DkjHe!pUW*&Y|yszg|=)7)EXKbE{KmF^(Rg$5icL{LdC3+|^IeREF{psPn z9U4m=>g4p&6@#m%{NzFG4sk!d1zXOXzXS8&73jJbN`{u zs|`9=9%xzJyY(nrD4j|BY`s&OJws1vjxFVTBm44lYi+k)rwa)NE|UtpG4y4a`06n< z9A+oo3Eozq-#n8E7td#DSc>dnoCQ_;o?LASQhR;dfWP9a{>H1JtB;MATDo_)AMC4~ zBld`*&AuAGWuFP25C6Sz<;?t}w&z2?gSzM5@%80UgxQ(P5e&U*5WIJXWxsD_8a38y5^$i0Qgo00*eEtUF*ZLB z-7(tyifx?>bQ!hzXB6&#v*nu58>-}$iHWJNS}JoX{!`I*I+z68pu-X=@L9(_Fp6~C zcXh`#nzHrU&rTW>f_-(tww_7sCzp1H;qvDA*uZQ4)WKf|&fVWDd&k=MpXAO@XL~-_ zpV(G$Z0C3=eZdnYD|G$yZ_l8e3rl()!-cCVJdvaLJ)-q9<9RnaPWgkHgF(sSD6;77zOip&9WisH=o$Z4 zeM4C>1D@z!8DM!MqFE5UBHyhg?BJ|4V*Ksv)8xv$Ja2f3aUgKJa-^J3Ih!ipHyQpR z@r7i#O$wf;uJ^tJ8Qu5a#s?*NB-Y_lLF_gzk%|dx2>6N`@&9mimSIi)Zyz3lpnxDH z9X~<@MM{)T=@<=?N=V0O28~wB0o2D8l*gbqx+Gsh>W)g4idn5Tf;DTc+mj~b+r zxI&@-8$4uBmJbRjah?}Nc&Tb9?U6EP>U;JwL)%|jF%dW?8|k6hN*OHDEo$Z80i7lx zykMCz$z-Ql23>Mwf)c~_WYA(MEBrJ)Tu*oizfzf2;wMnV66vM|Z3R2(#658Hxh%0V zi6Lz_P9}xKYUyPvJL1Hjm#MunNY-`pxwU_cBN0gWla+WQtK*z9N_iekdsb$gXi*R) zi7ES=FHCbi-K=W^((?uJg!q=rEnfF<&<^6Ac2Rw%#Ld}rpUI6hBx&;_{P~n1jznxm zJ*@`A#n~Zm6e;@A^P(hQfgPk_-zQBLf2AY$KAt!}dvjDHLb|IY7Zl?+{e9qoVmbIj zY$QnhG;3M_0pO8!Q)X!r_IelRg|1V&v|_&3x)E&~?qljgG7K?G+*T$Gv1Zbgj>K*( zEEGsLd6j$wgXIyfdL(tJ@a3pl85ji7ejOU`JH)ntUnGO1oHF}@ntJL=Fqw`gA&Q#9 z?Y`YD!#_BuE!A=ZnQt3ZOLj%po%r-Cc>UeygC7LJK8n)C8;JkT zk5%!}8F#6CSxsgTj|6VMF`z=dan2~WV3hZp>ktc&A`P>VD}x2x61Y;RJfyE_#ecNN z<(2r`W>~~Fp66e409|z?Dea22rx{ z_H6SD=M=E~S(u z>9IXx3p7=%%?8SE742+}pPpDnyvmJ)KYL2k&8Z&)gkei8?&bmDjQx-nhbuF{wG; zi$V-_uM35dt#=FOMP`BEOGTO=b}tv{ZdL%U>Cgoz7$q#(@$K#xzG1UPnSiK|8QrgE zlQr6^oi#HSb>hmkFi%rql->!LM+i)(H$a{P?r*tgkB${Q* zpnnMpeZ9ZdjYJFF3?{rKG-k0Zu7?)oJCU@r4)VQEqtzM^BmMLNn*BAeruCGGr&&z; z)9j)_>NigZaAs>^?m}4Q*FtatfBnev(`rjr3R*q3S*kr4Evg`E$&imBVC$?x>T9}2 zW~JT!$wPYBWzoy#hRK9so*!2H^h|9#!pgSFANP9O1_cgsK0zPfmGO7S65ilz%HnMms`8 zJuNXF=lS?^wXdTKP1Q^afS?h-nW)%0 zF|>O%>W=;)lMk2U+}0M=d_h$s&#rMnvSx$AS_UcfuInz;reUJ8?gzM)dX8lWGSEHW zNhL{Z__}!gP_!Sd{{dks9X%2Gkzmi^Lhi!Hp_63A4(eIH+7q8^;|u~3&;G(V8NZP6 z?HpWT$=ee#^^h{W$9Lc#w|TZR{6ecPfj{bul%}_M&xpODimEa9Xf_JKK!eQw3pwg- zxFmXgZkXz;6{HR=xb$k&ELG%ITFn)|rvk$2vb4aLdogra14V}U$zN9^>l@ndF-A%x zJKKNisP;{G71=HgMwuO5W% ztZV^T*srmIGRurq-A*=v_Y$BIE1B59N|R(9cFTHMOok0(`5*D}q>b3nL(Mv?n1?1F zqtg5F=|;G=WyAPxlF1aMRMx*^z-TSe)5)(NxmB4*x{!?Ab@8#V481D~1eKAVSR~7O zM7xUqpCZiZWDYPoWL9aKII*W?;}nOSl~0vZF}k_OEb;4YNl@5q% zSvXn1cL+p4cieR)Drm+Qy(`7hI@0@k{dB1{q`8Wcx+j+?0+Nnkjq@q5%^l!BD?2HX z;*l_nN_egyUH12f2DsAH>Te*MraH6Qwa(6)zdD|H8yLM!HF)qf@G-bSqFGPm*sVxg z$0wt`So>)epqTU!t3@2#N|SVfe743;peD|KeyC1?&`ufz4VG}I!AZeJ&D@(Y1Z#Sm zK=p(tN?S2w_3Vs_D4YRS?<{{NP8cFD(sd*)P!X|VExlbY!=n8NjGU|#trq^YoZ|}n z%g0sx$yheORIi)4P>y>$y^)0zKr58C83VXe`jV{%87igG0QY8;tXRcOpxx<>U+G9N z{rj~7smWzIf2@{f56vnCsC#5vS1y9+3F<}BGX zakZB>3C=d5dyiW$q4zUL)U#Y=p7`kl4a%FT!JOBMt9B(#KnsGqM3}Mcd)RxC^#XZz zbQS?+RF0cSDW&(z^HO8{oH7EDQbOqG1R-|+E|~5;sc=zdH~)jsd&;I=X$GsiCnCC8 zTm?YfaE3%jY2uSIC%=BQ5hF1Qyqsx^qXqe`9o&UJDb&4kEnm(6F<4geN9z*5Bb(Ab z6lOq${1rdl?|;3Vtugi8Sc^&nqVVemsvSo#k`*8?{DMJ;?$2i;hB&C^a1(H{jW@{p zx-a(vxu$|PPI{dxvg&Tm5ZG;UYws_1^Jc}kV2!=4)i96#7>1QrEZH2oCcI%f-PAv0 zNHoU@?6y7RWykui{xIBxJXtOjPJ3$O)kltVCFp)+@+Z~aai@oUzdSn)(#`$$He0}F zNK>?|n&A$DMC*zBv3{^ifyO4b^)TVvFuP~B5g;TS9D0X@wrZ$0a#LUZ+9MdIBmv!m zcR#F9@;tyAdB`u-T87AU>Em`z5w;Q9!;5bIoYyE%^$ieX0;FT>niPh^#n7CN?yt7bHxL744F%t6mK|h@vj!Y z&m25JqOnlCN=kLgp#Ej6x8l8i%?j%JcHEDpziH+|eP`nQAE>L7Vn>nz<1e}rS;!a^EL-V$}tWkuMeVb9tU_|wGu~}+e;*x*tL~SJ3sO+1? zPSVl*vqXivhPH>R`!x0D&wQXb9STbN#t9t`=)B;eYXf=r8;Cz2COec@dtq$`u{H3e zSEwEy(_fSET6)Z3D|Sw5Ej9G7bM#6?f@-wVqF6x3?yuVFMS^8#1w}RJwZZ%{G1hPO z<^zu>(GMm6@07k?Hetf6f_^tJ&yjN|WvQ@;?d2RSI;+DWr0e5)u{P-sPaEFT##IRO zPnSb_^r*$P1SxROB^7$|V57umt&KsM_NIb=k3Zi0{XBMtc3q3tz&tf8yqQOXhsbE^ z*@4jj1AuDKB8wThN9#k|zA?x&gvN(RS8eZkjh7^=BWB*mls`>3m%7Oe+z{!h1P3jwM5`zC1zS6OyiB&v+wJ zyyAnR-r#VVp9sI z?^?S{Oy&~271_8Xn}o89jO2YQjO2vx7E_gCvsU=1t}mD%VUpH=u1tE;%b9coaBrAk zq%EA1r@y@!U#{~=}$SR0=-ZFXOflfD+GM z83<@GNK+}#yD}RPiGC<@+Rrr8Gh)nJxThJ(l1Zopmpm3)TcN(EUi6ok{s)@4R4rai za4K>xzwh;nLAFDapl7ev&}>ga+NO^vcD$IMwoyZJmxVv5`Q@ZadC3enZkuHhF&}VW zd5Wu>HK{lPQ7cf&imGm<7@f=Bw9{0pZ*Qjigo6f8!$A(sKar^3w{+7r{8)o3I3 z)AN1msdbHtR8HE|0814bB>U;@S`tkGy?es}VP=!4x~i`Zc?D(QPhDlG=NgJ?dNU?x zEYrTMcmZ7Y^huxLID^7vCj(8K4AWQfHBC|FtR$|FiXv@`b_XCcIi4)j%}HK&_SDkq zI#bF?%My!F&$3AcH&?K^Q7bECaDOrio^$9Ol4$6d$Xctki};}0Gvp2 zHXeYR&T_&lv=aDtv59(HGIb1kb5B<@h;4GqPFcFxPWmO}od~sG5TW+9pN?Q1_JC;|L9VA0%#$ zWKUkC5AJW6o`q1?1}5r3Z=A<^p*&mgeim0v5i~GS=e=+@8h*O`t>F0qa-a=Ovklk9 z1ZO;Bn(AZf$Q*~JfyQA;E#Dw|eEI1~T#Q%OC`~f>#i4fa5mv_tu1f%qN#=ebZt*=o zPEjR|(h4N?pYES9dCp>J63&1w!}+L?0b7>3D%}Q}=GLdsm5PEW3uuAi#$>j0J#dec ztivF|1HtXx1`Igog&^E9SW**i2A!({E{Eb|iE#uq8wP0TWgB_%cS-C{l!}NoANETG z$(x`7{fTY_wFq|rMu~uiS;KBkTBQ5db};}?54W>X#Z_~qcRpDL7tt>KfPm5&*Y#01 zV*uB18O&TxB{)U~@8f!A@S-*i>g@V+QYn%Rj_DUJVTjMNQ^Erzb|6999Y7H1Iycsh z)omK5cOTbLW<4Fs*A(>RTQ+9Rx57l%V^(gd#(StG*|F~m&Hfk>h(6DoO~uQgYz(Nb zxhC&|;dhL-!THglt(Cr{NN~75GtE7N&us5}lHaW6PX{7$Uv3N2F2r3u`#n{dwNL%x zPVY!cUgGZc4opCOHRU)q5>eMYyV;OU*33!##oBoBV`%!?tyS%kj9*?i1z60u0TY`F zI=nrWl1x4_C%fhF{j|38SIE|I+4xy)=j%Qv{^OvVL%aa}HX@zrtN_O}g#MC6m|8*@ zjqV~2yZ0XSW=1Qa_$&O=;)O4Bed{tZanVSw$msiLNvH1SF<}-wrWVGnD-Pi@H-w`);Z-w5D4$1XSphcY6%%#3Sm3{a?1Kp-op<{&Z{xW%SDMw zC!4aKY@AMYH*iei^NEE*52+`&0TuotnDBsOQ*3_}L_jM)Ms$nSMA5&@EbesI z)6aOR?ex1a*aa08U z-{7&Icg;<1IomMzRq_3ZG`*I!R_2}#!@HDQZ=2#j#&)R`u{LM}Cp}3@vGg(O)#W6d+c)Ty<#g;B0vFSfz0OrPSI^_1 zxx!{WC^ryLKG4B@`yL}S)-c~tQ?BeO@oPYNGr8ll<;p)$#Y@yVf|e2dKK?aBobCqx z1wyovJHGsA4>~pVN%;j6iRTAPjQX$7aw8cDfhw34>Vy6H-O+jcPGcs{IY3Zbiv`JHn7n_^9Y}b7Jh9Qo z}|}|-j&{-xwcuIGskKjrLVubm3W)WWr#|RY^d3dN1pb>62J88q%cacZQ0BF2}vU7 z0&5zPM5GK@7%%DGq%U1ZMijI6ViPV%G#fJIC3F^+QkUnE@{G;y3MC;Av-T&%=xs$; zaeR6I^%N(P$da>Z+;aB}(a=GAYu7aE5%zQ1U&Pbbo6;x7N5wa703nzrUBvX`>tT;dB0i)3<%}|JfZur2<>WQ|GEI8~E3NJULz64U58Ro~RR%GTAnzeVz zVm!PrhL@c`NVDMYISeJMR41Bhed`_I9o)O;^)YqHF{ibw2^r3HdFuIc4s-bX#vsE) zekyFM-JvIo{i{~p4f`se^?Y}@%zBeK6IKOGY%iaCRq>bk?LlDBKalG`5cs}6z?^hz zBEb;)|DeK^$v+Txf(w~?;I~@#~QcCZ`Jo(uFI9 zOMV*t;JGp7oRe{{8;9ch^?iG`Qr~CPEK@@I*1j$Ng6OPVt*}PneYezDP8@?rxmzw0 zJ4MojMz!N?>7>z%g+g}qwqis0V{^(;FBpK*W6cc?Rx`LfiCu0?0|qdZ8zFfJRhn+} z?x=pe00EWKuVQw~>Jn?Ui*mQ;qETTeT!Pc$5|kgMwGJHJNmIhaGJ0gdX!{_&MtvtPdtv4Sy7cz0YE^O5J>x86woIvDX;nIl9!5z+w9I%ijoM< z)(jk|kjn@@(qjF)zdvdS zCyVYW+yl!h1rH7#>9f+X_)TfT8UJim^fc`R(mgDFBL~8{n!>~c!KfHMlCB{qi{Zpp z=hxgrG$ZFg|(4Vpb#P6x$FATxzVSIdnWZGpn zeuO+Fg!#C^vl%G#-lHLr0<8gl?L7DS%9jt3tYN!Z_PUzGIcak9Jc!}B8oID3p zVgE8Rsd|Snq&8d3y}cNG{4oF@#8em!QFuJPcv*eUq5ZhyE5G|E$seECBj2S7jXaA8 z9^se_(l)Q%nNek^cv> z0#Qp`Rk`%uKaO3u>G$P9H2!!Z)Tp{sR?I0`kU=`ok}o1#)>(cVQzm$6(n8bm7|Z2t zvzEW^WHIywWrd`VN!z_50naq?((IhrHP*7|ggHJ#;@ud`N&Z)j+L$0oIecW8yTr}X zW!CNU7hF8q;ekzEvvWSj*?Rw9<2U!8R0I9YQ>!yc`?}Gd+NSc?=x(1aVN{sI;>zRu3T(*NhFTkgLxfPu_v}kRc z=H+2DaPQ|RWw%^(Rrliz30$pcFd${@40qzS!B-Eri--(d{u@YmJJR`ktNQsQ=Q5^a z<|9lyKyZItJZUp!q{yah89Ewlj>Ws=)$^ws=FTy*@ec_lH_u}fPD0)ZHz#!PA(!%${L_I zSL`Udt$n%XACa^+Q(f}*I@v!l)`;L*Y1UnZ$J%3WO^QRxZS5$QdNgQS#80NP3<_-N z8os?|;^`(425eT1ul;3z?~XV~R#?gmHooWRUAGw*#N~b4|l&uw~n-tqK8+&y7E*`7C~|VO~C` zy4Jhl^M8x7uE!W0tgT0Q8^2-GonTDmID9P_T|CWB+~&aoou$PfF2F8POiw$GZ&M!n ze^@)~6XeCept^}YisR2VS`K&MrYh6`s~+u_1?H~njckg(3%{85t)#um1`rog<+T+` z`7$HbTCogudIeX?tfn*IKwynk#Yi&Bvr@a$xa4Wpire5zi@pOuNQu4d=nh)5ig%JU z7>?ArBeq`+>sH+FJlOphKE~vJRXLRqH8toJMWi}LKiR-LYP5_M37nJcSh+8|9`*?{ zO9;?fKM_s3@=5|%o{dLkafZ)vw6bZ}M{J2DU48yGmzv91OTgOhvUUVNXwxhB)`Y9b z%AkxF`Vf516yCvkeAMTM_1Y6vzpa*H@>hHaSp;f6$Ww#`7AP3ZKRW+lK15cnoO4Q$ z$|B)P%Iz?QT>BLDwHZ^{Ik-PkU|B9;8Qv0s$v(*uVwL$AQ zJ*HPvViZ9niVIZ&^1x@;MQLvA;npNEPoS4QffRLaiu9x7v_nVcR8hsAu##(Eg=P44 ze$VoYx2Vz&HKBv!MrXDpiR+`Zb^B)@*pm6?4*Z__k(rC^z*sE>27fZRDvd&2f^I)r ze2nHD_Su;IUbH*BF_!&?@c#MnO#WKyMNOOf1mE-d4H9w+~Yb$@DEcz&^u?k&+C*P5-eGt%>Qt6#~g^| z+`gL8I8N{^<%Qfc9}}lh0QWr2!3@gLHQuy zZP*ai`fbn<#zg@bHq<)ix&W7O^Qbf?cuM;TpqVxNNLmGup~@BnuzCoZ{kR@4vQbRe z>Kt9EZ3O_NeFcEyzZh;4JbN_-A@GF$ zhuglV=Ngs1m^+I~E+P6&ybxFZ?lsr0#oh&bTJjt0?XP;sywO zbO#9la}#cG@O)P3keGc)R~dB%?9E*pZp_p}G&|`)0ikHj8L@rIn8s8hZkhFi!14> zaxDu#jF#FPXe}%l4@@qas9_C%6Q{7Bfe5d_=)glAjOswNWacr#u;JL{>u>ZuIgc{G zw@>Cfg$mLnQaung8^PvaY0{LZP@#$*)7Oq$6>RJA%G%qM>)F0e#@%$rnoVQPHp97p zpe3EtcdIWq0^yy>Nx#lQmp1?0&CYw2L!M?laHZY4Qn_ZVP;@ki-|PH& z6zcC%GE%wZ7eGIGlWJNkeqZJ3P zB4EE{C){y#IeK0bw&Fg}F!TySbyb`S{0zpuUfQP=O6bk0t0vYQQ1~p!quL}d)7#?n zk+kkxjJY!R?=F$T2f}*}{oX#w-%%Vq88n)uEg` zikscpF-K{UgCbX*uOV0iiafI+Jb@v+3L3?F4XFq?xn!tN8`rSM)deLR?aP4P`Wu9# zz7k~witFk5c0#}ybmq+HVR+_8I%y*@;mgIt?XmCiVFXPVRlb}J?H**bW(VTNKe4*J-G^VDDy?FN3 zg|(N?#8glTKGO6)ROEZCvO4_2>YUu-VOBc4#}ryV+5 z{R8PHp42{tt#W3rm_cU~ziXEt_~zG2m9BqU&YUl9U44X?ZF+~DO*q3#g8iyCP&K1MAe$INtaex|@ z^Bb|VL>Q^Aqo;Q3@Y)k)t%dmtf1z1KokKxgv*Q4Ev%Gn>pnB?%PK50S9TMt&j$k7} z`w9N89M>=~W+uH=tZkYUx3%V0WH~!Di?p+*j=Ck8)l?u(nQ)OM_yw8Lm8$Cu&DQ7$ z{m{@TMw4V2+q#?X-Ssj)kZLCV#5(;M4yl?&dwR@o`0wfyofZlHd*=NFtcx@jx%z~w z%5$8kXPg60Kw4&3i*xY-s zk2PEjfa%Kt1;KjepMRU_Z1o#TU!1aux%ydDV)J{ zj6HGnufQ4eKM1-1a0O(#66sU7_BUVnDFynPZ?y)-3$gFcy5vjR-jzsMGm@^KS6n{3 zeuNU2e`fTzO93}cY#iT}{mHG?hI1E7IKw^6-|{Z|T>Yh9w$jXqjIZ;r|6VkcC|;_5 z3jPPOuI~Lkdw3BGNbtwe-l078H&0||btnG@-#ob`c*ww<<_5D}0ux7v>vU70fexC~ zr)&`RZuwMy+8-VAU@7k}&F(4sdF#o+n2#NYj`bztRJg`R)F;v%HEAA<&GatVH+r4> z)b#C@l{C(O0y|I!8+v37qu9)7@>r|&55IEWIx3tXO^bM$i+>=tsEf||n+p@{>G8XD z9htS@O8XX`jm{k|t5~-PsN;N2+!LtxLH=>*TJ`|rGjrTq#p72k=8;a8r=;_T%gg9u z*$SLX0*2YjtZm)ej1HP1xvU?x{;lPg3t&0a+89}7Uwz@%V(q6TiFV5EPAwDfJUboi z?eF_L2t`x7%2z1**Plo)8Jp6+eiN-C^oW(1a@2+82F;Fd)@M+Kl{0XlKXbx@R^wIu zZr=Jx^+-~hGR-VQ#FZYFR~**yiGWB#In(>Xc;8$-SpH9$s)qZT4-wssQTUL(zD@Yl z)z0zId)vCP_?BW{(46!q?Ah>t#$T^xSwkx_-m&S9u^9z6=cFifkW?s&VY8mTi z?4$IO)5Yjm3WUuUd?hgKnnV1#U9q=i?NtF;5dTnFpBBVsNWqBd9AKULquGaCUKQg( zMm=HAkMD}Vy=jP&f1pVu_u^)7Ij_yKr)8ggXM__JYSz9c5qRkJGJJ#B6*?=#HJmY> znf?bZFFZ!Fw|gcIbhyE-C}(5!Da$!gZ`@7D-P+-8S;0gJqi7T`LhunFCAZ76U~GJ} zkejT?a_tv&+Pd`YdiGb0&m&unxu%=qm4)Tb_d}=ihD~L9OJy+9d(zZJnC}m(WWGsH z+n2o<^JDS*Q>OQfQpwVoQ$UC!AR04m^nRP_?CUrWVN5RgsAc!6-jyXSQ0+0Yz3RT>Do<(~ z7W|JO^tUdF;9+{}s{mlArvPP!=C-TUDt2xm|Hm8AYD-DhLk1);n!{gegaM7@9_yC~ zH?Tc|)e=JmwY_mFJCzSn*M^eK%6=((Tw>~;Wxr7xBfYD)L@JKj6UyWI6)GV%?WK`d z)q>7CH+l~`7M*CSbjv7#T0STrmTK`~s&}*A-e19#uq)tY=qR|z!b@8@vw*j8Uln2+rfw0UgNH|k0eO! zaEAR=j>C{K9wlurUoE_aG86Fzf5Pmb1tEc?{4JXXf^GiKs&$q4#=1I7+A7Y|XB$NmMmm*@MRx4J> zNWTQyn3LNL@kbt|OfJ4xyuOIX0#^Z#JHCMOL)D3m(gk>c!|B(1qW%g+mo=BiyP^Rn zS3gaMc+P7B4!E5nfBd%UkT^B@6Qc*#DaLQc@GEX2qMpBdm!Rs)CdU7IyR}gVOSpL+ zE&C6ooyCz9#{k>@E z*U|!WI(W(-CY8u!&m5-tVb7eris$cVEvCu>HTNvqhH&Ib)i-2yL)faWRV?Ylk%h71 zvSXUhHI-T_CP-23ByGPy198RmrNL}d+q{4YnTW3?xUG%Nt!mL0n?ww7CpqX6&V)PCFZb}SWW201Sw1i(n09dFv zf7G2R{!N5#@{7G@@gO$^DekR41*odUT|(uNYV+=Bsoc60<%r9x+=@d%(vc~7^3s>t z7e5e_%`1%9lK!=n>5*qmGu9^!8x~@=~t2L<~t; zp;pT&y(9ph#TA;cW1^m^xYdmKncV2x-)b+&GEbjZGcNmRK+$Lf3pjj>D~d8b3N7L~ zVQMzC%rP%lD#Y3HjF#=_EDqvv)%^qEGIuO~^z)mYlLEv--A;ksOwZKc z>06wdpWg31+XND(D&*AWcg06s+CdzCKgcKHe8`ryok<-FOdETGUgO! z+chx{6ADmNeUGvVrc&$`8+fAOD)zQYwO2m;Bg>AyO>7DASNt3yoI+{ z>ZwL59dl%z>MrC|p0Xy=;7|T1nQ&qYztor+NG%;Af5_{= zH|!$O)3llu933FxbnM;@d)`DX`MkQe&C&J9k~Xj_J{_n_15$@Mo9<=dyJUa4RWP9~ zzl@;l>pXt)Uz5n;1jEF8s%Zuuad}$pa%MM`@d;pc8XM0jXY$q*M0fK@R=H}~?n)w- zbEfVGFOv`Jcwf4(f$BHcJ)Im!;5V6wE$%+Cr}OV-we$q>4Bh;x1V(X)zQ{Jy;~AH5 z7%S)Dybg_#$m2!AV~0s`@M^9l)Y-{W)9|*7R}OV$fUbYBF5r*KqSMHzxIMfU!U|r0 zj^TZnzB$dOS6^uKF18?fc8vFLf~4#3bJ{m|%1ZuRY@CzrIz3q|r?Q~i2k-o5aWG=N zPu60o2CMrcssjC0DW4GOVreej>XI6v4kGU$#2N$t^(QzU8w?RpNH@`@M;?13+@DnRC%tm z9g!CL;kV}mejedi)L%P%F5L2!78K}DdfM+h`|bAaHGYm|>{f`T83E%g>KM_qcCc(1 zc5Z*PY%IC|zd!KT-t8-0*OTi}s=w{CHuvVGV@ls?2>FjRMV&cug}iJrr(~LMV4d-Z za!G4}#3Fn!G~DoXjNiaI7KA?ipNgh){0(WY`fLpqUc7(D{khYua{xCjbre{EeON$o zB}7cm&T;@^uo>MDA65AVwo+(hU8J2HK(MJPusS_tA-trwQ-7&^nw^ZKpiPVK7ez)&C7X7VdsfAWt7du&=HsZX@C6S!&6c z@&gBhV1!N$HwzE#tH}h%V|7b{n3g2C2xNL`2<8jaEEBI$x(^^x@dmh21;J6@QdkQ$ z`DZ(!jvp^2+U@1LP40cma3+GlTEHq4hIDyNkx_BtbH?UUx@xDv!8@*1;%&+xif$p+ zj|_m}rY6UGdp@g-&-eC)yzq82IvrZhBzRtQfyc_l&5x2yIw>HIfy^XR5)c_ zWtyTw#YvX9x^ZxC+QUTf`S@ota^B&6gp#RQLdMmuC&NB2Ky|vte74|L(Y>8-zI-8? zwH5a+)RPzh0_9#;!C)0!kjVC~j2x}>4w#Dg;4N9*>W%Knv7~cgrA}+2h}IY+7@Q-a z!HeeXGi6@02|n_-EKmOA!nEMv<#K-7;Kg$5E7{ZeO3KkVkm}ZH;yjRIMQs)u_sN^a zLgNFy*EG`)fd4a?0{k)A1F=}JzyI=+2^S(eBYJVGeCy9m|3E3RN3kuE;cYe=DDvGT z)kiD|U>cDr z+sM}UD|rvd-v>^fB{ow_?Xx-43f>+=@vD%}u_Q-LkXF(M45lIS>x zU+3RcM{#vdL&P;IT&oJGE?DmMm@kr2OE*?=GBT0P2s0l&eft8lP%TZb&rUnOuQ`Y_ zVho{PC62eqIPU1trjLZEsW;{Oe&zxW?}F*^>d+2StA4to`tfhz?1n!$f;DkAKDTpd z6K0OtX=h*_R~6_tAb4hzX*eZ7w0AF^CB!sC7~0#)(!`nQ*?xOp>rcl99XSzuVG6>x zJeN3AZuI$Qwp9&~-k)P^pU zTVn=c6HTTqYETs$%9-!}TD{yvTt*)7oAUMPL`(XLQ4EPjf1n4fG2#-46)Z|MkfV=$ zJk`zB&|^&WPGbL%H`tuSv9e9iVf_vwr^Gu+dtjwuarD?lZ*aU>Xf^PGN9SX#;`-Yk zp8_D?lsL6Y_Y(O<9M6!K?pK62srp!(Pmr|{Ftra%hO(iOA@m^s+xK4lg&pMYbLMFO z*Y4>$nSnMx{k$82nKxy?^AD+dmCCdAQ%2@e`$s>4=6;KgJrj9LZJLr!T_3^nBCQGx z_^xforgh_aM(1Wo;r}{LW6$pU2l~&Pk-IT0?ab}+_2?aia>JwV;N)0P73g`3gBX#m z;^@;wd`UgDkeoUSE)t#3jyuS>pHp9_tXalFr~np0ZtFaDC>e9**WHgrgv{sKwRX@A~HX*c&INYrCbri!#rpH(F(@&}Vey{P=l2MCO4CwolOUj&HWjU&bnaa}-y?1Jz6W808CzdD?ulA` zZiaXWZAH5J5C6K}@6CGtIZRje_a_KHKiJZqR*P(D`*++R_7FUNmP&>0m`NsKGHM*^I-PPli z2H`8Id^a0!i?9;IcJ7N4E6;Ibbd)^U(qY!j&h)562q*vTPgHLFe#URJWUAPk&z-(1QT+854( zyUMgWn~NptdoaHy86mo7-e#~q+p3FM}2A{-4_7bjH~ zIvw+BR__({B!gmyTic0rqArFEpDHojOtmb3bE?=qqTr4j34ii?wpc?0zGjr#PwhTf zuC7bj+1Wz5E$*Txk3w1oPRa^e$L+F!zO;u*`={a58E?}#VrR3Fm%Y}%R ztS;dka#vFnol{|8fNOGCX{Cu~ zoY+@HDGm6+^k7ztdW_UX{pbKOLNDSMxh|s#Q+StYM9x{eqTJukwL}&nvT%4q1lR) zAR^=5PW*i=T~1cYKyf{#8Qlh~@ZM?eNr1X58>XBy1qCN?8+MH?cg}nd3P4R3MtfP} zh8q1>E5EUUUPw>i9~amDKLAcavA!ydU}K7r6mI9K9jOR<00vJd)}&F84GIPaYH-GR z6eI(X4xYVusTY7a{3)@oLU=VQsKz=~pd5n)3}@fgr9gU*&YFrd%}RhCNIyykVL%;0 zKb<{C8KhC$6!l#GRBAQ~GB5|{Qm#(|m;pTqZ{2#Ns%(}Pdjk=x#d02~4J;+_;|CX0^31vt*oKMHoz#18)SzTeWEpmigq14C6# zI@5qT$UJ+RP`!xynlN@?AIgE-KvfyQqX7W}*S$CZ*#nA401m&cJ;!1Tf`6%zkN4*EnDJ4RB^ykE>yuTfGkauM73OVvE^o&l!zoxsjda+|GVt+>%M= zwsf0yk8XG)raRSLBF8U=85qePm8!4{Y?r~>Jv!IIRjB08(IE!97G{xk+9Ou%! z-{Log^j%5@x3{!ZSLzgF2h@63W2s&|Xj&E-#?U{Navm?$tTa73eQQ~|5L((oWSUZb z=pE{?@{*O)Cai9(&z1iGX#W6&{tvX%P0q0zw9hWfSA{}M?0aXS0A!qwg1&pyHBBQ& zVWxOP!#2qxwhpCu=4n`tuB-P`@D=X9Jxx#JzlyHBQLA3bVWHYa%L1%rj4=1cI5NrK z(0yypbsqtEf5Y%Dx%P(w@@7jrV1P4$z`!}c>PhWiVS~kTLzZpJO}c!~3Q(ryqi38> z+P<@Rj>{#)(l;58Ea$MtIj>^)W$>;IHr5lW#r~5P9_&h^iSeC-*#}>LrB?WB;dYNv zkHvbGoN>n-4=t1%a5e_QzdcJFV?Bj-9wqU0mxO#H{iDg6?pL?4EW4UX8DTu3xnQi9>Hb2h*R)8h;a>;aYTC{2w<0UXh{~h3&~yCpSUT5%E<9zfK8vK>>^^QM zxY#l4v>foG^))TOkJrQA8X7*6dJMM+qT=B72b_WWel^m3C$_h^k~uF4wzFJGICGYA zPIAQk;(I9d73SI$>M35r=F5@klEeHP=q@Dd0|3(5P( zCbebwYj@zyE?ZF^Z*DMeCsCb@PY|gdozJa$hr?&I)jVxKiJHY$%R^O5c$j1f*btzT z)yF5;_32x>zku~G7a~t(WMLOOqp?7_;f~gvj=3X%PeIRm@v~gUH2J4mR*ZM-eJ)Xx zVlyhyr$R1uCiGoTpL{Rjeb+MSx4KW5Zc)TC#7;o zYwYc9x;B4C@RtPP@|-Nbu^x9T!P&KYS-rPc=1TX~C)Dh;X86IP%q%`5_{CdCk1uUw z;k#e6dF{||mCHUl5&<7vabD@+kBeR&k4J*u(@MHg6e^)3RlvXlu4@Ly($in?``O5m zNtjQR;O-bBf)8=@th?_G#o^+wWpRZ#+M$WbJ+a@K`FL>-Z5>?GUW@#W+PodYn5FF9 z7YVM?mcDwndSqV|^z;Tuv|G1QIRvQZ^QDjDeY6M5Uk%(TL-)SYxFfA`dK_{logKB( zki(WAUUBuOT-b#L!;+`cul-=nZGL-vm-!qkg1BZa!c?2{=9lQsmhR4zL7d zZn__rPPK)rd{~x6IPk*#KGZ)xm63O3_+uN8+2|`9Q;tL7PyYatAFljEyOcPO!;uB=y667@tz0*V{9UQc#ecBj8P3pdNjUG? zw6$?I(pgI`G1q`aa~h=V<=bx78O}!)%l@)wDq2;y%0J|N6%P+MN>RJR-~Qg8{{SR% z9xB&0NWXfzOhD&6N_h9_T$SI(-w=3N+2PQke=Pq19m)JVS5@LkJjD4)%QM`|64Yx>>(Ls|!=4gR(+_9 zR40uo2ac&`%huZZmYPoUZB+H{K0 zUR$iu9{6An{{ULMe+TQoW|&4;j>nq)dQnr2kL9dgA7?wCL1`N5l~xW0Mn~mcUx)lk zAPC7J>H!txnjX9!$z5BZ^{#_M*LO@euq0sZ&sy`RM2d4q);|jTME8+L9J3)pqX#wW zkXa$M4HJSfkh^Q<{{VqrAUD%S9#W-F6+zGAUrYEn#WkXdNI71on(52q&v+hIV!0>G zb3QuomA<{Ey|nO>Sq^#U>s}eJXqQ?xp(dSnq-{UCaxuMqezo;=?usWHLj1c=ek;tr zD114OShRIj^5#Rj2^aWJzp<}Z3yH0jV!fjHAH=^^=D!_}9~pzCnqj#<+W24S{Z9y* zCIpSWD!iyMgZS31^_A77#Fkgkl$s{nA`!qoqubuI=8S=ycj;eyN~CL3Q;WKL9|KaH z=~Qu&vs;v9Kzo|6DiNFy&aTLS_8!$NWO#d&swg7 z+^Z^+kVRFQFme|^(yp@e$n8)|81K#n0yE`IjB||DcaPtiyE3lq4nDPBR2e)~BR;n& z$PXmdc~o+7_|?e}VDVMuLz2FgL%xM6l;n)nc~M9wA6mUC0zV3?Ai+F+DeOzVigFPqK1%@4>)pG?9A zHumjSBFP!3VE~bmF`Ak@bm!IfR zF+f~`dJt&nRgj9HoE+dBQzSjQ{VHNPJ^gV|%gXac!e$?fHOM?Up#1q2cNp%uhA;V3*Spg@sE@3cgx=8%r0p8WMa z&3V^^J{@YG6MSE749vFn2pRA0BsdV-sLX&K*#jJQ`qkY}P}M#pc$RHW_A+o5?Ig2(<+^u*$;*NWeSTdTwkC`YtQir72U5mhbid03*n9=c&zY z5r^YX6fULW>#I9Ee=gKYv0FgDDOeBytL!n4&)&F?j6N@G?-AQ+HjJe-xcsfF$P*kE zKY>4`XlWXZT79M0iSHd`7RaFxlevnJdHjEsdHi=58lJG%cMZB(Woch<<8u;A8usuI zN;1CD(5h72>hnnHJUIo{uXz(oyJR>}F@Wvd{d*JsHR)aezggwD)O6Nqmf5_kcPoUF zanWNP)iMcV)Z)DJQ@c7QlOCOK8wQy+ zwB)VL)kfP#x17G=JS*_iOYoMD7K34@y4$DEBNoFsJd(tBCc3R3Mzt3LXyXbnLoNo= zJw5#~T?|@$bHwf=B>cb)gE-GQrHfD7aH2R0>0M1-Dl6O|u;t&JQ=K-()UF-yk#PW9a#d*%PrkHNGvF8O_2aNVL`sP!jFlPY12mxmpmZ~q~gA5w!HfzVdQ1l zau{_V{c7rbH{#hW*<_MZqXYQ3KA8Ui3g*soh+}Cq*5@WqocjrTIlT|HwI7KIspu!m zy4-g6`hJ!35A84Gr}0OIwI2*!y0S7Igb~9Jy2I#d&WrI{cL4$V$2edzUn*-OSLs{A>y(`S%x zf*pvt=vRV2O7GCFnj--n)TG*=#UApZb$y8gNR>*{Sb^>1zC zxL>;>jF5P*y2a9XY+R$!w%4Q7{!_0A)lGF;KULS}dbfpqK+%dbe&pDU?SbLdv~sfPS#r=Gn|vwu~54_K37fZeJA@n_@$4C;77PPeicJ=iu*_5 z?dr5>Htxt6Il(pg-S8t{Hr^_?xN=99MhhOb_m{#wX>VbI;U&)W<|r@FRM3dp%r%JI^@`m|$K z2hLNRsm%G$;{O1GWN1#gr$PJJLGx8c?dkp^yuRWRK5QO(8v2XHULT4Zml7w-BAgT4 zdRNarH_;A*;v20sP>93ti$C2xKf<@jaWbV+SV_M){;T!-&pU{4k(^_Shorwp`hCYQ zEPa2KR*@U1{Oa`4g&eO+tt#iRuc~LtFEWhCIunj+2^Z6k!mi4o0toy~R+=-~f$4Ij zi|8u6s82ZW>sK8{dQ>wmM@n5svnb0M0G++MRcTOz&*@jBKr%Mx+N(;0f`2-+R^>NC z{xt;1cIA6}Rk=`ZKhB_a1Q00bCR3I?lGx`JR#hNl9jg41^$p+ksbD zfAy-osxjKG%7gpWT2$omSFo>kQM=1d#~1XXE}a!vrI(GPNr%0lNIJ*o*KKf*EnYUGiQxaOoj zScnf!y($=oAmg_cGH`huQbtIz2;(FUohsZT3-b}rQ|VQp10ZATR^Z!^Ii+znO%TfD zbu~O-FU&{dQ9v@Fdj3^1fDQ@gy$frHLRj(+KT4Sh1Yl;POndS@YGhH5>r~!^l14jc zj>i=$fz%$f#2dObN(BgN!hmt@Qlj&L>&-@h1^|9FGK`#Jtqgh`<0GX=i;g<;Ng5n+ z*F4mV?mN&3dSr}&Pfc4nLhZasea1 zG!z>~amV=6kqOAheknqbaoZi~a52E^??7}LvmlS@Qez{K2jNJo$;LoF)a|5k-?5`n zja3DC9cl^N9eC!g00MX5_o~+laC7)m2dVSF{1i7=Hh&2;{V87`Y}aGR^$3jL&lU0I zvc3a=PCH`0tp5OlkUWRNo*IN;1F23)&v6*9m8~Wre1&YVBXG@pUVA6?*1bO@eb)}b ze`l{Y{{S+?vUvz`>CI5QeeM{!3Qu2AQtDE$8w#8Q)2?ei_Tg1GD;%#l$9nK}=zSLG zsjNQqc-(GQBRaq1eQLSa60>I5kNLthm5 z*5Y@V2yNk(Laf=&0AJUy<6IE2lHXsqhI9z5{{U%8w|(XSE>bQR_o@1F)rxksl`Tj@L-wiwz+Ool^+UdqM zWy7f?=a0NIUqyT@wfi(MNxX-RyPiPl>0U4UIBSn_j|F&*(A~!nmexRUE?_^zJLe+= zb~W!h1%R_%u>z#A$?u-W@vr8b@~wKf=Ng+Wy!#*6xI8@^E($cMt1BLcnu5GU0y1&; zdm4A142z5eV0U19*DoHf!4d?Jh9`lXWR8Bdv!xfhDqY4%`LH2#@$Fl7)=Iz(fO}+iuF7e&co>?o ziz=m@&6Xo91~LZ~TH?u@1)?X9?$+#9T?iRaKZN5Hlh~3=DmEK|o^e~ccSjs?T(UVk z-8BjMS2*ZBD<=0!Mn(*zWbwy;Uux}cbil3yrtA*G9qTgk$$17p%vUt%o~9of)wMkP zRnc*|F_Jg~@atTTx1mfOwu}t)#d^*5mJ1j1GsjWfRt~G9M=2^!6dYq61#nfNc8{mP zW}L56#C$`e$jHP-!_v4<5a^kW)zEX$mG`fE*K{c4jf%!FK>*{5;k-fNHIT9t7$0|z zwODLau+mANS3?sDvARBP@wbQ5E{O&X(}Ihf`&XLymrAzS6pxrMKtEAmOnA4!+rd)^ z+H-;jam9I0k9;5HqXvu=8P6Yd_57>!Y?n8LxmC7?W9#*wHD^s+VDad{f>=TX+ zR9VbK5hre#uCK(}L0!@+WP#axR}-sw(URv1SBwssuhFoxRpO7xGi)t<1|g-PpnO9- zBLd_AI3GU)>FHRy_Om7YnU-Dc{?YB}RVBKSiBfnzwMuC>5(uwOjusG=?WyD9b1Y1# zdpSJ{{vYu){s{4fuZZF#Mv`o~PTDf;Wc}slC~R}YPCH(;cmS4 zy2M4Dlmni63j4G6YVm}3)^^D&;jl7u+P^z|DSIcM8!_4m0juoq**98w7ATHi1$hTJ ztg%*&NK}sJpE`G;C`kKf!vl8N6^T{@99Km4$#Dk4p82dV0QpxMQb>4g3@9Bdrb8OT zyk~>!UtNTzr%5-|_-sqHMwdg3@xF~JTYT~4jF{XC`QzhU5uH-j=@ez+Wnu>>2Q~E% zi*F&8!J{M+qafGHzZJC+d*Uay3<}$VqaLJ_T+qX%oKtY~Z|)}#e)QB*1o)3D0MZoFWi(Cql$AQm&m0D=~bNJQi6rSC^D!h^PV0oc2 zsaX^zP!8TcxTqvtay@!g>5$~{)c2~gr%~xw&~DZ$$h>5JRa#UBfI1$PZN>r3Lm*zB zlxinySfMgwhEh4I@~IgFRq2tj$p)&*hbNAeNtx`*PMvZ1Re4uAtJ0z8zdn^#Ky&?R ztwvIra5J8@T1C!qIP|NtrgA&urB#tmbJy0IcSNPZ&0B~l z#~I@Sq>iM~07gfC)jA9upXX6VJC5e2j~K~3inV(Tl`;oT)j9wNPW22)p8dO3gdFk3 zCvr!}jompFD)QXp@~F`O0RD9%s5}sJifI%+G0sTnDr5&eDmceDIs9s57(5Q1m1^Q7 zKsw^2Pp9ckOad|PMM$6?e@bg|kgB7grx_)PI<>8){W6XxCDYb{&e*iInMy}CXKv;RMVACKpvfF7$TnC>EL8!433zf1;;ov z;0gPr@kddKfOsdTdUni?M>K>0-F^9|g(t5E>rUDUjlsbypU$h?i~<#VcJEf(Dhb6^ zx&xqJ#+W1KKlmu+xNik`cIN}+)n;6i$jo2;YWX7F%CXu;K+bme_ph&i;G=I6d^ga+ z`^Q>szxU~@<6${R3+g$qiO*O2Y@es(kG$dSa543NnKj+h$?`W(YR|o!<>h|wsi(cj z3dg>A$6BR%DGEVugAB*Lc&S~VN2Acl)*Q9A9JgqjxKnGHC2jfH( zxt+JU%T^IjU5^y;_lEUf33%FT8_18?Z{lsN7aJcr?bLJmRu_sOX<&-b#L>@YfZMnq zc&`L|@%kG28^#vi2-YsHd^@e*!1wl7PM0wU%#ci^sa$mg6(b&?*PQs1!U?NN$!ToK z5`e2Cj4{VTE2ZW!qiD}Ybme(2BOO}Q;mnr*0Ojg=j2s18n^JiofVX58T0cu_lfFir-XhV$Dt_FW$*OzN2Yu{)io&f8yoFDU^OcTGFYe>^OTRC9RC2c2OsSL zUsd=+#8#dy@b#{-Yln{FF#I+Sc*w!%M}Ndu#$FxOWwi?XnPrW#9Cq~SUq*hx&;TGOMP zOr^2qr~?Ig_Uq|gev`Hs!8kmV$m)7xu(az~=2eu*^CnL{J-)Tj=};}qA~O8(fIEBF z&r!X%IPvu&(bRZ$-KGVA$=mtX^}V@f0hgR|bH!u$V>ZeZoP(a8wbR&$nTF;Zo(+2R zVw_Kg$5e5u`w0b-vYxbY6-dS}=3YRF0y#O=m@qa~F&rFmsHG;H^gMQ|vO_$IS7c z6ZmxsIRl*IZ+i1T8Te`=6Nig(5J%1b0P3%Q@dk#dj7pL**BxumyjkJE5t=?R$sOrn z@iW6!O6S>7uL`hC`B%r@82b}EmeFk;&t~)=TJnz-X)kRtP={vTgSV}HJ@GHX%Pca; zke%Oqcc-Oze~mOthBA^@axv&J&tLJc*Z6-kRbZ~qoZ?KnIIKIUmZy;2M0;aC+juL!(hjH$Nc7VWgzjV=Cr7taz)R5B15sALETT z#8&Q9Lvo@_9k32fDmp2lEZc-yKz`S8A= znwFOp%uX0IVDDHav`00`YAhsNW7eK@av^d*uXdABAk+_`W!h z+a$b^!Bby0{2%z=ZK~-43!8wGD&URZd)~S|W8zJuKuGsEZ1Q*ZuWFWO%Rwd3_*&Ui zm3PdKNby&QnRMx8SpnnLzHRXZ%UF z=kTi1C(Y@a_tQRUYE+qe=Bvt>KAd-}k|4$h=T+nb7&)i7D-`BJIXvR4$e?uf=B`Y< zanH3^l@FjiQdTQMo34L9N`^(vT9Hmq6$Hp|bLeRSN@O6M@l~Zm&LKVc$Q^1#0geC%>*-A$0I4Gc zXOmQwifoYvSa;*CN`sO8DUp%}NU2a`ADOBGL_86J`BTPn59leX2mb(Cq*Vux%Bc@z zJqAx0Bl%Q`jAK0enqpva{!L7n-Hx8L_9Su+pIVi9JRjDX7|E#=dXC)jNMn!?xEbQ4 zUKkPAwKYJ-4Lv}>037CmknOx=cBh~KXQ0k00PaT=^}!u6>BS5HFZXyprlbj;eg6PT zOc9Lz4k|=kADB=uP!#Y-9)g5Y*kDFGQi1a46yP#W27a`~eFm!JQ-C?iBfnZuzTNoE zE-}Kb2v@kq7z7jBjCHElXM_D})8H>BHA4PWMPl!T1Co1snhI92@-O@pqs7okd*ROn z!7g4Dmhx~rZo)6}YWY>9Dn`iw>MOtfsD32>0K&}p&8>Kj8B5y7a&4?eas)B_qaRWU z{Ar`(i3zTEmuhzICwb1qBqHLw8&Z!p7=cgF1LtVL&Sr5&Ced}{yyhI-(9^(V) zT;hkkxcNsJ$4utBp$=hP72>mYn|mS3oQ^uz*dOpqUx9OK{v_1?Eo%BoHk+i)w@mZm z&zXG7lFOg&CpqQ_rByez5!y_&cQh z7x-JGd^plJvg!7~T}%fv+&9f6hw8-s09U<~;Zv#3`hI86aTYc-aH^8{rT8wte&2cd zgZo_k2eSB0`%L(u{{XW5wY}6D?#e=#4+O`|1bY0%hv8m#b8BoD?)%`f>YZEfK6!#S(}wU z!xd6^Ha_&h9kOfBr!(~26kO+aT(N0W6GTTHKplOtUY+pMUA)uoBaciaCq_$~W&@Kv ze1-o2fiC6$0D)JQTS&+Q9G}9w9|Ydq!+i?dvkBv6mNKJ}j8~VL(p4zCpILxj!fE$D z+3=31W#U~b(_GW!V{dnElB0FNE8qE7OQx@pCzQZ02Vd)6Yx_NFR^QooJ{eL1KvwR+ z7US&m4ckZivU!W`fnKQu3}Z4Aoy*7duY!aub&ao66kbqig< zjhP_!;<&0K=DWlrnjX_ zFmlS@LtcGYz0yA4EyOD%+2UR^(E)|y+6ZIG3)EMGd`j@cMBcpwxW1>z-YC##hHp6` zU_ZaNr~d$0*EcSeD1EZpw&Hl=z30UL01R)$ud>;I2Rm1h`u6s&eLfmbJf2(WtV!gP zAM&r)Fq!2KWS!4~$8hCo;vXz-k0Ux0OSkuXPpCDarg$d)?qyW9cFE%v?3x$BYwP(G z!(zKh`L`xFVD!y;ufy-zvI~tu9rmDaAdK;W-~9X6CO?cYcsM)A+K&fPZ<@2QU-kv~ zM!I*!D@)yDNlEQq6&Fy=9#N6WQaSeTUtxIL_CC0_l1u*phnMQ{=Wx^R-weLW{RsN= z?^J#Qd?~lkFXX*jKtFh?86zAZ{{S4<($@CMVN;Guj(-ZC3B=Ljhl={j*~P{6S4};B zOHGf#{9(u9I7>CcSIZ=llw}#k>ls^>tFHRJRiByhb=QLReGc|bCs)&Cx44P0@k%hu zTK*pJ^ouBF1w(SAdiqz?-X{2e;cpk99wE^pxF|4^5LMKA1{~E5BjE>tG)YAEdIFYT zxMq=`AA#b&q435gH7yCJA3gs7$o%epB4Ddw)0HVkeNwYm@@?MUtM54PhISq&TXi~h zfn^*Cl%eb051RmfG8<}lblzzgUE1L zUwTWLUVD6(`JWY;@lIinlTr60*>CfIpiBR|Tk$bkEE(v(4H%2O^m^{Vm=oPR30D&XR)NQbHC=~@)ZuDB!*T87~caz9$N zB9W3fs3lecfo`l)mNE%DfBkh*WNdXg&!u0OF+DNs%~X_R91fJx60}NFp~f-S-m1u; z@s9O&Va_@HYP8GSJpC%}E8M3lka3g6SD83FP7ivyFv!Q{Ris>;{*=(3sQMB$#~js& z)L>($wL*j2x2;bQ92UvsR&3{Gh_SQ+M@-eIh6g6A#125u=T@RndXDumS0_SL0|&1o zny`Q#PvKA^&O{=nry8)L;^OcB$hS;-ZXTV1dV_OrYQodO)`v1xpg` zZa*500M1DLYE)GUFnZHKNPu+bH8QCj{{Z#sGz4-#l}#Q2;8g(i7~?e}j!4BZ2XFrX zT}XqTpGta-k|Ke@BBhKI)7F@sdv&Q};{{3U(wK*;05S*Dnvq8t8K$5lejTam4+M^; zhhg;`K9wRSKAzOjIr^Rnr^Y*H{{XE)NPaTB9zE&c7C6sgnqu;KUUO1lgVLDCC?s*o z9ewIW!t~EH#n147PATDXaKn+@cBBk8c4ODII1HW2PCHPe7*ztC0qUczGFX6gIQ%KY z)Gq>nrEpPrJ+niS7y8k-Ep{T5>>Ls94S8?vQ}Gl26}Q1HZ(f3Jw=&!PlE{P4nDPD*Umt(LOnx9QnV|ePx0ryT@9z{Iq@9t2{{W8~ z2tBWN^3?e-pOzIr-h5-( za%R;=R0VyV!BoSutw+<)Mkzq1=@R-@zJi?r>tPa8$y$Yfqs4-#D9`tquM zHy-u&3R+=4?Kei!EcDAbbnQOYI3Tu(VuBdP7Bo?SpmqQND@W}6hU{X#s)ZQPq@a(^ zak#1DF%GQy?c};6$3JYp1fLmx&YmT(f*sS^S}pak#(sEMKl06fVC%XpQxiHbBkvF8 zU$Q#Zm1n6~&!*nOB!c1=ifH{&l&cTOn*6o>q5co*{{RR+BI@1@xsANbDOyW6$IEqS z$0+013&HmWzc=Ij1xHerE(@nC{MX;F++4rE>!NND#gK3@fm_y(JQ_Zy z53Ex@nD`Ika}4@UpwfY|@=Z4Fh~UR4GDLoX)rb5FzKGLrT_O<8%PSml)6%{;_&}(wj zOKWfG{{X=G8s@lvYf2R@<@&GJ?mFv9%1TtX1EC{>Tl!_wjhh%_8RM;T7WW2BNUhNF z3w7;X4v{k!3IgLDD5W#xv9x{Ds<66kz@sTAjy-)VR@z|k2G2uW{e^4o5g0J!>lV)rM6`!RHvwb5w#otTlF?=NYSM%ImvfBpyv*YMNWR zkb?w+fJgcCuJ2N?lZJDUcp|bc^p+!-IQ6b6(|a@NaG1_iwLH&O(YGrC23c|r+U2#s z3Kxxw#H=yYj+N`T+A!O+z(~hK>seR+9*M!1U<3|0=D4LsQFn>-_E z2Tyw5Xz+22SM9zQ;hZChsck*Q{{W>w@;{QiW5<1Jcvv^DzW)I9mHuUCgl*(^$*9^P z>GaK6V0-td*+=1Du2}p%txBawJa*|#bm|3IWWeNh?@>skcA;(}tg3O3T82T-PW5ep zBZ1nhy7S){qFVt~)RXJ!P)LM~00ml+d-SMgLP;LAm@Nu(CP^e!S5h;@UY#?+9R*gA zc*X@%D&`8rCO0NatCULMF*++3QS0+Bz?vOR+c`bjMd2yW-m6N70OPe?l}{)2#a5L8$s?sw zdKOcWa>NeR42q|MYSXSVO+e~%oKJ!@z_&F zawtr^=ku!4N68=`Y*pFQ)KzIf@1Mr03&^J=Y)?)qw99}>kF8#nS0o;L)mhg(d(%T_ zzr&N2#aV}j1G(#(f-rjIo@&HjcwqGOtj;#|EJD0tYRp+5!&TuMhDJJP=~iRTan^*a z1kr=Wc?YLzu^s@%Ir>x)oD=Kxsn7v~kELDGLMDuJ&s=)c!FUHbsFg~NM+T-+dUv62 zHMr>U`Bch2YKd}k0qxLK$_@a)s<;v-EDkz))XBzr)KTD!;-*eV;Z1BY=s6tJiL`J# zp17tcClxC5!R^+cLG>hz9P$NAAIr)7sx%k_6*3LOk(y#8KylMF^aGG-gQjXl108v! zHL&#=;EpNaXDmn3nw$)S`P0xA8;I&D++)x<9G-h|)}96r^)!pvfN*+Kutyo9><1{% zUODuqFFk1oAoG*;r2&slK8A!QIYG{FG20aJk&M%LJm#JN1OEW6)`3}qfTPpuX|K6P z8z%!C_ov|gA4-m5ak-D-K+1P)F|>E-#eQpk*uFg;IQaMC4MG`1!)iWp9=g(@e{=wUx0ioryGm=*+PWq0X&vt*;H~*pf&ob z@CV?ZhyDkAI7CNXvXa%dBZo$u5_v zMwu(dS|=aGjgFmN30^VJTEOu~l$u53%)wD@WZc={4TmPVv3PnoygaE^SBqNT z`un>bxqdejm*XLb!^y^RcTIm=J(}vYXX3YrNYk$6fzHyBupD$Cky$IPM;q)d!8j-0 zwtRmWn^?M<9#!t7W&Z$oalx)GYfI@T20Z6Hb6q~EKMW)!LS>H>)Y_GTWDGYSGkmOz$ni{n%jML!$-8+ESMy2PBVu0sI3_#%MEUQ zwogK}Z+=TohhLz0o(~RQ+g(R6j#wrPr+1;Rariy)2HGhv{4n#b$Zi($!{+}0mwEEw z5BFPo{uS~Xc#8W{z4Ot6#=P|V)##oF@y*7St7&?$f4jQM<2+(EJCNhq!T$ihtLO84 znp2~7@muj)uho3ddQpnKH~m=qQ^UR>j%b-9al>VS9e>B`U6zG-B#lCmykoU|_3+on z>pcELNr5WhWb{32*nAn{1$J1&00RMx{{Wm<#?h%dbvY_%&zjA0`$ftq^u0bo_ZdOY zL*BJ5T~XC`W1cX2iowyZ1hDX%hkD(%c!ADJXSg-(Qjz)oDh@Jfqe=+@eW#P(ikuKv z1QE%qwxJn854dCRcB@FMvpLRvE2b>+CX!=XACLt+dY&r1!~m;pJx`}RTIw0M&42^SP;?@K{YcWP&lvXZUxK! zrNhvZTGVcD=c4=)XY$X88IRZal5tN;NkMw8U;a$m`4Bqujz{BBu*XwY2+Ew)F1Y9U zSJ*U_ZWi7^Wk6N!PfyO#;YTT>N03CR$^2dhcao;`a z6_D1YIZ%#2r9mR#a%$A7SAYoPH4KV-55}ue+o@7TALLbOP-i&&YU8Or4M8HD=N#jw zts;stsm=)e>IVlO%bK?;k=wsof>h7{0IGpsQmm>u`E#1BGMwYo@x@(mc{t*$N`Q62 z^q~!1I~1iI&P`XDPrfSTs=VzVO06Pu$n91&sw&96^HrrB9xB{}o_OM*nGW0$^c1>= zi5b%=!RhZ+q+Ikod)4WYhDJJ7Nf#Xt{{XJ75LI;xl?G40Y}C=OIQ~@{lBWcB&OK^K$l&1g zplFdm$N*sa)6O$8hP&v;eSGfNG!9e~f4;y@Sy3ws}1eTs3fo!6| z0wjugLnV!u}uAygj2@Xc{%D!)aq| zkXpi{0V7okqw)f`t>WAKJma@&g31H4E9qB)0072)Yw0|X&s%NW0LaMW&}Ni@)AgkX zk}*NZ8PDV>u)39Q)a}Q7SA+iEKNjENN5H%DVJ6G%Wxl~`+2uno?-+l;c>HVLuE!V$ zzjI$A{{X>Od_SmOd@RsBNo>vbdmUxsxLoiIvHYw@`~-^e^ZM1W`88?N-7n8Z{^RMm zI}3-$aXuD>e}T#QnFU7U>fC(^lXV&!beOn}{nYpB&2h?}-fJ?oa# z#A>43XPKY8`N+n48vIiUti9v=!-w!xrkzRbv_?DM-AH#P-diNF#$%vE_U);SU=V$SB^sOmjE>h_UgEIQOMx{yq(oc(Kx ztm5O%^DwO0rwnYBtkTa;3>i+1$rc1jVP z99i^#gf;ZJjYx6NAdGab$4;D;P$m38&3KQ1bw{=lH<-#cjtS~Jmid0q>-FwrYg*A3UavgB=-8%3t5^@8@@RAtI4})1h3OL zCcQ}Le050KlQcjb=vbd~oKVV2ZQqhQ61{2B{{XApPf?8fQ;*7^mch?a-|(#tYmo>f z#?nU|ayry9+YqPZ1a!CKAka5 zQ$l#zcQfoX*u~0iLGopocjKq)R&LNL>=`7SFVxkjZPp_4d3z2*uckZxwG?P49G#0l z)BpR%=a3;eMLCm0nB){~m_y~5v!Ub^%Be6z%sG{4VT8yrWHT(~7(xzn$RWp^51Sat zan5{x@9*y)*kg}v@4a64bzj%>`kpARuJ%Wy?IdBPZQ)UT`>hwxK3F>6bQ@?VOWb<5 z)<&_B|q(*~r{yaVjMr_?qKuD&XVx8d_;{lF z@T_U=D(z7K9WbJ@hw{4WZdfW~$BVsxTCz{4QZ4It?Xz)@28#7(GmnOAo`>;fb1E93 zUykQSY1(979u`?FNHcftvVHbXs=!u{zZEBGVZc;wc+*1^hjZtHu0+V73#Rd6-O{{_ z@#E4vgaCynsTMs&Z0jd-iuNm3>6$>@RIx1h==9+TbBE}`(HI_zLoWP(CuH-?nw^wGHn1lzIW9UL)V3;%$0l`+T$JfI zB$$;*)>17@K71Pj2W0F1Cacln{6W_ou8mMSfA za9w;MW1zM%^0yn=*(pjOEd(BQG%5fP=DppWplfppM4d|U0JPiHB8!kuG9*4c7+kEH zKh}=L(9VLCal6#Xk8ceewx|hNipVV2K`h;X5UO7T(E}67S(R*c-ojfanlI>#m4!GY zQ4_GbK%XYvKU4ztGJ`g;n7LqUyPm1|d~E7bf-5_e+-#3!nVOrnU>Jvg-N^D^F%*3% z9uw2LcQrfz$oisd#q@Hn9$X(pVfBtyPs}OR8_>}hymD(NTL3A>v9)g47@LY2oPkP9 zH;DlsyE0tv?Lh~5P4tyBhia0Lx5_zFtqzKw=A~3VJ&~o?ykidEqK$x~52HO_qAlQP zmbdAq|83>tu^l8VR~&Q3@7MFWV|4F^!?#_Uh9dM?e7nA|I$*;%NVRVouWl%}vv}XQ zZ+GF^PZI30tI zMy7fI(5AJS!8=!Ve7!92LvYG5;(H>=EJ@hu7M)+d=vcE$?=Td2Io{?*UF$`>&8hw*-m zO>sjt?32c#R zs(9PnvLj<}3uBT|$x2O`9kWiW*tg^D$m+*65yU%nZd z^z&?7oiOolPep|7j}}$yzZ&X7t;U&Q>x0>LZ(rvaoBg}HVc>3+9R!!2za#soY%SPR zEr0Y`r&3a5!d!)E*c1B;75Go-`g~wXx77bYV?@3Kui~|_T*(XzmEU|s5j7Wu&#ONa zOAe5j7=S@R8I#ZVyrjVoBR^dcO)@@kaJMmW`!IUr`>}-3533ShnX0@}siAPSy<;|| zXb@jt(3#NvCpip|WDe~#%gVFyJ2F|0gbUdWXzhcndcUWO3Mz`f?_op_{{yYSwblbI z6JE`wYTf0x4;r@i*>L{zOu&6&l8?SHH8yv~$G+c%Z|U_k5<53kM-WWn>E!tj^!PVj zG;(j}(7$o4BN4y&oD$`6pIhHwVZb4*9GzTRWq~^q(GE4286@3wTv>0-4_kMYi z^-)4aNYG<#yY}5Tky&T@p9V4{w-U=_^*&EU({;^{3YznUJpOymG+^YPCeu5Hqp`H6 z_2M25@jsXOkAHQQXqP)UNLD@Oy#i3FE`7fhs+7nlv`cQfmoVsYy)mX`KviMlBlflo z0BgJ?j&ti|?w5PS7+_r9ljN&!7BXOt4!0C;^H+VWI$I*wP5tX71^LVkwt>?6gwjXy zJOR&?#cPun3@JtfWBEg_b79xY6FJ$zctVEa>&5NEdG;!x<*jD@3d6N!>0M&M{9lE! zgOs;>Zz*SY%{xg0$VipdMis}BvU1)XZvZIKEv!RH>imd}Fc>N`WR|YJE#{kcymhko zi!nYo?0Do_kqB@m$MXaUmr4VG?Uy$L6kNp%!J=um=9lx#UX^jhw4AJ7HG^qd0qxUZ z1}KSaVf_7h*|*fzQ^;i}mOhi0ALXEMl2e+KXD{`yfi}?w|Z1 zuw;b_)wb9=o8d4aW@JSBinCP_5TFA*Y%eHoSUX9b$R_W`H?92Sv6QFEsStJH5=0O`p0rQ4XqcUQ_;Q}6>coTFVy)BShB z{g4J+KNx*okoU0_op(7zq<#?y?`>`L*=9c2NF337t0Bj8)iR|$GKe7tV^jYwt6V%t ztJ)1>oXNMGY9r;uB7Dy2op7`BSm`vqS%i103fk8iYsS(KIN>c&UD|IQu+L;+rC-@R z7$a{SvF^b;#RRtroU|5^Lt5!pvZ5{^HS@#3*}JN#u=qtPpc%yRw=e+<;X!3}#8xy% zF%(k?0+5;{<7$3>(pm!HvLDsfl|(GIl#0o1+r(RV6ljiE(%VT(07xuUuL#Z19moC` zIEdNky=6M}pZR+~S}~9o$Ek{nuq@}oAvO%~qhTJ-XRPQTQuPhnbg4HmQj2Tn>g$f0&bmpGH6(4K?_13KY_@4 zNPkH*-zIi%OoB<{&0JcLH7AAU_YF>SJu56!zNa{?7#-s9z}vGc&aC0rwnSgw--}4P zQ}0iz-0l*^6T2@sgS=_@Al;6=tg8!-+pv*)>YQQ1Ljf=-W4mn0I!`}0wKUw z+f92u1?`SJ>mQ$74A?)D%s_6`KnpETqtuU9yZl+4e|*0KB>r?)l^i2~W~f_H?mk?+ zUzqLD(0V@UkI&lLm2C{l`N6q=5<7pN&R&1^&)$Ztod#vwR$1?3hW3Z@)WepyOAR0+ zmob=AnQq}Ib!2CxWvBWeBKMy4@0(&Dq>MU3Hr9($@+RJNemt+OnuwWjYf`h8T#C<|u0};IL9_fW@He!$7V%r?GOsc(n?_K6}hxzDd3=izXU)kES zApscRH?4Q&B}Lzzv@A!%M%UG+dg{+-)6<`>VcQ-BPG&uf;FyJ-`@3zZKV-v z#x^&=Kqy4=%;wz7k}gp&_c!e_jSW-`Of9-HV(K1_^G7)n^` zZV6C?d!J_{Lr~ZOz#1e_llZI9_y4OZmqXjU8pu)9Dk4U)q%#M3oGbuUh|AM#1f+YV4Ias>60-B;3Iq~^Mu zA6T%(x*?N`%`Fph#IDVUzKHPrlD-sXbo=oyE4ZK`=J5sS9Yac+260Efp;=rq_VWN6Ak`7mG> z#&;$ubcUFM8aZ47FP}dko=F7&?B21c3x9eK}J8RXn2e!>#+g{8RoIx;aMPex<=DdXa_UQ?ik%wvOie-uz5P=bdYRpQuixQNTiHHs`OSPa$mzpJ2G(>;^pd z`uizTA$`g^Ez6$Nu}>r`j%CYlwa!bEZ#*UKk{{KJo}v@(^!!tG)zN0KFbuts^-s;t z1?^gZ?6~JXVEjslLt0hb1TXVf8}dpI_{Ob>eO)+7p?MM1AflVMP|pj&MWxy-iNvni z7BQj{p6gAcZC&*Ybf7I-G$$J3${6k?9^RC zfQ%^FW=XeOn!ohowybe9CKiaRCu-$*@4g3NBA}(H>t^Qszyu*(u#UyS&Z=F7^3qBf zr(px=uk7F+R90U@_P8`gDC&wese4-8tx1{X71h8VFzL5I7(tijKJ{qHX*+j`1n1g__{w;-1jXi5^*1+0HYo zW_7{1eljhLv8{l2Uye!i*5g|{c>KPw3C^T$Bj#6d!{KC>b}h6Mx$)c^da!1N>+Xh! zS%@2Unt_E7vC&K_{dAuU>ii9Eli(pG>^guL>~F>wsS0u5#|@{pwg^M?j++(WI2o)` ztBX>usqu?o=@B*rGFz4mc&9c){m^cb4%w(lfG-)7hkhFZ6>cik6a9ha(q%(~*wG`e zmD20OwZ9U-UErWSvS!~Rs+@z+^*idj76&9e2Aq&%xIo4R|fdeoJF`mZFB z_SfQ5DFQQoySqIs{!?UGRIBJyO5FTFeDN7e_+2jZAER`{uVwz1Pj;NI0Ai}RbYKw1O)oLP?>D`4HDyOV)m~}Km z?E<170gg>pI-wc-*@TJC->t2J+gd(an|?3<(Yy+~bLK6VIud^_$2bHRRva9g)}_pnTW>0UskFR!G0g>t49#=5 z^>SHu7&(WbBu}4)<*i(1e>9vX;`^p~1s$AlWZcuR-Z}DQ8MIGze4OD|SjBJ1g$Q(M zw%=4ZxF@1eDU+ea@r}LZZ|hQ01ze7}`7BZMDUM2M1-vbYZ97yIlO!pxOd5qWHDZcE37cf7kwlPW<2_q#n?z z(n6-*iL^4)at(W~G0w%&5fLotUkeli(_X?_+abS2V{KTztH7JOf;V4%0SW6Bh=m1J z%=s|qvUYFLBzKz&&1vw|ySd6Sz?dSD^*yEC?3X`GD0a5-F=_9`uz2{4r+t-1>P=)M8zPyna z4Eiw90ZOD|FaA!Fs=bQUb)Lr&IB;E&XRM;tGBjfX^86jhkUb58lyN5xy0<_@jKW0Srd%j@7JtHl*xZgt^Tk~ z;$tX(!ejH}9Eh%Eue1i}dZu95gMmNytU5BrE$h^;t&vy#{!$(*4_<15bwPsnCP95MZ{qY*P` z571Z}zAOxpc0w6S74WU<;<7LHnb}DsnR%=6Q>kNFBRL7%9=^&-2`{&mk^h0l@xSTe z=k&y%t0es>859)rhaMrZ7KVidgzE*JIyfPrK>Ub(8b$b2!&7; zx_d#G#GDm-jzPQ_FGI!UKMtrtfv+;4>_}e5H@WpkgPn-9uxyVe+ceZ8^UT|hl3>a2p8lydBLATo8q@FM^$&8}qg`1YX9$LgA5 zStU#wPSR@T+cSd7b(Mhy3!^R)t#sneUEZr~%BaIpSe&(8i8Th8Yr(@ipKjX*!_$=# z{mqBU+M)AV<(G5@7P7u_Smu&r?>7i_yw`ams~JpCV$Zg@SFh^*ThX$PHqVL_{9VbN zJdKIubrmyMN_eiiEc|u0L~p>C!~W^-JH6vVh!r|M?L_Z$qBp75q`FNG-41)fN(gHE zqE(42cpd`XX_W*5+(QIh91-s~R%Ak!*ujnLN&va4TwwPS){su$7v8jkk^7dYa-k|)?@r-|m6?fsxN5qq$MKgm$S5b*=nCMIa?@10q|79ErL zs=y((P1HNhNQ^@35I5opS}dpov4@hGK7sSvcX7)gz$KtFAbk4e#vx#<_88!8N#Jk( zBHRMsOO7gzd}yCH2e`62BCAfk2cs4w4}6H8x0E~A4C?^3JoSI0{YhG~YVpo(<>a+C zj$2S-PXGLL>h`I5hc#f4kVhCgc5b zpCT$&C@1Dc8ElJU=FR9u-@uWZpO{|Du9pAKyX{0MoqF@~!hW=-klp#k2Rt<+5?Cg9 zN7((KyL}QrNmk(*+PAdlG2;NTyFUT}_;fmq_*&iUI0F`aIX+ zUhOfhYqm%+0MApcIt5NLdsl{RUCT=FVy%GYyIq%LWj77UTMt?!f@crZ$P1ThKXu^D zD<1qynaNK2(q6{=o}4@t*ZYqJs3F~Yu;?83o%i7Sap#$M>Z!;t?PsjD14!8gadTTY z(&z4VXRb97tu2l>jh4^I%@4*k-4E0>3JZ#a)3HM-!_R* z`z0A-^GZ==BX?PqJjbmiOs!F#UOP%CHMsO3rgsm7P95f5-J8AgwYvJLfklJi`rxG$ zJ8fjxcveW;{S1;o{>bA5!>R+m(^oT{EF=*(4(q8wyB##%$|i!4*03Knjyk@5PCxKN z+{9Ux!CU78pY?HK(}-e}e-n9x3r>R5;A>rc8eC19+OiP>C^#Z;0cNa?OdB4@dyD^8-d zb+v{=SE{aSh<+H$F#EN>zF>KkhkZV5l$Oc$!nQJXphuS|ZF~5s-<~#-0nvYP6FJqE z5iBV?Nhe+6SFTL9uK%!9^H>DfOqo^X}x3mh&1@ZTJ6;Kd4 ztiBtzk4fiFf6Ym3{$y#Thyubk-$lq}ZuZOw$wmsNh zO~)#G{?A^@hO;iPYmKt}q9#Y9gr{uWqP=YXYAHZU)2y^#5;wC=PDJlk zy#JwOkf!;_Yc&Ux8P2}|OMNnX`STODld(66a42qZ^YZhAcOsXn_4=cNi~S=atuFYM z%04X$UQWn`A}AQt;Aogk??>gMy{mHMjM<-Z&T(hL2J+su=`)o~#WH*+M&&*V%<}aY z{1zP_njhb6h+C~LW@JfLbJ^8g)}jT>GL!j0sKK$yLeoH~4|$7w*7RuYFzxA$w^qNI zYPU@PXdM31KRi9>kYv7P0j=4Bm&G;bJxV$~SNf9+^VE6}Wjk+Las@RYy6^zvGqB;2 zVRun&&-s8Ys;kH^Jj^9C$!yrSiQeIhdzi1aiF14al_QDwz}ez!67(il$Fe?rU*8No zV*4{L1cc)g8Y-@rOY0IlU9guKNotcmh;okaDP1UP4l@e>V7}wC36vjKj#f(oWids$ zEDJvaIwx#}11>yOL&qH2DFDw2yIS7j1H#n#N3Xg+vROWeg-IjN4i#g?C0#TxD!y=w4(4ZGAs90FJVF_gn+-SvTf;1CH1!Jfr`*iu9 zAxz+(f=pdLxyiC-?KTU;xY{+Vic65XZkXuHTl2xHkKVXsqw?&DV#^}aR%taC|MhHN zkF)?A6U9h?4aU1xjE~w>X zsUe84t*}f*eA0OlYw{|L%_R}+u+QtQt%E+c2?1$}H20U0vctdE@xDuRZND$(M%*DN zRvtH1juCDd+zR3K=1R?WON6Al{Ow*i{FbOP0-#ht22_i7T{zI1P?D4{kyNgvAbzg} ztW81unrCOB_UZ9&Y*=3z5If^5=N7b2X-CcF^?Wi@L?36p1kK~LZ(EUmkar6d@5J}3 z41b3pVC3wCx1oGAJZCOBp&(V-v3$JAxQ-7Ja%!sI7`zgOcpWC%pVMApoCy`R4_F?~ z9=eXo^=cQ%x3H2labuw2FXQ-@g+}~eN{ST4Vn!0c{O~P9cYF+H6I^Wk{(quZJU=RV z?v?sT?<*K1ZQTT{0F}-{Z-xk2gMjxO+pK9Vm1sgET`hji)d>YBBo&-JF1C&xurvhY zy1~L4S?>AS$-t%9ut^avTgE>9ba^ORiPnpR6K=J=vT6zwk=wQ=d%SXP1)8aDFW@hXs|DKRdC#!_z`s{aO z@1Ljasg1_N$u0A4gRJBeH~Q*%cVCr}y^0C(YYo}t#OL)%ypwNVb`409=f)bg5ADAw zb#(M#Y0D>E-ju5i z6vS&^{*%s>c*|Lp0{ihX@h&$S1nVkO~;NIx3^*d`BwJ-=%8prqTvjEJqHV&E~NNq~}c`|CD zG~d5Y(EeZa7~&>6xR5y=Z2b~+4h9x&mlL%geY;y;u+r1ZsZB+ZPHrDZ9~~XpZC5;f zPeuWKf>#^H%+8F0oj!=J++=sZ@5la#=gSGtQ&#Ws)j8Ya8d?;^YgORynPQ`ofy7m; zmjdg9HzlGSXDjdqto>g4&1Xg8?Nf+(8BLBIs!h1;!gwI&MwkU#zU3j(aV+W4xzd7r zOn)DKsb4<%52U`i)-5YTGMgJmt-!MEAS+JipSkA-N(hF6%LDh)gU7g@81`N~xlcg| z*qiOR8s4{fTLQv}?#xy<_6oy55Xk^7>X{AC;uvnHlK0b6Z*$6(H>T;ULD$tH$Z2wZpMjST3dTq|nN9+5aeLnabUu92OtKuS;Ck|-+;Dgex2AEq zYpz9DUww4cJ?54eBUxfHesNMeCe>D~nyug)H@QrocBxA+Alu!IkDyf2_sTaqP#7;^k{v{@@V;j`wPY)~ zTu(^w5TZ=nP~wcV9>DW@v3f|u)f1j`wkL6zeFoQ^{fP z!%ZwM{&v(QK~4XViWf;Z;-n_LvrOM)1y1cIzN>bAJJ8vv-=e7&By?-C$Zk$pbfHIS zgsZDVhx}Oxu`MfuTC@DJX?W_hVLtF=!by(|j~y2`En3OexFs zf;{U#l~$mHapdA;8T7BglEvMwKVLn4zRDUZ!x*-4LhOYiqrNuRLd6MPAWB}js>=fh zf((C$uJX32eR9yUwxxw(KF#}@YCuu%NUDuHS-RNaoyU=lmu|O2j47S1xwTD+ZKqD( zgEZX%UZ+QzJ4WaJTD-UMvI9$O_Bqsnr?l+}G7QP1AKlDvl{G}e)dNdY$*?~ab(+bM zX;wi(w7ouNE02oy^9;KL;lN32CL)wyc?+vZD_rYzM95-cQfw>UT7se3*mc#gP-wXrhWzy{@Douq%`iVE z+vCQiWE!K3M_w_Uc|e+KVzLYj!UK$Fd_|0$v0SXuY+cJryNj3-HIK_Qkh;$`PKq_cpQh<&)lflqmez&g)c1M?Kgnf?i-ciORZ_ZIPx5h=zX7s9DCuRu=b zA%{?|!v~`lX}l_u&&(#|(?Q1V5lwjcwC7}6{j0^Xg@vq}e2~?4MeWx&dcmOd#{;Tc zA+LQ3(1XbtIUcGh2mqW&K1<`B-`p*IA);rG^JfyK-5y>OpR zzxKP$2c{<%7vw$kM;aZAC1yOoWq17t`aNmVu4$Wm{buL>J-f7fr|oK^cC*IA-Da-1!bJE*Yn?JbP6L)d(2H1NO zu@79U?S$os%1Re{O|kx~o*&YGVy$Nlh4JD`Rx0@T z-$x@c30b|SuYPl-0m}4mwRFzHgVvDAT4#8gr zyu4zD9{cP-k}~2Jzaq?T4%ddHLr33pf`IzNpaS`!+gLG@FX$BV@JXHLpnt@gTZ*+| zx|Bme=q}z(H|1w!Vey?(#DdYGIT4+8Q@;P%GYOtwy>clF*jCFrk0n)C9!VCZm_c&& zZH~JA4hJNU^c zA^Xedr3HQn&$b!6?7qqB+wFOPxJ;ar zRWRc={0gj4zs7v>W`%+EJDr&6t-1hh$eKKhngw=NY4Di!RItsc`c3=oM%ObSXZ91g zjI|$m%`1*-H%T2RZ1YxT2Y2Y7>hv>du%^Xyp1ae+&ZHOF7^&Fhz=cg3`j{-jJg{Ud z#6(T3J|6(pw3g2Qp^}Xrxei-FS}Uh0b1a(bcV@y3h3E~zRA7k<7Q@<#itXaE-8Z$~ z)o?k+^~M|^6uPCe_X%tzzLzWD5PqgbeMqoefn$rb7|`63=-r;DdTaFo{s^Hl{f;JA zH;*AtBa{Osq<0D2ASfKd!lV*An;Y9S;n+H0|6EVZWye+!N`@XGl%FGx5I17r#$PZ( zTuB9`!(u|qI|S4@k_2`Rpm5EQmJ{C5uJ7v^I7jstyc5YybG7I}tyy$6)eL*FF2Q($ z)~EpO0yVx%K(UEHp{2w0uzvWK**u_9)7dODA`_>Pwna{%yo|jha4k=CA(SkV11W0` zTSeRS0v!bgO^EkyQ2y=~!tJ+ZwrToCyk?KU*~?iCGF{yO+8p_NuVlp36Fma@JRh0n zE#yn8MkFCyd3_~z0*`E;EY-VSqqPzgV;W$<>8_F(OSKhuVMp5-=zjU>@QlFHX-+gI za&@&bNEe&EO$@V^%+gX%goLz85Sw(lRzMrpV*M}zzcT%FiZ=pW(0NWzRFkXEIFq_D zhG$D=^H7B_j1P`@!^q{PTx7|>6|Y#SBxolDK%%OUyc1OV&m+2%>H35j4d2US4~9wK z0gJOcdll`Ux$&bU^KW#3EMdidFWLNRAzi#EU|wEM)!`PC$lk*vmY*wzAq?4XQ4pof zYdRceji@ZN$cv=0_az13U8=biyG~1oV0;QryMt72B&wP8bHo!$S~hoZ!|Grm?(;)L z+!KA=0))HYCpPzT8qujYR`w?zSMh4-%{#=8&nD=G&p&M+o#AhV$vv+Myi5(iUY{zoP7Qi3bE*HZx>Lh=2GOt?%o@gUgyy zW#8W{PB}VV{5HG=tGlnQ+_efu6i+Wiiu4aWB)p%( zR1$wjO{8{m9gNR&#D?GHiRmE4m8W&V4u5IZoLY=e%s(zRJh(1a;-&A@TtNNdm!X~R z)7|Wo_g1~+N7O6pwgqYHMYt18zRG28yR~Mag5wJViNIU2(|&e+C|q>mIFBpj`R;8W zAAT>vdU%>auynK>c>p8I<#&Qw3~LrxW3>)o{<}U=D_;dVsZ6p$=UGLjZD*r86c_$B zPyC8%#&1^imgP|zn)M@`UuLsdzd@xv;NsW=2D1pseG8|C-l{O*u+zHKcCPmApVUQn zyPLtm+)XEwcRIR9H`!g^V8r=(;nKTS=YY?XZ2* z$IqZ0992X6FSlI}zvhOG{Yfjj^Wo7uo=K*gf%~O<+mjRY!@QzmlZLbn8`_1)2Qhm- zdXlsrR7a4(#IT*_QDW1xUg3rhH=V9j50BhQVXN%62rc_f*LyAj>_(dI47QenqAJ^9Mr#TEJ3s1O(DV?U89Iv)q1}_UyFw~YqZOX(T2ix8 zlnFH##9{KZ|-T=iQ#c`1tVMj?Jz!EA?X1XM ztD7FV#Xe?nLTM8+f^l-Bosv%owt$FLzD|8R(U*63=(WsVWmTr?O@+T;e9kgI)c;KB z78BU`t`}eQ&rlLfRk*h@?Tb>3?Jms9_wmiwZfRBBPKwX2TsRc?`y}9+ixrHMD00Bt zv$_^0h56;RbZ7nI`G}V6dPc}Ry^%C14D0Ba(qE$}H5%WOg#KTyu9BCrnN8M`99bM+*n!=37@C zFbFfHZj!3XW>oQ=gQ*T>KRkcG%Er(~e}5FI*w~;)_a7XhMqM*8H#KyYXa+X0^T^>InmCd~Uy#hH9<-02f{~Uiy6S{3(s;5&Z#A&(GL*PkD$`&`2|3aI zD*X`Y7Jli3jJiz6ariNUJ2u-U9wZD8!9Cs>uzx516)*e^IM&73kyPuSYPr>n(X}^< zfZ%TEyLF2HIlFi4Mb8$?m6O?xNYz06Xg{V)s~-O#@h@J6b(yIkV}wSyc%`3(VGAeZ zR>EuUGMZM*FS*VS_@q3fno6hJ-8TW6MfVNw^R8w20z^g4gs;*tLGQ*`3Gi+{x(bm4 zwgxsmckRM~}Wf&{ibXK&rHgMseTV zD~vV})l9qB9xNG%0Bp=IxtO)F{1;m}GaPQ#oh(8@d!Lvym1489uDM+a1-gB6&9!Li zZo!5}Y@_+^-PmsJQ*@?TVOk-sB7I_pTt^7JG7F5|0&oh)=R(lno|~KWFLvD?(K>(O%W%lT{|_G`6GrJ~(cHGKMAWZXP~wwRl%VbO#E{2HKZ^2Z(gReDU4K z3_|d!`R6m~$YC(~RmEqoOXVIPy;3jLB;3~ui|f~17N(opx2rMp8L0Rh#3ABCKh#Hg zaNg}KH6U)ICPeqt+$F+?6wX4Ho3WS*aW-s_y|(^sbzbPuDA8G~B%hf7UEue`#6;O1 z@^AIa;Le7mzKwrIeNi{J*fsdyKOSyh%vq8yNulls9uNHO7w+;GlE)6WK9ulm4WG_k zKddD#d@-y?6;Iv2Z{YTn&s<8a^ks_#6)}D){90NvFH`q0GOYwZ8!wgaLDxU4O#%Fo*BBQ~#N#Xu*f`H)u zizl7BPT-O!qkZZ#G?vRqh#-g(bYzQtdLq*wnAKRcEA)eGm3ifbaQ>sZl?b_yzcf{S z7I(>GfT+g%N03A%S(XwaxB3XDqJg`J1Kj9AIoV#^Q z4EDA&$XLifv@M7?m2Ib`tFa@;D}EfC5C>4O*sG>=D~94FGzeNE9> zH*PR&(4r(rH5O|9Q4(@6J%-789()b zbxux_Hm~vOvhKwOx*dwhZ>kwL_x;acs3d!}{_JKnk3yt5**c<%%}t1F&GGX05-cR( zdq+v~9R{AY7S+cSvAbeuwy`h=8SH~n?C=!TR^Hu;1sv@UQnh@1G47jZg(66dvdn|Z zX?OdxazXWcDYi}|v;)kF%0;c&{|mU6d3R%eR|spR|4f)9k-J#%_Gg@zq#F)T7IX1{ z3jN7aPN{r+iNDpikqvF>9}I|$rEJe-OWAL4jaPn}JxNWsIpbSzHbIYPT!$xuneYcz8>F{dImDSR(%rFYx%c^%Bag-RWGwHW>|x&aiq6o* zw_PHuK6X$%m+C(a)ymv(G}L>m)>)tr0-@1%E0H1(A&W{j-jGD4IQgN~nf>iwRJR?D zi;gmFY||0T1H`*w%}MXuVnYbi>?5-EXyj+aSv_th zK;_6aFMQot{$ZDR1XLS7#FZFDWv5(0f721#i z9Q?Hd`-}$4!kAsjI$5btS8Nqnv7HYHTCq#zlK`sa`Hp{-^?)>OLY1Ao0Jv0UU!^xahuooS+0-6i>7ct1!@=nL_^D{`j~uS;A`Qq@$PZ*E zYTZJwje_bki{9CoeIK9f1{M-^@^&BKhc|i4e5hTrBKGKjYaq!NNh=20{l%7Dd^k4{ zS3lC4ox@BCk#Og=Qa{AKQ>9_H;1)ZFvv-!toTd%Szq|bWE$}eJFAQf?GL8pB$%OBP}AS_#pC%Mwr78Om+k0@#{5%p2JP*Z{D^T0*>1qf*zIjif;Zi02g$4DRNI zV7BQbYE=b3OLBF3>*R-%#&Mq*I$8Mm`(OboBuf*k`W7A68CN3PAACp=Lt zV`y+E!7*}@ld1Ys+0a9Dx8M`$EkU1_6RFLq_Bqa=f`Skale&iF8rI1l4m3aka7Lc! z3~7l(4&_~}66N$cx~uh}MD8{Z%Ftj^;_+O43pMo@YH-J?Z=MJ`xT}*TCkm$8PDT`2 zJvJnmc zOqOjOeqQh{6tPEEQGAKSx+;FD zWw`Ehzf9)66%euZ>5JlIJ3R&!-PC*<^ugDPZ;ufEJvs`KDe3jWyPH(kiF`0zCE@PB zC|E}OJ>j!rd3P(lpFu>ahqfn{ochDALLuOFZOE-**4{V5Moy9lIvfh z9NYdvWnh;^_HLYXxzsk)TVFKQ_{Wsu+_@sK4@=>u?;4!ymv$@GaF+Qxe6QdbNYnlvJL3xj`C zmLd!?bi#iy58PT6boT0|I1%$B#L zaI??mz8G!YQ!Guj&-y=#&OM&V|9|6SG9*H3m_sO;l0(=q=W}e%atNVhN)9!#7_dZ;&>v~@AZ?kmRP?6n^H&b*q zD6WV_$NFwt9v++lqw;8yI$K^ZNKm}9qKW_VnA4<)| zLd7h6922-aw^osrv#b8&W|P8a^ZGmj2;n9BSqM>HbKxWice5K?WB~e})N7G&!7}gc z@lWZ6PpiJ=k!I>Vre%eeBC?CA`15qZd!urfAyJeTmr#Z5TEAPOO1xUH2IlRP1BN(C z@-Mz`>Rq;+0X*e0sAJiN)hxq^g@;`alLNQG(zuCRocDo!3+&>nw%Y2qOl=7{U*R+^ z$sy6hyXaON=B@pE*7KL~CIBVQ49iFVcyP5Dd1Cb+=%UGzqWK*Pw4^nluecGMFEi8T zq74I#5ozklSp4=-#OTw5c&i5Tx!zAu+6wS^ZC7{?$XfRRZ~?0m#ceG9%1s4wULXQl z;c6=r4Hg?yAiVLYZ*jX&?!Mj<4^H^mXzF-zw4P$pi_PXrkgfz3Xk{+E*b)i%!MUef z0?Od?I(9=DxgWOtre?~=cLVmUJ44{Oa{>S@S2Mhs3@Xr!?Ws) zOa$-k#KQkT0NmIJ;raVLAmoPiM8Y{^rSi!9HP%*reXzr^aAS=&1^Cw%9D$VKsvA$y z$|`rbQhfylal=(!S&qR@f97`IF8e@G-&r)9OeDk8dw>nrq`0CNw4X3%$AA$xyA{kU zWhPSXyjJ}q_sRof)OiX7o!pT~6wc%60C(Og9WeEqq_*k4WB!A80?Kf&}L%!oI4{{Enim4=IBaAeMtg>I+B74U&g zBB?tw)35h{G4@oZRNSmusEsG9mG$Km*CTrb2Yb1rB+h6$m!A> z#&h-wk*1?-%8P^MSu)y1Iy~yhT`lI%8WGG^ct+I?3+VoHAW#z-L`7$CyTD@iNBfNe zayv`Sai?IUczkva(klD8d_01jl7iUI$Fe0Vg;CF~cg6opdKnRs>y#P>%ydR%d10yP zvCG!-oYG>sFAWOj+NGv$Y$2dMQN<~J1t_Yt?EpS#4`!?QdT1JF8}oA7Kk`1S4ltPy zWQxA`iGgj%E|@~#m^wuz10Y(vWP35{E-a)pUHli>Q%2%H5Fp%2>_3MDj2F2uqB8hX zQ>kVteE754T(@;yqBLfSsKcFNd1JBBCi>z(3%`qRxLNtpaZg(3ZlQ7 zPA@1$%H;~G`*#iGEc!+=qnwTEo;*YhJ7kO;=1@sTa_i`2)8TZBGb5wyL{D{M=qIChA70&I z8oi7wm=IhW>Dttw7)7;~8~KeGPvyci)zns4*7_gHb<9ZAk8BsdB;*DKr3<7XU-mL& zw?)rH!K222-sUKIpfaUW`&pFI9-3*^8j-SA4wM&OjFNt?yU|OcuXj`rUx%E0%bs{z z{m1^z*JoyNg`4p!ZU$~g*Y{9|&SCuGJWp<|sl2Z9dG;FdXm+0#G_+6%^?DR6HS=1m z4kz%@p=nAu32)QZ{JUl^>rW}^(COuL#;xfZs;GKY-8Sa$zu7P6iSic^OmcPf z-a6oT(yb%RSVZr5tQ-H>nES0W!2o{PVPyMst`TI}?fUPd)5m#j_mYJxa`~fRZaxbi z9{Aubu6-s`BajT52OOB6+A-AZ~iY*RuK{`rYJtJMOQ@z9B>O#|ICp*LgT# z_EEVS(+1L;NV@pnv4MO0iCInHe}Y1bw|%M-URYmK3+!}hUa$4meAr7a5UJ0V6Y`sX z7w08@*>=SR?;pAJ9p0sKoqd^G%QFS)O)}H~N)hA#KrQv?GNp_5?@qCQ z3yQ@n6dOpvLlq`*_-LYCrbj%|_Gi&Oh5UyRSi9mU(5Mk(&-#e8v=_@W?AdHf;k-t}}Ed!T&y9Wf7 zS#&GeyKDFlYMZR-?+Yj>}$keTzFBY6?^V`)sats8m2RVr9I*&j@3d(VV6+Y94uLBa_dabt2v+ z`R+k{E>%#OtQlo@I*#{pN)~rK49MT~E!!aIgza-VJZG*eG=cH3SSx`g^-yvVBqdte zN`X4EY*TQDeEMYLxY_5qaDZ~8AT)#>jY)ltGL|gs zhej&4mzke06?6=(2s~R9ovA??|4Iy6ZaOP*M2TYu}ixXA>>N3Q>6gQXuu*cp>GF|RIA`Pvb9<;uJEv42{HBHQmGCk zlKd^kUqm#q%-k!h%Wu+Hbg5HJac|6v>Oxmh_k==JOq*jh-9uEadhcNc`$YVC)JJ=R z+PBNtQ@ zMOylh`e-UanJUPiPHM|AYmxx}&Sp0in?-25Vr{8+OJ5NK;dV4H?w!JzFij@18-+IF zbtR4nM)0BaNs&JJs268dqZXIPi}cLmW4B75uQZ(m!^ITN$MSQ__K7YT&b1wE3&(xo z-quV4?iqX5Y??4`n`V#f7UWUn;tvXF#5pnPPhg|edUbZ&gXp-EYZFgQdAl*Ef4*Ii z82KWcQwHnf&-akFJGmGaL@<(D4A+@TQ=VzeeYtZ`N9l~_?|#Rw_Ar0Cf>pbvu_q|` z$-O4U+B=C|{Yr~f2}K#6a_#}|$(YEx$*)IC>rd=={dQl+-cq~dOWj8CEY05?eY_iX zFEL$otY&iHZ=`WeRl0*(Hd{1Y$U}n79@SRl?b9m#-S3h!XQt!V-yz6EmXnv?0O#hu znP0$^&9-Bo8Ls@S&y0GTn|xQ#`4y3#c0;mGZnM;J-HCYVZ0q=Orq-qCZpfn&(I{EB z+=E{&%P)YmK^TvT0W=cE{?w@`T`abo=$6%R3L(9TMI++-7w)g$78ve!i4k z-vi#PD4z_m`hEhjlNm5_IjFu#n)>rEIo0WRRcd%xq4#N-Ob$SPUkFYX3sYZeH?EqR z9DtQvmC@<{4`dlujTn#i;61ejZ;0kSk@KBIeG^~0n*9Zl4sSfcjOhE4 zxQ18eVaFfZ!+F5m4Cs2go6^bmw)X@eh-%TaPVHR5Ejxb8-(S79>Un(p!CNEVo%3uc z$}plh=TCL=duRPKm89fH*J|_LQA?G3m?)lZs@dujOwjt$=ARz&AK%}n7kATtFMgP6 ze^Gj}lJ%|n;+q&{VuZuXEJl{SZyb5$%7*PtV`%g5p{e7qhpxhO9;rWH`(NFkJuW&w z{7Ob;z<1eqW@z%4ieH1)nYE{^|1cO0F2>P5Bn2sMwsh_4Ie46cG0O}3Fxlk@wcgPA z%QDQHqAtC2;XarxJtG6hZokmA=p14>C>_xs7f!qGbaa95Ia#kF|I)n%`;V^WK?lAU zl8PMRwfBlRvDu*(;VK1J9c$~C^4%b!3R-^fC71rcU|CHX-=MuoruHj3dFfp8a8(zJ zG=Kbvgq290=a;hCUq2S^%Cj#dws#=PU!;V4@VdQP(-?X9N2mEMOQyRYf_$^W?FN>E zGMMgES%>hxB;$oh&FQDdrxTh6wG_JR6(A76^Jjf7P3qoNM0>}%xyY{}s;fYdP|^1D zSJy9zj_1l{{{vkn=EsBDSGJ^L?pxo=sn7ue`772}I#Z^T3ah++#RjsjKqZ3W_w5qT zrMH+O7h`)%XW2*!iX#yAim9?D87SLESS3G_c@5H;PqB$#P#^vNF6~K!(3aeIYGCFm zV*uY8m2vfA&2tcu77=Sta0I+u88!qHZq^M&`xhbZd8$BXonUaUh7lxRMf1TIJcFL! zZCx{{+DA*f{j(=vRBYQ%)J3!^K)^sLeE)385b=0*|E>cE%3-ZVYQ~) zyt&~nMkh?N+<7Cf4GNeoE&oMvh-H?eDcr9Mv%say(()bo#!22g9TgOBE>Vn7PlVkR zCn)O6PW!Tx;nE#@wb&5a3jV!I3jDmBv^ggP6}c1+RZndo1`DDUpDHRd4~xq%Hrc0j zpInFJR(~lAGm;P65})<0Wo)mwP~#rHJv5qMOn<7wvMY0R>hX_uT9n=4ql7Rw&y-Iu zeUS|t_Q~^Ed!a8f>)aCUq_>_*w)$-xW%Cgr=(b8De|2u$XwFN;SeQra-qCWPsttjq zbSj;MHHJN&&BSdVEvEElx(8XQ!Dfqt*}TMpEPFZsSO{~bB7^Yal?F6srN!l0fcwkI z0*TeRZ$xi}%UJ7PN;b>-5Y}zLc;0bj$oB5SBu0BEF9j4%kt_)yXuFIm@r02*zn^Uc zrCRp=MpCdj6d~=zQZHEW%7_ZLgPe(i_Q5tc(Oa^@Ls@@xcqA)ThK~U zg9I}k=ni06(uQmHhsfT(vQ~xW`~b_scB_kufWF z9-c({M!BLY2a+j@6^g&E)1?`eagSe#ef7v|%mlhVUTHYOUaS%Kqk)B{AnsHH?SMj= zfCbozegB19e??~)kk`QWT{TkBMKzD+HPX1ADNb$wv$?F?ta&hYEupCI>?+7T*{Mb> zXhL(-j=tPW6)g+keVex5?+ybScYLvfwtcjH_N^q}rI2fM*n^Fq!v9i!nTil^GIZtN1bkyk}eb zWlJ;?tGJO&!H>`-f>DTbocsm2dxiQvkyr^+@IiK}Gci6%H()s?QgLdMs2*CpO1*=2 znayT_@|R>6Me}Umz02kv2Y`?q2=LGA>`?ZXKW3w%Po~6J)~aJqu1?<<6R$nIRyUs` zIIEwVh7^4pNdDU-1g;No6$+(IX&fRiwmfr#W4@|;w5}Zk!4hwg|3FETS6x-tDvT^_ zOdGr!>#R0!JI6VnKAB825$%v{mHg!S?nh=-LoG|MW{`LrP@354#%FZvi9wou>rBF8 zxT>tjnibX|%|3K`uD0dEZ2ij{z6A>tPD8|(8&l7&NnStX(N3LheYt12KD^sGBOo08 zqC(}NTK`Jvf`B^!YY(?g9xsjRi&7tXf(i{1D`DJret*VqNSPENe2_+=zlkZVNs?W8 zr)W|TSgQ}7{9IviYxK?4tp=Ng#Wqh1#N~g-A(|o7oxf|hpM7sgpqzidf;g@Gfn`r& zwz*PZXJXC1`hn#CD5`hyPpYRpkq<)VKUI2c($LlJ6Cd~V&6=KgCDiMu@7wdd`IG#! z#5r^`N_g?Q(peK{jy-AmaMS*x;Rac|?S$p=AFkB4%QH8R2BOdW2lDZZRLcmicKVvE zby1!s&|^|n_8({`XRX3Pp?fyR#y#YsXXwQc0#d5dwxwoIgjPD6i(acwFM%fhR{Cjl z%e$BpD)<7p=JY%@-7TYW7PizI1fa9XD^UwH<9n)h+-bFO~e+lIv?it`+Wt}%@tvafPJs@&Fj z=qMhMm?XLsbcEs^{~T@pNm1zwFX&0v(N5LPPPLF>XXh!(Yraz5##NP{w+7~vK4TRi z`v()WrWxPkx=bqnyMhQgoX@`ah$GriOr+oQO^+Y;T63FPq-Gl}Tebh^5Sl0I;j~?E z;WK9$F{U6IInw{Lx1GUa{q9B-(!5SJ1` zbg??tt6wtib^Hw)F18{<*cdhz%0iOuK72J7q)?{hcahWQC_&x!GXfAlULk;w^I(DH zfu~k{oh>@NQuS)NtjK9kQ7Sf@^(jbac@$^o<<%QyM4u^6kb+l%{^A0huQ?8==_wIjl9Ifu1X}oCN(h4u5JL%tODL$1#+JegWSMCb2d4;H0d+0ZazrkfYu&`X4 z%EcvFcWAalAjG65-~8@Vo}nEz?-oBOxSFpt|1R>Sk&HJg+}L`(MwnNF4mYVZx%;ff zZsTq55PD`VYR^A3G#`B2r{HJl-O%zjV9}`0KkXU2Hv)UzUQ&+(f3tnqt~oJW{G>j| zsBc2Nzd(j$yo~mwqPOr${<0}E4U*~K4%RIjJ2cmA6!#;SE_eJhnr#wb=8LD4y0{A@ zWi|b?Y*ic)*VU<>e)%c5wD8}c+0P*zN-tBo17)$U_C))C-5>p3-lRbnu0oPCu z))XlOsEO~QASEhqrz4a;w{OeY%>$G_r}Wr%fSrE{K@)p5EB`Fq*b)su?|)FF@U|NO zM_DLANJamr;5{gfHEh1D6&$)-9vIqNHbUHn7Qc?Mf5j6n{>&l6UpcqP@&C8vN{3fo z>7;F`2toM^=`sHBS1~|G9gT;<)XuR@*JMP($GcvRqBkzLOV}lvvhibUB@~9RUv3R4 zrVi(4s^y1(7b4aNonDj?y&;QB*lBO+v$$aL65q9svmV}&a6aS!F8J}O*tvm1R|MzLGO#VC=df3{ojDsre%+g z5b{3|SBAfF$+-@GiB$`e5*fhCV-*`uY4uq^4*gy8Id7(XFj}eu3)n6#kSf*~{a-tM z^sEKQq;M^ae2zw+O2UJQd>Bf=z75M#xU^V8i>Vk|DRSu&LL-8ni_3^?tvzd^^$)$Z zb#S6`R+=T*6>In)h2>aQaY~m?VvMk=!ck}2X5fKq({Q{&kKE5dGSA!nv(MkXZrLPD*MFt1$WOaE`FO( zS%-8?$`GC?M*g{ec546ioADJ`p8o&|kAlMZwyIoQ#SqycOZ6!8as|@uB)ju95!F(g zL7o4BJ|=$|c>K__BT6o<-R!3HUHv?nMs9>k=!u~AipIH@z~1ns@hIc)XTABcZ|h#m zx_{Kb$))J$>Yqz2BP{;6Q~D}b(J@rEgQ3bneK3)Fow(GpS9 z#WUMzx`j_?hUD zBb~>4exntgUmrer{3jW$LGVqg{TMetw>q!4BIVWmr27RU4db+4<5(-;r|1@_wR@4) zpH^0c#}2%k_!rH0fs6Z4>oP0OUDQ3iiIv#Y?71~GZ_EAN(xhi5$ zbIWs}Q1E*Wd`DmWjYZ|k79WIt9LW8_o&)YL zI~rw<4o6zD@U{B01S3l)JJ^~tP(bm7{_Me7BuLoghZld|9Y8a+#>Y27(7@BbKP}XJ z1pX=&s)bvn(|h6;hvlU^f5{6)evw|n4hzvo$+Nk2rRxw7mMAs1sI zelzgz__WK%A+`s!C%^T#D>Xg{io`m=jDP3}jbkH+h@GLFSNALq!!x(tEgU363%`H0%1 zV&^K;-LE|~aROdFiBnwMjCwo)a~HOUc^%le#ec(1d>5DhF2c-5ol!j26&u|VJKitW zILk>f^V;X@vr-cUF_QH}n_lP&V7^ct&(+2sbU!jNLg&pC>XEWrH~Cy;8>N9f7R6btL^mM@4n z$ApSPCWgz*omWZQflnAf*_Q+4S$Secnno$XwnlU8DQzPfZ0CVQP$uebC1^d37!_Lm zpJkj<-kJti6CVVsVg^g!1RYpQ7+tP;q5DA@Cy06_S z4W;D*)3uGTqzq0O2!I)Z_N{7cTIWmCPBh0Zez5CB!XlDVF(IX0Jnu+_F;RZc$r1p6 zFjy38NWl!f(+heHPVFE&K-!jVb12_3y-Ud;xlQlVt&|leuqdebCwKEhesRPk_S4hRX zZMDT8&uTAiU-=$QQ%qi~&Z(2mY*wJD2Dtt^j8Jb|K~~Y~(UsSKG5j-TFEnxMq7$-@ zcrU1K3Riyy3c-t%4-1|y^uVsi#ZCR}0%i|Js1HIe7opooTCDSdVRnNwm}IOuW^&E= zEkU76rUkqB?S=r{Fs=!9;Gim5NzdPbs#`gWLK13Ub4%M%AApGyrD5{psxK`mja5jP z$LGVY!*N58rh#bQJ%@rYv=$p8gwGHWAVdwdtlgOwHvvH-AmAtBR z{+u0yW-)O*s|67DZ1%BhR7kP9^|MzoIyR}q*=k=Ql&MVgI89{kS+Vq5Us z)!$3MwG|jROXzd>4+f3dVjZF!(1b;rKxL^e9weEVn35(L5M9vqatf<11O~Rb^0Ht? ziGv~?JWoccD891md-wVW%SIp)Bw(*b?wMeslt+%R73R33&&1>+3?HJ$*cElWm^mo< z0}NV)B)8aKW5A2F;T1`GFxD{UaIs-(cspe`woA7uM%L$ZU?v^z8XwQ?4gZbG}>3k~WmlX8<)l=-F~ zZ;QRB!&CzJtiDT>avwdU?ALx5lk&IIF2HXs$RN7 zK$UT#brFDTVf5=h75KVB?18!~F<02@zP*@0VTE)xxi^=sYuaf%s3ln?i0i3)N6*UT z+9c8sMwPbuQ1Ec|tx}1IZ#-cA)YfjkL3n(rujK% z%gvS3Ag--rSUY!20EuPAuDD$Y6%nt;X8UAyAkrV>^xPHR#W<_DRkr!0E$m)-UjGIQ zpkHp=2L=Ig$6^;k?lG=hQK$!b!^L#TAzex)*de``1-xF)6RG|f*fKbQE^mxp?H9f{ zMOy|`Be6Ubw*If%E|ZBALM*^jq#B-*@W- zH0?2-7|u^5BqU|vMs&Yrp)ZK%lM5uO&ge9HC?Uxyic}ciWVO4&LRc^A7;8rvSu2$q z@&`Igy4H4!>x3_1Hn4UlyLAR7g!oNztPqsBIFm_Y)G+a4hUTARAlhcnIG|$jaadjA znzp)!v`se(gE(p`9bG4S6xy$3-z~l=^lOukx=FTV5;7NzvCmAwBxP%I`|%YarH~uj zqMIW#1-k7><_xK1im)XiEhK|HmhGLwAd9a{vnpe3riu6Bgf5$kDpPbZmMjOjkqh_x zwo8h6p}_lKskl6(Jf2I6despVE_A>ZreQ2oVlC^`enkolT^^Z&EXrgk-jshms6kHBhs zVRCKPzNmeozS3*Jk7M@liL9JJ9L8;6^7DTn!z|UOo+O=KmFYdFx$_1FDMtf8Ci>5m3!-#hmzvQ7Vg0J6f(b zKB-1&;o(C%OB%UY%e>d}99!U|x2MyJsIc^;+cgSv34VqeLYw%XuRz++1w-(CFgDrR z0+s59c$81YS!W7?fJNHcV4AhDOUhGbq6j6ld&g$2TaAsFK!K%P@i>fyfQxm@3{b{Z zj_a|FB=&%$RMD8}8h7w;zQce(Or%nv&w3O57O-0h*k)Z5$g@icPcrskAshX^da}pL zJD5~?`uUrn^HRTwHs3&K_P>uiib>Cv2t~0?mX8jn!l?R#79we}w|Ou~)^Y$2B+d6j zY-{^=i?kG}a+375-&ASVLY1c38OY0CVSGhAGOQOE6Tj~_0ns+`^Od^sv3tRTP7jG0 z{PL51r#%(Z)cG7LQ&m^NZPnO(Y_oIt1D0RUToMU3VWNuvZu5EPIEJV^)bsKr22-)} z^k1)#ngKKUbq_y_Me<;M`g-P2jVdMjL)Z~Heeu^#J%LD>_v9yV0Gs5O|6aeQL;G(w z{*xM4Vf~EhY{{C7-Xngw*q4dSecol)*M>JInPIo0M|z_dP5w}^hp_)$P#XrU;ajgm ze(~POq(9m$0?*MReUxK@j+PIC#rrY#DtindW&1lCakRLC_m8lB5Y~HR{7W<5T^k12 z`TAsL3WLQfl}qM^&al-R{WWE(h%iHig#KBp8U;}+^}etIK+xslYl#ePx1szfBtQwc zDa-mUFwl5Whp%bt2(BuD$JydTPJ&OTaJC=$+-BW`G9gFs^U^T)Q9`JfXQdv48NZig zvFzce_<@JF(olkmp!~5`t2C7DqiqXby=`(AsjXP*)%Q1Y$x%s!?HGFjv7qhbFrvF9 z5r|0*d0Fg4bYk<9B`hSEBr$?0v3w9~)!f|$eTU+Hy zAa)0!j*5ec!VQZ&C{gHZhb-DjU&4sz0D$TaQH?QVBLmoi-kr8-ObB30v$&Nk5(ADO zF4r?-Sst~^#=;Uu}s)7GI)mohnrIK@LM zq*f2dTrV>Le;nuFO|gjFBI`ya#;u_l+AjGOg9lq-@r}Mb=xDye2+rfX>cx}}S+OYy z46vJJ;JvFN%O2C{xvstz?LeqIV7c2Iue`~7Qm2;%Ww`sJv9~tP1#Au8s8G63MedMa z#RVE+*;eq!a9e3HZFs)3^%Rd*J&q^9x+;vhU2JtDYzxRXH_@xL#<=e$0(l0>t)(lhI)PzF zKE2aC$l_{qo>y}SmIU@#epv>A-hvDlf)KX4C8DJ;5LlEg2QCe5Xxe_%Jc|9yyqt@# z3fU>tNQMw+2}H4|R|yi{BSkVm3?8|t&nAWE!TfPNcy6XZ8LsuZ785r6v3eh(MYO!J z4czi*1tHIQCr7M@tCKc<;$9jlAh!%<>;-q%_JfY|6)~A=%||rG@64fpxG9Sf-@q zZh@C4(6;PabIFJk0U@urM%snt1|)>~h@z9`U=Vi`<~Mp#h%3y)@mwo=P@3=a?~XYe zNUfH{suA5NKB(%fkqIg)V-tyg?A?+Of|BWM;IXpwqPgSvvbUno%$zcGRP)+QKZ*41 z|E!^&QrO#-$KJx*HDWTw8TnHtdmqu**;>%uMS5M5zo>jy*I~LflVOj)?`8Re3ELbD zI=J-5vQ5@9OtOL2;lhIFDQ>|AT8LjrihtUjYO8AQJ$+zfem|g5tZ}yJS1PGsqVl30 z7#`uxUh4xZGq}ciCMJRwG5l0BBV}uz$j~_ZOWVp^Pl+|x@65ITHQ!h2&+m-mwONoo zt%zi!ljliLrXQV@wN-e}F7n?Z;mrAOXF0>q;0arW-FWsT9L@$k+!hL{5tR)oB(hVU zB+0Ly*N&NJo?oEv(XE^oTP>baYrT6MpK2L zXYZbws?_7oW6k?xEOl<{4VNxNMyPjC`TX1K#uptSSwoPk5T^!M(icHCzA3>R?!8mb z(HfrF%>u$6yz9!Np0t3` zAE*>Py~vx=0vh0%x*pn%F6}50@7gw@Pz`$X*OT`b>TxFNjIls=HvV#$b?U zGES!{VI3HocxKXz-e1H>pTE4;s%)bcF-Wo(TaaZ#k%WP@w~%Chbaa1l3eDY?cerR~ zlD!MM3kC>=#48!jApK z{fq(;6k#y4GbrzYj1!QTFkC(D!3ng#FD}~^uBz@FEq#5;h|>ru8?HxVaAyUJK##?r zV>uyUcHqf>k^$42vF>;&_HUdew)QJHP#w=z1Fupa3n!R%P>T(PYtQ`3m}_6q2(p_K zH4)S#!geS{x)PAwq1Y|B%N^%xY{_+uSyNDLI#sHsEFEO5V#QxGWe~Xm{~}YfTUPV` zZo;oHBCpd+$6Sk>0o-SK^UE#Q)DP@#)!>0fd9Sg=7hFoX;KIIZ#uh>|m%b&9a+2l!h9gGzw07U1$BcLQ#6K880J26gb z%{r2emqBMy=dpHLN1K-UR0LT-0(b+`?n(jIn#-i8qh?)5O0-$32w=+AHT{vL;I9F| zvZP7GgX~xZXR(uv8^)SI_p@gaDol#d^3vd0;_~vKSp}CD>1Q6K3h1q<#s#W6Ll10} zGLCNI%RlvGA;x9{^@e(el)L z-RBY!YohpadUIKaUL+D@qT@!X@>Sn&H4^H+f0F{1ju0Lit<**<8a{tq zRt18dzI)b_5Iq|2hH_JlqOJUxXa%YZj8?_yJC&p9@pJn=6T_#fbFYV9eHxFCaG-^k zw7s2({+)aBM(QvkEg;Fx}vzXQ(n*i*y6{oWU1l6+3>9`;EHKiuE+M) zA9*a7^v+&u{Ar!BRRQAOl?sK=!OORk6Xxwq=#vO&7i@yB;OSLWB5W<_HX&~0)U6+D zl_?xd!OifecFFl&YWWLV;+YE53DWq-)RCms&q#ks1H8h5w)$octNSgEQu@8|UVlMMT!TV~1z^;3pZ>Dt#(E_M9cbwf1#zH1y7dYR zMeGrHebKbV_#tPiY1b?1$3PbL0?-U$j8?WRI6wLJJ*M({=JzzpDwA-d%$p(zlpFO-1 z0#fx4rwW$ekuuVS72q~+pUwEm@VJ=&?teAyDCP86>+rHc{FCA=fwSNq4C^bpPm{{`KA9ia#1=0X6Rwrv^zaKm2CZ(FrGQ(vyVoJED05?k z6)2*EKt=@FGPkKCbr!M%e3s@o_mCCy%A}Q{@QziEvWk$#sb0VLr8!v^z_sRUN_8o zd5YGYHD*!Y;B|_3#$VZWMJdS0aKY2qKGEipZ?St@=dKw!C4k%+X*}?+Zo1oL0Ri!Q zc8$)dv9WgF(t;%z-pNi`pnt%L6?BBX)hGdr3by(Y+N4e};sn~@R9DaF3TZ~aG*3W4 z2-q!mw3Zd&)pj4ELv!@Lzrq=m2n007ou!xp6x$>Q0SW=k_I?Cl5n4bDa_djb(S%b3 z2u{5Q9@C)x`$`7?jX`s22!UO zEDhymDJg|CL>U@Y@Q%#nHn&DK=BdCq7kF*Znmj~dzrTUJu3OCsF5871rX279im0#Z zf1uT~m_;Wg29KQ5F=3dK0<-!6dla;>d&0%DVS4DW9K-jl(LD7(kjwec=Z`n#sk%wK zfTpb(r#(61EE4XUNfBGSuJT81`2{ERz=4K*o>l1!tiQm`vPpdUiC7!(_XGHV+0h4P z@B+a%D3+b_5QZ$X&8+k`7)(%HwlV5;dD10r(;YN;Tl_YAy2;`Vx6c)vLkO*mAA3=M z5-q(Tu`ykFRRShi1*sRJKnRyjyn}Dv&j2I~QZ6WN8lfGk2XBl3s${}ho__AzV#yw zY@Vg7#+7mzclqUYMUBbD=MDO7kX`7zhyok;V6Ch zSq!OC=c6!{A=$JC`&b?muDL#3e{~+hg`nVOh{ zt-GN+>{oPHJYuK1jCQ{%04;t3Xl~;DXNc!q3MO^7w8xkhI~x z0{_2GON>yQUJ!u9u3R7w#4M4%QJhk!5<8@Ow4{paUB+m7CwT$|vcGTedB|vbc?EpS zenu4!1x`o|?|-}xgrDmnwM!~NiUi}5N+SvhGEVwJ?V!EUsz|I1 zh%B^15tM4lI?WVK78GD2sJPVKhg6sCe^$Ln`r^$|r&Pewf>^ZF=5jy?Djx#Tea=24 zEO^k&f&XF(k&jRSAb6s7qZ-MD2q`3F*|LfG`iA0EzCd6gPc&DO{)7~OSWj6C$nAOe zCIyY$EoJ3=@fTkE_B}da3H#+R$vqDA&u-3RIt95^objxQjkviyllN-<8*gVx$_i36 zV$4SuQvIm^?MK6FCYR;#1bQ;A`mz!(LYQRjKpgWCfzicArG+2p%Sy#Xi#x^XDFoOw zErkJfX@`v+%iW4CNj9`J+wDcWyNkU?iuTOY&6;+m7#U<)5`WD^yWZA=9j$Gw@-m56 z1$|zcPyp1TQ}2x6z3d}|Vqsx4UySQd_?6o+JysEx?K2QHPT` zk(8?3T=In5*2Lc!O3%(R>514b;Y*jbLr9gljDGizq&mf_xd-&Xy*!+Adn#|K3shTj z2uk7uvR?%JR*~pqtlMfVm?RK#i_lHI9Td7<2OuJ>kux^VoNs*bYCU=6+$@iNs<{g| zHYE~n2tXpKu2+QhzwMsXDe)tBXtr?H^&v=|NnsNE3kOk)o8lv>lyYyH1FXVG}5$Q4|I~R>hb$R#s>DN`kBPR z_`L#ky;k2Xom=S($Q!P`*j;V;wnx8=t{Lx;$K@*%JAYS5$N!S#inekUBJ+RX`*-`_ zia?ci;>pG6PE)B>wNGDH(UJGk*#WiK`qc|(?JpSYN#qyXgC3<|hsjsDzb{i)XN2WbCeSTmp5CgzwN<2YpS0z*KdgF# z`8e3^6)aftQ_J~#Pgm^_;QMkeMe!N%qI1drJd1*b&HqO{#UM;aA1rtElvgId>r_qs zy?1X#=mHO?&Csgy?f*be*SekkCEmk=1?R=YGDrrG)35yvtJYil_~}!xGcmYF?$0JP zu%B64_hR9bv_Yx}H*L;jW#zWk+m;Jheq+6$!N3#o;0@1c1%^8xkr6RrQ)IRz=nUIz z+!efKU&Kaz`}NV+!T&h|G!4b2a7raw)P!q*;xcw$^cK4%V%g?R;1twro8gf6w!VaF z5z$p*=_M0_ptHYwEtUILJ|FTAuu7cpxeG4l)l9~r=cE(PU5n$1T(G1) zytkwwtoqS(Kw#@epOm}NG(KXxw7IoF#xf{nnvSnCZ5i8#qD=4DNrqeg^+w9X$9Fq9 zq{vFM#P*6>+;0}@m!E5Po~^QbBQ+{K{{AhFp&Gt`_7xVA@+c(eh#ET$kNi~oa~6n3 zJUsuMIV;f=qE@kLMF$Xmq%*Epg+lxw6WIeFfn0?eeWp5wgBBPuq1QaRR@N=cH~ri? zoDNG`Y&~CnaB4c{KhS``_WF01?w)y()->pI|I@ z@VO^9AC2xk;w$;Pr&ktv_tbx&beRKDz$Z@~e-7~r(t#Er7H8V>sPk!;8T8Qu8yI)c zREw5weEYd^=H;gsB>kSoj~4_@C#6gCV05iai2(;T%1ee9cY%{$$~wVhn|#Ud%a-72 zX34VYH2W45u~U3jhh~$Al6}gLfe}VQeeAs3rCw~@o-HO62y}TVtaOeVw4MJlr9RAR zoAsS%YR96rHsFaQ6&FMfb|6;ae(2Yd=^z0-b38AgA%74fBU#>dCVkPm>c)4GG~6a3 zvs7AUArkK3!N~;|;uYn+k<;a&CLM?svZVviRWERMl6~(<#P)dw`Nzr^HSs+fV~w}yQbpD=fBbp%se;(641Vl2^7GOLK20%y z+*m1e6}CHH_Qm93NpgU_``u~N#mU$Ye~sgZw47d_|22|SRZ@yv881oP79UQ#TQylkm(2D6J z1ngZ+&$bo^ZiRwx!DL$^Z7g51Gcw{N_zE3#qL**K|3Pu$z_!#F*wUZBuxc|)Qx$?8 zV+HSu0xr6%-s0W4*ho+g56}aV82H(9I6s-dIbUdP#t_z90;Z6-fI${QpPMd3aO(|8e|s<=V2!rmhIpH~U^(GhDK{cE~1Vk4t8Vu4^Uhc9C)I zJu54_GO|O$m1}Pqq2K3s{{Z)#>zvQ~^L{;_ug3#}_tjN_aIDE@CxRf6JHl(a$bO(p zM6R!-n25x*3~mLLyh#_r92(xDa7Y{M%nM1y`hW=F$Ps&OL$MaVsdo`R=oiAT0f@kb z26rIgfgWt6NS#3!sSua#C694RZsz4;f0{DKN^GG^TgXZQF3`!Qi2Bh{ak*GxbSIC* zR4e1_1%6)6)92Nv5lsrc1@m7R^O>3ytxU~*=5zO|IWC(oGyv$>$=2j@NX&~$-{(AK zhyOqb0hD6#vm~*~WB2w-o8Oq+`K&cZc4y4DHT|pLKE=>f#fR;;k%u$uH?PI}20WHV zU##SktokbXZvu0K*$;}`?`BOh2M2FH`UfH&4{fyG#Lyh#H7qW`jC=j(Tj9RH547Hx zR<9a2JBTR#4&f%UxeW=JP;u7?mPN2GI`g3SO)B2K2EG2(=r=K^I{Cg@e{OuhWIp6i z)oYz};!Nj_r;*b*Qv{(oBhJ3x9((+;INiyJi6Riv7?fG5_r7~AK!LZ9B4x#U;7Do> zf4#+)jaFKzpC_#N(}+sI@afzAG*x#g_!T~t9~r<=M=7@i8`w!XMD0~fy^ zF-5CrQsIo9$X>2z$=-67%5O4!EYFKj6L(0#-b{wApBvl=d_i187S0d8{ra@ywfuKK zYRMk!h%(ZeYc+E_$e>>^NsL1&aeXemj!?4ZYgF)`@c@O3L>#GAe*aNQa`+SjqO~+7 zaE~vKD5@#o42q?=6tU2*a`q|j(N*E~?mRAdkKtDVfR`)Gx0%a)3T|g|yz%MeQ|Afi z%z>f;pz-7pooT@Jio_>l7!p|WHneG)1DX#xF15?7x8=QAA~|l#npP{%e7gqLc}(8m z{tgu>?sv3nKG3<8L5poE|MUK)Qg19e8DcRj11lH!-fVx@-8WZ7?4adaV!Nz z!1}!{uFDLz1|x#2UVSX+spJxSAmB(rF#v`rOwNTOlD_OU-2b`aMB23CnRxlYQsHWH zt)20u@>0%S;2e0%f4Dmo_IjyEM*ffQmBsV@H+tWIx!u;O&pXA{k`AhYNw83wD%rx4iIm};$})l1vv`G*h8z$Ef)|Z_t_K4%oXS_8L=Nnjtna#hJEM1W zua+)r_rVN4qmR%iIPCgM|eSmxD9E|qEx(30l%>!+BVEz zl2H2pf;^btSKA}~0a8&IJX`in6Czlt%aH_umDTMGORrY(W6Qv)0HUiU_93N0qZVc7 zNQbJ)l6=H94OJckxBot94uMZ#+LPH{6w_5_1HXs_Y+O3Z5;>9 zWGH~~v?H?DBp&OHU#?IO&*dQ0GZdDg!$r~=xn&2}G}qTnDE3qJblWyi z(8%nl>&l&=MdR-&_>Lm6%0YdAThD!bR0@T1Kszj6dA&GXD6|4pX_##L(JU@(RFV2w z(DR=22`aJiJSh<(cc5f%zNF5-%jVzSW@yA8d%}YIwJ7mdK&j=}Y4*I*+w%sZXb3O@75@WC zhCU%`ssfm%QLpAu(s)n>&r?eA~L>d=O$Bc6dY4DH*sLIfPbKH;ptXl_V{?QZ2@1<5#^_{jkQ1P z?*ikBTy+;2=|`svPH&s5Rz&Jmp_9;u^yJTTIcS15Byz7B(aw>DbBzM8E(jdFIMV^A z{RZ<5gDGi*hN?jE;~Uq!l>bz{?=yBukM{DS;weub{h?BFZ-)AyX7@_!`#P3p$ue>r znkTjTG}}OvS6V?P&FNdnUa|CFLUFikd(01IBMj4kR1QsbdNL)W>O!@pSL9?o``{2- zEIi^XXj8CerGz z;sdhvl(9^KPLZ1+%<7vuu~`y7hS81v%%6O%J0Q$68eCF1ndkas42^mZp<+$d!7j7FNeg@^>Qc^)2V3h$W7D1K@q|Z_L|b7WK32tkJu1{H20mKY#6+=@$dqiN7z2y zv`U?rHiFLhqC&VAfcN>FRNto$$eJdKM6-Q0?2va7XPCP9DqYNK`q&~kNci+DR;3n^ z5MNUdsK*a5#lA%!Ny?$Z;|It~m08S`2-n5|^0&IJZ}DAXgZJ2VN35ll_VP zXT9@|<2Q5)S4g1jW1R# zvzk-AsDr4#XSr)(_m?j%pYHjEw05+rg;jV7wQMWHU^_1K&B<~`X7BP2ZE6elrebdh z>^}AqtYU#b4yX=8wq_A>PgxwXW}JR8oyex1)JzsN#KJCYn(I9;54qqbGzcmCd|%- znrUP`*#CFjlHuohUUdo0_o1&}1@E3tzDk0xI1}28U!7mQuXxnY10)oavBzpHX7;e% zUUN)Dz$9$=VZf!DIVSD&s!`kI9=YsQqlh!?Uht-Vbf1O=kbja6+1y49-roGpal1%$ zhO;UTuNUU#G7l_elu_vB;oDq^{0^({jpn5IN!5C)Dts!&Lj2&)O~d?QYAN!NK*R>> zxiZ%E$1N9K0!$>R)Sw=>c&HC$$VA8*C-f)fBuH}#4nq*@M0n@!?0YK~?8^8F-EpC~ zF$uooy2j4XkzA4iIVfdH53~Dut}l*yQBcgNnjHjN{Bu%*Y6T-sOC`Eid}lK!v-m|L zBj*y(xRtbp_g3E7UN8a1FE1ZIO6ak*2P0hXxF54dwl4anMC!c3*drjU*Ak}du2Un< zO-Y0c){`E4qf-(khEJ5>Qlo)6a=!NuG-0}S|Bxgf;%k%9(JT|M_o~B{kM$??tz`(X z1jR1|V|rhGNZBrmbvtl;NVpiciF$sKG!ZJ;EjzEf5q?Md%A@E^Iw&_mKs2yW5c$&! z1{5Ppf68PDz18fr$GmV0XNt`*9n)`85mg8SUfdFuj0a9P2hUA^zZo+ouAkSRr$%`` zY<@l&&mqz(fR{}(n!6^C%;Yz|rC=wZeF-bg_x>t+K#5fRf@@Mph&o|;02PVRTP6Z! zdB@d_K0A1F`ItQrd#imzDWHg3!+5`E>pAO4Eq}85PbBg;5tv0x zH>LU52hikZq9^|bIGETeb&-B03^zChay!Vd_oF|0uEO@4o8fHhef=X-78!QV0O*xR zSk?JA6dQNDT;pDJMKJpa+pRzl9BwGq>r&_gb5r2Iq0P*o_;H%GBEib9FT~i|M|5Y9 z;t$Vyo$SkjFbvwj-}bjh+E>o&wA|O_ctt3il(T4vLTOrp`oA8I`0A!a_jiHE@%V`b zZsYgLzcc%8bNdaf34for62&!b(FF`$^P;}rxjjd4)7}{jx_bVlNTE1qN4HsN<;_Tq z&M7 zbYzd-?l7zl_EAdcV88EZ$vnST!CJbGZJ%_S_{!x8!Ec42q>^0jI1GntHIsQgeCP#- zm&LB4Zp1d?>gp-&7)yCJb%h0H#0HMo(p=1=Ru$U3L=6SWxsOKjt6r^*a9vOTYQbFD z*XB%S)8<3q!#LX zpzG8R*(-UM1dK`7a>QZ|9*W4UpSbR5ayM%w#=}-~l{Pel@6AxY7w{*v633IY;*&Zy zAA8G@LFJjo3VbwdEDU}0hID*Bdg+iO?XN@FxFh2hE`^6@PORP)E!ihui0lb`<QJM zD_unYN_cC+@6YXD!u>}vqHKbRwG|4qi&0JpSWe|Dt?aD5Wk;Ae& zJbGpFbu3)~Cd}VLbvj|}4v+RD-d2IhOyDw%x|_o>vSjk!J+y_0eOE4txs#6;;y5au z*b_TTC(k+WHl4 zkpwGe!mkj)mBxwn{Q|ibb(!o6Z6%N1e|zNcw1XQ}g5%~paKmX^!ghf#Bs(q-V0$gR zg*JYr1U;J&!;v7_X>Ym0i;T?%Q{t32XN%Rl_==P{I@xy(3r?U%WlDN14tpZ{njBK( z+_o&^MOqj}j*B&p+bNx(7b0dO?nfsj%0mcCd>kuf;Zl9)1-#VWOG9+zAILh-WS|c+ zRiugw{c+*C!Nnr_aCaOxk;UE#g)ir;Mjy*(r|4?%zPoELV0F|FZ9_7^NZ8NsO^$Z; zj0S{iSCc2>*;+b*R1~049r30!9}f^BM;Y21`r?&2IF1Oh?uX+gC2!u!hcz4v+=ZWK z%g5PiAEwNE8w`7i>*-ExrTU&?jAb6k60>EgJq;#=9{Wqk(edA#|HD1KBGZTP(PO?) znrh6j(^)9>ma$rq#5_BGw%q=aFRq<$^TSFio%#Ar@wD+2F8kx^fg~pFgZbc`R{18z zYN@kozNwSFqYfZHyL08dy}+Q~upgAP2aJ}qo*#)z6*QYR`7l6h6eD3}gx^;75kae! zL6NUogX3YA#^C+c`ikO14=vBH!WYk$ghj`+ui`)V9liNzdGR%%x~+K#&$!U9Rr{Ml zE}D+F{|xnv(!?XD^(VH`$@abY#s#)~(?IUf?EIdLM6uY3gP;;r9-CR}?nz$TlWD8e z39mS5Nmeie$*u(Qluf?Onl)z7GueE!w6kF&VWjb5al1~OCof7OLM;2(hBAc{3iW}X z|Ea#a_cWRP3n+MvQQ5kD>7lk(CvH#ab~}rlMg3Y$2iaP-B;HI#019ncoPJEu-cJTI zlOJwcwI^nglOUt^MSdoCP(V3Pp7ZQN!j(I7ruez}V`1g~y#u+)O;a$5+qchm$nnRZ zh%-MO@hxR_|1HNpF^rE6+AB~2-5~X!z_3D2(6$j&^wvFeAT+56m0;?)psSHzn#O#K z-!>3rGKdpTP#LWEQeK~yoPJ5x8hCwXgggh+PQ4*#82pV@*xfde)rDFiI)I{!PMJqt zcs==MvTjJYNc^g)@89_qTkJ%!|I-*KR~XjhzLlbqxM=^k%S~yo-OGDA zKmQh@PgLNgEItHd^d+uuEO=mX>>e$yU(oy4xzS7Ao1~Q_bmgPjHOc3Of!BwJjwrZ{>5a4-U}tXgLH+)DKoXY%$lzU<~1_m^Z7 zA;t`I-UH_oscEDBB~G^e&oBmlddd~L^AYHik{O(RHIMMHG6i^{z&;8n0zIvn+R;TD z-}7Q%+%y!U@PYg`U>19&8n;G3``f4$_b4~>S99II z`f_wc!l*&bLXYPU3bM|1{nlBrbGt&P#b^Wg{6j^Wq4?|Hx&tK6CW9Z_^B^P)2Yhij zpehrr45PTbtE!nY(392+?EDKD{rs?>5Hp9>v&di55bjb)H!&283Yj>xPe$`LT03?1 z$#PydPbYz}EhKqk@rNYHy5ZNfv=-+g)0Bfx*BQ})6S7Ql_U-DhA(O1(F>0xM1bN~H zz3ICMd3>9TGS9K7u4O>DR^=_|Zv&%m!Ng*b3c|aeB7a0?c^+|@HYsw}lZ{jwW0EC? z%wp==btXjwQ_u z$p8|JTSa1G1cMkrVbbI18ssN6@=*MFpx(Js9@tqf#!X*92%UswZj*|Ado2^yB1|fpIF)Z51TVdf=;zoqiKxNoQCvygd)^O(3+g<+N2LHEo-%Vwn*dGI zgPeMw8@nj6kFf6bQ~dQ+V!1`4EK~u+Wa}uR{5A()jCOVGa4_$&a;@xJ5Sq7;28~zP zg$SIolm6()@(= z@m(l?0`I#CN34MdIy@8s$QB(1c4MK8t#L zn(u_?e<;Sxz+E3Me*LZ$Mo7RSm5Mxnk7b z5b+H-K3T-4duO)e>~)G?S_TCoQ%oh-P5B)hkpsO>SzPE^cz>JCxO0*ZoWt&C++kTM zU%*ONv#C-0UU;gLeiG)0Kdf=1{rcq$9WWuL<9#+5dWSVd{4s};E;Z17M?a4txEDPA z(*%R;Om~qCJ_ab1({%(SX?+(=mC~u((+d+zx!5cj_l#FsiJIXiwRxYjeNTP(w+_t) z&E9DE8udz?O;?uD`uN~TV7%T5HV{&LiHpQOdYv{~-F+L*6~T`!G|`C}a8G?0a?!SN zX@eJ@z4t(Cn*d(At&iKec)aH4cH*KbiG zs9{A(D&Zf;yu@W3-NxE0I@^t=3MhRdo{j5YyYp68Y@q+3guLZRzYvB0+Fh$ABv^o~ zixBWYPki~_H;}13Ht)F9tV5jw|A{x<;)Wl)p;8yH79yCz|8f9~%Wkk2*nwjiR+5^n zk0qZctE0&x6JA;M-qY}@5s{rJ7r!=dx(_hwaA{jE>)%@Fu_4j3jqhy-EL}KwB+RBl z?$~z!mbZG)}(!1 zh>coR0}Bp3-WIOubw||(z&{or*R9O2tp`wQ$Y8O{XMZ)~& z_`U)k)|KPq>KX;MHE9*GA=5XhRHXt!IJ}6Ed(=aPhB$9pG62|$I2=zf8W9?Ae3&vf zm6gMJfmykdV!5t-L_qcjh{y=gfs@>F5^r&|4x{}`enx;cU}lCxvBxqK0j;d5 zH`X!%8HWRm%hwRu)k2$#u7-jKFI?p;^+OT^tdVRKJ;X{al3@7&(wZThGx29%8Z>$3 zq8r-o_Ng-3a1gU?=RI3K5a>hIA0|6_t9VPjhd0m|xQQ$j2C#D=fbu*o+x@7!_4LT! zw#Iu9BC6Qa7b|Bx*3Oy=|9=f%&R#H^ccVwQAGVHK8C>BlC>C+$UO9j-mk|Xr-9c3_erS5wmR-YD8rXvTqIX_D`k1n=Hub)mppS3viQCHkPN6E8lsdHeTFd!li>9G? zkiwgD>K#jy!A>3std!`EV`$yXt|+Vpe9wD0KgA+igSGFTlp=6Nt$HT*ks_l6C3f2| z!AjLQtLnp|Qn?$;0`xtH33%}CuSQg2Z5MQdUXNG&Av!>?N^b31%P$CMVohC~y6n5y zFvLF1s4wt=*r@N2m`j#;8W!jiRjK$N_cy9zV5@jS6HxDM|rU}C-4u_D5BS4v+wF)l33Pcet ztUD9~N&{dFsR$Xz69Ula$*)rx{yZQ5-V8u9v}wV49Hc3HTvDd(x$#|fUDy$u2(wqX zg%YyR-b0>g!|i%Em-k#7!V;V|P$&r$`AO^u*9}1bqhHQ6myJ#ZDIEO~X1qVMNLna+ z(t;WgaH^2AE46N&Rrl>@jm%{W@6r#|^Y&ftpbwH34)^sS=mg(p-2J!(IWV%}6VsG|3IZGd{Djd%1UE&XwJyS3y?x``B?e%feRy;pUTfNl&2fAKwW!);ol~w1vJ61<+;sfIT>urI~ zxmPdO^Yehx+q@o<*exda@zBaoGD>6fRG__-Hh@`Bf5t~PviDx);f}Q&NKY%q?9HHc zT$>Qv$kgnrYoVd%TBurdjsA(R4MsVAv+k(ZW$pE-IO^%@JCK|J+lyet36tTr$;8yr5W@fnJ80 z>~Fy+F<0wO;*&jDQZhuaDEm%T!Jw@eS7^`qSOJnN0NABR%@0)97IX?le`H;=HnyVz zGBp+m4{go7Ck9}GZ*H3K=TOud9Vs*#3ZpW2cE=OyDQfpy?6H)hX7j71e7A#s*zlLw zS9Boei2fn;Z7-cN?=)YlT+3Px;rS zCxevO|MpdRib9|z8_&$vlEmv)Q|11FVnyq_i*?0M=+C{MJalKKCXSjwx=+6ZSxjOn zx4#9QNHuY#rOkGfoSJ0RF3sNyZ@qa^enr?H;V}7gfx-Z`m)|QH^V{c)PC^1<3X@#0 z9YtAMrsR$pfai_q7IAgTL>qU%pN+TGI(>czPCPxZf14ZC7{czz7ajRoAH8cD-VFtfBoC`1(k z1kFnk4o!X%9K5L_{N(!A+gS4&&}x42MIrV@o0}$sag;ompm5%lTmM{N-{QOSJ z^_!F+LOd_Z-e{AJG_RZF!9Bw=|K!tWpmKu2wWY-V1;j@ba^=n-ByF(V+n)k`EGbIu zVxCyvDP<=F@)W`xu^HZ`l=TU>sAu{@`Ezv4?t!{Gr5B*3{5%7P;Pz3s-9gIRfG-)2 z@X}D#y=QVC%8Q?r*JV_mYecEckz)%Fje3-b@+=9p=oUJoO#1H|*UBi{=rzHsI0ur<9DNYbThz)J;-1F*#`4Q0*6R6iAD6O^+2O zwhkiDNfw|iT~-I)Hh`_rCw6X3)nkwUgcniL9JYisxyG&x%tu-BDeIYVSGTEDCWTib zkdXbn2fCF>In7grkT#{tKJW|SjWf`S|E9LX(yLXxEb&l^$~H(IZS?&EB?7&VeAE@m zKB5b3-zp}mWA*6gibQHe-(IY7eou1x9JxJPYF*M#YbuLz%F6=NkxeJ41}aJ@dKiTV z?sxZQ$kcp#ep#U+$`Ei(pRlGD)VAedp&?4QEPi^jCVCY9r|~kS;U5Sa;IXVn_mz$C z>Q=PfSv1qa-L3x>twY=+%t-m6Na8onjsMqZkihi`d4~KxW68 zPt6bClvM{9dOR*@?+E))a2_6c_^m_ci?Bg~s4mX%4Z2*QdNo($0FAr(<_kvot7nPh z>l4Q(>Uv?hTBG=puLEL>#KxN@W=->&gU8i(j7>GRPOsglz}$REjiiXgG47YVmZh|& z+QlBDm%kNAzA}qqWZyJ)!aj26CzeS4q!#9CcIsE@_{7ca+-xyk%kbdyVgzy!QLgYa z8?Jt|a==*h%=~hc)pwes;u(Veu1;&9>}DkO|;!^EwBb%iwCJ9(0ljU8Al zXAxt`Y;yv1Wae*uT&BNx3r>keAL8h{&rOPx=yT_o!9HbG5-m6nsr|_pq-SmcO|81+ z>Q1IK-C!)lZ5~5?Gp>vGC%xlZ(>3xEeN~w~T=ra3vwva)K&bYt`f%M%HdpaA&g$s) z!OGPQi0e*};*#k-=NumZA%s$)in|G=#_H$mn4=ZIdLl9+!sQM3;AM(>$lf2p)_Y!=m90C02<>|Wdjy|hc zG8Kq54%_?|_hH43U5P}ruCrd2Ea|)lHCXCd)Qw`gTpe7=&xkiGlgeizH zglG_gf#z%ajGs2P%e+pkSI;dW)pK4Px#pJkV2r~{%;X-?Yi=@W$pVV^9{06akP7&W z_wFip->Pwjz($sgD^a!Sibe_bx1I}e!FDb0Cp~!oDM^11o%u<|0UZ7n^i0RhU+AEW zQ-n(LwOQBS8vgzzQ}l{6?^*Tcz2dZj^wBsMwHMzt_67Y-=bYKI+ctDA5A5FF($#s? z4`x5!|EbJiQ`;om^dOjJV>q^xr+ZI&#SA?c`3D>yBltr>@k}Q<*g*HmMw`X!1_X$a^>+2a4P93Pq(t3 zY4QNCOVv!ssq1J$1HeF$!t_=IPYk^uZ>gIGbU(XX^iQc% z27hw6Y`HKT_Vk!d(}lK`wZ|R?@Up3Rg4yn26fga)O*_v~x3*q6d*hPB3Mb*2i@9Hl zThqMO0kqn@Clpu(j@|Ls7yJJyW*L9RJxMi3i^t=S16XjB3O#nU&x{ZNu}LP3LELSE zgCP%pwpyyv11i`nH`$JdZ%H6!)G{BZ9NG*xPR z_f?EHWHK{Hp5dkaItpsXUL$`_Q};3z(u_8RI9Mj7r9bbNauOmz@aXJftaK{%(S;kZ zs4XrxW^?_u*v{_URI&P^2e=Z2SzKuz1+rQFxD*QjQ>r5E)tzD_3;_r7rkk_dM`F9% zwBv*zXND6p_k;%rb|j{7Tqzf2cYG&xkPL7s)6sicvR-l%C7L{PUOGw@$}72jg$zmq zY^vJtZ1VW8*hFf$lfIP4?ue)%IO4)4$Y7oTA}zM-EDpGNkozctTo;M&3imgaSfHg) z`H=B$Iy(GiuL^rfCqf6VYm>L=UmWpHS9cuqhftpSF;4e$zR`3W!tCjw8HeKAibJdm2nXy?G~0VUvt@$s83SMmH|!sH{;x&7uYIW zmK%F%EQ>CBxATqRaz0P}e!`l5WvcrR6z#l~#g_=jlQYFiN0oYTzdy4)HgUUptH@X7 zR}8=PP>w7+Kcwi}W&=6H?4{KHuPw-5M9{ak-rP9n@6O?8&x&*nl>dRe>l%r88DOqw z?p9K%7#Vh3*?Xdp^Ia__*W+u7johmxtA8L!S#fd3!N)6xkv&C?FBdjT^1i>T;Reso zh=gCfj)%@Y>x9->0i%P%?C(;)$OFxZ}pKfFq=OP+vJBC03=BcF5 zrZH-lKZMT2ZRk2F%6Q1;0k%YJ8<$3ehC4+bCS|~CnlI1%?X4cS9vN->{VJk{ODe@Z zb-4mMCYxK?#y-vqi`jnyrQC@$>H={42*#r!mmi-G#1#%>I)TYTRSvWKEAb*r49k_b z<&B5kETP}T@Gp<6Gpprz06mGp(xB&(+2?QF&dRuH9glF|+o^T-5bqPIFRq3SZe@Is z8mPR<_PbTeu{I4ObzYBhUTg7O`D%O1zZR>C3z`#E?3|WQRDSOm)X!l!W2LcXCtCR* zk~{q+%W79dn8k)Q`HBKQ2g(zu+<+F8Rn>f5iCr*n`qQdqLoq5V08DTGCy}f8gy#ci zO^O=+6T{iMrLe@%J6NfkO=4cQIAjQ~Qd{AnCF-)nsmwU^v37-Xy!qv;6BW%l{BaKY z>;u=~N$n6^>gm(TGCAg8t^KAIe*543ZdlQvJHWin;3Q(*=$7G2dyEgO{}I8m0GIlS zE*JeaO>)&$;y%&LQ}@gVAZCRczaJKE()?tblp~a~ZMbn`|8eU}^KNJI{8y#@@(j@k zM7b1uv0o`%P12$<()3y;w?BE~y?hPKgZ&tU+;UxI&x=>=N9DC!`qF7pvQsq{Zr;)Y=!uq-v73d+T8+}|RF(}?H-v^h!t|xUry{FxUUOM>9*K}vT&!BX$ zwVwGaT?^x=Gi7nAoz@Qfd@vizAww?Cd!$h@^c&Da)0&dQ`xR9F*s=)!>PjU#c89oE zdSZWA_7?OS7EQW+hvJHyun@f3QMLDLXVm)ffnto9=V@8e-;qQ6cYpZ^7Ky{b_GgA^ zX({~*Z~74*r~cw9T+}EM=_${>{B_sC5~1vGFM>asYwOzBcMGtR%qrxg2@1 zh;MHcsKXLFU}ZZ*0MRKq$ERGUXl2i4?c}k5KRR=ORD1WDWb0F#@L5Q;cxp(Hny1RX zEJgzq+B;z+NK4rm4B8|z^~%M*nXrT^PG&~J2}6Q_LAUJdfA=2q^*0*aPtm!>;eNb} za95Lu>Nnd2W}W4p||DU;#lAQN{2zm z8B6{{6MLa&Oh;v2(m_J_V^{VqI6Eo(O<&UkrGAPegELg7<^5!DJarjUt$RR!D6nRd z0Tz5WIMYV89_0gHtx!_I;Dd>qC}t&Drm+e&!BIFQ8|-HtGhkIl0wf>t9kQjgBp9F< zMU(~2)O*|?IVeR_HL<5n6&fWo?6mo!zDIzLN3>GRh}9M)4VixT`fn4xhS8TI4))`7 z)0L>i90-KZ$S`hRZt-}z+>-oW99gU!P>e%{gr9HJ_%JZSc>sb2-!%J_{u#3WY|ITBCk+;m?RH8+Q0GLQSiJ`obGU6eR`{(80E$Fv#|bd-TR=I@K1u7jAaljIT(&C>BWorv_cPw8Te}uy0m? zyfR3B;#TA!1a?9Yy$)AQ6npP)OK=6>E@XWB6+J-~0UpCw;+5Cc-%$dXr_D`W(_ykJ zf2w5Xlw(5qG3YQ`NsFD=_l!ng89oAEeQyFu(tWe|*GqY1Nr_PyPaZjAWO0puk=t+e z-A8UlEpQYW6tTwH%3|p$)ZF;!Pc+A(x5-JM5a9My`rBLI?|GMA>%L>dk{+Vg3@>u} ze6fSWl1uSMke=QI^l8+CO17j$@02G7C;>Vnfq1knj%K)sQ)+3@P`GMHu!BVl5DWnR9?{A#BPrp13 zYZH=*O9(TyNz+&hg)jfdVJjw9!0k70fz~_>zAVob(;z;v7;4uN~oKc~PcMz>p?PhT{5@Xsl}Vw%Ml@w-e6NP;G&sYPUG#F_U*sSQ@y~`YAuf z2RXkTF*A7+rV02jx4-Xah|g9rGavcbtiE_nxUkuq=(zn$kPAo2?Y(UokbB+lb!5s5 z4m#MKm{8f(KR50?xMQ@z9<3W~wU5d&X`1#-1}DpRTcv-JC}&(;&KQ=y$U%rG{I@6w zG_RwcT}bF1CR~iP`~3smSdSHOXf^3yfS3Q;doxo{U;n^+Txw4wROd9OI7xi2HxLvs zI6xl%59G3o;ndi@HT_nJQZa zr=(?3&A1E_Xyz=$B#co0`9XN_Ly(Nr*;2{XuUrm!K94(JXU*n=m1^kBm3z(i{<~lW z@bt3r4|YHOM|VH9qSh*HWLXqzMc+%4E9u%>RCJcH>Eu7UPaDNO|I@tha=l}Wv?j7S zHB25K>pj73{Px4Ik%p$=HFnd!4;tIS%UpQ^x!Skl2gt3aH3(r-=+tzH^;EyB8|zj+ zOT5B_>Y9#%*Oz+M8SHzApua6WZT3=UJ?9l020ux6A+TZBlG4>BU1gBzunAuiJ;wIV zZ%p|PYxbI7?kuq@ZTqjzVV+R(_mo~A)Idyy3uGqsL^ts=bFPshJFkN_~7G(%GdKZ zzo=AoVTI=x)7A~5)ER>Ngda1+brgl$s0pN8@Z2|Rg+j6D<;>w9q$9~2b}w9kgc@V? zow<>7yTQ3-TRVN4>s3)o+@0DpV^3oc=t4wmJ#TD=+Z)*vK{=}~(4>KW>hbfVZ`$Jl z>nJ%4vxu~N8a8u#3b(>E2<*RF#1D|3hfP$L@^3eDz4VEwG?R`%7(3wcgmaQ5Q3 zqR4qa#o_k>aN^Of)(%A5SWn2uRVMFcs&3mq5O5@RCzHwV_ab*p%K(I*IcxY$i?{%> zy1_$Rf6Bb{eiihUaa~goN3SZ>cBT5aj#;^-w}5@BguZ+nN7o5q;2R|)un3=qbByL8TGSIPf>gPcUZ>~ zswf#8;fDX*7OVY39*nwUs~%!p-(eUG&-n16=(6kZCKgVok@ zyrJ;&yUOdMM`aIN<((VNI zPw1VQucbrsV0E-p8SwaYEun$I9a+>XOE8;sjk_fsI~{N1Jr5i?8fEs2pYd~%=^$vb z)QT2P*0f0C=FAqF^&%)VqO3}Wv@l-c;Ve2kqHE@=YXAYg*yM`obkgNlpu(iMg4xQk zyrEX-mR4eOX`k!TKDGro{yeudEWDr`5UD`&FVbFl#;bJasZbt|YZsPGq2nD`Z~+1*h^8D0m!Qra z+u!3cb3w!j8Wn+`Z&$927enw$D-&8hJN&*28GwESHmpV#BFaKd>kU{x%tE1R8$|xB=0_72@{ICK}>Y3JDDo14* zr{S&|%B*SDW)n!Ms|RylCNAL&V0*s^yTs(@&O?XzFz` zFvL>Wx|Kxrmk{Hcnyla19o>8)g5K1824|)m%QloBEb9g$K80wfsTh&n(QN$ z!TlF)EBiHrApF}Si|`^&*;(Vs%`Ejy}w@%6nwWOKjMi?K_~q& zP4VV6=kx((b3O z*ad8$TH5TxVX4E2MNK)>3aM@NXx`Tqmas**V>A4=H6cAh<6;)}7X*?+$v zsVZiHR1E><>XqW>hds+ny6B%prM)>aFTZXW7tdR~{xN5r8^507f`&dAFPL4#5eIDc z%5R{Za_r_Rj!vJB7;)S3jTK_J9ot+N(>jk8AdPR-^omW69vF(v1 zhSVWHmH}-oDNN=C!H%}|@|B^7slM9=pQ1~j_hoM>|4bVo%@zbR!nak^8?MX8!8k}q zB~Mxg`Wr=C`ZT3j6C+e6q-W?;UOUEb_nM}+-NdI0R7s}{`<|j)1-cgbhEvu2Ik$(e zseJQ}?9XRig;T7gWyj1XWk^|45*<=Pc=fE^KD|6(R0--u%#{GW4OfT3b!|$mPE1%j zI62HlE3|^~CuQCnEK(lZmq;n?+_{on?k)Iz8b2c?P@R+^w9jT@3Qoi6SKK!mO>iDq z0{$8{?x6I}Q{0LV>`&Rwyfa$}tF$^%%EXn@hj3i#_=e%-fm`8l=i>3U&h>=?!DJ@f zF;7{=$mRICaauFQUzD?*M5M8b#k|8eb-i^|k^CYyWFk#-<5#6gRts@_DzXhb%&ZPV z)E<=^+~^!6)s%U)KzYAqgb| zToMS8><;Dmutss1?@5Qk1nrBj-;oaij_(F4^ay-V=5lrmc`4#&A7y;q7fE}!6aNqN zs?;9AXoWp~!iVz(FaZeUi1uVJZK)@m3NCb9YH#Ahfo%p9?LVNKe6Fi z-&i25uNzC6n?iQdjtJBU9aF6KK0d6G-yO#?(o)PRt@DXNSy9W&mXTh6hkfNz4JIA| zCn+?5TkobdZ|czxkoMSU@T5HgC1QwtP0Q-V{1MNPoG-ID;7a5iX$%0NymACf)A9>1B>WFm?4z!AN-&ovKJYmo#B#CB4Ocg z?kXle*rK1|;GuN;?;*?dLgasNQ9PrY?c40va?AkLbJMuWl0u9-8pqkR1LMaK+l*V} znNANMmx$)#IvP%*<6d4#oTh0cAWA-@=}>JM>f!9K&a3$*7o8Q%xIF=nVG%IZjC2tt zTv#!i-D)(#Tnna1YIbuPJImutSi^ZVBxhdu1Eb3X6a>-B!V^cp;F;2#SrEt9NO zUuWRn4T{E7r8$_U8rp!0 zyg;jxt+kffx6ylO;6X(4*?N?}(WqRE&Z+)#)bAjyG zp53u28mhcu+Hyabu@OS@yxvaDoRu*_23N+gOde7@Y+V)>F z#31?nN7+(zZHg>t&0%AE%jABXQf7my58w0PYwah^9tLV=1Zm~$12)FrZ?!qj2ROkf z23YI#zLTkBhy16ywDY-r^?NBex|x#l*VT|cmDILB;+@I<#5NQ4LY4W_)m@6$MHgR8 z40aT7Te&2PQ0VKE;E_*xten8E>C|C}H*~y+S#I%HlyQ^i^7(Ifm23Cd^@=V6YRpOm zZ%OFnTI`>f$Ha#`k{sVxj$6C-f-}OJv>&}%!gpPX?w4EB6!b+Oj<{=X4Oe*@U4(Y@-FTLBDIFzBokn$;X{!QSQlRB&Swcv=K zTo=3BKntN}y~1*xp0xxNi7a|ADTUBIJ_*$1AseYso`Upf!1JOwYY0PI&6|tts^suU zwf!Tb-~nLfh?pr5x?cT34QyPbV1^jLm>CK(q(stLF8VQvaJ|(<`MqDut+*#41uN29 z0J0V#B#u{}c`YxN!iyLLd_2p)8;cvlCmHa{*ijFgU0Jbw*C`q_!yqaDpC=P)Av>&G z1NKMR(!-u~`Ze?TO4qktZssb5!K!1$w?+2}LnHd1$$g*Q0=&N*l zhRX*QIG0RcHI!!>e(}YkCTt@YV?LQ~aWTg4o$6US5^`l^f5Ei~iG=Yf&N>F=_joQI zE-d?OBJ#?v?(Pj#%2?cR0vKhjaL*ADNbG(wRwkf2P`LYKCdnqzNSOx7)hoF|53Mu8 zgF$EhUk+}+Bmac*r@M;D=0kkJa~6-o*bxP`2|z2dk-Nj=CJ%1spjN%?o54b}*GqAr z{@^Whou7gnM?dm_{6-jk-2U3Ha-pagO)fnVPz+EPpW4OuIcmt=T8biUq{aqbNFnCq8I zJ+ur+aU}mNxzb1vgRL2Vzo^-!e$N=u)kfj_=ULO*!?f;c;R_R?U(xqlWkimJvG2J9qcotUVTLf*3|`^p5LL>lG)BHx*k3nh*_7QkkKDo^uJac3Naf= z8*2_w?R}Emo^TDvK8+>Mx3GN~y!1>Qgg!9#oU0P1A*$mF#|pDo)ls|;Rj6xgrZZ1- z4axJ`J)9~Q*OBW|QUW)O?mBXqc{R%qu=WHlqzMv#ed?*Udw>~9R;V0!5$W|$!6+%j zk5R9dh<@UmRyR#wA4RxUj z4e_Q&|0o?Jk2VO^KmQCxy>V0hyYUckAbF~OIQ8H2m9xK<`Nc$o+PL8mzuo^88V=cI zo!ypDdgT0>(A>2D^y`+g(z`wBcX+hJ!JO^wj4#5C7@VU_7f%)IVQ>%hh42MI0Lrs^ z98q6wTYg)*jc1Z9w_kOuV1pN)pdgx$RZBqgeR$g$bevs1U-lxu&Vx&dUSztll{J`v z$nBkqC53yreY5-SG|;;jGKmWvDxSheSYJ>0kQS#w{9V$3SxX#u|R! zS4`z~T(?SAH>ECU=3?%d*g=}()8@!QW}4rHyO~8l)q7@2_I_Ji{WO30>rvI80Ertb zldbXvANJ4#Xwx$ENVrEZZD7!P>i22;;9ZVxbqDOQ{$(RDV@d{q;e#z@4ot9)z@Phf zIMKCrs^`eOP<=wFkZ*-?AJZGSa(_|U=P7Bln{N&R&U_+aiu!?X5!`DX+R&snu>r`S zJZl@tZKpUhMeWg8TuSbzP(N**^}8sL67B6@>q`igo#XB4E}|{)$M`?16PIm<+j#LbdRVa_>mgeA55RddXO7j zboJ`>EkZ~)0Ai0~b2bVBdZ`!)JGK1o+}$p1rMul*Mq~%Y;?f~qSU+2xe5`ik&qvjQ zK(pZHg<1b1q;P~KWh^f>ad}bIGO3v*rzbgWAK*Ho@vy%|UH>L=LBeJFg5BLK$D=lV z&8a;Wcnv6@oMoYJ2$#?h8u!ohQ{{y|8KJJFuwA*s#0m*kN`tAH!R$T&s6j3G)7CV8 zLdxO6rF)8q$nBC_su93s!PHI5>ub)b_>>e)9DZMh6!w)+6QRJCk1UIY7*1QX^%)(k zdj74GW4WB}n#KZ^b0yGCkXx(W`=ka2Jei!9BwrmU3+4+cv)W{347EI;LSlp;@ywTh zJ&l3w|1ELPc)8OAZ~vTyy%Rh6L@eWWOiO&NkQ;K%VjQ zDwSjyzXI=YZt~uoS3}(1@328!I@E#|q}Mwz~9EOEW4cB3*c=Z7SB%IVFa1H5CPb_tEzlY-~Z? z17YUrHGalRo?Lz{6mYCD_)>Rw-?hMtHm`$V1EzhdO8to0^BTNLN~a!kyTRU}<_418 z2Rn`R#@MR{^~S2lBjUOMlGA+jg<4~gzY0f4rs|pe>_5g!0QXPr_i)4PuAGLC!G%cz z!l9{PIw*YgWypGPpD0m;hetR{7z_uP{iY&T0|H}j**ZbX^6NN9OfuF<=n}E}^w>OM zfS-23dzVcut4Ly*6v26;R#z{&S)joBqwnP?xxAJe!X_*yta*fj7pyqWFzi_Mrrd1`;kUR^L6lkjg4d5R{oVZlQ-R2~@ZUCL!Va!M8{>~!(G`M-X zyQ^|L%f`J=yom-3YLTxcJzlUx@AQX`N6t|{{s6{nFxOX)g8QZ4e}Wq;Cp9yL&MEl7 zF%I@Lx6#LTFYf}i^TS7_bdu=khX>C$vM=1N7K`7^YU&e!;=+wMB`i5vAu*U0`wK9ACQX5K{nb;KV6!+be!(&hhBz+L7g*Uw{x~ zm;q|3L9b)}i5tf!{Y~O$f;ws@=^k5udfP%cYZlA2}5 zB9S6asLqAdvR{!QAY}sfg9X#Kn-+r7#nznszEQnf8+?5zYr>>b47tyy4(bit; z58rM&X}K3vk#(wlYmohSFR5zLzCH(P5KT~^(^1|_%uw;_Evve%tbkGQx1eEpkL^3> zLwq<%bi4B{7v~JWcF#3khNL$~wks*LPuScdXYqYd@5_D7w^nxe*zYl6vptGivQ!2a zs6N!cjiOThmZWDSJGGcHF z*`pN%^0(TL$Rfv~^5@H>E6Vi-*!P{OcN?;A@jkfT&%5~4N;=gMb7_ zC>56JT{M7f*|Pwkd~Fxn`c+16URZD*nGN@>Ex!N+yDbP^8bZJxdzA!1I$Xt^hqLBj zsSN0s*H*J-^%MU@crweH#&Ltt3SL_KRoW{eLJs%XRYwnumGuhp@Z^18pYzi}Zj6;b z=*r&&f5whpDEt+lx?gs=JNls6%%#@70Be0Q)5Nnimg?oS@5ir5Zuzoh1tmU}#8Qd2J9?n* zEy_?iLMp<02cLe4N#fdE+H!24K{A=(JO}&`i!PDe@z)D*{ z3NOt6TtQO5Omaz|%r$~3zD`^Z9fP(Y7?2w`%qcfS3d8>crQfi!tH)eBv#O98j3shcY zN>j|oa$66h*T$#wE^Uw_#VuXdF-CvSIeu#ZK0fn?_Cs-?fMWr>pi8!j zr*pu)$Ij%`S!wXEw#Yw|{SQPdTde0@;%Q_21aaHR`uh`clBQl+SeeVKU#oLL zVccC>Kv23{&{smBT~WGA7EN;c_z!Am6ZK14j#3c9p4~*_H2*!horc+*?g=kz{_%bH zTlF`DLtInqC7WyZf~z51lkUGB>#))Z?b$0ObbR>Tu0ECibpFb{>OJDhX<7fL0Mr2F ztsmGhwsm)Lb9FOKyQcHaInQnV%J}&XNfkRtiQTVs z{_DA8G8T4+ub`Jr`N#J=10qlF9bIuqKQVVNS~t_PxXRP-wVWKKoc~chv5uE9?EJ@W z(?4D-?j6RLq*e#^{{ul6#Ow4qXR_7E@6C3fn5U>j+O57|gAkL8gQti`p~Sf<0ClVn;+uUG-tJRUoRMZ86#NF&f9NBd#uuawGvmLh*8R zu3pgnGUomZG+OZjG51vgOFIwH@RE=#u9o)t(s|dml|$Febs5|+&%ZXHg98Ch2@ff5 zLb4K`wCt*k7)-2oiz(0nL=9@d|wgcbb=t&aW7-@ru+cD7> z#uDU4%!lS%QhuVkx3bG5v%u($#IT_-3clr^c=H$ecXNL`Rx3hJYHIo9iI@$E-Y7tPj0;_C;)1v4# zGu?kc9URLmgfgtQgShH2LK$nSpflv|rsO;xi(0T}$8IbLRucG{B=FEET zXp8mBZCE)IFQ#A*6trNlON|i$k8klzl9)3x3z`BTbg3Qs9LqTLn&p*F=|{PqSwakK zYx<7bUAf!?K;$gx2tXx^F7%(v1rGS?-n4=y#gS&twkqzWBBWd!d==-7CQ<8*c|o7} zKc~^I-!6kVnvb6Fi+|JugUD>A#@2l2`4}JA%8WzthI&=8?;W^p96w zZC$UIFsl-{k+0OnmsL}hRXokddZ~M@|B@l(S(GwsEMvhR{^xaR{B<|$Lm>ae-y%~< z>~doT>8>i80VtRYol`*=5GZ@)5l(5vV~Sn@e~<^p+93 zKVK+n)P)#j98tR?Y%Jtx`hmAe$u~s)&0eRp+*lqff(HzTEo|Ada*)RAr=cCV4MBH9qFgN97DZJmTb>hvRfHSW1sUX^N_QrnWL!t@>e^@E- z71#K6IS}Cq+*B{xy?(8|@}=r}nW$it^gpN;-ptl)K?NS+~EDLao0#NDSp~Q#$oMru51e=T)7_Z$H1IQxG@2`|-5y z9~<%eo8E_?{{s~keLhs2BXeneLl5(52ieK|>iL47o*gF#YiT{k>mJ?!G?0gzMBi@= zQ2w9AxgXd4O~ZZ|Y=tR6?lZbV@WCqplK;8pZ!SN%aj?R&12|d$;eP8tMwKr?i+)a_yq8Dq^xrRMH7$}}T{|E{%%iNwzc#`szHxd7?E&wZ;+GXH5 z0dk8_Ik6^+1p3z_OF{~Cf<=g_Hsi96>1n8H*g-|}(P-;f<3&8I{GpaEFH7cc0if&5 zv#;4*sfA5<`^ir8c3;|JO;}3N_I%ylrKa4t1G-bG*b}1iS<_kF;Fi)^T&s55i1}A@ z;_9n~2)Qitzp&>v6=}Ikx{t`MIWjqzfryczQ~#}@%uSHcxPBmls}i1jGLx>g3-UFd z%hpL_1Vi@w?g=%*y4N~x_k4ito|_o(Nrw>F+V_g54KM@Lv3DM@wLx=T=kKxA-82y{ z-rn?1bpg+$dm1OQ5lfI*dt9d!B;3u3D(2Yiy5O2u|sp*z_+VVIdFE}mOW6uY~ZVsy>`O{j+| zaHr_8J{0Kc{4^BybKzu2tL_`YfX35dO)!4cc12&J;YRYDiNS1u&*)n#F?%G0|GXx& z7)(|f&Pi}Wo9HfAaek?5B4MfVW;2GCI+XD zcO&imt5ze@9jrTbBI=y1ob&~qN&d5=wvgQR0wh$%JGrw=U!+yt4urxR4~~XBnjspe zz7T`(VHPkL#@g_{sGKmTyFoDbxkh?i1e zWu`E1msY*LL=CDW_HP+l*Y{j2lwAAr4n<1mH)OOCC?=%hN3%F%p)(Z^qMLZ*eQH%E za``{=yO=^3N6X z&IL&73`{<5?D=7?h_A?WVNxfCtZkYwV81+JvC|z(Ia0VS8|dBwi9+XAhFX*f|7c_` zf;_A0H7|d5g~TdmkA+{%7U&<&sHhGR>NN7a z|EfOHuDAvt8*3)?jn*&v+r6<8OL8P<6(w+d zk)5WW`%2xwQWF@U_KV`%Ice z-B7~bb_n7@YmC{Xn`Uj6vv8#=K8Sr%+TD7j}3~@a$8bk~Wn8y{mn%%iZ|n^oIZNQRT_<^i+@elxw|6pn%&U=)AAuvr$X9ajjol7IGC#TO z(76#k$Ps(Gwojy7zaR9YOGpFMuL-fH%+y;)ahPmdy-m@4Wy3R!r)D3>maZ75lNCJ> z*^nu`#9aMbsoIHp$fl`7Y@y!H&CP|tj^O1l7Y~}YX*plJd$sPeoLE<^y!vh;$}<~o z%r$PRa7XSX^JHP_bgY(Six9w z&W3ru6l;-_wf>oZCqS zJd^2{zK{?2BD;~nku9>xwdlIf&K5qKCY?xAf{wV#7 zRij<}Rc4;QGVl+5agn2DJ@-5F>a%5mS+5s|=6-73!566Ctp;Yjs%(uUwq(mbomct$ z&$t`&XLpHaox7C!IKK-J-Ve>~w3NUV_lM5OVbenMuA@@pElkWHj*8O|_WRiDlewsD+V+YVue{Mcf}DVx_UM56uC|B%+oH$VmV( z#*?XlKhJrn;>N0?^`@cL7O_*=WH<5o0$llwOV{%&QUnr_&QP=H$6KIm%euY*;2mw1 z`a=%h`9bOiy_1{O$mtGNu(jw3W=t>sUI5@0=MShf?^x7B0~I~Mrexreg1a0{B@Guu zHf~L&qNtjb8LH(}$?j)r?4eUxPkSru?~11Kr3|BBE-Tlr*|Px28b>Z4 z@~EBFTI|svpgpNwgQ^44*Q{Se+L3_Z-th>BB3%!ab5Q8TA_g$EebK3j1Y0(PQ4jkR zjWxp{o*%z@f-JjoNpycMxqK1B0r`ao^{Lf$jnrh%XWHw1-1!6a#j9wmAya&gm!g;k zfDY>yA2H_=%;=LHmVcabl`h#HMgCf$EglDg;KsZ;&VvY%%ndA!M>P>?agP$6kmsAY zTw$D$F>k-5H^ycmN@XVBbvv>2+Rq;0?Wy&^+(1mh3}+9-IRZT-t}x9u_=@aEoz%CJ zkg1gpn8A?Lt#JareH{CHPAC#f>t&2IHseRLvo@ zRq^Z9*MGNgCUpi=aU<2O49QUf#_RMxTn6`%A_`N6ZGPa#dRi3?YZN{P`oh?st4WRfr;ZLIo02(jh*-M@nR#rm=obJ0{p80|EYNs@Xd~ zU2gtSBN#f0n-$QTT*PIXvkfmjdgEbF7ZtwJd&7Lg(#*^Vv}Pt5RV+l4r*qU*X527i z0x5M5*t?d2VUz+THCfo-JV`ri?y0rm>@>Z`6&yLrQr?mE$BJ1wxu~e+>Z*!;eGU7J ze{MFpvgrtKXl@&Il$m-s@>0~aE}pN$=xy~A)KN6-99amm3=FK6SAAK-k6lSMMMx64kObyxHRMp&FHtYs_Z^jtPbK`VyH-^zb%qyUoqP=c?t(gMZ=3}-Vy_lc%} zjL{offn2r1d+?9@v?8YWelmx9mZ$x`tR5ZR++Ayix=atdd8ofiAL<4w8tU~cl0*Hu zj8^R-5Pw?!jAQjq>qhoh&PMf7+<&@@-CUcrahFA59u&Vd8@UwiuaTj#vGnd91iMkyau4jag9>|Ft@lv!2T zFHpR+ZzHX8M&~2Hb=u4BO$yGMFhAfb`|)lb>GRDbn5u+@U3N&|g4A80&T-?m@Z_rq zfPX~zQ(nX_Du_#dmALf!w#|H9pS)4UGU5xL*B5mU0mhEVcSdpiERxTjP#LU;mHR&V z;jb~Ua2$>k!+d`@eH>n-3U;C?bx)p^&e`4Oco9>gT{LpKbtql4lJeWVhD9NL{r&s@ zKmlFnS}=NI)P4_wj8|Xj%*q=yEc9`KVd%lTaMc2R-jn1BEl81 zTQOC(J+(PU3;UHrJe)amz31Km@hrCU_PJtA&Ojt%XuRC`W zcVm+=rt-i2f;*)0;+t_%SaW_8BTOzZC-62q4=Zr!Da!>ebGpl#ONIP{i{JHCn(XE) zRZK@X6Aj!Tk$T?p?xDRDP5dY?lAIr5F&>5!STxO&=@0cE&_hlDP-+X64@VL3w|~ImSFbI5q>bY!n7?p?h%jiFD0LL0gs!VNxEuYC6&p=~f5|cun)Qliuv|;+o|`gqrDy zd439NGzf#+q}Bnk_!>nE;_+w*N_B73V_1EMe!q0+{YhSKfxKm$z7#81z@g3#X`PGp zA3}do%TczpMJ*h3m}x09s(Fz32^ z4)C~{)BmSb#w5p<$A`AvF|5U5*2RO1L_mAF=0oYRe*0$Baro*t3G&F?70~KVUXKC5D-tHRqgH&lH z?*iaphdLdYCOva_>DMkg~i_)lhtI|kiF|5{r~zx|-n#AT(C=mo^u2ixdnDu=Kgu;8);E-%w^rO2tbyF}`EmeCZVO`I*I> zAiXaiFctTQ;v;GYQ}@6dqXnuFQa=<5=3Ix#!q6tfz^>=f*{p0eu@V#GwI(q6pnciw zFx;)Ov+0StDcuCioREE_w8WxH;~p_~eCQL&;E84Ke+e{s$$NI@V?0;1& zF54h3H}wQi-KtTyTZ)fuF{JU=VdgQg zIrsb*TVjX)RrfyzB(eSkPt7;7@r!=Cbq%K}P0+>H z=PuBG{RjGot;_GKV2A93QaooiLYRM@+76A$f{!8b$%gaQwJJ$FQ8|a6#|jc({{xM6 z9i^qoC|t{$4vvVFgkBX_!8{y@hsY%`^`xef^O*ON&ROoAQ#Sy*!T7H?{ci73dW`>+ z7`MUkmh~5Z&Yal1OB+mS>sNDA?Cipz39Xkj~vDhk=rX9#vfkE`B0h^NY-YaDnFqk zVHZl+;%2FIS(AGTwKcOKV`FU3p!11T>J!GPH;;M#4k!fc*DePnx^FzPbfBfBZm3yl6Cb+4GLIdXhF%(sgj z=IQs1)KgAI4=E{i17_CnbN88>(j`)nAXo&kdhU-J9z{0yV-GpWGd-X8hqn)Wjx zd^pxZRt?6JAEJC>!3Kz9N-Ku$=a4u0S;cE>P{W03WTTM%(hr8e_xaPl_$azDs~xOa zx;~kbBVmlP9cB*zune&T+G2O_?roF^>o+#<(Z+%!1Z2#fJ+=)F7heGI@xkRkg|pRs z=~jly+r{y6!-MoEWK@j8UxG_{TLGPEI~#` z5A2u8G%Ly)!?o$_dVlDB+n~)C;msJ~p`#41$Y8Z}=~q0kj+@@@2q{p%M#<14y*IqA z=AAk^+BSISwHdsJOp(*Po_hR$pi#5(Oa`|W3*-f!Kf3*wbU#4QzX#p3T}IOAzif1s z5L`QDVQUsw4XC-DMR+5f{z9TwHTsswAkN}Pmt68#2||?q73JWA8RgD*Ka8nclcH2v z3?rCJ&`0``r7b<(faw6|oNOwA!fDrTP+vZ!$+`WLo&{c7`dMca9#T{u#j;#vsvBDK zOBW35G}aRPYQ!46RO&Mgl0*pZbb4yu;U4hu6?;)%BSuv<&v5*%*R;=ADuI6oXiakf z%-htJ_vX;|peH=t5Q`XZRAS)=%mC+(`jej&BQcwcPLKN;#nwbS5qd?-&bbkYI=E}w zFAdm9ZLHH^$}Hw^K4+Q5ZFsD-JRWy4PpaWsMey&pn+>K`kFV*s28py5Sncgm*7Stv znc0kL?O5s(j9avThBB+<_lEn*;kvT zRmDZza=$cZEa3T(NsE2bB%SjLu5!KVk9NpJ*U!RmMx^C0iv z&o8XwL6zKg*vq>6@rxA5KCszPm?mCKB>C^}S6!`7%GK1dvstell_}F}SAv|3Hl&(+ zhh}b48Ee*k@*Pt*At|h$Q{8H&9;iR3Y~I!oV$(z=!oQ6p?z{}{Wc=FvvQ4ic4-C3V zo~8kt@-Xf$2xdTUQPoAT-dZ$>(JX&Ck5-&`@UmqfPTlLF$)hlz%k1huyi)|qWYp(u z)dU)Ed~FB-CsGcnl}Q+?RSQ}6l$JVXLlS;`W1qI3b z1ydhdw`sj0jjF_7%`+_a-H>Q~ejUZ}*M|X7X`{SrNUA)Yy*R$=Cl;>%_=q`mx_hI=I(5f6cc&V|JV*XM2 zot70U1?GGZ%=K>0OQ3#r>~EvGO45HIqr#fPp!AUif!BF_pvvaCg6I>>w2Vm4%b4j3 zyT|S)p4;(3z&i*zB12aXmD5A-P*6eW?go&+aGfY|W7O}2+}kBGt}9|Z5xRX ziA`7$)ulW|!lwXIhsjWtPbNh#A)jw=!{S_5djmBwA=wNb?g4zm0{-u7%c3VMF5E#$ zT!|%and*Ln(Bs(bkioZ*8^a2m1mB33B>D1tL0Wq4A~PfY#Sm%~Vkn(Ng6wRVbe$NX z`#n=t5`;3BkC@|h&iJRcJsuuXT6v0HoEs!V(H*k2JWxg|+>=RQ5@ObSL+Au+!LH=o z8?dDj*DDBRAd?m>?ue)^m~2E-j7~>n)xq`J4E2i0Yfq;afaAXI&#ySg;e}NlZB2=K zER`%OJg;l~uq|{cFTHw0A9}q?j<~yAa6QRAu2)LgGDPT+5qxDxhPGxowKsw{l&8Oy zvezasR@x`ZL(L{wE47^kSXoUG4v({IqfmG@1%?_oAmemgGNcX`&P(lHJF={}tk|dT z=F~)?T0eeu*o>V|lwdSATWogbS-7%deKQqP%W-6?ZLA@Z=+H(xD49>A(ho%C(b=L!kBeM&3G8%0uX&mq`CZ=IMB@EPA^gK{ z)M8*oTFh1_yy-vCbv(DhPBvD` ztY~vxioN&a;Lf0VdripzeUY7LVa{krsEp;|jaG5Xv=64*eEO(_8<$eYa+eOE(b}Bf zC?Q!qE2(27f{b7+zD31U`vxmJkY|X+E#>b${7srAH*%UH;on|6l~JLpRMHSdN~23@ zOPfnu+de33clJQOOl12%kg{mW1EQBiq7XDW%-7>$O4cLeE>mrNY+9YR?E$}DPgB&P<*&}u@CWuKs)cIM1!YJb=|7dD_TPP7^I0XCNwIeU1F=p4M<+KHSl zJVMK@dZJalSGEPb?%l`UeZI+LGaI4r*E;9$yuee<{sLDB<-6!xK)x}ew8jPLEt@|n zepjx2O+X53UL{qjskkt^jJqyc3C~(F|6|^iLp5pM)yH&TJ}cdje_8gm{Qxa@1^>xZ z+dxg8{fCM`mfhl{XM|Ae$b!23!BE%C%k1gxoNv!@A-uYf)S*O)-$greRO!CPshpYk z$}tfh`&nA$LHo7p&)u95#;xf@@sIpz{?)4vR~m0$ZaZo1Z#I;f&|#eC-Et($0GFq3 z_WxP;)Z&T5LIQx&^Yc|d{S|WBZmV1!$OAsPDWbMM=j5NZ5K?`a>RvG z_=_qy%{aWBKZ7wQ-BL58AKF)fv5JjyC@0iK2zCtJ&^bXBayKQ?ui2 z0Vckwwi!0Pn&AVx3<~3xk zcJpG8U=RZ0-p&E!0N9wASeO{tSXfv%IM}%O-~opa=ffww0s;c`>>?7veBzJz1^9m51O*2N2Okfgl7N7ckMRK`-(Nm%n*k)) zs1+#vXedkoR1y?45|rC^0R5ei7%0CTfWI9msA%XIm{{02xOjIJki-B~6f`tcbTkYM zbo9I0zIVR^&`B^z8F^(e$+XR}n4HP^0%NnVnPtmcD0D^+Sokemf^cx}-KV6YW@TgN z;N%hj3JM8}h|0+;C@LwdsOswJgA5Ffj4fYUS=-oxA+B!j9=Lh06%;Jr;o#)*rt_`%SX{Ot7H;m1O@V*ni743&2N1 zxf?t*5`Yxo?1CdZ0Qdi;|2z6X)tCd24gHT23a9Pe!2fEH3;TTrkS5)={Oy91i#@~A z^1*8X6doR4+UHpVk^!X9zt#Lz3x(rXlfV7h?>G9V8I+re@yAc03NZdvk(1N*?lJ%E z;_uDklI}($HxrNs@@w~s=x(o(MOiKBo;DsJa((N$OcJ;0vMEAWMR5P&s^>&a^#&V4 z-^Z{q*SxXXMEtaf9GfFIJK!FalLN&z7nX?%RlUn($K92v8Ur|fE8(~+{d@XVEgK5p z_+KVYP6#JV+49kTLC(*VWi50eI=iyNkB&r=t6@rRP8AOLwdn4cA4$n={P`IhY+%ZQ z-&zHQY{&sgBm)$mXV&?Ir93AJgJvJI@ics>a7}`5{innC*XzX#OvV}%X`yZ9dA(1w zNp)g4764S~=nSJMkcS4KI_o)7_xr zWxPqJnJ8M1PW4*0gBOE-WGjwFMy8=`fmL)_RC@ zxW^#QAlDw~?K;15REl5CL1;lD4 zz38W5rtDG;MfYqwcYJwX9^7nf@62S#m26GoqFSxOya)@`e#qv~*6XJi7$jK*`01$D zSh%Id{DOB2(hO8wom3eWAj~6{dC?XRVoY|nnr`OoVnzTo^&Lz62Izi}$6YlO2ea5T zX&7>?#bCjU8^S(=bF7lMZAqVJcrI*|*1!O&SsFRqlnYKNM>yx|#4~t4ZcygUuEuh{ z>Q(+N@LC_w*Y=THKu+Q&GyGyy#Ay%RT!;SQUW~i0G$G$P-jiszQFbx@p%qmX+Y#tm z^vB?(#mopQp4eHZ9i@v7N}f3i(wN1Uyg8g`8}nYwvjGpA4?p%$RS*}5nUoiOg}n$A zP>oHF(@b&t(sqLQ=!MscbJ>OfsQ*c?|Ji8#C*`Qrz4bcD4F_HiTqlusQo4$>Q7JT< z0)X~--t~jv*OZ$A@$&=J;={9E6+!nMojbiYPYPDpoj@-X7w<1k=BBD7J+Ywqkb)My zLRZBbeed*OfV`n!4#UIo+(dG*s!ZL5pgU>aA>wB1@ekbMZ_QzK`kn`Z1($OT<1O8! zePFh2(;$#s37gbKa%J!9L!ZCV2=dR3d$Lsj;f$K4*^ zx}LX|$>+P$Z^Ysgd5o zIU@Yta0A3sK*tokl*6bQTxkf-Fm`AhVZTsuy7xR$)}_kup}L^Z2VA~$B}l>6%y+0t z)Ot>=b5KsieCKz#C3c4AmY zYk8coB&Y{HGMDJ-F~#Q$H*brNly_(#SLQE{HLA|Y|NJ^rDCtJdj#mf@re(mM6>P|` zJPpetM;S0Rt$N8<5hpzp*hAs&sOOJlINmedKVlY_=2zv)qreO@6gizBO&CR*e|pdj#3u;GzCv3l-bIBqvuf4uH2qLd`rZ?wJgoffCH9;MZ?r!o&}3lrs;H;0 zUL}z0Kq>2DBL3lr89Lr56B{=P>43&_Y7sM5mXEy@hN z1$dlFFA4g?fEM9}*)f`n3@0tez}M|00kImdiSuK`CiOGDO!_UfESZOKN9@ItXj8>v z@c0shXCl`03)VmO`>!;2dLN}DX{*W?7y0V<5)C*EUo1OA9W!5zuA7hbJ11!JCdnkm zyfz)J4HccAo9|~!;>b*R*+(6>c3LC_NkF!qKcsM8Zw%w|9Q?Zdv=Y=%MmksJW3wS| zf0h54Gnyb9GcopS;*;m*tFjpCos3N+M(4?zB>a-yWs;zwrx(LL{KeLXsFfzw2Hmd` zlc#P02(9OHM#e^X?_{+0X_LQmWoVjzS2kj)zm&HbtV+OGzz>TPz0otpdtLDsY8{!F zYk4S7v*Ef8)#QGIJJ>^CNY^AXAV*Oz=SosjWu!*hYGlItyzHt_tmp&jqDc;oz#3%` z!)7T1F1V`sjh3)*Z(;q9r~p0J>Y3I(z9&?;nws8~pR$nc!Pa6(U7+JPNKAQXten$-_*KaKR88jAuOZI72eJrMsW?iT$m1ma^(Ie zTKSLbu=3n3*ecR^|E?NB12`e&RQ4}toeVaL4O?ry#^N7{si1|j=TkHkU|k+=2doiqJ;tq;4G z6rr7fz9_x<*^cu{+t<5SPl>Q4GV>+9hd@O>@6>#hzArF+%gZr?Z=5B8J#<}K>0I?HsoPBI zgEI{A(=YVOJxg9al6h!u7RdN@htSn@rn_b}g}#aXZSG|2sg^I{1%a}eMk)Dn;(D`` zr+*cf!eh2feI`Xf_@SqS>(pqio!2bRq`a{C@Z?5viCE7o2Pu4Zd@H*2lQsi9j$K;q zkS*bzXe}+&089Y+j>UrjnQmr;WNrU{W7of9*#95SF{7i@fb}cq!drm#Pj7w2_OY8i ze|RZVMCFQWb4f-Qb^d8mB@4$)=+fHrQtwR%=0QHu)Dx%ibH*Kyk?4miA-f~O?MtkHuvk&Xv~oMfpy7jQWSGyCGa!JyL~b0Z3Qp( z5Tw$W`&N=}_@<<8!~sotsR=E2XZzS%`bYlIVy~B?P>y2!yBYrvK>t6_qr>iu0Zxuz zw!=R+LN6Y0xdNw349tjU(|*xyM(~>wwMQyhA(25fe1d0mZ7?$q*8!$1IxvgZT7^Kx zJ#0e#R|L*ro0;EwLAgN1V_%rj)WOk zi!wL~uSa2kodBm4s`MvYQnhtJ`-}y$y=QTvy^yv&qMOZ=++^Y0=#TH35^z-_0Z*Jl z#!ok)#r_lH!_>s@<&U(xUBH^gmikW~%KGVW-Mc(t5tzChXCQVf;&r8o)_|0WQ&(aw zby-tpS`r;19H_s4t4~A>`t1fx#EGz~tJrU{@&|d-dw)>e&QdWmJUw>Wq4Fk))hPBS zSiJrsUz4!uQqnn8fCzj>p7>EIZQ|40Y$zx8|JIWH_jYjsBG2ic`6jm>F$jaF6{V;T zDLY@DQY>9*HS`(I1Yd7c`UTZe)`B3%2eC-8GcgWs>2iD5&7NazQ1q2ghH;TSpi1+! z2T~IuV-_pKA?>u8M5)=Q$_sGu@VvGr8&%$ zE=H4stY8WH=GQde_RWWITf)AY1#CY9FWU{V8y>2hTggh1j5a+nhZua)&^=UW6Ofqr^+o34PuDg7nOLIYe9#;h)i2H+DEH z1cxI{GOF$F$EUyPNsG?&EXbuY9J}o2p3bX#5xXU0%z2-}ql@|$;I8m=uNw1I2O@ac zMV{%(j^}9$;S+=)av(0Nd6b0sLUVFrgG-rH?hsWaINP}J#sFe z;7=y5wz@;>wHhz}u^0Zo^S@Y^Um)%mqT}TFC!z+0oBvt;J#UI{n~||}{;FdoYOAz8 z!L5}X!u+E7yZRVjxqAAuO3@|8(we#hhV;NSxiPk^2qJ!<_=82>n;na$1aH>jxQTn& zn$v5vgBVY-hV+s5u16oA0>CKe z1tiX1#YZ4_jR+B@^eaMC&^`7T{7|awx|o zPfcH`f9?b(u6lF8a>^zdr^q z_nm$1U5<~nQABW4Qshr-bPGt*iy@{<Xr?5`$e z1<43-GOUS)QUE<|(*6>elTf9FqN1h%VCA{%Fzvg{KeiS)EhYXD*){vd#IG%;nAi`s zsag?-hIcD7_59}4(!Fruspe8*^sbpF@VlU!`BdW!8ErW|%&_X*f%%N8a4b#s7NA;3 z{VfnH8+v?iQ=9K@Rise)>}$bzJv}`!v_hdl)?gHKXP}7tx#vt$vRZkwZgwdAqXuB*WOH+OKxyT%T13eOeUP= zWt~R~^7Vi5G8xyVUt+FACyXiExa|O4LV&Sw6Zt!F}nvxyn|iS(k!Nwu-MCbWOKk+{SIgAk^W=X{LlH{ zfO!I->KCo{k2INznzAjLlyRDgZA~RvWQ^2dDMna~;mMBOjJTKU=_{OtqhJPXDe4~` zG#1-tKY{zz?&gz`5g7@1*Bhu+G$mLv9om;i(qHyAN|+rjWOgQIqk^ozQmD4?e`)Yn zF9OZf0oBw*?h{>a`@>AAz(d_#tImk%IJu09ydHcj`M07P#S?&aAED>HAoM-y{ej_e4}v=~JGZ7zh9K9zI2} zIZvdS0GHEt_wB`MUQS;7?fQ#Cncs1u%)b$?oAGkD*IY7d+uO2JDQ2}#~}o&v?}aAem-$o>nOL;b7QzhUI%8@74-Q3sx*n`--vO!{l@BTh*@ zZL^{FzG!|>dG#$I-8oq*`W8@FE0)wkvAvQAu1VaXh6gk2UG7fbuepY;^RR5K-B zlTkPl%N88VnDGKxtXs=Z3+pwnyc}4AK zjF1kHZeXgWGgNHYi`<{kR>~uW@O>}{l53NSOy`OTl~BW3)_bheHmrqOLkPiK*?CPb zA;V6j{tctZ^|Dz4!X(&Gngt7ANw}bPZ|-Qb%*x3mc>ig8hYNpIHA!%eD>ce$j*~7l z4)yetNc99yK7H%*R2?&xzWHzj^nleKIM|he#{W^hh;jPP<;=puadpf45vXZU4)1K`(gBdiZc7`7&H{ z8^nFTLx|qy;O?alUf-jC*CAX~6^gWh_OA!mi8tK48Ze))>9@09-ixLSrU-WO_lovD zeb$v}&(1efnmM!$y1(xSd?x9bO}`KZ6us^!l;eVI-ZS?##2xRPG~WUgBXl>2@0NOs z!miEuT~G}*=QBDzpE0F*%kOHhZ;;@Co9{nzn`3-OG$b&9U@*3gcf}{J@?8+wJ~S7w zz{w~D()x3l`*W;y%kTQMozT}xXR9&( zMb8oU>3^UQh}e5!VaKWV!ySQ8SPWB)I)k&Q=B)N zPAInkP+FQ9IPon2Qsp=e@G8ER+8A$JusQNeHAkc3C20zEbM`V|8 z0l7k>>HO8ads?O$OG2ah^oRZam2#*GyQ*TN?B2$*lndKGJjgrqJ0??6bw{(eCOEes zWM>60OtH?aQ~Xx)**Vpv+$MMeppTn$zhEeT#VqPN`vGF5Z&(dMHO0^I(bwPN`g)k5 zU#PYP=1pQgPsaK}aTnd;t<&jzK3djZcd`*6`W@fwI>V?kSr~Lq^z~UGcgI63PJ9=% zBgL6(yBP5~C$~gC7!pC`~s;(ZH@;bWN z!ps6Q9MJ`N7(t#u5;)Fkw&UH5S2*L4avQS{*GUgeohHHcFD`m~Qw%N4KSSCc5{;(d z(GQUN^6Etswhd48xn5=ySr?9#%*@79D*8cUyLxGAg$oQqDPH0SNho0BO=7v>BX`ot z>Mu0{vDta(v~Fm*d#WbSQ|MK{U*WiiHB_;WD$r+@JT!fUcPg^Wol`r&!vHH4So_mB zi@&+j{|Be8Dq!t1!`+y-Eh-E1cat6LK9h1<@G6!2nf&@=k(id>>K*D(Ju(Sfo`S!P zgwKD=MxgQis2`tI-5B?;;nAyiB(zgfHkE-$s6fW{sNI2-8!JOF`Ayue*|f&S$i?hh zi|T#fNQhSIi(9}uAE~nqw$f_xa=qgpHEPwggC-|MI{roEs{)pTOWRnx26NZo3y@ow zknk(!cqEW)`MU+|gb8Dx6PSs52;MFf~|oDfio z&2#W-G z-U1@`JEq<_M!7Jf^8PfSaj`Ses}&M*eX8*^%0w#Cd|ryhpc4DAg?SiSq1@XjjFq}D zMrIr0@9}UFW26Ude6?OpVU|T|K{`A9O1g$6Iw$R{u>SpCrE9u!hoRgdJwj*vv#pNQ z_b2oSlWFS&?g~7&<4FHRmB-ke4=l`b%24BU5B(^VbLd4H=)X_K-U3V~KHe94cXMrP zb5?qi%cQ@jDZv?(?yZIXh>Q2E5VWmLScURrBV_^H2IGa7v4)RFK{y5^E_6*$h@~3g zJ?C#hSZBezAQ}WVM*KVSV30LUrvG4Jzp#!3*X*0qJ3ya@=_#&Pp6ZHccSp+QM4 zZPY14kwfE^wB-{E9i;H+zu6ueUeoJl@eT{#zZqNknUGc`pLLTsVt}(ugQ#4XC2K)d zxY1vjiZ&KUQVVl&tGrhr2g&~xm4u`AcSh0hGgrgq{V>P1Zv4J7UrmZ?yU?G}uPb^- z$LY-aV!vU4RmCSrAK@MA`jaS97K!aD<|+;2|}-+!v`{KVflU-$?}qufBn2f5SwAc>t~X1}`ozTpF) zQ;reKdTWvI>b1h}ns{Z`>Lic*D#J}L^~tSfU48Da+9`N>Tui!$3GIH%t0IeAGFFar zhYgXxpG*p1@=GM%)#(|{`YugIm@v7gOhirx4rHPO@B67niTcpTrA}j$U#%9GZxo^( zL8}%bv9Y9hp_R6-R1}739Xc}^DbbxN6zeor%!@JZ@KOWP&B;v6z@(UU1(OP?&&=cc z9MRgK7Y>zKXSt_j)7w|PuBXpQOi2BV_^Gb!#+&Rqb>v<-Kj@oy0Q4bf?2~A8DOJ*H z`%(J%K8*^0T>S)}Hz%iEO!L39k$05%KLE>rUc!Gx*4%OCPp9HNZ!Y(!*J6Vc15y3h z5#CiLq=GI^apfu9q_eG98I+rI4$NCtC&mwsGk$OCie{Sh{I`4i6L zs49y~B)2&k^x1e&GV%#iJj`GSD4uAVZi^}nh5!Y=9Z8dRox%4;KTvI?b;9kj5m)Z^ z*CTp8=R1?Glv#jd5jo9jdkw5oiU&60TKV=+Ujl4Ap}s?Sp~yznzT%}n%<5R6xt!(& zv_gztH7^vAFT4=|R3Vk888^uLsj<8FjJ~F)PZ8hdpp>V|zP;yqEY@r&z|o~9DffDm z<#}hVv-6n*p?BYcnE5YTU_eCnk8FXsq+fwe|Lmpsuc7(%BX6U&=fgJ=UXQ#u%l-19 z2bX7UTo;6PV>gV8do|S+x@Xhfw*Z-Enm%mXsZHV!95k*6dvQnVROQl+jHa*6dJ+m~7KcsVNU5!6^m~U*5 ztBD|`hLsTuEfq0e8y1FKomdfCkOO`W5^y_#p zOqhgl@)J(H;DwB{M|kV&!!zwAC2XZ5xvgh!x`NGwLL4RgR)xpY9`eP0HV@z_xo(q%OqI;jkJq>` zq@=!rH2Z8n=d%?uo_7Jkb%iQuSuJJIpuJmJ6 zR&B>!dL2?8xZbP`nH??PzngGO`5J$8NS^X|s5ZR_NgQllKD`qIRSpd3Ptn^ulV z2lFd0sI!41UN#YcXcaU$&(#f{B>?JHllYIIuONDttugl|-w`S>xe3f@0wxdvfj4JO zhT%6`(BiJtbhJb%RcU1+Am_SF0lzMMfqpcA1?f<+d(z3}Da9l#6#GQ8od$wH88yo|m z&q!UB&fgL#sY*S1O#2)!(!m_mJEs(cbr$(5Gz=&YRuxJWme9V@`izWbY%ZF8zn_LO zTe&W7(G>ccd;?`c__j zvhTR5dq<1~#3zLuzTr!S1MF8v5z&Li?suwdG?cj^;TAx)NB>r%v0Q+`gp_x+0%+ZC zi164ptZ#c0;-k$I_|344#!Xmi)UBX z-g9+nLT!jz@L_78-_A7$O8eLtLeWQe_(&N~Kc8X;_{}hLbn%e5;)-U zNtk0iE(q`aF`LrE^PJSOyd-pp)L6i#yu@5%3bUSoOWJDIKhod$9Req*%WQ=vK8-04`b%<;HQM<-ypnqOVpT1O`T6dJLCm7c z+qo_7k>)lf{vra}HOqO)^OOsHs*kBi<~O-#Yz4huz}dl|Iyr$J;u|)!gOc0ypy^+!Bs1e{xGxbtD})fX1t!R51aHy`>!1RY}e=~_QAo)3VUT&iI{HE2KbdIcVm zcfl0W@k8q1%-=O*#S56;U&aPr=rUhcHG?Fun#}EZ4pZkHGcQ1drALxWI#|1^COF^h z0;?wnB#8CK<4a~3HRVy00;AZ^^zVEq3l>15trvW*v6ER?Z!dKE=XKnz?&$D9+^*Q; zd__MeE+Jummv?i|CN8&s5@^jfIklxO*NV zKCoEy`wmzRE~xvAXJ%oLjfQwxT7(R|?Sw=`g4o}TIhd1~T76#g=hv~Yx-^Vz%G6x# zlF~KS_1kBWx#ETvktQdROQ<HL zu#Eu;5x}_1>-?@WPM*$4>~mwe$s{^0YP(qDE{j;SQXsvYCRoxhAp*@+PFfRXPj$&B zHR@gq-Go3efeu6X^7!|NP+G16VW#5it(Lq1r2Vw;6+{iTHKDUmU3M{XblD9(GcHfK zKp2ls^K5ipRuJUsTdjnjz#<#riMN3I=20Jn={<^ zxw#Y%U%jZK_mDvrX@2L#f>{FnKSacC4|i9}$7S`_;uENu4uw3v+QqE&xL&Vo9&+0= zds0g6BVt-07L#v$l^=x0S(x3NK4}MQs+IYK6J-`*vUWq&D1VQqk1$fCk}#EZy7V zJhTJV>x2g(cJeb2&9f*7Y|N@VkFS9w2x3O%@9OU4UFo2ETsT%e{q7WjCx0jqPJCis zdn1svGOp#)ncGD{t@ouxFQ8PUnXO=3y1KYu35N=3yy_a9`er;`Y zF?3t$AR0mF49(*WxSDuy3xJ`oRH{AZAW)8&89IV5Zy4O^gTi^i2fmPbdOx{6osjU{ z<W3R9Fl9LhfrqQSKo_=t z5n8Pc1R$OuE`5F@wo8O|#|MUw7PXrBJe^4l!TZsP9=T1Uw4{-tZG6x5d~$1MEy@oW zovn^si%4&THsD|9Cl0Sos=p=6_S9l*j#N4 z&?7=BU%P^Xy!=E_`}TFrt#|vMGu}E`z^m($<f8}{X0h^Cyl|# zfIqAuHg*3iJ#m#bEnmx#c+OeH=#+1S zZUHE!`u!h-i*)?H5sMOX3)=M2+0DV!b)&f?uoV=HNR7HS7Zvkk2*3W+mm==$GT>;e z>cOSBr@0L3ph^iO1KSr+2*=`NT&v84)%*Z9ECX+f_Yreve zad8TnXuvo;E>PrcOuB}E)(}0nfB;``i8LJhoQsM;kdI9`f79)`YIxdsxohm6GQM5q z`-D5{8%Dg|v@3Y*pWiBB3M#hTkTQPTK*~K|>K%mYB2zSlbD8bS74k+Ed_tH9%Quot zIFQugOlrIjWY}p%D)97vzxhJpt~hT|7+CLJv5AF1HRlVeD=hz10{QA+xHiGuHr|cH zx`tUW9y0@%ei))>cHydwr?jC3@lirKrHkOzUloz%&<&-VuqBYE+514WCza>Y$ZgKgA@vRc2s z0OioZERu0rm)y5SM{RYG^oVOMtUuSMMc>&>S5v`#iZ!OJI7XN zwmmWpj&?axW)lXWwOE?)ZHXp@yg}BO3=w9AxsR(ram*0Figq}&U)bfBh$Yp=&zr#!e}qCwA@X-?_zaAEokIOUqXR{yec z8zCNo-&?D{FR{z79h*BpZSCTkp{pygKZ9f8ZIKfs=gh3yMv{-WZzoho~asr_DCx9d+`1%ifTEWk!Z$x@%J%4U-Zdfh{>0?GcV zWbpliI~)ZM^j8a+1HY)b=!rVI=9Cs0FiZ>-)_#iy@X?k1q1kQ0wVG8Y{8T@PSN{51(sWQsD6ogd!H30Dpfg@MHL~9VGI+YEQ}QT z(O3e?*hk-Wnwy^tC}?OYsm4-G<=n6hKfbg;GC#;b*qBCMbkwZc=`gnBVn_K|nC}@m zr#)4GJSCjG0Gayls&vrG!Ql|^4C8dhdLv&hY*B=!BjL6(LNswaQaCm`EC1Cw9NL^L zc|!A zFt1{NP;^Y|sO&6D414%pjjZzo;R=YAAz*qL3bS3399s$o$y|@fjq690KD09No(y5X zre&E&`L3rU-DdeZ=V6Ycw-#n<-sU5*69ld3*~X#iN&^UAD4GVT-` zNUg`=-f|lVlSK?qnXNczEzHuWd=w&f9{Tav(iE7uGtVh26YKpo>x{xj7= z!q#+)iQULqIjSh;mH%8|Yd~E0`2Xq;auO(_gbdN|wv$`RVvI zg9My6_%XGI(Z(lX#BG4)B<(}OfLj1b!7H01n%Vrigc|Q`^Em5PxX5>DLW6eC2dOpI z>81{hmqT4E`lIu5Z!d@DPbt8LFHwed!$%m`PI6#OQ5$!`Q|LeR)_T}!x#psiVTuic zX`>caKKi!+JzG7cQ)j;5ZJ*vd*ps zX0C0SaKW@5Hazm8p7(|vn17!H+Jo$wF!ffnGxL;@W)hKMt0WblcQ^s&9-_tS^H9Ax ze{e#}p{AW|Ng2PbJ4;e+-2sYz)FqBviJI`X>nyNnhc7|NHO-AY4$cnL-$#E`;5lGx zQqkXd2u8?jVqJNsO@Nh#45$R<0vC(E@<@})O3G=<9cg{xdhvoxL#vKbd>Gv&kA^AJ zT`V~8q$mV)HSI8&$4(M1|?8dFr67d>t^$MM#N?e3+Qm?1aHdiRGo9m1Xqz zx+}Pr?2c-KpI)b`J^=m8GKMA&h!TC-dxE)UgQNYeun6Tw@pg6cR3)GBTo1oD!vG;@ z;=RQ;(vL>y;nETSgnQD4mwAxkbH3~GaI1_ftR}pSlxsjp@+_Z95Un8#6Z3 zXluv#$;;YTU-%EZt}vXZI&`Dkik`qh+zzUXl*5DZ_;I~}^f&huwgTMf?z|>jqB^V4 zLl`@I{~&08|IRo1d-&)d5v}OicU*)c_op91Aqa6bYO35MsvLABE}^HF21<&Yof?m} zz*YOvc#}6&yZ5lqh+d{-d$U9+lk56ukMY>MNvXrWPYG59X`rt$WnxaH6JJ>BCW z<6zyI`Y}hzE{UR+$62&WNMAtgL*)W!A@m73K8oq9_l@_xN}lnYlw{tMS1&?`CtP8# z>Fahr^GFJ3e!e(m+0)qceu(X@Y1u0BCel_4lgwWz?QO9aqw0EmvWAG!WHVxLrI{ zs2aBab{?{j?bJT;UQEUgeXQc<&@sJFV>TKNCZ=HZOJo*G=#~&2dtu&WP^0^_4kLHK za3s0VIEhVpXkO%sV=SMU3h18sVKq)(@nwXyA{wJolWV7SO#`D|0(%UKR5;v$O$|(I z+VP1zutVnPk&9#~th~;MtT$#QV4oMXUY3jt5;1zd|0yg3X23@m`i5YWmnKx{U?Rd^ z%x4Tqz_h7(DIPatDm@z6!}tvQET4sRfWs;>hXiq&!$@(xwTHoGp$8hgW7 zy7RQb;cX*(aXj5(YZKPf1Ia`yyY+dcQ#j?DA$HAX5CyN^%7ztJ`McFi=h@t&sNviQ z1H}9la5z7vzW9etg-X}%)3BAOKpIT-!j;(Tg{vA!`D}#q7AcA4a_O#xX6sic~57$*nNSfIZoV zUUbG9;=p`m2g{BIi!H7Ua4&9VbRAUpKVtpz;WLy&^KCV**XInIOzqTTd~Ik=c;Q9# ztY%$verppI4!5%#j)>HgZ2!0QFT2T~EpX6l9+X^?TjbA8+`KrA-}jpNsSj(h6YSZy zPJthuJwcNwO4kJZ3~~;uh63p-ZUHAnGtP?K%BzK4h~7wWPP_GiWP<}EQ-9el;N=EV zKq~BY&Cn*q=G(#MzCYD10QaQ$j-7}om`DnCU$>+3peFo~Zv=!Pi!InFo!Z21J|kI- z>5@?h?tOxUxG}NbH5ev05aRcJTGDS~1*LnRtkA5vm9;JkQ9xVS-{fSWraB|asPW`gTBsJ# zKiw+-w|(h<-_b5M@_V={iprh)@z0>i-yzC>d`{4o#`|@{UwbEi1;hTjJId|M{{bP8 BD?tDN literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test/red_skirt.jpg b/stylelens/attr_classification/color_model/test/red_skirt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..560a047f0b096e945feb7cb778b47a2694bb6b39 GIT binary patch literal 40907 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 literal 0 HcmV?d00001 diff --git a/stylelens/attr_classification/color_model/test_color.py b/stylelens/attr_classification/color_model/test_color.py new file mode 100644 index 0000000..74eec5d --- /dev/null +++ b/stylelens/attr_classification/color_model/test_color.py @@ -0,0 +1,85 @@ +import glob +import os,re,sys +import argparse +import importlib +import cv2 + +import tensorflow as tf +from preprocessing import inception_preprocessing + +slim = tf.contrib.slim + +# prefix image size +image_size = 300 + +def run(args): + data_path = args.data_path + label_path = args.label_path + + model_path = args.model_path + model_name = args.model_name + model_scope = model_name +'_arg_scope' + + inception = importlib.import_module('nets.'+model_name) + + + with tf.Graph().as_default(): + with slim.arg_scope(getattr(inception,model_scope)()): + + + files = glob.glob(data_path+os.path.sep+"*.jpg") + file_list = list() + + for idx,f in enumerate(files): + f_string = tf.gfile.FastGFile(f, 'rb').read() + test_img = tf.image.decode_jpeg(f_string, channels=3) + processed_image = inception_preprocessing.preprocess_image(test_img, image_size, image_size, is_training=False) + #processed_images = tf.expand_dims(processed_image, 0) + file_list.append(os.path.basename(f)) + if(idx == 0): + processed_images = [processed_image] + else: + processed_images.append(processed_image) + processed_images = tf.stack(processed_images,axis=0) + + with open(label_path,'r') as rdata: + names = dict() + for row in rdata: + strip_row = row.strip() + split_row = strip_row.split(":") + if(len(split_row) == 2): + names[int(split_row[0])]=split_row[1] + + print(names) + + logits, _ = getattr(inception,model_name)(processed_images, num_classes=12, is_training=False) + probabilities = tf.nn.softmax(logits) + init_fn = slim.assign_from_checkpoint_fn(model_path, slim.get_model_variables('InceptionV3')) + + with tf.Session() as sess: + init_fn(sess) + + + np_image, probabilities = sess.run([processed_images, probabilities]) + + + print("\n======== DATA RESULT =======\n") + print("filename\t"+"\t".join(names.values())) + + for idx,iter in enumerate(probabilities): + print(file_list[idx]+'\t' +'\t'.join([str(round(i,2)) for i in iter])) + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser() + parser.add_argument("--data_path",help="the path to test images") + parser.add_argument("--model_path") + parser.add_argument("--model_name") + parser.add_argument("--label_path") + if(len(sys.argv) != 5): + parser.print_help() + parser.exit() + args = parser.parse_args() + run(args) + diff --git a/stylelens/attr_classification/color_model/train_color_classification.sh b/stylelens/attr_classification/color_model/train_color_classification.sh index c5f4533..d266508 100755 --- a/stylelens/attr_classification/color_model/train_color_classification.sh +++ b/stylelens/attr_classification/color_model/train_color_classification.sh @@ -1,18 +1,21 @@ #! /bin/bash source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: -export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train' -export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset' +export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train1' +# export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train' +export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset1' +# export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset' export CHECKPOINT_PATH='/home/lion/attr_dataset/color_model/data/checkpoints/inception_v3.ckpt' python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ - --train_dir=$TRAIN_DIR_PATH\ - --dataset_dir=$DATASET_DIR_PATH\ - --dataset_name=color\ - --dataset_split_name=train\ - --num_clones=6\ - --model_name=inception_v3\ - --checkpoint_path=/home/lion/attr_dataset/color_model/data/checkpoints/inception_v3.ckpt\ - --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits\ + --train_dir=$TRAIN_DIR_PATH \ + --dataset_dir=$DATASET_DIR_PATH \ + --dataset_name=color \ + --dataset_split_name=train \ + --num_clones=6 \ + --batch_size=192 \ + --model_name=inception_v3 \ + --checkpoint_path=/home/lion/attr_dataset/color_model/data/checkpoints1/inception_v3.ckpt \ + --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \ --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits diff --git a/stylelens/attr_classification/color_model/train_color_classification_nocheckpoint.sh b/stylelens/attr_classification/color_model/train_color_classification_nocheckpoint.sh new file mode 100755 index 0000000..2724fad --- /dev/null +++ b/stylelens/attr_classification/color_model/train_color_classification_nocheckpoint.sh @@ -0,0 +1,17 @@ +#! /bin/bash +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: +export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train2' +export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset1' + + +python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ + --train_dir=$TRAIN_DIR_PATH \ + --dataset_dir=$DATASET_DIR_PATH \ + --dataset_name=color \ + --dataset_split_name=train \ + --num_clones=2 \ + --batch_size=30 \ + --learning_rate=0.01 \ + --model_name=inception_v3 \ + --max_num_of_steps=1000000 diff --git a/stylelens/attr_classification/eval_fabric_classification.sh b/stylelens/attr_classification/fabric_model/eval_fabric_classification.sh similarity index 100% rename from stylelens/attr_classification/eval_fabric_classification.sh rename to stylelens/attr_classification/fabric_model/eval_fabric_classification.sh diff --git a/stylelens/attr_classification/train_fabric_classification.sh b/stylelens/attr_classification/fabric_model/train_fabric_classification.sh similarity index 100% rename from stylelens/attr_classification/train_fabric_classification.sh rename to stylelens/attr_classification/fabric_model/train_fabric_classification.sh diff --git a/stylelens/attr_classification/freeze_graph/bl-text-classifier b/stylelens/attr_classification/freeze_graph/bl-text-classifier new file mode 160000 index 0000000..718490f --- /dev/null +++ b/stylelens/attr_classification/freeze_graph/bl-text-classifier @@ -0,0 +1 @@ +Subproject commit 718490fe99076047b0d34436645aca07e5e583d4 diff --git a/stylelens/attr_classification/freeze_graph/freeze_graph.py b/stylelens/attr_classification/freeze_graph/freeze_graph.py new file mode 100644 index 0000000..0ddf092 --- /dev/null +++ b/stylelens/attr_classification/freeze_graph/freeze_graph.py @@ -0,0 +1,350 @@ +# Copyright 2015 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +r"""Converts checkpoint variables into Const ops in a standalone GraphDef file. + +This script is designed to take a GraphDef proto, a SaverDef proto, and a set of +variable values stored in a checkpoint file, and output a GraphDef with all of +the variable ops converted into const ops containing the values of the +variables. + +It's useful to do this when we need to load a single file in C++, especially in +environments like mobile or embedded where we may not have access to the +RestoreTensor ops and file loading calls that they rely on. + +An example of command-line usage is: +bazel build tensorflow/python/tools:freeze_graph && \ +bazel-bin/tensorflow/python/tools/freeze_graph \ +--input_graph=some_graph_def.pb \ +--input_checkpoint=model.ckpt-8361242 \ +--output_graph=/tmp/frozen_graph.pb --output_node_names=softmax + +You can also look at freeze_graph_test.py for an example of how to use it. + +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import argparse +import sys + +from google.protobuf import text_format + +from tensorflow.core.framework import graph_pb2 +from tensorflow.core.protobuf import saver_pb2 +from tensorflow.core.protobuf.meta_graph_pb2 import MetaGraphDef +from tensorflow.python import pywrap_tensorflow +from tensorflow.python.client import session +from tensorflow.python.framework import graph_util +from tensorflow.python.framework import importer +from tensorflow.python.platform import app +from tensorflow.python.platform import gfile +from tensorflow.python.saved_model import loader +from tensorflow.python.saved_model import tag_constants +from tensorflow.python.tools import saved_model_utils +from tensorflow.python.training import saver as saver_lib + +FLAGS = None + + +def freeze_graph_with_def_protos(input_graph_def, + input_saver_def, + input_checkpoint, + output_node_names, + restore_op_name, + filename_tensor_name, + output_graph, + clear_devices, + initializer_nodes, + variable_names_whitelist="", + variable_names_blacklist="", + input_meta_graph_def=None, + input_saved_model_dir=None, + saved_model_tags=None): + """Converts all variables in a graph and checkpoint into constants.""" + del restore_op_name, filename_tensor_name # Unused by updated loading code. + + # 'input_checkpoint' may be a prefix if we're using Saver V2 format + if (not input_saved_model_dir and + not saver_lib.checkpoint_exists(input_checkpoint)): + print("Input checkpoint '" + input_checkpoint + "' doesn't exist!") + return -1 + + if not output_node_names: + print("You need to supply the name of a node to --output_node_names.") + return -1 + + # Remove all the explicit device specifications for this node. This helps to + # make the graph more portable. + if clear_devices: + if input_meta_graph_def: + for node in input_meta_graph_def.graph_def.node: + node.device = "" + elif input_graph_def: + for node in input_graph_def.node: + node.device = "" + + if input_graph_def: + _ = importer.import_graph_def(input_graph_def, name="") + with session.Session() as sess: + if input_saver_def: + saver = saver_lib.Saver(saver_def=input_saver_def) + saver.restore(sess, input_checkpoint) + elif input_meta_graph_def: + restorer = saver_lib.import_meta_graph( + input_meta_graph_def, clear_devices=True) + restorer.restore(sess, input_checkpoint) + if initializer_nodes: + sess.run(initializer_nodes.split(",")) + elif input_saved_model_dir: + if saved_model_tags is None: + saved_model_tags = [] + loader.load(sess, saved_model_tags, input_saved_model_dir) + else: + var_list = {} + reader = pywrap_tensorflow.NewCheckpointReader(input_checkpoint) + var_to_shape_map = reader.get_variable_to_shape_map() + for key in var_to_shape_map: + try: + tensor = sess.graph.get_tensor_by_name(key + ":0") + except KeyError: + # This tensor doesn't exist in the graph (for example it's + # 'global_step' or a similar housekeeping element) so skip it. + continue + var_list[key] = tensor + saver = saver_lib.Saver(var_list=var_list) + saver.restore(sess, input_checkpoint) + if initializer_nodes: + sess.run(initializer_nodes.split(",")) + + variable_names_whitelist = (variable_names_whitelist.split(",") + if variable_names_whitelist else None) + variable_names_blacklist = (variable_names_blacklist.split(",") + if variable_names_blacklist else None) + + if input_meta_graph_def: + output_graph_def = graph_util.convert_variables_to_constants( + sess, + input_meta_graph_def.graph_def, + output_node_names.split(","), + variable_names_whitelist=variable_names_whitelist, + variable_names_blacklist=variable_names_blacklist) + else: + output_graph_def = graph_util.convert_variables_to_constants( + sess, + input_graph_def, + output_node_names.split(","), + variable_names_whitelist=variable_names_whitelist, + variable_names_blacklist=variable_names_blacklist) + + # Write GraphDef to file if output path has been given. + if output_graph: + with gfile.GFile(output_graph, "wb") as f: + f.write(output_graph_def.SerializeToString()) + + return output_graph_def + + +def _parse_input_graph_proto(input_graph, input_binary): + """Parser input tensorflow graph into GraphDef proto.""" + if not gfile.Exists(input_graph): + print("Input graph file '" + input_graph + "' does not exist!") + return -1 + input_graph_def = graph_pb2.GraphDef() + mode = "rb" if input_binary else "r" + with gfile.FastGFile(input_graph, mode) as f: + if input_binary: + input_graph_def.ParseFromString(f.read()) + else: + text_format.Merge(f.read(), input_graph_def) + return input_graph_def + + +def _parse_input_meta_graph_proto(input_graph, input_binary): + """Parser input tensorflow graph into MetaGraphDef proto.""" + if not gfile.Exists(input_graph): + print("Input meta graph file '" + input_graph + "' does not exist!") + return -1 + input_meta_graph_def = MetaGraphDef() + mode = "rb" if input_binary else "r" + with gfile.FastGFile(input_graph, mode) as f: + if input_binary: + input_meta_graph_def.ParseFromString(f.read()) + else: + text_format.Merge(f.read(), input_meta_graph_def) + print("Loaded meta graph file '" + input_graph) + return input_meta_graph_def + + +def _parse_input_saver_proto(input_saver, input_binary): + """Parser input tensorflow Saver into SaverDef proto.""" + if not gfile.Exists(input_saver): + print("Input saver file '" + input_saver + "' does not exist!") + return -1 + mode = "rb" if input_binary else "r" + with gfile.FastGFile(input_saver, mode) as f: + saver_def = saver_pb2.SaverDef() + if input_binary: + saver_def.ParseFromString(f.read()) + else: + text_format.Merge(f.read(), saver_def) + return saver_def + + +def freeze_graph(input_graph, + input_saver, + input_binary, + input_checkpoint, + output_node_names, + restore_op_name, + filename_tensor_name, + output_graph, + clear_devices, + initializer_nodes, + variable_names_whitelist="", + variable_names_blacklist="", + input_meta_graph=None, + input_saved_model_dir=None, + saved_model_tags=tag_constants.SERVING): + """Converts all variables in a graph and checkpoint into constants.""" + input_graph_def = None + if input_saved_model_dir: + input_graph_def = saved_model_utils.get_meta_graph_def( + input_saved_model_dir, saved_model_tags).graph_def + elif input_graph: + input_graph_def = _parse_input_graph_proto(input_graph, input_binary) + input_meta_graph_def = None + if input_meta_graph: + input_meta_graph_def = _parse_input_meta_graph_proto( + input_meta_graph, input_binary) + input_saver_def = None + if input_saver: + input_saver_def = _parse_input_saver_proto(input_saver, input_binary) + freeze_graph_with_def_protos( + input_graph_def, input_saver_def, input_checkpoint, output_node_names, + restore_op_name, filename_tensor_name, output_graph, clear_devices, + initializer_nodes, variable_names_whitelist, variable_names_blacklist, + input_meta_graph_def, input_saved_model_dir, saved_model_tags.split(",")) + + +def main(unused_args): + freeze_graph(FLAGS.input_graph, FLAGS.input_saver, FLAGS.input_binary, + FLAGS.input_checkpoint, FLAGS.output_node_names, + FLAGS.restore_op_name, FLAGS.filename_tensor_name, + FLAGS.output_graph, FLAGS.clear_devices, FLAGS.initializer_nodes, + FLAGS.variable_names_whitelist, FLAGS.variable_names_blacklist, + FLAGS.input_meta_graph, FLAGS.input_saved_model_dir, + FLAGS.saved_model_tags) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.register("type", "bool", lambda v: v.lower() == "true") + parser.add_argument( + "--input_graph", + type=str, + default="", + help="TensorFlow \'GraphDef\' file to load.") + parser.add_argument( + "--input_saver", + type=str, + default="", + help="TensorFlow saver file to load.") + parser.add_argument( + "--input_checkpoint", + type=str, + default="", + help="TensorFlow variables file to load.") + parser.add_argument( + "--output_graph", + type=str, + default="", + help="Output \'GraphDef\' file name.") + parser.add_argument( + "--input_binary", + nargs="?", + const=True, + type="bool", + default=False, + help="Whether the input files are in binary format.") + parser.add_argument( + "--output_node_names", + type=str, + default="", + help="The name of the output nodes, comma separated.") + parser.add_argument( + "--restore_op_name", + type=str, + default="save/restore_all", + help="""\ + The name of the master restore operator. Deprecated, unused by updated \ + loading code. + """) + parser.add_argument( + "--filename_tensor_name", + type=str, + default="save/Const:0", + help="""\ + The name of the tensor holding the save path. Deprecated, unused by \ + updated loading code. + """) + parser.add_argument( + "--clear_devices", + nargs="?", + const=True, + type="bool", + default=True, + help="Whether to remove device specifications.") + parser.add_argument( + "--initializer_nodes", + type=str, + default="", + help="Comma separated list of initializer nodes to run before freezing.") + parser.add_argument( + "--variable_names_whitelist", + type=str, + default="", + help="""\ + Comma separated list of variables to convert to constants. If specified, \ + only those variables will be converted to constants.\ + """) + parser.add_argument( + "--variable_names_blacklist", + type=str, + default="", + help="""\ + Comma separated list of variables to skip converting to constants.\ + """) + parser.add_argument( + "--input_meta_graph", + type=str, + default="", + help="TensorFlow \'MetaGraphDef\' file to load.") + parser.add_argument( + "--input_saved_model_dir", + type=str, + default="", + help="Path to the dir with TensorFlow \'SavedModel\' file and variables.") + parser.add_argument( + "--saved_model_tags", + type=str, + default="serve", + help="""\ + Group of tag(s) of the MetaGraphDef to load, in string format,\ + separated by \',\'. For tag-set contains multiple tags, all tags \ + must be passed in.\ + """) + FLAGS, unparsed = parser.parse_known_args() + app.run(main=main, argv=[sys.argv[0]] + unparsed) diff --git a/stylelens/attr_classification/freeze_graph/frozen_graph.sh b/stylelens/attr_classification/freeze_graph/frozen_graph.sh new file mode 100755 index 0000000..1e1319e --- /dev/null +++ b/stylelens/attr_classification/freeze_graph/frozen_graph.sh @@ -0,0 +1,13 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH='pwd'/../../tensorflow:'pwd'/../../tensorflow/slim +echo $PYTHONPATH +export MODEL_BASE_PATH='/home/lion/attr_dataset/color_model' + +python freeze_graph.py \ + --input_graph=inception_v3_inf_graph.pb \ + --input_checkpoint=/home/lion/attr_dataset/color_model/model/train2/model.ckpt-54229 \ + --input_binary=True \ + --output_graph=color_inference_graph.pb \ + --output_node_names=InceptionV3/Predictions/Reshape_1 diff --git a/stylelens/attr_classification/freeze_graph/upload_model.py b/stylelens/attr_classification/freeze_graph/upload_model.py new file mode 100644 index 0000000..829fff1 --- /dev/null +++ b/stylelens/attr_classification/freeze_graph/upload_model.py @@ -0,0 +1,23 @@ +import os +from stylelens_s3.s3 import S3 + +AWS_ACCESS_KEY = os.environ['AWS_ACCESS_KEY'] +AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] +RELEASE_MODE = os.environ['RELEASE_MODE'] + +AWS_BUCKET = 'bluelens-style-model' +AWS_BUCKET_FOLDER = 'classification/color' +MODEL_FILE = 'color_classification_model.pb' + +storage = S3(AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY) + +file = os.path.join(os.getcwd(), MODEL_FILE) +key = os.path.join(AWS_BUCKET_FOLDER, RELEASE_MODE, MODEL_FILE) + +print(file) +print(key) + +try: + storage.upload_file_to_bucket(AWS_BUCKET, file, key) +except: + print('upload error') diff --git a/stylelens/attr_classification/freeze_graph/upload_model.sh b/stylelens/attr_classification/freeze_graph/upload_model.sh new file mode 100755 index 0000000..2e03533 --- /dev/null +++ b/stylelens/attr_classification/freeze_graph/upload_model.sh @@ -0,0 +1,9 @@ +#source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim +export AWS_SECRET_ACCESS_KEY="7NFxpVlVQjABUXv3j3BCvayc6sgRwwXzHMl+iSJ8" +export AWS_ACCESS_KEY="AKIAIWSVDY3WRWCMFRJQ" +export RELEASE_MODE="prod" + +echo $PYTHONPATH + +python upload_model.py \ diff --git a/stylelens/dataset/deepfashion/get_object_by_fabric. b/stylelens/dataset/deepfashion/get_object_by_fabric. new file mode 100644 index 0000000..e69de29 diff --git a/tensorflow/slim/datasets/category.py b/tensorflow/slim/datasets/category.py index 1eaa5a7..908309b 100644 --- a/tensorflow/slim/datasets/category.py +++ b/tensorflow/slim/datasets/category.py @@ -31,7 +31,7 @@ _FILE_PATTERN = 'category_%s_*.tfrecord' -SPLITS_TO_SIZES = {'train': 257086, 'validation': 32136} +SPLITS_TO_SIZES = {'train': 231396, 'validation': 57828} _NUM_CLASSES = 50 diff --git a/tensorflow/slim/datasets/download_and_convert_category.py b/tensorflow/slim/datasets/download_and_convert_category.py index 134ae54..02c659e 100644 --- a/tensorflow/slim/datasets/download_and_convert_category.py +++ b/tensorflow/slim/datasets/download_and_convert_category.py @@ -38,13 +38,13 @@ # The number of images in the validation set. -_NUM_VALIDATION = 32136 +_NUM_VALIDATION = 57828 # Seed for repeatability. _RANDOM_SEED = 5 # The number of shards per dataset split. -_NUM_SHARDS = 5 +_NUM_SHARDS = 225 class ImageReader(object): diff --git a/tensorflow/slim/datasets/download_and_convert_color.py b/tensorflow/slim/datasets/download_and_convert_color.py index 335204a..7eee1b6 100644 --- a/tensorflow/slim/datasets/download_and_convert_color.py +++ b/tensorflow/slim/datasets/download_and_convert_color.py @@ -44,7 +44,7 @@ _RANDOM_SEED = 5 # The number of shards per dataset split. -_NUM_SHARDS = 5 +_NUM_SHARDS = 95 class ImageReader(object): diff --git a/tensorflow/slim/eval_image_classifier.py b/tensorflow/slim/eval_image_classifier.py index 0e39be8..82add5e 100644 --- a/tensorflow/slim/eval_image_classifier.py +++ b/tensorflow/slim/eval_image_classifier.py @@ -152,6 +152,11 @@ def main(_): predictions = tf.argmax(logits, 1) labels = tf.squeeze(labels) + print("---------------------------") + print(predictions) + print(labels) + print("---------------------------") + # Define the metrics: names_to_values, names_to_updates = slim.metrics.aggregate_metric_map({ 'Accuracy': slim.metrics.streaming_accuracy(predictions, labels), diff --git a/tensorflow/slim/train_image_classifier.py b/tensorflow/slim/train_image_classifier.py index 843b39d..1740b96 100644 --- a/tensorflow/slim/train_image_classifier.py +++ b/tensorflow/slim/train_image_classifier.py @@ -127,11 +127,11 @@ tf.app.flags.DEFINE_string( 'learning_rate_decay_type', - 'fixed', + 'exponential', 'Specifies how the learning rate is decayed. One of "fixed", "exponential",' ' or "polynomial"') -tf.app.flags.DEFINE_float('learning_rate', 0.005, 'Initial learning rate.') +tf.app.flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.') tf.app.flags.DEFINE_float( 'end_learning_rate', 0.0001, @@ -144,7 +144,7 @@ 'learning_rate_decay_factor', 0.94, 'Learning rate decay factor.') tf.app.flags.DEFINE_float( - 'num_epochs_per_decay', 5000.0, + 'num_epochs_per_decay', 3.0, 'Number of epochs after which learning rate decays.') tf.app.flags.DEFINE_bool( @@ -187,12 +187,12 @@ 'as `None`, then the model_name flag is used.') tf.app.flags.DEFINE_integer( - 'batch_size', 126, 'The number of samples in each batch.') + 'batch_size', 192, 'The number of samples in each batch.') tf.app.flags.DEFINE_integer( 'train_image_size', None, 'Train image size') -tf.app.flags.DEFINE_integer('max_number_of_steps', None, +tf.app.flags.DEFINE_integer('max_number_of_steps', '10000000', 'The maximum number of training steps.') ##################### @@ -200,16 +200,16 @@ ##################### tf.app.flags.DEFINE_string( - 'checkpoint_path', '', + 'checkpoint_path', None, 'The path to a checkpoint from which to fine-tune.') tf.app.flags.DEFINE_string( - 'checkpoint_exclude_scopes', '', + 'checkpoint_exclude_scopes', None, 'Comma-separated list of scopes of variables to exclude when restoring ' 'from a checkpoint.') tf.app.flags.DEFINE_string( - 'trainable_scopes', '', + 'trainable_scopes', None, 'Comma-separated list of scopes to filter the set of variables to train.' 'By default, None would train all the variables.') From db8d0169b6cd16d49d5e244cc3f0cb395627b729 Mon Sep 17 00:00:00 2001 From: bluehackLion <34850375+bluehackLion@users.noreply.github.com> Date: Wed, 31 Jan 2018 17:19:18 +0900 Subject: [PATCH 10/13] Delete generate_color_classifier_dataset.sh --- .../generate_color_classifier_dataset.sh | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100755 stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh diff --git a/stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh b/stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh deleted file mode 100755 index 17ffca2..0000000 --- a/stylelens/dataset/deepfashion/generate_color_classifier_dataset.sh +++ /dev/null @@ -1,13 +0,0 @@ -#source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim -export DB_DATASET_HOST="35.187.193.199" -export DB_DATASET_NAME="bl-db-dataset" -export DB_DATASET_PORT="27017" -export REDIS_SERVER="bl-mem-store-index-prod.stylelens.io" -export REDIS_PASSWORD="BZ8oHd2pfD4j" -#export DATASET_PATH='gs://bluelens-style-model/object_detection' - -echo $PYTHONPATH - -python generate_color_classifier_dataset.py \ - --color_dataset_path=/home/lion/attr_dataset/color_model/data/images From 7d8b69a36195d8ec4dadeaf2059af3171326d754 Mon Sep 17 00:00:00 2001 From: bluehackLion <34850375+bluehackLion@users.noreply.github.com> Date: Wed, 31 Jan 2018 17:19:27 +0900 Subject: [PATCH 11/13] Delete get_object_by_fabric.sh --- stylelens/dataset/deepfashion/get_object_by_fabric.sh | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100755 stylelens/dataset/deepfashion/get_object_by_fabric.sh diff --git a/stylelens/dataset/deepfashion/get_object_by_fabric.sh b/stylelens/dataset/deepfashion/get_object_by_fabric.sh deleted file mode 100755 index 002f5dc..0000000 --- a/stylelens/dataset/deepfashion/get_object_by_fabric.sh +++ /dev/null @@ -1,11 +0,0 @@ -#source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim -export DB_DATASET_HOST="35.187.193.199" -export DB_DATASET_NAME="bl-db-dataset" -export DB_DATASET_PORT="27017" -#export DATASET_PATH='gs://bluelens-style-model/object_detection' - -echo $PYTHONPATH - -python get_object_by_fabric.py \ - --fabric_dataset_path=/home/lion/attr_dataset/fabric_dataset From 415b1befedf0eb758168607c53b643044987838b Mon Sep 17 00:00:00 2001 From: bluehackLion <34850375+bluehackLion@users.noreply.github.com> Date: Wed, 31 Jan 2018 17:39:20 +0900 Subject: [PATCH 12/13] Delete get_object_by_fabric. --- stylelens/dataset/deepfashion/get_object_by_fabric. | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 stylelens/dataset/deepfashion/get_object_by_fabric. diff --git a/stylelens/dataset/deepfashion/get_object_by_fabric. b/stylelens/dataset/deepfashion/get_object_by_fabric. deleted file mode 100644 index e69de29..0000000 From e9d23eee97474d7b036a4c4d095d56eba85e6542 Mon Sep 17 00:00:00 2001 From: BluehackRano Date: Mon, 30 Jul 2018 14:52:55 +0900 Subject: [PATCH 13/13] bl-magi --- .gitignore | 21 ++ requirements.txt | 26 +- .../eval_category_classification.sh | 6 +- .../test_model}/test.sh | 8 +- .../test_model/test_category.py} | 2 +- .../train_category_classification.sh | 12 +- .../color_model/test/black_jarket.jpg | Bin 55088 -> 0 bytes .../color_model/test/blue_jean.jpg | Bin 67041 -> 0 bytes .../color_model/test/brown_cloth.jpg | Bin 49837 -> 0 bytes .../color_model/test/green_cloth.jpg | Bin 49638 -> 0 bytes .../color_model/test/grey_shirt.jpg | Bin 30750 -> 0 bytes .../color_model/test/orange_cloth.jpg | Bin 115247 -> 0 bytes .../color_model/test/purple_one.jpg | Bin 17467 -> 0 bytes .../color_model/test/red_skirt.jpg | Bin 40907 -> 0 bytes .../color_model/train_color_classification.sh | 2 - .../freeze_graph/frozen_graph.sh | 8 +- .../freeze_graph/upload_model.py | 16 +- .../{ => attr_model}/build_image_data.py | 0 .../{ => attr_model}/build_image_data.sh | 0 .../{ => attr_model}/fabric_label.txt | 0 .../get_object_by_color.py} | 17 +- .../{ => attr_model}/get_object_by_fabric.py | 0 .../list_attr_cloth_fabric.txt | 0 .../create_tf_record_from_db.py | 216 +++++++++++++++++ .../create_3class_tfrecord_from_db.py | 193 +++++++++++++++ .../create_tf_record_from_db.py | 227 ++++++++++++++++++ .../create_od_train_record.sh | 12 - .../base_create_tf_record_from_db.py} | 0 .../create_3class_train_record.sh | 2 +- .../create_3class_val_record.sh | 2 +- .../create_tf_record.py | 0 .../create_tf_record_from_db.py | 0 .../create_train_record.sh | 2 +- .../create_val_record.sh | 2 +- stylelens/object_detection/eval.sh | 6 +- stylelens/object_detection/eval_full.sh | 11 + stylelens/object_detection/eval_top.sh | 11 + stylelens/object_detection/eval_top_full.sh | 11 + stylelens/object_detection/test.py | 37 --- stylelens/object_detection/train.sh | 5 +- stylelens/object_detection/train_full.sh | 11 + stylelens/object_detection/train_top.sh | 11 + stylelens/object_detection/train_top_full.sh | 11 + tensorflow/export.sh | 7 +- tensorflow/slim/convert_tf_category.sh | 2 +- tensorflow/slim/convert_tf_color.sh | 2 +- tensorflow/slim/datasets/category.py | 4 +- .../datasets/download_and_convert_category.py | 4 +- tensorflow/slim/export_inference_graph.py | 2 +- tensorflow/slim/train_image_classifier.py | 2 +- 50 files changed, 797 insertions(+), 114 deletions(-) rename stylelens/attr_classification/{color_model => category_model/test_model}/test.sh (57%) rename stylelens/attr_classification/{color_model/test_color.py => category_model/test_model/test_category.py} (98%) delete mode 100644 stylelens/attr_classification/color_model/test/black_jarket.jpg delete mode 100644 stylelens/attr_classification/color_model/test/blue_jean.jpg delete mode 100644 stylelens/attr_classification/color_model/test/brown_cloth.jpg delete mode 100644 stylelens/attr_classification/color_model/test/green_cloth.jpg delete mode 100644 stylelens/attr_classification/color_model/test/grey_shirt.jpg delete mode 100644 stylelens/attr_classification/color_model/test/orange_cloth.jpg delete mode 100644 stylelens/attr_classification/color_model/test/purple_one.jpg delete mode 100644 stylelens/attr_classification/color_model/test/red_skirt.jpg rename stylelens/dataset/deepfashion/{ => attr_model}/build_image_data.py (100%) rename stylelens/dataset/deepfashion/{ => attr_model}/build_image_data.sh (100%) rename stylelens/dataset/deepfashion/{ => attr_model}/fabric_label.txt (100%) rename stylelens/dataset/deepfashion/{generate_color_classifier_dataset.py => attr_model/get_object_by_color.py} (84%) rename stylelens/dataset/deepfashion/{ => attr_model}/get_object_by_fabric.py (100%) rename stylelens/dataset/deepfashion/{ => attr_model}/list_attr_cloth_fabric.txt (100%) create mode 100644 stylelens/dataset/deepfashion/od_model_3class/create_tf_record_from_db.py create mode 100644 stylelens/dataset/deepfashion/od_model_separate/create_3class_tfrecord_from_db.py create mode 100644 stylelens/dataset/deepfashion/od_model_top_full/create_tf_record_from_db.py delete mode 100755 stylelens/object_detection/create_od_train_record.sh rename stylelens/object_detection/{create_tf_record_from_db1.py => create_tf_record/base_create_tf_record_from_db.py} (100%) rename stylelens/object_detection/{ => create_tf_record}/create_3class_train_record.sh (81%) rename stylelens/object_detection/{ => create_tf_record}/create_3class_val_record.sh (82%) rename stylelens/object_detection/{ => create_tf_record}/create_tf_record.py (100%) rename stylelens/object_detection/{ => create_tf_record}/create_tf_record_from_db.py (100%) rename stylelens/object_detection/{ => create_tf_record}/create_train_record.sh (82%) rename stylelens/object_detection/{ => create_tf_record}/create_val_record.sh (82%) create mode 100755 stylelens/object_detection/eval_full.sh create mode 100755 stylelens/object_detection/eval_top.sh create mode 100755 stylelens/object_detection/eval_top_full.sh delete mode 100644 stylelens/object_detection/test.py create mode 100755 stylelens/object_detection/train_full.sh create mode 100755 stylelens/object_detection/train_top.sh create mode 100755 stylelens/object_detection/train_top_full.sh diff --git a/.gitignore b/.gitignore index 5a6aeae..6bd7b4b 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ Session.vim *~ # auto-generated tag files tags + + ### Node template # Logs logs @@ -83,6 +85,9 @@ Icon # Thumbnails ._* +# Shell + + # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd @@ -244,3 +249,19 @@ nohup.out *.pbtxt *.record bin/ +*.jpg +*.jpeg +*.png + +# envs variable +upload_model.sh +generate_color_classifier_dataset.sh +get_object_by_fabric.sh +create_od_train_record.sh +create_bottom_tfrecord.sh +create_full_tfrecord.sh +create_top_tfrecord.sh +create_top_full_tfrecord.sh +get_object_by_fabric.sh +get_object_by_color.sh + diff --git a/requirements.txt b/requirements.txt index c9a8c63..5aa1329 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,7 @@ +0.0.1==0.0.1 +absl-py==0.1.11 appnope==0.1.0 +astor==0.6.2 bleach==1.5.0 boto3==1.5.6 botocore==1.8.20 @@ -8,6 +11,8 @@ decorator==4.1.2 docutils==0.14 entrypoints==0.2.3 enum34==1.1.6 +gast==0.2.0 +grpcio==1.10.0 html5lib==0.9999999 ipykernel==4.6.1 ipython==6.2.1 @@ -19,26 +24,29 @@ jsonschema==2.6.0 jupyter-client==5.1.0 jupyter-core==4.3.0 lxml==4.0.0 -Markdown==2.6.9 +Markdown==2.6.11 MarkupSafe==1.0 matplotlib==2.0.2 mistune==0.7.4 nbconvert==5.3.1 nbformat==4.4.0 +nltk==3.2.4 notebook==5.1.0 -numpy==1.13.3 +numpy==1.14.2 olefile==0.44 opencv-python==3.3.0.10 +pandas==0.22.0 pandocfilters==1.4.2 parso==0.1.0 pexpect==4.2.1 pickleshare==0.7.4 Pillow==4.2.1 +preprocessing==0.1.13 prompt-toolkit==1.0.15 -protobuf==3.4.0 +protobuf==3.5.2 ptyprocess==0.5.2 Pygments==2.2.0 -pymongo==3.6.0 +pymongo==3.6.1 pyparsing==2.2.0 python-dateutil==2.6.1 pytz==2017.2 @@ -46,12 +54,18 @@ pyzmq==16.0.2 s3transfer==0.1.12 simplegeneric==0.8.1 six==1.11.0 -stylelens-dataset==0.0.4 +sphinx-rtd-theme==0.2.4 +stylelens-admin==0.0.3 +stylelens-dataset==0.0.31 +stylelens-s3==0.0.2 +tensorboard==1.6.0 tensorflow==1.3.0 +tensorflow-gpu==1.6.0 tensorflow-tensorboard==0.1.7 +termcolor==1.1.0 terminado==0.6 testpath==0.3.1 tornado==4.5.2 traitlets==4.3.2 wcwidth==0.1.7 -Werkzeug==0.12.2 +Werkzeug==0.14.1 diff --git a/stylelens/attr_classification/category_model/eval_category_classification.sh b/stylelens/attr_classification/category_model/eval_category_classification.sh index 1b2b439..4525984 100755 --- a/stylelens/attr_classification/category_model/eval_category_classification.sh +++ b/stylelens/attr_classification/category_model/eval_category_classification.sh @@ -1,9 +1,9 @@ #! /bin/bash source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: -export TRAIN_DIR_PATH='/home/lion/attr_dataset/category_model/model/train' -export EVAL_DIR_PATH='/home/lion/attr_dataset/category_model/model/eval' -export DATASET_DIR_PATH='/home/lion/attr_dataset/category_model/data/dataset' +export TRAIN_DIR_PATH='/home/lion/attr_dataset/category_model/model/train1' +export EVAL_DIR_PATH='/home/lion/attr_dataset/category_model/model/eval1' +export DATASET_DIR_PATH='/home/lion/attr_dataset/category_model/data/dataset1' python /home/lion/bl-magi/tensorflow/slim/eval_image_classifier.py \ --alsologtostderr\ diff --git a/stylelens/attr_classification/color_model/test.sh b/stylelens/attr_classification/category_model/test_model/test.sh similarity index 57% rename from stylelens/attr_classification/color_model/test.sh rename to stylelens/attr_classification/category_model/test_model/test.sh index 2fbd98f..3d2379c 100755 --- a/stylelens/attr_classification/color_model/test.sh +++ b/stylelens/attr_classification/category_model/test_model/test.sh @@ -1,11 +1,11 @@ #! /bin/bash source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: -export MODEL_PATH='/home/lion/attr_dataset/color_model/model/train2/model.ckpt-54229' -export LABEL_PATH='/home/lion/attr_dataset/color_model/data/dataset1/labels.txt' -export DATA_PATH='/home/lion/bl-magi/stylelens/attr_classification/color_model/test/' +export MODEL_PATH='/home/lion/attr_dataset/category_model/model/train1/model.ckpt-769143' +export LABEL_PATH='/home/lion/attr_dataset/category_model/data/dataset/labels.txt' +export DATA_PATH='/home/lion/bl-magi/stylelens/attr_classification/category_model/test_images1/' -python test_color.py \ +python test_category.py \ --model_path=$MODEL_PATH \ --model_name=inception_v3 \ --label_path=$LABEL_PATH \ diff --git a/stylelens/attr_classification/color_model/test_color.py b/stylelens/attr_classification/category_model/test_model/test_category.py similarity index 98% rename from stylelens/attr_classification/color_model/test_color.py rename to stylelens/attr_classification/category_model/test_model/test_category.py index 74eec5d..4b84266 100644 --- a/stylelens/attr_classification/color_model/test_color.py +++ b/stylelens/attr_classification/category_model/test_model/test_category.py @@ -52,7 +52,7 @@ def run(args): print(names) - logits, _ = getattr(inception,model_name)(processed_images, num_classes=12, is_training=False) + logits, _ = getattr(inception,model_name)(processed_images, num_classes=14, is_training=False) probabilities = tf.nn.softmax(logits) init_fn = slim.assign_from_checkpoint_fn(model_path, slim.get_model_variables('InceptionV3')) diff --git a/stylelens/attr_classification/category_model/train_category_classification.sh b/stylelens/attr_classification/category_model/train_category_classification.sh index 9c61878..929789e 100755 --- a/stylelens/attr_classification/category_model/train_category_classification.sh +++ b/stylelens/attr_classification/category_model/train_category_classification.sh @@ -1,9 +1,8 @@ #! /bin/bash source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: -export TRAIN_DIR_PATH='/home/lion/attr_dataset/category_model/model/train' -export DATASET_DIR_PATH='/home/lion/attr_dataset/category_model/data/dataset' -export CHECKPOINT_PATH='/home/lion/attr_dataset/category_model/data/checkpoints/inception_v3.ckpt' +export TRAIN_DIR_PATH='/home/lion/attr_dataset/category_model/model/train1' +export DATASET_DIR_PATH='/home/lion/attr_dataset/category_model/data/dataset1' python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ @@ -12,8 +11,5 @@ python /home/lion/bl-magi/tensorflow/slim/train_image_classifier.py \ --dataset_name=category \ --dataset_split_name=train \ --num_clones=7 \ - --batch_size=224\ - --model_name=inception_v3 \ - --checkpoint_path=/home/lion/attr_dataset/category_model/data/checkpoints/inception_v3.ckpt \ - --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \ - --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits + --batch_size=42\ + --model_name=inception_v3 diff --git a/stylelens/attr_classification/color_model/test/black_jarket.jpg b/stylelens/attr_classification/color_model/test/black_jarket.jpg deleted file mode 100644 index 33bab0786019dc6be7121a1745267f6ef2bbb13d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55088 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 M$b`M^{_p7j0DhTPS^xk5 diff --git a/stylelens/attr_classification/color_model/test/blue_jean.jpg b/stylelens/attr_classification/color_model/test/blue_jean.jpg deleted file mode 100644 index 97bbea71fc911d2128dfc9f27837fdf113f2381c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67041 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 z 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 diff --git a/stylelens/attr_classification/color_model/test/brown_cloth.jpg b/stylelens/attr_classification/color_model/test/brown_cloth.jpg deleted file mode 100644 index 36ce2e9f5310cce9e8c64deac98387fa0849edda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49837 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

35*5GFgG-C2ir*@Dl3UNnbCKc|*TxtqEenM#zn! zlA|x8pa$Wwrg^^Pw?K(NMz5-y$mzsQDLJ4GDTzlnsL*h}1S@Ur$8a+MZnN1LjWF%# zv*B=@NKs?EFI7ZHdqh)hr1Beg(5h_F{nRF`dliY$g56;6TF$T84tEu660XY_Yh54d zgND{cmRpSs?iDH5D5#hr(K5l}dSud5@=twc#44Jh)`VHPcfN%aloe^Pq&yrBtAhQ+ zZEee+>I~m&IPN78jB%E$rm8n4Gs7S&h2H6o*=CWDd;}Q>rCa|Q#puJ5ea7rM@ktUf zJ|+0}2V(ujiTfp(wPp6#xQL)T)|eY@W}-7FgOS8WfI#TfAX3h)0Nl6Qa~tRbmg$NY zVZ}SSilVs1qx)r}Q94xGGVi*zP|7ETv4|`;0tEr5RnBT=$%?`wEkEtLnn+DQIs};w z^my8Fro7JTPLG(HC)%Y6?#&XjVU(Vb=L~=Ku86d+4@?9fwc~>~`sQKiCZ2@(jzK$hG9s3keRR*Q>#j%%i ztP>Uml>0jdzwi)s{>>f^8u~z>cXmTbzY;+nf3cP#MeE6zq(HM*;Of2=k+1E9G zU6#q4Oo%=+3FerUW+!b@KDoqAOSGyLYq_p#+`dHrK_eqdC*B4jsi9#ye=-EwBbE+_S&F8uUo{=~ z7=IS6CwuK3HvV{!NVB8%&k3;YI`|JePOcABmA6n1!irbu@`L8O2yEV$N7QmKUTXe9 z38X`|Gzx7!oG6Nh*JN+3?O4}&@GoL#^TRH}u8ys|&vDm(Q%<3Il|-NM^5(ZeXdASe zWJRr<($;8AO)n!+H82BSLwCXe!~DmasGPqlHndH55D2oZrY=BhfLV%pSo9DJf49-c z0pdMZVu@W+CeUh7P5VH=Q#zkUc;vK2m2Mxxy>8YU}WBP>|@vS5ZBgU32g{0&lK|sG-Mt)+3m0Y@4<76j+BAM9CGZgH0}uAcibuZ7p+T z@`xU7`amVQI0JO>x@ERtsFsph*TRDxZHgZb7K*;)MwLc# z^3{amTFZW9?VAT&{bzQ?50f0$beZ8jDEn3U#qV!8>M2Uux z5lE+~dK{p$!kFRBOw`^8{K{hsSE8?-t+Gac*z>cRDfguW$oCg0yX-}T7P&zAStn8A z2uig|nk~xqS^BWub_C2;Q?DW+-(`$?0ZOZ()^@^0!EdO|LbI;601|L-)$u>5;Z%}_ zC+54!@3nKE=;+j;1Wye>98m7qYX{`&$;{Cy2O*r3T)5(F z#Ldb7=nneV&J>S30udic@zS=``J4 zFYzztpbE%^!Y4-E&snFN+$DeQg*z_^+_5udXvhzIuKz(b*VC4;5PnNrRko?h&kBB< zV#sWF$Qxl_$C1B>iNrf-xE7xk19m78SuI#=m^sC6X!}ebM#ko<-F0c z2o=#Pk0&Iu;Dk3vl=lZ)N9rcl9nOjFN6AN+lN48iEh)ZvLzNba1d2~!-u)WXMC&!l zGHlnvB%{m!eUYxnN(JCxZU<2RI7xUllr)cRUQ++=topTX66dfiWbn@+-=lC5H33Tgsu37Xr5_u8I37f+Fo6>D%D%7OJ$;|wpBX0W)`=f*{ zH&EyC+j-rzoX8ivPIT53MlJ6v>o$8Nh(pEoHm|S_{LHgvL*D^z%7%yth7%{vC&iBo z5U|dDQ-7TdfN&txbg+6BRcb#dK}~sSli6vV$ybkYCsWFQG)GEqkg&(bly-b_4$Fe( zml`PUy2oZ8`tbL-9%w6X#jyancnAav+IA-h;B(wCO0dur8O4DRL%i>^Ke@rDgB9pkd4XS} zXZTz#Y05Gi()SO;W4A^Xc$4Dw*kqI!+G#IbLTw?YHzwm=Ef~S;J-N*5ps(Z7yG90BmzM`P=|{G<-^HAy9U&zj#AL*ZcSfi`cbAtfhTMRSgE zIu40Q47lt#GKR^Y3BJR?ZG2<4IdNdO-9jUl@vJNuqmij<-aDonb%9m<2ZiouQEweI zb0hg{yDj*thp*>NDdnCGZQ4SA)SoKdKY$0^HPMEqsbu$~siQITwAkPL(cJMQtDrn6 zhRgd&L}9bQT?FF=m{t8+EQv5jHx^{F@ehjdx{}- zN-mxWRps=^^wtHXzA%V~O@fuNY-wb7Z+f?1{#I@?;sF|41@Q8O*E0V>v2B`I(+j8L z=#;wpj1<9f{;d8+uUi@Zr?^{}KN??9rTqX+?!`oQp+xKB`?kf4ks^$I24rWvY~H#4YxTw^o58`WVDlyG$Q`HB zSpxC*2cOm*yumP-jnA5YqUCSM?np33$^sXHdqSx_N?9L?W3o>wCZeT@{8f!bnS@#5 z-TJxma(p7&_V;EY_1Tm(rwXzC9uTC`eqm;8fDR1(qH zuNbebutMi6!kK@Sg-skmgO{Mp+?1d&U%D8g{;XP#Eo*<5t>R-;@{s8$g8dJQns*mP zEt-O->{l`GwijRwVK5vSUp1cP3Y5-;;$r4cDO!fCS#o9C+scB7xXtjZ2m4Er>?+9$ z*YGgo2F99bwxED$Sz?#cmf9G>KD{=e-A_hzM4mPxNj#sn!EWXs6#l+{`UrWqX~KF( zSJ>~o#0`oLz`mQ~wIL;rLt`9Yg}-7&@&s1SL*dFq{F0Zf8B(#Aq^0V^T^TffL5ByQ z8VX`p{UN!N+Vo207J_a3@*wo5(X)P%;sx2j3G0+WX8f*QKXLwms;J^3DatELuZf!n zbvw4S)Va%Odbj~5L=;0)1`TUw96XdQC$AAML=YhRGi5Y2AH(w-4~*J=7_o#ZBJDY* z#HMj5vUE7_+!yt5`EX?H^Jt;Rv{x~nb|wueK9$KP*-Wgwy7pCNUoTC!R@!!Yl{Q_5 zH0}|Y1yRr4+4xoI{T+nF%qxnvBR=7luDOMOP|8>AbUUI?qIykx*f;T$YPZc4K5V$# zJ@}!28ni=bVbHFnYHL-Un{C4!+z$pyu%ZWP6&Hw+@!&pi&ntdX?A}$mvsfnz@dvw8 zLA6n=0i)*XVy#X5Td}q_Q?XD!5%%3?#gpnq8`%}0^{-EPQOF?6qp|~$Z9AXDe4dLB zWOG393HvchdSrEX?SeNb={<>w_eAu##|}N^zOQdvti%DJGF^q)8S7p-Ft<=#w>;9FX}8j+|QS7q-E zk}J!5@%}pwrwW{^wsQ3GF8g>EVIA8n^T3ie#h!Vps4zT6e&Yz1g|Q->G1knhRxts@ zsDDs>B2Od{OgLT`MT0ZU9>Kv;x>DcFEW*M$#0U3TKGJx^rnUJSGgl@OaVp>zUN1(l zn#B8^yo5gslpLft^=H(-D3&Z|#E< z$S(kjipVw~$eJ(eruE0H+?VHc7W3^l!bpl>_z~RAqxm-Y#WJZ{zfb43tn~F)^hfhN zLGuJXl@Es$+|J^@M$3oGHuJoBlwA_@ctPG4A)SRi^^fEy#NuJj6o882rhza(i7lHq z${Urdcr?nm6hmCxV_V^@@g@G=JRc5;rTnYT8J;x!;9r*lxeZmS5oDk-bs(deVj&|d zey6w1iBjZT2M$S?I*u%$r~V=aqr{wEm1>#|KQGaRc1I#UfEbmSV=P|W)yGLbu%h6E zi}IB+uRv}{pwZ8)`Nmk`7k-^AQ3qAn$F#SY#^uS{?uiNYww`1mJX`dH_u1)Oco|SJ zZ%Mu)B}iTQ$K=jhRi?g9lc%`%$hV9tb(w=06lhYYdl6>7@b@s!Apv3``J^fjam+5K z`uv_BtgbAcQ~`zrn05E_{{qi{a0eRZ(?_cG{{Rm=2L+axIINnPDJFbP~-!)}rR;_}9^K^HYs}x}1rYC!v&w_f%&S z?47#7!EEF0ghHQv{qbOOtxO73n{O-Sj_3VKxSL;b$xjp)(f{>NnbH^%G$tM}9(Hso zlq6m!non+*3F4M|6j3t655sSz$Y89x7K2W=a#4xNG+bCF5hmP}El-CibD@WWNMSa- zZ+9iC@CZ1l%2$1rpOcM}^jv~Xq>2DM72@EW;_&D8o}oO%r;Uqw+^8NESS?O?4+@cO zP>poyw-RW8VO;4V8s>v~(djhGB&c5K0_C#i3s4?z-xBwW&B(sF#9a%~N8i6|5^wlZ+9LEC z+T-9_H}IzY`3@x=T)|g5a#6cjhPlut!z)l^cWlH|hR2$V4Vj=-MbVn4b+k8CqOfZ+ zRkP>qk&{e2iz8ll*^v*uplzwRd{q0=IeohQ6{^jmwK$kEn?^81W`~bwp5m)teLnp8 z4;vvfB@bs? z!X?6Rg0;Akfczu^(Di%RUzO#T36K$cwoFP!*^BQ8hh%u=+U7%nJRP(&r2oB=*B2;* z@XiuuaKID(4=UxSlSX(e9{O*cALNR!3`v6^eYNMvQu_%K7nUVhA8|B8z=hEudR}Er z$AI$POvMwQ98l*{7){ApEF`nUMck)F6Dj+`us6kIyO>QRD(e%rE@ACl@aG;)7Oju^ zglL}Gj&U#nI#l?_)sP70CXq!dqW6|ux?odhic~_fpce;MB^QwZlC z@@k>c=XQBE0bM#0$Ks$kmnJ%E9nN3=d>5Xz^rp!l zkGjk;GiACPJVq&`zcN=dHK{m{isd-(l0Rm;n|R}lie-6MecQ1rPx>aBDvILBuUEhP z;YIlXA2+RVu%F=I;b36?4}Hgk0Z?#YiK~64WH)mSf#noS!Y*nW_#>e{w*yC|YK{|H z{C_TCKZ(K+`?cnNEAO%@)TN~1sugH{bXhdhb=N{;qU2Hx5}?DP;jM~B?g~S_c3<7s z8T}&|-qUZ(E2yv=ea01|$z{2_T1{5t%ehc(V(U1UvB%7F;RHHaXZTUcCNxyB^Np+X*Jj<4MyVpc7WPLi)= z=6zcJDN>$3aU>VZV6ZpkG z#W-G243?_V96gRl!A%%4!5ICkDUR4&ncmDk=-xb%%dm9n5bYCGrX%U#Xsw*ZnDD0R z;~nout9j0;%f=dm7lS=dE%1~WK_r3Af=4&(p^U3)-d#NT2hPu1sZzRCnWf@42&~>% zX*;sO0uDmya)}o=U*v6Z&PKa6d>EaL96Ge?h)L7!$nV8PKF;0GcR1bQhJy<4JC03( zJM$%Im0@wnAJ92_l9mxG^eiokF{Y=|3=&R^6#4SBpN9%UN%m%CF5rFwIcpSG^sTI# zX0l8$m3yk^;{KHOqcd1Ba(YdtcgXKaTdJO@+5z)~0*1sg-|*b)Yw#k?dp=K+c)Y99 zisz3Le8>4USX*`bu}UXqnHYj;6_GD-;wFHRRZV}91*TmcI04ip01@;{-=qi3U(FJm z1{&#}#_ajy+mz^vimt;pBM32PX{%NPqDKxhwYLnmLl?`|WW%DfPNrgYl`@OQ(0Lv0 zgo9exO4wXr!k7$pvIsdyEs2Oekd$##=Xv@GjDgO0s5WHAEG=~Vprl_eY&jmrpV+m? zpQ`%vE}JIsw6of}LmR6)%YAidU`ty%GF>-228Z!ym3zu?7k#mZnM0X$QO=@B?msB{ zCT4v`$a!@q8+R}y6k9R9=F3*W#PCZLmVq?rg{jL`S#A=bG;*0>Nr6XUM#Ks_sC_Q< zEVi%;_e%NI7wQzIf9?0BlyX1V&aSb2Ujda@3&l5hjvuv6T9mvirc%{5kL;EUY5%nK zpn7gmONUyq)mrS@7b|}O>@-dSNl8m|tJV=p$!U0Cq!dQ*BqT{iDJFriHV4qigBR05 z%aqyToC5!#40UGf?GeYvMVjjt1HXn?{MBbxS>;Kq=pMO@*FptF)LA?w`&;?AN_+XL zna%mFPs7*J z)TVwv?&}frp8}vsT4(9XOj?Rmr!j(dORJp7=xfHASt7{StHv_N^?v)nh(e!HI#b|IC&KWnwjHDe!294{W{@{F+mTstMZ?@X7#0;(L=M? z%HYvFJOH}8vnHG8P~SRgQ&5JwyHrmkAyp%&1KG#?;W12E`0h0Yq;I@z&=QmWJf3QLQ(pT1^_Ha$F;hq z2;M;{fFFc5oseummCFN&L=6hfUP*MumY&R@SNgp3{8R+~gZgp<(X@$Msn-h29~`cg+}u%QyO3mJ&~2UV}&I;1NINw(Y#=MFl%9w}ZV zM;U$-P2KKctQ;DGO|GW?2PJoKBEl9TcT044*hd~CA<8slFCjE0)<+(xf{wyi&Np7c zs|cHNBVE&=$KL^yAx_o<5Ga?x%EGS=xpO|a7WKYq^cnJ|%ryuVVnbfdlQ&Z@cnyge zj$vC9m_(|NdNd{#k_^-+KI-@fWpRV$UI6E*DOqi`sxiM4Yfb`rg#UT$xU%073Eh)) z9Fo8URHcT(^Xe>;* zY;xgdf+vWACO?L=@)Q`8x+dzWC(!yt0Rf4h=b0=>fI?$4FScX-rLNU#dA~YhgPLj? z&%}AjREuIlX$Q}cShXaIE6O7(D~tGkaU1HONLE|}XP_>#JcKZtrWlPxE5dPceA$)o z{B4kmi=NNT@TYabzpT~x;3%KgJko^ujZ&pOjPR~-Q>4{yb(9c#^77QDFdh;RrQEbi z?-X0_hN=VQ=@vyQ`?WEp!8(ys7hXmxNHdnmj?}`k9vaBZf@p*O5sRtbpoa>7|Eon#tUg?)%0?&WU_!RnDBf;I)3m ztl9>BoOPb|;}sK&u-I{)nU+#**OzpHw+9ZKThlzChb7N8Xep{ykrTO9q*A_FsPrT@ zfqL%aJTU@8tBDQ~G{*DuF-W>SJiSr_+MY93j})aR_Xgu*1vJ(lV#}uX&1On?Bm*Z(wJ*GN zj)PEfAYxjj2GhjFNyM)t|9vZ|o7zaD{225~rB2#yf7`cK<6AOOfL}%A=nmR&#uqtCC1U<6Wc&9T z>1h6%$^#aAJXe=Dn`u%^=oV`xF(sRQ6E&3cb*>B0?0e4xM;Yt=7EzW4u7rWyq3iC^~m$j%2 zgCJjFeXDWT0~yiR*yD~%I{i37%Kj7T1r8FBKG~y>xE|Jb>@NWQq@HQ|@0zYd7oD(- zBUVjR7TaKKwt?IY;}Q6@pPjKLqBQeS{(d%pI6S&;2Lo0jFnRBkkDTEsWqvfxP!j)e z>{@K$7F9V;_h`}OaWi#T~r1>!G)$(o8_Z=_3Wvye!i4&x~VDUg9pXZ;H z-0Iu_j@+fYV-(sEKe?q$Dw#{oq$>TzBB@UB*LD>>f}T*)q;l>ru?E2d*WAELwspyu zWuyl$TC{rAzwKX|?5Z3X;|a#S`i5FNjGU=Jl@ zb45D6pf$giT|Hu{b=C&qk7LP?ZWbI``k=`7czs^Ec)-Rb+N=sP7gk-3rKQ(9d|0Hs zOt(81FERxbevwRU?Ur~dVYN#T#}k$8pG_AcJPT@!{VQ*w`K|^tXL@Ay6Ha2Mj*nWQ zcM59;4Ou@kJC!$j5shMMC&*2zVS(Yt08ph#f_X`&ByKfzmPTqOTl$tNraPLdU7ev>P^?=FyW@dH%N$(5QXb0fch7=1;#oD9glT1q174zlnrZ-mC|03+Y|Ji*1u>Y1+ zZ4slys1chQjlCm6>|LX^Y3$KdZSO=7BS?(e#MaWw28W@jQ-G(nVs9n24X?D5!rwxZtvJ4o1p&6);ZRD-&TmTk(DE@%u~2 zB6Gh-0>^r)tH)dAKXlAu1;tgFX?nz4F%Kk8&@7&BMv%OE<$0PC1^prO5rR$u{nqHnBI2m3qDb zUSX_)wvBAC59kwA%PdM><-7-3`PEp=*-412zd{-gwtbZHOLi0eYs!1mD}=E-@z=|3 ziqJ=oh>t|P4o((XLh_x^w3!CaLps>xqf#G=E7$O4(S|5rs`kg|4U8Njuzm_e-$#m@ zh7)gx=EpFQvR$G18l0y!V!e>3N$_Xz3IRN__kD8XK;n+NW9XXq@^5-u>|r}7V4PXx zW>tXd*wdoGAX`N@D0o7dHD1D0Td(8c&b7^Z)o(@Y`W(G4EBsYH-1hZ}o>7XiI+)$vk$+MX_Zb+Zn!nZ zY1~#-{rZM~*=+mAE@YyeiKXpD-2JbNuUar^z>WFBH$!=jy5@WLN?L4JH`9WYVX+=} z#J}fgmRPLAA`-1kSV!0!1*sq6QSm`DPUe0z@L_>Q?YnVLAU4n3yrfpu_VuDM)IEiD;s-x=~hed{2g$^OKL0aa;rP3 z48+7-#!;tY7l`4~<%o4fU}9a=&;!qL!i4wz(IEj{WYMYzIa{PPXxvzVy=(w!5kdVJ zu-#Lb0O(E6fy}!;(kx|YaTOjTGBQt3XE6&vgj{Lh)dsjq9W|YPg%r`i04pmKqg^#- zej|Ps#aH2+(nZt?KFxURk~+_k9FTndYMKjhWpVN1HvTJQpkVwEAztw})1W}}HE?6b zyX%Qy(*skJP~nVeKTbB!Xe**=xYu5(1>A{cYR=hX0`^06gypsogD~7`!Uqwp`S6Xo zgTI;oa@Gky^Vuyyrf>3mHlOAso0Me}7Y~p5hSt}2U(?Z7|GtpBJN---r)OS8@zJA| z6O2kw{ea;vgrC!j7mVrY&s9Hwkis|bnl5e@ykiZN|HkErn9RZR&W>(TRyXHj*1Wwi zazBeHEJD;b!?TwpEx-w-LCiu;s$)fHv3-fFIUGNidehbMEIeA}N)r7!A zC%mf+PFW_XD=P93BwoFrt{!Qg#hGf`DLob!DR;9{6SXx8&L8`|k|i`?-xE!jBXk!m zYf2{!+9J?mkPAsSm}NUdi-sB~iqIcUJY7UK2=H>`Zn!DMxO>mwq=htb87^RGHKN3% zO#3*y_{D*1~}kX+Au!i&8ETi9&1(wFd8v*&IGH7*E>F=&T-IzOQ-OHwSDd7 zep&oz3x4TE0>7=UBz#i*LZPeghUpp$k+OU7qg8 z12?st3H&~6D7 z9LJdt1b`i_dBqju6_e$yE8jq`Gzq zUdO~SN4U|wbFoA6-!qvK^Nn7 zt$zND-O<+z)Wv8Pje`#nXbSwNo=5%^NHhq4dZ;X}|Dd<@#q`fVLPcE}^~XGYdelM? zf&HPdYi*OgJ8t)V?#!rZK?Y>$ZFl*elJiCherXH2u+Tpvs?m-gc=c-Lw@!HtdiZ-Z zHmSw~R2NuASjNu za5GBT_0HshDdRe>3)p1)rnJeOxeS83^5@-V2v3_meD$-8V1sF4ns-*Qi#ebFU3=bF zNBgn;7yBFkvp{(^mDHHnK^7+sIb`Ll7Vc)q`ziu;nIGm9wJ@tGt(rtet8kU2Ay9Rt z6(X8X8IeDf1h~W5D|BwYwn|jU4pjEgIT@Q*VDmYYUEiXIm#ld70nuP%v?7CYaf$WK z@z1bc1GI7sT2S$bK&i3uvvr7{>btZwo$2&Q#c<)LFFHSk!c#c3)oA}loIzG^ygZMg zakz3aQO)lp;bIlyAVnYV9ciPu{$Ec0d*%5?`$8|;juNGNdEa*z)Tl>CjekyFTvAQb zQDRX^Qi`E&$p2Qf(ey@A?S1Kzw(1C)n;>B?$3%hYNnl>0y`}Z#@Z^YZ!)0sC`lpy) zTm9NsrvO0Uc6;0XS3?#xO-QPI3Q>Vh8hAN9g&Wvq+=F6AYxfRG_(~ZbMmb2r@N_+03I$wV0 zyf=Qkm{y|7lT#b@tyc<$+o89fLH{tneDG+zoZQ?1Q5g^z?rkk9ichI1bs=uRd`}L9 zM6*7RwR0Ssjp~3LDT07R?ySs5s&NS`I{roxUR=De55eq%^UNte4xjY6#UdIu8z7|d zQW&);8bxWqg6~8UXEjInlVWqXm(Lf0;-g(#sg4NT2JuaOXeMNye#vCOyaghnRAcXd zqzVn8d7^^S7+|PgM!_1YAL5ateaLvS`Bfsn?_btWH;6ikxyvjs)8gUAARo z4oS!z0z}<$^2BkTOZnjJ7)(q0y{8yS-Nf533QY1aQOnjSxg_!yGFmFS1?(0wC4!oR zPhE3AXYYHSW6)O4M)=$jV}<56!|j#U)U=V;<}-ka@`0i5Upf^b(F1o_s~fS&Oyxz{ z_eu%!nXe!C{<~K2RQBh#0Nf@)6DsO7rA{g0 zKsh>=@F;1bg8T2y$4*iK$)pQPp~?^ zi7C7Q7kTo7A^pVEw)?RVw49%|cje!Sak_Z63kB9Pt64fxV7#sZRz6MJtT&+sFbK6_glrG=R>7L;kBz z=&iqaBT!w<0JcX)j>PY^u&{6NNB-FUOhIrpk_WyOFKZB<{St;wzqtKv1>tyySkqqPQD(8hGCjH#m~K0OH+n=v=8 zGb(>#pY+cL=D)w_q8E=}K=l#7Wxw56QsYe-9}x~)d-Tz7K#^eGefRvxv(tZdfU%Km z+v+iM7%U~x>Z*=NrjO|PMm6*P6LnrV-oG+BM1sB8=oeOVr*YR;AfEUKwD}FJVOF05 z)J6v@G-~HbDy;urF|UZlX@U0WJl_;ja6h+x_LmVYsxBJ+d0+B~Q2It7mhQ-sE6?%l zHlDlXIlIWjQViw7M;h7@1llOxecY-yTfP>5%(;Mt+;PK?h6I_3Na+YKX|Aig7oU9* zuuX(CX9@kj&3>?5@})Jdtt1wW8j=L6@X)AJeNk}r8gnQg^P>$NSJbol6T&W27;k>A z#8Qgg?JnIFqJu!cP#cm&jtsVTY%?^k?Nni&;-5i^Um*F?&OQqnf&@{`FNq)$_SXK( zDxJTn;oBwV|J+L0>myvpQ2&qQ9B>eJ0`-72~xZ9_;%mt4zF3zyD+ z*9uv=$c$50y?DaLg-JgAe^ogQ@X5?y(9Cnwn@Qh$qmYLi*vhba z=g_+J%L=Hjv6w;~4xJg6KsUPiU>$T=0Tbx*5SS1i<6eBdQ7Z;%GG;aO&O24BEf0`j(W=6CzmKzBy^cOQPEFj%U^a`0Wd$~$CcTr*Yi({rx z_BTIvtizw;+&Q&rCT5e!C7aF4UFlLXbLUq-tG?|)Gdng}h0&41br+IPMHJvWOM+Lx z*$(3cSMohxTc&&^`2A!>Ar`-Q4%0?8FbF`)p;X<4)> zLMz)RRN2kI5zz{=-AgZ{DO&h%;jO-CN7(mKUEOIOnL9A4p+wt;6+$VOps^Zt|{kW7_E`z9Ero(dy{7_dv zloU08B4ki@TN6%e!Pl&iLS*Iva{iy#f=v|`=sZ2K0z`syWS%D$8#a8CgIw*tq3WpB()~U zN9rFK?&z1n@;;32Fpn2`;a+fH;mAV0_SAoWu!w!>VAn!fn#AwZy>GHt8>ulBhp!e6 z0AUr6W_d={k_hK*q+W~r-_L>M8vqCs^_=?;h%+&4w!X1u7ur))E}N14zA7GOEIDZC z5AXM(CszcNlT81hFQqHCXkX3#O%C9ktA4$ZN{d2gaGgksaeysnoaq47Sqki=EMUhO z$KQ0z!n$!NpO>W6>Mo;0dIsN!?WwqhR}s>b^MZ4^11Kw?c)xX@eBeg6OAQfSfv2DH zTM0ecSGqJozQrj~vCQNQB|0xYWS&vc=7Es(1JkiJEaIwp3NJ*90G<@ivOwWGIsCCQv~AKNEx znDUkmrR9iLnRisRyRQDX&o}*mT99&grZ*I82l6NxLZ+BtSEZ_AgXlG|E5gP5tsMWZ zCHVYhnHEriMaudiq--y5Xq}qdX!t9E!<<~c8T3Hl_|6YU_Tu*Y5A;);+>KwpF>J{y z8hjw>0m_&5*E4n5YM(@B-&^uyh7{7>e$rmv-Gt<+gfE{g6Z?-A1*Btt9a-2$gp^;Da$$0&~d=Kn)B5Jcx4L(xa3zn|x1{#JyjP8CcG$ z-?RAOiZEHl0xB+hU+E4g;&U=mYuv8-Y0loEl>5tiDzs~4w6*{HeofBOl{DQR_ZHn8 z2TcCb+wjCZ{wdQS%aey+AyAM+xWDta_Z$V)x$1mrrO^fLbNA}AFK8dIFB|9{vp&q_ z(QVO%EAv^j6sZL7O>PI3v%%Q*pN>P!6S%L$3CY&CBwQ{HDHEZ$1g+>G>}1$Tq6h1% z7Tiqz0pnP~8|Ct`L$I2`;~mCLcL zdGZX>oGLw4BhK1#uMlqe*j{+JYmDR<1LH`(zg_b47FQwOy-m(T&Fxa0mn~@&^X=5- zw{S=+K9TXwIzNq=1DeG8?7qpt=QWoT&Kmwj2c|*hs-IYiJoD{8tPMYprEPaPtgN%( zCObpY=cBVvR)jv9ta*uL9K3mw1#j){&PzO#FLF>v;Js{*pYX&Z040E9KU_9vBvxo}a&~RpQ<71=fU+|pWl!Z^eSMW3nCdU!`?t1z7}oP{ecg?o z%|dF3H#F6iJA4iIhv}hOvU+1j95KvT#W4~un%HEc14D#xr-xew+e&7vy%C^+5H(+@ zNLM6TtI?Vd(^@`;?@Rf0)2SG-FB2#l;?wpQKGaWb>%ACihH+H#&&n3gv~JqaO*Ni- z3Br^Kf@8@PeOuJXO3A62Fv`$3|&lK- zsKL7Vz@ajx^DkW_y!7@Jt^8$QM&=+i+$-FBkQCN_=XZUthP^ayuE&V%7Htx=-4T7f z3TgX2Hici<8Q;H|v*`gEDeb<)x%61LU`H)Xoqe!smNH7b8wvTGNptap$uqI)T`vHO zK3PK>v})>DA0lxHRbXjKMCLX&@pv4d@^F{fP|9bzW8TDDQWMX%t61`>Hf1SK5ctYa zpD(Ya@6EVbKpF(zo&KZx=bByMt@;ctF+v=6!__EPl`(E?;+5`S_Bx9pFMn!&b(%V3 zz3L-40}TxwFGcKb&I~rg(9|U$C8&kJ+{7=ci$gT??%1!U{fk5krP&=K4lh_sLTVZ! z0OyrBqxvcLFKEFj`2qTxUr>5nKZLP?N*a^g++a#2XABfYFH>!)xi8kn(>EC)V`& z2g$Q-d-@o7U^q?8y3E}oykwQpFQ4*^_cx|{(zOB9rZ1Zzxl~Y~OFX--nKHt>{jSyz zkz$znbW_jZzD>MS>w1>BfJ_^jtYA zC@S{=yE93CJoaYwIY->_E!}B+jCS#rm;ZlC$*=v769vjQr-Xi8R>;c^f9Ch=d*_ew z?WM|xxp~%Q`>T&~k~<{r!E>?cV&`as-OLEZsPr3YZ;UAl6wh2&T(y~poi-gmKbg49 zGhKehS3R-!{^`(Hd5g8bVh~)+=h4ARhqmJ0Vgz!3Q6~hv_i^cLRxMpRA>vOIHDvqX zgL=sKu$8Y7vy)tEA(AGy0z0%GBPqS%FTS|rlp56<(~|BLE*Ksu1+k^4h5D7f%R_ZM zH4u&xyY!tSWqy{W+(KBZVawm&XmUyTwX^)YexR=>m=$`rC~vseqP&*7-0l9yg-uy4 z{hsVBG^E~~`(xVKrc@J~X5jV6+t0J=F-`sTB?|Q&X8Ui&0EQI4jjzo4eLd^B3eB`A z@ARmv(#MX!Nv`7GZK+31HD9W4jH^-GlaS=Ylczba|@gw9*nOtJ%#PzyZv4}&f9Z+W=i z*}~?lP+*vftFJ$GOvL^5O!;@MEC{vw+m4oW5CZ|y04803n%4DYY5hKzE1LLs?cok* z4{ahJRv!X06~Cag^XI0z;3F&&LSdWHQ~l7tYgFl4d_XwhKewNwhu7h&1!32Vxn~04+CP~MH9yLHf$A(rb>f&FGiZXfT|anq|*SaFqXx;ZrWvXYP@tUGL@p~HW3HVO8e zZ6YUs94-Qm{H|RC)i2z=5laL>xAk$ zK*xALPjpb=JSuvZ=D)70E$7B;>saX8wMl(`Ej*p=kJW2ylR>rCo=BR{%=8Lk&3R&a z*Qp+z`D$_zg?QY}Nm~pl`+B_U<>p2MlGgxlmI&7Ox9MOHn8v?YrQUr;Q$8DL=zKlT z@=3B~9Fej&na!3Qg$L^!3u{3+b&2bQLLXx-5M^S#BlYe+u1y)KFkQYNN||Wk`?7sS zq<`D^QQdRjZzqE;%@tJnT68(8?e~m^t!aCOTknQ^{c)7zdutj*Yveg=oLO4<nuK`4VK8TjNqWjyzRbM^GYw(-AJ=qsb;DH=+5gQo0k3HID;A#EphfPVK9u?Y z<3#_xKD1;{%|Pg$1LNG%Vk2X2=Ngu*|jx7x|;XRr4^Qe=twIMOD%PMfI#CmVb# z7Bul)dKc`5It*j*;4iz_7c!5}GK<3qD1jYJt(KJ)jPNWAsNyN(NjRk!R$IbM*{+ATyH5AmYqXvujU-Q4XwOjV+ z<-~y;zW2c&ddH!nJBe8ggD{h{i(~5s$;abafuI?CJaLMAqEIPCWair21dBQXPW?cUHOzbmJLv$ zvy0Wuj$ejZ@C5S3I`83B{L~nn@D$KE#3_R7CnFB?`gSar4waol0`kjPS5mIA< z%cZ2otdV-3gK_Wgzom}ocJ}6*d(W&~a7UAuI%eWz6WMM+Iwd~eC%lfd3$@^He|nrK z_2Cackzr2y+YqU*E}Vu=xBdCw{3gn6f55J6BDEULZtM+tzy(TqJ>l&@d<6{+RPBm8 zt?JRNejCKaZh6WMTJebnWQkha`a*;_5buI5K2v3Cgn#O}S;~5=1(S0VG zi=gyE36%JF`;j76pmhdh1$P|b_q{(bDuSs2=jkVO05=Vt+xA_U>3-9x(#goXK6B?Y zbP?sKA(ZJLXjoxR5X~iEhTNmVR6tt0mA)+k!~$l}sU@4kE;xPnVWb#W?)IK;%4t-o z0W)j0wY~G$OMt&NPPgMGk}xdA=BB&SKj|rNUOJA}WBIz*iN^~Y!>DLfXyu%UbNBQfUPSR_h5uO zme=k)0P5Ha!$rA5ozC!nW=};8%o5Go=vt*;hcmzzEWb`$gc!Ugw*XY%f$K;FI=3cn5vY>XxKw);wF&3_ZioA8ppc7uHt zu$^e^^o*j}6L2l&BjM5dIUo3zCBj|Ez{okr^QReN_Z(=`^cx&EvF*iSZlX%}CPK6R zlMt!N4I^JjYMr6?$-no^&%TuH6uxf?_wd#FKqVULM~}a2wI#prB6lxE!T6V22y6MS z(1ViaEigy6Td>-sFA$doNdfY0c#UR%FQLd zta9a5z_9$~p%gxap_Si4UatYOONlHSsn@2^B?sJWW5VPo+VQKp8H}6N-n7K|OKu#8 zNzHs%ONnbQ`k0V4S=kFIpYeZ%8>~;4b9?)eIR96lD2!_rWOes42-{bqVG;vc_{PnQ zlssoLwPf$rDZO{wMLJZPx_9cJEs1RKCugyGC1XkAcV<=8sg48haN4p#CE{nQ1jD-&X!WH7=&W&aph^+bRKz?iV1e|mj0N&(Hz^<4sn}qNS@W{4 za`|x>XJ2jrHi<8~v4&@F-?4+baNh;0tu`=wa;GYYZD=mDf18Vmny`o@S`Fn8M=|xi zH^}NKaTU{=KNh*~KCI4!_)&}=mIAE`q=Q_GHY)Q%FJzm4nX`?3Q~L`zf?v?t)bJ}? zsK|+Pt_9cgn_X}=<7dHwJS>!*>@2r546Rh61K(ldsWHO?y|Mia7Q;x$S=5?mIg9bE zti0@z;^Y1d;m77TpY1teeD{ayUHaDMjD&`noYxup<|ZP)^&PI537D8YUh&V`(yad> zRiC`(buS#K4t@r~3zWdt_RXv7aL2A>I&v9cCetpwVJ3q6i^ZNI)Ya=%@`h_{-n;+1XB4^o^)lD|c zws<9wYx^TO!jN10mT z4;mTEq7~1N-T?VLZ2g3!kxO`#`2+AGXuyG?*6AZRu~W!5RQ4`KBs0fst||kEAYjj4 zc4q`Pv>qOjp^$!@gn5P?4@yKPQVtTHzQui_m`RD(UuI+&=#-GMAsI1J7Ek#HpNZ-C zrn*`Yv^K}F$QkcIh^-z*DhZuyhO_SP!=(UZQTB>gliC3`bf|)lZT%{QG^Eh)N)$Cw z*uk+gKU{N=qPAS$jM^f+$yj*w%q*e2ACl2Hmd`~DJCpGf41912z`&WP?TOE^P@U0s zy>LF3bza07(68AcgQ47H^%LE58EqO71VC`E^0VX}T}<66|HGgN{8~zops!iOpoBhJ z<3!8=*HMqNi)0!~+%$eR-FOcy=Y#w}$#d{yk<(Q0f3wpWQ?q;|4$j=Sq_9vR>FM|7 z(Yf(6p^+zYb;f6+sI?cM(d zGYx(=30c2q-}H$9$Zgw54NHQz$PG@MvAt);$PXjX#6e;>U zWc>ItJ|@>MIV^(i7bT`M>=9AkP3_yNblB8?*Vaf=7O~8C4W@<`9?VAkr?%XW->$&z zuJW!#w=Q8jey*wPnteA4RR)Io75+7=*D7-P{^~=DI&7`yg{WiemjYWHe-|Fpgfm^# zKYNupp6ssS6oh%*6~zG|At5-CGJy42v~jt@5<9)cES26f5lM|-55~NPOu{z(Btl`b zFN8Bv9c?o?)Wp~oJ?K6dKcw3(qi}r%YM3Q=Vux&pbqr+h%z%>EQ`~q{VFD6Ssqa>5 z#qQ7}L2&toR6O6PRbjkp?=%QFA<0ouNx%1gOYAL!A5;C_arBQ-mlkm9>mI2Sr(@T) zo`G4f$RnY&<#DNwuqaU@qI~;L$U;rw1h87iOp0SvXBt0DbXy0VfCXrT>Oe_?x(tbu zEbva(j3Ag4&Q;Q1V~8;&=RLK|dUaOYBWTfg9nUb1x$KQ4q;;7`S0w*;B?keeJu8v& zVMb~rCyIuLeWWmcl&dRmYJ$CZ5j`*UDL6$IWS}{Kbni?x7U}pe#Vr1AQKdFz8M%c) z4T`)QA@ww_4E07aE@3~a*upj3pInLCqQ=h^sIyUfQmNC4UU14(1d8li9Evnt-h5m? z5Ul^E_b8Tv#m{TMcQ>gxYINJjpEu^AC!F~O)E;in5=N7njuR=JPVscNK+yIxV|l3$ z#Dn~f#U^w)EPt~+rFYt*$k4CozN6Z+3K0n1y4T5F!1CXG$a?3G<@ysfUZ|m!Gdzc# zN)lzyj~c~HeTEtKW75kqrrxMUfg%8wD}nCEBQ-#h6RsmN`t^R1(|U*wYzbzw;nx+) zdACidM$FwRMB+%~W-JdK97=IB(woFgnH zVteaNkvlofYJhcxzYB5m;_=VvXv+?b$`vZNaLS&Gu0f`&@D$D}lAzVw&#qiB+2^9_ zT#-A|RCA)-^7MAMW3#1xXYHGPj~XO}a1e;rbf_Cf zx#d|<0k6@Ixtab+V`hV`3E_TT=EQfdL{NF6ij zR?X;FYsw%jQj9Rv3gTVt#D@os+gMNM-> zDc(|COzMoRAdH|goA^}RRP0A)7~ilRL2SXM*4`xO_{}U9D1QgA=4~a%b&_~|Cj~9v zmzO$yeV;~~%__5`4SBIhpnecnIyDrJTXTjd(G5Q9t>(*Uf~D+*JC$@~-jv;?(7 zQ?RLp!>?{JSLe|l96vgTy?KZ^x39j~rEc>gNpZ&2pJhSCtz0Z*a!VWlwEZH5Iw~E!o{-Qi)8hz9+VO8=jtVYu}p=wl)M& zZPunS`?%{%j;2#mw|0=*MhHRiW5z=(AImgt0&38Aug|8Q%a5nTth)sPbQCgOJBr$6 z|B^}tq4W(F0@V%JTi*!5uUeL+wV0=+(A z6TL_q+np-bCz(>BFGtJc;VS(=@j9vY1vEeTd0Z#xZRl8K8esU}wY~?qlD9V~80o#i zSn;tn#5sGrY^A`v8iK6OJ%n}6665CyFY^0#KCI>kuJ4piHw5TO3xqfnS|AIRy}5r$ zMb3^in}Jk6k!)vuU((5Z9jF5O9we$5OK;ED*}x8lqh{{?**CDT1>-SqH|Jy4Gk#8| z{T$WVP$g(%j{24GwwB$>C9+KLMnB|h&)UaS(R)~vFVdx)={L1da!E3n| zncT4Oqk_(eq2E33t6Lsh(Dt~gY=fQH+K4IOTYLT_C9B8uRr4XGxxi2w&+8lQ@dEUy zx5G?qWiYs*ELKnt-jBh;b$vs~`TRSUyb|`mo2}r^NklGTnXLU9?W@yUnVOP-Mq4 z#DoDGFZf8rjmd~Qd4})DGZ}Gq62A{62+aFji5n>xl6cA`_o=Czxe`hc+_7|zm2!Pz zzGghA%2CF{0k&%gpMp`}?luoWp3MNH1n(08dS@d|znu7{2|>?ApTg;AIDpk~)QAEg zqa59jeLOnv`SUM*KiWM7a3@>ym*Vb&+y5_7Lk2_C`d_^NDz5c^!dn09NC7Ge>cT{! z-9}IFYglvF>Wjprar=JZ4Qiwa2~;C47!|j9pccP1FmZM$J`u0?sKE~J%D~8(#W8iH zATpMoi5in%!x6wK46K$E4+`;S`KLRR+&N7&8O!}otwwb=MZIs=CnRj5nvUcL_u;f1R`$3`*Ara8RvSK+^Ktq)|8A?5A9@oo6n zQ%anqaP=mOrIo@CvgM2=H0;)b!3H;Dp;R0Vr~s%906P1x*~@Zpv$1QY7e22e3CrM) zmZT+d2s^R&v`%yBg-_gBE!s#qJPfaLA7Wr!0m6HtmYz4vn%+j(G1)cEsF&^yUnAf zj_jGn@rDM7lEoac6h;%2Jne5VtBkzUnX2-iOeZ2VC29is=AIR&tWBC;3TwxJ{j>#gxX-VXf#PVm^S+yk-c8C#26@EIN~ry3-71*j z;mrhT=TG<2&V>G8p5e$dLZXR(#|mh6!PV#XdBQfg7mPdM!?^KjrK>V@lmPkFEG2Rs zqOn;~{$O>T1CjswW#5*LlV6F&F5``{U9*E}wkj9%Sc>u21YLe*v2|LMn)Q)nUIbGO zt9DnQ9>k!Qj+2G;Lx)<7wqHaDQAE7l^YkNdKuE<+&mhjqndswKhMW}|=wigO3R%%4 z?qop{u7i|x0$5her``vc& z)qbEKRi`Way3Q6JSN;$A8v{nbC~YirkK@1j|7e024L(8m~`QzV<)CT)nyHf z|E|UBB5q&^)O{oE)73i|^LlSb+E)BaE|$Jsl9)N#Vp7Os){;WM@b7?p&dkDCf$5q- zS-f)s+*-v|8qu-E=-Z(uU?nD!7z!G*fZ&4|f_fpZY2MI(;wU=-K~r>pv(SiyZ|diL z9@!j8#*`h4&|guG@vlZ&!ZqUTA5uwEtaAZBxYd8Ap*axJO+)o3ErfhA0*IQ&>=bl@ z6CoE3{;2-sd-K-!2^A8ZWdDE#{Y;?(ys=m!EfIQkIVBmoekgoocz#3gRm&BN^kzup zyI?M~#&oTwV@cP*Y##ZWvjNMufW}#X33iyBW`Z0znsH#r&F#iB0XZQK7N}^D&NRP2 zv2qZhXMnd;9ilNJI2l;#>nE)QG=PQt+0q@#jngX>wB4k7A1M%O%n!Aj58q!9`kN|6 zu&6kSq_nV2v#O^HL;~J-YQ4;UzhpRr-J{(5_yLU+|I2s%%=c*vPzA~$cQll5N;rfS zEK7JxDMVrMIsIvrjNm={zT70{q=C^*n}EAs%zSqFbQC(zWJ@Q>ZGspYMg=xz(LwTw zEG4;9C9FyO8k|`M!29tRa07Qddf}*I z4~_6V9b)7?$JCc~79Asf95dKi_ZR;iIt}AY$O5iveOxt{&jf1iu=7|S>BWDjmdxwM z;~bfc5oM#1=vOg7jqV$y0xJ6Kylqnjcwaxtw|=H;DPtj8;)7FR&3G^j(f=SQ87H}` z01$_-2{(r-?xF~n-2^`X$xzrg2{WSy4HTj#x!3_RzDV>dh^c_E_q{07Gi`E|80W;x zMf*mRz^w7KFLL#e7>-^lsQ#gB>}O$qN&Am`SZcm-Q2I32v2$Vl#g0&hoU_q8iWS9v z$g6CG@W`Z~A@5CnyJ!{gbhQ9r4N(cGwF8qmf}4k)>nAu+?jp7pyy=sp;+z(5ABn(N zx)zKrsAs`?2s*w|y>F{uwM7lzjy=f$(Bg1(c#D2khg&QEuC4o)e_ZATZEhQZB98lB zGp0AV-m_GxzB(V#;Bk|3L>Sifi`$nkL8-urK2EgER zBc^qNu^QnqI1BK*X5rtp`jMI^UEem1K3uMpKi;f+kBJ=h|~V2Wsv<)A~o>jeSjYzzMyEk3rN*P!~ec60_~{;uJe*l#-a)ixQ{ zjoKp;1PRnC^LyrBnvEJgM3;)l;gpd)SX=_|csUsGr)^QDW)m!nU%zpO0B z=6pWqN;iPDbyZU<=)+ZZ)Hq#l>Si*>Z$y@H+|{cC_<+}Mu(k3=GFV%8@(aJ?dQr18 zl9jv9J9g|hD%H8CPLAXyeMvK+ zEDg>9shdK@nAD2${m^Nfc1YOI=hJ&hob1G#7$vkzbDRSwVuV&BLy+#j_a6lMnkeJ+ z;f*4d0xVWxx6M-vP`RwPzzQZQqdHU}nChn;A7MT&%0kcC7G{qneR4a){-mnMZ%U>? zLuJO}s4Oea{xEWk8ni9Lok^%1nb-F)2kNqAbtrR9u!X>PDp_o+Y{M$0rQxm|%I64Y zAwI*yGi+r-)X`=Sgu79GNLQt^FQF#X+i4`=Q&y81-F|~5 zbtTyy-Mej~5gcOrLt48jIsFYObk13(w`1EQIKc!9E`l( zdnfL+qNJ<+LFdxs<}&q6PiNYTaF_iy;lUliC(XhMQ_c4xSrlISFHSz0wqO$spb)r8;b){^7#99o;K}q1%Yy4ME4w4KAA+!*a&GW- zer3D&-002NziSB2$%c-U`y6hwt@y_THj^597rG1=>z!(IBGt`jtus0#pYaq9)_{GO z#J_8L=-xpq@B0v`RlB z?O6Ej@1V7JRjyOyHN0T-rU-^_bUwAY8TUnliaat zNt-`ex*+^M`6IPCfe8!u*7QFm2^|OOlnNK*Lxvc5vIiPYRC8pUa~@&=Z%0J+_g&*` z6vStvf=YKFm0ir9m2t34f5hj%ffDzb|33hXKy$wse!{{r>cJgQC$*1tBjD^rDIj&x z5X@js8J1#Ro&+1I8~Pkh8Qf;w{E+MR(rJ<#?cjWaYQ&<95jHM5Q#wIo zhI?mm5MiOC1i*}RBY8f)I$}L|=%=$sq!5TpL{aq`Ll_@U4@fcUW6)ljA5Lq>pt5Js z%smD4$N$6tClCPu0s;a80R#g90RaF2000315g{=_QDJd`5Rsv=!O`&H@gV=&00;pA z00BP`vU#6sCL$wF8|fP{$oxzP5M17!J9E?qJL1?aU7l^sT8@>jYY;a^iYcR!?agBN zFXjqfBnKn({w0MJwpVLt_dzkjTE>oou#S0U!`;YBJqMFZDnJm@g*zJu0WxhR7+&mh z3*a>{7L2SBVOV>&QuzUFMlbVPijea`5*SH&-ZaNX(zH6s_doJo*_?+Bs#?%!<(-)} zlsB5MTZ@{E?tyt=#!g@+Z-7&MhtvnL8K4(-FFY4f0kcbWGV+y^S!F7_dMsmR0)V4X zfEv*GFOP|A29-K&tQ)hBi2Gw@MbL`IXiDYGs`;lWc`x3-69nck161eZ@dA4N$|XsD zqU6k29X&!)rN9On$B#0t47Y{5^3B;yM79K04J`$yok!4(oSzc>td)|Xt+b?8Gu@i^ z8dl_vg%J%^t;?h#LaaJNR^BCJ#azihqqZ2T*?~1r>I*8MDXYCBN0?qg0ZkSYyk`r{ z1`GxTP7_zKZxrp6p@8`UtA`F{I(ecttRU%H$VE8{3*alJTcQc0P2p~G!P2tv4h>xB zC1a>Sx{h5g17kD=fmLI!JS8i^F-}QAQATanL;gy@0Ml7EoZ+L)wRjK}p`r%@84#nP zG>dAx&BZXQr3?bT;M>Gd5qS)>IXKJriz!|0QVJ#R{o|-q{37U_n-~4X7VP)%QL1_3 zQB?)fs;#5Z0mHb+0~Xy&z@?sTm{ylY_6wlozzul7x6pVuSKJV-)B|_7pdIECtQ@>~ z2RHu!5|CbYwWk<86nK=mFeH&60=51lxSBS@`T3< zs%%<{8!7C{5>c2L^WbmX1*!noH;`UA=2VD>3wMF)%^xvq5Y+;R#++ApwxP*N8wR*& z;8@7#(>!|<@XKs_k5}pgL4IJ1YfM~7yx zi=}f+R-&h1WqNt2jSCibz54n>A>fTPeG|FR{m+QMUrkF*L1m7(Mly#3Ru6|hVl%sl z6jjF~n5ZSvjLz$IyszE`xg%&RjrUyKx5rKjvy+dA;K7pxT)Ex)VGZ1)zYP9M=U#PUtYACacSy zYGM%33Kq)6t%+t9h{JZFTSL4|ja1{WAb89Mn zik=;@YE}DW=&3>!p<6i^WL4RKC6<=9Cn_waFjIM!MpM}Z!wtE=sIb`?jf%Twk3CGX9?7G zDpN-&?b!1yky0-~cE3D8DKe?G4!X>*P!0*>AUqK1Be&4~#8~v0%|(MOO4Tn2n+q&p z&E5mga{Pd%M#x%Q*0V+;TFcM|nlQ0=%mU@57ej^j!Pa7#-`KU)RgO3c?TH9pslv{4 zt+|bWSZk$PWtWBAy}J~^MGfA0bg;k!u2SxFt3z-(^N6nz8z|W08kXR6Y-&nCJ9I4^ z)N5j0IDyE})z&ouJIGO05CNu}wcGPDn2-Zy6z0&*aRoId89--603isG^2IU@nQna_b0wDznVx*z31RteE~nqFHeIjDfGwKARn zqYglCb2XtdHu6kgzbvau0yTpwWZ7-!)MySC#Z+Fx{B<({cGfRH)W}SfKh*Sk;I1zyyxUPwcP2S0BSq6y#J3_d9Kbe2@NuQrTh^VTzNnwt*{AOa!8HUG3 z(dD=cV2lZLrwyLh%pyI%Ip|KxVm!uK17^e9Yj-RW1(uu+N8>!lt7`yZUU_Lv*APoJdK?BBHXZnlsT$edw`$Sc z7}bTSShS~(aBdJH)&ixn_jQ#*(#UMk=mu*~Ar=G@trC{0*zMlokS_vdqMkzK3`aUUR0haR)D5m2N41Np9Int1G8rTi6&I#B!9?HY18I z5wN2iHO-()$Xdne;^NL)z*P&kJotAllSL_mt36fsA7!cnEOGc446USaFJ_{W z7;@A+D%=@m3p(o{*f}%{D@qhsBsniOQ!5D8(cCg)VY2b!0SXhnlJkxcf4I;M!hi}V zeg_dL_>HVv{?uFQnnVz=fFdnphy%p-6eQ-d`s-Zf{Sxp z{pCRgKwwkg1N^42*&PFl^gInf6d*!5Q0enrn1_r_Dp-$o%U=;pz@RHjv!&b>Dpj4R zv?kU;gt;5*SR9`bVq;i?(z##6Y7*=NifhfjF)m#c0lH*L?twf*3fh2TiF)Y1B5xp z^TZTTSgN6FBVE~5<^T>t_N>QAO&k;6@a?0j^zka;7}a6IyZ5G&8Rm{RlMcUM|u@dR1Kzg zYtB*%006x08Z_voXiTcbn4Y%URstRmD;5bbtuAt#gNvOt8(=u9%jPXNKxHlFjgYQ_ zol2zGztk5^UunAsb|#ZduV!m8zp*~VZ?8;N!`K`5d3g4i#{If1|~fo?@j zuPdoeh!QEFT3z(<%r^;q8XSPz?DxbW;96KY$awz%5lEsh9=<09ULh4xSk9c*ZOFzr z^DFSS?hhc#r#(t@9fe+zKn*-b<}e|^#q?erU1}a978E)A{`PL8_TX`+7+zg95N}Of zm-+dN!4J?D0f2^=v!n)8eu9$VP70FKUuYQ=Eo{Booi|WGm5OXZK&88Z}&BCBX46ay>5) z&`gfUVSl)%Ly!iq_A^%amSRe30&qEb3iAV{78?Q4%C`HIivV(Vp~ATwiEsyTZt)iSk2HU_O-yHLZN;#_6dc4EA%FC&AQVFD0t(T2;#rx=w&x-Pqc z;P{&bH`ZWGT^?epJ|i+=t|o%!8+GDabYc!Vdz>AS2I(t z1y_O3%oIh6lvb{d_0!D1OGN?-JJEg^`$PtehQhk-zPNozB zn}Pv38Xco9rUn#c1+;kOd6}!Bz&QXr;A51wItSQCjjkn7ZBI5070u)w1QSCmTKQoX zPd3$)euu2fKoXQ8TBPEfUi*MTAjLTLd7Mj>2r9Ccs>4q-nTQpUb5!ll*r*j@M+#l@ z(Oj8&hYF!yBK`2uZL%W?oX- z53oA-8i8XqWBHcdqlD?x{4;;Vzoix8VcZn2v>kH_H!IE&dy&*MqYnX-v)A!6i_8#c ztvu1Ef+#^`7Bk3RLy+cT)|&8OQSid-p&R8^*nC1p5gKh2`zx%)R47oO+lFzfi(I-< zp`L(EdBm;YHURA4Zobgy9o2W__j{D7O13_%{liML1t09jDZ;jYBm_^QG{nOJBI%5! zL4cu0&<8*|OO}K}TL^YzQKP3N{6Tz^x&# zF-cQHdK(WT$)Zz00NAdmycNX9*$Z!kYRjT1^lVc`uz7$~S48j^Tx-Ov3Ucm)73Icj zaa?6|E1_Jsapvg|Y{KI{4&y{hP%^p$yk~G7geZg#2V>q1vrk$G8y5<;(~4Fb`IQB; zjJ=-Hm5GBC4T0rM`P3$IiwZ$O4Pmyv8NtA)>&9mjaCpjQ1x#Bb>vr+3Vb+oE*j*nN z0Y(9V3S}lfkuJ_R0M?>dVD2R#r*3hD9OGv^Mh`H&Vh0Ti$ZK&Hg34Nz$g+hLrlo?? zs)wUEl!2hwYH!1YSr;iG6eN~W;1O)NOob-X46{Ko>k>a5sf(T;pFdpx93j?ljtyaHt{+ zo@nVSFp8U)5e3WixV;&nGgnhBstW_as;k{g2LKPYqSXt+;c4CGF2c{yv+9@)87vh` zS9in2wyOeZ#wx2lxiZ9yAT{($GGFaI1IEHp%7rUy@^#S6UioDg+LGPj79Slx;Zx^+`G6c!kLFOu z;8p4@H;I8I*p?C235Z@Pm&;o!wT%_~7~Psg$On#(7njsH2$(J6(Yo{h0ALy$S-`AU z`TIt=1+Au&%^oH>f@PzPD}3t=FE}?c08@2B?(3PU^>o$qY8`P{d5@)qz7Lz%z9ThJ z1g@=_qb9)WnZm*GQrX64^#}cT@3TOKBotw6eVaAm~>6-rlvAJf;8pr#YVS>}1OTSkOi)IaCo;+$_S9fN;!ZE8{S6=Q4 z7%dMaUWi{Id<633{lI%eA+YmY)LIc@*-R{_r8+ zh|3T7vMg|>8wtM!%Eetv7K;T@OAUM`bqD3O)*5j830GPnOyCBr-J6IDCbX&rQP+|! ztXA$;)pb)^)M3U3i9$}DO1A|^C`na`vdkB`ekvE7x#{DHWfcT3PTF==gQ(;+rIM}9 zyDr=2Rxdy$+Wy{uJC~Wj0$r;Cq%#$XD})12nZs$u-~%f<-q($bhUP-N1u=n7XABn? zSd~<^9ghRJA-_<0%<-4Z;Ez*dHWQBemH0(QM^wHX#^++QwQ}Tl;w1KmHXdo^d`g}u ziR1w)qYXk0O<{;r>tE9`?le#U=Yp6##dm;$?)CbOfnYIqHrFzWBy3eRr8iz7u~wxN z<+XE$yhT-1#b%w=kQFor9~$==g`2MOapEy4L3nUqKe&pdH00iM+c1hNqfLYJP$ck` zLg{gnrn6ng;q4L&0AIs%BX?*6$B=f#Zn{x~G&$}Qc@PwM@bvF-30Zj2Gb*fH6|;On25~S>SvGLk`Y>o1C#28$%uPW7(o>Z3mvLjB9!;(h z{g-4_e{pYTO*e>1r--P(8Hoa+$bN0pK-N(YRJfV3Msj zSIZxi!(pUMoT1h6zY!aT!#@uuJDNH00kz4KP??RRM&HLG@;?zw0@?xttQ|okRmPx- zIgV-6C1`UhJxvKwA^!lvq3!`1u9p|*)FW!1BhEasnpvk24n^5sd6Xc|9Ib=)cf=$` zfHIcj{bpcfLpf_%qnhd{qNo8>oYtvg?ZVewW1`t`&hZuc>IMagPh;Pya277w*u(&6 z6XbRA9VrWUYNsvmdxPc!W>|5Phv5d&E+WFHn$_@6R!S?#+k)L>*$W^p(w80wv(3TG z;ZR{V2OkK4G%y@`4l+@xNV{mDMR+9&b>lb+KR&^W*e!G+7_C#m31gqB7RMqz;>?@0uU~M z(Lt)t9)4v|ZSVnKj~vTUNo5sjv#&&>9qT}<1#5>Mb1^Y$oCwnTW|9=1AHh;9DD5f| zSaxRxhJo<}Y)#yTKph{vaHY9qc3&05=q3tm=Y@3~q|KFwcVBYiut{Ml9=*)t6*UOO zwH7RysqM1C>S{tHu!$lFk`g_VhZ^&u%=q}0b)mC0zeAgX$QxxQ-?8j3QqMDzGqf*F z@=H(YDP1dqv~p7)foE5#q;w9vJgob9K>n9IzKFvTn16%o*Inwg!hcqt`bo zs`6ShH2ax(u*UMGpY~jqlnT}CI4cL8CS5V6yJ{D-B|^+zBeVII-QZS=KWHps8Z9epZ4UPy4qzHdv8nbm8GsS1)?Wt?vX&NiZ=ZK{O@0E8$ z`FfnY%&;&P@(XX4Tv)NVHnnKzQ~;bqj#T0O%sWF=-9EJiWvC^Rx}sNzTw{vB3bCT} zK`9MI+0}Z63%u$D;{O0w2AfvvsbB)PaqgG0HI~*h2t%lGG<^V)-A7tffm}C~0sCGJ zyi55}=1(iW!+N@wZwy;hNpv&_3wLvSBb9Ui06H`pi_4Qn9is3q{6e8tu%Ipz3gpRL zz-G#|gOY%->Mnu-VJ^j*uQzckor@|fmt4#YjbZz@`;-;eD6BVjW)ZNJtfzKl2cjjh z0Fih(zqD*>3R3y77Iz;B$ZFaai1I-IX}tb}1S$G6uD(1Qvj& zDqUN|tO}*&PHRo*4{kNKLo~w;LgoKW-%+o#J*-(V$i;>W7|!0 zi>j4FvZ6TMO98dJm2++CQ2LWaWy#sj%9Su%_!@kE`Q}$7qR^^L{{Xm|@>vWo&f_5! zu2=hrCB-KF%OGpvD4IlF1)+Ad_}dJmOs4NShB=TM8P;kZii44YPCmc z+YG*D4ugIV2P_cUMGjj0l(gU|Afv&r0y9j*iAiHhKiTgS$st#EfLV5dLS zt_Ba>_=Huawc5nE4v>cUVXxy*zm5)Oo`V6-J81pJ04P8J3IHnBW47jc$}NOU*y$4C zwwCR_R`Zn}p)_R`@Xj8yy7-x8xmNJm-wtu=R@*7Dm7sT~@RuvcI@v(IhQ}7>J-oDD z6fF3K3y~Nz7^wFdF^PtwV*qeO4U8dOK|H`;nZsyGWC{)7I8DS_Zvkn5{_z@yg}W{l zFf7<$hR`jQ&^fxV^R`>1kyu-joN+Oftt%IQ%o7s~C#gd<3T~*xBW5M;JL$*IsFVa@ zb>g{?G7^`+(xuH$Otn?sR$vtfYCHNe9@05E2|}P;Eyyk)PA1}tyILL%tpvEY*Ylkp zXhZ=OJtOwpi>j2GwaHAJzvdv=`=GiX!2Kpwy_XK0)`~Wls+y;joL0Z1%tT!q&L9Br z^d^sneqeqvFs&C?kCxw11pshWNA}dU4SkmzS!0(s<8}GO3IJ(#HH_bO zbSy}TDPX&;HZ|3 z-Qu^~nzI2Y2m_HxTYe=R>hNIY(!=~jJy~daTcnwnD0Vqe_;D>kQA?-PeJ#(A5mQ|Z zV01U&l%t>kFb9HC(*rH4*x{A@W8$I9+!BJmiXGK|a7tqj)H9Lbno39DI*b4MxCaymvW zTZQFFK~RjD$_t}ci||dep@P`%E)G62<}l{5j8q}q?+4uu&6kOG%)N`h2S)_9E|QDy ziG^=SwLfgaa1n=rS@#(2fW0q&XYM-9Q@9LKZ-xH<01K7k1{Ui5%dF%s?(3uX0HIig z3c+HG7rDsb{{T~kkK76HOIEFAbbf8b83wCi%jtrLe%SA`us;u><0q~_tx zYFlu{{qq~-WAHeAOGQJ`XLZC%t*SGD7(L7L5Q~BYq-d*mRxdg87ZZXGdPgC&u#IoC z*isrgjaC97&x5MuYTyD=saUaDJ7-lb;25S3_0uT{n)(({`9GP43DkX1zaAx?ACoEO zQ;UGWI)OMQg+%dDT+DL57;~I%7gPiYR$~~;Leb4`%B(%6WeY}%4KV9R?d}|?9625yQ-bQYS0Z+$ULOya7>owMHyyfHu6#fyk|3fS zRbt&(^B*Lw5|$Pz&TjjK39#QQEQZd*sKKg(#bP&1tXVZqQODgH!f}`I#BkE62cwx_ zb10ol%BL~bpo84Fw1e`;0C_3Nc)o@e;?w{{u17=-%rt3A!0FF4X>JuLaA8Kf-kxe9 z03Z}wdb5xAV4#Z-U7QP8s%08#F;Cu%O8|dIq7;kn1EOqv^5`%FlqM}Anwtyf*jqhPMx z-@HIUD!maE4#~-0AHJYmf^EJCprZb|HvF@dmgg*%Zk{EqUE=zf3A+t+!%$N7$h1G9bdJg53+#)Hh&^*jIr%?&T=Kd{#MK zRxBFU7%N4;X?^dRPX)@UM?MSw;U32(vwc?1m~9baISD*qPL3j;h%CP`8iNtM#jzFp z+^DBz1&;>H&2nN4n^?eXM{V#nGQhP|thUYRX`JFH3_+#9K3|x?MU}GmwO7mhr~eSPlz(12;=A^!W7gi^x4`Ealz&IAZ$gS5v-uLv|jsMaN7r)DS20G z+WbpA5S4=+>;BF}4ITMlnjt1P8Njo|FKv9x+%86h5EGGdyuct(WK3dLyYXD^3k=nK z2P?oqmXmzVwSQep{gCY@tNDxbBCnQjS|wDV33iE9+`|c4IBjQe#R|eKt!o3nl)EyH zB%mpj)wl05loX4d*E#3ZLsYUby47%w<&9{LjJ$sx!y^t2=MS52ScGE1161MhW^0H9 zc$a#a?ipjl8yBePvUei0GGkOw6Wzd}jg?W1uT46cw2s1yGn^0PVp$46G-Cco?o_W~ zt_zXqp@GPzZ~~(zj2kfJ@tE~aF#Ap|_M5TxoG0xxB=k-VA^bwEqCo57megmU1@NQuL^|&-6N*Ladu8(cU5!;lM?eI=x6dzG99Y@;!Kh7rT|2 zo6H)&h&7XaM6RP5;ud2ghpBy^CnoPBw)vThN})4-*AN9(BMtfRe&V2GN4w2@agJtg zIba1FM)W^-h*AOhx0PN004d6~EiJfq>Q;lqqP@%wN~tM5!BaFfhwc*ECzIW-GIurN zCJfz~sxo@xnOHK5dSPt8!tpQ4H%Qva4_t6Tv{Lb7i!oQqXUr3;9zTzvf|8^_h=TDr zDZoxRigc7hlBGnMQmC|eIkVJ3X5qQ6_z?TI7u9Kfk1HRQTpY#izrU%nPxN3IYp63= z2NN$OFzZn*w~5)Vpi>ob8e+LI_M4%V&~)_q=4aBrXWLNQb%b!A>soX`?Wbn3T+f(>~!b8mLB`!BJdxU?Xgp?=xmc2F5XU{6V8&RBQeW zXTBm(+(#_^sc2xuFG(myjM(hv34j~O>a*khP&j}d{G_^!V;Q^pVqJY1UqwP(5$z8l zxAzCSiHgNoV-7h68hPaAUJ$RpqHqB8`+UIIAM#KoOEJW(N)|ZhiDy4(mrUEi0B24= z?9DU$-v`I)DZ_1X>6~<3@d+dvDDVJcQcr02lwo)n4wKn@5Ru{=Rk&Pl%83HGphito_eg6x znNZ?xH5QFBp_nEwFj1IUod6~Jyv94Rj+S)4)iZq|LuqNvx04zmBQ>hXtTJ-3RRHzj)<|EgcoBmUG66(m{ z^z+&FjS$jM?dQw_RH#Nbs z!ydT-p(>6Rxaw`NEx5YhwB&(aZU&n;PDha`n1ZnsQ2B0`u?J+dx*c;7ko(HPjyLq3 z$~#yrt%Tb2im|d)gW#X=z`<+B_XfQzp`+SWx-A0G&ToOysAd^g?P*>*iU$a$d_#JP zRjPxZF)l`++fXpq(mK8(s5wLPFjACJlRVzuO*b&{{902%ySvVI1Zb>IQpKE^;l)MU zOebhzywkeT8Z6UzF0aOKzFuQ4Rdv_Ompo{dH7OVwQlT!T$`aXB{+v@HN zdqsrIT14P=?j>LJoO?XLOCkqn)CM1k%KJ*Tc!=cD0db?Je-lF`MRkX-6FelnfHH&e zjyJ@rQPo)F<=I)1kDWgdYe8NMXjkFC3-_IQJ&rFxe*CX;aw6mVNzJvjFh zvo7AB>5n8^9i2U$FjG%RR@fOh>%^(tcdSNgu!4rqZr~0Ax-f?C$8x5KEle&=Xnk&C zstX@7{YxvCF;f@XF7+MUS)EMnd7LVN_nQGgBas0!g1kc!8>54hvEP``V6aS{`6#NJ z;3ZQEIX6^Nb8wgx=altbe&s|lRr#trgkR|~^io+a1h>&s2+FBZnukMr!)B#ms#YMiq-t9%PPsk7O+PiO#ni`o7lxLf z4i8;Isx|=a`(ZLIHUj9odPjoAqTE{)^~`c*TLrW2FY*_t+5#Ide#YCamnviP%je8% zTz3ntkF)HHnuhqkf20Fy{!fTJ)e+YoJ@^ArZ7(I_xffif z7`6~doGDv6S4Ufp9DsA!wWEvph6RX@G>2>M0tv}-;?!TPQy5}g!VF)bD2_g(hcqC5 z`h1keuf3sf-@vfCNMGEF@TM+itRA|ZAL3Z>uRp}@E#&GcFejWuRkmxX*r59v$)sf- z0~!!A9PGxYR~B0rLm;q2@YEv}!HDHy?B@B_preb5FdY>sV9~pLfN${?9l>*N)o^e{ zOv3_bYlQUqhk--wo}DDTr({6M84?SJz&t%4G2J;T-|ajz?{)o5G{kWb$8npw!u`ki zSfIC=WgwKWfI)5e8y*)2a9&TOS)vYMyJ~L2w{eHWt>RoWN0-zbqYB6uT-Ix}^-)b! zEV-;6@z~qBcnaG%F9s7SdOq@-ct)F0to60M%1Qx2rvcu#$5D|H*!AMNUP`IzVhm+M zpGB#JNd{D^jMNmCgD96AeH$rC3#vAB`jiW(buT9)xSB6KLU3^(Rb25XV?PpsVU`n> zZ1E5pFBuc~{lf%TMM50@D@t1C?p;V(tC#3HovZ((1gqS2xp&fH7*BdsM=#&d|T zQE6SNUlHkg$Un7H_Zgy)vDvE4hVRB$!Vw@8XH)|3vyNbmgT0QT zON#G!>(S|hK?P+iy?U4;k?}Js5NqhNSupy7RG^rQ)LD@?kul_ASinCe{^B;Gatj(f z9m~32>b^z2UZA&4UjwAW@ct@m9#Ji0TNbJ3{Gr@C1@JSu^59giF+uoz!#RbcHC>xLyv8k}jWpTC9Oq7m?MeV6 zl*nI5{{Sq-*>^Fs3aT2P~?A!eYmRV15b}J)g&sd3UKk$5Fact*V-X8>9QqbC*}(#7S?OCAE)9P1^voY zO8LzH0AJKWqnKQx3u6lq#*q8Ox*p=Zu@E#qV^-zYj^Bw+O&}Vhu3ijBeTzHwjC{i= zHpfNY8h&95e=?^)g|&ABa5g+ZvZDDFk(DKWI)gS+3skv$@o?msFK~N`%t1`>MF==G z2A-H~`$QZUa1#oyKlp$F4Gg*!$Okk^(j%G>puT(%Qf}+W^|fO?#1$A$fp5~<_#*38 z&YvLfnW|_o;Q06FokDR4PMgI)%t8qiiyxsFeJ-XkYEl~dFlsGDl`5jDE|y_B6`i!= zXSkyKEfMj2$51IF0=NLu1~0@mc>zW^VeiCel_+gf{)wl6RWRjSc*AF^iZ>e!H?4l* zq+_{eNb>|5fUNNZct2BaQl>EeAOomZaiHH3+QDY|G<$Z<>XgnJ_&?uhb2M%J9^wZX z`#-WfD+bM@MqG62Ed}EfJ(uSAjSONK4kXG7J$RG`xr;ASnzX`cE-2PmYTXAVwG*87 zYJ!4|t2u?(bmeHKjaA^{Q2Sc8!$&z=e$mA!t=>(g^5EhH99dWl^5dHI;wr-1?$uqq zSsjGvfWs3Bh8Wagh=gd2S`Jv10=|qshY{GsR&SJMpyVhTab7+15DhF9s$F_HjLP1( zns(LgcXK)F1CYvk%9Rd@()C-<^YIu+a|;^py1Yh|H(IQ0_}_5=h#Y@V7{2nx-~i?Q zLk=dMKT$Pg*MN!TuAM&{WzyvexJCn4uLm#B5#hT;6O6fY&-W2?3TW|;akz>X6IK$% z=zu$mCtbZdipiRw5aOn|h^SVf+o-JZ7_3_lOvGZlW`mDKz#^saZwN_E>@Sq z%U&XXO}fkB)tX6Uphc=2Fnq=t4oCIo_|Z0nw2a*{is?$d!csAW)VhsfX@npIsT1@u z`j-eFDE-RPX#Jo!G(dBA&&+1l+;CFRe-L!pX^?+`#mfV5Rdz2e^l(gu7+T56I_UK+ z9D-mG&8sK4Pm;7br^pLZ+#KI-6*h zFlD^h3N>e_iVhYv(-Br4&D4Pw7=lqcL1euUIe@-#SCCDy|?`Go3uoNJ#ak5Tr)GFSTx z0DX`@>&Gy*nm)|w#7%3c24E{M!7y6fzTb-O0JbUq+{0okf#&}JsryInKN=#96ff|9 zaD)H=3O@uzMzv(FUoq0H%b#AQThw2LoYkJ?NV^v;?w78FJwJJlp<@!lHmY!?*J%dM zD&hh;JV(Wf^RA&)5m93DHSh5(_v;~BaN?D>qFoA&BCEPJS`Ue4^8A42?ycMjECpCC zQ+mGnm8B`H>~?&6j%tcm-%%=Isc)knLTYMI`dC~S=)wXeYCYPq$+ELI>9-5SCFus* zOz80wsbxD?n&34mn$wS-ddC`>drHv7bM!L!9(3v|)c!SM=^<1rej4H0h~$_VY*Q+AISr(NA5^)`+{TT*+``{rg|8CY@9 z;{`lw94Qe|!IIM#i>6j|18amD!svQ|$Ute$<>AMjXzmF>)8)J3`uFH%&;ZrLV>0~} z8q6i6DfEZvX)eBkF>B~c2Elb3v*Da=Yu7rKL9~OTycE+}YE)+mW$Qd1zcnxELspHIfO*dAn1RZw zQL)`}*Wx<&vBiHjd)#8}iBFI76_SR$`hQT+OF2K-^#xLyT_^VFAcBy(K>l66Vg+5E zV!)sa^5`De=x6a99}!xy$^PPK>Mo>z!pD%>(>IOsDd4x?DB zJMuV;69y&kM= z;IH@0PCW5{)C~~TyPmuq9``6I$9%8*tP;y~DpIS(`tAaZlJpQF@WWLJ=}BPMNcKWo zIW0d2ex*QUTDikb^mdS31B81O?qVKbxl|{_2-g|Rz|JETnI`&+BPcE9Z~Q`~WnOE4 zk1!2Nwcf(`dkzK@(t=j2@B(M35m>as+NQieh(i^Ej4x;!SJ;lAR`kIf)o_`$&r*i! zS|GJsv+vI3h>pnPr=OVYCnVIkQeik?tRjhwSX%`GFro@F#4(v&p}-!uafE48?IZ<@ zi#%hJ4NxdsuQys_r%nOFmAc_v)H1XHQNZTj8er?l6%5yB7xM*>rp&)*uZ+fVVAo1| zF755d%oi&UEnmKZUY3gr?^bZv5QzbYVCnPM7ZGj2Lm3V|z9Xz40P5CXFu^X3*qm$R z%z{j~S>ZYT_=PP7g=Oc&ZFt^UI_P(KVpSJZIu9S^cM-0OtbeoY_#y@`ljZTRy?cnR zy#U4R`?CxRw11C6;}OBb7S^<{MJX)EDL}m$Tk)#%DS3=B);^9Rnv^1< zj7rNsj9^p<;xvnhkSkHSwXl-&txN3bSmma({L7h6r=KyAM-JXvPL9ZR$O`VgEX6!j zDQm(s(}Z`g;$*VzEnxoiedF0s4fgx+%;g0%+g2!0)++78i-kxQ&>1eX&K%`}(gzh` zMw;{fVZ!55-^nl;;@=86Fe)hNeI&?~}^vw=AWm ztWt;mdFCr&moBhSm!kOlMJmxab60EXSa1@48idc442LIK$uT?uN*DMb)I66N9w z7`0Ivn$6woynMq+yLn`1?RoV8R)iz49cO2mX^oq6Vqki_y~Aqu$yOnN_gmsEt0fJF z&OK*PS>O~roL?2^60wl6jedFm0N9zgLH#m7Qu^3ga+yg8*01kOA z+|{`zFE8;9w(;i(IVVBHu-!wQnQ#1NU~4U2F<4wN;DkF;(Pt3*dQ=kXA&{jqfu2v9vs zt1ORJu)rTs5w4<|)zDh501d1dLfXLR4(n$VQ3$npMt|uXIEqsH2%>yx#dPA#D1HuJ}r*w8lVU-!(>OQ7L#Ty*-&01((>{{Xnd zUrVo`SJJ9#Vm>9LxC|ntRMaJiytLa~Mc@s7r&C>5KfpL6FI}t$0n^ra)Ihq<3?~AjQ;s7>vUGj0)Hw{ZWTR4Sd zKdD4*X)5E(O!LG@!Ih5PoO4V{xiR5JM}gS{&}S>z%U?aga~D=EcGJAd#;WMG$`8h7 zU<{cwXI}Y#F{!YpAMexZaDJ2d`1{JHFF?Zdmo@AQKlI$nxq#qw!8+Ip>wkLYSR8aB zEaLHhFfi0ZB8J&p;9(+4Jd4ATeDD?#L@+$~Mf}2|a!SZi$L3J*klMr!X~9d~Ko6N( z!N|FHuOt2@3+48dfxufZ{{X5h4M`MC{{T$ZCKU6tR#S>l=ThSW^F`&O;{9t;QaT*8 zWN0zT(;rikSh{k*!6;W+QKq;lt7c%dYWp}J+cC6ns+Nn8#s`m}lK7TNfl`RqQj#kA zI3@_8D2U`>V~eJ*pAd6}1H6xDcZ#r|c$SzO&y$9K%C zFv+SJ>ir!O4P&$sNW6J^G-}N1XCT(KtJ@G8EEXVZ!0LXE9ZRU-ql2N+sXB4%c z6}Wv8#fIw^@I7}fLAAp4FUgSN8P;!6ioH}8R+^#3ujQI0cvn9sAGij9qc(oM#KDaf zPxwEWMJXsa2b1C{+Uaj_n;3=btr(Y;{BmpTM&o?eanI%ZjC2K$ODNEH0725{Fv9{- z)CsYD;w(qDA+HEFUM>Zq4uB8DqfskbA(svf0(5ebVq42r#}&<=iDM1{rx;E-uHfCQ z@X~u+{pTnA2~)1F}3W69;cTN_;>Cp_O92qlrtXb6kkn^?wqO z*eb5rBYhW&lyyms1#LQRQ`qBprcwU@W+VWWVZ&hbW?xRTfadq)#sZBFPc_&5j=*0p z7W@39MBo(uYpa=%y>(T8)Hy-e*R}p44I(%iDcR;^LqJvWzfWApZkQKAU{kxp2upcu zK4wxc*)Twc=V64f0JN>TvQf481Z*GdMXf-h7eL=b+&07!qKl`JHsw{T7s~Fp;^lUw zj;fBw_Z_vXOsyuf&7Zhn0f9wj+W!EVk{8{4*ZQNS;QB2}Vub2qHs98QTq>h3q7R@9 zet=?K${|X`--p~&I%`;`7d|l!w7gNodIo@&Ia65w01}ZwVb(8rH4+XIQC)n0u`*hQ z#`I~fVy_=%>zsIo0bpz`2SL^8t|C>?(o+64F@?xc(ua4%O$LIh3lJ* zHnEF5tH<7I5FWGx50&qUP%O{O*#OO@9aFw@u40f2w0Pt_#T06b1pvn>tM6spy6>F68%PS(A&p!EJYNTzpvEMnFEDv!qU#!H)m&&r&Okgo(vsxx51rdKM?i5+T z;{O0W%O>OYUg}ZAumWzhLN|eFx?EA><%$7zJFN$GpK^)RrdtCAI+gzba+Ogyi7#d9 z;^6H7YHA`1Hky7Vn1xqXJTM}(3f|6{f;?!pYqj_yO=4AuH8&-SkCr75p@>aOucvS- zBqG1~4I>Cbyh~~Z6G?;jgnwna{{XPcs#~00_G{){P!U(~`%7+>3@;n&h-#gbQ>EVc z+yGI5XMfGc2AetTb^MbAjDu6q;lb>ECKAI>DZ}=x>A^GF}%v~=kH?Ju9iZHCx#yGe-h+2#CndrR0 zZYsS)L@dvwhv|L;a z5nf#Th}h|6)5XTPG4vw<7oz4;-{4}xlsjggm@IEtY3)7B6v(5akD_uTOv0F&lLBo1 zppy9?MH6^}>Q|4WNE$?tkaZRTNC3D0u`Zy?b1QPG$$%#jj6SSBkN*H7F!~>&Y@2`b vG|gw{zkfror}-UE_d93tn|w{PNu=U)^~CyV_4S9+{V&nP+v^efHlP35(XxSP diff --git a/stylelens/attr_classification/color_model/test/green_cloth.jpg b/stylelens/attr_classification/color_model/test/green_cloth.jpg deleted file mode 100644 index d814e823cef285a7ed9339254b89849f09de1707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49638 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 diff --git a/stylelens/attr_classification/color_model/test/grey_shirt.jpg b/stylelens/attr_classification/color_model/test/grey_shirt.jpg deleted file mode 100644 index 2b992dbc3f7b44cd391b362aaf7b0bd9452b1a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30750 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 j-h|&@(%_U9wYxX<{XrWoKI9^c diff --git a/stylelens/attr_classification/color_model/test/orange_cloth.jpg b/stylelens/attr_classification/color_model/test/orange_cloth.jpg deleted file mode 100644 index 819853c284760316fb9bc15892b216974429eb26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115247 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 BD?tDN diff --git a/stylelens/attr_classification/color_model/test/red_skirt.jpg b/stylelens/attr_classification/color_model/test/red_skirt.jpg deleted file mode 100644 index 560a047f0b096e945feb7cb778b47a2694bb6b39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40907 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 diff --git a/stylelens/attr_classification/color_model/train_color_classification.sh b/stylelens/attr_classification/color_model/train_color_classification.sh index d266508..f0c546d 100755 --- a/stylelens/attr_classification/color_model/train_color_classification.sh +++ b/stylelens/attr_classification/color_model/train_color_classification.sh @@ -2,9 +2,7 @@ source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../tensorflow/slim: export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train1' -# export TRAIN_DIR_PATH='/home/lion/attr_dataset/color_model/model/train' export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset1' -# export DATASET_DIR_PATH='/home/lion/attr_dataset/color_model/data/dataset' export CHECKPOINT_PATH='/home/lion/attr_dataset/color_model/data/checkpoints/inception_v3.ckpt' diff --git a/stylelens/attr_classification/freeze_graph/frozen_graph.sh b/stylelens/attr_classification/freeze_graph/frozen_graph.sh index 1e1319e..c052823 100755 --- a/stylelens/attr_classification/freeze_graph/frozen_graph.sh +++ b/stylelens/attr_classification/freeze_graph/frozen_graph.sh @@ -3,11 +3,11 @@ source activate bl-magi export PYTHONPATH='pwd'/../../tensorflow:'pwd'/../../tensorflow/slim echo $PYTHONPATH -export MODEL_BASE_PATH='/home/lion/attr_dataset/color_model' +export MODEL_BASE_PATH='/home/lion/attr_dataset/category_model' python freeze_graph.py \ - --input_graph=inception_v3_inf_graph.pb \ - --input_checkpoint=/home/lion/attr_dataset/color_model/model/train2/model.ckpt-54229 \ + --input_graph=category_inception_v3_inf_graph.pb \ + --input_checkpoint=/home/lion/attr_dataset/category_model/model/train1/model.ckpt-786881 \ --input_binary=True \ - --output_graph=color_inference_graph.pb \ + --output_graph=category_inference_graph.pb \ --output_node_names=InceptionV3/Predictions/Reshape_1 diff --git a/stylelens/attr_classification/freeze_graph/upload_model.py b/stylelens/attr_classification/freeze_graph/upload_model.py index 829fff1..c9a150c 100644 --- a/stylelens/attr_classification/freeze_graph/upload_model.py +++ b/stylelens/attr_classification/freeze_graph/upload_model.py @@ -4,20 +4,20 @@ AWS_ACCESS_KEY = os.environ['AWS_ACCESS_KEY'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] RELEASE_MODE = os.environ['RELEASE_MODE'] +FROZEN_GRAPH_PATH = '/home/lion/bl-magi/stylelens/object_detection/frozen_graph/top_full_output_inference_graph_100893.pb' +LABLE_MAP_PATH = '/home/lion/attr_dataset/color_model/data/dataset1/labels.txt' AWS_BUCKET = 'bluelens-style-model' -AWS_BUCKET_FOLDER = 'classification/color' -MODEL_FILE = 'color_classification_model.pb' +AWS_BUCKET_FOLDER = 'classification' +MODEL_FILE = 'frozen_inference_graph.pb' storage = S3(AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY) -file = os.path.join(os.getcwd(), MODEL_FILE) -key = os.path.join(AWS_BUCKET_FOLDER, RELEASE_MODE, MODEL_FILE) - -print(file) -print(key) +key = os.path.join(AWS_BUCKET_FOLDER, 'prod', 'top_full', 'top_full_model.ckpt-100893', MODEL_FILE) +label_key = os.path.join(AWS_BUCKET_FOLDER, 'color', 'dev', 'labels.txt') try: - storage.upload_file_to_bucket(AWS_BUCKET, file, key) + storage.upload_file_to_bucket(AWS_BUCKET, FROZEN_GRAPH_PATH, key) + storage.upload_file_to_bucket(AWS_BUCKET, LABLE_MAP_PATH, label_key) except: print('upload error') diff --git a/stylelens/dataset/deepfashion/build_image_data.py b/stylelens/dataset/deepfashion/attr_model/build_image_data.py similarity index 100% rename from stylelens/dataset/deepfashion/build_image_data.py rename to stylelens/dataset/deepfashion/attr_model/build_image_data.py diff --git a/stylelens/dataset/deepfashion/build_image_data.sh b/stylelens/dataset/deepfashion/attr_model/build_image_data.sh similarity index 100% rename from stylelens/dataset/deepfashion/build_image_data.sh rename to stylelens/dataset/deepfashion/attr_model/build_image_data.sh diff --git a/stylelens/dataset/deepfashion/fabric_label.txt b/stylelens/dataset/deepfashion/attr_model/fabric_label.txt similarity index 100% rename from stylelens/dataset/deepfashion/fabric_label.txt rename to stylelens/dataset/deepfashion/attr_model/fabric_label.txt diff --git a/stylelens/dataset/deepfashion/generate_color_classifier_dataset.py b/stylelens/dataset/deepfashion/attr_model/get_object_by_color.py similarity index 84% rename from stylelens/dataset/deepfashion/generate_color_classifier_dataset.py rename to stylelens/dataset/deepfashion/attr_model/get_object_by_color.py index f776368..77183dd 100644 --- a/stylelens/dataset/deepfashion/generate_color_classifier_dataset.py +++ b/stylelens/dataset/deepfashion/attr_model/get_object_by_color.py @@ -31,8 +31,9 @@ def get_colors(classes): try: for clazz in classes: - color_name = clazz['name'] + color_name = clazz + os.chdir(color_dataset_path) try: os.mkdir(color_name) @@ -46,11 +47,13 @@ def get_colors(classes): limit = 100 i = 0 while True: - colors = api_instance.get_colors_by_name(color_name, offset=offset, limit=limit) + + colors = api_instance.get_colors_by_name(color_name, offset=offset, + limit=limit) for color in colors: _id = str(color['_id']) - download_image_from_url(color['file'], _id + '.jpg') + download_image_from_url(color['main_image'], _id + '.jpg') # pprint(color_object_list) if limit > len(colors): @@ -82,9 +85,11 @@ def download_image_from_url(url, filename): def main(_): # log.info('Start generate-color-classifier-dataset') - classes = get_color_classes() - if classes: - get_colors(classes) + #classes = get_color_classes() + color_list = ['Black', 'Gray', 'Purple', 'Blue', 'Brown','Green', 'Orange', 'Red', 'Pink', 'Yellow','White', 'Navy', 'Beige'] + classes = color_list + #if classes: + get_colors(classes) if __name__ == '__main__': tf.app.run() diff --git a/stylelens/dataset/deepfashion/get_object_by_fabric.py b/stylelens/dataset/deepfashion/attr_model/get_object_by_fabric.py similarity index 100% rename from stylelens/dataset/deepfashion/get_object_by_fabric.py rename to stylelens/dataset/deepfashion/attr_model/get_object_by_fabric.py diff --git a/stylelens/dataset/deepfashion/list_attr_cloth_fabric.txt b/stylelens/dataset/deepfashion/attr_model/list_attr_cloth_fabric.txt similarity index 100% rename from stylelens/dataset/deepfashion/list_attr_cloth_fabric.txt rename to stylelens/dataset/deepfashion/attr_model/list_attr_cloth_fabric.txt diff --git a/stylelens/dataset/deepfashion/od_model_3class/create_tf_record_from_db.py b/stylelens/dataset/deepfashion/od_model_3class/create_tf_record_from_db.py new file mode 100644 index 0000000..8be94d3 --- /dev/null +++ b/stylelens/dataset/deepfashion/od_model_3class/create_tf_record_from_db.py @@ -0,0 +1,216 @@ +r"""Convert raw PASCAL dataset to TFRecord for object_detection. + +Example usage: + ./create_pascal_tf_record --data_dir=/home/user/VOCdevkit \ + --folder=merged \ + --output_path=/home/user/pascal.record +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import hashlib +import io +# import logging +import os +import random +# import re + +import PIL.Image +import tensorflow as tf + +from os import listdir +# from os.path import isdir, isfile, join + +from object_detection.utils import dataset_util +# from object_detection.utils import label_map_util + +from stylelens_dataset.images import Images +# from stylelens_dataset.objects import Objects + + +flags = tf.app.flags +flags.DEFINE_string('data_dir', '', 'Root directory to raw PASCAL VOC dataset.') +flags.DEFINE_string('set', 'train', 'Convert training set, validation set or ' + 'merged set.') +flags.DEFINE_string('annotations_dir', 'Annotations', + '(Relative) path to annotations directory.') +flags.DEFINE_string('folder', 'merged', 'Desired challenge folder.') +flags.DEFINE_string('train_output_path', '', 'Path to train output TFRecord') +flags.DEFINE_string('eval_output_path', '', 'Path to eval output TFRecord') +flags.DEFINE_string('label_map_path', 'data/pascal_label_map.pbtxt', + 'Path to label map proto') +flags.DEFINE_boolean('ignore_difficult_instances', False, 'Whether to ignore ' + 'difficult instances') +FLAGS = flags.FLAGS +SETS = ['train', 'val', 'trainval', 'test'] + + +def dict_to_tf_example(data, image_subdirectory='JPEGImages'): + """ + Convert XML derived dict to tf.Example proto. + + Notice that this function normalizes the bounding box coordinates provided + by the raw data. + + Args: + data: dict holding PASCAL XML fields for a single image (obtained by + running dataset_util.recursive_parse_xml_to_dict) + dataset_directory: Path to root directory holding PASCAL dataset + label_map_dict: A map from string label names to integers ids. + ignore_difficult_instances: Whether to skip difficult instances in the + dataset (default: False). + 1image_subdirectory: String specifying subdirectory within the + PASCAL dataset directory holding the actual image data. + + Returns: + example: The converted tf.Example. + + Raises: + ValueError: if the image pointed to by data['filename'] + is not a valid JPEG + """ + + full_path = os.path.join('/home/lion/dataset', data['file']) + with tf.gfile.GFile(full_path, 'rb') as fid: + encoded_jpg = fid.read() + encoded_jpg_io = io.BytesIO(encoded_jpg) + image = PIL.Image.open(encoded_jpg_io) + if image.format != 'JPEG': + raise ValueError('Image format not JPEG') + key = hashlib.sha256(encoded_jpg).hexdigest() + + xmin = [] + ymin = [] + xmax = [] + ymax = [] + poses = [] + classes = [] + classes_text = [] + + width = int(data['width']) + height = int(data['height']) + xmin.append(float(data['bbox']['x1']) / width) + xmax.append(float(data['bbox']['x2']) / width) + + if int(data['category_class']) == 2: #excepyion about bottom + ymin.append(float(data['bbox']['y1']+8) / height) + else: + ymin.append(float(data['bbox']['y1']) / height) + + if int(data['category_class']) == 1: #exception about top + ymax.append(float(data['bbox']['y2']-8) / height) + else: + ymax.append(float(data['bbox']['y2']) / height) + + classes_text.append(data['category_name'].encode('utf8')) + classes.append(int(data['category_class'])) + difficult = [0] + truncated = [0] + poses.append('Frontal'.encode('utf8')) + + example = tf.train.Example(features=tf.train.Features(feature={ + 'image/height': dataset_util.int64_feature(height), + 'image/width': dataset_util.int64_feature(width), + 'image/filename': dataset_util.bytes_feature( + data['file'].encode('utf8')), + 'image/source_id': dataset_util.bytes_feature( + str(data['_id']).encode('utf8')), + 'image/key/sha256': dataset_util.bytes_feature(key.encode('utf8')), + 'image/encoded': dataset_util.bytes_feature(encoded_jpg), + 'image/format': dataset_util.bytes_feature('jpeg'.encode('utf8')), + 'image/object/bbox/xmin': dataset_util.float_list_feature(xmin), + 'image/object/bbox/xmax': dataset_util.float_list_feature(xmax), + 'image/object/bbox/ymin': dataset_util.float_list_feature(ymin), + 'image/object/bbox/ymax': dataset_util.float_list_feature(ymax), + 'image/object/class/text': dataset_util.bytes_list_feature(classes_text), + 'image/object/class/label': dataset_util.int64_list_feature(classes), + 'image/object/difficult': dataset_util.int64_list_feature(difficult), + 'image/object/truncated': dataset_util.int64_list_feature(truncated), + 'image/object/view': dataset_util.bytes_list_feature(poses), + })) + return example + +def read_from_db(dataset_api, category_class): + + offset = 0 + limit = 50 + idx = 0 + images = [] + valid_images = [] + + while True: + try: + res = dataset_api.get_images_by_category_class(category_class, offset=offset, limit=limit) + images.extend(res) + + if limit > len(res): + print("done") + break + + else: + offset = offset + len(res) + except Exception as e: + print(str(e)) + """ + get is_valid dataset + + """ + + for image in images: + if 'is_valid' in image: + if image['is_valid']: + idx += 1 + valid_images.append(image) + + random.shuffle(valid_images) + + if category_class == str(3): + cut_idx = 22454 + train_images = valid_images[0:cut_idx] + eval_images = valid_images[cut_idx:-1] + print(cut_idx) + else: + cut_idx = 32000 + train_images = valid_images[0:cut_idx] + eval_images = valid_images[cut_idx:40001] + + return (train_images, eval_images) + + +def main(_): + dataset_api = Images() + train_writer = tf.python_io.TFRecordWriter(FLAGS.train_output_path) + eval_writer = tf.python_io.TFRecordWriter(FLAGS.eval_output_path) + + train_images = [] + eval_images = [] + + for i in range(1, 4): + category_class = str(i) + print(category_class) + + (category_train_images, category_eval_images) = read_from_db(dataset_api, + category_class) + train_images.extend(category_train_images) + eval_images.extend(category_eval_images) + print("category_class: {} read from db done!".format(category_class)) + + random.shuffle(train_images) + random.shuffle(eval_images) + + for image in train_images: + tf_data = dict_to_tf_example(image) + train_writer.write(tf_data.SerializeToString()) + + for image in eval_images: + tf_data = dict_to_tf_example(image) + eval_writer.write(tf_data.SerializeToString()) + + print("make train/eval TFRecord done!") + train_writer.close() + eval_writer.close() + + +if __name__ == '__main__': + tf.app.run() diff --git a/stylelens/dataset/deepfashion/od_model_separate/create_3class_tfrecord_from_db.py b/stylelens/dataset/deepfashion/od_model_separate/create_3class_tfrecord_from_db.py new file mode 100644 index 0000000..1c8e485 --- /dev/null +++ b/stylelens/dataset/deepfashion/od_model_separate/create_3class_tfrecord_from_db.py @@ -0,0 +1,193 @@ +r"""Convert raw PASCAL dataset to TFRecord for object_detection. + +Example usage: + ./create_pascal_tf_record --data_dir=/home/user/VOCdevkit \ + --folder=merged \ + --output_path=/home/user/pascal.record +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import hashlib +import io +# import logging +import os +import random +# import re + +import PIL.Image +import tensorflow as tf + +from os import listdir +# from os.path import isdir, isfile, join + +from object_detection.utils import dataset_util +# from object_detection.utils import label_map_util + +from stylelens_dataset.images import Images +# from stylelens_dataset.objects import Objects + + +flags = tf.app.flags +flags.DEFINE_string('data_dir', '', 'Root directory to raw PASCAL VOC dataset.') +flags.DEFINE_string('category_class', '', 'top, bottom, full.') +flags.DEFINE_string('set', 'train', 'Convert training set, validation set or ' + 'merged set.') +flags.DEFINE_string('annotations_dir', 'Annotations', + '(Relative) path to annotations directory.') +flags.DEFINE_string('folder', 'merged', 'Desired challenge folder.') +flags.DEFINE_string('train_output_path', '', 'Path to train output TFRecord') +flags.DEFINE_string('eval_output_path', '', 'Path to eval output TFRecord') +flags.DEFINE_string('label_map_path', 'data/pascal_label_map.pbtxt', + 'Path to label map proto') +flags.DEFINE_boolean('ignore_difficult_instances', False, 'Whether to ignore ' + 'difficult instances') +FLAGS = flags.FLAGS +SETS = ['train', 'val', 'trainval', 'test'] + + +def dict_to_tf_example(data, image_subdirectory='JPEGImages'): + """ + Convert XML derived dict to tf.Example proto. + + Notice that this function normalizes the bounding box coordinates provided + by the raw data. + + Args: + data: dict holding PASCAL XML fields for a single image (obtained by + running dataset_util.recursive_parse_xml_to_dict) + dataset_directory: Path to root directory holding PASCAL dataset + label_map_dict: A map from string label names to integers ids. + ignore_difficult_instances: Whether to skip difficult instances in the + dataset (default: False). + 1image_subdirectory: String specifying subdirectory within the + PASCAL dataset directory holding the actual image data. + + Returns: + example: The converted tf.Example. + + Raises: + ValueError: if the image pointed to by data['filename'] + is not a valid JPEG + """ + full_path = os.path.join('/home/lion/dataset', data['file']) + with tf.gfile.GFile(full_path, 'rb') as fid: + encoded_jpg = fid.read() + encoded_jpg_io = io.BytesIO(encoded_jpg) + image = PIL.Image.open(encoded_jpg_io) + if image.format != 'JPEG': + raise ValueError('Image format not JPEG') + key = hashlib.sha256(encoded_jpg).hexdigest() + + xmin = [] + ymin = [] + xmax = [] + ymax = [] + poses = [] + classes = [] + classes_text = [] + + width = int(data['width']) + height = int(data['height']) + + xmin.append(float(data['bbox']['x1'] / width)) + ymin.append(float(data['bbox']['y1'] / height)) + xmax.append(float(data['bbox']['x2'] / width)) + ymax.append(float(data['bbox']['y2'] / height)) + classes_text.append(data['category_name'].encode('utf8')) + # classes.append(int(data['category_class'])) + classes.append(int(1)) + difficult = [0] + truncated = [0] + poses.append('Frontal'.encode('utf8')) + + example = tf.train.Example(features=tf.train.Features(feature={ + 'image/height': dataset_util.int64_feature(height), + 'image/width': dataset_util.int64_feature(width), + 'image/filename': dataset_util.bytes_feature( + data['file'].encode('utf8')), + 'image/source_id': dataset_util.bytes_feature( + str(data['_id']).encode('utf8')), + 'image/key/sha256': dataset_util.bytes_feature(key.encode('utf8')), + 'image/encoded': dataset_util.bytes_feature(encoded_jpg), + 'image/format': dataset_util.bytes_feature('jpeg'.encode('utf8')), + 'image/object/bbox/xmin': dataset_util.float_list_feature(xmin), + 'image/object/bbox/xmax': dataset_util.float_list_feature(xmax), + 'image/object/bbox/ymin': dataset_util.float_list_feature(ymin), + 'image/object/bbox/ymax': dataset_util.float_list_feature(ymax), + 'image/object/class/text': dataset_util.bytes_list_feature(classes_text), + 'image/object/class/label': dataset_util.int64_list_feature(classes), + 'image/object/difficult': dataset_util.int64_list_feature(difficult), + 'image/object/truncated': dataset_util.int64_list_feature(truncated), + 'image/object/view': dataset_util.bytes_list_feature(poses), + })) + return example + +def read_from_db(dataset_api, category_class): + offset = 0 + limit = 50 + images = [] + + while True: + try: + res = dataset_api.get_images_by_category_class(category_class, offset=offset, limit=limit) + images.extend(res) + print(len(images)) + if limit > len(res): + print("done") + break + + else: + offset = offset + len(res) + except Exception as e: + print(str(e)) + + random.shuffle(images) + cut_idx = len(images) + cut_idx = int(cut_idx*0.9) + + train_images = images[0:cut_idx] + eval_images = images[cut_idx:-1] + + return (train_images, eval_images) + + +def main(_): + dataset_api = Images() + train_writer = tf.python_io.TFRecordWriter(FLAGS.train_output_path) + eval_writer = tf.python_io.TFRecordWriter(FLAGS.eval_output_path) + + train_images = [] + eval_images = [] + + category_class = str(FLAGS.category_class) + (train_images, eval_images) = read_from_db(dataset_api,category_class) + print("category_class: {} read from db done!".format(category_class)) + + random.shuffle(train_images) + random.shuffle(eval_images) + + print("----images_num-------") + print(len(train_images)) + print(len(eval_images)) + print("---------------------") + for image in train_images: + if 'is_valid' in image: + if image['is_valid']: + tf_data = dict_to_tf_example(image) + train_writer.write(tf_data.SerializeToString()) + + for image in eval_images: + if 'is_valid' in image: + if image['is_valid']: + tf_data = dict_to_tf_example(image) + eval_writer.write(tf_data.SerializeToString()) + + print("make train/eval TFRecord done!") + train_writer.close() + eval_writer.close() + + +if __name__ == '__main__': + tf.app.run() diff --git a/stylelens/dataset/deepfashion/od_model_top_full/create_tf_record_from_db.py b/stylelens/dataset/deepfashion/od_model_top_full/create_tf_record_from_db.py new file mode 100644 index 0000000..ac806bb --- /dev/null +++ b/stylelens/dataset/deepfashion/od_model_top_full/create_tf_record_from_db.py @@ -0,0 +1,227 @@ +r"""Convert raw PASCAL dataset to TFRecord for object_detection. + +Example usage: + ./create_pascal_tf_record --data_dir=/home/user/VOCdevkit \ + --folder=merged \ + --output_path=/home/user/pascal.record +""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import hashlib +import io +# import logging +import os +import random +# import re + +import PIL.Image +import tensorflow as tf + +from os import listdir +# from os.path import isdir, isfile, join + +from object_detection.utils import dataset_util +# from object_detection.utils import label_map_util + +from stylelens_dataset.images import Images +# from stylelens_dataset.objects import Objects + + +flags = tf.app.flags +flags.DEFINE_string('data_dir', '', 'Root directory to raw PASCAL VOC dataset.') +flags.DEFINE_string('set', 'train', 'Convert training set, validation set or ' + 'merged set.') +flags.DEFINE_string('annotations_dir', 'Annotations', + '(Relative) path to annotations directory.') +flags.DEFINE_string('folder', 'merged', 'Desired challenge folder.') +flags.DEFINE_string('train_output_path', '', 'Path to train output TFRecord') +flags.DEFINE_string('eval_output_path', '', 'Path to eval output TFRecord') +flags.DEFINE_string('label_map_path', 'data/pascal_label_map.pbtxt', + 'Path to label map proto') +flags.DEFINE_boolean('ignore_difficult_instances', False, 'Whether to ignore ' + 'difficult instances') +FLAGS = flags.FLAGS +SETS = ['train', 'val', 'trainval', 'test'] + + +def dict_to_tf_example(data, image_subdirectory='JPEGImages'): + """ + Convert XML derived dict to tf.Example proto. + + Notice that this function normalizes the bounding box coordinates provided + by the raw data. + + Args: + data: dict holding PASCAL XML fields for a single image (obtained by + running dataset_util.recursive_parse_xml_to_dict) + dataset_directory: Path to root directory holding PASCAL dataset + label_map_dict: A map from string label names to integers ids. + ignore_difficult_instances: Whether to skip difficult instances in the + dataset (default: False). + 1image_subdirectory: String specifying subdirectory within the + PASCAL dataset directory holding the actual image data. + + Returns: + example: The converted tf.Example. + + Raises: + ValueError: if the image pointed to by data['filename'] + is not a valid JPEG + """ + + full_path = os.path.join('/home/lion/dataset', data['file']) + with tf.gfile.GFile(full_path, 'rb') as fid: + encoded_jpg = fid.read() + encoded_jpg_io = io.BytesIO(encoded_jpg) + image = PIL.Image.open(encoded_jpg_io) + if image.format != 'JPEG': + raise ValueError('Image format not JPEG') + key = hashlib.sha256(encoded_jpg).hexdigest() + + xmin = [] + ymin = [] + xmax = [] + ymax = [] + poses = [] + classes = [] + classes_text = [] + + width = int(data['width']) + height = int(data['height']) + xmin.append(float(data['bbox']['x1']) / width) + xmax.append(float(data['bbox']['x2']) / width) + + if int(data['category_class']) == 2: #excepyion about bottom + ymin.append(float(data['bbox']['y1']+8) / height) + else: + ymin.append(float(data['bbox']['y1']) / height) + + if int(data['category_class']) == 1: #exception about top + ymax.append(float(data['bbox']['y2']-8) / height) + else: + ymax.append(float(data['bbox']['y2']) / height) + + classes_text.append(data['category_name'].encode('utf8')) + if data['category_class'] == str(1): + classes.append(int(data['category_class'])) + if data['category_class'] == str(3): + classes.append(int(2)) + difficult = [0] + truncated = [0] + poses.append('Frontal'.encode('utf8')) + + example = tf.train.Example(features=tf.train.Features(feature={ + 'image/height': dataset_util.int64_feature(height), + 'image/width': dataset_util.int64_feature(width), + 'image/filename': dataset_util.bytes_feature( + data['file'].encode('utf8')), + 'image/source_id': dataset_util.bytes_feature( + str(data['_id']).encode('utf8')), + 'image/key/sha256': dataset_util.bytes_feature(key.encode('utf8')), + 'image/encoded': dataset_util.bytes_feature(encoded_jpg), + 'image/format': dataset_util.bytes_feature('jpeg'.encode('utf8')), + 'image/object/bbox/xmin': dataset_util.float_list_feature(xmin), + 'image/object/bbox/xmax': dataset_util.float_list_feature(xmax), + 'image/object/bbox/ymin': dataset_util.float_list_feature(ymin), + 'image/object/bbox/ymax': dataset_util.float_list_feature(ymax), + 'image/object/class/text': dataset_util.bytes_list_feature(classes_text), + 'image/object/class/label': dataset_util.int64_list_feature(classes), + 'image/object/difficult': dataset_util.int64_list_feature(difficult), + 'image/object/truncated': dataset_util.int64_list_feature(truncated), + 'image/object/view': dataset_util.bytes_list_feature(poses), + })) + return example + +def read_from_db(dataset_api, category_class): + + offset = 0 + limit = 50 + idx = 0 + images = [] + valid_images = [] + + while True: + try: + res = dataset_api.get_images_by_category_class(category_class, offset=offset, limit=limit) + images.extend(res) + + if limit > len(res): + print("done") + break + + else: + offset = offset + len(res) + except Exception as e: + print(str(e)) + """ + get is_valid dataset + + """ + + for image in images: + if 'is_valid' in image: + if image['is_valid']: + idx += 1 + valid_images.append(image) + + random.shuffle(valid_images) + + if category_class == str(3): + cut_idx = 22454 + train_images = valid_images[0:cut_idx] + eval_images = valid_images[cut_idx:-1] + print(cut_idx) + else: + cut_idx = 48000 + train_images = valid_images[0:cut_idx] + eval_images = valid_images[cut_idx:60001] + + return (train_images, eval_images) + + +def main(_): + dataset_api = Images() + train_writer = tf.python_io.TFRecordWriter(FLAGS.train_output_path) + eval_writer = tf.python_io.TFRecordWriter(FLAGS.eval_output_path) + + train_images = [] + eval_images = [] + + # top / full + category_class = str(1) + print(category_class) + (category_train_images, category_eval_images) = read_from_db(dataset_api,category_class) + train_images.extend(category_train_images) + eval_images.extend(category_eval_images) + print("category_class: {} read from db done!".format(category_class)) + + category_class = str(3) + print(category_class) + (category_train_images, category_eval_images) = read_from_db(dataset_api,category_class) + train_images.extend(category_train_images) + eval_images.extend(category_eval_images) + print("category_class: {} read from db done!".format(category_class)) + + + random.shuffle(train_images) + random.shuffle(train_images) + random.shuffle(eval_images) + random.shuffle(eval_images) + + for image in train_images: + tf_data = dict_to_tf_example(image) + train_writer.write(tf_data.SerializeToString()) + + for image in eval_images: + tf_data = dict_to_tf_example(image) + eval_writer.write(tf_data.SerializeToString()) + + print("make train/eval TFRecord done!") + train_writer.close() + eval_writer.close() + + +if __name__ == '__main__': + tf.app.run() diff --git a/stylelens/object_detection/create_od_train_record.sh b/stylelens/object_detection/create_od_train_record.sh deleted file mode 100755 index 526e5f5..0000000 --- a/stylelens/object_detection/create_od_train_record.sh +++ /dev/null @@ -1,12 +0,0 @@ -#source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim -export DB_DATASET_HOST="35.187.193.199" -export DB_DATASET_NAME="bl-db-dataset" -export DB_DATASET_PORT="27017" -#export DATASET_PATH='gs://bluelens-style-model/object_detection' - -echo $PYTHONPATH - -python create_tf_record_from_db.py \ - --train_output_path=./tfrecord_dataset/train.record \ - --eval_output_path=./tfrecord_dataset/eval.record diff --git a/stylelens/object_detection/create_tf_record_from_db1.py b/stylelens/object_detection/create_tf_record/base_create_tf_record_from_db.py similarity index 100% rename from stylelens/object_detection/create_tf_record_from_db1.py rename to stylelens/object_detection/create_tf_record/base_create_tf_record_from_db.py diff --git a/stylelens/object_detection/create_3class_train_record.sh b/stylelens/object_detection/create_tf_record/create_3class_train_record.sh similarity index 81% rename from stylelens/object_detection/create_3class_train_record.sh rename to stylelens/object_detection/create_tf_record/create_3class_train_record.sh index 13c8e20..cb32923 100755 --- a/stylelens/object_detection/create_3class_train_record.sh +++ b/stylelens/object_detection/create_tf_record/create_3class_train_record.sh @@ -1,7 +1,7 @@ #!/bin/bash source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../slim #export DATASET_PATH='gs://bluelens-style-model/object_detection' export DATASET_PATH='/dataset/deepfashion3' diff --git a/stylelens/object_detection/create_3class_val_record.sh b/stylelens/object_detection/create_tf_record/create_3class_val_record.sh similarity index 82% rename from stylelens/object_detection/create_3class_val_record.sh rename to stylelens/object_detection/create_tf_record/create_3class_val_record.sh index fc42ba0..6bd5a4d 100755 --- a/stylelens/object_detection/create_3class_val_record.sh +++ b/stylelens/object_detection/create_tf_record/create_3class_val_record.sh @@ -1,7 +1,7 @@ #!/bin/bash source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../slim #export MODEL_DATASET_PATH='gs://bluelens-style-model/object_detection' export DATASET_PATH='/dataset/deepfashion3' diff --git a/stylelens/object_detection/create_tf_record.py b/stylelens/object_detection/create_tf_record/create_tf_record.py similarity index 100% rename from stylelens/object_detection/create_tf_record.py rename to stylelens/object_detection/create_tf_record/create_tf_record.py diff --git a/stylelens/object_detection/create_tf_record_from_db.py b/stylelens/object_detection/create_tf_record/create_tf_record_from_db.py similarity index 100% rename from stylelens/object_detection/create_tf_record_from_db.py rename to stylelens/object_detection/create_tf_record/create_tf_record_from_db.py diff --git a/stylelens/object_detection/create_train_record.sh b/stylelens/object_detection/create_tf_record/create_train_record.sh similarity index 82% rename from stylelens/object_detection/create_train_record.sh rename to stylelens/object_detection/create_tf_record/create_train_record.sh index 201b930..006d01f 100755 --- a/stylelens/object_detection/create_train_record.sh +++ b/stylelens/object_detection/create_tf_record/create_train_record.sh @@ -1,7 +1,7 @@ #!/bin/bash source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../slim #export MODEL_BASE_PATH='gs://bluelens-style-model/object_detection' export MODEL_BASE_PATH='/dataset/deepfashion' diff --git a/stylelens/object_detection/create_val_record.sh b/stylelens/object_detection/create_tf_record/create_val_record.sh similarity index 82% rename from stylelens/object_detection/create_val_record.sh rename to stylelens/object_detection/create_tf_record/create_val_record.sh index aca5be3..2abcb3e 100755 --- a/stylelens/object_detection/create_val_record.sh +++ b/stylelens/object_detection/create_tf_record/create_val_record.sh @@ -1,7 +1,7 @@ #!/bin/bash source activate bl-magi -export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim +export PYTHONPATH=$PYTHONPATH:`pwd`/../../../tensorflow:`pwd`/../../../slim #export MODEL_BASE_PATH='gs://bluelens-style-model/object_detection' export MODEL_BASE_PATH='/dataset/deepfashion' diff --git a/stylelens/object_detection/eval.sh b/stylelens/object_detection/eval.sh index 51db04b..501bb4a 100755 --- a/stylelens/object_detection/eval.sh +++ b/stylelens/object_detection/eval.sh @@ -3,10 +3,10 @@ source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection #export MODEL_BASE_PATH='gs://bluelens-style-model/object_detection' -export MODEL_BASE_PATH='/home/lion/dataset/deepfashion3' +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/3class_model' python ./eval.py \ --logtostderr \ --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ - --checkpoint_dir=$MODEL_BASE_PATH/models/model/train \ - --eval_dir=$MODEL_BASE_PATH/models/model/eval + --checkpoint_dir=$MODEL_BASE_PATH/models/model/train1 \ + --eval_dir=$MODEL_BASE_PATH/models/model/eval1 diff --git a/stylelens/object_detection/eval_full.sh b/stylelens/object_detection/eval_full.sh new file mode 100755 index 0000000..aa9d517 --- /dev/null +++ b/stylelens/object_detection/eval_full.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/full_model' + +python ./eval.py \ + --logtostderr \ + --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --checkpoint_dir=$MODEL_BASE_PATH/models/model/train1 \ + --eval_dir=$MODEL_BASE_PATH/models/model/eval1 diff --git a/stylelens/object_detection/eval_top.sh b/stylelens/object_detection/eval_top.sh new file mode 100755 index 0000000..f2c688d --- /dev/null +++ b/stylelens/object_detection/eval_top.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/top_model' + +python ./eval.py \ + --logtostderr \ + --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --checkpoint_dir=$MODEL_BASE_PATH/models/model/train2 \ + --eval_dir=$MODEL_BASE_PATH/models/model/eval2 diff --git a/stylelens/object_detection/eval_top_full.sh b/stylelens/object_detection/eval_top_full.sh new file mode 100755 index 0000000..73cf869 --- /dev/null +++ b/stylelens/object_detection/eval_top_full.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/top_full_model' + +python ./eval.py \ + --logtostderr \ + --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --checkpoint_dir=$MODEL_BASE_PATH/models/model/train \ + --eval_dir=$MODEL_BASE_PATH/models/model/eval diff --git a/stylelens/object_detection/test.py b/stylelens/object_detection/test.py deleted file mode 100644 index 1a24495..0000000 --- a/stylelens/object_detection/test.py +++ /dev/null @@ -1,37 +0,0 @@ -import tensorflow as tf -import os - - -def read_tfrecord(path): - class_label1 = 0 - class_label2 = 0 - class_label3 = 0 - idx = 0 - for serialized_example in tf.python_io.tf_record_iterator(path): - idx += 1 - example = tf.train.Example() - example.ParseFromString(serialized_example) - filename = example.features.feature["image/filename"].bytes_list.value - label = example.features.feature["image/object/class/label"].int64_list.value - - if(label[0] == 1): - class_label1 += 1 - elif(label[0] == 2): - class_label2 += 1 - elif(label[0] == 3): - class_label3 += 1 - - print("idx: {}, filename: {}, label: {}".format(idx, filename, label)) - - print("label num") - print("label 1: {}, label 2: {}, label 3: {}".format(class_label1, class_label2, class_label3)) - - - -current_path = os.getcwd() -train_input_file = os.path.join(current_path, "train.record") -test_input_file = os.path.join(current_path, "eval.record") - -read_tfrecord(train_input_file) -#read_tfrecord(test_input_file) - diff --git a/stylelens/object_detection/train.sh b/stylelens/object_detection/train.sh index e284486..c231b19 100755 --- a/stylelens/object_detection/train.sh +++ b/stylelens/object_detection/train.sh @@ -1,13 +1,12 @@ #! /bin/bash source activate bl-magi -#export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection #export MODEL_BASE_PATH='gs://bluelens-style-model/object_detection' -export MODEL_BASE_PATH='/home/lion/dataset/deepfashion3' +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/3class_model' python ./train.py \ --logtostderr \ --num_clones 7 \ --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ - --train_dir=$MODEL_BASE_PATH/models/model/train + --train_dir=$MODEL_BASE_PATH/models/model/train1 diff --git a/stylelens/object_detection/train_full.sh b/stylelens/object_detection/train_full.sh new file mode 100755 index 0000000..eaf047f --- /dev/null +++ b/stylelens/object_detection/train_full.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/full_model' + +python ./train.py \ + --logtostderr \ + --num_clones 7 \ + --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --train_dir=$MODEL_BASE_PATH/models/model/train1 diff --git a/stylelens/object_detection/train_top.sh b/stylelens/object_detection/train_top.sh new file mode 100755 index 0000000..81d85a5 --- /dev/null +++ b/stylelens/object_detection/train_top.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/top_model' + +python ./train.py \ + --logtostderr \ + --num_clones 7 \ + --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --train_dir=$MODEL_BASE_PATH/models/model/train2 diff --git a/stylelens/object_detection/train_top_full.sh b/stylelens/object_detection/train_top_full.sh new file mode 100755 index 0000000..31b4319 --- /dev/null +++ b/stylelens/object_detection/train_top_full.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +source activate bl-magi +export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../tensorflow/slim:'pwd'/../../tensorflow/object_detection +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/top_full_model' + +python ./train.py \ + --logtostderr \ + --num_clones 7 \ + --pipeline_config_path=$MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ + --train_dir=$MODEL_BASE_PATH/models/model/train diff --git a/tensorflow/export.sh b/tensorflow/export.sh index 216ee98..99df03e 100755 --- a/tensorflow/export.sh +++ b/tensorflow/export.sh @@ -1,15 +1,12 @@ #! /bin/bash - source activate bl-magi -#export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../../slim export PYTHONPATH=$PYTHONPATH:./slim:'pwd'/object_detection -#export MODEL_BASE_PATH='gs://bluelens-style-model/object_detection' echo $PYTHONPATH -export MODEL_BASE_PATH='/home/lion/dataset/deepfashion3' +export MODEL_BASE_PATH='/home/lion/dataset/object_3class/top_full_model' export TRAIN_PATH=$MODEL_BASE_PATH/models/model/train/model.ckpt-$1 python object_detection/export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path $MODEL_BASE_PATH/models/model/ssd_inception_v2_3class.config \ --trained_checkpoint_prefix ${TRAIN_PATH} \ - --output_directory output_inference_graph_$1.pb + --output_directory /home/lion/bl-magi/stylelens/object_detection/frozen_graph/top_full_output_inference_graph_$1.pb diff --git a/tensorflow/slim/convert_tf_category.sh b/tensorflow/slim/convert_tf_category.sh index 9028c43..45c9bdd 100755 --- a/tensorflow/slim/convert_tf_category.sh +++ b/tensorflow/slim/convert_tf_category.sh @@ -1,6 +1,6 @@ #source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../slim -export DATASET_PATH=/home/lion/attr_dataset/category_model/data/dataset +export DATASET_PATH=/home/lion/attr_dataset/category_model/data/dataset1 echo $PYTHONPATH diff --git a/tensorflow/slim/convert_tf_color.sh b/tensorflow/slim/convert_tf_color.sh index 06c1e7b..d516692 100755 --- a/tensorflow/slim/convert_tf_color.sh +++ b/tensorflow/slim/convert_tf_color.sh @@ -1,6 +1,6 @@ #source activate bl-magi export PYTHONPATH=$PYTHONPATH:`pwd`/../../tensorflow:`pwd`/../slim -export DATASET_PATH=/home/lion/attr_dataset/color_model/data/ +export DATASET_PATH=/home/lion/attr_dataset/color_model/data/dataset echo $PYTHONPATH diff --git a/tensorflow/slim/datasets/category.py b/tensorflow/slim/datasets/category.py index 908309b..3fb560b 100644 --- a/tensorflow/slim/datasets/category.py +++ b/tensorflow/slim/datasets/category.py @@ -31,9 +31,9 @@ _FILE_PATTERN = 'category_%s_*.tfrecord' -SPLITS_TO_SIZES = {'train': 231396, 'validation': 57828} +SPLITS_TO_SIZES = {'train': 236827, 'validation': 57206} -_NUM_CLASSES = 50 +_NUM_CLASSES = 14 _ITEMS_TO_DESCRIPTIONS = { 'image': 'A category image of varying size.', diff --git a/tensorflow/slim/datasets/download_and_convert_category.py b/tensorflow/slim/datasets/download_and_convert_category.py index 02c659e..1d00331 100644 --- a/tensorflow/slim/datasets/download_and_convert_category.py +++ b/tensorflow/slim/datasets/download_and_convert_category.py @@ -38,10 +38,10 @@ # The number of images in the validation set. -_NUM_VALIDATION = 57828 +_NUM_VALIDATION = 57206 # Seed for repeatability. -_RANDOM_SEED = 5 +_RANDOM_SEED = 12 # The number of shards per dataset split. _NUM_SHARDS = 225 diff --git a/tensorflow/slim/export_inference_graph.py b/tensorflow/slim/export_inference_graph.py index c5521b8..a3a7fc6 100644 --- a/tensorflow/slim/export_inference_graph.py +++ b/tensorflow/slim/export_inference_graph.py @@ -81,7 +81,7 @@ def with the variables inlined as constants using: 'Batch size for the exported model. Defaulted to "None" so batch size can ' 'be specified at model runtime.') -tf.app.flags.DEFINE_string('dataset_name', 'color', +tf.app.flags.DEFINE_string('dataset_name', 'category', 'The name of the dataset to use with the model.') tf.app.flags.DEFINE_integer( diff --git a/tensorflow/slim/train_image_classifier.py b/tensorflow/slim/train_image_classifier.py index 1740b96..57d8b1b 100644 --- a/tensorflow/slim/train_image_classifier.py +++ b/tensorflow/slim/train_image_classifier.py @@ -144,7 +144,7 @@ 'learning_rate_decay_factor', 0.94, 'Learning rate decay factor.') tf.app.flags.DEFINE_float( - 'num_epochs_per_decay', 3.0, + 'num_epochs_per_decay', 10.0, 'Number of epochs after which learning rate decays.') tf.app.flags.DEFINE_bool(