Date: Wed, 18 Mar 2020 20:47:31 +0700
Subject: [PATCH 12/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index f7a1703c..08acb03e 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -197,7 +197,7 @@ Sau khi TensorFlow Object Detection API đã thiết lập thành công và sẵ
#### 3a. Thu thập hình ảnh
TensorFlow cần lượng lớn hình ảnh của một object để có thể đào tạo một detection classifier model tốt. Để đào tạo một bộ phân loại mạnh mẽ, các hình ảnh đào tạo cần có ngẫu nhiên các objects trong ảnh cùng với các objects mong muốn, và nên có đa dạng về nền và điều kiện ánh sáng khác nhau. Cần có một số hình ảnh mà trong đó object mong muốn bị che khuất một phần, chồng chéo với một thứ khác, hoặc chỉ ở giữa bức ảnh.
-Với Pinochle Card Detection classifier của tôi, tôi cso 6 objects khác nhau mà tôi muốn phát hiện (Thứ tự các quân bài chín, mười Ri, Q, K và Xì - Đây chỉ là thứ tự, tôi không nhận diện quân Xì). Tôi đã sử dụng iPhone để chụp 40 bức ảnh, với nhiều các vật thể không muốn cũng có trong ảnh. Sau đó, tôi chụp khoảng 100 bức khác cùng với đa dạng các quân bài cùng trong một bức ảnh. Tôi muốn phát hiện các thể khi chúng trùng lên nhau, vì vậy tôi chắc chắn rằng các thẻ có thể chồng lên nhau trong nhiều hình ảnh.
+Với Pinochle Card Detection classifier của tôi, tôi cso 6 objects khác nhau mà tôi muốn phát hiện (Thứ tự các quân bài chín, mười Ri, Q, K và Át - Đây chỉ là thứ tự, tôi không nhận diện quân Át). Tôi đã sử dụng iPhone để chụp 40 bức ảnh, với nhiều các vật thể không muốn cũng có trong ảnh. Sau đó, tôi chụp khoảng 100 bức khác cùng với đa dạng các quân bài cùng trong một bức ảnh. Tôi muốn phát hiện các thể khi chúng trùng lên nhau, vì vậy tôi chắc chắn rằng các thẻ có thể chồng lên nhau trong nhiều hình ảnh.
From badd7e23e7bbd30ff54ebcf3ad17312f54e31489 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Thu, 19 Mar 2020 19:41:35 +0700
Subject: [PATCH 13/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 08acb03e..0827fd2f 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -210,19 +210,19 @@ Bạn có thể sử dụng điện thoại của bạn để chụp các hình
Sau khi bạn có tất cả các hình ảnh bạn cần, chia chúng ra 20% đến thư mục \object_detection\images\test, và 80% còn lại vào thư mục \object_detection\images\train. Đảm bảo rằng có đa dạng hình ảnh trong cả hai thư mục \test và \train.
#### 3b. Label Pictures
-Here comes the fun part! With all the pictures gathered, it’s time to label the desired objects in every picture. LabelImg is a great tool for labeling images, and its GitHub page has very clear instructions on how to install and use it.
+Chúng ta đến với phần thú vị rồi đây! Cùng với tất cả hình ảnh mà bạn đã thu thập, bây giờ là lúc gán nhãn cho các vật thể mà bạn muốn nhận diện trong mỗi bức ảnh. LabelImg là một công cụ tuyệt vời để làm việc này, và GitHub của có đầy đủ các hướng dẫn để cài đặt và sử dụng nó.
-[LabelImg GitHub link](https://github.com/tzutalin/labelImg)
+[Link Github của LabelImg](https://github.com/tzutalin/labelImg)
-[LabelImg download link](https://www.dropbox.com/s/tq7zfrcwl44vxan/windows_v1.6.0.zip?dl=1)
+[Link tải về LabelImg](https://www.dropbox.com/s/tq7zfrcwl44vxan/windows_v1.6.0.zip?dl=1)
-Download and install LabelImg, point it to your \images\train directory, and then draw a box around each object in each image. Repeat the process for all the images in the \images\test directory. This will take a while!
+Tải xuống và cài đặt LabelImg, chuyển đường dẫn đến thư mục chứa ảnh đào tạo của bạn \images\train, và với mỗi ảnh vẽ một hình chữ nhật (box) bao quanh mỗi vật thể mà bạn muốn nhận dạng. Lặp lại quá trình này với tất cả các ảnh trong tập kiểm thử \images\test. Quá này này sẽ mất kha khá thời gian đấy! (**Lưu ý: Bạn hãy để định dạng là PascalVOC thay vì YOLO nhé!**)
-LabelImg saves a .xml file containing the label data for each image. These .xml files will be used to generate TFRecords, which are one of the inputs to the TensorFlow trainer. Once you have labeled and saved each image, there will be one .xml file for each image in the \test and \train directories.
+LabelImg lưu một file .xml bao gồm nhãn cho mỗi ảnh. Mỗi file .xml sẽ được sử dụng để tạo ra các file TFRecords, cái sẽ là đầu vào cho bộ huấn luyện với TensorFlow. Khi bạn gán nhãn và lưu mỗi ảnh, sẽ có một file .xml cho mỗi ảnh trong thư mục \test và \train.
### 4. Generate Training Data
With the images labeled, it’s time to generate the TFRecords that serve as input data to the TensorFlow training model. This tutorial uses the xml_to_csv.py and generate_tfrecord.py scripts from [Dat Tran’s Raccoon Detector dataset](https://github.com/datitran/raccoon_dataset), with some slight modifications to work with our directory structure.
From 3cdf449727c32ed5df5c295af3d7ef6e8db41418 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Thu, 19 Mar 2020 22:39:54 +0700
Subject: [PATCH 14/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 0827fd2f..1fda3e6b 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -226,7 +226,7 @@ LabelImg lưu một file .xml bao gồm nhãn cho mỗi ảnh. Mỗi file .xml s
### 4. Generate Training Data
With the images labeled, it’s time to generate the TFRecords that serve as input data to the TensorFlow training model. This tutorial uses the xml_to_csv.py and generate_tfrecord.py scripts from [Dat Tran’s Raccoon Detector dataset](https://github.com/datitran/raccoon_dataset), with some slight modifications to work with our directory structure.
-
+Cung
First, the image .xml data will be used to create .csv files containing all the data for the train and test images. From the \object_detection folder, issue the following command in the Anaconda command prompt:
```
(tensorflow1) C:\tensorflow1\models\research\object_detection> python xml_to_csv.py
From 9843cf291b3d9d3a064fe2d599a78f9fb856fe6f Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Thu, 19 Mar 2020 23:11:17 +0700
Subject: [PATCH 15/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 1fda3e6b..38a3eed5 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -225,17 +225,17 @@ Tải xuống và cài đặt LabelImg, chuyển đường dẫn đến thư m
LabelImg lưu một file .xml bao gồm nhãn cho mỗi ảnh. Mỗi file .xml sẽ được sử dụng để tạo ra các file TFRecords, cái sẽ là đầu vào cho bộ huấn luyện với TensorFlow. Khi bạn gán nhãn và lưu mỗi ảnh, sẽ có một file .xml cho mỗi ảnh trong thư mục \test và \train.
### 4. Generate Training Data
-With the images labeled, it’s time to generate the TFRecords that serve as input data to the TensorFlow training model. This tutorial uses the xml_to_csv.py and generate_tfrecord.py scripts from [Dat Tran’s Raccoon Detector dataset](https://github.com/datitran/raccoon_dataset), with some slight modifications to work with our directory structure.
-Cung
-First, the image .xml data will be used to create .csv files containing all the data for the train and test images. From the \object_detection folder, issue the following command in the Anaconda command prompt:
+Cùng với bộ dataset đã được gán nhãn, đây là lúc để tạo ra các file TFRecords cái mà sẽ làm đầu vào cho việc huấn luyện model với TensorFlow. Hướng dẫn này sử dụng file xml_to_csv.py và generate_tfrecord.py từ [Dat Tran’s Raccoon Detector dataset](https://github.com/datitran/raccoon_dataset), cùng với một số sử đổi nhỏ để có thể chạy được trong cấu trúc thư mục của chúng ta.
+
+Đầu tiên, các file ảnh và file .xml sẽ được sử dụng để tạo ra file .cvs bao gồm tất cả dữ liệu cho tập train và test. Từ thư mục \object_detection, ta chạy lệnh sau trong Anaconda Prompt:
```
(tensorflow1) C:\tensorflow1\models\research\object_detection> python xml_to_csv.py
```
-This creates a train_labels.csv and test_labels.csv file in the \object_detection\images folder.
+Kết thúc lệnh các file train_labels.csv và test_labels.csv sẽ được tạo ra tại thư mục \object_detection\images.
-Next, open the generate_tfrecord.py file in a text editor. Replace the label map starting at line 31 with your own label map, where each object is assigned an ID number. This same number assignment will be used when configuring the labelmap.pbtxt file in Step 5b.
+Tiếp theo, mở file generate_tfrecord.py trong một Text Editor. Thay thế các nhãn tại dòng thứ 31 bằng các nhãn của bạn, trong đó mỗi đối tượng được gán một ID. Việc đánh số thứ tự sẽ được sử dụng khi cấu hình file the labelmap.pbtxt tại Bước 5b.
-For example, say you are training a classifier to detect basketballs, shirts, and shoes. You will replace the following code in generate_tfrecord.py:
+Ví dụ, bạn đang đào tạo một bộ phân loại để phát hiện bóng rổ, áo sơ-mi và giày. Bạn sẽ cần thay thế code trong file generate_tfrecord.py:
```
# TO-DO replace this with label map
def class_text_to_int(row_label):
@@ -254,7 +254,7 @@ def class_text_to_int(row_label):
else:
None
```
-With this:
+Thành:
```
# TO-DO replace this with label map
def class_text_to_int(row_label):
@@ -267,12 +267,12 @@ def class_text_to_int(row_label):
else:
None
```
-Then, generate the TFRecord files by issuing these commands from the \object_detection folder:
+Sau đó, tạo các file TFRecord bằng cách sử dụng lệnh dưới đây tại thư mục \object_detection:
```
python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record
```
-These generate a train.record and a test.record file in \object_detection. These will be used to train the new object detection classifier.
+Các file train.record và a test.record sẽ được tạo ra tại thư mục \object_detection. Chúng sẽ được sử dụng để đào tạo một bộ phân loại vật thể mới.
### 5. Create Label Map and Configure Training
The last thing to do before training is to create a label map and edit the training configuration file.
From 73677a024723e5762add5862491c8bb3e5bc9864 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Sat, 21 Mar 2020 20:40:46 +0700
Subject: [PATCH 16/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 38a3eed5..94bf269b 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -274,11 +274,11 @@ python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=image
```
Các file train.record và a test.record sẽ được tạo ra tại thư mục \object_detection. Chúng sẽ được sử dụng để đào tạo một bộ phân loại vật thể mới.
-### 5. Create Label Map and Configure Training
-The last thing to do before training is to create a label map and edit the training configuration file.
+### 5. Tạo Label Map và cấu hình đào tạo
+Điều cuối cùng cần chuẩn bị trước khi đi vào huấn luyện model là tạo một file định nghĩa các nhãn (Label Map) và cấu hình file đào tạo.
-#### 5a. Label map
-The label map tells the trainer what each object is by defining a mapping of class names to class ID numbers. Use a text editor to create a new file and save it as labelmap.pbtxt in the C:\tensorflow1\models\research\object_detection\training folder. (Make sure the file type is .pbtxt, not .txt !) In the text editor, copy or type in the label map in the format below (the example below is the label map for my Pinochle Deck Card Detector):
+#### 5a. Định nghĩa các nhãn
+Label Map thì nói với bộ huấn luyện rằng tên mỗi vật thể được ánh xạ tương ứng với số ID. Sử dụng một Text Eidtor để tạo một file mới và lưu nó lại như là labelmap.pbtxt trong thư mục C:\tensorflow1\models\research\object_detection\training. (Đảm bảo rằng đuôi file là .pbtxt chứ không phải .txt !) Trong Text Editor, chỉnh sửa file Label Map theo format dưới đây (Ví dụ dưới đây là Label Map của bộ nhận diện các quân bài Pinochle):
```
item {
id: 1
@@ -310,7 +310,7 @@ item {
name: 'ace'
}
```
-The label map ID numbers should be the same as what is defined in the generate_tfrecord.py file. For the basketball, shirt, and shoe detector example mentioned in Step 4, the labelmap.pbtxt file will look like:
+Số ID trong Label Map phải giống với số đã được định nghĩa trong file generate_tfrecord.py. Ví dự với bộ phát hiện bóng rổ, áo sơ-mi, và giày được đề cập trong Bước 4, file labelmap.pbtxt sẽ trông như thế này:
```
item {
id: 1
From 14a63960166f2c72e3e77eaab09b785dad1814b9 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Sat, 21 Mar 2020 21:25:36 +0700
Subject: [PATCH 17/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 94bf269b..f4ded12e 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -329,27 +329,27 @@ item {
```
#### 5b. Configure training
-Finally, the object detection training pipeline must be configured. It defines which model and what parameters will be used for training. This is the last step before running training!
+Cuối cùng, quá trình đạo tạo bộ phát hiện vật thể cần được thiết lập. Nó thì định nghĩa cho model biết những tham số nào sẽ được sử dụng trong quá trình đào tạo. Đây là bước cuối cùng trước khi tiến hành chạy đào tạo!
-Navigate to C:\tensorflow1\models\research\object_detection\samples\configs and copy the faster_rcnn_inception_v2_pets.config file into the \object_detection\training directory. Then, open the file with a text editor. There are several changes to make to the .config file, mainly changing the number of classes and examples, and adding the file paths to the training data.
+Chuyển đến thư mục C:\tensorflow1\models\research\object_detection\samples\configs và sao chép file faster_rcnn_inception_v2_pets.config đến thư mục \object_detection\training. Sau đó, mở file này trong một Text Editor. Cần một số thay đổi trong file .config, ví dụ cần phải thay đổi số lượng, và thêm đường dẫn đến thư mục chứa dataset.
-Make the following changes to the faster_rcnn_inception_v2_pets.config file. Note: The paths must be entered with single forward slashes (NOT backslashes), or TensorFlow will give a file path error when trying to train the model! Also, the paths must be in double quotation marks ( " ), not single quotation marks ( ' ).
+Tiến hành các thay đổi với file faster_rcnn_inception_v2_pets.config file theo hướng dẫn dưới đây. Lưu ý: Đường dẫn cần phải được nhập bằng dấu gạch chéo đơn (/) (KHÔNG phải dấu gạch chéo ngược (\)), dẫn đến TensorFlow sẽ có thể sinh ra lỗi với đường dẫn file! Ngoài ra, các đường dẫn phải được để trong dấu ngoặc kép ("), không phải là dấu ngoặc kép đơn (').
-- Line 9. Change num_classes to the number of different objects you want the classifier to detect. For the above basketball, shirt, and shoe detector, it would be num_classes : 3 .
-- Line 106. Change fine_tune_checkpoint to:
+- Dòng 9. Thay đổi num_classes thành số lượng objects mà bạn muốn phát hiện. Ví dụ trên với bộ phát hiện bóng rổ, áo sơ-mi, và giày thì num_classes bằng: 3.
+- Line 106. Thay đổi fine_tune_checkpoint thành:
- fine_tune_checkpoint : "C:/tensorflow1/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt"
-- Lines 123 and 125. In the train_input_reader section, change input_path and label_map_path to:
+- Lines 123 và 125. Trong mục train_input_reader, thay đổi input_path và label_map_path thành:
- input_path : "C:/tensorflow1/models/research/object_detection/train.record"
- label_map_path: "C:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt"
-- Line 130. Change num_examples to the number of images you have in the \images\test directory.
+- Line 130. Thay đổi num_examples thành số lượng ảnh test bạn có trong thư mục \images\test directory.
-- Lines 135 and 137. In the eval_input_reader section, change input_path and label_map_path to:
+- Lines 135 và 137. Trong mục eval_input_reader, thay đổi input_path and label_map_path thành:
- input_path : "C:/tensorflow1/models/research/object_detection/test.record"
- label_map_path: "C:/tensorflow1/models/research/object_detection/training/labelmap.pbtxt"
-Save the file after the changes have been made. That’s it! The training job is all configured and ready to go!
+Lưu lại các file sau khi đã thay đổi. Vậy là xong! Cấu hình đào tạo đã sẵn sàng để chạy huấn luyện model!
### 6. Run the Training
**UPDATE 9/26/18:**
From 38bd9553621987ab93a363aba3de5a4ea4b6fb5c Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Sat, 21 Mar 2020 21:29:54 +0700
Subject: [PATCH 18/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index f4ded12e..52fc6eb9 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -351,8 +351,8 @@ Tiến hành các thay đổi với file faster_rcnn_inception_v2_pets.config fi
Lưu lại các file sau khi đã thay đổi. Vậy là xong! Cấu hình đào tạo đã sẵn sàng để chạy huấn luyện model!
-### 6. Run the Training
-**UPDATE 9/26/18:**
+### 6. Chạy quá trình đào tạo
+**CẬP NHẬT 9/26/18:**
*As of version 1.9, TensorFlow has deprecated the "train.py" file and replaced it with "model_main.py" file. I haven't been able to get model_main.py to work correctly yet (I run in to errors related to pycocotools). Fortunately, the train.py file is still available in the /object_detection/legacy folder. Simply move train.py from /object_detection/legacy into the /object_detection folder and then continue following the steps below.*
Here we go! From the \object_detection directory, issue the following command to begin training:
From 32ff8c14433a0a943a3793bb83f8fae98a96a9d6 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Mon, 23 Mar 2020 18:50:32 +0700
Subject: [PATCH 19/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 52fc6eb9..b8b1f28d 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -353,38 +353,39 @@ Lưu lại các file sau khi đã thay đổi. Vậy là xong! Cấu hình đào
### 6. Chạy quá trình đào tạo
**CẬP NHẬT 9/26/18:**
-*As of version 1.9, TensorFlow has deprecated the "train.py" file and replaced it with "model_main.py" file. I haven't been able to get model_main.py to work correctly yet (I run in to errors related to pycocotools). Fortunately, the train.py file is still available in the /object_detection/legacy folder. Simply move train.py from /object_detection/legacy into the /object_detection folder and then continue following the steps below.*
+*Ở phiên bản 1.9, TensorFlow đã thay thế file "train.py" bằng file "model_main.py". Tôi chưa tìm ra cách đê file model_main.py hoạt động chính xác (Tôi chạy và nó xảy ra lỗi). May mắn thay, file train.pt vẫn còn ở trong thư mục /object_detection/legacy. Đơn giản chỉ cần di chuyên file train.py từ thư mục /object_detection/legacy đến thư mục /object_detection và tiếp thục thực hiện theo các bước dưới đây*
+
+Nào chúng ta bắt đầu! Chuyển đến đường dẫn \object_detection, sau đó gõ lệnh sau để bắt đầu training:
-Here we go! From the \object_detection directory, issue the following command to begin training:
```
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
```
-If everything has been set up correctly, TensorFlow will initialize the training. The initialization can take up to 30 seconds before the actual training begins. When training begins, it will look like this:
+Nếu mọi thứ đã được thiết lập đúng, TensorFLow sẽ khởi tạo quá trình đào tạo. Việc khởi tạo này cần khoảng 30 trước khi bắt đầu đào tạo. Khi quá trình đào tạo bắt đầu, nó sẽ trông như thế này:
-Each step of training reports the loss. It will start high and get lower and lower as training progresses. For my training on the Faster-RCNN-Inception-V2 model, it started at about 3.0 and quickly dropped below 0.8. I recommend allowing your model to train until the loss consistently drops below 0.05, which will take about 40,000 steps, or about 2 hours (depending on how powerful your CPU and GPU are). Note: The loss numbers will be different if a different model is used. MobileNet-SSD starts with a loss of about 20, and should be trained until the loss is consistently under 2.
+Sau mỗi bước đào tạo, hàm loss sẽ được tính ra. Nó sẽ bắt đầu với giá trị cao và giảm dần trong suốt quá trình đào tạo. Với việc đào tạo model Faster-RCNN-Inception-V2 của tôi, nó bắt đầu vào khoảng 3.0 và nhanh chóng giảm xuống dưới 0.8. Tôi khuyên bạn nên đào tạo đến khi hàm loss giảm xuống dưới 0.05, việc này cần đến 40,000 bước, hoặc 2 giờ (phụ thuộc vào cấu hình CPU và GPU của bạn). Lưu ý: Hàm mất mát sẽ khác với các model khác nhau được sử dụng. MobileNet-SSD bắt đầu với hàm loss khoảng 20, và cần được đào tạo cho đến khi giảm xuống dưới 2.
-You can view the progress of the training job by using TensorBoard. To do this, open a new instance of Anaconda Prompt, activate the tensorflow1 virtual environment, change to the C:\tensorflow1\models\research\object_detection directory, and issue the following command:
+Bạn có thể thấy quá trình của việc đào tạo bằng việc sử dụng TensorBoard. Để làm được điều này, mở một terminal mới của Anaconda Prompt, kích hoạt môi trường tensorflow1, chuyển đường dẫn đến thư mục C:\tensorflow1\models\research\object_detection, sau đó chạy lệnh dưới đây:
```
(tensorflow1) C:\tensorflow1\models\research\object_detection>tensorboard --logdir=training
```
-This will create a webpage on your local machine at YourPCName:6006, which can be viewed through a web browser. The TensorBoard page provides information and graphs that show how the training is progressing. One important graph is the Loss graph, which shows the overall loss of the classifier over time.
+Lệnh này sẽ tạo ra một trang web trên máy cục bộ của bạn tại YourPCName:6006, ta có thể xem nó qua trình duyệt web. Trang TensorBoard cung cấp thông tin và biểu đồ về quá trình đào tạo. Một trong những biểu đồ quan trọng là biểu đồ Loss, cái mà minh họa cho tổng giá trị mất mát của bộ phân loại theo thời gian.
-The training routine periodically saves checkpoints about every five minutes. You can terminate the training by pressing Ctrl+C while in the command prompt window. I typically wait until just after a checkpoint has been saved to terminate the training. You can terminate training and start it later, and it will restart from the last saved checkpoint. The checkpoint at the highest number of steps will be used to generate the frozen inference graph.
+Trong quá trình đào tạo các checkpoints sẽ được lưu lại sau mỗi 5 phút. Bạn có thể kết thúc quá trìnhd đào tạo bằng cách ấn Ctrl+C trong cửa sổ terminal. Tôi thường đợi sau khi một checkpint đã được lưu sau đó mới dừng đào tạo. Bạn có thể kết thúc và bắt đầu đào tạo lại tiếp, và nó sẽ bắt đầu từ cái checkpoint gần nhất được lưu lại. Checkpoint tại bước đào tạo lớn nhất sẽ được dùng để tạo ra Inference Graph (model).
-### 7. Export Inference Graph
-Now that training is complete, the last step is to generate the frozen inference graph (.pb file). From the \object_detection folder, issue the following command, where “XXXX” in “model.ckpt-XXXX” should be replaced with the highest-numbered .ckpt file in the training folder:
+### 7. Tạo Inference Graph
+Bây giờ quá trình đào tạo đã hoàn tất, bước cuối cùng là tạo ra inference graph (.pb file). Từ thư mục \object_detection, chạy lệnh dưới đây, với “XXXX” trong “model.ckpt-XXXX” bằng giá trị trong tệp .ckpt được đánh số cao nhât trong thư mục đào tạo:
```
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
```
-This creates a frozen_inference_graph.pb file in the \object_detection\inference_graph folder. The .pb file contains the object detection classifier.
+Lệnh này sẽ tạo một file frozen_inference_graph.pb trong thư mục \object_detection\inference_graph. File .pb chứa model phát hiện phân loại đối tượng.
### 8. Use Your Newly Trained Object Detection Classifier!
The object detection classifier is all ready to go! I’ve written Python scripts to test it out on an image, video, or webcam feed.
From 05b8da0396c9c78c3155207b744a7c61e75789b0 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Tue, 24 Mar 2020 07:10:29 +0700
Subject: [PATCH 20/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index b8b1f28d..9fa72785 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -387,24 +387,24 @@ python export_inference_graph.py --input_type image_tensor --pipeline_config_pat
```
Lệnh này sẽ tạo một file frozen_inference_graph.pb trong thư mục \object_detection\inference_graph. File .pb chứa model phát hiện phân loại đối tượng.
-### 8. Use Your Newly Trained Object Detection Classifier!
-The object detection classifier is all ready to go! I’ve written Python scripts to test it out on an image, video, or webcam feed.
+### 8. Sử dụng Object Detection Classifier mới vừa được đào tạo!
+Object Detection Classifier đã sẵn sàng để chạy! Tôi đã viết một file Python để test nó trên một ảnh, video hoặc đầu vào từ webcam.
-Before running the Python scripts, you need to modify the NUM_CLASSES variable in the script to equal the number of classes you want to detect. (For my Pinochle Card Detector, there are six cards I want to detect, so NUM_CLASSES = 6.)
+Trước khi chạy file Python, bạn cần chỉnh lại biến NUM_CLASSES bằng với số lượng class mà bạn muốn nhận diện. (Với bộ nhận diện quân bài Pinochle, vì có 6 quân bài tôi muốn nhận diện, nên NUM_CLASSES = 6.)
-To test your object detector, move a picture of the object or objects into the \object_detection folder, and change the IMAGE_NAME variable in the Object_detection_image.py to match the file name of the picture. Alternatively, you can use a video of the objects (using Object_detection_video.py), or just plug in a USB webcam and point it at the objects (using Object_detection_webcam.py).
+Để test bộ phát hiện vật thể của bạn, di chuyển hình ảnh chứa vật thể đó đến thư mục \object_detection, và thay đổi đường dẫn ảnh IMAGE_NAME trong file Object_detection_image.py bằng đường dẫn hình ảnh của bạn. Ngoài ra, bạn có thể sử dụng video chứa vật thể (sử dụng file Object_detection_video.py), hoặc chỉ cần cắm USB webcam và hướng nó vào nơi chứa vật thể (sử dụng Object_detection_webcam.py).
-To run any of the scripts, type “idle” in the Anaconda Command Prompt (with the “tensorflow1” virtual environment activated) and press ENTER. This will open IDLE, and from there, you can open any of the scripts and run them.
+Để chạy bất kì một file test nào, gõ "idle" trong Anaconda Command Prompt (cùng với môi trường ảo “tensorflow1” đã được kích hoạt) và nhấn ENTER. Việc này sẽ mở IDLE, và từ đây, bạn có thể mở bất kỳ các kịch bản test nào và chạy chúng.
-If everything is working properly, the object detector will initialize for about 10 seconds and then display a window showing any objects it’s detected in the image!
+Nếu mọi thứ hoạt động bình thường, trình phát hiện đối tượng sẽ được khởi tạo trong khoảng 10 giây và sau đó hiện thỉ một cửa sổ với box của vật thể đã phát hiện được trong ảnh!
-If you encounter errors, please check out the Appendix: it has a list of errors that I ran in to while setting up my object detection classifier. You can also trying Googling the error. There is usually useful information on Stack Exchange or in TensorFlow’s Issues on GitHub.
+Nếu bạn gặp lỗi, vui lòng kiểm tra Phụ lục: tại đây chứa một danh sách các lỗi và tôi gặp trong quá trình thiết lập bộ phát hiện và phân loại đối tượng của mình. Bạn cũng có thể thử tìm kiếm trên Google về lỗi bạn gặp phải. Thường có những thông tin hữu ích trên Stack Exchange hoặc các vấn đề với TensorFlow trên GitHub.
-## Appendix: Common Errors
+## Phụ lục: Các lỗi thường gặp
It appears that the TensorFlow Object Detection API was developed on a Linux-based operating system, and most of the directions given by the documentation are for a Linux OS. Trying to get a Linux-developed software library to work on Windows can be challenging. There are many little snags that I ran in to while trying to set up tensorflow-gpu to train an object detection classifier on Windows 10. This Appendix is a list of errors I ran in to, and their resolutions.
#### 1. ModuleNotFoundError: No module named 'deployment' or No module named 'nets'
From feb9b4fa52ab71fae73178c380cff7afd0c3c502 Mon Sep 17 00:00:00 2001
From: Tran Hai Quan
Date: Tue, 24 Mar 2020 09:47:09 +0700
Subject: [PATCH 21/33] Update README_Vietnamese.md
---
README_Vietnamese.md | 36 +++++++++++++++++++-----------------
1 file changed, 19 insertions(+), 17 deletions(-)
diff --git a/README_Vietnamese.md b/README_Vietnamese.md
index 9fa72785..c00b03ae 100644
--- a/README_Vietnamese.md
+++ b/README_Vietnamese.md
@@ -405,15 +405,16 @@ Nếu mọi thứ hoạt động bình thường, trình phát hiện đối tư
Nếu bạn gặp lỗi, vui lòng kiểm tra Phụ lục: tại đây chứa một danh sách các lỗi và tôi gặp trong quá trình thiết lập bộ phát hiện và phân loại đối tượng của mình. Bạn cũng có thể thử tìm kiếm trên Google về lỗi bạn gặp phải. Thường có những thông tin hữu ích trên Stack Exchange hoặc các vấn đề với TensorFlow trên GitHub.
## Phụ lục: Các lỗi thường gặp
-It appears that the TensorFlow Object Detection API was developed on a Linux-based operating system, and most of the directions given by the documentation are for a Linux OS. Trying to get a Linux-developed software library to work on Windows can be challenging. There are many little snags that I ran in to while trying to set up tensorflow-gpu to train an object detection classifier on Windows 10. This Appendix is a list of errors I ran in to, and their resolutions.
+Dường như TensorFlow Object Detection API được phát triển trên hệ điều hành Linux và hầu hết tài liệu hướng dẫn đều dành cho hệ điều hành Linux. Việc cố gắng đê các thư viện được phát triển cho Linux hoạt động được trên Windows là một thách thức. Có rất nhiều vấn đề mà tôi gặp phải khi phải cố gắng thiết lập tensorflow-gpu để đào tạo một trình phát hiện và phân loại đối tượng trên Windows 10. Phụ lục này là danh sách các lỗi mà tôi gặp phải và hướng khắc phục chúng.
+
#### 1. ModuleNotFoundError: No module named 'deployment' or No module named 'nets'
-This error occurs when you try to run object_detection_tutorial.ipynb or train.py and you don’t have the PATH and PYTHONPATH environment variables set up correctly. Exit the virtual environment by closing and re-opening the Anaconda Prompt window. Then, issue “activate tensorflow1” to re-enter the environment, and then issue the commands given in Step 2e.
+Lỗi này gặp phải khi bạn cố gắng chạy file object_detection_tutorial.ipynb hoặc train.py khi bạn chưa thiết lập các biến môi trường PATH và PYTHONPATH một cách chính xác. Thoát khỏi môi trường ảnh bằng cách đóng và mở lại cửa sổ Anaconda Prompt. Sau đó, thực hiện “activate tensorflow1” để mở lại môi trường, bằng cách thực hiện các lệnh đã được hướng dẫn ở bước Step 2e.
-You can use “echo %PATH%” and “echo %PYTHONPATH%” to check the environment variables and make sure they are set up correctly.
+Bạn có thể sử dụng “echo %PATH%” và “echo %PYTHONPATH%” để kiểm tra các biến môi trường và đảm bảo mọi thứ đã được thiết lập đúng.
-Also, make sure you have run these commands from the \models\research directory:
+Ngoài ra, đảm bảo bạn đã chạy các lệnh với đường dẫn là \models\research:
```
setup.py build
setup.py install
@@ -423,34 +424,35 @@ setup.py install
#### ImportError: cannot import name 'string_int_label_map_pb2'
-#### (or similar errors with other pb2 files)
+#### (hoặc lỗi tương tự với các file pb2 khác)
+
+Lỗi này xảy ra khi các file (trong trường hợp này, preprocessor.proto) chưa được biên dịch. Chạy lại lệnh protoc theo chỉ dẫn ở Bước 2f. Kiểm tra thư mục \object_detection\protos để đảm bảo rằng mỗi file name_pb2.py sẽ có một file name.proto tương ứng.
-This occurs when the protobuf files (in this case, preprocessor.proto) have not been compiled. Re-run the protoc command given in Step 2f. Check the \object_detection\protos folder to make sure there is a name_pb2.py file for every name.proto file.
#### 3. object_detection/protos/.proto: No such file or directory
-This occurs when you try to run the
+Lỗi này xảy ra khi bạn cố gắng chạy lệnh:
```
“protoc object_detection/protos/*.proto --python_out=.”
```
-command given on the TensorFlow Object Detection API installation page. Sorry, it doesn’t work on Windows! Copy and paste the full command given in Step 2f instead. There’s probably a more graceful way to do it, but I don’t know what it is.
+Lệnh này được đưa ra trên trang cài đặt TensorFlow Object Detection API. Rất tiếc, nó không hoạt động trên Windows! Thay vào đó copy và paste tất các các lệnh được đưa trong Bước 2f. Có thể có cách đơn giản hơn để làm việc này, nhưng tôi chưa tìm ra lệnh đó là gì.
-#### 4. Unsuccessful TensorSliceReader constructor: Failed to get "file path" … The filename, directory name, or volume label syntax is incorrect.
+#### 4. Unsuccessful TensorSliceReader constructor: Failed to get "file path" … Tên tệp, tên thư mục, hoặc số lượng nhãn không chính xác.
-This error occurs when the filepaths in the training configuration file (faster_rcnn_inception_v2_pets.config or similar) have not been entered with backslashes instead of forward slashes. Open the .config file and make sure all file paths are given in the following format:
+Lỗi này xảy ra khi đường dẫn trong file cấu hình hình đào tạo (faster_rcnn_inception_v2_pets.config hoặc tương tự) chư được nhập bằng dấu gạch chéo ngược thay vì dấu gạch chéo xuôi. Mở file .config và đảm bảo rằng tất cả các đường dẫn tuân theo định dạng sau:
```
“C:/path/to/model.file”
```
#### 5. ValueError: Tried to convert 't' to a tensor and failed. Error: Argument must be a dense tensor: range(0, 3) - got shape [3], but wanted [].
-The issue is with models/research/object_detection/utils/learning_schedules.py Currently it is
+Vấn đề với models/research/object_detection/utils/learning_schedules.py hiện tại nó là
```
rate_index = tf.reduce_max(tf.where(tf.greater_equal(global_step, boundaries),
range(num_boundaries),
[0] * num_boundaries))
```
-Wrap list() around the range() like this:
+Sửa lại list() xung quanh range() giống như thế này:
```
rate_index = tf.reduce_max(tf.where(tf.greater_equal(global_step, boundaries),
@@ -461,15 +463,15 @@ rate_index = tf.reduce_max(tf.where(tf.greater_equal(global_step, boundaries),
[Ref: Tensorflow Issue#3705](https://github.com/tensorflow/models/issues/3705#issuecomment-375563179)
#### 6. ImportError: DLL load failed: The specified procedure could not be found. (or other DLL-related errors)
-This error occurs because the CUDA and cuDNN versions you have installed are not compatible with the version of TensorFlow you are using. The easiest way to resolve this error is to use Anaconda's cudatoolkit package rather than manually installing CUDA and cuDNN. If you ran into these errors, try creating a new Anaconda virtual environment:
+Lỗi này xảy ra do các phiên bản CUDA và cuDNN bạn cài đặt không tương thích với phiên bản TensorFLow bạn đang sử dụng. Cách dễ nhất để khắc phục lỗi này là sử dụng các gói cudatookit của Anaconda thay vì cài đặt thủ công CUDA và cuDNN. Nếu bạn gặp phải lỗi này, hãy thử tạo một Anaconda virtual environment mới:
```
conda create -n tensorflow2 pip python=3.5
```
-Then, once inside the environment, install TensorFlow using CONDA rather than PIP:
+Sau đó, khi đã kích hoạt môi trường, cài đặt TensorFlow sử dụng CONDA thay vì PIP:
```
conda install tensorflow-gpu
```
-Then restart this guide from Step 2 (but you can skip the part where you install TensorFlow in Step 2d).
+Sau đó, thực hiện lại hướng dẫn này từ Bước 2 ( nhưng bạn có thể bỏ qua việc cài đặt TensorFlow tại Bước 2d).
-#### 7. In Step 2g, the Jupyter Notebook runs all the way through with no errors, but no pictures are displayed at the end.
-If you run the full Jupyter Notebook without getting any errors, but the labeled pictures still don't appear, try this: go in to object_detection/utils/visualization_utils.py and comment out the import statements around lines 29 and 30 that include matplotlib. Then, try re-running the Jupyter notebook. (The visualization_utils.py script changes quite a bit, so it might not be exactly line 29 and 30.)
+#### 7. Tại Bước 2g, Jupyter Notebook chạy mà không xảy ra lỗi, nhưng không có hình ảnh nào được hiển thị vào cuối cùng.
+Nếu bạn chạy Jupyter Notebook mà không gặp bất kì lỗi nào, nhưng các hình ảnh được gán nhãn vấn không xuất hiện, thử cách sau: truy cập file object_detection/utils/visualization_utils.py và comment các câu lệnh tại dòng 29 và 30 cái mà bao gồm matplotlib. Sau đó, thử chạy lại Jupyter notebook. ( File visualization_utils.py được thay đổi khá nhiều, do đó nó có thể không chính xác tại dòng 29 và 30.)
From 39b822fbfdf6b66960e3cf7f73fe513f9add8853 Mon Sep 17 00:00:00 2001
From: winter2897
Date: Fri, 27 Mar 2020 23:44:14 +0700
Subject: [PATCH 22/33] Fix Readme_vienamese.md
---
README_Vietnamese.md => translate/README_Vietnamese.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename README_Vietnamese.md => translate/README_Vietnamese.md (99%)
diff --git a/README_Vietnamese.md b/translate/README_Vietnamese.md
similarity index 99%
rename from README_Vietnamese.md
rename to translate/README_Vietnamese.md
index c00b03ae..dbbda771 100644
--- a/README_Vietnamese.md
+++ b/translate/README_Vietnamese.md
@@ -15,7 +15,7 @@ Tôi đã làm một YouTube video tóm tắt về hướng dẫn này. Bất k
File readme mô tả tất cả các bước cần thiết để bắt đầu đào tạo một Object detection classifier của riêng bạn:
1. [Cài đặt Anaconda, CUDA, và cuDNN](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10#1-install-anaconda-cuda-and-cudnn)
-2. [Thiết lập cấu trúc thư mục Object Detection và Anaconda Virtual Environment](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10#2-set-up-tensorflow-directory-and-anaconda-virtual-environment)
+2. [Thiết lập Thư mục TensorFlow và Anaconda Virtual Environment](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10#2-set-up-tensorflow-directory-and-anaconda-virtual-environment)
3. [Thu thập và gán nhãn hình ảnh](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10#3-gather-and-label-pictures)
4. [Tạo dữ liệu đào tạo](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10#4-generate-training-data)
5. [Tạo một label map và thiết lập trước khi đào tạo](https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10#5-create-label-map-and-configure-training)
From dbd1532b35e1ff666cef910ce8625abb86f9563a Mon Sep 17 00:00:00 2001
From: winter2897
Date: Fri, 27 Mar 2020 23:46:19 +0700
Subject: [PATCH 23/33] Fix Readme_vienamese.md no image
---
translate/doc/C_drive_tensorflow1.jpg | Bin 0 -> 83977 bytes
translate/doc/YouTube video.jpg | Bin 0 -> 124983 bytes
translate/doc/collage.jpg | Bin 0 -> 335044 bytes
translate/doc/detector1.jpg | Bin 0 -> 101365 bytes
translate/doc/detector2.jpg | Bin 0 -> 107503 bytes
translate/doc/jupyter_notebook_dogs.jpg | Bin 0 -> 167717 bytes
translate/doc/labels.jpg | Bin 0 -> 138396 bytes
translate/doc/loss_graph.JPG | Bin 0 -> 22343 bytes
translate/doc/models.jpg | Bin 0 -> 48545 bytes
translate/doc/object_detection_directory.jpg | Bin 0 -> 100182 bytes
translate/doc/rcnn_vs_ssd.jpg | Bin 0 -> 235615 bytes
translate/doc/training.jpg | Bin 0 -> 227314 bytes
12 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 translate/doc/C_drive_tensorflow1.jpg
create mode 100644 translate/doc/YouTube video.jpg
create mode 100644 translate/doc/collage.jpg
create mode 100644 translate/doc/detector1.jpg
create mode 100644 translate/doc/detector2.jpg
create mode 100644 translate/doc/jupyter_notebook_dogs.jpg
create mode 100644 translate/doc/labels.jpg
create mode 100644 translate/doc/loss_graph.JPG
create mode 100644 translate/doc/models.jpg
create mode 100644 translate/doc/object_detection_directory.jpg
create mode 100644 translate/doc/rcnn_vs_ssd.jpg
create mode 100644 translate/doc/training.jpg
diff --git a/translate/doc/C_drive_tensorflow1.jpg b/translate/doc/C_drive_tensorflow1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ad178004e4dae1d2070c53c2490ac9af66e7a3ab
GIT binary patch
literal 83977
zcmeFZcT|&Kw=Nn4q=O*6OA(|h2q-NSX(CmmLqs}AZ$V0=cMuRzkS4uG>Ae@}(joK!
zB0ZrQAS5@xefQbtEBo8yoO{N&f84uYvIdMK?|SE4WzJ_lb1tw8*mc02=c*d206aWA
zz-!zO0J{WG2He8K`|I`Z7d|2WU)OB{0(?TE+eAcvHDVGn5@KRfVj?0^3Q|%sa@<8k
zLP!
zgg9yc68PUQyj%DLgtu`bk&@xQP=5y}K0f{}oUnuh1h{Vp;XVftP!rPJd!%^#uAUVU
zmj|s_NOC?gx6=1+I{irmkN6wUP!dvl21X`k-ury~4+I`dNJ>3Krv?B4H=#FQumF2tq!h50
z@BO*f%dQ-Je;&j@wwIru&sS5LKG?tncPpRyR*IHSi|D~Q!mH2I@_z2RTV&%{iMd48
z&&J8Og_6@EQmQEB`bbs9ExR%_3u2l5(M?n!caeqUh>LQ!ZE
zK??>p?TRct`!qB(7A;`&$Bn@i*4qykeCU(}sTeeqpFW?QUI}(QGhIAB1wQNC_=sVE
zOiCiCFn8y2(XQpcJ8SKGfYiS)G9#jTv4AMQbSXqpe;v|6(uEb-5^1E*-A!;u@lQ$c
z5J#PM_O%IS3`2v8D^&D%DFK&{9J&wsP^F5!KZx?QIUG{*$T@FBJRpY<$TAnwaVysl
zP=^91r`mE4SwZNV3=9DlF#4yn_FL}h9uP%}1#pj@>yV&HClB3@?xWoDvMj_jHk+H`
zHV$ePnL-wMZ{VhB_e@x6NH`w+YRSgG@I6S&B(siHcmj)YzD_&0kS3i3Ha$zMm}
zLLX?!3!BiHXmykb(0H7_=Kq0KgpSuxQF{g2`3N<%tBf4OmUpkATIR5&AnLu%
zC-$O6;jcC{K-$R-o%cEs!w|C0-&tTHEP!NR2P5^W8fXU%PtQzi|B_49!OlAiYgN4K
zAZfKtlF+Y~F)l@ZqvCIu4bP1|30|AGr22q1VZYtjh*`C8(qd6$r^{SH(UZ9oEw!De
z^6Q4&zw0l&+%6JDF~K8Pz%9rxFmQ1}=klBbO$bR&
z#sbJo5UrS)#`h3JP8}Ao=?&?9fEK|5zPhY)p!uqRs1<*m1o?ZGf4vtPf=cfECTm|R
z6^r3;Xz`2sRf`xX3n~~ZRfJUiKrDmIx-J^Pcg(|RsuQn(H4QrUc
zDnrG&6kF`Q^JeFq-$ZGYVgYVoOAR46-uA|tDZ<*ZAUC=#!#liFOQRv8wl1f{nZ^@`
zLjSQufq%0?_mfbzz=*Xotu}ltApE=p3t%b0FzIag-Q0BpU;!I)j#$9J{+3Q$E<^A`
zGzhg1hms_bqGsC&3&ABlMv`JW8~eY1Q8~iL$j2UgCde}~!!%!dxd*mZ^n8DI_@Lor
zRXStStp^;aaUFzexESopd4L5(WQnw{U+0p7$LD)8hA6X(6?rJiReg$LT+$cw7#;|J
zZXUfJ_SZJI!A$jI0TYXmbsco?wG0UsAYXt5yoa91H(&vgFHsg)z_X<;AWFv+f@}f)
z!_M!ZMPdPcp!i^JluS8TWN8Bnh=cgAm!1oY_r4PiJv!48Ap2eaDJBuVTiKu@RQmFb
znWmtC|B0q+zH;MF3^&rUc@ql=!2*au1BYdm%oB-KRc(&+`Cl~(iVE<2=Pq(IZ}zRq
z@8`NEbv$cQD%21dX;1nWqrCW!!u|88Lou$^rkh(j~Q*~?6!GfJA
zuhKm+RCq^$8yy@AaAw?WY^zE2`t;)E5L-emH}M-yYtn$h0~vR_o7{p#2AW;^OiZie
zSLu!|7ZG906B!Pn6LO`+H^x7B7-xysCvS@4uz=heETAj*GU~$jE+$9~3%~p5v?gt9V#I&%0?XAYt;K
zc7)HGp4vtFe{3I)|G9g*{`={FYbgGE6aLf*f-M3R+864sR*-P5dC9e{YwlN
zYJOuU_HAK|$`?yk#H(K+LNqoHCI==pk+quW;
zj~7Qah$6f-t27M|9K9}5+TUVInp;{Xh4MpJC7A5}Y)H$Acv3^mA>l3%J5df)?2`IV
zYZO)0-h4zvds^tOl+@ic{XrYY^tS>j?$Wmc3^UNQYDz6gsRI?H$iRr^j6_9N0*!71
zJw46Z@(Mul0bASiljnW-;VO2n?`b?N)ixn^YQ0vgy5H;
zdX%>4GvFOGXLsFFQrxLZbV&gJ_TrY1L+DeUxA&o}&Um(s#z#EBIuFR{1qgK)3wQ*v
zw*v0WKoE2owdr?i2eXLOKIT{TH&O59SyvZU`!eYN&|k5AOg2|t7i)Q_#H7v{N=eMs
zW{n}0x|T)ZcVhwHGve#n__|gpr$rAj{oCd+hlZbH?ECvZPiz%b6**6TW?ngWze`B`
zzJ7TB_(gqF&9rOfM&=X@-eVze1~$Qa7T~DI6B7D?Ts!uMqTwsf5cnG6-bsC@W+s
z3iCy{VqxQ;mriJ&g2^CNyHL9Gms(Qa6LKNX$`=LN56ZoMcc!HVk75CJ^Sv$%7p^FX
zZ2*#}>!Q)OgLyhXhopYVAceuqxL5E&ATG`do2Hx1g^8~3`ykhPm9YSi3Q>$mXO82#
zvJ5)zPmcA)T7CpeJ*(
zMCD+=XH(~F%4%)jzt3%o8|%mt(i|%2KW9f#M*SXsM{VgtMd}G#>m85^2uhoO)q0R6
zCxCfiX8?%_*Tk#_2?uA3Bwx2+?xW}~;>x&C`NgI|HG2U=+;ynWUM>t-kE?{@zYl^-
zTeBCx<>BQ3pc*JH%pILuLhQt|mFHD7WUY}>^jE!3%}wcsIWDJlDdJE4O``31+}Lgt
zLY}PICtb&20fF-eM(8`dO2K`wY5)h)aP^GitY@x`T@-N=sg-f#n{6-UT{&fjp706}
zRD^!9<9J!7qGHloyt>A{@1nDDJFH^w?(!JnpKQ-x8nW%rfAI>v%dX(WN64?vY
zvQ{BPjL?3><$Vj)*1n&;JrWXsKE5fcf|eW2?cE#&*UP^0f4TK#DapCj5u;WzX-?O8
zsD^<58QAI718?@yfZv1I9`5d!4!9Ejw0}uCx&wAt@t7A-GyNS%g%ngkWw-=MMV%)A
zP2#j#1ISA1K0W`Y9b!`OM*1On$?vW+iCruJG{2e{l>NC`g;p0a}A1)A^99OP(9q
zUNjH`7tEI0n9I5;fKymfJ2W&9bcxVYiD*p0RUJMXtAD6tS}xYz<$@{}1y2L1&Rf~;
z|C;W4fuK}yFKGaE9{GDAv(Xx9y6LbtFUnGKZFYB
zwKk*@!ZROnNfL7lfS+)3l+q130_*(VpD)&J)gXOCykYGJEj}4(;CPYhH}`B}h@S{m
z4i{3!EA03C)_FJie2dSY3B@CL9k!Y`bynd*r4>3p3?q}#G@w={ppM>*0Cc_5dkq_o6{Qi{@Z=!qqb?{OKq)`e@V>Ebm1huxcf`h2`4Btt9Yfy|RJgwUP
z80w%*Gn|-`4>M`_692`nQ>n|{*ER$0Zj64RA6~8>u=lYDyf!yscUW5slplT4D?GUI
zy@~a4))&WFGlxs-W3#D!Z)i&kkiVog#@^i~o^22nRV6=Yl-P4cGN*1*wQXV`?*9CP
z0x&HY9XtxblclH#9)nPcRJSp0Xl7+4k?+=w2(_rRwpF{l;r;Y+i04G3dI!Taz47OU
zxPuZ4=$2^20;oX&(a6vQfto@@)nYxeItk6!W7Wo0Wf(7T<0xX2+jRv+a)f2_9mZ7s
z?vO%?w7j0GJ_^*SRI40g>zisZlP2rpPTKjAbR(us!nbAlZifMWe8^Oew*MI@ZdJZK
zvW2o65M<=W%r<8(hP(HZwwMiZtKied`1uQjB=Hy>AEU)fdXKND1KDuAkFy(wD+y(<
z6Sa26g_6Mn2c63=Pkjxxe$65i_bcC7b!O{OS)-Lvz6(=qubt
z3&ary#0@xKDE|QqSd+MPntpZTf>FOw)Tm10uD^*y%Q@m8mcg9Fgv_|5@}a8Df^l=v7=@%K%*(Lx-O
z^&iUa`l+w=4buGvA>tgdfYV*7o72CMWLkS9?JY&aQji74E`n}c!8@*$M*VCgDp7?z
zz9A`+=z|(97Qm;81>|YXV{QRa`qVp}%$?RtR7vdOGZGf|pqa0+`^v39UpLm()h8Uj
zZb{JB+qqOVp-rRY_I(sZy5w0A4~*qN=s>9gUm|a+Tm7N?$w66tli54X
zhZTb4M=>*w!=VO!`68~gPpAf={?eeETdti5Y8=Os^f%AfV^Mvs>4Wh@4=g#S9r$ZO
z5AZg~Kny4%Q+o@g(=IY;Q#KvVnhr6cMv&8Tl@M=Un$0c`AqSgA7xzj^yM7E3X;?FX{auFBm94`$2iP`cqeljEEC7A?Pmj^6j5K_8
zPqGvFc*Q*AvU-Q%L|D75`Q&_<7yFNJTFbP8!
zI3`p5=MoFhbP2Wm(+^wY&imT@cXO%tcS3)VCKddb1C&P@8oPte7R7`}fl$Oax>PN-
z2n+ame;>!FaiIC}|Ld*+zxk^ne=8g9-%juQ|9Svb93f|<|6_&XW~5S3Q11Q(Lh<5utbU{dZ%C>;0e(Cd&<2#w(wll*C9?$j)7HN=EeA8F;1XhGeo*6v
zg9f93oYdi+4ScMtN5!u?4LpFIvMfW0O&&O+Vrl7kQFR_4B3zQ2M@TTE27EqXMq_HU)^-i>px)=+1
z>xfwGND87avgWq6scVV}~#FLSZhqOaV)lXJYu(yp;;wfbW;J7+EWc>^h7}
zPRU)^cX?~mqez9q9X_DnrYXx``-8ng(IADa%L)W#1SWQPrLC
zc#6r)oZ*e44Ujks-3z50EL#M7y+X?BjhFd37rQwBfO95^Jy{63M^P)-#8wnNzRU(8
z1FboAuzYKtIRMtwvqaNqX5EvXxX>UbELiOnbdj}j_viS7VaI@CH7f!U%yqg++}_U{fsDavIO{KP`>d
zHzmSF)ZD~)e;kR)%quEzh@v5=^kAC(j=Qb1ZMs*g89sgmmdbAf&D@GAmX?G%o$oWb
zoFG$qWHxD1MHp@iH$l`;;@6HSqRo;-j$Rm5w71NSfm!>M8Eo%^`4HDVyz!Ygs#2m)
zj?E_ynXXCEk8Zv{&ZQVc%5*cV-plPZba8f!Yv#NYLlFF$-Mr$s)!Z)MJyh7
zx@E8CSm=n8WC%%^rdjccIvgF%Wp(|a{2AgUh^DCz
z3#mL@?)U6r6j-*B!rC)#jJsW*R;LbHvb7=o!X+pqdo5?%L<0gyV%f}IB*HXDZp-n+
zxLRf2>cwO}+utkBl2|s9`e{B?U_RvamQh(ynF$>BT5@hB`3w1GwE*OB2Zx$`^Kozw
zmu#dnk17tNUWYCj!IQe&A~>i5O{$zQe5iisDzHvJMi@y^g_!gnsuDgct2?J4TY@b;
zFo>xp9jsr~u-6^`o-lbm@g56sNjjv8zX+yh_O0+Lc9!R#t%Dq{xc(BORRVL<3ia)EDQhni
zr=Gfs^0a%geh?lTAujSg`MOYeV~-%}Y1xVL)^M$d#>}tLj5o8I#*2?xm%v~!!D*+o9^j?$u^)-Xllw@kBfFCIeg{XX~Qd5NC1C0zuy*mEOo*Z
zkUPM^DvV}AcJ_2oG=0nTMcTHHrvH&VA+cOlSFrxoBkvPk4GH?AY^5!QZ;S;rNcB~@
zZAf+FRf6C7G|VjZ1+!0weKLI8>sPe^({44UPLK4bWwoLIu|;|`wydVlkh?GsayB02
zg4_o_R8{AdavfiO?=j73sMD8AgbLUc4HZR;<8q$2Vc?41%<^)}UDJVVw;*e9`S2c3
zq{WYQu?j%fda0ZWz<;d|x}*>&kHV}{CG|9Brl%EY6m(bblLXPalxS9%Yr4JRYH-V0
zXX3iq&?k)~d=@SSCB*fNda#JlIoREph-u8hZ+BrB5NauoDuG!{lsYwLk}0z8=%=ul
znHVmA)nrPxOSX!8=bu4rOnMHb#EgPS(f6uRAcLu3DwMe944T^MLY}p?4lx#f_c#5K
zd7ETnIrFNdnELYp1GdBDp-LQMV+{<=Fih#@>*|d1RFwbD7j2W!cCYwj>dR!`p+MD9
zmJCZ~>(k_JC%_4m2JMdHC6a>i94c%#*>rlYCZgrV_t{B0Z!LhN^cMLEG>-2S!wMoD^$Sn3~_NITsazgC=
zO2+(!jy-rs6geN&O*~F{K1H`|srtt6k%ZAeZmm(zaSS_coFbB;N0ewE#!9cd``r}z7cPa?c)7R-Wa)ZlRf2dymEK6@2MsKio4*2{#=
z*wrZ*NVrmX15erFcKnN99w+1iNA|19ClI3GhhQw=qIAxif)7KlveWzfJeOoCP%YAe
zPiuN>2Flsq-lXomb#2@BGtTS@cZ934>O7V37LS%|9#5yTBaotvHxFDTvCo0$=xe$K
zav&+~E?iRc&2@NGKfufA@$1u9(TQ>E7dsAvyyduRAaYrw4NVHFzBTeQH)cm>$qKK^
zUHTlJ$;xx%I+LBWB1lb4n7;tik^`uzkpJE*1%Q2+yp%I+@Q`TZP~bwe)={2svVKle
zR1CImrc>l3d9m-E(lv2nq2kLra5Nw)^7tOlYRO{7MB7tDZg0mORCu69G5Fn4&*9r@
zq5Ou1NPZXLh_T7m)-*1CKswyB=EaST!_OR59jlu*EZ~fC26+4t3xJp6tHzFFRv}kJ
zP8@%RAxHy=8}J6dp6YrVh$;t6ey#0n%*BMjqHa!d(XTj`CUCLcp)%%D2P5$Qu|wtY
z-y37Ki&I?mBBP51bl^ZqY#s%(pv<*DE_Pxog{TQUY#xO+J$j?-bA&!^Yt&YSoW
z7Yo|z(h&;WNnj97IhQ9{k6omSH47a<8IKKq
zcOC^*B=Bxkhu~^Z2MiXV^UcBu_H6QnBA1zFf1@YydZ_h}L2CJGwDo=2&95i!%ISOk_NIb%t9KF9AGxMFA_AY&q-elRB`G*{+bh5yil9kJKf|0|r`
zZg|V3^KG2qkWYWjl#k3c8~y4d`qDY6?@LZbBAkmfv<>c-%F+btqbao>+lk`8EhQ0i
zQAkk@O)6@XD%Bn1L4omfSXwxP2Tv?9CB2fuYm)8(e~GM0^aF%_^tsvoq4LI20wkcU
ztD!N2fmyDyW~Ha~`5?EXX5PXleRUS2pSncCUorC>h!n@U(?zh|*-gW=wzGFrvoX`r
zu}Qe$0h4Elue!;?t%m^pL5J@fpv0DC5R(rF)xNZHQ0TsSoO*pr?63QpB;#=um+wpQ
zw#+MWVI`;MZveNIQ$ssuc
zx_nES+5U4AsNNmi`;I!}!Y_%X0emq?0gz-)pF>^Hz1
zaUfbYR07U^EGGt&`*4{cW7_M+0#qn=4rv}&C-}k&0Bvxd0YdKsxuwZ%>Q8@I{98)8ZI|ovTU*Fx1VO_4RRcTKuW1FpRayLk&ADJ2)G66qGxzgRCB4yWwD{p1HHBXcS$s#~71sb1$U2poBF1%qSQ
z^bdu&m;=-}K9zDMaG!E|N+zXc8~NI98~b9Y=OG*Xh@8)5m%%z0357DZx-+~2(0w%1O^vJ?QgqWb
ziJ~z&P_9b33KgY4B^r3o)+!51xnRZ;5vS+;{oZP|RTNM4;I;N$LW&?Fq*Skapdms6
zSMv)!L@PU6l?(KH&WV%x7sk1Za(t?45`3@sO;KP}Oxy@9Woxy5$Ud(#)h2g8+t&Kl
zl3BNl8?8q#O}qd<#rr&OTD<%KTsbdW)Qx8r7GML#CB#E>Awvn^P0TXzY{SJ8mndjS
zYfd?BU$LX*1!p?|)rrQ@ObkdTp?R2%;?EMqdVAvnc|v!z
zG6%Yk!c1R(D6ci2*a48%Deu6Tn0E(1FI}yO&L7>^-!_u}^tD45fs2%(fzOeaQ641=
zzkPGqF|d}}FD%>XF0Ko^75+}IUy)Cat~YRgC~PKWqD|MELy=vK%>{z4C7n8CvU&{Z
zGkhD<(=U9vL3PcsyRJMTciI{zq&{|yg;wJSc6!^@UsY+Zbh33;XRBZQoW?O%kvl&P
zjK;+=u+@8rJtwzHu$c;pHDxU+i?FGN)QV%R3Ts58QY)vG$RWCh;B8qYM?!AHK&>?*
zz*JKbXFSR!KUY0A?PK1ROsy}}C6o^M)CrN?|DbdS@UUrUU#Zu?MbHiU1M0{zuqM7Y
zEVxyX3nQ~=Lw&ATl`$8Ml9f(fDvE!1h8&Tb2B%v*89(6Omh4T7|878#H|{BQ23i_?
zH81KzyoDHu%U`0pg9TVEt~p`2>tk2tijM;arU&zN@HAh^4M(zJt>wFH;-Fiz!Uq)
z$3_!tBtREo9XPcAmFjBv5SdC
zd+s0*=*d+#wz9pmP~d?6f&LLZ8MgKK`*Dmd;G-ixK%Lg-8+(jOV0|8DAxv$u4q4EV
z`wPS-Hno6i?JHv5A9L=$KSakad6F`xA^TH3^D#wJy8dd?wG?LRDrzu^5nMC8+3Waq
z!NJJW%ybl1Rru%brPl}+aU_aGqSg<
z&>G&($JIR$&{%w&frsJKJUh9&TbG9gEOtK6DbvB(Y6|F0z!(;guVUl?_!`R(fa3q7
z&AzlG!kt5r$FZ->$ibT?$Zij;J%<%%ksBB=9k_JlbG3v%$jO6#$UKfT*%ewtsUdZG
z*9akRfVWUt{qNdy!ZvQidti#KGa_p?^xf;B5+Z9ott+ZJ_)mE#of{`HVko0NAoUUY
zo)vUAql5R`bpGs-H|jo(mYbtEU9A0pQbn4Kr$0V-qI2#|W?hyAUr2j;hNzXCb9L0Phqz-Lf{TjD>>v^>1<$G`V%
zkud35C_ho^$G7!!;VX6yyGh3F;Z~hRzd`v2vph2{XmuZ8?fr}ZAG^3xW7Sf)!$?TH
zct`LH8vrAXSkPMvp^|IK`WFVdjn~vhNA>MhYXQ4K*-2CntFm!5@w!D}p;rwZQ`##<
zHfhK04Gj$|mMa_s9I(Wl4csY!2W_GoowvZb@Y~;u96k2m&AfXtm%dwQ`uwDjF!Pr~
zc*>~Dk)#UyW;A0**W_`l-!%v=hs%Y&5{(mXan2;Vui8XK&R?$$roKmi@2z8zY>z}W4O~ZPvt1<
z@qC!OIpnCCw82!02Clxf$Ueb1+qs_N2_EScEpiH$3zB-?8FD0Aw<7wSf^jCdClzcy
zK|B59gjnTca#KuA;6fwAz1aD2HG^X;fXMHpzQfOXe9b~bamI4;x&tJN0`mU3F6kFt
zGQ(-zb3H$`)F&-j3(s;sq?|hK&2%kumaMX3uPTK(Ui{Htx(u1ZIGEdzGmbPWr&+U;Z54XlAFH5ucw*Q4upOK_hmp%
zT-CXU;@7t=gJ&SMi7|*j=E%ck-Q9~n^wJTd?_}Avp>D#J4S7RO#Nk@Z>QI)~12uVW
zf{d@)p9UUv9E$#NzPx05IV%!$j;_02y=gd=lL6h7VHi;_Es)w7<$V~_qSngr&%t<6M?f%I8J{QQshF}ie
zttes1vb$E2ec1M>zh$}hgyU_@FA1H+)5c8~AR9;V)io4XUtlr6>$hK`IkFr`cCCe$
zL>0iD`S3^sk1u@vUhzE*{BzY
z^ojgRd8WcNBF@kH;X#Ku>idRU6xS9is;}jCsLvN
ztrLzkscN{G;9QBR#Dns0!TUx!!}I9+r$r15!&hvCbYbhj*kDFfS>X~0W!?9VA^N~g
zXk$kB$h%!h@JC5QmS3v0?Az{wRO>@`--dziClc+ZkEd(z;Qa3U{|s3E?RynMl&~2Z
zyb~UpGWqa28wmI1%M8s1Eye2owp+Uy)-Sl(tt_7i&$ChuR~mW;i%!`g4O(cNGQFJL
z&4jly!OhA(tmOTMFX{clg@`HQX^6)FI`mPtw+J<549NJt-0I6C!u-)`Kb}ipQmw0r
znPM?>NHIEP)92Ma+*4r9eK%T<%Gzi>rd7%BhEq_wIDwge$;pYroy)ik`KO4(Tm_g+
zH1GkT(y?Zcm|)gcB-O<;OU_B&*}xc)j=qdZmLvhGM?-uWt-k#}w!-nZ3D{K_Fr82Z
ziG+CJFTD&hwI`H*LB|uFRmwME))x*|*K{SRu3j|$f(;^_-q!eKyZZ*-Nztnu$lEa`
zPKL}!2>~U}gb@+5?FXKUfv+roBkt`RS9vWg%4jiCq@iiSv7nHxpSUD?3GUZdMMnH{8qh=S8B
zEntz$L}5Aqn=*O)dSYZ#md@gzUZmrdtQ47F=}^Jm$^O@XX8aL*f`O
zE`R_4peyJ$kV`8ofmk`n=##(q^NfC`@Z{}40fersC0O40&$rdJhwC;ca!waX@NDru
zk&%);NrusA9xFHZlr;ULki;qQ8f#pxfz=GNla^CR;cV{tG!0j-UWNjRMQ{rl)tR?K$D#*SuIDDqEd2Mg^)&}yiHtC(X54%ADPjn4_ouM`l4m(A00|O$?EwtABYINWn(*4054k*
zN4Y_yY7z-wz7GIifnSA&baippYu^6s;_N4cH0x$P-5g7{#@iay8Z1LQz2k5FH)M%J
zm$xdv$vEq(6aDz`yzq)4aze8Xs-EnaV&}
zUvffoanuJ&0MvC%4i3|sI+ismFFH!|lSr5v#1R&+5*=(Dwsd!$UVYo^6;OY&o(xi)
zhx-je!*i*HaLBcT3>1MQuQZ*ZclP|aj&%^O1rn`;ya(g09K(1um6Y4VAHY0bAjd9N
zsWf}Kz3DM$X}wsj$MEW7Xy0c<4v&YnM~YSH?9gw4sZ_@jrsqSVM|HvFfwyj2Iv9ed
zS4EqD2Hu6Uv>Uyut#!V%%2Mh4PDa|II?4InFZ(4z7xN^#PlpI`?5DjjflK_#R
zT6-JjDgb7>bX*Kn*(Z>>-A3-Nl}D>+n#E5R3dRdoN0z9a9k$zsEmish9TDE}h8u?hxu
zR%xB_A^Rj$DReI&D=X#;kNdM&la)^hT7U*$9^LH>_=>1moQ|`c>hPA+T&HWz$&R6v
zFBWi5Y(V^!@0j~CilYsr2f76|yO2apGlaC=D{7w@5LQ(`tlyW@pC8Dj?yRe<+H9M?
z;QP#5zaB8hz^Z)l<0zRR1+z!qhkP~Jxt`0xa^?&r-wQLGGlNTpt#i=fh;rKgP0a=G
zR?X`rt;f55la4t7if%4DoYItsndS8v
zYz=ze`MaL(G8d`5o;2Wqi&rVYqR(+Sy1h7w)-gw*<7eG%RCj4TCKB15*X<&AQFRfO
z4u5i-`D@!seAG}d@)dc}A0H#|K(mL4y^
zh2Hoa234V|8#Ux;K>_HhwfT~QllF4{uQ;kl5O>7G5r>UYwQz>8yvaZg2&BMCih>7P
zs_ZSi5kp6OQpm|f^~o5oma+RyuPalLpOuuYSKD-(qBY!wS+h#|1a`F~rt+(sGg&HM
zU?h1!`4;hkii1&h@HphwK`>q*PvcY-+@>>!TE667cF}3|bM%%kfc^H*C-`N*+UcX5
zf0JI!#Qwp^;y7w|EI{D$0NgXJg9!H$UdhrV{NST3b~3`Qz%Bo^BieT%{EB>Dm?OGv
zL2n?<>a_GV`D*9Ic<0m2(O9PV(&jgE83Gv#p6!c>^Qx{c1hB-_e|!mC%qpO%5T%S@+kzLK})v!yE8$NEr{M=2WS{C4+r!cnys
zk5HdCJ7d%3YYt8*_xF1D~!pON?nBji^q&Js3Nj9h=#wX#XgXwX&7`tvt4wHxU3xHNl<5
z$Jr0%&H1o5NZhhC+UR6L1;f>1gf?*sjy5NsKX{zE*nm&rx5E(7Zdg=wn@-g(J1YW{
zOw!abbFTU0;NajZo27}3Ky<-uG+ov@Ffo_}RfhPD>g{EJh-i#P^OOlinN6KLh(2Eb
zZa)TeNPx-Sr`&Aa?j9Fx&~JU)Yvh)4ouc+qMX_iv9k%+}Ex^`;a3yKuJ%{#HNqH92dNzK+}>p8ch5TR)xWpUDJt4>2_RQv
zOwK0)D>nu9StswS)T4=f8)TFEI*8{mOyIeD>n`|xl5-y%9ZSaC|9luKwoH3(2IErT
zb<|hidQ?07<{5Qic&(vPe{OgVCz7`SEUJS@FSs9;|GP%H(22{8ptiFufXQXC+IU=q
zF0h#=%4zAti=sF>0F`qsDtDtw&9Zi?3ay+!QMPxdeXQz>AM){^N8Ggj)cCHph6FTt
zfKaOEk)rYJG`Z%?Z@>k;&@x8e7W%j{CHsecqbVA-zK792_Qv9G#ZxJ(Ty^e4MnJnH
zB5_wsr#CvHh~pkD&?{s~WZO%xjiiH$f=$gaJI#Qo`ha%kVGDtPH`T}=zh7kBddl?1
zkEMuU$C-M*I=33-)g3G`&yCpMm%l&bTFqNG1q%pVQ6qU|s>+sa{mMoqm3%);aEDyW
zyM+UXM^QP0>MhfO8hLy4Fmw`qhD1X?ZCRPLU~MIN<+BLGrzB)w2;RJ74vxSjCW84V
z>nYTcY~o9%=)=Hl$fS49<;iz;lx
z;wwwlW7Dd5BLlKOPDVaRL1km#9qwG2o!p&0^}_;WFp$ruNzp(XC^f3LyJhfVO7Yzv
zdCnXbHUSvp;i|C6X5S=eS@ZFsc;)!(2p$E3fZOK_y<$d7C1p>pV?EUm6r8>ucv@JA!%mhPcJAm2VwN_EzNCnby<2F*H-@JOi*r}
zg9XxB68oW>DLOToEPUcYS?0_goC?_&pIt=CN>se6(wV(=JY)Y{>;71Mp8EOW`|nF%
z_$Qw0{?U(J4DOu1UetHhKAyiq%WpYMs?ZXjf?_%;d^#D>ehAB|5+~E@xDtmeyAry?
z!>EPD?4r!>f<~XFL?wMi^6*bH4^IZin_1eD1|XEdk80NTOy4r>maeH-IS25FFAe#7
zxX}Ho!I&GjHFPU_yxx(bwv_^yN5*tSBBA{dvOtNJZ&7`gJU<_k)EhloR4a431FPS>
zl~?&jmGFm1Gg)q%oC;{N&8iTUxTo%Y^HRGrlYh>UyRlirggQrk_J_W@KJt0q*?lQC
zgAKE1vA=5UlLFOIpiLLIK4zlmGk*y}q)67fu$i`5j4M~@lk=w$$>FlM)RMf!p7%jN
zGd{X+{QmPVkq)-N=gqBAhPBgyM#Qz#^=1K#^}?nD7EV)4g;Sb}J0zB((xBQk#!o-?
zJ|_i~kaj-X%MqTcle5;IKK7B5pVpmY+x*s$v%#Htne5ln7rs4QDx?$^G6XNqHLq!y
z6F$2XIkfI3)E<@1e#9$e-%VO)_)FCE^#XNae~aW0!WZ2z)lwBf37
zT{*7Y8=!&z%t233LVhff;dHx)1r%`)z=4;v@Xq~ZT!Bxz-#BI`g>K?V7G`;)W--
zb#EPF3%rzAi(I=9bj-cdp!1vU|AYm!&td_zoszz`okt%#dpU*(Jwf#HGGOI(i?p=C
zxcYrzQZ`k?$i*X#zVQMNe83s&ycy^V2g2|;u_Y-Q?f4ZX{t{7Kkf)hvF$QsjNc3pB
zRW3>UJM+i{VNM!HOG2L#TrCUZxLRkshuw`1tt-XVX)Pc~-wCQj7Be(b694?fu*MOG
zZI|4-ZtftUvACib78FPexBp6^byb#gf=e==I=1`7IKeAHpN*-{E6z_d(08RawM&p@
z7w(9aFqDq&)MGc|-wo1i9pAk?BjsEJz=lkw#DinoWl6^kc*1oy6)u;(JvqR6S-QcWive0R85v;x9Gp`jyWi8kzZmB3VWJWBa(vHcC5US3TH{7Tottx>aDoo$GIgF5NVMdE
zw<+jMQZIH{;)OGw>Jn?&hI`JSn38C)})?~j-8s3SpzJ*`nQ
z81(vs-~c|owt9E-3B&^T510byRw(1Db#OqIszT57UF*BmYw<&v;JVJ@#6>NtWPR-A
z#$cE$^MILiv=B@SXf`P!_i?Y|(33J8dRfOHiUm8M9MA_zzm5kY#3fYcC>
z-id;MbZJ3@fb_JD`JFxUp7+e|{{_!Ofs3|
z$$j6~^=TIt+NJGTjMMOys$I*lMViyziPtcF_pSOX{R`fkL}V60A05ljinaqZw^o+@
z^EifJwEkF`n&3(LOj)A2&j
zZ=ajjn6J5QnH3cyo6-E6CmQPzw!MF-wr-!Q`1SXona_Z-pViXw2xfJIuoCJ1PNeK^
zV85H(aM1WzCEt1!%86~N6>=Mst_kx1^`C^+7GEUTNT>ZPXP?7uIOicQp+w#-ZbP8PmuXgxGl
z%gXXp#Lu@&j-$=oA7xrGSnkYKBK@;eQq8K%uK!pqVPFb7%h>Sn>BVOC$lPB--tNi&
zP!&Uubo__T1lcD}RH|oZj-#k;cYTdPEw
zMO?y;g06JxqEdJxM;uCxccLbHogxzRYLey8qa1+N6cOlX;EHO|z2jo#B6Eo$Oxdjek$MkZguy
zqTE`8vY|K&{bD-IY9pGmo&QE{Rc;lS{%la~HcSiqee2}9@{;j5UVzhD;O0xB6Bwyh
z>Fou}swlj)vZ%KX*cK{N0oOu^zuztia$cn10Iftuk9JcYr0Wsv)7bJW(#xFIb0q&x
ztq=M-DCloI>O^iA&){CAF;D#xmb~wl#6r+mKS6F`iMBm+Psh*f3Y{_q$(}TEQst_h
z##VgQL`fs#ue#U5z;=ba%3B4G`h~GGG+xn8Hut}l#cno(HxgLRf(XW8LB1RjQXn=*
zGv6-`5%ix&E5w<_xMX*XCaz4qcE8(Erggshlv8Tb*sEZra@4S}9E;i|Z?@#A*ihH=#$p?s-x4iWx`EdvG=_6{auz^fi~Wj
zpRhms>YolxUTV9M4B*can9eSc`vd1e5y-|@C#1whCMG|cZaGP_gjhFG2Q;8q>lOKj
zs(NrZepAnMTyZFAC9vQD%XiZydz!6)2Yrx&I`pv=8Km-{MeBhm1ovkWjV0IYBin%Y
z;I`Sy&)Bu0+m&&Ayc3e5)S&v2@1&NfKRA8Cf;KMRJ~)BNYvfN
zu4VQ6A%6ibM^S?OWHCIULy5r|&0Z@XY~Ry`Nef-5A%C{5M?ByU?@A?Q`+9q>4mmg#
zVL?qQ+X|W52%EVDmRoKkTn{`0&*pT3ca9FtOm`s)eV-d_?JHYOc2C?2Fx8CGviQ-T
z+TYp1sc|o=A8woSQ@d0D5>hZY(9>#a`rhS{7aDy(@6o@=*MGk%*@?@@nA(JBIn*yQ
z$gJ-4Zs~dp-}v@Y75Ki+?@#tkDgG<-eK)UPh_oq_72I9KfLY&?Q}O5AdT2!B1md^Y
zL8)F~Ahm^fI{3o8=H`!*%+7cxr!nVqCiXE3vtKE`va?)ewcSUq8Z*fA#&n3UFhfFK
z?;Y&J%(LvEQ??v|gT{l_l
z2lAHdl1J2T%kvqJ5U
z<8={ML1u(MS%CF_uwvcanL|dsPuQpa&F<5yuiileS6|C5f7~?O3Xvhp>;K|-uPFSc!m$)v75UrRUoGGDx{IMYy&(w*R3uDFSdY)(M
z@~p#G(!H&@Aq|?VUt%u9jlOmX!S2LAK~NRoiHXUUG?7XUyR1&Q8$rB9p#0jotodMl
zZQeVE^;khURTFI77B|g+gf^J^LQ?xM2+ddNKn!cg#8F}(G+!jY7ZQ1^=bRkV9zqef
z?ZhfMlpZ~#ySZ_p=VjO%^6LDyP^Vc%qW1!X9ryO{_T289I@mV5_S2-h-?429m*a+q
za(+Eyq{ogTf!+Vw?nc|`Bv3WUC2#E`GkvPe}+NzbcaH=)vD8*8IIyMub~3`rm+|Frc=l*
zG;E@eGO@Bko8*5x{<+mt>{6UXg;B8O%4TwHzIh%0T@4is5
zThZnfWm}iM3!;;-rYxI7dF4wd?*qn=T<5734UmFfUsrhemc*?2%#%+d!<}z5H<~ry
z3ckynnViTnKcR@C$NpO%qZFaY6r@SmX~3`FLK0mwenQ$SbYOfZ&QoOhDm$pyYFSxG}0sOt&u(-
zIF@4WZp(TwOVqfw=Uq=&nuF^~VD3M{2O2yxl!hhiT&p&%`EpCzbu9UpC`R9gD9f-H)jbC5)-iUb9%Jz&;A+(pPeD~q`lc;~BnrdP2*RU56~Ek2LEwMp0=C8IQvqt~Qy;k8Mt
z&K2+bs*FO>36j#zlfzBUS+7?|%*0|G@a0^iuSd&8%Op=}_2)2vF7Adj@z&KZUw&RT
z1k#RMFP0m}g>;>ici}>7<$YU{NPjR30`?Vvl+HmtTp~TgFnxugGu6rj|Ge@>-FYL*
zflxxy<@4LOAONNkF$K3pCVGo?QlsE6XD;4~Xn0qf4;{};V_Bqb$@4@i9ek0b!_#sb^6~~>#a{=PP^=kj8~d3Y@s7ar$ata
zxQP=vN63@8^vlh08D+^j(y0sb{MY`JFt&%SSb^G!`>-gBUmEn>Dlu-UZs$-?0G92>
zQgZwdh3Qykz4#!GZ7&qsW`PnYScliHpb5JRl@Yf_5Q8=Z?#*Y?KFv)dwKpYauo7&w
z&EMhcVioVy1nK>$m+!qRdvW4>#^%{^5>c3IhHf86qH
zba_<<@F3Fa!ez|MezQB~i3!ZDc{D4K_M5klLoENA=FO}Z{#iGl*cSF34a_po13eDu
z%_8U(D=JL|J^V$a>8ND$)9B=9K|SIBqHkW>{J`t?kzm|%E6|!dReXot3x*N<1@%xm
za&66O!Sbp`9OjoLyBR+HlA(J3bm?FI@7u?3OXJ9kM5H$P@_fW(Z6M_J%HaF!3w^l3
zhn>7l@z39AQj0wA~~rK$3xFl~^cR1mWeC)LU6h0tWVHnlhLt2a93+o7KNvkM
z`WJIE*B0`^zb@?cWSMJT#*66RJ9VUrjk2pvRB~K^IgQeh#nQra7DV=&V<#qbmi|LU
z?L_BUgyR+H^f@t`-AsdL4DRInmzdc+ttj7V8I#U)#yRZeF{_7<_l&hjkhg*JJ3Nc#
z77-aEo~%BMkynz|yOEp<+tAF85Y!ycz^=fbjvH!;%wHG;pGlF^vV*J%Vi^k{M&~!q
zC-=%ZVG|oXALkz%>6cLplnM(AQ2p-fYrU=(5|yg|rd6+y(^D|FV)BRuojOr>y5lzm
zPf96dFH47t1_VIXaGrP&0|3q_C<+7#69~ksY73RzWb~;xeyK554%zuk)iBMVWyD(p
zHSWW!vOFJqKFWN7L-dyAC!BA#9}Z8`J;Y8K;ZT%_-tP=yuFbsBT!pG9mR3aJOPOSzoY;A>0@Hj#wC;SuqBrRgmtR-KZBpcQ*B}XC
z=OylM9#Mebr1D8LS(QLKVYJ~q6csztsTmQy7f2_h6`x%7W_s
zH(OT>zTiCb%s1B&fKbG(oBz7z5Y%cj&)E=@aJ*oY#hHcc2
zO>duYpV9EBWbMkgQWKnf`Mmu&YUPr?3?z;kBIJBh5l0+qmpj9V7-0@$EXdJL^P}Y%
zvBokIDm()@_b#+4bMMUNx<2y1lTSG6hSCFOTDgK6>+)#}rvS12VDI`epN*&$4#7`*
zF1N#COCMZfkuAu&i`mJVJvgm9JE8aGm~qQGo{D@;$ox4cMzk-L^eJ@@z@KD-hNg^sn
zJop6zm)L>UfVyO&xXQ#Cqj=Q2vF(4Te$7Wa6*MJ3zT4PtqP;>xm8}wg^U-A>|EbIP
zucA2Ft&8t=9|NoV%1$z+
z5!$LSiXZAgv-x@8@C9LIj-sAdO
zqoCC!F&N|BP-;k#&z{ojSr&wDMnNBoEDh`PVrK6KsB+)T(dcr;TM
zb8wAm6;hF<+ET-mQAp0aNuWMSdHQAd>RLfz6FDK6YV{>!Gj}&wI)Gy{W(D%~!qHC6iQB37B
zB$cwBfx6MBP
zUOT@!;{2f5YsT3ZMzq}6^VhR@d|8^lNvO@6p-RD@I&63D3As2sNNHShhS!LQM~xqy
zC()MY*C)LTr>>hC|6(YiPS0}z)!wC61nQPV?u`s?DEGa7GzlW
zP^UEf6;khBKJ?P0G->H9JMRSiu;dc2e%Z9aGbE*R6Sm3sYCuy_8r?$S`@>FTlv*vh%*?M>cTJ
zB^|)oM>Ju^#n}9J8@R(UfEa!bC^f16R~OsAtB!EOK>0IYh}*NZdioC)lIi@Zxp7TL
z)}AyV0iOH~UDqVmCs5R$R-POwo!`wk`VXQb{%Ku`jxQd09*uFJB&k^*y4x%5dPBR!
z2Q$9Ao#u-ZdiIp9WQj`ie9enG=ABg??zZ>h7GyKEeg<|UB?Mtc6V)#ke}83;@c>j7
z`%E7g19|=2qM$CksvQBTTS9Gnvt14X#jrVWLqzLVc6`4y^+&q4+gjaV1!?xWJ0X8Q
zTV%a=vub|$Xr*k#%E9_nDd_%~BAZj=51Bo)M~yIMHy&2h%G2C%0q(r_Duby??T;Q$
zl#qQ%vSd5F+fBbP%UVLnx08fuqeCeHulJ1+cFj;fBTa{DT8qqAR*Sn@*9vpm8~J?
zSSKXu<+TpKc@5ecj3G|JjPKUD5L|{t28RJ|S23IE)zABY4M+M$m&G$pL$8P3BNOYC
zdnqOA2B|MyiH)^Qo8aJ~(YH0DXltc#IgQXV1UKmF-DX$@u-si{2Klmmki*#HJGjA9
zleFzi$5(&N|JF!};gi0vCzADRwLR)Au*eUtd)X-&9FX7En7Lqj_rqNoA7sUFwnrjI
zV|8uDS*_)sO2xEGvTn~mRD?IWp*Y46L8lPram9ONUIp!9a;P|c9UQ)$Yq5Uv`InBu
zo7tWf*N=^@K-QqhF4srx=(R&MrXTMRfqKSXUUa5ShFa(AI)R~V+e2RIHAw+Z}oc%_B*{40eo=;@@F
zrK;Lru09ZBRNBjr&K&w?PAyIz6rCnbYt_>p!-ruuRfZUpalW3K7>s=fZ;~lW_Rl5n
zncJ3`-pggn=__`V6}_;}0e+%!WLmd$QTZWfRV;j_ginxY^nHH&aiupzrT-P;)ed~a
zF6zn!A=oXiOOzYnzx>}$bspkW{t8srgo|#A-n!nw!XV;U8m_lR#pY2D4TJJY@?)sm
zCgBC4M_0H_^XgKCVr+{o=1;D7Fgyz2;ko{N=f3aj0j+|HFS}PDcmJC*Y5&xBE0a}M
z7>dcM=4S1)@%=)+*;DC!!s4$`#EWjsn}nO48BSJgz5Ay4wI#@ze99B)`W)CPEO$XL
zzr^siiA-LbQaRVr+T1~C=s#4>(sda_IloH`L$hiUq_GfO?+@SY3k20p5CXd8p66%W
zfk8B0`vqT(tjr#ZOi7+LU&kz`&J5m!bLKpu6*c{;#o9fDkl4P5>hFOPUJr5j`E3%&
z;$3p%*sL=FQVbY?W>_uO_c!5rnC+FqO05r~0-B=BW7hSKA;XuRx7sTjxR*KB9;78e
z9eJteciXt3ync0oO}r0st4uG)XLuLC-k;NExUS0BjPTHXg4*xl%5xmhju&>ogSvER
z7C|4qfDiCap@t*a&&V(qsiT4?a=|($SLb)iRX{^e+}F%uhOS17~IOBXAw!U$SV<9?WO3ubMPc
zuoJHKNCGa>MFCpcTeQZaTcP@p)>HsjoMWa0+x}o^t@e&7E!iq#VRy=RQQNNxe}GYn
zzK2APD&F4Udo)=w+BIqA-6;Vk>hhLG;lF7)dZjpq3^ILXe_o32mvB9ej^2IUCw(e@
zhTOHU^ey#)ta%~>D}XibvsF9o*vL;q7NF2|5zX5%ieWw!$%#TDds?BN(T=G-ajw#x
zep4FW)L$~7*J~VYDgXXzY!i>zgxcxh296hPTge{uoZLnX>^5Wi;{A+UpD5l@uONj_
zsUb3s$JLMNi&_S47Ugh%hzq9H5E|$+{6bYUG-|jq_vE}RhNnzRCWoauA
zt8%}RIDZZ@4jq~Pyz)e}tGw*ji@jj@hs35R!3W_+B0rPUB=mxDi$G`TCJ4D&W5{bz
zJ93V2#s!)kL5>tniO4NFV$%LXTBH<2sSDGcm2KwNp+~%uZHvdTb``TKZj#z8E
zvpmEumY0txsP?<)B;KBF4Zd(nbH+z3Y~v3<=}uUbWpRqH5jpW1+1TG`jO!|nf4nj`
zt2i}>&trMKcPHXeK2_`^dpCW8cxO55f`M7OBQoc}vGFt9lCYO4UDp^Ztni9gc{Y1e
z$*gu!{N_58NkO1^6NBC2a!trJ>kSO_mA8?1wAJ6)3ceWX)F9csgNw*oYO&H#62*Wf
zLHm+x6-)2I0Dv}gs(V(hxy>)eN`E=tuqJ7UW|Q7gC1x>$8j>uq69p8PvD
zp-zHRiSnY_LzvN4BP;QS;dEn^zsM3Ibn#83W^Mlzh1~yKcufMQAq1lx)7v?*ZtBMk&V9(SP#mhE)|!)jJc%VC8Cclr(=b!na(#M(mZm(~rDiG*w&0D5M1uR+c-FS@)jT66!w(iisipVbh
z5Hg={)koQl!{_MAR~q98j=#Y+eEn-&^E2ThK%H3orC8Szn{03i}nH9!WfH
zSG<#^8i6x5KoNO6Np38JK7qe)yNuvESY!l3()9ulpcRkEy2ho~P??i{E?Q{q=nY>QUjBvwXcdx*-==
z@q2zi$~t$mC^m;4l5aWWCurAdM#DOATtMy+nssJfE+l7C
z#u%nuWcFLso*nr$ReeC_@+FC1#_IRuO;s;Gzw*NiA}-#hGuzBuAfiC$CMJw57
zeQ5!(bg8k%tgwQ#E*RHxcvq~CXFDN($q&h5DOpkDZ_n+uKudO_J$ObF0kv;-Qza+h
zGhTwr6<0di~U1)qneyqW^M(wan3Y%PR}w@Q
z9>Vi_Zl@UqxPB_!xc&zso>!NtWe@9Jd|R{I`GUn&-~Gt%86YpiRqu9M`m`@+PZmai
z6CHSGOu<*^`={3hst!H
zYhq+KEcwBex?M(UU
ziP7FvRIPyxgD3mfJ3mry`@KO8;A$e{3YEQ`-;KWTF^gqC@gzrVtY{l#98^Olh{*%=
z;!`_O?gRFCpRk!ZDJYKVf^PmHI?n{P0qKaZrp=Wak_;tx)+{{LDDNeC_Aw~tWt
z`3tpY;&Tc(ige}BYZ*Z_J#+ns>TUg~*U)w9nm?#`N4Tj_U19}Qlqsjj=l36bd^8Xt
zLzD|GWCudv^Wj7AcQ>hYFi<2RD){!y(Tb~%`zBfsW|dtQ3wgu6toVpJkVCtvgYJ=JF{WvR1wo|a$rb(X&NU!2T;H>~`Zapiw}{13+EJron=YA|36ky=bR
z1%&6L;kAJZvVafTMf^M{l9H0Z{RPM5K|#20tomSvG|v((H<
z{?EYM(Mtf#7&Vv+_BC=}?_S)BE&Ag?m!t>!6gD01H+8nk2zzTt)YpsgnNYxNkZQIL
z!%RlDxX>Hq3JgMQG_k)pz{@2wgWV}{we}?`##uxF9evn1_ujseE
z!F~cTnSy{u0zK^%*l+6K`xozUxt{mr)eM6PMI^BnzPlMS0mAK55=mv_Fjc}vlx
zU25_qh4sEzZ!Opuk@BMN{Wb1~H?M0ahCQE
z^Po<>`>2(NC6DJ_nE5+TF28yWj)>H;N{8CRNe$Q1s<+t>>8G?z)e7CD0z({9*FnEl
z^6{kM?X4i6VJ9nQA|mq%0b2%_ke`z3ndw?C+oMx%h<`EWs-noeC{HKBCf|?{jwWa~
zfg)RkhQ)SJ?$A;v3X2?L#U~rDdTVxRE~)NZsUIx8FsHokpN1>)T6@f)#iCiI_ba~0
z(0d&C9ctbF7t4V<
z{>qHnxEMR{ZO+wi8W(GOQ^f8#F1dVZPwJevtLLQt@NE0Ws1uehZ~S}sJoJ)TkTlu9
za83Faz2(C}$luR&X!`!^Py2b2cXV7QLNXTU`B@!DES)A{lM~ZP;?i`NqMGT9EaD}A
zn{Fel@^vzicM9utpC>8u(?R70aDNkst|+?S;MBtC`5l1L8_@i!(b_#^c5+dDno}`M
zs=s5QS>4Lt^t0+R}K6#d*QXL4r!k{eK34*K!$6g;ADHHxIzkF_gT%gF~l`Zv>X{>8`7iIIjUycGL%p=2s*TS>F)RUniubAr1=MIK#lilV9fyo~vHv?;-5Ifxdq-(z=EVAui`)a5m
zd9R+>dhjGsy7Vb!=GO$@;@f6E8=hl~zxI2ZhWC2Zf*(Fv)to-3
zbigOOvSL8&DBD7?ae!<2f?H&wpD_TWIS{Q%3(Y!$Zja~syOoPhnZNpoQ?X6bTuqXw
z_+4b^8!T(3OHd-skljz!{JIyP6Y5IKdP_Pkcg^ZKhj5P_c#pk9W6wk7ULq5Pu8rtvO3uf}
zfnO8vC3(fkbYbF~g9~QJU!2P30@uqKr{EC2WB9^jrw`!*?7MYP*t)M=Caw)yozTf2
znN_6}6C_^jl*yB3Qbz=Wm%L^eIrM|oH!W%rO^7B(ak1sP8q=MfmO+tM-Ipw0e!{5m
zsh^b0bjum8#_USc)^f{AH7ovMRM}{=yRtAh=L>&o_kM$UZq8fZ?;Z#B4tyjxQ`;>K
zPXQHlOV?-t#eEnB`izqh*`+i^zfjnj{w!pHjQ}ez05>kdTQYLy$Q{PRAkFIUQa1-<
zeG^Ul6@*&|R+?-VQf6nTlumBAKPX+`pJH8L`uL8xpaJ;_7GKOzT-6A+eTiz~fCGrZ
z-5k1I5w6E>woZj9a05q&lr2F)M=dSIZ4{Wm}}k5%?2=bcpok4blPJPRZuH!fMUPiG1y5u{n3z
z`ji=NySESQe8fp%wF0qsBE->C!t9d^d=+ghz4mtLig
zjH%U|`F6q3%Jpm8&I!`Q$POHL@8W|$8To58s-s)b8U>5B;iKdg9x|
z&*+PZ1b{Y**MdAQ9>#g}>sTTIR$KC_9?KG}{I;KXRcj
zwp;~te8wHS%+nTKIoiR&Za0iz1hBD{WoKf$t&`4VQZ+^}>%Qh~_4u)ScYe!j7+Rmc
zBFpH>z0p2b<~GSFx6wibPFZ09S{%}cdX8DqXAUCrt=wWrdLYGw32c*d4LdJ5LG78+
zuOs#axgcYw??1bKkIu9EtcgN&`oEMFyUad<6-ny_1a6bs2fWzbnX?%nfoHV1-4T67
z@ecV(tFd(BOR|^qB;E$5x*%LXNAH7b%G5OSbh_naXs=AF3;XjuQ~m4i)zus_m~h$!
zm+4HGk26*!)MiC`L8QE}?DC8u3%(=Sd)C)NIck&zBopWRM%}qIKI^~7VmE-fB?p%D
zT>*+w-T|xzlLMjcm*a4Mrnxmct3ykqb9t($7O4RgsvyXbFi|tlJ;aLHu=0tt79k9J
z)QzkLNl3mfN%w7-%Qtq;SmpM8Z#RblpgVNwQSh|%sP1Ov`e@FcLe4Hp1~slAS|XNR
z!f3AFLS#sTktRLw{~ATCdy@|z%*XV9vOra-@$JeC$p3xVSfGU=o1Q9wDc8s~d435-
zV~A}n#J0TN2t$d54(aXPq^Y9IA2j1J8YxR5do~;%d-A;8q%cAqy2P;#b|m*Rt&>sE
z2O=F8c*)Ae{y9Ngpp%8OEdnr?30Doo~rD#@F^rQ;8JwDvm{w9tn(xwPKkRYG@48Asoh?>5FET
z`xefk_O?9&XTwe|akEp9|{=pRz=U>z$sKfPp
zo8*_bH~eZibf`AOeaNi&Cjd2T6YrtD^Jla@r09hmD}_P>Wy|ND<|jGk+OFI=UqPl(
zSKQ!>%`3GOG=8F$X$_<BQpS9+c1LM(zpo(jgO!D7QMBH}?(p_w
z&z-NdGh(#LS!v&rNruFri3s!egt=(No}v!+I7qpbwv)3^u*ms$u~&4rqOI*dy!VcK
z$z7Q$c>L|OrD_rTM49NCm~El$eqLNrwrASGmREB{Q{_AF^o=sjroXOVOJH7av>#mo
z<8C@(pfO(O*G&61;Q6&cX{-1)OX5D)-BjcS1msCq+pUaQ>afU(&7pk=#pQojz{#uy
zZRUpb^2v-!?J`>CcgI;<7lM5;solxe<&PqU?VI8qF|zi*QkU)G%p^)g|6IHDNsAhT
zcECl9o(Ym=@#j|$f2J8!*Ti{qF2J>5D?qdLp6S-LnRFo$nw#@p6=5BU;-hEQY>Vro
z-zRlZu=e?H843*xkZSRPD<1-5!=~V)g+94`yyle3qW`Ny<=x_&mqAkDs?_}8rrGGd0Ed2L4e|ZVq(Mu3MVJQ?9*(3MahaxvI
zp7%n@F(I@S+K-aj93LcynG?F|N<{*qr97(wv>0tgN@!Enx1>
zPbjOE6Tb4&nK4;B_v|IXHxk8~yO}j}0&8B-q3J?$9Zheq)}#G*@S!Jng?)Lx4&Ip&
zRv9RuwRRWLIMO@6jOWI3yovCav_o925J>Nh>_7ha`_enU$iwpJZM+3?!{1QhNlD4H
zmZvB@Wfp;hu%FWoJQgdsJ*bgpuyva6Hh#XkniZ*Jt($O!rZLuSAWnA4>!`jM33@@{
zlgVP)<$j}mTv=8yGI;Q}&uFtRUOs>N$q-9f_)X0`Tj+w&mL0K1ha7{C31;dBv8CfD
zBT?2x&X3I2LD%h*O&`64zpC@Fn002Uu`*MWl&gML-dW9v)Vsj*CHw6TMtI!-o|Lp!
zPM+Hx8knEs$!uvX<-h6#s@CYqVj}m<@AoW-a}L1y5SYoRN+{kMH^eroRRqm5w`fz?
z<{_c2O<=V8cUW{Etw?CgXcIX|;^YMX)7Rvgg=^tO-Rgx4UVsVywDflz?AtE>i&x&n
z#1m$>I&$Bg8S(O
zU>;NYsoVyJTe)1r)6=>PGvhQTOq`_%HbiV}w!`Do@3zlbC{+Biu)?YsU7xX4bC~8^
zei!Gqe|2981B}uWA&1Ye
zNrGr_xHU{%hnDchbu7J~jhc!=G3^!A6?Q6@?nfrSW+D#y9=@$<5VbVfubdv5w@hdi
z{|q}ZM7>JeZx4U<&`^0ROy-RJpW#8$GfkJ0j8yG8!&@Ry=kOI#
z!App-pyf!a;CN6oG68>B0_8ZAuUB|?Cz^CZo763PQQ2EixE}R0i8&%Hd1%OW%ozVw^=$=sXbl8
z)m`CwTd75UHuQWdvvc)k9KHb&h~VS=^=lN3zm@4!I4-VU>t6z<50ogLW-m(0T0ZHvP*HDypLXHY?n+M?w8
zDrQVVP3K?Q7aT=go&ubgZ0;QZ7z_uV+;yc4BYG4QguSvZ;>`{2X$FRpW^Dg#WbWnu
zs!CgN2fNl;ysTOA-EPd}6KUHmIpLUg)_e2(qfL&4-VpAhFK-xZr
zz;HG|$%)~}I$)VlBG>^|*RJ97Yyi7f7PSS&HW>4tS?ZFwDbNlIE!0(f=?ps0hgb81
zlEPQdFV!ZTaaur$UjO!y8vlQPy;UGl6<<)b0AjJits@_|iXVWsRE$)TpWkgz73m9P
zi}AlHJA36BIFa%f1&mUGRRNu|Z~{fFYI5PZqNL^JS|(PtU_o6;-Md{F^FP;be@KE&
z4P;N=;(M~?Y^9kz0gXK4>o8q)3{fInOIYA&!?BZ_K;vcjT0*-c|FphSqu`#iM8qib
zyn(kg$o_uU)D4N_W6deZs|Y5hj@{6fM})}8-6f6T?b>vD`YysbDs6ubV~Vx>J)*g9
zp&1H>UA7(A>sfj1U#)1HsnLC#!}Cl}b(Q8IJ_=BleY
zPo9(ti-7s&TkG|Bb%+`y*U2-}LY#)3VuCwq+n#jPSKpL5ZX3UFf6KijB3EEe_%*
z!uosUM3*U9WqxtxWrpv+_DgNK4kK({Bwo+>6aQJFI;`HS@H~;*93$G~HGFhTQK3vb
zA%7q4A6mA61TaBw=VJx~%?Xx&8^Y0e?lG&q^^BL?A6;A_6hls`-S4mEs2D#qu5KNc
z;?{lLRqsW+njO6bV(0GqAF1y9|k?Fk#keo*RlB-8*)20TBK;e&EK*t*KU7h%cs-~9L*F2g$rCm&Gw6{Ig!4t))
z@c209cXa7^)Ki)(StPlpkWsWQx<~@HRW>I`KWgLXz^mFrw9fXiyG&
zHgS?a(9S8w(6oIA;rChMV?~Mh&7S+*r0!3BV<$bWOspGOY|BIsGK{uB$Ai8pSkgTE
zqp8M)I!DY~{`BTtnE#_|*c}?>dLjp!duuC5)S;ADwX3=-IKXQSk`0~~8~iQCB|t0R
z@gQ!GcF}Dl3(pkKWgK4{#*
z<_b^Pm{HIFxZinKl7yjdLvCb2)V5HW5tV{uTCJH+q`vUi9jO5
zH+$buJ44Vmt)NBQ{e4l5KD0;-w2S|S#^=MqCpz%`t~6szqt0EFwEmn$M&ixS@iRBW
z4WDTAQjV%h%{1cE&54))q_Sr(NR5eX=QP3TTq_mgTjof=Bl>tRwx
zpf|1oIuoaU23Jxd^A4iFfU3_Z^66UWXdNY;NkB?-X+x1yM{l}fcUw$Mf7&Kh%qK6N
zwZFc9MOxAQ)&u(WHstaW}eZ^%;s=
zz4Y~)vq*tt1N7yVYmR)p@2gMk!hbjgOO0^Ob*|WTVN@_02(a=;eMebyu|?Tz;Zv
zTx$ACmakOoaZ96RQs<0?2lm45-|LlX_
z2JDqoqz&N?pjZ`GTDw~Yo$p%&9FV!ED*KdBvmOdVg%Y_@=@)LF!cWjRuSX{nfnk^b
zHx6h1DK|hY%|yQa|Kaxx1o5Nbr>#c23ZoX9Vq(byFjaw6^Y4brHd;@qt_2GhR
zy(}wMjH|3CIU14>xrW|a=XfAuT0Q&!Ri<@`BGE9t2yt
zzEI0^GP_smRzbFQ@eaK2Qc=eg*)+riaX8YLxz`ClAl(^DdH=)x*s6A*QfjvAKbRO16
z>L-m51CB+F2PsxXXCz|b*$tWnWMmMx(icRtQtO<^r07AMmWb3Tgxe4?T)8bkypmvh
zUQW90|0L$=J5&Q)xp}%PS?*Qh^ImglSYQb;;zn8R}V(+ycnSS^2M}Gj!A~ZotIYDp7QDC<6*-XKSa+|8m
zjny~6kQdR#bvBf~yoO8ca|aW)OYtQ`4Jpi{lf%&dTE1oqWn$O2;AjuY<9yffHAVJT#beQskA4~?8vt?!#zWPWFAmb+cRwBI@_^R`0}8*CNphP*
zjP*@<`PAU+*R^js#7n;$@X*r&2C_NASDJQq$!56nEwr#25Mtrs1_rNBRu=5;qgM+<
zq4U{L9>lq}<|t$lc!Hl`u*DJaq&)
z|HLGd&o(L#9-^}mMlIukZeZ7w0Nh?nW|r4oXJ@{wNbyyNqo!H1)hQ6sG8tS%t{Bxs
z5TyPTx-D>9a*0Zv36*dLu~(CGhO~6IIWN!6Ok}n%fIA)4ekots(&EHfmF81M`B~nb
ze=C=gZx-&rWOaH?N)57uwRPk+MtIdlW%N-sr{1->S|UXWyr{QZ{y#1}(i2#w4;IpS
z9CpivvGw{jS*k^)-yw!S_(cq?(359M8wZj_i-KEaGo!sel)CkX75?g;$RMCBVne2P
z!M89I*(JHoS8HAvZW&piQ%ueV+I?4e<{KJhB@`!&MG@~
zO&VKA)YU8$nd1q782kzPWG^iHHm?+8d&
zX$piI2tD*FARR&v(py3e5c0eGoS8Xio&P;+-TPu@&AgbmS$mQ1PQrek=kt6@;ZzRv
zaV9{jiGQB!LQe7zNl+_USHI27*OkZX5~WP{heXud{~_T$7!K_j>h8|hWP==E;LGy0=eo)m
zBh8+Bb(!&6EbMU9e5`eSYQLEbyRo7Zhe=?vfLYCKix#1!x*9+KiP0VnY+LlUiO=!rs}=E{9ccB0Ewc&}13YDp|opqZ^
zqra2c9^MNFV3?>Ihlh35Y;{%{!f9x?FMtuKs)#6LrAZ0^~ldzcU0PcmL}xCE(vS
zk`XQ~V9Pxl|B%G%UDbXjp3S4q9}v5{&Jq^?A?Z635FCfC=xlNx?E$z)C~F?^nHu5o
z!VO|zg%Z{pAY1i5BBB8%fd4*-kO;HF`1c;b{`#ge{4a0t3k+fjYdI4osw-8wDy*KN
z4&?`;kC*=CKmgF@{rn%2Jn#tN{`@~AxB;cQO4QvMHLNci9Q5EJ&wM9*3Qr_+A2QxX2=pfjRchG8zSwmplI
zSHVE6?9{HIrV{w@e>(nZv-VG)dmVm6
zc+mpdC)fqyPmfApZ>1eB$4IK%2r(Lp4Aj5)Xmni}Q{Sq#f2}kScqrcUMv}k=ebo=2sjlw!m}hjh4A|M?|I`SZwnlsC{`C
zYUao!^1I@PQXeBJo7}}A3-$NNB5Esc_*4-j8(jdh5fZ16?H4N`BEk)p^B$h%rxEzl
zPYPiUC=IAL;Igm{gAG+AA03^r42lJ=7H1tE66@r9b@2AT`n@fGT3F1!1cW{vDvBuI
z)Ax2!%*W?t$xmZqb4qaRzi(+GZ#>W^P~ffovE?0yf(>PyBMuaWd0+K1pPowY+B~D-
zV|t|c>h^d4%;PKFcUXf|-}`}rUGNX+q_KjDG;m&3yG&+c+^{W~V+NsR;5HRJ`_Y22
zpLZ8DLN-2$dSfQwExotN=eRI|od6SMzs))%88|UftJz9Tu+R3v(>WdHTpFKW9;Tu^
zt<%L7efk4cP}SA5RzSWf>NUa}v3#o#{9`NAX=%&dIEIo^TWvV}g$?)_hY_KYMqszy
zNR0I6Di6+3@9L|l?Zh&w4kz5DU-(tE66_D##oH=_|90Pb$VBNJK4WQOXPM~ccG+^K
z0;1mGke`s34-mubXw6ZowI1;|r1a-LbRrYZycLB6
zTwD>&*c~o2V_o?oj4_AQ7q$Buv&MDuHgTN}N#t!0CIF-04=2g`)8^^LM=UTqYiMc0
zA_3L3>8qHJwK@P{r!pYkzp_jbxO+QiV_S#)*Yq*Y-K3u)%zUG7u+h+RwsS%=nE;`yF-_zH|nCvbTLsA>WMNK%wJBMe*>4zk>)
z#MuZlYp)Qwl=@f%HpG{
zd)-HRNh{5v*vB^a1@6~-E{)vhB#Oap1VO)AAX1hsYlQT9+%GNBE>}Qk_HVUAukrqJUjGYaXow+)-gaJTT|=JT?7y*fY@d-L;w>VcpJu$_naJZrt(#Hi4QP)*;Z$v8gL2uO*AK
z+iUeR1u5~lP(ngFVrfxW;-5s3TJ*B*6aW?=-s|
zNZohoudg%XI(%zh&6)ApoQL}X`2>(4dc4zx0=D3Y&$U5HE}WUbQ&OCF*X2keC9Gc|l-PQpbX?-J
zy`3BS4UM#ff&FZ&?mByf$eC~-`E0p2=`wH2l**fBBAO~Yg;S2h;
zMvcHeKrGxg|NkDRA+J{;T~T^UerRNEgr(ewklz=%?7pqLVNqp97NdCIsSz1faUd)r
ziKG4-^}rYzZuTlt?FMIiUJpukm4IT39bC~R(;n7zM8J_k=^*KZg8tICg~kJ=)yVCL
z0IEhcZ8y?HnIw;h!KL~h7M{I19?rh$XnZe`!u^NoyiZ7vC`G`FKlx(^p2CVF7LDT`
z=K!`JCt(<>-4c!#3*fclu>Cm3iNl2zHq+q_o``%Y{}870PGGq+`Z^EKR%jW%N&l~8F*)Y@aSs3A`4ed
zEN=jm2_Zjy?8v4Jpb@Bh-@sZKLI@TAKnX?BdTlQS(r(+B)yk~%<>%9RcG@XIS#@N#
z^Vkib9^2wLt|Xy%eD3wW^@&~_Sl{R}K#~{r$dj+lFB<=v&}gB2rj!>DI_*k*ZCEPY0aV*w?c)L=CKVJHs!Ec+$`kkk+0EY0*D)4qsx3fMrNGTpz
zYAHtrqL$CL2BH4ZIyrNn&&J1f@zQ%!SBj3GW_6{wk^I}$D`Ty>Pv
zR^&?AlJI$JJf%X+O`DdG&DSn`O8c91#oE&$*w*R7`c(g_2o7@s9xw+OF!VNlwVgwI
zH%)viNN_yA8l|eDc8AnWi?wHvE3u!OYX5Dxfu0OOT(nah4Sc#c9mLC1z))+4WWWQI
zp7GS%>rHoUbs=C2dMI3QSAV5_7z|zBXb0U1xQ?~*fpyfSd&$1iZI$yqq0Cz1UwcOp
zCm%l$toQu+i}I(}8+ji+(2ve1)r~gi`dPM{VCBv(rAE
z$JA!zUzW|eU3-v9HPfRl1>WZOcW_gx@$NdHBbedeU)5sFZ%RHBL2C$|Y9zTkYlyYZ
z@4t<`6Lcy=bt8C7N@rXX`3G@(w`@hrUrU|zNmnQ(i@?e|f0CPK-}foDjFT1~`x}$|
zO?^OPA=r`kYMKjM87|CfWQwRc9B15EOXMR{kezNaYlvT%@qEu?m}2a+YSuIkDU@AU
zcKo3RsWe@tyS94v{@gzD_;73FPSx1YoMIOh&izHgkgv(2{iuz8`IoC`UC6=4Oc(z0
zQdIX+huAO8LD^u=HT|Y)(j&*}H@Fdc`ng0p=U2Ng+uN578XDZlLsP2T#->0Z9SSJX
z%dsY8amN)5=jj&o+MsS(`vmyf1ZQUq&!8`c-9YY=vIi>Ru2Fo`L$%Mj?{^%dy3!kb
z(`sQvM_#BOO?1Euq+551`DUYOVDf`u7f-=K@O_=J=ePMAW2;6e?tgL(@o_&*$HF4z
z?aMaloTeHLO7nL%I<=rbM;L0hy+g(pcMD6>7o@owW4;Z0y9TFR@af(kZy$}jh1N5G
z!otOxjvRZ45Dpc;RCcw;!i6xwQX<8H`$ok~@hRUlkm9B8lZ8=jaQwFEgX4_pE-<)I
zN-5i+1#J)VxSKDW$F0wu8*K6Dg<06@>%7gY+(|{?Hb@IHc?A*OXj=ITXVMCoML}{DJ;%Ud42xNmKQBysv6v*yA
ztx)bqq}wD7@*WK6?nx8RE?C~_si@!lZ(?Kr%WEGw>4PXoa5u~vQK9lVDOje?d)htf^{rW!rx^dJ*fSye
zzvb(P)+99nb$zopXAGIVFS$XEqj;wcUBJ|*R*A+jP1?$T?iO8!P@(V2Ase>Uk9n>MBMCnyml|G=gh)2jdl~o
zethNLaS=%HGpJAZ`@FW8D_IvV-5i3M9=_KzXCoE>zfr!Hl$cy^UC#oM%HIMOTn6TT
zKsPr1yM03O+V=Wt$LYuIO!K9PW33NJX=L5ldAf{qSHBmPn*j5jbpduG?wmFoDt+wP
zZtqXDj~-l#-EV6D%Knd4^tvE7U0{MnW4uplitp9#*L3&m^vt)IC_~|vm-<^wkPpe5
ztz0#krs1^{`I&-l9!yM1wjjipj4!3yhqpcrkO_6`8Hd*9p{>w^?Xux0%M~T29oe8H
zPj^TVSNPNbSnPVZBZpl7a$p(F0Eq~!QCysFwdCY7_a73$t3_oy^gaTB?n8@;%~w#j
z`}6TNT`Xlsgv=HAt2by0Gwaie8s
z_q>#Oc5AeWa3dkz!*JmqR|MmI6VW}nZ`-Y;Qzx@!|?XN06+L#bmx%3`C)OzjWmd8j#@>zWg`Hkfg1-|g>IM68mHKMm6YL2ZJ!HG7*V6~4|&ZkvnIGUpr~e^@0h
zT$SE0j*;ejuaa00n^mdfNnN$9OPv)DW98$DM54oAq
z{I@N|ADw$wL$w#Em%4NK1~IW5w15d%sjJoWK!@l&2@P%f)_UrlcKoDO*T3!G$T*2|bZ^;38`_`8N}QaNAb2i8cu{%^OB#q?=P
ztR5Ot3YzE((C*uU*|{Zi?Lc{QD4Y9;D=DnSm|5In7C*w87>IeE!=m15m-0-MBWU1s
zQMP70ea~QuiIIbPLjDnw{D!VP$kEi+Sl^hf@0AtvE#?@ROt)E{TsPRv!2ao&y=;1f
z5MO=BiA7JZnggQNH%nU}gi}IMi(2mNSKeaa_jC3u!!Fo;j|6Ih=AQt5Zb@`23hL_5
zqQ;{sy!VZ=)lsG~rzwY?l&UM)YfsHqX~o^gPupLsIzkWG7-LY`GGW;o;_$b|2*N@C
z74g0Di9HCKTCMtc$@C1hK1XoT9OY?*oWYV-r#LHrSNTMAqEm@XIR6}}U-Iej
z3+Zwd^D~~KiE#oquDCN-qV@=0D`=E-^7y#aS{_$CR}@u;OgZ9w!jaFGghn0*dJT3-
z=LUXW12_%Q%))ENZ=P(67sQTF3VQsz>J+w|w)y{23n72Z2+MX|?jt}ja$vB?YOF7*
zcO7Yz@1~)+3;t6&(Ck{U&E1oUNZQH_!|6&w*%CXWyTgL`YoYYS25T-N05nO(2qQR^kEc=Fr~8t57pF4E{K(
z?1Q?fhXh70#=kU!JC7&hVf|+`6Gfqcd9mx8-m&F*9j;bg%_3o~+;NoDd3n)T%gLm$
z==fXt;haZSW{$OBcwJ2lbU$4b<1H362cswl0$aUkB2hH_SlhK&$<$ILy1|ZPNOtAb`Dm#XS~FvvDzO|
zcR*IYneSZPe$Uyt8CBjwHUox&qc8`Abkf9S@)evsQJ=5t+HfsC5Z|oB$zNHCD4Bcc~KLS
zo(19sE9Ig*37>ffMc$XkTo6&qpXv3~mEXy0VBiw%XlsjY^yjn;hYWzYJxE7&U03M&
zCOJXi>LZAQc+-UVN0z!Sro>E0_JzdAllYt9lt*T-M*C)IKl4Vl4Sp2AwQN#*a<2u!
ziPaWr_x5(uJDAF5n&lYX@Fg0_t6N>y
zz=g)}#=F5XE524_%+|?){ctpU#W%q@eYrw$Q*|<)UnD^cD~G^G5VZoU>Hh8n_NWWe
zzl)8lCT(j!Qt+Rypa1usox%gn>#t@yH6{SVNb=X>5kTFJHe0Jnc
z4GkEvw|lPC-w>SG2zJYGmH_3vJ0^o|1#>HCwNL7nx5AB>U(~!8_xfQ@;hXU+3FEcH+
zgY+{<6*?XL&UnUj*bSvmzCIZF`$)CmCy(!^y*3_TMH3EN{tRv1i5pa68O#=mFA5gR#eEx2M@3?$lg(YT{ZUfS+M%=gy
zU&y+tdRLhX7l%f=hiw%r_Y<>aKaqTwy<-p@^_GkYQU^WotC`#^_uIj2d=~P!%xY-X
zUD<>`I44&jd~GG>pleE&l&@m{-%-6nY{Ck>Iy2Zk95l>}Jfctf*Mg7(Uu
ziKt@lyRi!Emg<%S9%!_~Y|`|D*k9bC>Z(Kkt5L-L(1#7xwSrNq{V17V6qq$|@AmFRt|wvR0q8sOm~7=GdR~V_sbd
z{IVT{*biMD;V|*>8$h4R?ZinsRa3^qJk1?re6!VhPbt@%o7(LfsGHpEY1R<7fT1z
z69Gf0ok8NYD9cNc?H$HEhLOnQS9Npjt)&d{QIa5NxL`$XZ`E2;#+Y4d-cXwAmp-;^
z?tqg?RJ%bM>rc+NYJhQ~06t{>o+GiA$-1!B`!wz8OzSfWL+G=T3(h@u%Tgy3>evgW
zD9Ir;)5&s4V~C4oaF%96I9e+iNyApbIYjTDKIkjs8|~*J$P^0fR`ytXIH{YJF~Nm9
zQ;donb(bDVW}W1@+q3ZQF8wahl)Hsvy@c{tGz%mbI
zIir-QR`E%m-!t}KGhS#<91Y%2aBa|VE{AB|>YIU$$=H+aud@AhwYYheeKK-uVepqW
zMwG^>acgWig<)+Zyj30ZDoVI#)D`70vnLQm|9b4Yd}VYk)Z_{-udp%_hO`hsAzG`z
ztQA$}TQY`TjAv;nfxq@#x%=Jf23nonsEI+HRh3<_h8p&`6rCn~Oo5N-Zey5VIXu4~
zZcW>4;L6>V#p~e(5{u1y^kU$Zi}werf?BT~qBhZxT%lr|0C;e&$Una1TflppA#!!;
z(1W%Le`SlR?C&I7nwHj!Y&3<;h5h6ZPd@^Z0
z!D<%zK796pvMs&X%TrgEw{pXlj=|6;)Z-G)y@Mt}0#}8{qU2huU(!a5>S5Qm^qtPM
zNFTuvbWdZGdm-u9{wlA9QzLF=iskC?L(vkQ2N>ve$2YuJ^GkO>ByZ>@-=FA)uspY4
zcqSz6@?PNEE#B1njw(tGK@ULa3hYAm4baQSz-GJ@b_t5=@&TPbj_G7k&2VbvPSz{z
z&iB=vdZ0po>W&_Cmjt68xqQwhiR-l{gJn0}*#DyU-m4Qn%!%P_3uMJa0EXu~7Yn(m
zC3ASYsl%s2(BsYh^pQ+0L#;6TzPQ!PXC$Bb&$1bM6|FIOGx`viHYH7r;)o|z+F{3%
zbwf1Q=tzlrhi=V6r-UG1(ZF?WW@?Hmp)%_V1AH*NH#F46
z1+1l}cxO1bg{Unl=X8|}rD*u3dZkoFttQNd(6DVzF(z+|8OJD*ZFAfchB|a%wjhSX
zs>x~}?wZ!o&JL3M29dh}SmLR4%T$_wDT>x1s>EEydqX%cqB%#ZCgDg!I?kQ`
zt_)w#udbdu{S1UE{@l{CE(3B$GD;n%FADs+3;*78ta@pK{C&}U
z^g#b7JI6m*O}b|%6(J}p3|We#W8N*-_vwr;Z6If6W@a$?d3a1j{g!P2+-rf(Fa(I&V|ei2N$&rz*Z%K!G;O{-
zHO<-uTq2R3zixYxuV{-!stENmx_aD54lFIj>c$-}MOv^&yd5i-zjV~lr$|j^vS4{e
ze;8jJQeZ=CW}I-j0K#b<+1r^Cx3maige16%Z{8m7rKyk1>AR{?P`9CMa1)Mqw0aE4
z6nHEuDn8y9FN_uV!@YRp)$tWLWxFCD?zG0T0M?-lSI*Y}bDm1)TBu`E3Fp>JJVVrN
z(T~m~t};PQ!8y7&i8C;Y)(1eorSe!17hYtet1&z~v&@8c3NmiUSOH=9le#+qlli#T;RJu_-r6C149+E#n_EefBs%ZXjGM9Kof$
zX#R7eL~9P_pqxCOyVTNBP;}sGnCV#wI1kkkqc{D!YuVnWkQFqCqO_mhEfWraEo(*D
z_}jFq;)G)*wm?pG;232|nnzzGHyh%l_btoXb9Za4z^Z#!hSbesba{=;
zO-L$gNH&H~DxeMS?14>dSbeW@d2q+;OWQ>s(7?1x?PGlz|-qyYD{CCC(`B46#+
zS=K&@_BwT;JQoe}_&<8=2(Gk;k1y|7I(F;)Q}bBVBbk;3%^z_*b{W@Td^LFer86e
zsH^DEY5gr=m1H^_Z%?FInmN|
z#GcExx!O4ynE1)4KhVQpK{u_Wmp?dNkT(ZoqF&&3jJw9>b7q^@cgLXm07~^W-Tq
zw>g3!i}RqN+2ZcZeNs6tg`zP5bgJ&2D_xB>GKo7Irt$tUp1IPg^6R!X#@6mFIksxg
z=n25joD`nbjxNeBU2S5`;kqz=EdSn_$P{He0njxFFJTzUYae!=#J35re;3ed6pX|1
zSc%qX%CGKAFVz*dH!TQuGyNf$;O&LegC{w=yvZ>!j4_?tyYH!2$z5HTgGu@fdF~2w
zuAugC*iy``jFl~Z9P+cg!cU*pGyR%Bl0$~()gfmVrmX#No6IpK$*jn)ZRRElOWcp2
zZkaCtCU5_c99_vrWpD6`xYX&cAs3+OzYhath~yH54r%FwoKee@LDL0Gj;hn9qeGKn
zn-6kF)QmCF7^Y-7O3JJlw_ifgXRiDil#eR%TW`yQJJSDO&(a$^VZAQ#AjF!X#+-_`TV>F+*HT_
zJ9uNhTd*oXK%TZ=plT&w^@C=JQyTK}JwX&Z-ChccL??75Tyq4}0?-gvD7_gzWK5W4
zSC!h!msZfk==N@I3
zLFEV(Qn594@kLCBEQ=2CPbit;ak=*CDUW^2+ZaQX7HFe{IyvxE+TllZ;(r@U@bBi9
z6%2&iII<{$BZjp<;N_2ze0(%dmA@mxH)z4$E}%-d*-**xutR$Gege19nA^}TWw1P6dw+RsW?R9svhIGv@4Qe43Lm2iK
z+hZfUqvj*LVN(yeV*A$Vjs9vk_|oh*@Ki}6`a552dT_B}MuDinBai408
zuw{y)LjFs`jbEx{?%4)l$of(nN(lim>hYAFKb+hg+?hhi&`})G#IEDiLA(37xhhGsx@HduaA{CkN7W+%Da5Uj?Ps*>>(L#7@7Oz}JWA^-z
z1rfSeq2NzR%(K=XhK`_I8CcXQkU&O@N4=c%fP=b(uaazq3)0SHMtEdmai%YL9w$cC
z3MZ1PP&}!pL{Kb^w~EbkvhB#K7Ou2tY1WQ