From 51fa3b9e7a9a3c6aafbb58860db4023173c619e8 Mon Sep 17 00:00:00 2001 From: zgojcic Date: Sun, 14 Jun 2020 03:33:49 +0200 Subject: [PATCH] Initial commit --- LICENSE | 21 + README.md | 185 +++ Readme.md | 2 - configs/pairwise_registration/OANet.yaml | 69 ++ figures/LM3DPCR.jpg | Bin 0 -> 557502 bytes lib/checkpoints.py | 127 ++ lib/config.py | 48 + lib/data.py | 390 ++++++ lib/descriptor/__init__.py | 6 + lib/descriptor/common.py | 10 + lib/descriptor/fcgf.py | 284 +++++ lib/descriptor/residual_block.py | 77 ++ lib/filtering/__init__.py | 6 + lib/filtering/oanet.py | 265 +++++ lib/layers.py | 202 ++++ lib/logger.py | 81 ++ lib/loss.py | 330 ++++++ lib/pairwise/__init__.py | 141 +++ .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3455 bytes .../__pycache__/config.cpython-36.pyc | Bin 0 -> 2079 bytes .../__pycache__/training.cpython-36.pyc | Bin 0 -> 5344 bytes lib/pairwise/config.py | 80 ++ lib/pairwise/training.py | 226 ++++ lib/utils.py | 1041 +++++++++++++++++ requirements.txt | 8 + scripts/benchmark_pairwise_registration.py | 430 +++++++ scripts/download_3DMatch_eval.sh | 56 + scripts/download_3DMatch_train.sh | 56 + scripts/download_pretrained_models.sh | 6 + scripts/download_redwood_eval.sh | 56 + scripts/extract_data.py | 376 ++++++ scripts/utils.py | 199 ++++ train.py | 158 +++ 33 files changed, 4934 insertions(+), 2 deletions(-) create mode 100644 LICENSE create mode 100644 README.md delete mode 100644 Readme.md create mode 100644 configs/pairwise_registration/OANet.yaml create mode 100644 figures/LM3DPCR.jpg create mode 100644 lib/checkpoints.py create mode 100644 lib/config.py create mode 100644 lib/data.py create mode 100644 lib/descriptor/__init__.py create mode 100644 lib/descriptor/common.py create mode 100644 lib/descriptor/fcgf.py create mode 100644 lib/descriptor/residual_block.py create mode 100644 lib/filtering/__init__.py create mode 100644 lib/filtering/oanet.py create mode 100644 lib/layers.py create mode 100644 lib/logger.py create mode 100644 lib/loss.py create mode 100644 lib/pairwise/__init__.py create mode 100644 lib/pairwise/__pycache__/__init__.cpython-36.pyc create mode 100644 lib/pairwise/__pycache__/config.cpython-36.pyc create mode 100644 lib/pairwise/__pycache__/training.cpython-36.pyc create mode 100644 lib/pairwise/config.py create mode 100644 lib/pairwise/training.py create mode 100644 lib/utils.py create mode 100644 requirements.txt create mode 100644 scripts/benchmark_pairwise_registration.py create mode 100644 scripts/download_3DMatch_eval.sh create mode 100644 scripts/download_3DMatch_train.sh create mode 100644 scripts/download_pretrained_models.sh create mode 100644 scripts/download_redwood_eval.sh create mode 100644 scripts/extract_data.py create mode 100644 scripts/utils.py create mode 100644 train.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5792c9f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 zgojcic + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..149d3ff --- /dev/null +++ b/README.md @@ -0,0 +1,185 @@ +# Learning Multiview 3D Point Cloud Registration repository +This repository provides code and data to train and evaluate the LMPCR, the first end-to-end algorithm for multiview registration of raw point clouds in a globally consistent manner. It represents the official implementation of the paper: + +### [Learning Multiview 3D Point Cloud Registration (CVPR 2020).](https://arxiv.org/pdf/2001.05119.pdf) +\*[Zan Gojcic](https://www.ethz.ch/content/specialinterest/baug/institute-igp/geosensors-and-engineering-geodesy/en/people/scientific-assistance/zan-gojcic.html),\* [Caifa Zhou](https://ch.linkedin.com/in/caifa-zhou-7a461510b), [Jan D. Wegner](http://www.prs.igp.ethz.ch/content/specialinterest/baug/institute-igp/photogrammetry-and-remote-sensing/en/group/people/person-detail.html?persid=186562), [Leonidas J. Guibas](https://geometry.stanford.edu/member/guibas/), [Tolga Birdal](http://tbirdal.me/)\ +|[EcoVision Lab ETH Zurich](https://prs.igp.ethz.ch/ecovision.html) | [Guibas Lab Stanford University](https://geometry.stanford.edu/index.html)|\ +\* Equal contribution + +We present a novel, end-to-end learnable, multiview 3D point cloud registration algorithm. Registration of multiple scans typically follows a two-stage pipeline: the initial pairwise alignment and the globally consistent refinement. The former is often ambiguous due to the low overlap of +neighboring point clouds, symmetries and repetitive scene parts. Therefore, the latter global refinement aims at establishing the cyclic consistency across multiple scans and helps in resolving the ambiguous cases. In this paper we propose, to the best of our knowledge, the first end-to-end algorithm for joint learning of both parts of this two-stage problem. Experimental evaluation on well accepted benchmark datasets shows that our approach outperforms the state-of-the-art by a significant margin, while being end-to-end trainable and computationally less costly. Moreover, we present detailed analysis and an ablation study that validate +the novel components of our approach. + +![LM3DPCR](figures/LM3DPCR.jpg?raw=true) + +### Citation + +If you find this code useful for your work or use it in your project, please consider citing: + +```shell +@inproceedings{gojcic2020LearningMultiview, + title={Learning Multiview 3D Point Cloud Registration}, + author={Gojcic, Zan and Zhou, Caifa and Wegner, Jan D and Guibas, Leonidas J and Birdal, Tolga}, + booktitle={International conference on computer vision and pattern recognition (CVPR)}, + year={2020} +} +``` + +### Contact +If you have any questions or find any bugs, please let us know: Zan Gojcic {firstname.lastname@geod.baug.ethz.ch} + +## Current state of the repository +Currently the repository contains only part of the code connected to the above mentioned publication and will be consistently updated in the course of the following days. The whole code will be available the following weeks. + +**NOTE**: The published model is not the same as the model used in the CVPR paper. The results can therefore slightly differ from the ones in the paper. The models will be updated in the following days (with the fully converged ones). + +## Instructions +The code was tested on Ubuntu 18.04 with Python 3.6, pytorch 1.5, CUDA 10.1.243, and GCC 7. + +### Requirements +After cloning this repository, you can start by creating a virtual environment and installing the requirements by running: + +```bash +conda create --name lmpr python=3.6 +source activate lmpr +conda config --append channels conda-forge +conda install --file requirements.txt +conda install -c open3d-admin open3d=0.9.0.0 +conda install -c intel scikit-learn +conda install pytorch torchvision cudatoolkit=10.1 -c pytorch +``` + +Our network uses [FCGF](https://github.com/chrischoy/FCGF) feature descriptor which is based on the [MinkowskiEnginge](https://github.com/StanfordVL/MinkowskiEngine) library for sparse tensors. In order to install Minkowski Engine run: + +```bash +source activate lmpr +git clone https://github.com/StanfordVL/MinkowskiEngine.git +cd MinkowskiEngine +conda install numpy mkl-include +export CXX=g++-7; python setup.py install +cd ../ +``` + +Finally, our network supports furthest point sampling, when sampling the interest points. To this end we require the [PointNet++](https://github.com/erikwijmans/Pointnet2_PyTorch/tree/master/pointnet2/models) library that can be installed as follows: + +```bash +source activate lmpr +git clone https://github.com/erikwijmans/Pointnet2_PyTorch.git +cd Pointnet2_PyTorch +pip install -r requirements.txt +cd ../ +``` + +## Pretrained models +We provide the pretrained models for [FCGF]((https://github.com/chrischoy/FCGF)) feature descriptor, our pairwise registration block, and jointly trained pairwise registration model. They can be downloaded using: + + ```bash +bash scripts/download_pretrained_models.sh +``` + +## Datasets +### Pairwise registration +In order to train the pairwise registration model, you have to download the full [3DMatch](http://3dmatch.cs.princeton.edu/) dataset. To (pre)-train the registration blocks you can either download the preprocessed dataset (~160GB) using + +```bash +bash scripts/download_3DMatch_train.sh preprocessed +``` + +This dataset contains the pointwise correspondences established in the [FCGF](https://github.com/chrischoy/FCGF) feature space for all point cloud pairs of 3DMatch dataset. + +We also provide the raw 3DMatch data (~4.5GB) and a script to generate the preprocess training data `./scripts/extract_data.py` that can be used either with the raw 3DMatch data or your personal dataset. The raw dataset can be downloaded using + +```bash +bash scripts/download_3DMatch_train.sh raw +``` + +And then processed (extract FCGF feature descriptors, establish the correspondences, and save training data) using: + +```bash +source activate lmpr +python ./scripts/extract_data.py \ + --source_path ./data/train_data/ \ + --target_path ./data/train_data/ \ + --dataset 3d_match \ + --model ./pretrained/fcgf/model_best.pth \ + --voxel_size 0.025 \ + --n_correspondences 20000 \ + --inlier_threshold 0.05 \ + --extract_features \ + --extract_correspondences \ + --extract_precomputed_training_data \ + --with_cuda \ + +bash scripts/download_preprocessed_3DMatch.sh +``` +## Training +Current release supports only training the pairwise registration network. The repository will be further updated in the next weeks. In order to train the pairwise registration network from scratch using the precomputed data run +```bash +source activate lmpr +python train.py ./configs/pairwise_registration/OANet.yaml + +``` +The training parameters can be set in `./configs/pairwise_registration/OANet.yaml`. + +In order to fine tune the pairwise registration network in an end-to-end manner (including the FCGF block), the raw data has to be used. The code to sample the batches will be released in the next weeks. + +## Evaluation +We provide the scripts for the automatic evaluation of our method on the 3DMatch and Redwood dataset. The results for our method can differ slightly from the results in the CVPR paper as we have retrained the model. Due to the different implementation the results for RANSAC might also differ slightly from +the results of the [official evaluation script](https://github.com/andyzeng/3dmatch-toolbox/tree/master/evaluation/geometric-registration). + +### 3DMatch +To evaluate on 3DMatch you can either download the raw evaluation data (~450MB) using +```bash +bash scripts/download_3DMatch_eval.sh raw +``` +or the processed data together with the results for our method and RANSAC (~2.7GB) using +```bash +bash scripts/download_3DMatch_eval.sh preprocessed +``` + +If you download the raw data you first have to process it (extract features and correspondences) + +```bash +source activate lmpr +python ./scripts/extract_data.py \ + --source_path ./data/eval_data/ \ + --target_path ./data/eval_data/ \ + --dataset 3d_match \ + --model ./pretrained/fcgf/model_best.pth \ + --voxel_size 0.025 \ + --n_correspondences 5000 \ + --extract_features \ + --extract_correspondences \ + --with_cuda \ + +bash scripts/download_preprocessed_3DMatch.sh +``` + +Then you can run the pairwise registration evaluation using our RegBlock (with all points) as + +```bash +source activate lmpr +python ./scripts/benchmark_pairwise_registration.py \ + --source ./data/eval_data/3d_match/ \ + --dataset 3d_match \ + --method RegBlock \ + --model ./pretrained/RegBlock/model_best.pt \ + --only_gt_overlap \ +``` + +This script assumes that the correspondences were already estimated using `./scripts/extract_data.py` and only benchmarks the registration algorithms. To improve efficiency the registration parameters will only be computed for the ground truth overlapping pairs, when the flag `--only_gt_overlap` is set. This does not change the registration recall, which is used as the primary evaluation metric. In order to run the estimation on all n choose 2 pairs simply omit the `--only_gt_overlap` (results in ~10 times longer computation time on 3DMatch dataset) + + +### Redwood +To evaluate the generalization performance of our method on redwood you can again either download the raw evaluation data (~1.3GB) using +```bash +bash scripts/download_redwood_eval.sh raw +``` +or the processed data together with the results for our method and RANSAC (~2.9GB) using +```bash +bash scripts/download_redwood_eval.sh preprocessed +``` + +The rest of the evaluation follow the same procedure as for 3DMatch, you simply have to replace the dataset argument with `--dataset redwood` + +**NOTE**: Using the currently provided model the performance is slightly worse then reported in the paper. The model will be updated in the following days. \ No newline at end of file diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 313ec79..0000000 --- a/Readme.md +++ /dev/null @@ -1,2 +0,0 @@ -This repository will contain the source code and pretrained models from the paper [Learning multiview 3D point cloud registration](https://arxiv.org/abs/2001.05119). -Coming soon! diff --git a/configs/pairwise_registration/OANet.yaml b/configs/pairwise_registration/OANet.yaml new file mode 100644 index 0000000..9c1ade5 --- /dev/null +++ b/configs/pairwise_registration/OANet.yaml @@ -0,0 +1,69 @@ +method: + task: pairwise # Name of the task, one of [pairwise, multiview] + descriptor_module: null # Descriptor method to be used. If null precomputed correspondences are used for training. + filter_module: oanet # Filtering method to be used. + +misc: + run_mode: train # Mode to run the network in + net_depth: 12 # Number of layers + clusters: 500 # Number of clusters + iter_num: 1 # Number of iterations in the iterative network + net_channel: 128 # Number of channels in a layer + trainer: 'PairwiseTrainer' # Which class of trainer to use. Can be used if multiple different trainers are defined. + use_gpu: True # If GPU should be used or not + best_validation_metric: loss # Which validation metric to use. 0 Transformation loss, 1 Classification loss + log_dir: ./logs/pairwise_registration # Path to the folder where the models and logs will be saves + normalize_weights: True # If the inferred per point weights should be normalized to sum to 1 before SVD + trans_loss_margin: 0.1 # Value for clipping the transformation loss + inlier_weight_threshold: 0.5 # Threshold for determining the inlier/outlier class + +data: + dataset: Precomputed3DMatchExample + root: ./data/train_data/3d_match/ + dist_th: 0.05 # Distance threshold for ground truth labels + shuffle_examples: True # Shuffle training examples in the data loader + augment_data: True # If data should be augmented by being transformed with random transformation parameters + jitter: True # If jitter should be applied to input point clouds + use_mutuals: False # Use only mutual nearest neighbors or all correspondences. 0 do not use, 1 use as filter, 2 use as side info + max_num_points: 2000 #Number of keypoints to use per training example + +loss: + trans_loss_type: 3 # Type of transformation loss: 0 Eucl. distance to correspondence, 1 Fro. norm, 2 Eucl. distance to GT, 3 L1 distance to GT + loss_class: 1 # Weight of the classification loss + loss_trans: 0.2 # Weight of the transformation loss + loss_desc: 0.0 # Weight of the descriptor loss (only used if descriptor module is specified) + trans_loss_iter: 15000 # Iteration at which the transformation and confidence loss are added + inlier_threshold: 0.05 # GT inlier threshold (if gt inlier ratio is lower than this threshold the transformation loss will not be backpropagated) + +train: + batch_size: 8 # Training batch size + num_workers: 8 # Number of workers used for the data loader + max_epoch: 500 # Max number of training epochs + stat_interval: 5 # Interval at which the stats are printed out and saved for the tensorboard (if positive it denotes iteration if negative epochs) + chkpt_interval: 100 # Interval at which the model is saved (if positive it denotes iteration if negative epochs) + val_interval: 300 # Interval at which the validation is performed (if positive it denotes iteration if negative epochs) + model_selection_metric: loss # Metric used to determine best model on the validation dataset + model_selection_mode: minimize # Metric used to determine best model on the validation dataset + samp_type: rand # Sampler type on of [rand, fps] + corr_type: soft # Feature matching type on of [soft, hard, gumbel_soft] + st_grad_flag: True # If true and soft or gumbel_soft corr are selected, the gradients are propagated straight through (https://arxiv.org/abs/1308.3432) + compute_precision: True # Compute precision and recall of the per correspondence classification + +val: + batch_size: 8 # Validation batch size + num_workers: 1 # Number of workers for the validation data set + +test: + results_path: '' # Path to where to save the test results + batch_size: 8 # Test batch size + num_workers: 1 # Num of workers to use for the test data set + +optimizer: + alg: Adam # Which optimizer to use + learning_rate: 0.0001 # Initial learning rate + weight_decay: 0.0 # Weight decay weight + momentum: 0.9 #Momentum + +model: + init_from: null # Path to the pretrained model + init_file_name: model_best.pt # Pretrained model filename diff --git a/figures/LM3DPCR.jpg b/figures/LM3DPCR.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2eaa3c2c1e3164c9ac1b8b9fa6f0b81d4c4c1f2 GIT binary patch literal 557502 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

{5OB^A^E zkZF8h&|cKYIpC?Fy^)JJmmVL{DjxFO6xyS4BTsCCs!Y+%?W~f{mjA%l^XAcjpny^< zZk{#vAqNLk(#N=fGya8t>{%sd<(nA}%Be7q;KU!>m{$7Vj9U z1~A}fst1-i_N@AOOPlv>gb%eWPagdIp0PY|O~bdnd^rwWRsTwhel-~3hx99jul9`@ zt^ulhGhAt9P!Jn}^7@KJD*bvx3V)PAZ~;5#tT*=G0u#~|a}F-HpLtl5qRz9|`x4_8 zsQl~v$vHzG&H{7_WF=Rcs{ES>ApYN1k=p_5VUq+X7J=kDW(~Ur<%Q>V_OrJ)s5$UW zLd_a7SOzMK9~j?m)(q3tF6}^E1WM2gBwsw)zG13G0f&m$5uH594Ok@R;({Hs4mX$X z6e}Fkcp1G|%g`0eCp-QF>i>qY2b5@54*`~Q5SkZ=?~RfD@7%xu9T9RIjCLVylI7f> zHT3hqbLrzSLN?piZOSuyV~Sv7w(iqc1atkrU%5DQ&>{WBVl{EIjg8txYaW&eZUA%|M9j(Kw`X%g^-1SLeH38A{m86 zgE<5AwJ_O^8#fAnK-p5~(sZ#;% zgZxFTiV?hLc{R(CFh7nA+_1oI7LQ$@Cr3Wc^rZd6l3$QhY82hj+DiRzp|Pkkm_w4&dQzf3%0M&*m)>jMWOGr z!h7xka(|7AwVahwuSRSNJnC^lJUC0!QXtUcV&b|7B`l{}7zr1~6eNJHhr?9J*jH?^ zP&)B3d|fyk`pz$cM%rVwkz|LDGb23m>T*xNejd*mV=;2;oeMAkfW2-*G;q=%QJ*fQL&sSvRgK>K(8RxsF)qOAj?%yOTGe54UjwFhM z#Mzd40~lbZ#-Cq7bEZFLwXR-e6MXZVTIurWpbghnPSV4_TwWpOBV9dlm<#Za!X+th zNToIz<}jacy4LU7ua#(}`b9oD>_*Qz0Zbq+1dKCfuR;Y%Mvo_R^%MCln&4rD>27wYjqmds~iSiP@S{SZ2j<|#WE|4Q1+nX z99`-S^B4>BcEGDo^a}0oBr1!xt6a(cJF=|D%dd9QQx_xd8V|h&rLoT|^O%~1%?*?8%(A8L=^3i`^nRZ8(5$qd`0n8K<<4;>aLaQrJgr}PDngOU zM!7u($U9{4=%kv^H;vyXkGH(c)2eF|L0e&hPn6SUzVZEix9gnWKpbOH{cn}8mR7T34OxPnY><7^s3n4sYq=2K|zr_C({{lSSx9?HeHOtW@u zA@Tw=X{c!e5B;g{;hwe-SnfSsp2y*wq-Roar)vz53kf_zqJPMrCIR=oFeixEttX#Wq_d#P#! zhHT%G52|vS-5SGl<+7`PqC_K|#C`h&R{2u!zlj&|B^^i(_bCXwmLblJX2%lGN-8wK=Q3>5@fK zmk}WBp_ro)hEx8*T4!}tufXiwGv?Wx9YEtA1k`oY=`w%sHUJ1Qo)#)zKB39Xd~xE(X2eXt2}NmuK*-5pGq@9DWZaG(9%k5%TP>mRCH3SMeO)mV-bHdc zPx>dxl#)eNW$a3sOJM#A8uJTxcF!jVJBf|-WznVIKkP!y@^%1meY9G)-1Fa-K*_M% z*vgHdmgs7{S?^#l03UsL<@`C_nTQA@Mj*J<`__kp%siqp7ggU+L1N|c)a1x_kB#c4 z>w_eIAq}{-ySQiG2(C;aDLms?js$QAD>SJo7sUk}h$%gbJ=9hNHEhByqvaO2gmVR= zbugL7j`5-u_&F)N%hoCx0r}zd|c@*`NE*&*C2A=O~FABq87-R(x+wDr`wpew&lsY zVFsc7MIwLAHQUpw#pZL=mGYW}McKo4bS~R-q7v{F>+Tn**nE4~;^r?K`k4sB`p-vx>c1NBD(lSwO=CEhWWSe^0uX-*a-BUWaC{(QEm#@mAg3tnK7iZCz{879QC#ZGL^vE$V zrRuK@=&DR)FNcN|np8>*7n8wXj>HC$QV6v7Or>n>EXGxqB_3edl&BesC}pQgVC(H$ z#v3WKANDQy0sLE8=nxKL09!+!143q11TDS^HcJs+MJ9-yZ)okC`#h#~_oI0pJ`49W6xLyI!`ZrDBAumSNEZ0-q79i+;QraiAz^b zLG&P~SAINt@Q@^RLV4e}Z}ktzaUDpD=6A@|H~;?Xf3&MB`X;}I);fI7k0LthB{yz5(E?_u{M1c|II?F=ipkSn?rD;=WC>x)otQ%P zn9X2T>U%{sc0`d_Vq&%xixv5iX|0K7x6|m9Tf1cR@L<{wyFS3{(!_K2cqbhaz}>eW z<#wC9b8Xuq>axo{{HGG#rR=_lX=w}z-4{p)3G_*;%2R1b7|WUrlZiGp(o`7t^njaZ z`SH9-2})qj3s=WOyYthc^*69e(PTcvrAdlA`3fS8q~iCjt*~GYc8ZBT7QOF##3nAB zeHJM{E$+jrZ3bk(uL!bv{CL-HvsYr5Vvh3#Nv;m*N2?}{f2FvM(t5i&u+H&OhF}da z4&Xd=4abFxk{+#`X?8C0jbTS?$qa{J0*v?wFbjtA zTayN*CMe)l^7&a$+%VgdBolnZQ^{AQlKrWwKg#<=Zx(PqnFwGtz0|pJO5D&i(R9lR zK9GJb>1$9VyVt#P1(a^4E0aZn5csJVhPzrNdiskO-Rg3x`hDF!Ly#fFB`2oK5+ck_ z%vT=$;Go%P0PKul=<|O8-WE6Dla-ItNn$MpriKUi?99v)PjzTbpF7+0m2)(+66Ymf zer|2MIdx@{`_`podh-azPXJ=ywtf0=T8SXszKN5L@$%Qhi3W9v`2m@?JNzZy*5UFL zd(7+7ry@@YKY$_$+ga`~#dCah`7C1jAJDDw-DBtEWUGD+GYYR2mKwb(jOO27QYB@$ z;O0MWtU5$@?`2nC=-oexKbmd-q0UG<)|QP2zcP!|y6RZ?!P}a^UBd>c0enqsmP{Lg zNY}KqS+ISz;9LYmwN0KBXf_L@vJ_$=2|2x<2-a2i9LT=<%~p%P` zoOylVFSiAT!ds^02oS7QjLvnq&hJj@^^yI6GoD@g{R*pt?^|14Y^lmVKlK2M8Veu> znDy?~VIP+mL1+{D`cA!LB+Nx@otI}%GVFRr4EZLe29>{vaK3%56x{;~Q7P#$u{T*& zIq4#^3ZgHM-|(MQF}Ib7sGVjS$n=Pran8b*y-~UkV=Ac86 zrP2|kV~*LC$sM+XsULH~e!i3ZP_dqBNbjQAQhcTcw9)pR6oen{!Z2y6>EsvM z-A#~1hlYg)TwhpRexi7`cEYQ!Ae$1|uMMIFfpo-4NPM;-aF!P=c;xd^rKD#N(#1Pg zwhFQSaw3xaCg=DRwyb_Nm&7blOpsHe%Ou?Ea59WerQPmTPPq=2OpQ<_2>$k&5#J$uz6K_EYBX&~gMXd!`MjQ=@No0A;s^#OKKK~{O3+ar7a=Vp{S71j|>X|K#9=t1UZ zc|iRje{PlNgNG(ij6ZEHNvEH7@II_-txkj&wdz%^BkJh@$B4+YvDSEW2E-dOtI&~8 zXBep?gOD8O?Ql@7BUt9U(5Jq>=i|^X^C9vgBg+caNla|$Z9_TEwMj@&V{QW!0 z4nUK+Nemmp{;|YRWAWy=$G-o7>(t^y)r{`*_lKjoz0@pdZAJFC3*2WB#l4TLLwRQ1>ehM)G;%U-S zxqCxC+96hPfCLA9vEeM`#+_9Cz-WsJiPy9z)`JbShqZ60m)Zt$1P(63Kk27SKP*dC z7T}IzI*{2wvxaxg0l21_12h)N)nbp|>S%2DRjgdsehBRds2> z{!eLJ&vFsaGWcpI_1dHg>}0}GOkvv7e|zyUXXWiMS;cSrwATt*qWf3VVXMo+`J{!D zNX(u+OV)hGJ5PClduBjG(%$T#e~7%?Vh+zUzTaM=vz*;1dLbLlisIyXQab6 zn=z!zC0+ZsdkLhW-@VH`-dc`=mZ)wX(z~{WSMrndSCSPw@t{=^{{qhPK0RnI68{*L zkS8_WCJRX0_?$`?;6a^Ba#@SDp#wozyewgb=XwVhxfq_cGP?}xK|>J={|ZD{`npiX zNC2LNT<~guMTX&0ZtvHdG+a6A&b3+-e#xLwxtX($bc4)>Vo&x}3TL;es$<1@p^VDb z9$AkB6lCA7`X=hl>2!-y+JdLxIuElqF#xyeaB;7`6qeu>Q|Yj+0BdF_Z0?d z+s}V}-Y=a2&4W}rU|ewCq-)^5MKiOvW{!SNh^HUI_kPxA^|x{ou3j^eh+@*--SdPH zeF$thvfUH>Xw}ZfAu6`%Anf(f{XClFV4!6(UZ%<|BDAQB-=m(ktXs#f+5r(5J ze%L`fpw`!NyTpCFSQy2y*!R5tf>G`Te#?{ynsZ;S(a=~meFcd!#%YCqL3o|zAa0k} zeGn}t7P^R~>zACiy+ZY_fF2n{?^Vni*M{l(YCm5KFkTap$11uD)+G z`mfajl@;%W!jn65ps~lSQsc*A%8Q=m{@d+;6r*n~@ z0ElTw8Q5TgNS+t^)7HnSP~o_K%`us`&RlIa-yaDq_<(Q`n$SowrAdk-P9e$g0VZ@G zVnRqhb$BcISXQye9oDAOE_m*Fc1FhgWJ2O!Rw5Qcs8j$Bjy7PQ9~*@Rz!k8uz)iI) zkxXud4#-HQKAp~YQwWwE%L?{#ug0)$$ShZ}x_@&2o@GVD38{)r1DnE!XbT%h9xpyLIdwXeYO5 zIUl_0Mv7se+pkE&!1hBMB>vuTyhacpc69=hi8;G_CFb~3lOm4`-4wjZ`Lf4~J8A|$ zx_0+qTi`e`fZQ7sfHetYBgNShAnAa4+?XBSQr=w45&W*AEHs2Xe5G4xC3xzSn?n@On86xp*}olCH} z%x<4+ZqurD*cn>6U!ye-dbN#%9JG}~ts($fj1H5>G7HjG@Xui2l!@H!o|CReu}ceEE@5n{>xqS7k>JC_I1yWT$V25jTOF zhBBZKW?v7_6pO~A(-kl)IZ)0&5aFIx&0!IQaT6i=9-2Sig>Y4EG*j5>MVqAoBZxz( z@9v*{C^19>)Aa$|DMwJiNfnHjr2AFa!aC(1?kOP`hi{@b^)L~j-pS2G5UH8U3=D*{ zDEWcd@;t!3+xGkuX5~)S)d-(Go$hFL2z7J}!kXAajT2UBir<fofZl=DLb4Upw3zArIhCTgM ziCuK5Db8iA{CH63VCrvq@wgDbtKC~MEyY|}oo7bv5(3ZZ&Uq(+E6qBf$ssNaLWdDI zV4(vs*HrAUP0AiR0Wq{S5JL|M`}|>OiK8;RIF*w^SNc*~6p&$;zkY;!_l9JpeO$sA zd#+w>DDjNFwWri;6X!uRIgHSepO*bJR_mRzq|!LD_DHzHo#BH^fF!(kswr{SMa0L3 zrE>HAZ-;j)U=SRMMZUT*%u2E|i8dJVpJ^$zlko}sxR!3L4n(;oJiy`wT=_@-o7emQ z-%l$5JKTS5NYPHh4r{A`IZ%}3+EXWj*~&c#pGv9eEx>nUvrER?n~1C=LA!ajr;ZRk z^-TqT^WS?7>oR)aTVYgYSG;$3o_JW0RVyK{w8CgtW+$jkA`6xk&^x94UDl|*V_4uk z4UwxD*%Y3MTVg!RenDZxnJQS-l28N%a}&m;CNDIu|4?>A`0jqXG~>(P?_Ix$WsW1B zkrX@$S$$^J%>-x?;yQg{b_mJNChX=SBZ%*9fmC}RZL;&}2xAWbU>Vdgc0l+Q|4n>v zY9Xg3pdaHtAqrOjv(e2iR4fcQN0?j_!!N=OOjRxsE*KG|lV=I55(gvzFBk05W$WAaz9l^6K9cg2qJMIc`2W6f(y$s25gJ-cf%qOaw zA{fhE5Vy{fTDVuiiOhhZPwP}07;ziCtEGp9y@@i(1L+_hO7zITx_(kqS7Y zlMc(E_N4J1F^wr%FZsc}5ZSy-8DyQQTT0}&s{6V$;vxTz(r4AKV*b4fczZc4@k$5u|jIeFE)%`U&)6$^i8Te;r2{4e#4NB%Uf;Q(xG2-xb?wJq@k$g>$3SZn6!yZfNMVFj5_UO( zVu)Mjb2BOHDl<`SEv;Q&ShAtBs~Kv3B`qNSlrk8_JoscBK#vAc^xZGQ!4v}mkaFo* zzZrSa^I`wP7p=^CexJJ|myI>K>yq)n39AFe$F+-siSEENW|7qHlbklT^MnY7vEGLP zgDmPcxY`7@7{_#@l+V_IQTGKD85#eTw?zS{Ykwh%Eby;Pu5^1DpckA&Xycn7PyYEK zucE*OM_aQrp%PSp^lo|K(%Fytr?S3iw^a-CX~B(_=~d1>iIsemP|yA{V2Zz5{;U_b zx77EsA9s}@ABgJDehCK_fL?1Whq=*Cw$XBhGg7oAUL!P1fQ9D;Xz3iT;zNm+qdLqU zO<}#!s|uov?sckzFou{?cq*(_ovUJmjzdv3@@N%gRXalCARR_NPhp-wdnw4bohRAi zc5nt+HqPS{)y+IM34eeDepVk842{IN1rNo*G#`FH@#QykH_y8TT-m zmgAkJIGNYsE6@eQst;2S?v=Z~qSk9RJKh^IE^rL<^nO^~_C_A@MPAO5KO@yAx9h!M zj0%x2*bum8xGP_z#R>o0mY{a(k{x}xIq__)IL3js-$C)~#wN-9jn0B&Jc#gGS6lP` zzfSwCuz8uc-m(WyHU$llU47RS>Fuq743>_2T4e)J;BzM4Fk_?+0U1Rtglph@$m0<9 zwTER5-JgwYZzOZ9FJ|f2JRo-0Y8pwNwE+1p6_q`}_e;}N3uqEGf&O{3+} zOJhx^0I2S@3~HYmk}IGUfDu*!S*{bVHSe8bV-21%WqJBMZ3ERTSvSJDthnDAzn0A9 zt1AG(n+(S`m2^R8X}h?0x%y$jWy8MZtigKhB99c0syIzYKSC%Rt$oBu!1{_XzcQVK zU=8PXntCC|vgwz?4uC9x%@kgQ-|J#3M2H*%A9$)#axrd2VYayD@Ki2@Sl>A(7D z9@9+VL1q7d7)h&Lz@npQdRLH~Y`;$*!`}Z@I}PX@WPRmuna#{z4=uP-8S}q$(NbzN~@dfe&>^J+%7yQptE4zwisj&~x#b<|l`I_0hXcD_3C-TvOr=b>A*4u;_&ZHG z4)4YFh+QE(eDWk1x7rg@y>q?i=-QsK$T{BiA@#M4r3f8U;63P5^y?;&uFb#}9u!lC zFk2b4-B~&`X%Lo9yz1i4_s&d$NANYF<9oSoY`LV%CIQ>uU1&G0}R4R6{nw}O5rnSY8x6IbZka5Kfd+3 z-pVWvGCPOfhE)6W=d|U1g&+3jNs=<<-)Y#}*z68_^Cj~Z{_+dUnY&VyuCG;UB<#Mf zD{+HnTZd`d8@S1RPV0%9gcisb=YRG`5~ztG)wBujHdm|8RxF+BvXA5H{! z`~w2@mIS%T7h;WS_ob;kp>7YFO^UGQ@<5RayZ8mxYu+SlsRCSWw>~z@aTA$W9b(4!9fpSy>p%kcX~(;=+C1u3_z+~ zL1A`vv;di6KRMdRc=QGDy*8^WxbQoqlZ*U~KwkykM~2?wy_zu{ZxLGSqiEP!~o11S+1 zi`eIFm1S$8;`I8@78I|T$g_weN?dW$2yIQpyVJP z#X~?BXfo|YFx;ERl|MVL)bj;?|6rf%kGWI^0Kfi00HSbuj?oGvY}DpNH< z;SmOp?ly}H`mIH@<(uFqUQE4n%kR>?q^(al%f3>jLkBeB(aK4?_v|Y1GYSaylPP{- zpWvVW&cPHoWSHkR*0E%D_|p_2S9)V%!-0lBeS9bYjn6*I{ezBPW(vRv!t;LGL!J=c ze;;Q5)Cn~5xDp+FZ{?_5!ssxXqRAO@gd$0cEvI1WqM|nc12STf4>BC|$%2Tx6I!ffW(t$W`K+qNoh7;GTY2gk zzs`Qm6?gg+aK~{oJ`HXc>^M)83Cx*q|9~>W@P=n8zCaQx)f4syi}}lcJbd~G*ztAw z@cfhu-<-i91iPS*q|P-17Pypt*bKhoDS;6>-cU*L%JgNgUwaNUXM_cy|7#see$1K#%&j1nQbztTt z%LB8o@QE$>Sb+v%i}DZqn7H986;@TRmpv;_ABH4b+MD9aX}j`SUP!qeQZMe%nl!o1 zb8=(|{hfP*NoH|mBu_K{tNfsULXuGH_MTmU4;ZCncjwVH3f1u5?#_3)X&1ri*^v4K zFq7f6!&LI81encvm=l_z)uE3#5#GrwKu zV>{QGMI14x)MvZPXMW!CG0g}F)K_cvZ$Q?ItiiOSB9~as3J}`lTNES0;&jX(b`6u@ zi{nB8O3Mp&oQndhOaL=SehnqQFW7rOd_Y^~Xqf2dO>zJLLv(`LGOyvBiWv**B>o@+ z`BPWC!KhHF$oHtb*F17SJ>$zDC`^ekyn4KR9^wi~;MxW=BZ7ho?Mbi)k4ksyROdXK zdOh<`IyDo5a5>?fpaYDsYY}au7MWOKLmX?MDT&%!!Y31`F1|tin5h2n5k&Tr04FNDjqkKJ@ z4r7<5JOihDAWl&-@svqrvmjTlTM<##WeaS7!~qIVH823d!1TH~f!Vw6_z$SCHcWzi z6WQNNQ39&pPWJ$8%zAeNLz4OR4O2OJT21ddwZ})Z>btN>I~`$$g&Ktq`t?Ef2>6cG zfHcn78^4rAqNz#X5D*DN+yxW9o6SC=b^=Bp+b^vaAR_+kPCZb1O3+7A*sqX-qC%*x zb=7-r&Gua}PVcv=Ff4k$Y2ylT5ESHBwf*H|@wl+pk*XRU9>Kev&bbc#m=ise6V_#W zso!71i3dWH&*-Kz+XF&K0lR}Yrmi07n`nmJ=9+^wnI*~_6uKy%&$)!}{|S~SNBH#*h%NlOLA4F(8&NcH({RFD0kP>mw+f?se?7hZ`?E&Y*H*OKkcd2m zv$qIv#SZ(5f(YD_+@mp$s`tol6X(yVD41Q*`u)Q>+&6|%gpCDs>dztbn{{pkQ+8gAca@G>gPC7^Y z`P&M=lqR3=f2xvR+8-=?qWOs>`DfXnh*7jJEn4Do+h1^v*hfZ6+F=5iBo9ofwIG zI6HH!6123D45c4E0(SwytXGg^e3!(Q;VnQk%Xuk62MiP%4&y`WDd$T~NYzCYO#)|Z z3umd@V99QMNauWe&(!S1g*)&1=|9#2cQ&uG5n>hpoOJT<3x38 zt5PF!6TEc&hx70^^of4h-wKLN29@7CE?f*A{*&EuZGP}8JarXV8wvVvlgr!od^ZM_ z9>fP<6)8`pLC5IGkSqW%9wg~%c3ile$JP{JK|=A9&6*Y}eBr$yr zU}~#g|31RF-5?-<2BuL;Wib+O1Ag`C@zt=)49^(Uz?Y7lPw^m%%yEZo;6pGKSLSk?Ax8ly?njMcqcq1?zMq0#WDL!0q3OD zzj8*?+ee83APIk!zlHcfCLjok`bn{HO|kzt=Hf3~@W#7pmJM|~%1|^xboaRBSmm$Z z3a6kOl^wXQA8|)xaL3y4>)Z#`B^!A1f-&s5lYv)K!{^bwvY)Ni4;Xip1O?DP?FOdL z06E@wr8!b?N=4GDdqFC-SBINAe*r2U^5n{!5RudAoe%qe+CBiCE+zt)Bo~JbUVFJ^)~GQ9LW_GpKweue`G4AP@XyMEAbmUYjp-PJKCF z0$H>#SovPS4kpPUQw{@wv4Ajy^VSSsi23GV_+^KyQ2fdD1-TZz);Ga@JAe0Nj(?8L z$!NM2M5)9wy)hJVQ~XvG0Xhbp^#Q0Vs*=Jw9q>V>10v9(<_@`NFFts30Rq|8g6a1SLq^A~mjP^Y<(XwWj_9GMMz7+7NVl8n}k|F|)PvvaIB_ z-g%&5E9CM-G=5`?y6G6IBe+uAdH(_3{p&|%e&ol75rTM#rWgIq zyBK?CuKfU7vrOrl2%VmQ)W84AzZXhyZl+_r_3mXKt>hQl9piHmTH{n^bu8IbhNy~P zrzk}RltQ6T7WyZeW%pUwPU#YKMKMB07?PZKKhU9iq9}p4JEb#nWFIJ1p&fHD^_iqPK#@TW58eL>}r{m2U z_xG2aA(ZX2$Q5s9U}w}tx({>iz-uSvy$%#EM%@=O3SSr!)!Sh)6Alv)0-Z^JLi3NP zG@rqUjf9jBwP)RPfWw}sJZrArb%BemIXgQK0$tr+cYZPM4SX|9XI1myoS4i}^Qum> zbRRHDmm{_KN_l;OiW0LK%e<}euh7*RwW0M8mtrQ)FDYR%f9_%wF`j1hQ0gGK-mL3z zPS<7-66Ni+U;d}LK|+pr^^U=uX}dos4O?4Ts>Z4~xJ0=#o9o6y_8&VIabF~I@Zi}D zBGBZFd=(ZhJ&6Fzmun9-S%`Q9$y}SiRc7-H<$)H|wv$}(o7UO=xT~sjaqPt(ZRG>e z+xMFjTn=NO6P*jJ;sI<>6luj4LNuVDlf)XjZ@m0Q)wec!#TiU!$!Y z8SHmi$2B0kpDynokgN$5O3JuZOMt}HYKxspo#Ce_Mk0k6+;i>zjUbIEG%s;^%SQM?rt7PPELKW$yR)3LHLa$CgByZ(g_IH ziX}sL*yq_F_|os}TI)uM=S3HnL7aX6DuKCyUsa?SPE_1bNPuv7ZHA_3>b1lI4jmkR z>&!WKG7SslcvQ7*P<~cOFDY6oi#}QL{Y#e`Af(!;KvS8e$r`))tl|7Hsun^2eNH%f z)y6SrZY)6Nl8s?Y?_No!@{QDXFqSEFTALg)Gf*79gsGa2ujq&~&Nh!4*jMOe=J~@+ z-^6kGkuLb-@K3do>5bt%U%<7)=-)0NyGy{KXCk+I9Qts=^Tr2_ozv3|8BH0tJof`v zpR^vKD4SUnOTjr~EszXgg-fI(_&dk|&x4})O*veZWvF!w4tDkQ*J{jTY_5l=c134! z8}=&G6tDv_KXkXLr7wOM8zzB$74C}SR}nYv$6){v5=Y@1SYc>f#em>WIM3D8 z3s?YH-tIVqvs^9Nb-e(>or~6~2A*Emq0iyh4N=_?x?^p58!-Vi0zzNi4_Oe+RA%BvegK%S0KFCN^YzfAa!(MiX4A82(ZPaB5ET2!j zeX*~wV@r>3ZAtJf3L%XRg_n6!FH#<7-%0kg=WB5f;43gYpigq5C$hgt1YD)sJn}t1WKX&?4EcMQz1@Ad;ZylvTj$x^NxD|0YQy)TN}rpy2-6& zG^Pl?%M9@`F8_Are|_`X|N4UekNb}@hzLpTE-7JU5!NNN{=IojB~<-|7Z%bZl4w!6 z<@1vB8BO`mE3|87Gms~fIv3Ch5Lc++eY1oXRvELRC&ulQH;kR-=)1!U1rrs)LDyPS z!h#%Z2&F48z`O@H%(%8rbK!P4#yF|#TX_;u+%mVD6U1}0P#R16e;t$!zlbMKm$XZA z6}tEdjB%qmCq|8+gCf%Jw!R=}P1LB0HdifRAZQ4N`nu0JdUAgQ%BU0Hv( z5E=P{2IcX4cm}q@@CmPp6{!!usuR?$!0%v;CZ%KBNR4l@xH146kq&XtU1oJ~9fr5Mus$~k;txI*)9Q(hT> zCpULUG$9R=t+#)}oy-Zt(KS$dJC8o|@%?@Oq^y>UmUrUKF20Gq=&U|>o_E+0>SnGh zrb5<&%iyLXZsdBh_E9h4(eXFz)$T_P+|Sk@cdc!@tjO=*v*!Gw0PN2Jn|1pim=6EH z7!~uhxm2EIYgyn8dqYm*!x>1~reinCL$=Yi5L!~soUwmNqj#%HOC`5dHTMK)cRcx8 zCM#VpFMBrI}ZF!sPsJ3-faiC;-R*l8`E5=O@8WTC(HEA@N11YRt(^E^q<^&2U) zYl)*F>-i+mP0N1KtZe71JYCykWrNDumiTktobny%MS%igG5R1^cu?0|(5o7D%{!xe zxbfq1jU`PJ6C(y50rOiQuN<=gnYY3JqFooAg7M%K+|B1fdgRCDSGP~eBa~Lq+-@ft zb*%x;cY-u(u3ZK{O}+i|D!1smPq+G-Q+^d}pzS7gD36Eq*Xh#-UvK|KKZD$T4M=J}(BGX>8gM8AE9RO(RYP4b$*V!tXcK(W-!uAo?vo+{`F!Mi%mD@xo0KJV}bKU8i?iLrlMs=9aemd-O8IuWZ0ji3ms zHtE@dtqtWN9+R*?;c0^AAwAS@W}OeUT{K9YIjr>Cwr*P9%l(FUI`QH&X?%4zU(~J6 zPwp4cjHZnL?x?MWx@Df?k%@2gh*mCgc5Q_Ikc|StZ|;YYAr$55aA~&;sQuy=aqdml zsKdhSl^i$zUs8@~YBB*Vvml|bpO78eZJ;f+ktKHr8X=2``xR9)J0~NR*E(YNt5dqf zeO}6Jg@(e*#Z#Fij2u&LN&0@VumA|oH$fbeQXq?o<5D?qvxe^zp5mCwMuWsqySGzD zpKd8yWJah~O15FZLBMuvgTR(Tn2g);v48uT``xh;X`7eR{U^mjfp2;ja!S7mt2j>qSygU zb5TRF@NSQL}7G<#f%=7i58H=OZPg{tom3r`Q>*35uUF@9D= zOlB6qg*5Qq?cS{L+mG|D(gHYnVB_<(xjR%TOtyI=m)cScTXC6h9m876V^xL~SS|@l z76l5tYPhce^#{Vru0bA3$1O>>Hss6=8S}qDdDAwgUUrcRx)xotPsbrM=T^X(k1!+C zA(#mjt;n)nDud8aQK+xn#MshKeHEv&f&BX8!CD&Wj}eRlB38yLs96X$t}CAdj?%*) z#vR;Pl;~EC0eq*4f;_{}xCyCNSLm-CatsGZwS5ph>lxf_N$oZKoBQka z7lrg+fnUU(*{rIkW2lqMRdI1h4;0&0mTgPt_`?x&_+rU|F?Y^6qjUckd+!<5RNJ+S zf+$!hB1AxtsGxL^CV~_d0RaK&ov47+5PFBG2uK$YkQ(U%LXh4gU3!;ZLhmG$7$Avf z`MmAX=RM~gXP-0n-rpYIkNnA?-0NPmT(e#Cp;fpDQ|R4%X1)U74?%3N$SZ*z0wnMm z0`=(jW?|t$kCIWPDXZcTf{s1i%k#lStT{e9>243H>GLXICY}d_(!dK~lAF?~hECh5 z(P@PC^_+{6x+}_=^uq;7?(`;R>F!RGH#>nF;%js#2iyl-Sv4^*m)C^4Ot#6%_kTrCvP6A1-)dfLdTFM-w=>q67L^1s@*Aj8z8Y+j)1Ma;OO+R+p4VKVPpF0}Y5 zfQy=eFSZi21^n?q&mG)Vya4u2>!si~zPfWmMe7NBtRXWyy7j_4SExVTe-iQq?51Gv zD@=SR%S2#J(1ufax|@RBSZ@q%UsKcCei%;e-1%|0B)t#IO*K>R9!hpt0mE}CZ60`V zCA(p;LPca`CT6zZ_f*K%_R5w}MvcULf)=WHWizZm15>MRcSdXbjw+9k;Ej4?rs{;1 z)THO`SG^{fv##)$_5V0;lbNS))o2KKYf{Sr<=2PeIUI_<2 zued2z;Ah~Ca{lMmr8qAE4XScavH?V& zvgbWD=3uY*>$v86Zpd&bmUo>V39Bms*YijETe-LMYdpD4Mn2w8^>!Um0&l)-g$9!7 zsy(#3uybn?BBm2Sju8ssM_Q)%H zOGc0%V%d{p9DVc$bsnFx5t}sJUoK8MnbtE8v@p=DuPP3HqV+g&TXMq;YWN;FM8^0sGU zU`(hmlqOu7+z4R3}J&`?F#`^CiVTks#%5`N#gVNX>BA>JP(z9 z-ZtHp1FC3aV9#9e8lr?Lz!fUv>LXy)7C!^h-5qV##24WW_~CoqLWy-slTZAr7MSO& zcizlmG+?jf80%DX?4)J`mm~JOPPsof$O^VxY`dv2i^nqD)0EdeS8wv=1JG7+)ozap{XM7*`7^6w zLK0m~T1G(g*O-nN`+@R88)vA+Eu6GST7A@KvPcF0aDpO0`1?j$6U|qD2bi!(X!IT~ zWC=D5YGVENn(EYx&?lOe+GVuXRMWx4`&8HrIy;di?fRn=e zSryE#n_Yy$(OYflSL1O)ly;R;ruAKEpT1!$-?0+2@A_>_0sc+`uMgmRs=1MwbT~To zv_he+$?S&5_X{)Y62YXTsqQ`w+7yTO%e>!P5wHB|@aQbVHGh#ItKm&3mxQna4Y4)1 zuPjG7=mG!D_E!&aMeBfR8dU@mW4^xRnB{EfM;mrBHQu9%2l0}d<;G*l&c#n-N@;%L z6gnqUjaJw=7_HH^Ltjz70H>C%_wR2fzp(D%)TDWa@AzGu`PYsW2fvLmz-`jwod5~H zj8~X15Tf^#YvQ^$!aqK9v0_As`d;E$VQV9ER$#|fqQ)v8M+>-^?hEXq9aB zu~qGQOU$h8=pbQN*oya({T0sr$5iEh=YYn<%Eq1X(Jx?f%B%*;0m}jN;ftJUH--fr z%v*daP8w!8zJS4MD1G)p2>=bQA%?0|gL%xe?Wpru5nC8~x{#oX-ntK!B5I$sx4HJT z-tl2`KqJsHKfz5A3vdB7Hv^L|`#uqJ_bL);rkl;oW@bz}Ts(XnzfdN5WnEu%1}Pd~ z7|CCdUA6>LGlrxq7+fO2rL_0(TiLOxzDiwqvx}wA*)Hm@-US>dP9J>>WF((6lGxOp zqdOY{^%c$YY;W>r>@`!Px(~3+7QWE6&poe7+EAXZj@y0c*+Lfp>T5u8qMm(*RU=v>sCqV$&mqPy_w4)XeV~kF?^~TvAb>znVgVkAXl}UG4=pEh zf4%WAcM3`U;yh>MgR2XUXAa*5bQJXhWt;#jtrfdQ*tO z(rKRM`&%I|t~|Azxy`13b$$oW72K$Cnegx%usqA!D0TLYn{j}PleE#uNHMJr&%`y? ziJMXs5LL~)EJrs2Ezw()%}Sp`Vl_TjL=K)_jLyEs`8f2PFn>Flb4%=0(yr+7Rs1=X zZwEB`O|T+@O!aWq9ukf5FO^M&y8a-W^>Kx9OB}1bI3BG4f@-P-s0?MnF4eaViK+@-R3sC9Vim5J+XNq{LPs^qfK7&cIkF%&xQU+V zp`D9Rv-L$W&YMl2N<`ZH%{$5LCV*E;KLj^N2BonK?1#ynT{{YXH$028cW?yYPWD68Mn z>(17vRH*oZv_qu&|5$kc2PXRuDS-d}ng71q|CWLOmVy7dGLY|VcTw23crD87#JcE% zAth^z6Z#PksnOnV&yi`=-x!?w*rtWoJxbt4QjWl(upp^hc|N&QGwXaVHq!CCfkTT| zq=fYvcfN}2lUQ@n5W)|#bvRxyrfwziNo;8$xbCP56LnslSM$p-FarWKWF+oi2JNj7 zBs7{(hd;=Mfq=vGx_4hQB*dGm6;6Gl9)0*cLEX#j{7};~=vT*Cp2Cj{jw4GQDjBi6 zRo%sUjGM~+!2CwF01HL)usT8v(CrZ&GCH$S+-u$vwZZgo75dW zO2duSCuICIKCB`Ua_Aa=&=0ac5>SC2?6>*mkpD+;Ss%x}hwRId7n1BAyRyXgwIl;|_> zxIR`!B4%;Rc!S7JSh;i_FbLFAqn;VMTo{@jR9TS}aa=muwd>n1zI+sTMt7)@+_wsbI@qHXe1TU^GlW5s;0JO9CS|2x#lR7uhL}UG?ECMn zqJ~L8=h}y}C_KdvGSO8jz7AP7|6#LJ03WgEKFx`BoT|p*iWczqQgxVGePeAf|?K+KzP!4ev+JG|a=SD!)xgdH3}o*}&TAc>N09&7 z;S9%6k*xaP=|XRj1oSm3>R-g3YEc!l3_7Dn79KfusnjgSLtm*wMNpv4_(MiaUGO~D zmd2b=Ac?mMgR6D(yO@2_sdM90?AKaT525bcYX;wts&wq$C7Nbd{#1f(&)rO^K|DH1 z`enM)36NHH)PIm`pvB_vay+liUpW1i{@egfWSw%TO0%KL#?ELcL-A~KSn{sJ6 z%BA{InCdu*IZ5C|wJOcqyG6pAd6x{1E@b!kxbT@xP7bbeXS_{0yC(h88hH_$yXA)2 z`y$IT>?>C=18L7Qcz7-K*=LW(t@4gQ7zqmd#Zs8Lma?&NF7SR<^FrvV28yolFX+Xe z%?yvR`B*D*q0} z-NkH8iE&W`OLKJ_L}6ao)3E96sB@UA>BR;s4+Tbjr@eFqXE_FcZfnRH>09En=exwD zyix@!jhif?J1LH`!AZNwUoG)`K}7T8gzHA3LZw!ymuSMINahyCz;HNlqVCy5&9raS zU%d+NcF3_cK@JkTwT!l z%doO7akONFq*SY^tZEj$`&0phPP-894=#j-R3Fw zyiljj7&GU6MhKd<$VmIp*9ZDhX5ext5qk(FTH+`jaF zv&c4HDm<^FAp83BZ==Vp8KLs6uIx|B^k10zPl3-B3O=ulIo7%$&!PCmW{^IP6FjT~ z|4pZsf0}{>LPOMypEH{Fs_g~^V13E|aLs@C#({tOMl%#M5+{OBdsg{i&1z@qIcM2wFj0 zl$FBk&!KQu1kRzUMq=i&7uc%8rnJ;yb0K#I1UP`-&e*JfIWSY=Y}^IAOsfI(ZJ1>H zKqSYR*C}X$q%fQD@r`u=NBri5W4X-MteTp$1AA0p=zVuQTT|myd+VlkPj@tgNj8y31-Y@t$ z>Nm4O8ft|1trAy&?yp~boU8sjf-o_gK#z54(XvjvTwRw$6qr~nY|U(`Wqjc!v)dec zV7rxVlxid=Z6p%)qkh{a>VK~c@p{>Q5 z)M$^J543t-NTpD;+D?Q*H=UX;wW!une_lfCTcPlt;qts762QM^T25i>4W&d>^s*Lw8{z@Uoqk4Gj3? zW2zP={o-}@`zFv=Jxit$DZb6bArs`UP}6I#`{uhvwA5!c*Xn(|KU1HuYo=KcZC3hq z*I{Ed52b$tJL0B%d5P)10I$9l>N94fb!uq*L20+3fYBAu`;Uz>UW{uCm~xAB^?d05 zqZEA_D+Au2_$cn`>Fp^a)g0uqw<)8h=}ONjP~ZZbWer7F$M+H7UG(A@vgf#pv zMB)@$i7SS$4YOE}|$~&;CBii3( z=jE}hFCW*5pzl6GN=j@0-9r2U^^yOK`2GcnrhkV-MHFZ`pndKf!8%wwp;>gQ zJISRjmY6f0-sq^ZAmhJQM5xu-0>6tX=k8m#O9-(s`ZsNjTRY~aVk=Ws7!pFAUN&?RY0Q2N3-8{=-?Zb~Zq ztIKt@zZkWu`~}D1>m7O-VL;5yEXdxo$17*hh_=#Vvc-nkZn(iY{tb*9!nAKiVP;!N z97AFB=|Cx-l&b!yqDWBYx+IdvC1+wy*LAoSLxa3KZ*@}xlujLERL)tFj1 zXW}-arh+$D=PAaxxg+Ej64S0YA|!U4JgwjW<%*ekT;uziN|AR==8&?w;F&dg&@Cs^ zf2A;C={Dh;R^*A-`L}m|x)qlh>;E7cMUX9NCITsH#z$@)ejcC_J_R9=|1I0mNf5^; zWccc1n(Rp6cpKN1_=oZuXF@8kHv8tz)a379y*(V7a(PG=LLXcZSilRKU$|W>wr^7u z&Ye*u6bd9Yq<CBsUy-4sm zD#=F29&NYz(i|K4$^v`5Yw2iLM?H3J^}D;y_B_Mp z@n%OFU~X%hb$zSl9?gCeCCukHGY&dBbrocG*B-CJ^LcDr8 zGNZv)u2QL~oRgKPabLXxHHh`swI*ZJw#clOBodV3fU zp^kapQ}C*6g-uX2$x*^wHy{_LOyva#F#c;ZBRQvZUN|eM8|a_=<$xw2VZ4!uW1i-X znp=K1n1V__xiQb*tWxg1F#fRup$5(e@Z=vy{d0OL6OG!EpM!)pa7W$k7erbPo3U`6 zlSyu=)n;ulKVVFM|CCqxKIqxxo*1&}aQWi9g3-p|@M}dtEPZ_>trAeM5585JItPAQ zGz=>B!wz8r^ zOXqX1{!AL__ND&^(`Hcw`@8&l&#njmD!&P6IQ_UMs=3CYGFP-dDBU69rq~vow)$B~FMm!nXuD!~QdW}!f12xx$20HIH5+7S)El{7=c65BL?J*) z@~lDWO)j@~X6M!pJo*?BXy7f5l?*O_m9T9z0#TeE?cq$^Pj~~LL%@*u0G$yzw8VM8 znr%BIw@q>d%z4sfc`tlHT%L5f6WH%13#IAVJ*Y+ z>1=u-ob_MrV^lW}!60~ZHG~x02q0S|X%g~~K!sQFKZ`#hL~~i=*d)7q6l}9Aow6g@ zHr<~4t^PvjTC?T*N1ViLX2Y#oqT%B6DM+f-dszN+&>`A&s|%E0U#=|s2_Wo0po@@( z;UbA?eeKh7_scJ>;J9!WyFIm=4e-SJ`wOfI%&ndtggbFR$X0#9cpy!*RgNnJEzXO4 zV&}~)0JwklfLO7?u&sJqBQWyZDM)+@%(9EAwss`vyDae2!OkcmT>y}Kgb*ug>0U!V zbNCA2BQia+@O8G3@!lOAWb+4^Q1>(|*UTQREY8~eeZ?WoN!^n zEk|pA8hgbJOp=pb%%z-9-=a5LvNJ+)0L8o-IGG{Gsrq3b8dy3HbT+NpT=)1v_Ii)? zeT7^JQ60Wg=$EVD_^kN0FSNc61}(SSl})}r|7a+fn2Up&srx`4)=uE2WjFB!zq}AC z0z+IWunHO|!8QV^YACYYx`=L*A4T#b2@(2ofJT+*R`5QM;En;Zd(pRNfhVNXXhH@Z z2?eTs$3+iix*qGtEgdFjSshp3J|5ecsO9BG+NN-*oIO9z$FbL~eyvEP4lACza%*wc zeR^`JC(u)4i{)4Z9F>$4;wddp3?n8}f3`p7N?nFoO7kWLUzZGGbD;Ds=kU41RZ}_utQh_6!lUpWe1PM}%VB_w@TA?A5nl(X3Am+|*`HE& z49ADC0gmq;TF=g}B1;4}I_C+xWwxag&D7 zy6M^q*!}8uU#r`NQha&YoI~qg=Tq`})bHdZ9jJ*Pf*H983=sn$I9i5^j2hT)0I0-Y zWeyF0YWag~ZwCus_KyX~pg2P1R)NRk4E{lO%@=q;+9miAn2K~3bqw{h1E@Jsm;g`k zeGInx*a~O)P7h%{UfMmD?g8y+a~cxw*EFp%sik=p8+UpfC2@q1OTntc5QBkiZI#l` zw(G|VZWRs)z66|JhHv6t-xk#|7dSFaq;ym%1ogS0&!WO#X{>H*%pE#DgPLg*o~Ud7 zMSPC+La_yw%)AGejo#L!9ijGQk15(sU+hcYO;Evj5ct95b`7jd@Ta7qG9O6U zp%0Z#DTYG_pEk$g5F|y>cmpmw{PnR z`FZ3o;$_21I`eh&lN?%x;!4!vsh?KOD0JaZ@^(b`XL-928JGh%x30LzZk3EP_MF=j zj+oRDbeg{z0ZElaeXbZeb7{+O_VimdiRWa~WA9NV^YJ53nK@am0Me3HAfgI__EpLurLrs6} zbzeYwZ><*cYDXAIx#+7Irc{}znSi`KlW2zmv@}Z9*EVuiS|ONiz$B$(;By5($SMYY z75oAPPt=$poN!El93s-;Ef43Tj?MzybwIZKD}o8QnntOlb8i4Wdc6r2RPcpc9yC&c zH~b2=E^!wT1gYp=p^77r4TW3lzHM$TUb*L`U?K&59sZ`*3Vk3JwO6t@u7n!#)g5Lo zK|)c*d%mjp;3Cfy&*o#fW0j{u}1iy*dZp+kpKc zGSJP_U3hBUOsB+P-N>EYL32S_sC4`{PiMAuEJ+}jBNy{~4s8FMgikQ>IH5LYloHBs zEwCnwZ|v(;`4&(Ge#{>T%&MC`Ofk&8WL4dJ(SYC0-`2U*E}qZIEnoSMkgL6g9g6)v zhsDp%DPZPC;GeNxpwS8Gs5{#Zhwj^EwKXf{zCiBr&t{}R!OJtH^h{XZmfigw=K!)7BO2Y1_X63WzBL&yq;I!A|sQwKeabBBL(b8_e@0MY!*_>@~C?;M{K0+KWEFyKh*Kgi}e zos@{D;EQhoMhp#6BBFr?@v?y`xw&1BG`1&{U3aV$y}020VY1T2b$nE2V~9JWK1nD2 zep0rYp#VLGc@yf}&Y;Z_njo%R+cD0EQpmlF7~#tMsHOK92c11hkV4FKa-CsCZ>zX4Q;tm{{$+QN{;+d%AshG~v zmv|o#HDY>2r<&yoE*(awdnp*+xt_fv+^}Sw`>m-0h}Tbg`Sna z%JEO6r{C%5nG{)QV5ZRnWDmYe!dR`w6)!ULU*z}`)cgI7jJjboaKfR~8vNCa zrsOvDQ6Pe5>B@wtll!*lHoKm}a0sEUy_?FtQz>o-MMa@}ldn0{dFjWk{oURmwLwO1 z8+SUP6~`5m@UW+56vq!pT~rHwA!YRjp0USFn|jYjJCDJsC_#w3N0HP5XlGdOcDOh{ z0Q5@g)CoxOHjAq4@GpHa8ERY>`?h_GN&nf8b^h6p!G7^$D;h7rCHL^)1+TjMKyT>h zWyAX1aZ>Bzf(y@dtqO4sJN_ris|dM1 z%*W71Vg+nldt=S^YeCr#Vy?M30#OQ2SiWjH_O(|u<$1+wQHX-NpwM$K*Zkgyha)*# z+-0NrHpo_v`Dg&BFFqjye*Nz^J_wA@{W-d^9WVp`=>@F*Aj4j`ok@Cy+Iwz(8wD-Wfe|zs#ulMEfiqZm^t0a#Jxzf$_vb~C}*`*JrV*uVu(JKc{26kb_ zZY(HVq>gb+*;Alx5Q@Zvo~_!1uymE%aXP!VF{H z+bi*3i2(p#hga3qZ}#^9H9m?nlOuQQG1rvkAWe|^D6DTVMO84|X8@2s{_x3Q6f7ktA@}4txSl3paAjnC#SMSN+^I zS`*vk6%BlADmgh1lm3SG9{h%|DM)9!=YXi^%p8DR`vDkU@l$L5{L<=wv%B(EFr4wj zr_;4v3Tk6*j>6iS3OdT_Ha@w zG0*cmgS-^msYJ$SuqPCFbGs&nsnW}HkR zvymB+(050Cfqze`sg7M1C39=2l3%YtH(xmrXlKjADkb>$qfXJa!zjnC<@HHz$1+D| zK&8iOuM!$DXcG{RBbGwfp6@-^|$DS?rJWF^t zh$cDn@>J-ktN(hN(R z2UN$J9IqZjr$){6anHAsr;{CgXPi==H?(F{IT`RW565}VOxlhv`mw9ENG8yAx^&s@ zN@k^nOmn%_`28io%={gc?*W?#N`8|Z3#mKF(8DjGZ%^W*iQiJ2uvxo;nl~d>Y??P8`+VHpJfzd< zaogNdmlo?CF1wrx593?E86NO2(a%q#6HN?E02(4utv}%j62Wm3c{ zV;zT4rKz)1=KdB$i}sWNXzi)vJ4Z*ybXG3pfy<(3_}>sGcw%xBSp}V{=#%__l)W(+gd#AcCcXz=j;ACi5MBMWfrGy$=>XIE zXB@GH`19dfKI0x_6LIl5wxz5bF4dC964=RVnOFFp}Y2$`{KfmIns91 zx~NXjIIyv&_ccGDAHx`zNd8`zb^7M#;?-!T?gW0l3frUW13z^jahK~gX#i1r6@Qq& znh?+;H-;E5?xO80@ghCPX{YR%n8P;A{sK+CK)Wdyul+NvH)Gn)LedQkI!EJGxzo+T59A7oU&{qt|*DG$8K2_GY->}66vO6JK-xJ z>;w?N-k#P~B5-|}BmY5mrNoDTK!kRgnXHdOkQhTi`Ea-Ecuvsd#U6@Oh$P%=` zY+_nK0cb85kOlf)L;nxo%Non^?Zw5=M*~S@Mm(a5*5uY%J^y2L)qp|$zoEHSuJR5A z{yLBKe|2&iavFafUqF>(6Gq{iP#BR9bc8fxE%0v#)0HDwOg+=)Y-cAtm{v6X5~`wl z_N056V2^M}MDI=U&jUGm#?u}iR_oGKE$`Xc3d8aum&;Xr3*sQgl|}ho+Eal7SD3Sr zALIo8=Z*mU_sE4DFWhS9@HT=9K4uS>K#ph*qIgliebaC!2tK_I58IdX#==R81{y~P zKgcS9Lbv`H;uYWo?w4B_jz>FtDIpAD^A`hGAJ(jV74(EVP{O z@+MwMVXs;C-GFuoc%3oe9}cl@2spaBhjd@^v;+m1c~Yf(xN?=%ZQwYM#c3 z>wfXXOh{IJMCcih*m@J(>8g{FQ%*f5SWw;hwObRlhF{{{aSVP>*_MGrg3 zsBxeG+9I4RU5PL++-}-1=+(qc#X}aaCz4+}dX))waTs`T5vrU}z#3I*IQFWNq5Pwv z(X)CcCl1HO1orY>t$FHE2F1#6!dj*b%XZM&T8D3X>$6aq?D)Agb@tBC<5+Bi)xUQm-_Il{f<7nNxhXFh$3oKW{UE8xCR{<+#@j-U1YO?d#+_6gi z3##rUEl0{PlO#KH9&Z`iIz1njH}Diu~h-lmC85cPcak}XLT^DSF2j}vyeu<4%t zoBSN^CTb4uRi}VH>Cp{o`WErex5uB@b!w^kRF3eO)_e1LPnYNGDYarL4b|gLy~&BO z*%ltn!TQ>s%?Og)AlMsCN z{NaVmQWJYO&OM0H;FUDJcPgwSPWLOA@8WG{p+VGh!~~P}(1jmlX2jfbRWQ9u?aZta zW-D=M&V_Kch&=k<0;izgDPIYoHfR6_lRpC2ja({4H-(3;g!X5lf> z${eLkRp=*#$t0cQz$COx=w|uf8WKlRZm^P7TW>W?T7W68vx_d9OU~u8=N6JV%2jY} zsU1J|?=(BZei2Kt>YY+kH)EE76;dkSHEGKfxsU5UtK`%lFyye6{)QiwoyJ-lf80D_ z*}c_ZQ}`@;lDUiVB%*t?3vr1R9ZX<^&B<2IMUng7>)&zHxHWS$<6vgT6?xaAz83oS zM9_m?xyXjRflaxRvSdC1lGXU!Lyra4ijOSq=(|k+djQ4aI;Vw*bLh%IfV>BvtR1Y> zU$%e26k=l46{33TiByc3>w3jf(*&r_oHh%01JIFT|A&b9?U?#$&ItpbfdCRYFk`2X?& zy`2&2k8QC*J25{57 zb*^T<-N$nD49Mu&aieGA;gs8K@Gg3%{B{I%l2*3r16?LJGAf%`FVsNmxu=Hl*rJ+K zmSyeBvoP>XR;wrV4-{eUa(0xPT{%a+c%k}KML^Qg?zeT;4Fd;gPUQTI#RVn)M=X~g zetn{J^8CG%k588UJG`vL@DjpK0LntIBCR0|C_4d-xolLx0jtop?cJtH#BwS9H?!?PhiZ z(#Ay+K?I49>&gzJ&XY|>e6GiX9RugBYK1lNqf2hXN3oue@fr~{JK?3rV8f`k)=U#X@}B98B}>?5lRzpA2I zRpJMK_Vqn^8dT`!MZ*vs<*62D;goHP%Z{Sqa|^e{4^w?(x-N%*o=Vis6rqfEOnH%Y zw3smGquUGp1}QysN1q5XM2M=SS45;Y;6!9zh$BmsMl=F38t8WkJ#ziTXRns|K57|Q zC_i(GbA8g;JQi6l;BSVfm`{kPyPQJ|do)^9R(mejIJIK4u)68V3zd`;k{mfsYi0|W zQC$DGPhuOartX7u^k3e5PF^)>cE(dIKXLvv-A7RsAMAPP4Ti3vv$74p8$Td`vfY)J>a9R=2X?~wO%E@fux z8a)K8lj2{M^xrA&f1U5BI#6_SPYa?>5R?XdwPu7Pv923C6|9=Mj3UndrZZ35&8m=} zfTAJ4AZ;YApcse6^bxB2h75J)(^W8xhU5b_Uk10t?k4a9%#xGPHrAgF>& zDB*@MJ6|A-)-$IE_tlhs;+gUc)Duim=-mXG)Izb>^p{fD9M#EhpX+h4!;a$8hoEh_ zAN_l!EN9Zlyu^qSZI5O4?PkexMxPP~zBK?l&#dj}UO_NAKgihdee?V-G~(j*sw(jt zT_Q5?sHtzNze1Wn1l zK1+6J3&!)z1_H}n<v3Vm&kb^W_WX9S4_vL^^Sn4*B|BQwcG&2(?J1)7Qk%q=~0V>ua$&oD`+fG!96 z#b=(SDkl^8EhJ;7JAUAM4QtgVnXF!t*4y;}pz~E66*TB@+<4*6eY-tx(S5^=6+IjD zdCg2}h+lm6jBShpEW2)Z+}Joi?V??I(Y+m3ada0}Xj@p#X^r$h|if4$R4CU}?ZqBJ)2D0l(><>i8@sKQ9y)vU>`>%$ppiVQ+K zf&)Q|LOfiKdh4RS-lMGZuyKiY{Ud!`L=f^x(z{OT8r5)4&!?Xsq_T#`_FJS_75YPD zS=-T0BDwbiK4t*ytGzh8+`3VVvXZsTqt)dq+u?WlI-1alY1i2SFH&xd?X83cren4m z6IGWBO;_EjZEje$E9mv=DlH&X`Ua(yKG}HlHp9?iwTI`$kUUj7iqBMUsk)@L?4R`3 zYe@fqPq_PSRt@W|l)KU2dvzCT*?sNC)Uu8<8DDv{hxwH}s+4bvwX_)|rh8dbDHAmM+y4zdR>#np8k@14F8sI0LtTJ_>=EN6NkR(Oed$9M3i^y4+!j|rF-?=Jo7pT z@uDpcVYK=Rh$alz9D>=s>jQ~Fk?_12bR>t@^hI^P}7Mpxl9 zeXbOW^7j-|?q5FMny@}z`>b4T^{syB5i)psJDB^ORKbQ4p{E*q<34(pPPZ@c=m?#-2# zS9o@HwhQq|zb*|YBcG%1HwR&WMt*6#bXzmYSA!dd!_Y#@c<#chW#wMy+^EA?$rEX* z)FoHy{k~&fEeY5Q*9n1qHJzLf2UY%~{hJ-!f^g z-<1TJiyv=VvhcM|5zsl6K-x1@ROc#?@nq@wi@ErJo6%uc#sY2sO|uhvU7C3F1%_NZ zeOz(-M_B}DuqgcrE8peLCp%HnFUA@d&);hWX6>0sr^6_^_(`Ym?=b0HmI-g{CFb0_ zF+jmSV?${Hwgr~h90CF+*t&07NezP2~-6|XyJDx-%sR+z?4=3otEc?3DzQn5`dAFKl-Yl&v)N65i z=G+T%yagA(wD}L>g)s%Xc)nwCyvLUsXIV=IBnBfIND6&sY&yxHw@Xm`l>~?UFlhJhJiboF&p*h z2&+&?)%DP_*w>i-ztXkqzKR>t>wjFQ2Enq*>PB-sg!MG_I5fJ?{A*iono zwaQUuS&MW}Y!#EiXI;s6JqU~_oL9dz1Lia7mal9Xgu)XjtX0PE-O5AH@n=;BDeK*! zTbdK)aedOBaw7N2XemIti?ZpF$7SG8QC1?~0JU81K_Rg6$n}sD0xfUetlidZ+EFrj z*)}&u_5`TBOn{lU;r3uMWsJ`pd!iebQcVj-UWkuryQRjV5yW-j^u*SS@Y70@012d((4G9UlkG7*&9{MiV_5253E6?(I!*>D9V*i+`PSZ@| z_>uph*+pW4EQ=|=xn+BgW`3qwt@4V7pW{8g3sx_`Tz`+rKeO_}6Bc{~*&@ekH@Tku_eJnTkVlm3%(}vR;1nsj+9auW?hr=EK_ zD2M*J5OuQrbAOqfM3qRQ z6u#|Pxy(;q6BE%8D3c;|md8tLVrPr`ctjo~#6lApmb913x?t5dJ7G7+1~8TRQ`;Sx zTxy>TEYE#8U-mNQd@OhTovwoDM9$q_g3^*8^OMhuFZ?(6l6uCd3tRGJ) zoxAuT)_R69?E~8jKi=s-iZxeRPU^Q_Y9}z1tmqIc3rSLRmmelQv!%D~%Vu?#kacx> zeLlp)yyK3N{nmA-nTGyh|6zMU|E8x*4ccCma}40bfJ%4C$rLNL`Gyl%Dj*m0fFMLf z`m+#tuyYu;BuJ3v4cR<=O`O#@gN*=pVJQCc(Qg=F6YF?>%_OkT^C33;^;*wY@ z$9>F^Oqqv%hM}GzyOk9m?2@8|*J-rUS;M%8RI8?-J*qaSDlQOjh-o*$2UyMniKJ1Z z>zV8NX&2cqC-GTThQkt{RUa$II)8Y^^3I`s+Gsy&9FBW2Bxi$sb;K0q+NC&@v@b28 zcR_Z~&WRNoBQwSt(oer$$hL! zXZI=v^}}1{Y0T!)k^Z?DSTI8)iGDzgc{{g0O7-)rRtE=T*V5COIDg zwR?2Q4xjmW09rK9bPTKzx^O?zW3%hzRC|s(H$@Qf14&>O&onR82&T3%3LT&JENF#4 zuMM^>)iA&OsfTx$mg;@K^G&~_(JG$KfGx;d_@xi{1slNiaN!N1^N{m+Z9QyCw30{q zWHU|Y>Nk4HDhPM(g_QSGr4}(NdoRd{YmKkcu<0;;GN?!Wo?0e@xZ_V@fxO7X>d55V)4OW*^5gOW-E6C16^4Ys zXos~IcX^+tOOpF~m`K@M^2LO=mro6_CN^O?zT@$1xLo=i4`SI%batOPFG+ zB2wsmGTvzJ;2hPvp93AvyU?%hPNJQ=ESVmPM*AZyML*h~xaJ&L)%}cuAwyDumwK*) zTstt5;;dWX{nP|n@-lDE*-Dd5^QBQwU3}FyQs;#0S9ufX9Pi?vz-BXHX)L#Dm!SJVA4) zlV-X>*AZgrU1>5P(3Gd-B7Z4-ijR3ldKr$Az8a7P1pWyG%ob00LTF4)sv9a7YmAPn z*uD+c4ECjRSFqGjOX|sqSpxOIT$e6r`whM*6k1RXX_L4_nzA+iX!VI8^!e9RkR0{`MchAbkYa@ zNpJF|$|VIP-kSbwO3kOOyCyfi)~@~f!GuL`8CpG5Y6=M0gJVnJ7%5QZ1;UXrhyXgn z&R`0jhR8gk)1kz+RO%#j?AUCeFh+I)W8w^VR2Xc1lpe$T%FtrUb|z0PEva+g$GWb0 z>l0ZD6q_rt47_wh@GD4&B zM;yNtuUQrwTR9#Y^d)y;y1NX~L9|!*Hxu64nxgo1N%-!f;>~jku~C&N*5DQkRk!}9 zuEC`3H&atMvBv*FabQ(jNG6mlF+>|*$KQ=RgWUq~-=Q__Q4$BHlSfi4&mkAOR+*RM zhwDqC@9_-DOZ;3~WJbr|ANhZTCvXjRGR)L7xDE1XD$jiKGieha)VBNnIW;Pe@;U*| z6dp){=EqL(FeEGrLs!t3_ZL#24sLu?C*=C;#e$PKoPmV^!0JbwA*uMIppTHp=(M{Mu&=UKQNZn(P4h6Gm`1Jim4^7qQ zMmr0~lHzT-elKp&UT&-`P9PHobc>H+m!bTL5?FA)6#!NU47Abx#KFxefE5MW1@&O5 zSIx*S8V}7_ZS-M{Pc~?$7?P8gLlvQ&DhY^sybpT@zl1+ zVjytYKF!^1%~TNtdXk=IpZ)S>V$pXbeoHk7UeXJBjG;rGXEKGh%UZ+7UaCd5f+U}D z(WHh}h|@@Y#Xc7h56m}+)w(_+xT}-W$v<%GSntt{lI!S-3X!#*J)Q%;7O&O~s?;9k zig0?6AMZc@m9$L?Ti67@iue3jY$qdz+-WGIM~rLE{($NvHY>VmZgBmCBDf6AjS5xr z<e~vWGX0OPqF$&*h$c?hVBO z#K)pe7U&SQ_lr!m3CAHQfhAdTpnbY}9*EGN;MU)PT%|CDdX$oxVy52eLI~#~Eq4<} z;;>XYb=Yvnd#3%`)TqbrSqdeCM)$x^X;(GSW)R6bI5Gfl-F%vTZsXx-@qiDV=^#G4 zhkO%hzrpsi+$U8sltDdO&YcYYJPpnSMxdJyUT;A(bb;v)=Z1N2I6bQk@2@W18o&B=k=Ckx7bwx9XDuc&eA9jd*q^2)pM_}O9)-2+zE?6Vg!N&;@6 z4aKBPL*6`~fI%yNx~=2s1@|A#wO@3#ezBLb%cMi|GHmFo3PXADnLVvp>taLp2d|8e zO_E~tOgSTGzm~X$j9GKl4TxDQ9La~6v_vgIOs-*&BF`Qprk_?~$`L))RxL#*J_k;n zxfum6P}fKf(}##JWg8sb)I$gmoo=#KYistBs#ti9&$r+T+W2x_pJ8_Pl_zbVs_2s| z1qPfR_q@#*lt}u8n~j<(Ghb6K+8?8%G4rwx{E`f2-`DWFxt)u@QEeMMd8_8t++eqv zWX@$DlE!~u6ZVw99cRKXfV0YB$<3%gmp>yTo-6!GhiRJB=EW6d167gz8(Sk5+jy#_ zT@Z=jI#Z5LlOIU!NMh&oc*j;*RqzRGIJ2i0ouQ*RU_%t2dQU~?J%8)`&7Ed*kmY(r zlQ{`eWnP%0b2y+Z|1nPzB_)rZ!6-N2`g_h;^I0SfEDyxjN88ca1wWG1u8#!ynUs<%U~wjZ;MD7*&W|9&Mju(blBF|Gs2MYqfh`iZM~2QKSRfK7&cO_!*;d>l*77jutTZxzfk-m4@$7=0EsN|@ApbzRFp7V!L51U-f^ zfJ9UTV0GW3K+v(&maf{C1{@p)hQ6vWq7NO({P1M zoPy>mX!Z6C)Ul~SW;x>ubm^7?drH(J0>w+M+UjQB27j^GstF_b|0_D_f6xDU@q;v6 z)|n5@mMvQki>4bg$D27kC#9ECqrB)qf3`1sXv$Jo%0r(gXSS^J>A4sS`HJ zr@uEsQnzu2xd8}$I~{#g_>~l~ykiZKBy;bkyy>XG))YJUl8Yo2H$@9`sd*Z5Cybb6 zr2%-QhDNG=#D#F$6v3oDq>wdkbR23O5fv<@4zCjIi|VDyG@Tr>_McCdG#fn4IsK*x ze@pawgJE6J)%@;1il21M6(Mxrc{T7f1nh8T{v|i#^JXdlBTA2@9~b2Zzi6nB99)z1 z11CRb(JG^Npw#sRNa)UdR8>^u7%+O#xZK9?Z?LgSF+^)LeX%M+tT7J$swlC=MG`Mf zI@M`}ZbI^o!;4FWD<0+4t2(8R*xLxu`E1EkO%FYh15k9cGYkZT7%_4nkJ4j>>?@rs z5gqZEy=RMrJEW~{5>NduVJQgiFwz`2J6@Ik+F@Ga{-ye2r@<`aAEOMtZvA)|7^pWr zKZE&>&dPUKBSZeF%U2TGn&J~CXz;1Vu@oq1eE%t-TnraCZBT5?yVW-Iyh>0xSFQ0M zz}wjU$#=;DTut9pUljhLu}t$~MzuZksBS~ZM%+*Oc>i!%2v&YLX}ThJEjOaM>VzJ2 zH}whwukj&;t5(z=%{4fOx9LL&=uxUO@kGwu7Wg*f!kBd_Gl%bXy@3bu9ayCd+m*4H ziCJa6tZo9eQpGnbBz0@IExD#zDm&Kr_$c!t0kPM<^k>Gy z0;>mPYV%Sw_Mb*>Z>|LHz77(YruUvV3XvE(}L%#{}&1NwCn6i_d z?CR%v>I?I1*e#KtkIU4Lbvg)yg4F*3ROE=nRgV^`38je&*x!`*=dHeaZQ}epZ_&5f zXUN~Xy6ru-ifWlyVh*=@#Z*)9gooQzWq}@Q=u&vOHBaoTe=7DlT78>4i_j%+AwZeg z64qhQjtTFIy82j-nrBZjp8Spa&aq5vthKtR3LC!YvUvTO!yu?5G`$?SP^X^DVgW=txCSDZ=c_sKH)>utNnm*Ew?m#SS~wIq>a-lSNZY( zsWYDKD3Umx8#NMXs5NM7>`W75#KqU3uPv_cdY2m*J()5jI8+_b)OWSiQ0O+$G!8v% zuVVfK{sTBS4=ipt=Ys?aPd!lMt@gwVF*E*iFE;F-C}3c}x;JKlK9O%gHboB8W1t^jYQ;DHshc03V+BJ(%d`j)7 zRUE2ncEd{teq2lI89;+x3%fz>;=-!7_m`OQ8h`v-CA4?H3{y?>Y_)9N1%Vd9N9Lq_ zzU+n~d=kdJ0N3ksNc3d6sr ziM{*z&g3Dzj0(H>pMU^|YFH&W%y_1#eU`U6;i5l*XJF>zkibYk06@)X9E=ArU-g|| zhhyFje(ZboQOT2{v21Adcqy&6weCHqr;G!PXd*{{6Fj&|>w8&e;y>PbbP-3_7WVLY z+L;F4CcRt58^&gQVYe<>k42}-3w$}ghrQC+GC`t|indADP*Qjz*Hk+@s%cP$uD-Fc zdFJJ8UWiwSH;s*J_I9ph%+;9RcRq?Y$tj5vaZ$F<$Iw_6Ocg|?>xsd8v~R3=Yf$EW zlT34dyKSFr{a{?_K9z(Q%$_&H+Y7;(L@gzLVd3)8haQTj=*Nu3KxxilGj1!(kFusN z(XV4&uZuf$>Xd&WetIHxF2T{KHQ066clYW4_|`aB&F%gGh&bRBs4s9 z@^t1B9DZQ?#Sfym`;|YNXcw2!XOnNCZzBlOK;V4Q6>(43((&y$8A12LnKf!QlcxyM z0<+H#mb!vR9bO~XH=4hpS$d55B6m`~hFvY~Dx~86PGz?+_9I{zYZSBwc?P$Ql~TiA z(Mi=19k%a(rX4RUg~WDDm;UJqR^4O=kh=y8D0+El;s45|2xRxCMJL^gu7jHfwZTe# z1J7>&t$uzCZ`XEp>t={(61jXV?oc_bOBGGTN%5Yr4|j3AfiKMNf3M+ZA%a`5{>Ppp z>J_>T#mTte&dh&EWo%RHynM#jc7^u~dVB$MT@8aV#R&#pCryN67|hLembWdcs{H>4 z(*IIW=4A#v;q|8OoG_s}mwF>kaeHUZ=SXH1KwS;MO>XPz2k8hCn%jjKbp@wpe(G`d zHRu3oupbBJ>O1S#Rwq^W_#CNU7ab}+xP%GELRK{xJ*0PHpd>~#x6hno${$N{@1Z-g zRNE8x#RytSC^H3=jta#7xI#VxE7$PR0~@k2yft8*L0|kBwl{=fB&lV6uFQ~-=6wE7 z0&-hKnww!f`CygA{4%3542bIV>j(D=%EffUi1UK!Z8Mljz%{FZ~qU$RKux=fSh zv!nj+*5uvBm%2`VPwlY%ujtpEZDpXYhLawq$JA6;>XDLa-@jB_pZOOohrPO0$gY#mA=qt`G;id0g0p`W+J2c*CKP_ItL+|`ItxyPe zo>TpDu&fVJO>TzEA|NS}`em?;KZ^Zu8|94PJE}rXZ>q1w!N(u(-7_>$(PD3Hhv{`I z1Gkvee*jAH0gEFWH=ZzI?7K`xTin8Tk3^9an+Zt!cDnq1eSO*#&hbTKt^yZ2XKh-+ z7n`#CiN3KnSGwpP?@dTN?ej1hMxe<)Ri^s1Ie17vf(o%TvZ92LBx7H_{ZRW&QukP8 z)2-Xd^ji6707dUljE+KvA(W%*#WC{8b@c$9_wz5CLTp58%@xQM#Feg1!c)bENct)O za?){^!RQ`16JFrB`D>KpeOpOmj7Wm(rCNB4vf6wy6`3;G!xP^3!Oz9Vi@>B9a?l1W zMut4_kElT>dwtf27L-V_r-`Es{Jkn=*SDm>v zdoCrs3Z6w8IxYB$N+LbC(C4VX@_Qjfp4VAHJ@sJ`W(w8{Bc659olsqOFt}>})goVxk1g!JhO-FvH z^zKX;<{9uZXr9~OGH=~3Q(&1`S-WB8W!ln2R+-6Fas{O+-oq{AFDpiN@(zISt(=X)5<3KsRmV68b+z^&5A^)k{kRX!c%>e||Jr@I)0{Yx1k+yH=wWQ9n*Seae78c6vPw zLg#JViC(%pKQRZFDA%Kepe!wR=YDa23);S_(wjVa_nW4PlGzdetFi-NFKDA?{nTzE zXki#@Bg@}~Ro)X|xdJ*Q`(5xC+4D>Zbk;rLBa~z>ZTjIJQ^Xg{$AUF*nk?BejZmE5 z-@?{tW%}jO{z{{_$6DSv!;B3VO^0JB_FkwoS|0wmT@<0tZU!BF`%|si<91;ud9gjh ztTw-f!>#g7H+>mHDK27t$@X4*56N}kqu+HSaMPvAh~V;!R(pxfagFH+URn4nt%)Ct zf!{SbLi(7{91yHM6{TQ0mK$cRBGl5Liua-^!zTMpQY#0c3uN5d9mCdHj6Msp$0kL^ zGT~xg6`Lyhln)?2B78O@!mg>P8oi%PcM3KbtHKjh_s2sfHgMNVVJvs$fs&$!^GLpa z85wmd&8OsgWS8=Ap2pgrj<1GU{kV-G?&D@uT;H6 z(qIzKTT zD;z@z`Y}vEpH`7BDV+59Z#qj00y+DimFq=NYVa(XQQojzt`pWQn3Ay2qx3A*->0Sv zeRDeDp+#up}BHmBtG?5}t@)O(q?2XMaFdp2k3bnj)CV{a`Ov0jizaOrFR~a=V|C6ITh3@srbD%g`&lT}gfIku+zHB$JjqNl zS{>e24sd3hnmm!>s^EC7IpX~W3t<7_-mx+~D}f_7&ONtXk>>1^GOR=SSZe-_u-{CA zP=#T8-GgZ7iWignT=6irLmTNK6KTY`<&=H8;YFYde##-W;FY#JxlB+5LTxX%MQI&7g2T#F5kNLqY@} z!GV{Wb?MVLufWGvu_^@n-CRUl@gx9zd3e`i0sMI%Bu+vzp64(}Do9Fu$q=}|v^~4J z^6RCH1vAuUy-|8KaWZ89{QO7<>8*pZJ<392+x7@qutw>KGI#)4!}6_}_SW)}1Ff&= z(m`%stKKI_okmcVL}5$bko275HVg`ZIRriDRF{Xjc5GA*Lc!HT{*A z(w@~m{4NBNR=Tj2Oe+C6{|AtGfWj7~qd%8o#3nmwoBA&15md%q(Nd}vOPa(vEi7Y( zERD&^IT`X=D)M2=O%3koxw7nk9@Ase!!^(jX7u1~LY0IV$;3+=Uy5>yr%l0-P& zuq2Z{AW|!iX^oT;Bi*$mxb5?i_rw`}1>C__#IoO7`D-Ja1_Map>_?OvAWg!9PUe+N zrs(>}vDEXhLMwdFQ5S*AHv{tW&9s19XR#mj^JBS9>pgtYK}<4_uwzFYxo&F4ZlJEj zRgq=e3bLNznKh**3M={j3oXU)UAm$fTe(UP?t=4mlRif44Eg>=k;a_gdaGsCaJ_#f z6hHhlsl}C6pm=lMxtIfY{$Gy+*I8VD&}pXgW2_Co`5(ZIQwwZDmS$gKE(PwWan{%R zPU60W=+%+Xa$JvHI=Pq9_lk%3^LU+rna)S|Q@-g(sl|a4EZvOcksw0NpCwUr19VOA z9Jj)Eg4j<2QCX6%-PF={xaT%qBC;ECU8j5)E39XJyXiheI4}|{sx{XTL};H5eL3}F z!gDy!pl#amcwoir)LZfU>nPm$2c7)bMqN?_@K6Vpi{KfGkit^P9<=+iRN)zHf20YsG zw*qJ;VQlV_{S^x^UJd9Ir1q`m6vk)!yKo1-9uH$KOiqr3W`^Qf;cLtSb8Uf(JU7mM z7jontADbZsp$dXqRs@}@o1mW~f$*sAeiUicJ-z*9rfz~K{Y^um=#=S5iqNM)D{@Hz z^6;l50wjL(;?D<8;(ce67Zx!@t&^UMc!RC;Qi>KH6<$)#0&*up<)mVUsnMI;`@$F| zY8IKd)Ko;J&&-EH13JyHJS#qMuBewp{7EV;OCtDr>O6znm=6 z*jjoh%1st&0xT51{w0GOIF%f@Xn7gT_z)SceV2X+L?(8{3^QsjwnHuuOdS}b#l!_z zTOc(E%8Me6d^DfX&Swv2a31%N@JuWhrpDAHRKFrCF%L9rw+NQle}8>&d59L@JW0$2 z@U`5mI}eZA;$O~3r90$}5`)>;rB8qx6S!6ZByFstGXGy+$s&kDgP zK)5EMCz^AfY|jM-{5y3cifp|tR4(utTJ=4CAK>t?-Un(}ShiU2Zub!p7c^s+e0LNs z_I@29Wm&Q!(}pb=sha9@X02^b$nYOu4Pn<(5T)MQW!O(R>CSzy3Qi=p16%Y|r@kYl z2ja+Ci<^CK6S--2k1}3*DPCWRqm%NeC?on+H7g-GrvzxRUn39`txqPJxw`OrpOk z)8|@z$dBKocbz$#!{%KB>louu6a)PGY2kJhbUrfEJlQH#JC^rVIj(0<-3*Z`-Qxv% z6gD&90#fbr1QoH~16JZ%a#HHJZl7%-6F&giB3>D;uF|wPY%&7`nJ( zwBxb5Mcl{plkDItzPb2=&hN9bpK=^tR#+p{W$t;p>&*L6GLof(8+bmO)0E3#+e>0( z)eqH%J6rA9Y8w0u$~K;M`PQ$64{n1t%p!EMKmMH^KfQ6?jXz$uI=SXzthtpnRLsY4 zPSp3$ZO*ec1aqm;K=^UbxW7>3=~?5mW?u>az3BDlN3+BE!uic0#P)-8p!R@#gpsl8 zs~*+|ngBO2z`)xS=6+hK3)imSRd3AdEFT9l=f`r==lu`HBmMxe3IFicxy0@iqcZ6{ z_M^Tnb3J_}Z>X+7Ba|4Vs8}Qtc{+X8%M+rs{KAtXkZ1{BS7TY$S+S=2&CauTkt>!@TPfWtSg&OM(19jQ->Jujs`>EH5LY0=Xwh zM@H$)Nd;7alh^(M0O#8cs?;mlDlQ`%o2TMNrpir(tQ?nqyA8eiDe#70Bkqz7br}Pw zMV=gqqgXVjzB#G|$mew?QPfse;!x8+xtYV(Ag^yQ9V%=%hjj9`qblcHhY~wqm>-|D z>mlM`^{dtJ$Wt_qfY>-sqNru;4P#neyL`R^LYnIA1Jtk0&Z&UEe(t%piAM01s^yD` z+cLahnNMiypv_OR^?!#jeHekDQ`L%tCn#c;OKEh#4=_v{C6gl>$Bj`eyMBx9lz1AYPjLGVaeoO9^?+x_m~H3gTN1kN@{1z#AR>?JE;Lid9wYHxUi)X!1dKFZ zM+HxHt}9p7MB1DXWaMMZcK~4;JAkZv%y%d{$R0+zCnGj}u4Ws%Gfrdebk`y!yMHw z$}#mj&9bZCpW(Y`iFypPhd@CMus?Pmd_C77-j2-Q`^4IPRF!n??mYpF8B)GP^E0_m zWbJ?X2UHmD8Qh3Z^B!*{k$;xB2J*2)_Uy)cvm&`J5}7s~jJ|EFF*&$7ax6+p?%AxH zT-Bg5pz>1Oy2z_!)utv*G=A%(BIQle>Ayxb{0RR5GSdOHdmIqDwihI2(iUbOPM31*XE4E~l3 zI=+>bgjct)CUbxOu{e6f&T7lpZX1i)MU`AaqJ>R}MKx!LXd8bfZypgzwfQlR?l>M( z$8#*Fr2Higl5tIZPO2cLRr0Jr%-pXi(B`Cg*=(;m(;+Y;Nxwqp0XBOkzKZeom819C z=snIKO_bAkAMH`jT!NqVT~t|fB4Xdqp6JaGIqx2&{2HA{mWh{=3OhAhhn0iZQoR23 zYlWTRm#`%sD}z|`;L;=k1J=aOAKuj!iobE&!fE z7eS+&w8Tt<=+9Yd35Prl>}s5uX613Ow~hfsmH<4K?4zD*b^k}!;RB@-A6-+S)#DjF zFsH^-`{kVgZUzUb5l7+TxRN3)3!yPSu*N$n#qLagU>wm=2C{Xmqc|hl6r&NNKbxx9 zgT9*PwwZFQgyOK(;I0@e($SBI9IuosnGgSLrFEf%Q9*B3X#35qhmpl}^$+!Qb=q&*Z*UmynkjqO?NyZ> zI}Pqza|q11;$uauI7{*31PDGf{$}{8A%MfoC`n=BtG*t2-r+%mZ3H`#CXfg5{8g<9 zX&Gf^M1Kqx9IjLf9b8tdp-QRrJ{8&fvKf;yEZZxZ6uOGUlit6qsaih}B~$ct7ha4H z$X40^!Runk3pl6T>kZQDIQpFlQhaqbTVYa^vvw)|ipjCzsNA>V%HHpKFK=ytF=SKH zFX>0L6oE~!qEwS{3V#bLy;2Q~Thl#dIetFFA=hF0xLDIU40pf{>S)?x`3qji+OPA0ss3hO3p+L5+#!dT2wwXQYQc+t`GZHgK* zeg+kr(w1$gxYTCm?zyAQu9lu!TZCWC&v&YxG>?bwl5t6Yu>a+fK#S78so+^_y__Dq z^joZ67TBBDa0^`w401a?mKo|#SsUO!k}hiKPx=votAhH8pA6nel*gTM*N4wt5IGQ` zmWN+Ty^((=A1(N17{Bw4?%6b3Ekkl&f997I%`aElFNwz%|NWPx{mL7Hq2= zdfa)FJHNOpxUl)y#OgKU{#kQtF>7Haa=)3Q|vfST4D?u{{HES#QxWNay(Rm&?4 zhm%=teq)pBgtdbYj$Vn0FE=xG86UP&Zer`sGj}gntBcv%LLQ7h`7r*h)R!ex!#!;L zWBfeb4G|GHQWUgpqr+`TYjUM2+11ri=(|buxUOZ`I=$cI%HWJ|2Uz|W1I_)m zYxJ&mA36oCUmLH({t4yznPqH5);Yz_+yAbj?*qhGP>xVhDVwW${zI+@itdb@ z=n6RBBXi>=kndei#MtzgSoVP58gg5_E&|Hz4;o6|7a6(f#5vchcXjtx`RcNa>pO6@ z+4Bt)RODw?GbnJ5K;;>TC2IdoFbn=qAFkm}S&U28MpY!ll_XIZ*z_A!Cp9P(|2k~u zfqNQ5E3Ua3R&%+$`JrttT@xh|!j{2kq`sY9{5czSTZ=RF@vEkD-)dgcCQ8gYwm<{v z-B^CSX3%mb24x*Vf}2A7^|mt`j&o8k+ZrI1e_^kux*V7yjhnTg9HEQLXkJ7zeSjLT ztZ`JoY=dZD)dR6uP|(tp3IUmYO@<-P-7!|sV|wuV_bXYOQmm*O9<=S;e~{*rI+)u4 z{_b|Q1KbVjzG&sz;Um9aF=qApASIh;zOqh4MH^#iDL;OtMup+OsK(X3YnB3fICc&c z+KVv5S5%VUtI#JU_t6X$gBJ68Ga9UetVi$J(&1%i3yEUCex9W2W8;yDOn`yWx6VRV zzVm&IoOiVt@2c-9N=-FL%&R~fmHWvTzb*pBE{!*JE<@3&J2bCQ0VucS#!|T-oAksT z(yazX3Zd?=YdTbwWU9J`4Nv)HSgfB}k7@{J9w!5{T5be0jnQ=P@2Wakj9#bD963)< z?GIy#kHiS!zl=ml4oJQgryH`@Eg*&S=cwr3f~-|b3q}$kw)Ldk)D>qTmJxr z3xKW;vG2Kp&j<1|cG+bmkODq`r9q6EbZB3;R)hKa0gzd*r>N@=H$6k2)Tf)-L5keo ztaJ7INSz9e+#%KuV_=rjD&_Eszai4BA+I%Mz*nIASxr!r5*S0;VXKMSgdcUZ3(Cd| zL3l0RI<^pLkdWf$o@MSOl2Y(Re#^aU<2x09_5BkZr5}2LQpWaKNG@^xzQ9_x;hl+E z>WB(e?}YB9sO$g&IhO#4@E+9_*=i3xvN@UanS{i-H8u@Cw%PccJk`O8^T=cN{yc%h z(q*CSz0m7HC&|SU(2<|Wzpan_3;%sh<^L#}?SKAzN(HkCq48(-qO|69CB_an*4>1{ zspo`30>Sb)Ng?=ONm)uM17iX3O*9P>@oFiT6vG`iO_;xo<#d1OL!xA!qeXj`zGWtc z!FdSZ&9KJzUio@u5w};-Fn{BXB`^(k&354`$q(jop!F<Ql{Ql1@ z<~ck;%enTA#E!`V+&S4uT&F$Mz=!?|UEn@U1l@8gg{IrIw7-&Jn=(9*_`F(t(CYa+ z%{L*;Ry=a&Wp(>me5&*Sz)206)jeHi`RVCFdw#IED%P*?GKjDbUM58czm^hzxNaAx z?8u92Pv64s+t>8zOC5bkcFKX#v_CG|(v>uYuP>KCjZ~B8TvEF$J>6{k8P4!Q5P=ji z!sv_jEQSVtq_6gvYHsqxqm)eq32CFZ{(30CsPstQ8fgGO&MG%{@PgtZ$Eu6$nbX!z z85mdDB8HTd2~t^RXb=DXAQ8CQfc34a>9x%qWANcwRqu}#cm}qXq}#>>p_Ruv+?r*= z1#ssm849G-l{?zKk5)8lr|k)^)zmq|ldXf)x}{b1|+3 zV2JY1`TDGom`YDBtL8|}4+WvbpE2TS!3|)zmYL$lIKdtxtx3MrS@9CLItP=7AWkwK zHpqcS>_M9Z$AiYA;w2E(b1KoxpKFVz|KT0=C;f^Ftt`a8BVm%LAA3;hsjBlaCXM>3 z`en~$;+%LwB7UO(`yF9t?7#1b6PsE5pF;3mkb$+)wuYCw7hm81Rvz&_)DwiTq%V4wBhqXET( zwEvfa>`Ha-!B)~p>gtM$CHq5)z{Tw+{Z=ISI>QWHcIPl`BDdXgT$TH#K{R)j*~dyF z;BQ5u$y)hmq{*bm^kR7*yG)&T8Zg~*62}qna+p86WxYp)2z}X;1gon7dm1*10v^lDOq$)5cEymtB0fzAC9w@5DKi?KejdSuHdO{%EK$dk*>U0fEm;bB|w_>}O*1CNJ+O&mi4hOD0+(o>^@u*OVuG zs+bcCy$3pXej_z@Ap=U;Dksv7buX1>gP7 z!H!b2pYq+_3mT5caw6yS8)Qc&MoeFjV4uC$_7&^aT`K{p1%a!K^lg)U`w}7r#rqr) zwsq6h}ZY8Zf2qB40S8dLVeQ5lOIRp0eMuJ zYoz$hK^tW4UyX2+{cAXA$VrrBa!v!dWVr0i2?`pyT|u?f!SwWL_-{On*ERkoDTrzSVfPqqBI)El8&j`+(`^9qI7>ZHaF1m2|3 zs_&52EEQ8d9mps=T>0*>T1l31bFPc`FuaH*(ocu(=N)3Jwn_Zg7o;M{-rG1TiZ8!q z>VlxM`djWxJNm-XZhH8)^PWNcD$QE6KdQ)_=Tv($-c7nqnDJTe$s}M#=QH&DChT!S zt8>i7V`f#xAU1gW*4LkX6wQnQi9R$})xD#a#pslR)xu;@=nds<(#o>Z$X3#6jUGNM z@6YRi6sZhkF^^fVD`=-nDKKQprjxz#uE8JlNe|{xMUGvaEMi!>HAvPG%q{pH-PZc1B!{oY%WAwRONL}AI{>aj&BG1v;oWL`KXLj=czjP|(MV^|7G&bfWF}^( z@vge_#a`>wx;Z$~2yXweq%m>rWdb?$qi*%nM%QMmJ6Dr6&b#V%KSaeI-G`2_KCkNT zAzPx)*&M9F)}P#lWJTVH(La&S;<_^&6ffmeT0K5LUD{puDS|}`uVVu}`ZG^LmKCxB zQ>#~G=4Y{EZuMI<+1KaU;(bJ+c#o@(HJ8IQrt9g%s{F-$crd&#Gn}1f^5Xs5+9wEX zr6^J_cGByT#$*_NGpFWxd)0$ZIx_|LN4PeR6fQ5IqiUJ_a68u71#Lo3iYa!j|fzCTaix+1SJVqpKqprN6Jl!@gsZWnMz0GD&O%1B{)7oI-x+ymGM{qMx;!4$VzN~ z^Id&A4UxgI(4En5-m))HZM@cBqi;t2gM%6%&hN!vEtGDHU00No-*)|;zAFhN26a(; z1ia>93lQKtj4{6vJNY;|Dl#aCOY+Roav^)OSbV$7nlyru3(4D5xgYpqN+Xqcw$P=& z_ILbY&nQ!>YWGl;j^=W@y3tYpJuQ^l#*HX)J5YX543H+R+D*Mla{!d{mqq=_K|SxI zTG~m2SM6{Yxu?+KhE^SmVQyzT?FPpftL$xzyzmU)&m@=dHeMe?k5>bgl@*`qD`RVQ z|If<3Wl9SI)MufC?11>guM(z|S|?tu;XlCxCab_^YNq0~=OJm^2fQU5obG1pAP`%3D2j_afM7x=*CA zW3G76XU2BB39@rtv-ln7Bn&992wYouN8Hb*W*uRuOwIv58;QilE%`jvmKz5Z4tk2- zHJ!0gY-xyyf2v9pYp6&;xvgoTkbRT6bskfc{ek^0E4SfEw*^7>uZJPs7gCm3;8(0k z*r(XmxC*AhmnM@mbHMH^(qFsDn{{IEwGm&obi2JQGaRl)HW z{Hktn(bji8`HwY6-fxlPu+Ixu`~YicQVA#K+OjRT6!Q1>%F~jYKGmcr!MQ**792e* z8zeq6d*ygiRMli+a`Mu@F(rBG&wWl1?g;~-UemmgAJ5wWTVtkDN zmUlmElXaxhCRo)u?*+l<9uc5S*N#ZSvR)vJ&8T(A(G1u4;8 zu|Iz$dWVPbE%K;6y*0avWt2`f{oxzS3|4;^RUEmKlszEZz=q!mJ~;Mf)TFk?ncU2D zgjeOe+A~-7oA0Tp2@ZT*bVeO8e<|V!8d9>lzHS=L^Flw(sMv|j_uf3T^U1vMBUE}~ zyCTfQk1@~zD?d};Ei2(>$FAky|tZ24r}ARVpYGJKtQ6kD+|BgCwhTWY9|uc*qW-v z&T_}_Bp>gZ{NJdGBQjj}Rs2%+JZz|Bo{4bUbCVzG#4lEEzfrR9nMO3U>o>Lbb05>L z!Kqd%4~tUMy?Q&NRk6B05JLrO2^^!Z3N&;q@m}{n>q>3tT6v!t7PNLJOWKBsG#z`C zyt?*onr%_4Mz}2|Z|KQ@w_87bSQC`Xf7O zyYw+L7B>#O=H%2#Nzc-suQT4;MU$z{I8EuF-dCEYk`-h=kFi$SB|-mOuv=-(P^^V_{K$IQ#jAnnS0_oJ%;3-`~?+~rfv`BNN?uuB0A5WAnsqEUbo|)$&)8T7B z=3Cji{Ojy)SP6Fsn+xsMwEL_3`L{w2Cde*enp{0XzR>*y-iFSdls_oV^e)?@Sc2gppRM}LXs;cefe*myV0!C(; zF;4Qbw_^Bte?f1Tjq5{+(6`eqWHRjT5MLuP ze3eHR?EGpu5id}u8^iwr<=MV;ztv<^ZKKUNg_y7%9uof}hc7lRb(UlzVK%n3G>vd>oN-(uI`=Fw!ho9>7>=0sg?Jj|D`)j zG}#{8PxOFQ&c$`UNc8yW(wJ-p zM_B)U?efL|m)Xrt@VtUncjBOv1;jzUmQ@_{DfC?rIX&d72mw8bvfFExigwGfoz|n` z9M65x{Mm)XzrW|^vNqe*f(hgu-;CFI0VtrpVX?=7Pch1EXwNF{F?%6e)2>sp@YJ9; zUPW;lksDLtXmQp2Yl4ko1R>O4RZ0!SWj$2ASa8k8@QR=?XPUB*;(E zipQnLh6H~!Cl0DgeSxj$eU;d4$vFeT#>P~b30<7-=N#F#j2eAL3B7uL(o@oqyLodi z`@TNFd>lAcCCnqSBRNXgoCfB7DXvNusTXq2JUem?x)eh-T&CwQfcbR%vPyqDT~dq$ zKhy;rQU8q>7$KGQ?JR=rA7+UZWW%Z0AYPe=*u1Ho_S`b`oa7@N9HXh+^0R+iO0Gzy z{snM23fU>Qn4V*g%LM+Mgifb9ARQaKv1;i4y#fi;-FAy+Gd|a0zwa|>^Yv?8=50Q{ z`KCWZRD5)i-P)ctI$Dt2z1c3-j6=#1bQi(^8xB&krtVjePHK z#-W+#vQ5xB*pgHxQ`DglDjsX97`Yi5ptkz3-4_ZiQrsO{pitah zN@;V4#i`gIzoptqKPr$hB_1|*?u9J zLECuF4=*F8F$|>@Hfbel{Q6g^Wk4J0T>EmIvv!eNxEn2;kf8g@uv*`wM;n&liz znnA?0{k2x3+%EvH-5C{j>KBrCv9v&0O=4K+j}98!YgMVK?-chxx}=%jovHhTaBbL4 zt(<0UgAa6-4O?nqNxzQYG*4SKrwaNpj4K9w^W6UxY8kLuR^`~<0$Ax(BW-SG&+CHj z8q8$VsE;(UG{4jFx{i+x?vL|h+1}y`Wa>Mu8Pd_4N$-N*3!%x25>AF0#%7g);EYwo zSdJ8RQoHi{;t-$6n4fOkkJoI9XnLjCdG8T}HN^T{^wO_Se$lWupW}`_Iqqe8Utn(J zi|oMzCD-iL8R5s@-H#W+Z*l?=M93a%a4si$P!WK9CrH4bg_Em{QgQ$E4@SK?m2Jwp zmkPUy7|5<6@V@aFx{_S{OQL{2ZCvL&pAFJ~M86cFJb7?rfAFlJ%E)QO{twgzitSH) z8IY;bLQC5tF;tmxj>V#&{co5T8g5?g~&NYcutyPrK#O7eD@J0T92)K6|t*wt>b4we6 z7ZUhE^_~2aCTuA)ja&fPj6Wbp>u^?yLI1r1&6(iBH@{ei6WBgu$!F+0++XWcW?>6` zN`MG565s43fa0RQvBV52k4oY&gi;Fn{x0XU^)>~lML(rAQ&QcPyrqk$zG3pCA;9bn zcb6ah%CtwTo+}pI#61{DS}?7PK{dw89h?ebVLSD>0^j!59DB*>SG=oRDz6XF_2R>2 zelZ^CEy^E`#=capXN=_`VlKXR2nn({^6IEB4h7tyc0t~Q9{Eo3*{{g@QNvv7Z4pN_ z1X2)RZ{tC2XalM6*zQN0@97*xuhu?e~%l90r< zUuhoNNmJQs#-pSBP{KC!LU2$^@_Y=ymO3mo9%EH^=w1YYd6|0uG?J2-<==T_U;vYraAwxo zV;9-mZKL%FDJIG{Eag4JvPudfi~j2hbn*mMzCsW&0ph(RB{Fs{aty*@KHZGe++NkBgunv=mc~=eL%>+bnOx{ z^=r!X&v9)=ULDxi9c|+ML;)Rlu2iEBJHvu)oo^<4prt{#XP1;Hp$79;C#c{RG>_`{cCYzlYcQ^DL-*&cm9pv+R6Nc{~8Z&BE*U5@E?!yp>GVopG>^}|FZb? z>^4~3ZQcZ0yO-wNS6_$u2s{+~43Mi*Kavg75P2jwCI_O3<-1hV+Wg_|zrt|FU( z4~~_wrO1wgx)|}ku@IA{{YB;qZyln~jfc$G|7~ClXttKzK>w0|M=5CS2Ijv&TpcnT z-G76-g#IJBOQY}Kps@dUyD&N~?0>-lA~}b~$U8{CcI^~7m@;n2GIXkZZld(gCXB%u z(+dI}MX!_LqF1zg7No&0Gh36PLjHq0nyhIcpac6CVm?U%z@RdVS1wbL;dbXsFP@sO z(a^l$bMV~I?IR6rj;$ERzn{!~a?u|cas~)ZWD8m?{;P$kN@Z*XmmDix%h0TS zVK5hCohhvp2M;GgnX4@AfF7jBDNl8a)(8Yb29`ohH8U)AHV!>NOt0qizc`|Z>#%YN6j_k-H@|G^+Mn4SCwLzZt+B$vV(dU2am@N_dq0R@k# zsj3>U4Wj4qy|kn_>u;MGpBNlSEPC-1hmGz5`#o-$9>zCI%smUD&=INXq%2g$#`B>} z&yO0f`g>_Jso%5JvVo~Ax-dIHM{oS0drX)`o1e<{r+0QT(IHQ#2i|wVN1?|3>00Et zWeX#rw~t@_sN$`Ls*Jdwara=Hm!kD4doVebf8*!g3sA+s?NQ+PB$aLoi+g;920p3b zb#@szT3D*t3JYCqH|;v03$dM+$_Or!m%)kB}NWX<{AZGp#fvW2Vep$&e&-F7IBCh=?f7Rt; z>f5h+y;huy3%Y3+TKCDHZ6Pq8c>HM)Covb*Y<6gz!gf?wwecq(L&3 z9=jnu_LjqEf%zq{P9gu6N0wlH6jLpyZ$qXhuPWpyUN92lY6#8g38Cw0&d8V)(X=*A zf0$);N}kTS#jWIKZm>17jp&&wnk@(IUx4RQpQdXv?XUIPBq=t>;Tl+0LNFwD86Px0 zz@~q2vsZcTYy;UbFrX_85cI5c_No$=$X+Puh`$&+Z@}L7?87%#Nm?998rt#qirBvU z{C4qwY$>-5QlA|{*6wz(PAg3R-e0Hk+t$X|FVG{vf`0EHPuzDKXt@2P`$V) z)WGXLJ^+yC`lMx^Cm5geI)7zQviO-nBHeZon@ui>;9mLzxAeOv+yiG;T$r45{d%a& zp@QW7o87;h{gm5|ZHT;(V{9-D5JSG6 zm5)~TmOU2R#oj8~ra_=MBs9z|EVRBHJ1&dKDEV#W>UWg#{H9U1o+3HfhBytE|1hHh z?d?Q|E3Yz>WxVVkoVC2|X zTDDj)4_NoXNrK+zr>$RVp}WoMC;zqGBrraHP@KK}b2LCpuwyiU08XHU!(1#S(5YTS z;qp|`I!%R@gQ=qes4_pg-2*VqVA*^QXOyidnj7>%?uSGFVY_gwFJ_# zrP%wkg%^i$d}HxJei(6kok~fZX&m~9IXsAaaW$q+`lC)INlg$}$TKA1{weRGN)m#W zep054B}K?1m-uYpsc1=wSWewy!vtD;?ok(KAWHO{bTR)EX8JJO3{vU-z18H1hC%ho#|~cxEP&Jk!U_rXZlg z@Hq+@W97UT(|W`-+GlYPtFd-#r2UM>;nhq^y!nE?=Bep*$aU~|IS+en_d2hz#wj^= zws-JUw^-(E?>CaY=9|iP3UVuj_OmtmJax*!+e)-fw4vJEv5S8*P#=-9gq0Mud;0B* z)|{@v?1kL|B$+&8$XJOc*;Mx^ZRuOuR&a%HOb@%)UQ&j-MfdO6HQP)dOEC_KwOsN; z%wv7NlEiA>f)Bp$R*biqJ@g1tRQ?iU zD24V8OV*H99mkOyJ>ODz@n3`k|N0XChhC<~{ft&uiYLD1ex=50;NYJ> zqiM4BqS0*;L5!#S0NKhP&;+nUay-gumE^eL`na%V5=jA6g6s|x$F zPJ`9HRuy3EbGE34?gNT0G>`QzO^|;sJ*&v!RupbFjed($JN_LV4^<0^52IA60gzrn zftH5@%;xm`0%5cPZ=q^nM}}nCcub}>O)8R~;UjJ9;f==}PS|lzm1C951#nMp&Yu;A zv8EgwA@Q_MGc@?gGYPioxmK@vfUQg6Quo{sGBPc}FH3T20bzns__#D^AHWz`SmLb~ z!1&V7X&H(}9bZJf=AC)qy$J>8VNUZJ0O2k6lQTsQrcr#wo=>7SSqWQ`WWBUOhI_m- zX=*&WY|gZAlbgTy5We7GA@PSd+BBtD*W#6}B>d3h7Pz60$P6YSmXJ7@V%#&ocM?Z{ zLwI|a5NBBqYE(nd8#ez~vxEq6<4%;KN*2vcTwGR4lDy`t<)Nudd$;Yvj-j^o@9d2d zZUlePgRJK|WkV{MvHZWR+^hbs;_-12<5sDm@@;JkNqx)OCw7Krz|gaP!rk37W%_<8 z4L!F>L)v_)a<8sqERzy9WjIlGodGKc0XfNLCEmTmu#T{sjBm%FAqW>-g>vLh_Dz&V zl~p#kh#X}uf;w;I`YI(25=w&{LC4q3PQjKBKhPug=s5#A*8&I8YRyA7_(<>o0o&=J zAzSW~w^u_oh+cWBcHT`z3X{-E>P1GZkhC?LVw~oMWfd6`;jv&U816owm2FDB%S)Fc za)fk@yOs`SQSHpJ_d)Zvcjkh>5$=&1BVt@h`C~pr^1kxC%s=c)m3l?1hxc;FO69~c zSnt-cYU!9ev8A=P5#O7_YG(DN)f8sKr4k z%6Pa-)k7UKuW$7&-l$>#4&h9TEMV`Pa<`KW)!DVt6)Ug;dSq#{Pg+qa#C_B;=~Q^} zrd#@_6p_2Ig&{ww0NIai)z7)J?KLBAqTr0wO+K3b@&zwdG(2m~@uol-4Pv3FI+uMi zqEJ8WVsg2&M|VUynx=@)I1sCYu@y2kj6AU50Bp9k89MN!GA-4fmbBrF;>~X@XafI) z2(Q5S+9h3GL+8DCTwF~%|Mmr>32u=E+FY^NKdH}B5T~-&c69k(Z)^Bsis(~*fw_|K zKKH5fu1s5{eTd%kq1{>%b>MHJ%sxgikeq`_tZ*feMvg5h(XPt?mv z#wt(WoD*=ntp{u0zd=3bean0ALI6k7MIn3H6m;Y;GzZ4thUMCGFjg{pXYXd}17mIV z2|H%Mff1-dBR|>t_!bu*mtx1W_pbS-qw%$MuUGV#^qM4OHT?BTV~Vu_le;r!WiXysuAhj<39Br8f|tM4m5)5^{Hg-8$M5Z9-J{>5B!U7$^wbh4V`#XgBk7 zsVa-i92Z=szP`3>m~#D*w!g)ZN1gNMPt1rc4i=W|Qze+NR%yya!Hb_e{%quRn{%=u z5>*dE><{DN6t6ZPJ zTA5OduWh0C;vid6GBg&_4*y9-cxlQrFdYhvXT}k6k{0HYH-pXe7o>CggGnz(yLO_XQP_2=C(tQ(e0)XapW^HW)g6eX>SE#3mOjl z_$nlJ3BGz!-9@?bN3xmMM6@0B{hMup>j2E>jeo}eo52|DTF{7{xV zW?w^zPbS^#!ZR@+=4aBSR6SQdg`8Okp3uI_FG#zglgg}Tf4JzUbIuIc5}@^ovoV6* zR$1EQ2A<$__&Am#Hae_`4--IyucRd;TiV)nYNYE&USoc_)MJ!Jo6&k!h-ZTVA9?EF zY=aA|GEjOR_cz(Y*qzH`xm(HImIgV-T5d&rr34@^iqkK1qb<(>g43~QZHzF>Abn3M zwG71^Ml)Db(qs_#v5SC(}W0XXBn3o)H=XQSv%N`ILC`o#`|=mC=YMkBcfGlJ^2>4qU7( z24)wGCcUZ`o2b!LQGjqBN)-g2nbDEOh~yQ3#IOIsFp&DZ|Js;84|&a~F2^4CJ8muW znXR@jvxk{Fpwd5WaHP+-sn%q% zD&m1|96PSaIb{alrqQ+lenKN?6} ztattJ{e6X#9Nq83u66SKBii@F9Rr8~ ztRCqKGk}4dJU8~sJSXGZfD5M*%yX z!_dS|jK!L-sM7aIGo`0|FPj7OT5Nb&oEcKQy0NN5(k+^=y_f3ZeqD6{LbWgCi|X~CX9IK5 zOa%k4(mEFk@E`-a-Rt{S6|0$eFc-5d>r#~805QHl)%eaXaIUHqGg9vp!`0!l<%!nN(@M(Zl>CxwS_35QNinO-H&jAg%)h+Jd>A z9-Z&$1vZyP$oWj^^a?9GkCqn$`O|LlJ2vGPHaCd-Kg#9uTb}GB1}53S>XXSDXtv)K zxo$C#;mU%BEd&gefRE4(*>iatQaShPq8bzYv`RttE|ew(C&E+xF_}bK?3sasVKm80brdBB8&xk zigRH6lw|!AXmG)ce4+Vu?tJBVX5UL&=Te_r-^BYOP^3L=BF~hsmonf9p6)I$vl8~% zfa|sO``TGifQu-voh;e(yLX0OK!6mryssE(xS`DbA6Y4VLh;^(@ygO=i@i%>bK^x$ zP`TyX6&0E7Pg_JcgHH{U_1mXPQmxLABPsBaEX>*?Sz^__+>Ro4e9w9li=faD>B1zE zOI^r*FDh_RFXwbo?b2qVo!MDGBWjxJhG;g;+Jlx>M_Kbe>{_3O52KA#OeJ}TryJtB zhrGX?y^58Qt+)=Ub`|Bcjt4fL$@GYL@%##`wXqULNNzDTCVJSB*>M4WXx%uzT~>d6*jWh;T1n^Y7*MA?)1MeXH>)U zZIOKMqy0NpD(@d5Lae0?suGw$RK;*U3Tv=>DR;q0-Rk~MyPrLUqw`@Am zM02tgG-C`MV6I+ap5v8K`(d=-M9y>Rmr^yM0-+&M3QXGkennYm{`8K)e@-7I-)BE{ z>9=W%{SJlWSh!dnzdS{^?VE`|aF3v;wuH|X`&aQBdF77#-TkfbXaTLQ-AQj-Y~zxYut=o5 z;EIzSZ#!upn&eo;<7BMe)}^_J?5Dh^4VzU?`c3oZ>9bParr_ttFmnI(WMDLPmCJRM z_Pm>GM7o)Y9|c3ncPKpXYpM=vZ25h-8-s4DecOB=G`ZKakg}V}(R5;YA8Ds*yy+!r z!1hZ@1HWpw@Pt#tJuw)9&Y|xf>V3L!50ck`NWLHg6yZ#B3z(fgxG4=|V#o-i3X?F& zYcBpKTIr$p_2BVWIZJpjSQT2|fawQ=+!W5qH?B6VX)n!+n{ySPM zUn+e2v)hJtfqZGl86Qpa;B0-ULQRZ>#iS^35Bo>XFwMR|gg! ziV?@G8%weUt!QHgn!Og8y7=a!0?jYZ-V}HLe=zWiiH0pR`~(c_`syvE^5LsFo!V?1 z&XBg~4T_T>yBxCTvRh5v*Ehy>5}RQL8*lS!8l5ZBk&6s5z8CnD&#>JX>>2BmI%m)^ z2H(3{l0D_Kvnf)0?O~eBPK(1JZ(NQ3G+oXD|D=`kMV}Y7^sL9@HmtdU){QnZ3)Aze z!+U6C8ym2QPhp{|N4Z?4Ah1-1mpcHPti(X$K?|L29i@Kx<0kvAzD-P)eT>1Sb_I>Tn8EDU#@k<5;SdUHX6+rj0}sD39fOjzd`6|O403XOsBC4 z4wD)Yd@2g_jg;7wd<@uq+5W|#eV4k<_b#pLUfyfDJZ3vevU&@81#|m#c?c@n^Q<6= z&6kOQW$CklP3oPfPISy*t&Sl2W-mtdFe*h~Qq;2&DB;gBl zt`w0FNpLLwJCkkOxR^fOrFQdv$sOXX$~iViAjRBo^_9HpBc59pK101P0w;en z^;$pbbDuZc+b62HT$*oO=Ve=&$G?xN+C&GxxU0>ChkD%ngCQRXyH07ne5^5E@D;GM zX5|!4`UBUpHZQ&t@b7iQzBix3_6qP7p90&Pax>wp^f}0VaVerZjr0>DJRB4#2D-!V zTHqc@of%@ufw$&m>F-9<`iHp$bUc#ucIVt{g3WNP{%S_frfGy6XbmE^d@Mag1!%rl zId)i1ckV#1Dxul86KGKe_3Q?UAMMIFp(3P2Huybn*gfWycmSb&UE9=n5^6rBOJKWR zkMgGy(k1EU$rjV-&Qe^H>M>KNq5ufe<8UbD?d}#BUaPi?=v*6MiAQKkg2|XWj>#qbds9**ch#w=TiLW5vn(jO%Ro`Ty~0 z2@E2>=DN5n2w3No!!rMSyPRKYGi9z3@{uPi#WWy_3hO!LpKijX=;hQTsr%aE$0d2@ zM~UmihCIW~V(6zA=~0)%xrtXh8Cog9CUdCGABG)jgw=%9^@cv z%qw0nbwvH5mrTsgG#ZkDc%N4otkNReb;*>`SkI`4D=`%Fz%T+ZE^>F)H;@%IYGcz7rHJ1(b7mw|3|TVY5Dd$k7f|+ z=c%!)9&O=mvp40D6zraIv)kkf9d~??PZx7Xy`ho#qoW}D{vBjOi&Z6dP}2Iw7Qf2E zRXb@VBHcm|c9@MSSQF-JInjlS)0Jd%@xm{8N2AB40UFut5zk#k3J+}qv{+$)(Yc-yBc92gv+f;*pp;_dnzaM}Z3nxQ1F_1YdSm92$ zK@hzxTEBv;S;UJwV75*0HX5{IN+ChONPPsyC(0OW3+8L^#!=;ZQP$fAm3yi#B>2U$7Www|B^eHtKcF5k=I%{}cyj!UTQwbU*;a~fY1i0*dfvra)x#u^U34!?p4 z;m-7gZ+mdPCXjHyhU?BYKn?Wfgo7(P4|ZqhHn_%fcHA=j8s`udH>P*2YlwSFgj#~W z7D2GrN#b$eL+DG^EbRtZn%akDaR3&v*o(QNn}|JgOcWY{+k*;we0dGmx(@RCX5z1= z*_rvAPzSDcXAN+!(UDvL;8_$z-+dzdQ^UN0)6XAoj#;Zgd>MUh4MNfPajJWO(gvwE z1T=*y&sj0<1PFrW5IL*;8d%+-0(7fA)oKIg41kQn{3#;`wqN80yzyl9N?LlUxNG*J zdIzc?w;VrD{uE z8t|c#;59wg;n)%P3Oa-Z9Qqrb?)1wqsbIVfW<2;Bl-enEboP<`q~dvyum5_0mxtwQTMzE4$SXOOwYg3w zc|x$$@w~2PbHk)7@1sz#v_3aqx)0exZ+qRbj@zndX`tTNYIzz@CvGqLW5TS5-z&vG99Lpg)r zUUP5Uy%yDA?#^es)lgSm}%vRdfaR` zUK?)6M_cs<1WpOGC5Dh4KIumvEncig%D=i_bJ{clvqi11RO5S2h!Z}duEK()H-a44 z8ey{yi!Q31>@4jd5j7SAR>-Gr2K0)<2@Od5Pj>?*VW?iP0{UvsngbuYxIJ)F-qwIl zOE+-QkmLXS3Uv>-my+LjAibN5>^hc=c?d+KA&NpPi9Y{FaA4RqrvXlKyE1>oJ>dqg zFD})-i?C)(hYDj;RU(7>I^Yn`)P4na0J$C)4`xAiU;IYjMbGn9G44%Ke)p6ymkB7! zLV#_hqa1Bh#=L{92mB1VMzkEbM>1Hr@Vf8P2gQ_Cv*#N)p2ye45(K=aazNb5n0;Yj_80@* zqj?hHp4alGtuBV$QXRWtK9O!hoHIE=ALbDwLuv9AweVv93y+CJWk9Dv{$=aUg^X%T zq_vLT*KNmR5VSzI{u(`;duoOf?{l$Z#($h(CO-C7JC`Pc6)%3~T?|^R?ISjb8#*^Z ztKXbfuenws-p6rnMZx49zeTms=ZJlu2T>IdTT4sEg6t`kA&YW-2G?+EL;76uOO$IZ z`cGX;iocZ~V8%5Lwz>wB^l5>q7t=(rj(LA2i?JTFY;<~{jvT*slXVzRkUjzuxS56#LyNa9#NB{I+xnT9r9l?z^8Jzqyf2(XIM`U*g)Z!B)?sXJfhgnuB&BGJUTTlTTw*^h-HQ!rk%Wlh&50u*F8S%7xjt<{+0pfnCc znXjvVEZ+;GUP?q8ZyVbwb5UmacF0QrI+O(v7=FI$!&jDhd1rH^6&EP;6LNAFgvIU)YBh&Ptbc z`S7bFhpuW&{NubNmQ|OZfPU3ZK7-YUud7o^aSL`AOWY)hHe#8f&>@WRiUE2BY0Kro2{->-KBzr%3$W^2} zC+_0zatDXcMG6`V?kW9rrbI397lUy+CVa-kb$*Id`x#~mjrbAvq-GuNJmdaZ_5odi zwI$)m*>9kEdSwsU4WLAhekqLtIDfRN*a!%WIrE*=zWL*2tpAaMwgoR*;L_CtB~fsL z-pilN#Xr(rPrk-RTDt`?j(?^2UjN00r(Q{6i*#zLLxbR5g~^`i3g5v_ekF=aTjl(L z_;T_30d>$H1DFYwnZK8dHYanOcKnG>HO5U_Aw%E1(N$i@V&6X)=x;z;^UrXPef$zO z{rU?XiZ1`?#mlL zY@#Vv@`rT`lcmrhdB%S*?Cwfu){bi4qk# zgzj}M;lD0KuFhXQ;)6~=o2Bzre2vy?Ze(gvk0U5Fs;Mo1!W3K?>hVdn7O@PiD$HPi z?``?FkE?r&bf5c#dqaGn>&f*mAX0kMqG#k7=lYUea<-i9m>Tzpn8o z#D5AdOVCwS^R)th!uD^i7&qq&T9J`Ty@K($B9+Y$R4oSbr9uxaHj|dg)ou9O|A|Eo zwk-FiRG_G5ml`8%F9US0m-_H&+0pI#H_`|US9(1L@?{lS5E2|)P+ya} z5j0Y5{nr1Sm_&_6m#dd)#j0?7mD#n=)A9kdy_!%!*tJfFiU5Kpd8?|edN?B8*NwzJ zZ1Ui-SX$mUA6p>i#}yKXKwbthqSQZf4CltY-OeY_9*yoDJz*M?+-lKF3pc*Y$5cd~ zvl;DS9~-?l5R(_%A43@z*=6&A0hxg-@C(ei{2yP@j%!ACt9=}q#8OWjjzZ2xv zLGP?Yxz&tF*9a-Ysc zPrk<}PI;Hv0LxYmkfdtze~Qgcg@#OPo_kWHFEu@r+%toRwPSunC7acr+>SBO;lsJj z6}K~jxjw!8;{iLyiumJ=u63iY(*?RWSi^fJbrTIi($Jt*x6?prko9i8DU>j_=wP;h zJG^7I)faXHD!1N{AH+s=CHOEZ_kzHM5>Mu#A6s9GO!j-E#H9{N``Mf*c^Kasq8AL* zPErANSp(t*u-Dw&c*bM~92gj?yJ49!DD7a+YcNM2q3b0fwOZQB9-zZ5hNurO{>v9q=_F12)-~n;z9mlOA~6NO;Tfab@y0}Fz2`| zk%BcOs-Ar|SyD?|wZU%n7chVHw8 z*0awuGKE3G2^1ro2L2R3ecz~t$8ZTLTwpO?%Dmrr{`}!BeL@iV_tsyPvW<~P6KtlO zFTP|Fxc6_J4dUqdBWRoob!V)o{nBJesI_>fr63uS>`It7n#z`eXBO6dEf%x&3nGpU zYXzcnrvnzK3BT#_+>QpaocjGP`OIjmKCyS9Heb!Yl=IPJSh`{pt({2ISvyXe?q{AT zz6j6}%K^M{%ODN3{|AFf#xmEyd+tj6joh!u{$g#@f*dv;A!3F!2}X~VreJo_s=$)! zvN1M$lFuHjB&w-lgG5Sx1lDuKVD+8r;Wc+k50Q+m%!D=CY+92rgfkFj@3M$9mDGUbn5NDX`B+8!mc|!nBFSo=guy`8<-=H5$*Nu7 zl*J*(jW4+0moAJ~^o~mcR!1MPJvEl_Se>nL+>3XCm_r{Zitzdb-p3 zU5P@ATDHyM)H&Q=M$NqwV4vAiC~|EiSkf0Ki_>mtSb<-juMCl77j@(3rg%WEu#y@H z`^C|q*?m$|veniG_uXTX$Xkyv_@+h0c(JmSZo+ngi^we0hgm~62>>Y;=McY4=-o)9~ zQ=xuMvNGpotJboev!1=G9#Ze`qndbP31}wqBv!b=*W+a$B}4ITSh#9F@us8+QhM3N*QY3blI4(4d%1Bem3wrp>gil zhL{0<+cYV}_Ur0YwRW8$FHH`6l>IfXpJ+0j}6B z1MZ9$(VoQRv;_d%4Cu*?W#hu+fTLDKLF$M)Jtq zHhWfV;ghYxi!Z((LjJ+vdX-^pZ#)6W@U*7?SvjA3dH*_P+t^JZc^Su?SWx~3;)~t`sv4oE7Wp>lgLGrjYEviqw85p z%j5BRRS1A3Xgb3j=$MT`RJxQ=PCwDw;VtSbmHqI-6_oQNh6_SZL>$mhR};G z{Z`us2kX<1cJ@oi#P6CCNDKAQen=s_lMP!kwP9$H;~SI5<^}Yty(5)$mk5A%P_Y}s zIS`WHc+PRi@90C_uSGT{+CTaJRr0f$ER2Fx<}aUcoCzMB>`&^)5qWj{Bg3H%cUJM7 zHNvR>+h7=2X9a68_-bsI{$Rt>5};E zT}vY+h=500sONLrBo(v^(jrTqxRVXtt8DjMe=wOfe$fajrWSbrLO~`(T_ah48ItrZ zaPBXf7%6luJrK@(IOe&qy@KVr_p5<4>A70!U2VRcv(5RK-o{kRU;7ppCz=?2bB_=g zSk`jWYQVz8hlS;y5I4qwhKVJGmq!3A%U^xdq&<|PHo=7k6H#b%P5A%B3h7Ba7kyiq zvrBPva|TN|8$Vke2_*$V8sINR(Q?KgCcvFquu=21*IK<}kq|SX}thGRdrmxZEbb(St6!#~0w}Wa?^@98>zJQu$c>?WcZ6DgnL!S7-?KrLPIQfb)P_02 zSA?j<3s_kg()=aQF}CzCGl9FORTmO@hMz`AUw8^enX9;Y3<#+Owf%ix+&ZfNxe!jV z%3b5xhuZzUHO*gIoE8~n@QY&Dt^ONN$7gvZL@05w_|RqDVZ+_s!GrJ9QP}kFrr)Ae zIj^Iu8BY>5tx{}C%kV?5SY?CsYEqpdd%Vb3-WEtJKch%fSg6pFIR2!yr@dg}L~U*q z1Qi?8wRC*a#_uVsAX7)lBn&|f$FO*uc_;3bGn=&kzxzt&{W54OJ^X8rGOTFZvVJuo}?R*+{--!Ge zhM5Gso%$}tmq&j9c5II)Or`n4kPweI^)1t)6%stJMG& zjj)jD$w=3R`^d)VZQkBKhr{ni)KORw-Pp|K73DnOMWOv-{a1=Vh1{8hKX0XkTE4w_ zT<`9NR)Xz1fW3i+FrmH>Xx=efIU!(Mblz^FY^X3&Yh@UR?;8 zq3a#kEY_^#=Vz5HJQ7RVqTF>=-?flkqiPL{!_bFd_1&fSlzSiid7SsM#Y%|%ZGAPCwgpL_DhYfD)IU?;hOdCY z*Pa2uiND!jMARfl(Awd5!cl%1zUoEiH(`TZ9F7gckp>HTll|W+Nw16op{BR95r1LH zajqOmBI_~0{^^%IjHE-m_rw!tN1a;aj0z(VtviW2) zAO~OyxpW^lpHe3s$E*|P<*#KhKrV^WA(Ip;zP8Y5PB)~4QQ5S$c9Nf6*gQdEVVynL zeOnv@SjwX$kMA<|r?KCUba`=gurewMbuxlrH-eBZ=FaHa6VlQmPgY!Q8?wa-ujtlXKq&?Vuk7|8f+N zZwh}Q-|O+I^p86icer=#smsb0@UKNy(O$gNHrrO1y} za~F@H)&*)m>vN>_qIO#dw-5F06M;<I?P|3Igm~4B_{$KW-}hfR64vj?DYHof=F5o5=M|HxH4+b6pu-m0w6rR?JL`+)s?a zF-+ZmNHCIizfMh)BKhtqLiyj(wTR+Xo$M82Qnnrai-?q#;fL#B#*w@-ov!%2kWl+z3bFp~G(GJZ8} z2){fvbQ3))%43W>@^m+H7x-pry#kX_JK1iRb#e15hktZ`1?IyoYzM4b(ykbYuPeL0 zPW`Jr;Ez8gY{) z20UaHCut?#zBO4{8gourB1?)glvDG0+La<76*6bR8#*3}J>{)M>X0?yLl2r@806eG zvVu7eb|ZBLb=rOryL`(m-|#zv`K=|ue!{K<+to({=uM=7u(>!AxB4W zr`;zbKr}@&qQ>lL@BKFon($ye6cWz0S1fCRfjh;MlK|-aC6BF*okMt7{SM2M(A>Kj zHBZ*BhN*e|q{9p)Z&Wc;6uq%nyU@i!@uGUImUk@=F&8w8mhsaXOjE1W=`pUPCFcTt zEm^SMNY!uYAZ@aix<>2&AKu&g*%+eUSx)*&>??-Z#F&A$y7bUP^M(y&m;UN2`8 zB}{Ey=^z(&M*Q>lcln20y+yR$7t!9>N_e~Qn+C6|S1sf3#i;JFS%=%G*jZg${juvI z5d9W9EQ4R@)B97 zP1!UkGH{?YH}FbQ7HSoe{7`bkl?Zi^qGiL4YeAnbp|un6 zPrp)v<`*NH7OA##`jk}cGh!~LrxFNOgRc)A_oa5U+e@5P-v6T5UWSGTo6K? zf}XC$8i~;gD55<1Z}h0*GN@@R!yZh z!y>-`fmC%KCfqa~fwyC+_OaS2lK;rU>T|=TOXKT+GR0LCJWVGF+%NQ!felo z(Q`=Yn}^7EB4D>WkQPeoNnrL0;a&^3x{F!4f!ohHS)UCMZoF+KfyY{z<@ORTc2PTA zJ&X96n=#Kj!zhU5=qAaB94hd_M>`L@N0;T@-14uwC(DK8$%OjlFK3p@(8c>l6&SqO z6Bsn8L#5r2ao}xES^VmhT&+u`#a#COE=wHB_=H0oRl1^M?I@n~LD|^2&Qyi1$=@#) zBtLl+^_ivk0Qx{VZF_L6pky)voUc?W-@-SMb40T|Kr+VPzAppmd40g&z(%) zbsZhE&e#Fp5yhB#v}ww1)$w6O5l~6NdSepyjd8M^v3J3oijBf2R$P~cM52(7YAY9( z-KLf)oj{-7$0E4E4%i_#ppd~onbpe!E?wg+Wa8i4lsf6OgioEBG`*xFJ3S@Qq0pQD z$GtZs4a@spSF5SH(ZK&5u=KlCu()AaUE1%;_F_gs$ZD8^+1Q#@3>(dxXTB=!-fK9e zm$1=wtPUsJq95B>;LI7fS{pA5HfW|RRG*fYLm#T!$YhycypuP%ca!i+tc6vx=x;bBEdUm4C)AO*q0_J@_H9Eao}QCd zvv!}xBq&tI&i;w~D$u$#=`CAVa3fR~;9|Gxvi70Vuf$>K}rbIhmt#W1Dn;n?DLW?bJP{c9VY;)5Sl~ucRj_Vh$N)Yh zz4CKIZ8okhdFOMQ8N(jSlGz?=&l4`$H&$BqOzV(`@<$4GRq^!E>HTN*n&VW_*;L++ zlhrvjk(z_qe{86`jX?JwI&jBKop)(9Ylb^izW7`oT|ra7o`ycTR(-1f5j^0#AOFK?SX z!e)We(MD{ok;~Ql=>9~?1EbgKqW-_n+Jt|@5iPm|CN5ft!Eb&uAp2ocn&q>|iy(Mz z@Z`#J{l_UFJ@oj;skla&eGjQk`{Ci?zeT;6u;?EGX{VyQc;t8#5N*3ug#<~Jyfk-U zG%w#Pbofp)Yc_v>jp3R54f){>86aFS0*RC$Q(dTlXZH zdYJ$H%?}x?zRk`V&N>Qu|Lf2Nt=&jdx9xK*QsodjUDZA5k>AmG%S9e`Kx671;AUpz z&@X!AUk{cSw%jg4J--wINCKvANh`s%x81dk|7*pY z|5ma2|3We6fBt^N*a;~LjlS=NB*%)BW5fU&R@!Fo@*lWxi}2NWOxnl^Q(!_70>d{J;c& zy@cTFzi+Joz5!dS4$M8vm8H3OGTT|ivX#Tz*pIOj(tPtda5Ja21E~EDmH9{T#lcIgPtEbs z0f1I8X&iH78)xr8JMHzqq21Rqr=|~aP)DQCIFW8tP`=ij8*x{}lV8;g<{HzSpF-i| zQrj$>P}CdZ+vuUE@aZ-tY+M&q@m6+i{sm=}N%UUt}s1FSU-1%8jkgxb?|m zGCucU*!6S5Cyx%Y??7)_PH?czz>Cq~Vvftl0NST|tTA~7^w~xpashI1H2e}B2kahi zyTej4;makj2#NyK#^mpZ-vc!C`&iD+-RQ?@YOV+K90AVl+lY7d*c~VjIBx8z!7k_l zUx5~0HQ1s{gh{S9&~!687T{yWp{VxVS;~yU0}0C%>!* zi;)?H!~iQl_Kh=SYI;N~h!Als;LYp1votPRhZ?^g-Sd5{9#Om}DlYtAz>#hIWkwioI>k2Jt1!KN!55fWt~K>y{OYJAg8>>6oW(FhMJ z3-bhy9DM>OE*;C_AbeY2)1=eFF-)PY9p#b8<-{#4Yg7ncelR5vkgMetma8X-qvscQ zAo}H#r6cbDyuj;OkGh9S^ApAPH3K27OVcU~%$~lPPbNa~n$;L46V4=gmNPd3^nB1C zbdCJ%p<1Xr5cVs_bNDp#*&XPsuva0FL~a5+lDJoqXyQB2LA9DHAW?7O(R0C`h|Yy- zV)I@e)IIxxR=CBLT$7wSZ~->1-YNl5*U2U6)z`G%JJ1n$3;Gy4mxdij-jl!x>j3TS zp)o%SFM(f0on;}93vM8PH4)1r=kVlXWJG4<5thJz#q5w?CV23NyVOsCG)-A?(cbb5 zq$MS#C3FU{${9HOi1<>*@r5+vbVT@p8(tW4<8A8;;F*nk2O9I5IA=O=vPW}!i2;t~ zD)8;zJqrXiu_V@1OkwpKhW2)=>ASUg4HN4e6yMNQWXSmlfrT?gC6|4!ofD_Otr!WmriY=M38-G zHE@r9Z+?EMOaYuF_SWRGx)nHbtXf(@1DsP@SSTBF35N_KvJ{^&h5Ly<=BM_U+Ty)^ zwx&?s3SfpKW!7wmTI{7R$tzj}o1P_Wc6{3qW(-9T#tD8zyaoNWbS!;z{T2@Vn7v)# zIwcmSXuz^OaG*hE71ly*u>>o&PwISIDRSQT5d8YSw-Iqa>O$%Ae(Pk-<|OgWCgSE1 zAd0bEhCF@a#Rd@5wa zKFG1BM^O22#bbwU9ti=3q{d#dV>9`%VVGiDw!PGZ;hzngqdox5#7>OrLOw;@q#VM}6DC`4 z%YEU?VcA$tLnxrYRSC>Oq^vEEicW~$|4&r%|HW|kzj8dsgaDrjp@9b*?x6cVcCABZ)rAWwCKlU(29MWZyHg}0k{G^GcQ-JFU9&&AOJg;wC*3TSyf%Y z6fMyYEZNck|6wW_XVUcpceedw(M!)-ha$9$q+RxU8~LA}*WQ-9QPWp{PRy{lshzGL zt!WBNr2jI-Xc5nJ7?V83bmEEZyEB|X&HtcY#s14wUV1V&Qe&fD-8$O>_Kv~}<|NU? z7e~+70`k9+VTPkH=3A~25k|AmPfTROjH`)RUDeBLR{K|?zQp*B&9-umHQT!{HwnYV zYNO;Q&llW{1K4bmvx51^WfFCb1)nv{JK)vd%w0xIq)MaI3a=HI<+!_EB|$AgM!ILw zb`n%@kJirtK(=R$qs$7STo-&D+rhAY9W2g8uk^f`RtcXMr!Qz1M z%!{=wlCsQR?1||ZXVSrgn9W7(XV1>oHVG!p>gN{BK6& z5x4c9=>2?*Kty&Df*$IwLD^~6agyoXt2~b@`m8rOW=SM9oUFc8+RaD)v4_Tr4XVVO zdA5M%>!69}Q8gCq(rGo=605c{hFQJpG07cID?Qobh-BP%^WK#7xr(7X7rdS^B$0y@ zhX%15pqLz1#qj&$_pH{>#ugF9W??ibBK=j>F|bRh$Va`wf0Bj^AvoYKv#In7g|8#` ztmo||0?pP5+T;mvhW&`z9WN-h`B(Nw9fEXj6Jzf{{^O&%gR`Ht+@!ZO>l#9P`$&JN zpABJhMz}v=rPtZ9sUft6nC$e6&6FQXPz$;BqCXX#YMS*f-ycqPkA?qg*jpmqhmzdN zVqc(4^WF5>Eh%RYa-Yu!Yx1QpMQAT>)N+T@8IC} zPr$$skqiHN{6>jDXnM=@v|#UcR9bmX?j`euZ4sZ{XuJe}llG;4*zFzYvvI>yQT~K? z#){;v-GVMBZBY5NsL@6!;Wqc8IlXdq%G+FmP1SVhyQKGR3+ci97iA9)4{3kS>0~cm z`#c?Xc;Pgw35F#fY1it%uCJ`Me=s_ir1RHOgW>)(IW5Wgw&l6((v!%pZxccfB-=HB z4d)Nq3&mcEYrD?ODL2$u{~U&qYVG*b9mUw+T@ zmmKT`vIeE$2n$|)s z4kXmgb#2*z+{IFq=zfQ9~xf zW*=Py8;+Igzth&7LExSiGzBl40xP-PZ1IXY3C7-7dgg|DO3mW(1h0no_YS$!(@4_e z`!Ka;j50~_>kX9)ta4=1LFleeH>PKorQ=i24}QYq3aM+tN}WyR?59Gf?|Rh1}ueTDW0U zVYfS}{Dy%*K(qWVI$n2PylCXmj+md}PfC>IvQOl>0U7-PQuResAzWmgocurUzPB2|nGtPsSNpR0;X{^mw)W z6s^~q8VC18jU*px@R47KTsNHOPwUUfGP(H5jRqv!xW*eeh=T5ax$o8{q_MrWRT~^D z*xBrCb|_TXJd!lh@ifDMxZp-rL;dO{+bc18I_V$%F$ed=#TT0|_oVC$Lqc2URsx($ zV>CH-ZNk(<5c;@C^`rap`H)R~vf*j~JMKwSN93Cj-nYx&bQ)vMOzo(P4i>Adb9Emy z+r|79>Z+HmeClb(cb=nBowt8o0y#K+kRll7`poHT5R*sDboxE2s{`dZ+23DY4ZPMn zsD$voj>_0-F{y3AEw8BIE3GyKZVif3m}+sNd2*88u*`LkvFDng_!r4v^;4WeHSNBggXo(E zK2{?$wPnO12ge(fn!*@linQ1;duaiaB_l}x<`4C1UBm`GCQBnjr2Yj(KW9NoAvM?= zNew9_INg1$yxuuBsT9lQAtX>bK=mz zk2xw==+A-^3bCH#C#svDW0WrCUMT6Bu73M($j{w>2I^Z@s)yg~QFg-~kHB8LL6we= zf~!$AdM_2j`WmZJ1&w9>{X}sc?)B38v7F&u)}ru%G|3O4pgoZJaa+6 zW!*!I;Q<>}Q-UV`YljYpST1=75JdfLc?iT{2=(?~Dq2CZ^~s5IO|9<<8M$l>TLX(_ zQC4`*IXkD#^N|BY#IxjWo8zumY#{=4Wx6g0o|S zXb5>}Zj}snKHu!NancZVreqi|`P9Rj>1L9s`lZTfpiW2%lC4E+TU7&xIO<3->f<8@ zni&<0rK8+QOT->-s&h_I)S?6OY6>-`_KiJ9_0RWrEcFZS7EY?lEO?+oT#{%B5AEr* z_Ww_C(0^*p-@U~-ExrU&W^p0Mu9(1{GY^a!HOnTju7!2#QyxPitIMCyxdo}$H;x@* zC!=L6tW3821OD-s=irf^CBGr4efV=lORLWNXcz2im zUjstXH{7Sb_#mU>x4k6@GB*Xulc~T9Y8?HFFqM&uN7{?KqgML~+!OMTAn`Cm*c7-b zu?sw%^%C{#n6d}R;>nk4{=z%KT3r7_wQjwW?34t5MjpNxk9!gqw6K3X0!W^&a{3|3C7k>iRsl z1Bt1$0!;k{ElKMMv<@H3OTDaf zA60LcRyUDJ<(s%0$ARB&u`i{+AU-a)!PLMw&482=59G;qD|p8G913Son`FrA_?}Ro>GKCfG5jJf#FVFaNSeHa z!x!!hmPs>h#~ zBt7QLzn|TdGI-eb)JCz3Fzs>p8Wq^$w!bdaTX|1WMm3P-ZLVbOj5r~e&lfW47pD0z zOQ?x;9$L1T{=LCzJjl4dm%4FWnm{5bs?Y8kkl$&Uu`H5->I0Sl$v1@=D1W&V@no{> zoF&nM>3&I>FjJxke}6xLGi{z@jy8_jFKQ?m(}!U^X |O34A0zEr~r{NE#n*JJIL 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≺hxfuQ)8{x)pxMPuTjThBXc@iFex;Pdr+p0Hy*K|qGc69o`N&IL5PFgLK1hDTP)sEb%RiYuLLd$CB$vOiZ&EHo4z) zE5P+9*_Xn+peNDSSsT{-_{X=1h`y}xNGQpXM*<~(G>!cuLVH-vyrJx~zi>+LGSHoF z{ocB1TAQ2Fd5bT)1_{TKUs>j}rmXWm-pQev(#M+C4(kLzxN!XDB!gsa=HpkD$9WF_ z)M|YD++TiHMrb#OrM`YjJ>3=lRhAka1Z6w8bE@xb+E#kF%Q@Ef&erm?uJLWfZvV`C zTIIO)rrDAZ%{HaecB=rMmCSOFC$6gUhhN5YS&pJxTwYAXO%g>BlH)1Hf@|`zSoN4{%Fr z%%KxL_5X#_2K*8W0=T<@unp(iduGr-5%5&-S~~Pp!CxPsDFN)SKDxd1?-*F587r`7 zT_iTr_gWkKzzaxZv+jkWfcGxhluZ4r?efRJ*)F}nb>p4D`_%w8y1jkVxqVd|P+fK` z@xm4_*8nc^`|Ros1mY&T;#~4KDr)v`sOWe&`aiOuftV_9%$Ifm(w!HB{`s@l>Hi;J z55QCbnoHtH2#Oejp`&vIZ@fKE*#4-4uTXx|34Wn*$~wIKf$!Hn_vj=l_lr;R{s$tg~s-S2>gKu*>^PmN{O~< z?B#ME(DI^55)u|94K7bik=PWYxfPFNFEq(#OO*Nybl(oZW+(lOZu?s0V%hVeao!Ni zD&T(u#-&s!s^AJ#8aM$aL>{xkHfq)%fwh`qZjE+1!L@4AnOm6zr@K#TB2W97aAIla zve7`>LLB^wu6R*?#b_QWDUi{I~@jURX&Utd5TEnWTSR-;VMeEY)9B7OKvr&5<$ zaD9WAbkrV%zL)bizi6^XYs!}lG+<2$T6^ys3Mqh+3Yo*Nh|MYmX`m8gZ&ZHJ*y6f~ zN&Aprud{YoOO+O_?0TZ2wvH5WNA!^2iRGq(7dvnet@R;~ z*dpwk8}-$l*FDV=%&>)mJa9bDts!#b=d8`aF8#kMyTGt=30&{VbiXKzub(p>Rlc!= zTlQ~oD3zTXIJ14Nd-wuj@l5Q}oEoSk*X?ZCU+&yrScvfPbr6~OG7x~UtN%^kd0NEQ z7HFweWknhBMeXh%V&`&{mn= zr=ve*!W$d|*}uE>z-Mfip=v(3ZD=rtoTG`IbZjrgcKkWN*QYa|W);*BLjD(NZynTD z`!?!ADW#MaiaUWqp~c-H6`a!GZpEc|aS2ki6fIJ;#hv1A#Wlr?OK?q)5F~l`diTtk z@0`8QIrIHy|B(p;%u3c;&wAv3uKT(tniA-A)|8U1MW99f%7q;CFkJ7)0Z!H zngXM@Usarm-7;HpyAuK?Y3!5H1Gp_+iuO0-mT!ghJp+;|(jyw*tWItg3aWBS-6w=U zR2+5M7~dFOro^^Dyq~% z5cVev^il8l`kP%l+y0bZt6%9t;io0dfMKrF%G8Wc{JVLL$!5@N#^;60l}VFzUjwqh`M~aHeix2yZzD&((|i9eJF%1jeyDKY6B5 zeuubzsn#{D)Tg|}dCJXOd39K^F>b3B8MCwFbs_c~N$d&GBtQSNXQ8sAJQY7;*CY61!*XyZWE*DeyQnI74TXwe*5tOM`V{QzkKpzz z5r;Fo4FS~T+xitFg%Th5Cq$lA2idt-YUv%#v~jH77?)H?=eF^f*?9a}JyVu zF<3NJ1yGA-+IyBh-||O6*4ex$(i@Sb$<2%- z_z8o$>Cc;z0FqRw1Y494O%>0H=F7~ifaSBmU!0ig$V)X6c1DN&Dpnl>xtfX%cS3c8 z*WHI#X~=cGIh#Ahh_M$60_DRJ9HYY=J}_tJPdQoDsT$uXGiTRyOy`W6Gq9o^T~30I zLsVMD#-j|T%In!Ji;8(Q*ta76BVX&tQl3Yl)){hga*BQ;i3`gdfF6ID%6h$=jNfg7 z5PpWL@Nn|5ql45-M}9q^_ug3n3z=E=Tz+BA%h zG1=x!N@(M{KQ!hGIEPJ@?Pq-Re#9g9=hyu_L4hHHtU#Y~dxt4b?&10zisam?K%AXY z$i@>X4fS({P17kw7F|Zb=>a!$HBM1D1)YhkDs2#*pF9%3t~H47P~f%bh|Yf$Fh_G% z@J1!q4G7Fud{F~UOm8~+kCsc!#@Y=!U-WE=4~{Q|9jY_WvE%dhsy%%k^y)3%1;KR; z{_*oUsXHKC+PsH9Mv4c@h|tywxr&mJ^emQq8SJd7H1H@SMK)g~oUJJp`NMr%BP32& zJ?l13s9&iyZeMF+xfZvtWJH;1VebXkBG30SCyRG&;mS*1yRpYoP~x3z#(F-|_~AZ| zM20N*`M!Zu&|cfz+A+&}ozas!p}*7M4OXG5y=yBrVdiUR5>J-8+^H{-^`XmiN~|eN z9A<(zYcI?N&`*6Uc-}j5(bw5pJ9Es?Jg_4bvy`FDLS%!Z&egh*0jZLouK4$p`6I+U zXlcw}amaoSYJk~4L6v(&Nab%C^EYQ$lnor%s4Mqcz7WJ=Y|K?r%bInRZ=gBFcw-ZJ z3rl=*oF@w7-5mMY-HgX$Nh z)fVdPqz&Y%Ax}9HB=?`1_0(2|sjU#x~r|21s^bC(vOVneFhQ znPY2M(E_lfR>8skB!CR0CVcvDP+!emQC_>ET5-98pg-}4CWY2MneQa45`~q7II&3C z{3iHN#erf54`aGy*;k+8W2|kOUTcNe+CZ>^tVkv6q6k6+a(KAtBl zP2dYGcC;)d8WgW?K7_UFAn1Ec#nEZ`K8I$L(|U6kUpQ*&RL7K^=<4cR&Y~74#Q5*; z((WfbJpVCcTKsp@exib`=;$PO*)xa&Y4ZhMNw=npI4QTSvac(#JE^};wK7-mtA2ar zs_16M2P_rd2PkiJ@S$vHJ~3;426Srf;RON02N!>zOLw|2uFqw!2?nh^5r42P3z)^af zH7njSY8A-1vE<>HXQ1Hoj2{ArT~^YaLql`x#d_BkiF$i=5uoUgmn9mnb7tvBTN=PC zsZ_niMM^zKYJT#5!$58d%6&IE`2cA9g8wH_A<0PY!Y%eaN6#9H9yESx(a*q*C+-u!8I4tWW>92ocHdpnYiRIt8g4Wt^@b439FHg|rcJN3=OIE@ zd{k}}ZW3{1+Ux}>e6`cJrfOdRXXrdA;$Ia26ZH1A{b)tNL-bdR;dW!RhsGC|Qqd`k zuB_8g$%M&HVV_5LjgyYm_UF4YqRR@v!>AG@Q-2E$xqIsvd%fs6=5y26dozFjWMiq$ za`TDc76Xm5MM4lU$;A(n0|UPx_SB46#aa{+-4zOmabVVh2TB&d(%>7FFje!$x@2Qj-&otRNqZ-S-IM6p2}rMn_+Zpg!d z#k2?;L_=dSH7YLG1?8XlU7OZfBVWBr|3WJ4j5yE{Zs+qQq?~r*lQl)-tkm%pSABKq z$;?LVJ3xq1w0gUb_2Y?e@=$PGC!q*1Lk2YJYJj7*Yb6=$T}MkI&t|h{Ug-AFN3$_O zKBz;G;66j|hzqVI2&tKa#_xWyrRAFQ0xPR)Z>ETMwq2BDNb)D1!;#5qi&v_Jw|+~e z6C*bwy_6N#Wd-xervMYQQVpdF%XGS7C}2hQX7y5Xhwv@@FfQc+Exp7yCj473cFk%Qdkk9l6+!4{i6KjyZz^Rm zU1S&v4bz&w|Nr4a`4y2t#_D(KsEef)LGRY42&=QLq}8|NDXiI55=@_CrU--?)HR)X z4?WIdaE>Ejz$cc5*gpuqy1AT<%XTYWYl*fD6<1y?$Vw7uh~}uGW>oVD)$i<|<*_*9 zeVUp)J{0q&m*(Rq8HvOGpppYRy~sOnm+JkGd7oOMo%jkHR_MiheqWb=?epm7pzS$~ z=|-CMbUj(UqHy${

#-k-!u=V0-uuW-<%#v`c{AG!U4j=%yV9g)d27VLMi0OW2MEQT-#+6)@3y&HH)H=~ zvw31EpX*x@uNhuTp_0(@8?eZKaL9O$?p_ueKN~Ina#-?5nX^x|nOA=|^no987%mJK z;jpa6%hep*G-cu(t_1A@+IA$Z$V<(6x9JRAI(*w4dF}X|%t(#yeJzn*6GU1feUp^& zZ=!)Re_nUaK;75m!M|-o#07r0g*8geX&zirr3ntCrfxp{Za47yGt=h;eq~xX&Rpb_ z@>v@Yu{V2mX6NNt|Nh-y2KrJl-1t}T2{uf#5ly|=m!annWKc*RcdFmV$fGO2s5tsJ zaOUhO$0GKyNJS)6C}@-kADuw?D+WlvsKN(yo;79G0-6lF50XD z9oZ-Qq-LgF&C;ppK#!<>$%u-Dy771gW=za4@0qd<#l_0(n=uGWI3GJL{=RvDxy&c) zp-5e57&5um8SdWf&}`1x-PAAhC^Xc_k}yFX?*Y#a>$iU+aR2>ROIK757X;r&N^>@D zT3FyXga&ce^bjlv#&OIgHO--lJ)HH5)pD8S%Frz4oc=1#V^n*cD~g>mm4Q;ATZE;2 zY4#E?inTV_x*#@cBOdtsQtsPzl)%9;aSfclJs_KxA-c>VhP#VVmG!lvESPT zJUnx}O3BG>5;m8+9M9@_Pb^!LM-!U9vl}W!)2`$u1bx0mnhh?bTIz`o%=FLRLQYJm zhwTp!g4V)+_u{`1W|>9?nvEyFmNc2*oqPMZ;BInPBAHg2NddQ?(3h?0s{GzI+jTVH zoTBNzA%;rseF8@^u_LLf9iK!bexh^NvB@AyWYL~b<;TlP&bia;*aPDQa3Gd?uMAIP zvt8I87J1t8+fz(WUj zQ62DGSR9rEsqnM>z2^(wlP499(v>Lr&z#WGFNs-UX?ROHju$Z$XD5ukw*mC1l$@N& z@&V2Rz7*4?qO?GhMa7YsR4(E2qr=;8^M5-s{ma{+MuxjB0XmpwX&tz#5f>oZ0!|vvwd)&l>@;aI5_kl67nNq>i!7wW_sP#_A6u222D>X>ADWS7?50eG!B) z1zEq7xXWZ(QKaC63GuR>G5RTKgf#~Cup)1?OqgBBG0>yGmV;>Pk6hwv6#$xc>M+AKRA!{-w(=q z#EW0#cs&jd6iB>0goGchTGYrt8Ea4WN;>8_BDhcTv(!)O5ChPk3Zh&;NnxivT~S8N zD|CLSeifTcb=%Zeg^KSOs~`b>|KMb4J9&Jf=!>$9mu|ntF^3YKUX~>dlfUn;UezOT z2yf!1xVmnZ_^EJ$!a%Fr`J9M&xHVp;I;Ncy!jF~P5i&r;btkH_O8TdCY9R|vH(Biv zq=X?pfR4F-W->|1x$_SRv#)tVVC{mm|J1lQg=Q_xjcpz;Le*WJujC_B&^KTCwVP{w z=>_Kz{{{u8_=c7jlTlHOEyKe%)A;S|UUs{!(b|~9koJ3uA6>zmrM_NQj$3Uo-qo0z z1nMzUxT~!5c;JH6bwU=h?{w}BXhxrqZy>ww(`FozH_BnBn z-}i3cY3j+*z}zRCEoFC=68Jp$>uXHS^N|WAHt!8N0lDs6_rb8GDo(|iGv-Pum<#Oz zo3&khqhI{KF5HPJ7kqdZ-GSl=6kUbyIvGmr=w9cYQ+#H`HObGBVz8adPg2dqXBbLk zB7b@>RtCoyoAM%+-t$}tzk4ef2glqKue4-i#!Bqorv1s5S{Ju#3QHi8mMu^St<7uO zSyCzUKy_1mlNI)m?LJO2`+$q*>luvw`|rL!_*;n4XC6^jS$%prggWpu_9DsY)t7x5 z^>49;_0|PYXKj*0ovwP@81n?kHoLp*0{Jg9lQzE~pUW~8)eWEy;uT^2l{X93roD!# z{5SWX&z=v-erM%CQVjD5|9y_>ulO}2Vf)v3cS&L}=+d*Gt2wqnpktKu>KOizpi_Al zA!0GHAiPCpTtCe5cuH>J!*Oz`?2lya1Mw5Aaq`9^qN66K_jb<;g&+;a9@6W{OjCSY+^Cbm3)n@XSUS*JCWv9`NZXx*biGQbV z=0R8SHK=frBkH1>Y$-5bb%v+mp`T0RH(8lDNl>L-%KfK`1PuW{Z)NWcC-0tn-I!K? zDBRZ=Vhttg5M5?};Cr49koFAlxXa6rngu|=*E1PxZ7p%1=`$T>o^|4-EscvqA(JPP z4Rw2aH~;;5=R-)&gKAbt%F&wE*q!686k2iM(OH2Q9s3WD#@l!41Bb~;{O$!za8P2k zWD6#lw?5s<1Y{IQK;nxV%50 zK7ZvOBGB*R@TbkPioTfXPH(SrC8gtzohzNSIqFhbT`;$M*1wWKt)oHJ@e7f`@t+SC zNtD(aM-MkUiO4tFIYbecN3Ac}v1(O08P_0X)tG|36cxYAx~9u>SvgEr(&pf1PB_uS zoR=2avAO&S*zGu_{kD0K;VozL0NSXa7w*K>mntw=46&-^>T!Bh2I+Y8Wc9NxE9k42 z=M@82^866OlfOA4bJt0vPL0Q@b#aY#w=ULG`ggmdmKv{i#f{XjY8*^c;aSiFV^J@- zdc&?bmi5pS@P6UnIzjNex(_3pUm>A(hN1Mut1^xkW0_b5aVU~?9UX?17q8?yQMx<3 z)%FNxQ__yVcBl=7@`5XMbC`|mr-er`{gKo2U7JFBrmBh{mL@sbAEfa!+HdAx-bU9w z-L+c}((i}9uHW8)aw(|D%HswC$syb}>=JvoX?IxdQWw8oexV;&#-vD4V)?!!>BRMj zm<#vgoe;{4k8RFd-wA(zXC+FW$2o`1=mx|e2R+D{49xATcJk%i9n)vynjQ9u-^2k= z)K`dzbdKa(Xk6tPClSm~WhC~vuP+-DWcyWwS(cz!V>~BHbc)7r7&G@CGW+E@a}s@8(TJw~j8v9jbK38d#fap8ajSpM*n9>lY~dP2QvP z<%h@msRBQly3Af@)IeQ7R$5zM7chU*mBDak$~kdMkHaTED#?B%bAyQ=!pq7VpO-Q`x?*q79wh)5DDlwB1@uXZ`B!T~tfF1&Y>Y zJRf3z;m2#`bU!A~bpW`7&oR3O{=>pwY#hH!+-iSGXU4%Fa@l0Y3w|KzhcwozrfF>L z%=VJu^syi3aH2Lz^2UJI9h{0P@!QFzYeU<=TiNuud_*zm-j_@{jVhpOb>QY#S%;Ot zl4#DnejNBP~4I6lYcH|$EAFd%d@TlhygrHDN1q5ljGqjBsUqd zI^X)1`Wy!=Wcg$G#@!Lnpwasi#6t}D7;r%u@c{lNZ~=S$zJ4;D8}V**M~!KphL~Og z7rFwfvTt&IMSkQEL8y8W=Vlj?|ju<^}|}=51|g``cFUDp!rnNqV;7Tc531S+N{eQKnoaQF{|kJRod!pr#V|56+Xc zyL*$h`iYhnbUIOK-0rX0EP-xh8cZJG2`}xkfjm*IHdr)!UE1!(-r(r7X$PnM4WUt| zY0ZBr6?I9w)9HnXk2+}=fn%ukYa5KlRUzMO*GfyKrLH)Br1sX|7Age>V;bT89U5saUISezLcAgHtFw);1jOJDjQjGq=^gd5{- zit9`ue|$Vh#zO{XJPSc?E6gWf~_oyqJc;xUC2c?6uWfx6gbP0HJw-AZ-u>L?8 zw~_r3Y(iq2BFkIxPwvBia6V@H_ab_2H&cK%8_}au+RRP0L(|jqF(g|2$XEQ(6z*+{ zfTGgkd@7xJIOeRP1e%*5b!&M@%=RempDq6C;91&j^YZ$SR7~r5^Vy zN$-DvKUZS(xj4Pn8?pdkU)|z4e)mrf-f?Rp*Ndx>E9=c|lnQCH0to#WNWrDOm*)Jo zf5Qq$4qc66L)s)uS8rh64;nRaY{glke1oqh^x`C7vMHOg!U%=7^{;PKc|25e)xPT= zozD}oOMd&%i{l^aH(z)sh$#&)K-_AQ9(e09u}wB{J30DnZ^;jhDsrg%V!6YP=Q@BQ zOPC+Bj|0?0*Hn;1gn70jRmC<3EI}kUJy-tj#9Z-*3p;u`TK!X~i+^x3h|Jo$k_|6x zf7GrrOq8@X1JIOi`5jOk{4B72db&)ON|5l!^24=YNpISryD|fs_9w%8go7pPKuG;o zuMb*F5+ZF@q~^PREVrL59RkcvW#=7~7)oh}Cj7c3_=u2k{_wny<73S5>7vk!?2SiuFH2|FE;u`o z5tjT*$XcbJ=}l}vGaRUKT-@-DbG~MlXxUFwKpfW(FYA_Jr|2IX119e$748tr z?(U)_|D+|Or^Y7z*3Rc6tJ)e>JDkDzAg#HU72ZX-5m3#{|Lj>P&xR|ZJh(5ACVt56 z&@f}W0&Gs!Dx^prVP!dh3x8IrNS$Vf$7>P?84sDS{s+gfrI=dNUe&sK?5J2oCDV1) z(5&{*#k9-qu@^Uk(DCDC{6U;6nnFjPV9vKncXtKIYp-&p;AH_BjUaW&$2pKgHIu0K zub(T+{@st6Ph|TrvBW8?z*`kVVht2tH3&$b^|7a53h2LU3^#JK9rk^Q7pDlu z_*o9dCWsA5Trb^i{_L$Oa4_=V8q+b)WMjRJSufeiIOBHEX6@f^7??!sW+fPtB(lY_ z>^{nLC^!1{F1?#Ii7}evtiqU1l2yF!p!zR)PuIuU_Sc&&lUYUzsZ?h|WMWO@>{7ON zkcrNj>id|Ok5&!n=l4$ul6WtPqQ60Xtk|K#;1vHAC>Z&~S8wc46iYqQL6y4$)kIX$ ziGR!qjX|dgT_(Gn{Q@?P&Wq>p|Mk!9$7j3!|4pmrZXmj@K>dahfnVK^!Y1xp9{U+F03aGWQ6{--52s-|WRHmfVm7!MG#xZ|^oou3E%2Fp-u`b6ms16nbDe6ycL@t1 zMf`&kg{2bfTMA@f<)cGWoz0sz%(6tWoxQz}te;eZr$V@ea6BSjDM$X6@|G}|0i+wK*DK|FlsE*{WruMAN z8*n}ACmjh_7;~#eeDjj9pbM5wnCxgALt^XFfDQffHqDmEhJ;gE*bNu z!G=iiA`ImQ;EZ-%;eJIahfV>^uQy*^xl_O_eo8G7KTraDGAWptd3sfIGRS(B9A>+yd3@2T-2M~ ztBTg+d1v^ysVxbgf4F1geYO0MUjt-n~bDVvGJ{c5i=IGxZrU z@ii`K6$!x(yn`FsfEkE<*nzC>fkj~-O$xNC+3c#u+^jB0wQtTDuzgi@R}WdET*OX* z>*7CyZCoNnO(_wTv34Ud^Ea6a_ya#>W$mq> z2&S^ddcWDGua`z99B(AwMf11W7wDX8pA4pk)E+N|%!HVRZ=O=_uM!{zimMN%RH?of zEp?2K_TWt%(#6*3|Dm!x`jKpwVb<7n1am>Oq3Y43@aiYrsX3H$cOPu=Cz9zC9W6^l zW;CS}2Cpp1OSpSpjmiz8n=x{XFYvZk6tRy!+)D3LgKWEym9yakLfa;GdPrFruX^Uq zdZ(`SpSky4oZvZYrgK%yiEr6{p^daZx%xf*y>{O}2HlG#iX`K0LPV(lP?}rJOT$aT zGcqUN6NCzx6+<8Y;p?p?;`~}BT>c7Y9e1k`$49mpxKC_oygW*}_%GEL$IE<6(lRBz zxkYGve{jz~IA57a(C6zjNJyy2he|sa>D1p_Z`r`@@0>NOentpNc~^bu>!hBNw$3xz zyE*x8UtzDOWSKK^Lz(fCBJQ>BeY)!|6bl+^k9ezxo9bk(B z(1VvAfZUa^Jd6(!N~*pyMlyWh~I zwI9$iYD~usll6uvbiIP>xCn$1)!S>{in-fEq=6B-ta2JqX6LkTLktG2q;(%^j@DS7l8XxixLDbZyrb0JoXqa(CZ!6&~x|!xaxU}jpeKZ zc;4Y6KM$?N0UX`w6(|`1+LHnGd;9H29qFt(YO!!S=T&x-HJPO(a`7{KNVoJZrN-fR%? zo=DWUhI#~m$de>yoX{R#fDDgCS7UpDhsB9f5_-}Ah{{t`F%#7lP%UcI&@QS6O$^=# znp#>0U^zYyR0|NhweYyL2p|AmOabjxbv$rr%?G1K6ThK(0Zp#~_vG*WgCqLC$dCPZ zkCWVP`2*enU=ff7H90vSf^NfVe%XNBARrjAanq|?8-^f2!}t{XuPr&ivmOwHzXeeC zNiB3UR0(Tid&B`Wsq%G~D`$Z7u5#D`uLEuI?Bf*}MO%y2oY%O01R(FL5B|Y%KLw`Q zJ5^@?iyv7Ix&}QyolPXU0?yR`(zXISzINtfMhyNhwXrOqHU=TbfaXPXis6pvI7B%C zHg-QWaIY*d#n>;D>uWXhV1#;CTqHK#3_$CJ(|V&Wpf?%^)}YfAS!gC$js?gH1Ksvs z&+mHQk+oq}K!ebm8{k|fuRL#9fm9s8Rt=iylImJdSvyn5N&#%vY%w;ztx6JfGK*oo z&b0-{Jzqm}>D`3|k&@iRtN;liqL-+4=)p8*@~(Unispjc`P?ysE-Blwx|gWmf&Dim z+h(4?-8;#h_p(JTARzx6%}x(j9_%?~1X2lrs{=Ht)lP~3-Fs|t=O~VrfCC3o|6ho9 zy*tt@=m5I|6eYY0-Iu8ZO6Wd>_RtaBS(pNMz)}rJj%ciIJM0tx{eLKhy3Zt`++DO#()#m;<>}U%cnD9X~nm z)%a2g>NO5bJP16fPgAE5Z6XtI;4WuKYFVYoZOh&4xjJ}Fc{fu-X_^KN{0CgfF2MxAsb=1YnC7gv4=u$Uho zjJ9p7{lIk^Y8M*NEn!j~KD3NuY{|UEF#pHg^_MfJq)MK5AZ5l9q+#~jyJg41QJHBatQexTd~#>v1aHHTsMoh8snXQ<)g|)Y+oV>I3f73DynTF^*H}0yzcu_t{k%K8 z`+K7=87S?3f_Dl1FIOL#!}yq9MW6$X5MC;`yZa&~<&$BQ?ybxaOo|%{U05$L8D-N};%&V$yjO3bT7o37x zb5dS%OH)cXa#ZE`VLu*KVOjp#C5mRXW;FB(UO%zMb58u*sLwk&%n?V=yt{Akc94l< zE?2$jb9F>2zICW*t-%S6`9}20XGVTv_<_IH#-H4y#>8v&frOuD3nn=76H498#L$6? zz^_W$nPUci6|_T48xii3ZUzc8hJGb4Wlvz$P7UWBT~hAlJS%Cbxp9DieCKe3EBpO; zu2#mWo{>erDW>4NC0nRU=->NSY@a6hImfd<)2RV5b!A6xmVg@aMyX&5%aFLRVrf0K zO14reHAK2vxNh`}IkBIs+fq*Zyo|7XzTR4z9^6X|RQ=K4fBu3>Eh<$qQmUSny&^9| zPq(#BceW_E&B?`oAx;?1s7WiVsGc-isP}!=wQXzpfS_!bndFSqo-Iuwi6chGiDCNB7Wz%;%0vyAiAPpDC=l)v1jLTKEV4uBo@LQ>96Ge22=_^FGnqE z_fX!UH*H2*3EvQ0{f3lk4l|L-tu2j5T zhO29jkX)_ni|U;6*gkWP_u1keGeO7OcKz&C4Vv~+OYe<3H0>S!tneu+;i?Yj=Uk?_ zTgcxN_?yG8I3F`H_lZYJ>%jp^I6Fe!$%?u3Fll5p+ow|O{EN|nD4`2mh?p@h3rnE4 zl^e|YJLQ|rJx6MS=Xd$|)lB|2($Bm*zxf-Q!$3Tz%0z!)p7X%2)zGt-_%iIvtOC-iSgpJ&k>!vRC~WT zry9oo)A?t3?4D(s45FF#=KRnk485~?V4ZaMu5s-Fm1rn(Gl*X5m1#a+>=mj?N`Lam zxqheqQ%z01<|DDR+ZD_Z$L%eXtNT)|zs8{F*b zBR!YGl4vty4-@JwbD(3-`lcDUO-WPUWK+#0W;2musBD-wJ$lywb=yy!zhPSiHAhHk z*SB)_y%tVq`Q9_I8kwA+-~pS;uWxRhtlvqULYf=32-YmsHtM(&TE@mTFI`q?_L|hp zJ9*1L6HD!Gb_>n&T$&LWUO$s4b^g)Z(&9mUpE%|bnZ_@n!S~l#oeObi>fS$jdy;XL z9I`wliy1E>qWxI%3hGbV z>vh{QIKP_ZWYv^-PbfRz=I;{i{?NrBBw*(Dt+3`q^hZnjAg{;DD2H3?8r{ylI2lo{ z7sjc+7O&fER{G#gr8n9M%gYeny%m5$-WM$P7|k_UbD9wz zHC3sc7+alP0*)RAGAh6-k7|uR%KF>=_?k6>@Jv-EjT(^J{MjTpPMWklOyxc}@vc7d zVjWe`MZWrbq#{9K!`Xwbd)qedGjH#sF<=35*FscT4n-Z%$&+-a33sJ^9?@4Rs*jTeU&-g%~{*c2zh zri;H4K`b=QMwi5FrI@{az)uOfa@qq5aq8V0nJgICd1#;wr6Q32W0GX5_!6#~{)vR- zfXSH47wRgVZocSx)0lD-+E9 z*n-d~8LsW9oP(DSLXn+S^Ky7`QBUD+@(_gi=eKBLz=+qdyr`5njzIRK2exnKJd%j05ki)UpR$1-#> znUupxu#%kH|EjxGL?T6C@8N~WsNUEbLJzd)ZWiA42$=dt`r+R$ zqSN}Fc2-nfSPXdT(SNC!YssIy*zhKlE654l4vj-vyFv(x`$=B_)e3IH> z8zNc8V&hmS{0kmt6fTL{sgjnwab$szbxiS2vNpT~Ex`)VS21k57E3ND``99@7tX zSDtX3e8{5u)GMwsjsULi^Hy`Z-M7R+)Q`Bb7_c{0C9d&QE~+>ggmBj4bJ#O8;K3f0 zNv~OrRFppVYi#zuMOapC_|9a;&d(5%>pOJ3gI+KA1Tj1X`_hRx-t-l6U?a9(KPQFUU1P(Kd z^cMf|s?4%!v)A0dDr`AJAGud_r0}p_|AW&FP6HG8EcJm%q~F?Cp=}L10S&C~$`e$s z)LTyf2U>sN3BcU!A{k`~tnUX8=xi5+!C&bNW{xAC`s6Bp=03#Epx}?N$4t}MQM#LA zR2J}WR(D*OA3^iwKyFpHDPI~NrnKNq-m3Ry&RY1#oQgL6EA}pSs6EMF%gv^vVKsz!^Ny9@A%?h@Gg#Iyy!7Y0vGE;vC?tvlLORYDzH7^+a-mb#zAsY4?i3+i= z@^R6xo&V%t`0quL94C*r(NqXj)L3mS!TDDi@t?j5fIMAtih3a2{%^<~cu`zN^)0Gx z+2+4FfKrOw)xUWs_7I|D4rMi)S^YU4K8W#f*>b$LYN2HK<}$hFK<-B}oRf$=I<7p$_X#2pG+o0%#57tMUv(qk_PCR8_Ak|uLOdj06PhvFOUej%< zkB(V*lm&&Lh0MSa@mGv&$+G5Cufik4>{Z zm9AWDdrUdEkF@odtScN;RrHx|`^%Bh)T^UQCzsle)cMsVS_MR15>QslZ-2V78Y46n zpj>Ky!<02Yf5y`cYE%B~pCv#8$CD8Z3Z4T+1n8AN&k3o>4PBr%9xkD4r+lH2v7b=COK1(YYAW48#kjHsV9%~&Qhvu=y5bRqD`)j|6--h>zZ8fvXIGE^3pdpcn>#vvQq%{TgY zPQD2h&^mi-VqEci@hxS$CTQjN504r@615e_B!q5=qcE)GX(OqT*=SiqYZ6X$+7-Um zNjN7%miM^Vhk`v1y<#y!E~#qaDdkho!ZoAL9ZJno2alMfKpCdf;?bd-tM{0yBPTxA z+BxA!dxXInB;d2UptA0s1mkVYr5Rp;1tPakHOwi`;ftG3&2{C+p^<}jkD)=gKl8hA zbi@;|a;x&EY0naq`x(B4<_Uf5t~zW1+i!|i|890rqioP&1wN3?iDLE!_l%(QIX3-F z{V(!a4=hd|7^oDFCe8vn-|_@E8~e+cPXg1irK=N~wO$7&m1nK$0jWtEh-(?}+CxXZJPZX$GUkGqg9^>%Li9s&;VK zo{Vh(s|4@>#ivL%o(P`mB6TAjeLiiqw?w;yoJCBwoiZ*E#Ddau4g3E9n`ZHZ=xWVS zE~0bJW#fkIqV&|UtETGdpozr(32y-gcdrX@4#+k_kGe@P>i8Iz5nMu_8%%?DL$`z& zj1_?q`-F(ZlN{I#oITTFC;ZxSJ37?E7*%*QIfAx`?0PP`v|zt`-ZH@&kLJwefvlRa{~w7kx5~IuiN%V2+O5 zN$)w@EC>@3t`F7M1cq>e1s`PV!zVm8h`l&WJaS0Q z-cXZL`_)#jpYf@k+c{@@tXkqjSVv}(zA4b|^g5=>xf4sTt(ODKZa?045=>F4XA#Nit&Vydpn zWJXJz%`mgf>O(*jtDTjURdii&@~_ta$A46SqB;*xbGz1jZ&Qs!0OF2f0JvK&6F_A*aVjqP5`d zg`wUY4j|f4Qygr)%+5)1tp6Bv?iU+BNO@rzf6MLj_WkUVdPnN1wpmIi z%#B(93O97nnefJ@T?p8mrQ*dh?guf~PF1vjskBhS_8s-iEjj$M#7=H29cRspRR^dd zAJm@L-}G;9ubeP*?WB;ET0FLX@L&oELG4`Y^0AKW_00T0iWHpOC`i^PbzV(&NM7sT zWLY!x(rOwv$fSr|bx^KmdaV_Y-FWmt>m$Ph7`<-Pva?qZby2}izbja@wigTInJsDY z7`&@Lk%mj4)mIAQ-@K)idiFyD5625zG6G)_s=rLAY}}R5 zi46raxW8sZSJFHB`vbLN;#l48DG%b#Y`Yj-m; zXS5%v=IX0JPb4DgxN2frZQJCSV+8-IIVt@*-_Fbd*k&CW^|ZVnoB1o}qlKpUBCSq3 z)9=<}u!>zJPU5CAd*IO++FpX=$8PR>9KbE1eU5$MKo{`%ml2U2TkB&V`&s2xU}vf5 zV|ngJkC3>Nxxf2}-B{bL|z{E0V&cmBNtIw(B4n;za??tnFQw zw%0kYBkg16#J43GRWZzd#Q zY^K8Efh`^#{2teR2Ig!b@3o`}wR`sgI-ASSy6*93on#=vnA@t~>AvpzWulP{FepY0 zfhK+=$>}Xfla2k@9m7e06p!B>m~7|&_2UW8)XGpINU=IofRNyhVtI+dl9oaS14PO^ z_3!)?nJzj0<$U=v1~wE2;iB4=a^{UvaQV3oM-)(N)KSMhpP_kdvs=Q{ zrZmKKG1JmyaX#uS2Y4hvZD#61SPEGe@Zrtj)r0WpiaDNg;{4r;FtBwvVodfkLN+(s zc0_hu0Aw%f&Q$Hqno2OK@Af}Pd&{6U`@hYb7K*e;TckL&&{Dj(6DTb%#T{B)in|6W z?h+_athfYsFYYeI-7P@_B)Rsy{?E*_JNNAD>^=J;GfajIOwQ!|edTi;N1Um8kDD#N zx%Nq7`LCKjyzp$q^Yb$nTZJjFmbGyT-@wtx51SK(a>qv!xh~ST%R7|ZK?mo&LDK9j zTz7?#=M`dHhg#}NUJV%d^G6_$8==QU0LylGRTjE7`a!>pj*W9AcG{89uM3cQV^uBU zvzMQl1FKXStVEn#F_{HkA2|gyl}Znq9PnWMnt-PtWmUd8F7xZoT|5VKC_nLHM82mW zI^UAzvT(Lv#+?X#uT;wRZdks7S$cV|Z>IdO#>mf*#&wizfeDYs~ zVz}7OExG-h#+Y=5I5nqV_e8^m8A@#ppS5Mbgw&fKJP=U87zpJiKv zlIBQT()T>+cH@>|k;(1~UVs%bUP^J^Ge`ir=D5C-BHnSMl#EUFH7x0&*=^gq3Pq{| z#Rg_*Y@n7|Bjt~9A(QrP%1gj}blgRryWWr;wnxWp3nkmu=rK5Q8VtDnPOmdA^0=!S zB~!pv4n3JTgRt$WH~PjU-7ya$ZA$9XPZgl$Y6Hus0{TxM>?w6UI%|Erbd!+<=+jQ1gZLu|eWQAXCC|b1>q>H_BOC4w|kM19TTQirqdrs*o z-`=@&w(DqWUtr2vg&~3Q11HON&wc95#EIt!AMl|yeK&KOFmnYx$MZbbfsHrYam17j z@ok8xen0h}c{lTie2@knY%CeS2VV3%@{Drn6H}X!DY7*b(>(D?izPn(X|2}DdWdqc z-0_c`(xrXT**1&hD_l8xu4L!O_|!6T>osxMfRKdpN|salLgi75CaI3}@5OvHN@c+O z6`o)R5J02#Bjn!>*punB;v^f3<7rnT&cny$op0G&;&bP2qsUJPzkH-JY;=jNhUtMi zHqpKzX~YfC7f{p9YUibzybkGCt5n~NPI8~iQnm{%iRserQETMgn(l}^A4O(yFZKUT z%9zc`AFA>oe9qovuhi5DL8D$eVHlcf1(Y)Svcc{w`M`Vgm zgie3?+3v2Ye{O=IPHsF}eEQs;k)$u}aqIedG6W+pjXO4Y@Hs4BvGL9{99y(&-&ya0 zIW4@j1enr8IWl5yeERM|m$er>-K5$cxWmC5s%>L=^U$4AUwFhf29)(`;PuVzsd8h3 zoC&RFPakE>U=A$jo_LU^%3Hm>Q0{bY=gypoY6h@b60=>2R>?@NykN*C`yTf}4oV%s z-Hhw>XXtd&MainKeYoxYRBOXc^rM*IPC9kvnO)thJJmlrvR*II{1BKO`?dG#%5%sD3i?6_|WM3fU$%rV4X>VNG9j7R7FuBWYQKJ)uVslVy( zZCJ5akM`aP9B5Z@ai)5a`bJ33i$Cil%0B?@7FYVSK2vS{ttvf0lPF}ig!fNZSBTy6 zcq2QmC-mG^QvKN6z7)APH`D_1lJ!qE9Z=gh8-iv`dki7;?uUcrhEjcCn|A&sGv_02 z2(CK@N!C9Y0*Zt<{`K|zAr=!1h9bO9HzwHI(a}UjHWt5b=AY6?51DI9JU*lM!zoal z(-qg6)!xz+kY-K$JcOp(`_{La=2j58t?T+8Q#vI+=p|3nW5N?M(|)-DY7ACCJ|EB5 zJ_qs+WOfxh7kpZIs3AJNLhg?38jtcNsx`FquO=t(Uq7T9-o}P6Uk; zVTrnrcRPw`!nYvg?`>%~TYVtm#rtO?Yqis?wrJ4a1B5V5bh<7z?B(-9 zkw+jyQ*HPYYqhU0@*b&b+pEy+T$Pu_MNo3dy?fAS^L)q57?Q%?{>;9g&}%@j&$1}a zbvX)?(a!G!BW_XT+?r_6qu0qUU7}ZA#h%f;hRHK`=`wiH>1`!-4a=R^jU`Kcu4eJW zuYA4_7jLjw1`Vu3)v6#deSLRdrj*4M=p zqS$^SK|xy-TW>-~BV$$rndCDS;d&o5o1NM?ibqZxfMQjFP9-T#d_L}6y`}JzdO==S za&)?Ay{yZb*2y4B#E5tCA#OC~TVSHHmzb04+m!DduOq0H4--!Zqe*YYoRG)A>fxe8 z?K@L^0?p3ky>Q%M{2lYODiN5_^|8iz2mK#5fs|V%@l4izU+3kawrKAF$-}@{v14YF zgSTGdsD-_h&WJik@|3%8v7NXz!Pa5NizeWnfITD<C!J$cl%((5^%NSFi@M_#YMdiGbOhbj!0M+5$L zDeKGRdpTz4H?nXU7HbFEt%p4Dci&v*dClVdEf+AQruMl)vR)m`{a9#bL;;vM54>cu zObLBK;9Ye8dv=u$Bd3s z>ABMgQsreC=kEP(!4MrAc71rLf9CRCN!b3S9K{=nPeW%PSj6H_sREWHD8w_#E#YG_ zq<u^?3ecRyUOiHFIW!hQC1mUZkdMWd&}JvwwSUAZBJUX7 z=*+gqgC1>OxRtchwT+@5~yB{*$msU+(|3dclG3m2A_%bSz`Z< zpn5F$UdNeezN5PiRpC#ENbFH*fvf!3w=-e5C|Z2eEIUD;>`osTFoEMnCw%nrMizg;p9uh6hGtrzn4%uT~%aA zpz_^D#QsHCUf0#lBe^_C+#9{Iw2o4S9@C2cynk)Dc)LLx5T{(hK%pu1A~b(mdoQ{! z$uMz#qSS6VZ(W5l_SK`$v)$XQ@0JZ}LUu{+8?M^Cc_H`Ea%AAnrG-`)3$&S9a7mJS z`#RrQU|i+1z02{Rfs4wbHc42$-u6uV+T&Z2IR9%^4d)BUes~R;vH|S(>izecHUz`;R|dKgv;Z*2l)`zJDy*A2|O?B%=Sk{ zFpugO=(r+(1q@3v1ZLHrtlT}gW2>-Fx;k4;ucS7c zg1=7T`)|}Co_2pJ_J3{jF4bC*R3w3Ks!tS|jQoj-_$P}~tGA=6pD)-9IG78eR=>NgU{MX~Q1m)KQG1X`49v5+z zfoY*0N4~Elxu^eklTp~H(hC-L<7@F}xSPbeWPlHvZfnPd6?PT_1gRnf^&CA?VTQ^O zC#@D@>b|!`C&?I(11l+&JNAE}!0KRCfGbR6y{AMa$DS{yZUVGqiM}H6oLLT$=Kp3> z@(4Nu2S7IBe{H1cC`Bn?A~*GjG^ppgL7e0ahwHM=;r08sOxy` zDPVi7LZyc|z7auKx;eb}Vso7;P)^$uVo&=`{}5lgE=}_2%KSA&K|a&t06}mF9j>c! zaJo@z(Se$wSVJXr&9;_(rp(L5V5sAh;-eopIYRUve0QV|&y73#;tZ)q}0f~c5t|BC#06%MubiH>8j9!U#wgiq1lCJ%57c52$1A&>O1wnsB0#xF(<<0$ zMbj-;VMxWIXXw${`v(M{sZ=Lpp#id4WLtAB>OnmF2zwTKWVRm5mhGAb81o9-aap zvo6vfV6!bU62h;3&k*jlLwP5HeijAb*ABtJ*S<&dAB;&TkTbivBIg45VK@z!y%C4l zlvi-$UZ@8VVE7&a%$#El>bIyie4u~nQ)>2KfvmR;Vak!P_z^6v=e^{w8Q)!m+{B%` zjN2X_)8Sj|Su~g0@~8W?ca)WsGy8Z@K6={~&fQCWyF?LiHRi?HMHj>g^Vp*6XFjRR zP-5s2f3pC+He{jV4wU8p0{wHbaORIx7@%<$thE2X+93k0<(<=mEV_@53~ULGKru*}m9rpEW?yN`S3Ii-?v|9N|pgWBzadK=(ozg2CcD(bI3HzNI{05ta1UE~O= zqI2U{))Q2I$IKQD)d)n%EV!@5YB1iPviv8Aie8)LioZ4Xbci@Cf zKw<+28lnPR?v3KnSKV}kLxPwZ&5VH0wcv3gD$v(wv;EnYK);x=#zNgG zt741iZqWXhW(BtdrP0x+=k!^)g4CCq{|YK7+MdA`&$y*y z!*kAA>vn=CvmgeEo;#<7+4pk3iC#gFI)F2m14+7ysg3AQl{;J=H*uD8eA9j1+z>BE z9ThlSwGoL3{x2T+`m`WawzvTJk4WX2@8^xEw2n8v^cI(AC%Yf@=2X;06_SV_4P?^| zgTo0S+aM~Cl?uMEFX9-c(kslP^p&lG{o5?NLx8$9({gaU@mbBO5We7m0d=GXAV|Ni zZ2NwFC)THcsZL;=;kl%T%-TPQ>n9W^^E^g(dB>rX6pVQRu%4UGmZAgKmh!ttym%gV zE!(9YTku#cembfw+5`kLkkg|;~S z@TiBJF7u!GNs)I9H~OfkHb1!3h7|HELSf6=^_=!#seLT&MnU%VD^*6vri+3D>T~-1 zYzBO1k^PV!`FgxRhwjh|u0NYh#zevn3UzY}ra;2t|50UN%T2!i=+)V;ByHi!*)(rZ8fNBtG#^{2KZP>$w+By}$IDuP|)lwC};g22D35syKN_ z*^xeB3DxV;)w1;=Wq7}-@a~HKiqV-!{)T{fyQn|=@3THKe_X_7{;FqV7bjCfAtG@q zdb~O|OK~jj!=rf$$0OnATp4{|S+t6t#;<;6r85o4uFb`j)BmLZU$X<~U|KFfcEENn z`0o%7I%&d4;o%ih4F;Jwg~Dt5&bOXDBO*9*_ekYW4=oU0Vhq2XTlj%AEkwlW1{=hl>F_RCYrfGjSL>H(6|RZKp5PN72OAZhT&W)J zxUc#MT!K`^aqxY~V7Ndb0agJD39IAA3Z{+lfj`-g;_d?g)z`fejr-iS%=7=%aXhq> zx#P8T*v-!c<-Q5zTj)5jEdrTzYAN|^_yQ$KQtATu#LfZ5N(x_*LkfeoP%j?Ve`KEv zg`vEGk4L_LS!{A$Z~?nt1cF}URYSrNnak2BUZmBM0LC_pG|_>L_j}9>D!`Vp5uSm@ zJFPepXGfTdu8AXbc_J#W4ox}Pa79)=wZ)WmHANMQf6WU%&Bg%P7(YQz>N!^=IJ>St zm(HkgWnFl@$u*ZJ_EzO4HDTo`3f~<6gS71?XsHK{7Yq>J5!#oY>znMOU?Oq)?!AN0 zHj4ZLNtPlV%62;6Wl1e-MylHApz}OjK#p zI2H_3YS;K&@(GZz`xA(6eru0%RQRfbDVm`RS`>3L{8=U!FOn_#3dCye^Q>}yY zS04Or?X~HD2}JNh)hdGk8B;jj^%f8kAbcnC88NYG90|xZ=&(H(c1npVbTul~E++0uM zNvR)uF%*~z18LOStW%t${RPYqHqRgjd48hfWj9afPTc4ggS*}58{-XD{-O%0noQz( zmYbU)K`pTw5Wr_NSO)|HO6)s+pX>+xMKH5%zc>N9A4FO=5g`5)aS4+#YHD4mgzo#P z_ZZ;4)u}L#dx3c|9%72s3utLv>JlZW7fzo&7%%#MM`by*z1+;oBbxQL8JNW3 z<`>Am_=@v%eyr$zWHe00KJ9A}zM{>5#wv=iWWz?iufNVM3W6eP23xG(2~>vB-Eb~} z52}qt{Rfx!G7G?eK8f?_uN&(xuGl=jUjnQEa2H;pD&AepfV>*YX!3qx0=$gFc6QIi zBP0gGhbUasF89!b%Ze=Uw4hx&O*Yz$e1VOqfyekg@*OH0I6s!7ZgLQPL}9*aOP{LW zj(6rBl@WV!cP`~=T#^JF<;(h;_b~tY(@#k5D_SOBM;o!O?*)OBND-^qSy%2&Ec^v8 z44`3Xx4Tu~1g`*2@G$r~x&sQj@>|t~F`YWWWo|ygA=y3IODdn+TV^yus^MlVmXO~# zkCnEgio5z{d&`g#S**!GOJU*r3Dy`QstIq^To9Ehuu8WZy-AdEDKV1yUc;H`>fAcW z6hw$I!8dX(-{j4g$JY+EZ^<^E0PM4AjFF@@8bLjq_=z86XVlv*OeZneYiv(x=rn5< zc*~Szlv{()-A8Xzo|WlhCCLA99PSAchurN0rQ|z6!uYUlxX`0S+%3*r17}Rp3mNPX zwzkkoG=8lS@${7O)c(iSUW)^@F98C00oM9#Mg2Lp!3dmcW7CCi?pN`^NvX;^&xLnn z1IWg>9Z`GCvxQl+dhyE8XbY$h+QKJ19aGJK7jlSNVY{Wc_WVzxeuQ_ z^|xLLW18+J8P&pv$$`E0P9!?5t zqU}?{ea+Tsj#K*D>gETHIM(jrGT=Nni|3Xly?Xu&?0JsTA=b<2gh}TDhYJJ@?DRkH zqay$vknN@lg5m4H2?Q7&n2MdFBN{7Pjt7K3{y%Di9w#IVL%x!~2qKaKqGo)bzz4dV zJYQ{vme^U%6hu$6!DV(%V|n8(F|n|}^re#HL|%;9NLl6|DKQSeWOy_9fg}`fj~N5s zw~MGky#89{G;{NyZ#=N9Wq?wVAh~9ny~iFaP6BU#ofJ+KZGX;@+cX2+j~h=kDM`p) zJ#ll#`~^|0qT%*BHXdy*G`#lRYM>SVEPp)AxrXGJx*sPZJ$2+gYS-7ggW}q`rB&8p z%~o!O%e?e*r;<6>cex8ejfU-FMzh53EJ(q8HpZLb!TqUZOG<6pr};~I28src2$&9t%Jb4s;& z8^m^cRffy9*Dia`nI9s-v%+gbu}q^(LX=ZkJa|!T;dV5$=M-ruP`k*w%4FMkbR`-+ zK*9D_P#!Qt-Ce)B5+?*oH8(7FA76=DT&(H~py#y6mq&zVQhvD}#E+!Ot5 zBT{`+cAojgpQ5RYMXy&|nP7nV5^u5=i|aQxa&b)$Xx`cN(W%GYL|*s1gMQ~V`Li`| zbc+}MkM@>5Z5gJZ*hmcl#r$UAG4O2M`B9rA|u{?oGEs*rD1!?w=> zR~C(2o+#^wWYMOat}2xKEZSAxiCFPIP@{`%eTwu3L>EjpO&-z9%6%S~sr(0{w2J*C zeMe4Y3!iw{QNc8(%lm%8w#3?@oFw9JKz=;^BaKGInp=h<+Uuv*+}I5|kh$LmytQ^( z;%zS3hsMSbxF#DJp0t|LVxz}!qN-j#)NI+KRsI%oeW)#%XZt#uSHA1R9}^(h+EL~L z`fBp*ZKFOU_~fW0#FPO$dHdH(LBQST>!HQCHAiiGl@_bxpt8!7SZS`qzE35D8E;io{*fLEj8_EE8#}Jh8a3M47uS z$aP5ISiaMep(Kg#;7zUsXw5|Udb_|EWuV3SBBuCY{$`mU(rj0{>k$=Yb2NNk?=vFN zn3m@B-STVI5NYd+A^M67p_O5kK{0M_ztXtx?~;5#e5U2{Fwukrosx zv2eF(l{sH-h~CV+V>f~GXImqV8IK6%%Y8B%U?a+sMVl0Co1UoZN_hQC3=pg3}hPB1}&TLAnk5M_J%;o6Dh z{Y*&=gjwtr3#8Jn^|E0;3c}jX23f9-vn=Ry63%Z_m3eQMYp%AFtu)MaN7*hO=Vi$t zJ`iCXlHh@jdDsKin>92UP`sF*QF*$*$H|y5d?Mc2bEoN}@Q`+%?^99`x*E8If41Uw z8oIqy4UHW=7XBF~lM-zT8y_1nt|jlxEEp|^u0Dx9-vGxVMK(G~&m7$|%9*uYc^Hk&1c# zp{PuBeSt+)kx2KR)m|ZuIzkFFUd9PQi6TN}b2vD3yzuniSDiIhZ_Ofu>?JgEC+?gu zm9S3kXR-Q5@n;&i89a`XXE{3+QBXLji(J^$u3cTN^Nn>=tH4Pm4$Ee>A9M9{UoLE) zg2%;xEzW5X&wOVN<-7{+q;)HKoAK9-MT0(2I3+C4-tg_6CFmPBW!Xv(USCq=Zl8K* z`V7q5pJ`8aE6H4j~K^bN{o67%q*uITd$^T@v?_@edQ z)wDU;laynr+7F_y3zM%Hri$&24-y5Jy6tbyq#q`|fyZ9_l_Yx-X)QzS}`5IXhV`h2~N5 zzH%nKW~`OTYKH!Jg{q*)}FsY2aHg`WQTHvPkQ6BzJ5qY(-0q2r2*D<57U{ z_S08MeZ!nn7th$qg;myHp1<=V9>~4YL-(x_z~jP1rM7gDs+(SQPkeMtBW-_to#DTb z#R}}ga5`7zZ`R$h)GQW#qLJNhS9jL7c%Atl1rWgXetGoYcwnnUfp)a#fHd=Q2Nc;H zvT6C33Iza7fQ8X{ZMs0LV+U{^8M%ND8Y*}DiLQYozYX-SAR&uRq>f$ie)%&H*7$U? z{2Z8;4`M0-JeXDI)gwJ#jQ_Pa|KI(r<= z!U+BwS@JIC8}rDbe)Tn19IUKP&01_Yx_~a^FESM9HwHal_4+@9FNFGP7TVnBixb12 z&;J-L|&A?N;Zi-q~QoQa8DzZs<%oS#(dL)COzQoB_*9J7ihRxUip;thb1|YnS{F~AqZFWxs0jWlms1~ z{|p!=R~ZI+<-bslz}rT6Y!I(v_fbOu{oqAA=n?C^d^yTPVn$Rof7RN%KijtSFcmO{8NVS-r_i`D z`zlGNDnU0E_J?zcbBpfeeCtIS@CK)P^VDKGSrDb!y5d-W`(6g`mmNI$>|cr=?SyG} zVj`u;(mDHBHDI)De}ch>N@4Z64v3`9(wF^#9qtwbwhxOtj@r1PVPDaB?voQM4F z4nRC-I9+ec?xNh-Ia5hL%Vz&Y?#Wzv8KYXs!SJx`S3k)zH{=F-0@Og%N3@u#rYlOb zg@>Iu(c$+L00I80ObCT%$7i3v*1D~nr&~-#KZU{uwpA8+!Q{dK&7kp9BK=3#;Vn@Y zYV}XoM-|xMt4W?OILmeFuYt)+qHLyF%q(}yuTY#^oTj45|IW?g-`{;~kp0Rx?brpsKzhQY6ApmBiwX}toxd5a9sq5(2D?HbV$@(2Gt zl~&>4F(nVz(^77^101Mu+rxHaWFaiOhuvgrvfu4l_!zX@nU+=>C)$$n6yH&dHI6DG z^cjIVu~<$9;C#w`moZtua&0OvGE{JzP3vn2&xIF7x@8lmTryO(aV_c=ukHaw98LS< z(tVnd2QBOjKaP+*z2yN>fkto0_Q-cQb#AQ8YFoAhp^K{LyII{sz1Xx;X}j~ckIw8V zzddXXJIlDS2oBgN9DIYtWJNA5Q*#3W=_K`__wp z^ehJ!^jPqO90>&8f&6XJ)BuZo`0y$5nS=( zIW({gb}*kt+7%xQ#D5|zd&xJE7C$L1x)&pPnD|0meQ1Tt&_0XZS8S`~>OnL1RZF~} z45$qvj~pkuB?%C(kAOe*iNn`7$QE4YFYsoHJ$k9wnt&l2xsCCX)MbV}c)qHq*riQO za8X0SZ>fEK)%I|Cb~+CNkpqPQ=>gy)SEbFe7@wZUOZpEnVrM<=6UmM=W=GHy9BS=s z#K#+-Y${vIC9F*=t*>vRkpyuYoptH>aFk!*ea&M`hE9lSfv|484Pl;V9ZE}+U2L#T=6*%8>uPLAk zpoj58h1MSY2|wR?mTgmOg zwOT%|O`qrv0t4I(oGz~WfeB0Gm#7fI#^Ys=!i7%l-+DC8`8xppiS{qzwA{=Tp7}$+ zUYqu=fyl+NviWZ{n}pbfF)dQd6wl3?^Xi!O=ZS-T{)Jh6A|`{3E#(slZ;bpiAsj@t zAyEi4r)8SMwV75R_F0-~=##H+Wg!=77(3KKl2?7Y!gZ9cQ#yxVIEpxo$8^qKalKd_ z8kZ9<;+s1yq8PJfHo8A)DXPfq*hxB1t&NH{8lJyIcTT7$EVMDytf?Sm-N;hJq_qeL zqTdMyLzZYRWug6NG#7GYRwtya~!6T zOUzMniN($yw4^?!hXZ_9O+uAFI;hKl5@2wWPs#UBk@X>$b1F9meT=lkAf0IJvV`if zu{-l{@bR&6rz0WHi--{#;hQ>|-}9#;jo^$L9}(Uu!Gg=&S|NV?u4_m6M=oBYkESn`Q6#`8&k zTgnKD}>u#I|@SQ)ssHReE zVqAlvaN8r9xs4YcY3nFC6=)h?aRXv8ev+s_Y%SpyVR)U z(4$cnY%FaJ8lC7aChvZKw(<{#uzvwXlR^_|H^nUT(mHqW!ePG^4zB!ZStd~+$Xb69 z{bteDNThbw*Y4Z1ZIzk444a-e@t?N1!aKf*YYtEh(QkF6PXB{pXEnL9a+Ho=N?sh< zKP};#kmVsOGy3;90NWAU%LWnmIrP0-Sd+21h-}+t4gTq~=8q+q)$hj!{B51b_tuX3 z6~ad=q|V-a>?&bs61{(MJ!UzWwLhW2)NPW@XTFo@u4R}gjzBm(=pjS~^z&w^5k|Ya z%yxtY?@{-@IpP~1n%Sd?v+xcL+b0Hy9_t<7-18vvRD^#VcJRu1l=(PN7!K6zzw6|6 zfR0_+a$`*6V=!)Nc$lsieVcC(1;T*i@2K)xj;#EK{1Bfwu!jlKr=h0(;yGbeSMEL4jO5qn)f~HMdlwo#J#M;Sw5{bs=Ax64uP;C*oPReFux{`7teTCpx9Jzgy>4jElENLw8|1*2!AamNLt7drYc*qocV zmaBxwG0PkYl^wlJ+K*;>ybVJOoQfq)9~+M^=Qsbwj|Q)aUY#1r0d3LNT6Ph_=KSNd zgK4&QmK4@+(d^og9)3RrCY>I#jBohEPob^L@}=L&JNY>+GOKkO4rPh!wyceNexXEE zdTmx4A5?9aiiAiIW_CBy9 zXEezV@i=>|!j6mLQE(2m)rumBr@tgqOvQBx*w0HK>-IxDcuJFefZFWVA<2W$p@0x}S zgpr6{RmJ&(2>NkHoIp&$t0k_7^2`qH#*x{}56Xx4onvTsHoqS#x@Ze? znjrKci7)tZ2p-Cv4&!m?RQ0Fz(kAmIeg|NR$V$3jAz6|~c%8$yn`OQV5^^VgK6A#tH~_d}8ROyn^b1ylZ%Qqe^sA3Id_ph+uM5l7 zR2)VB(kjLb@$`-oJ>&_Nwbrk#FN|Ei>v@y4^rWv&qUzXr5EK6wJXU3kc?>JD_AA~# zgOhuL0$t8)StN^0W6#Oj8;|YVxY`RmWO&g~UO`PrQaRW z6gKgQIw{~go8~*S*o*HZAxnF7R>4po5i5yZU3fH#@UzINW0$;)eF1>(L`OHyzJHU$ zqo{wIu)<~JoLhY#katy3`Pt!k*4vGZZ~AYD^}Gffp87L3SujV@66B0yo}ZokMN|U<8_(UX<9d>Jpxw zNKY9_m+oP=u7P6m@DMKsw-@*rRru+K6Gg1G&jXo3vAFxNLg|#0X;N!!cnZ4%6DZ0l zZaAyu$L$Z9?+L@lYn%R#ptXUkF#(U6d*l!33dEixh!uKTHxjF-`98)Po=pmQ|w>x2AzzTlChdGcYST8 zS}yKF@~9W&^*kGMoMdK5k^P;F;>HH+X{jE5or|)c-({4A=7dV`NpTICp5aYwPlrwY zEmK~=CLaJDG@B1RNL=1M4Sx8z^!(E#YsishpsGw`F|SOqzQVh&`c{!wFTy?+9sM2S z(1mK>g>2oj6-LLT73f+-I}=O+Hh-#z>2jdjG~96VuH6QS^IG(iG^_oz32*1iY9IHB*-=ao8Dj<0AIK55HTM?};#Cwk!^FX}9X zZpWp?nktgI`TZH-{yBEvO&ZcKo)A$xE2kuO5K&E#aSA!ixzSXgvKp4fCyHs(G2jn$HulcC8F+Cxsj}v{a*WQGM&B)(`H`p7=(M@ zcV})u$KIWq@0@m;Ls5K2THk)Eb*b5_)nyGYbOLbc!iJB)k7acS0_&Laa@*1jSAjR8 zr$n&;Hu7t}o<#fl^Lrl_r;ueJr`N;Wwo_mh>F>Ok1c5sKj$~B>Fx&qRs_Sq>mH6Wv z+^2@suT$$kOJ4XUo1e_q*_z155_7R#Y~+$Pcjf17OnPniN(SLmF;uw%ZAjxQPr2Zt zU^A2tQC*D?^;xJ+HaXsa*Oh*;zm+SPGc@#Cf$^*m(tQ{yQ|m1-r{G;*vMnSE&)HOepQ0I3 zCblET=dORUYwhO8C~wg}6~YRfS;^kvF`k+(A(zsw1tprwYqE%Iwg3WyLZg(M_iXm( z#J4X(IOr0h;WO)T{Us~5{5LPKe+s1WM%7IEPTOG+N*oAhD+BW{pY<2|pG7Y+*u{As zevlLK{@R3jv)s@C7W|XewB(W2N-;6Xjlv1WAIN80L4p&`t9N{(MM4i#Q~DlgW60^s ziEGKst+@y5Nhd4Xz4dUVcjn}p?nSHD&Z3@InqyZ4T@%i75h=CaeCp;p(IeiCm6dV% zK0J2bv$07+=*)U#UtL{m`aJr)_cql%WootVh2)!&CuJ|9O*Fdz#_6%3*k{`VH0_M5 z;*f*wlZd2jE<#k-Hbvd(Zej%Pu*^{B7>c5nLkeZh2)nu*0m+x-{o1Uh^$Jt zQk6ld$M*Fs$76jR<5ej#BMp7$xF(t$F27t2;+d>8QT4B_aQ+!52eM2v!`S^4QwAbs zX`Ed{y7)ei$2BErQ0qNB-OAQ;*(>zxkyE>l>0!TZ(V|9DyL{Yk(cLfqwPMV&j_c8r+ec+~ixb`HY{Y1dtc*zJAg;Z}L6=M$6}v9DK2x*ir_|`xYBp`TX8+ zCF%zm%qoynS$cDp;0 z%R5zIW#9f5Dx^eTv0esW2^A1OA(u`R#Yc95!$_QS_RJo$`V{x{>U~_i`-OpXoK88d zMP21~&{ZLU6qzY#d`Zj_fANbf9$#ScYGPMDH84Wmj>4Q88>1R2GF@{dGIEk^&+Exl z-xR9gNx9|}p$XC8_mc+SUnj2-SI4dizOD)-i$0Itn{0D=4OCG9W@sUtrix56uSZ`a zXoW+SnvifMM??2kS)N5@ZTKI)!CPW{XOYGUuNf|zY z?pEZ!9J6&I?d8CgRhlnR;subAV71^4>oO1R_N9`W$rSM%`yjF8qcaugu$T8G3m<_h<^MB?II%t z-ONSBy9vDoQQ<|31=o{=-D*7NNWXEc;Nv>@TD>cX`r!UYLYKW+L#xG|Nn6Zs6Q96@ zAeo#A?3UM2Mf`b8!w;aT6ZBDE9c~@VMLN zSq9xtmsU&}iYG4eTjR#8%)VWe9EkOU+4e7szRJF9px?H@V5r_Py(pAoP_j__EYh`H zcL`L*+j5Hs|6r7nRMZD2KwT0zdoN9d)SXHjbj(kS@HbGQi^X2r>l1$`hx1~E4c!T7) zcMu_%@}6OH|J0}CK=}JTU3A?(+%1Fone*9iyRe`{Y$`*)3DHX+D_r&m5Ah3Hjs4^^ zLT&(%6e~_0kB}oL!~va}7Nc0l2flt-j27bh(%#_1cQ9XyE-Fj4@Ek2Is{5m{+i`f5 zUFt1jJ990b--u9!jcjKnIQhWP*MQ-2&~oS2XuOm* zql!*g{=pC>1q{#n2(#>oc04ym`YTk%Nj`{QRaK`jFuCt97wO%edVE5t!<}bNX-PZc zy0Ta-zO*P8qBWD-!?iI=la7c~Z+#Zh5i=Wc(H)f8AoXc8ete3=i`l!Ilf2C31ra~# z6Gz+0p1ovSIrZX9K+w)s2j)n;j`9zKL=IJx&>v0NK=~>~#daOUtNqm!W^ciNjSVlZ zvq`KLhesSpw}2i<2SAr5`~1MhnV?#t7*m*KKLMFnws}@wt4ivkS$_{gP##5EIoLEn zcxYh{txH!qn?lQ?_5-+7E0b6R=6~g9=iR36^#KLKX593D_@;j|IFN_4^M{DIeF?hJ z)c>e!fO*dUudbm$C4+YUqDjDip@rZ>Ztcr4_zYUXIIi>L>n!-HP#zr$HYd8{2Zhkx zuv%x|D<(fWngzz{|265?E3VIBNq;l!54$u0Xn>Y?MpOvQ*VGm{efoEdQ6$Zy^!?jV z)iBKB${`SfiD*FO36dUF>g%v&Oks=JvqaWdXr#Zmz9vZ@K6sm;7}?9bm@F+M2xPT= z_Fq)`X6N)iMdwYT1b>(-*7gje8rV{AgQ!+&KxH)!mP4q$nc5G+LYmKTToYj-GL+$b zko@j7ud74fzF4K)hHR-I0(Uop_FrTf$e*TRUL#&sub5`H3Uly@Xg%pZBT_e3O}p3L z)F{b(nuBIdpDiK?qdz!$2MN;0N@BzU^eB?00p5vxIWus-7qgWKQiEHb+*Pciey{ho zxDtpQ5}R5jZt>AEvyd9N+C>gJKc$<|Gn*{vb)XKfkv`H)2$jN|eX;Td2XCV@E}KyN z&B0-*r^A3ScD311TYE#^3p2XYlCOh)KQRq(;=oo1zJ@L?8{l98cYkj9?%;*l>~|dl zYkxYeja4J%X2qN#9g;N0uhwdbnW6D-f@eYFL7OfkG9G-$(!XL*C2XOfl`|{8DKSv5r`o7L@tJOW! z+TyG;pdN90{k9-oYIP?e^Dl5ZkNGY?`1$v8KFA*mJ4E?XIngG-WqL{pLZ-mX4klV_ zRU*JBn{_wOKOm8a0P^rS5(DvY^4z6iW=)TWtqyP(&T93);*>w3Z{A+#K7i$ zNXKhnZ~hgo9mbpeQs*+tPOqP}cwov*?TORcD^!X<~sH=_E%%$FT;XuT;WKe3sWyOl{NGhI*B>Je#e8oDLc$lcu~ zsyceklwv?IoJVhFd7aU_#x&hVv3V+GxWKtFeHA1As;Q-|*{-^W@?vzLinMUB{6p7= zaj*PzlBS3}2$}5PZ;(()+Kow^Z2=@{*>+=~zsT`A!4?cB+zzS18|8E9!=Duk|732( zPw*hYcxTr&E;ylT41Dh~fd#`v&>A~zJ*bXGWQ#0u>3SEM`9s*?1h!KD=ab~Clq0~e zm~+14havxz`2XPUt)kj|+jZYiXpvGVT3m{|Q=Arx7bxz~BE{V;L5dWY0!34-K#>#; z9y~b3-Q7J%Apf2DtvScu``dGkwZ=Z!2m9zH?*Sv@l_&Re-@og+j_a79M37r;&=;dq zMI^UmQl!pym2SdU_qXK#T`tc5EK`^(^)~ygybDC}z~Z|OrnJ+~LdAN>1UlA@&K&J^ z?6$-ED*8)hNs_l(5v_dfu2|IFjMt1O)NT6xhII72eBt)l0r zBZ1KF(_6NvqsOy_gNal1Tkp@oAm`UZv@_Mh&{0|qc}sn+Bt<{tdzl!3b#g^%{{bb% zOFi@@OFLJB)88`hc4@|<#5IZSCs%JtM~Cm@Bg1LrR<;w*3&dWNkC_$PqxQtvj(@Xb zZmwd1I@$jL*n+XY2SQ#P(6MET6FVB`RN&qy$Jv2iIvx;W1WBHab)CL2xdn9@lSM^& z89o;@vOmKq#D{bD5L5)FrZ^T9gh+8Az>o3mw5Vxg!ubcylHgdgP&~8-tW%GVr;W6l zB1Kj=C_zIs&#|NR1saTXy=7aU{&tPleh~Xrt-H6m@afNxOP~EI{Uo~viVxmaK*zCk z$<8aS^L1ojmip0mESN`>QGCGus9;~^L*rs0s`v%4W{o+@)p`yIZIwNz?>1?%Y%QsE8vK#^nvpCNn&0eb*Xce(EE+b+5rV5sM*Q*+E{9xewS##ao33>CIdMT8$;^MYEr{ z-e0zYZ*4HygPX7^J}Hr1ya@-b#mV9b8^txFx%wc@4Mlv_-rZh%@})DJ_uPJc%Aaq& zAb&a8F}qM?|B)YoC4+x}kbp(B)7v*J^rpH(r>YjzTB5`Oh+pM!gF>z8G9W?DH4OH#}oFJKPQefedJ&?qU> zAGjMloGc{$g|}=v7sCR7p~GU`7)ij4f)E*+Go=Tjn>D4#_pTLu(LqM+$nK9*t#H=^ymEd(dC)(j|Ef$7TQD5FtsoAr_In8bS zB`}aI3kSt5W(^Toih7G z@q`;Mg2NR6o-3HQf$NY66jcM--uLU3Bt4;B!*-S=j|>Ls=O5eIm}P7!nyk%K|Jhaf zukOnK%Ohb5$iwaKHK-xfG-OK`o&tcBz+7@Y&^a-A>{G40!r6g_PQoQNO?I8lX}PyH?kNC3 znt9Xil)(`2^=$fVw`k2GV<=;-$|p|#(D8m=Y}uuKu&Fnsqt;%DB-4^bgX7<@M+L_vsXaJ17i2+oIc@1D|O?o<05|eCao8f*oOxt|@`tD#4D0dmN6Ow;4>#YzYzF zoXk3RREh1T@nARj0T=~-&H+Vo-F3(0UkB|H^;e$yU#qk|y57;3SzjQ2P?;{n^y4U< zQ@(I*+rCJ7h0QGk8-oJ;i79{J`+5V_lcJ z8M!t_rX(K$ra6MNO92R_-I&>=qYjx1ODu+s`_#+v@Vl3*6ImI&B(i*Lw*z9*&4jxK z3nSknjELnQjFwv3#5>{ZAD2v&LlPTFKZSLMB1XCLRk;U8NGTD3xMzQXmw7+_0XRx? z3@%2>`Zeqc%BAn_DL)G7R1k*zh)o9bN%3EAhHy|VC}LWcz6E}q;A5Lg?c*}HR?o!u zWGeZ=jN_S@WAheuBKaseSvkEm>@HXn$y|qnVc|rhTa4>wvXf0|MVtzsMZ#2BK>R;8 zq3?2B?;5QRFm^KDyvJl#U@S=R*S%uZ+(3Me+svvEo(mnOGaX9I{A*)yzxr<0-N#d}PX+nd7dLk1x zsjL@zjd8?2{EP$A(KJAjgHPwl`KqcsioTjzvl&GJe0h+z$Y&FV+=EI&9e6t`D^B=8 zS`dcOp$LL*1&4U8u|Jn-DUQ%R$M$X-d{pi3XOq(T9R5`~L{eZb1>LiTITtJcUi=6L z40x<11-D5cXB~Ri|0FptR4ixjsHLd|(^v>KfR~qzjMw+9->oARa+LV}tdYYuIX{+= z$zd{K4PM8@CJfdMKGZM@=qUt#vI2R|Y=&Hu?HBJL%sj z4w%1rvXl~tFL?mykK*U(qam#_Pxjynw>Cw+EVJW3cGDFk&RHBm#An_|3ZW$~i08BkH)*D|hJ z$>ZmzMs!2?2cE#+&0mgwV?~KAgO_(2stF&GOP3GriuU+! z%=Dg4La(23%3B|Qg88f`TcNu-q)B{$K9C8!QEKW&1{lTMKv-nTv&E~e>lRG}Us(}q z^c_{i{#oHzR#lJfE?UC;5hK$wQh51*U^BjZE@lo{-W!CpgApwhj~w?tNQfp4JVg{F z)L8WUevRi>(Hhkh!!8k#R~K!VskAEEkN5Z^(13K_?o?L8jPKPwaR>i$6rDgTSPmZi zkA-J11{`kg=FUtC36t1QI^uG!#E;EhCUBX&vwvNoQf>8uVh^xT0n-pGZW^NuRNQ?G z09M{r!G(S=AI!|~Y7}}hpM_n%`^2Px+hRALoYvWKIA(fX@#0mt{*9>lhf7+05Zh>q zVF;(Bhl5-diQw+cLCI9cAgxR-^w1LwL zI|1O-nKI6L7Hv)at{CXN#dY`a?9-;`hH|ih*c+ zFX>q}nl~N??LDb;l#kq-pF)c=Bk9p2v+K&b8BDY|;apdi+cGK(8=~3W_1DKmAAgJ`2`*bYb z^*wqd@HFN>z~h%^&oa&u6`L1--^M*Zwit5FlEeZn_XSJMzmh%aQBs5qC(eV{d|hZ;14d)vOux|DCc zb*cjk0PQM>Q2y8@*{{)Ud;ty`5n!UeZKTwj5EL~zZR8j?VTyQdPyC~ zNP_`nCI2#!$LVIcf$X{>E^g764evQ3_Z%4Nik)1rqWM@^4B&^^8VNLLQ%!zBax)f^0X)?w1?vUxVJD!-)F^WNlX$m^$+W?Tw`+7S2o# zR3$`mU@h59?PO3wFS17llQG(1q9M{)ZjJmjbigwcL-+~%6IJ$tkbkA(b)3UPg2d0c zx}g$;F*_P&2w$#*UIZZlu5UqddXI8aUSmYOU&(^4bT>< zhn;iT2yY0MV@7}|tk~SHxxVlyuMhPs(k>CH+(Gn~ekxkL7}BXZpNhh>KQ}-CMYHrv z{DS<~asGhkjfaPAL!}uSw^K0-8n$UeAT#KzgV?>*Lu#1FyRIKQ*#lX)GK0j+(<09` z#4q}MhTG3mPo4sTaTOTE|AVIa-z%vJ2f_15lm=VpDuSARf zx;OOKBd}!1cKRVo2EBX)!!myo9z6dyx|a)l8;sT_utkB6sL>`|1=`Jcfd5(Zd9t{&~ z)yy%EQ;XT61rroI#!q6fIVRP_!tq8{6uiFa$Jbq1ZAj85 znrIq_mPQ^+c2Q}h7OPv84SSPTzsfkZ;&6B7BD{7_qsgIDlCHII@q@45M725>nA$gw zCc1*`nZwrl3>+y9(%ibS-55U25>-72G~5=i8y?ZCC3cewM)#!L;kcTzDXam02JXs) z!Cv>dDLCkqeqtRKGv&LqWTAj8o!&I;8(woS>@2}dl|R8`nsJe4X?V)IG0mFFxOD5ODC(Y{xX2=#^I(tx~xi}^w#p8tMZLaZ$&iI_Z8PXxp!jJ zP#axBi1EM~+Qdj&+y!y_@wOYTluH0{P21;tH=DA3KiPp;>g<1ScxK2(Y5{^-)#sydg$ip&|Zct zxLO*Ktj}|Wb5HUTD_blsq!n01e`}{U9J(y?EsZpt(~kbha6d$#(`nLYAd!=mXl;&* zUWP|HC-zV`J^}8t^r3F5_*H~@mjYQqTbEgjtylV9Bj?Wsjg2Pk20^Zv#ELa;7qJ;|CNI| zGe$N8^F`kgL4e-r^SxKbbYPiZS)GkW+F3S^}}L30Q$2t58V>r?*wr zO|5|j!oZ$&X5|C`O>9URY7iRYIGA^f5(7tTrgqe68LJ9yL((iTu(oyLe zydhdJ8Il^UmZ!?_^$hv_OoeTdjK>W|_2333L{U3RR9%~Z**l#G{VldFhR|eQ$fW8? z-;}*-o8d&{g?;dDAFN)sFBTSaUzAS8k%%HX=EzwbNU3yZ0}PC5eC7M)xtd5_+Yo_$ zFYJns^+c}*KMq?b&+q29)~c!LiW+gd^YYE9R$BZ^kM<*@DDl%{6Rk2E<}hV#H*DsO z7Hzfnz{Buv?QZROPR>EuNstU|f?Uwj@}MweRK@AVa+FMyY?^lM;HyhzVxcsIO!rK> zqi-H2cZv#WD*qy>2W?rx#;^L?7{SnsgLs%%l+WZC(*lS-GNX-!{# z@9Xqak#Q5>?<4FRndL^W>$RubU@GT}Xo{CsHx>}uV9tgz&*u)tHqczk@5^hwEjbZZ zlXDxP>g@)T1w8i6x&iv}SiD%ZMV9m;k!k|lqrsyfi5OaeqbjWQ)MmDkW;RO$W{gJP z{tmbUwAAd**Uh9L3aIx^j1rT(=N{vcgU5yZfRPh(J4LQ(@AgExlrNo1!He~6$BWU? zz*;(WLl3I$&kL$w7v8SXJB&`V1ggnUzCk?ha$J$cfT!br8GBewxY35VVgpPdB7KvxU)3zrtNzj}^H;>hxD!-2e^ro`t z4KUM>U6oM}r%zMPYo#TuDKX#UVenR{rC9sT7Y!!YTjAz_K@NL$plEaEvm#f=pNG(9 zT|6Vif~uCWocI^aNLkYvx}eg+566Nuse7DFN(PM68F|k)*)D!&eP7q|7-4NiD-I>| zn(~2Dvcy*f=@*Xnr6xhKh}a>&EK7`C7r?&It;8b`ZC`VO)gVT?-DKQ7qnO+37YwxC! zfiy3w_Zq-;i9MCP9F~91nP&x-1}Bui#It%^0-fW!x6A{)uE^#Fkk)=Dk~j=6e)$hk zyl~_3Rbjkl@)^IyHwc%vtSKKhH~bqSl}@coSgbqkjq$6u+TRD$L9yuingJLVMKx*bON96ui5gH+AbNAU`u5YtOr&Xpr+c2P@Prznv+l7Pbff;M@ zLhAKeC5PrLuSKVv>lS~d%#3TiNfup_^z3pAR;HQl5U`(ZF6vUrJwAr7Fi;Eyawdcy zcp9IV%mdT{-O{_`qQ-W!GO)%(8o!?bemZm_qS_g7SDW-!Rs&*zlu3?qxNq_ z&Bxn1Ai zfMfcZ=3u2w+1S&oxmGEWHg(}>M)HjXl5O}lMo48Heq2DFgBi=;i}M^FRgds)wKS(w z-%B&sTY8sUCPc&pklC;8%7Vb2sw&?Rv)RmHMZ2AK1id`?(BMg-p?JwIeXnnD@pD=u-ts!+-OM9DPhl) zU{Qs4)I-VtRaJ8cjiA@^|1F1vZ@D; z+p-IieY+;--^P>ZYwR6s-M2qf2#)*%z*w`LX_t?w%}B9Hg`k~)&5wdDEK*vKiLPuN z6+m9$?XyaYg8jjzUKdFL)U$NK&9*7KChm?_(Ol2ukMcrrO28V$|aBmN(g9~D?}|+zE+g=iX%!yDy2XAl~z{KGBu_s z;>=t+$0d9X%?TD49*BiYD&-ca;Fsskvx(hPeTht3UG3+6F7GOJkn>_V|4&orfs#dE z)28}Ba9@HxL&KMFxgX)*I=RIT-hebf#t7GNdTcLPOdj3ri|wU`=J=xMnK9hX_)HW0 zLEuFa0FGq+^PqO7c(abkO1VwH7kizhqG#1`H@_J_n{&frn$!lg2pEms;H_PYJ=X5- zG;XVCc!B?SQIqqo1_yVgk%`iVG307#$zXQv&v%bjTN!uFWrNm$!&i>w`^)}$ECH8& zAGbS(%tZDJXQ$389XmW9#BM7$+MXc9Ui1ha<*6xpl1>a}UOqcflz*aRsUcQ1rj}IG z#ezI~Z%ZG7l4}Kbp;)F{)qbxoI~b%KyzxoZ#BKT>hR&JB5n8ol^qdVfFE0*f=7VN3 zeNwriID9CVx)>v3P0P?^ah84lDq~qk<@C|wT0#U3-f+V4Cej(`;Kk-)gW{IlqTNrd z-Jba!c%pqAXhumB4D1xKp_JHXB9%@DT9FzPq!Nki4A#33_XfSX8j^HZW;a}FHoFgV zZiIllPl-;LACS~fN+Sw&hG>iMfi(I#9(QL}}$#u@_j$9s6@39`lK^7j1`RIHZ7`Qj@iH|f`vXAVMZE>tLKiUdP` z2M2>xR|EY+S>)h!pzZV}XcLxY>0{Wu%G1|BNc!~|Ln{l7gx)-}zVl=@`N$vbZP$=~ zzgwyQQclKIIws*lXq((!}||>>}iR+j}m%iue0`Ju@%j`?PL=$ z06^WD8hgCYuiKvY6Tz!L-sga%bapj;xO}*>i}YA2@Dx}1e!x9R4le;u4bl~xgH+s7 zh|tKE>8aKo=6zPX6Pr^@C_Z{-Sw*>+H$R4b7-PXYPo$#7{X@*U$LgGk0i~zvZUO>d zKiaW^wPRP|t{48~W3TKrJP2L23Ga4(d6ruIoZHhSpiPjyO}*1ywaakrCw|$AYlP0) z2$M}yk^u|n8$K*1$X9GTzn#YGL( zM)o;9ZfSr{!`w6*izKWoAcVC3VQw+H@n>4tdzzHM%s>O3p%MOcw7Y=*6K8t$ zB~;oMbpq7Ek}xzmI&qjO?fFl-OebJiRXm5ahuYwtS(05aIu|5k2^8@Ja{x8_KElW=)0wNL4Z}sEojnB}zIAIv*X+4jU%Aa$E zhBCT%4{IKr1i+D=hRm7EyDclswqQ9yz?ktUdi{;^I(=@Rynk=@d%>tr#qfJ-m_Hly zPF?vu8$7B2BGYHB5S_WFKum(}j+CK(zTJV`yZb?qD5^3P0vu|uKyL&HT+xBQxDs>FAI9Mgd7$HETlxfMleJl>@E^MS90g};m-W>1srli3Ju@$>hj5Q z@ef8)>}hU}_@^xyH27*ddfW1}^?cBJcuWSo>%{V=SA7iZ^|$Cbo$v0FB@>Z7exbU2 z%oo%k?`~b1$VBrwCr$DXHehz2f=*C7B|#L7CgIvqiC4B;Mj26~{GLMxO{)I@@Q>;) zQXaML3Yi@#ANP`RDPOZK(XlVB|U|a<9+m5`8(c}67Sj- z^S&Bofxo4302Nfu>=;#5a^U*0#?FudS_r#GZ9T5po&TV;!FB4^6#0q<5|x$yt^MF} zY}kEX{|&ECua5h4(QzTvcJ^99ky#l8Vy2Yxk59fj@KilHXiRH#Z9dSzy<(Em&HsgV zt$t|lSZ}`+3qGIy4W$ch=?8tzJfS`&Cktdiez+S7AyNxr5-|kP_zQtjOpIY zgCz^*KT)LH%++?oftqHS*cZKugKUgYT!B6fKNPH(%h0!dGi54e!kvi#mva8$_SZmN z7|qk5t)NGlDD-{(ut*d4rU;{>gCRjSO-d!{l@;b9Hs!tb#NU7=%aO36pYhe93?C0x ze~d_RTibj+&TCPe&d&%G`*gJ2!3=EUWaQBNUXd-WMqGFpW8$I*sb-9)*c>w0Oy(H7 z)&20q3(v}Y%L_49tO}5HBMtux@0X1iN1MRmAJd5|_F-Qa%o6)B3Hn=eH;pXvxzSH;GprmhF#KA~*A zMBoRk?y8f)uWQ)cug&KKdD!=sjY({$MVif|ZpL}D{ZFIOPZwOB+#(;QYRWx-S}wsr z-9}R>t%1BZT${2bB4ZZz&;XI8=7bE!m|eToC!dNtu-xuw-IE(V50g#L(>{o^?^soD_|Qq3z~HhKvGjs&iI^Fg@S2Tj4oH5;rrt1EBr#BAhu=?P$W73 zHfyLy^a#_7-nRG|8DDgMAK(oU&;eNY6m+3l%Zs!4Jw02L!|~ z>4h^SE4^!>HwU4sufc4>la0L9Fan=Pf&id+(S%dc!h6wE>GC82en306@zv=w;6&b= zGnTZf4Cmi)|3byM>N$&!+V@t>w3&U!jf0y~_#3S&)5^NycSVWVGE9csoaWK{*Gq*BUTuySe((%;El5aj-Yrg3HJP>Wu!nXveJS znx*>c$?pdq=xfX}N1x=53uvlcD*WQBc7DRi+oiYSn?FS!?qcB*m*qbOMV(t%+Ezw< z?Ty+b(37KIiW{y7btpAZi)J+%G{tdDu_@VQQe=xVIx|z{x z^Z4Pcd7HPaG<-deghb*^8+h&7JTGcQw&BA~19{eS6P4|SmD7e6i;P_bzb(C8a4W{< zM7wK!D*rQ`WNKGE^lJ6!M0M|q7&bKNUZLQPKH*!!2!}lrnp|X{?+Bb77PXmHS-{oI zperf4hIII?h>mhX*kNsaQ;$qh%V+#RSY{J`i{77k{S&`?V0}~Ut>^#sj* z0`zmgWzhf5{cd25gDZ70?<>eSorBtikZTTe5`13KR9;9m7h2Y@dh zIa~I!O+)5fKdxErVf6Y?hpT{-bMRlReaVTXzyOW{4gi3d;@BL8Bg;`-Pcw8ybwfMv9#l&7(QW*q4M9OWip->3y`BV&0fxo6Ny4 zWUHzJF=NdbQ+IILZDfNZ(cHh7>|nYymp|Wlq}$fD?B;dVH1{S(z{zpqq5Rhs3j8F2 z#%tmB7Pdc+VdB;kxE;iz6a4zR-Sju0M{gG%(hy_8-++ESHv9XyxM0W6+gl0zO4yB+ zV^8cL8?F@l3m%HrD#d2#APAc|ap$=`ep%y*a7aug9w~}LIHTMiSfq>a`plU!&x+cZ z?H&u2fF&}$dd_TY6Vso+?d3L%GkV(zp!?A;Q-4*`4f|@$*9{SLloj3mm?o;?D{vRH zD+X|rz&olqeqG(5%pJ~Cif3FKfY_3Ihs`_EeNyc(n?EM?xu1SUNO_ryOW zN$`lcvu}^R4hEs4V7QJG!T%b||L1sKhV-!!MN^f!886#IUaR74Ro(-f`u6hqZl9uZ zDm|A(atA|h(d>{bjg*Ok&5M;8tTo}3-P(jg-{~d@4CZ{yXVH4=1QnenO2l6jLrv8! zk^RE&U_I`Bis`%`iQO(_fzvJgSAlch$ao*IjdvOy*%x?1gLyqbuX+$!Eo(f$IoSS; zKwY%%kgQ#}({S33@ zG?DWqPfGI0Yr@a~HG3Kx9}N)XAkqWkGN{sa?}hcDc$CH}1WRkde}!`5+$3jNe2WJh zH)69Lb4YBZe5yz2xrQ0QL2Ktng)`Zb<*FYiXhGPI4*F-PBz@|j#zaeDmURle6LHKY z>X5NgHgx#lV-|{luMZSWj#x;GzcR-7mQXB{jj9rts?qxJqsxVff=P-XbHuMcw<&>= z$*qqoO(8TjEU`23=XIZSfWhHdrzYOJb;3wG>S}dfTFz6X%(IqANw0|3Q*PH4QhvG+z|@C1G3rJ*waQ7k&nNqmW!n#eESR=t!FD}8XLL!zuv_E z-Mo<3@$dY?{EJBtk92!$d<|e-;Mu7a@SYy0QRu! z<5#E1vw;W-`DtHD??)t={gx!Ws&eX161uGewm#`Ogz z3|gz9uPb?AYA2kKA+&>x`H-F;IOZFRa>BDPH6b|xV4uDV3&~W-jUbSPb@wwrJ@G2U` z@!E22m6n=+cIurVv;yM?*|>(>tkxyMW$|z6rc`K)mry>%-W2G@NuU_YzG%z}x{Y2o zN!U*<#u4EKhPSrw|4axE86MRwKKDCzt}LKXE>OUW#{T&cd;RUJy@Hs3Aqr?M2juKj zu8D<*lRP*TsWo zg`=5QT6CfV)ZbmZnJz?-{{haA-){c{cn(1rob9zXUS5yA0QI2F1U+rC2eh`DPJHF8 zcANAeW2?8^d>yN|Z`-B!QBu{=iz^t#!bxtjTX`@*H+8>Rh$Jv~2knT|$si*R>S}xZ zdD2Q0?7qD(BUFFEr0>MJDo3TPSuz}{d&6CafpkU#Bc%UhF!^7`jt1!uUXPjWG^p`r zqRAld^%iHXan;2G9I5gl3%_3$nf|-3oPpuy#R>o*7i!YtOc_G=AcQopKO5afG5Gll z?rL%}O@Fdb58nnK{IGf)ycM()AtZ39B&}ZB&q~W_w00X;$BGFIkJQHsB#J@(s?Ita zTi`?R-Wnm*=lX+;elk<7sVCirf9QF2?jD)}_y#~7g+~2CM>eb?tkKYU&4bdd0z#b{ z{u><@5F|kNQq7xpSz}ous5XxUUX;m(+<+O#08lfs_%M4jb~8Vwo}}f~*RGA@RWMJG zGwOkPD-n_5ft=kkI7WL%V%6Lho=F}Dz$0I~MgvJ=d0o8vmD`~jny1c9%mA4yn@fe@{pS<*-vKZGagKw-?k6F^8RW?K4B5HDGx?xYqV)TPYTxeh$4u8) zR#ZThI87ec684kynBBst!YB=4%L1^~)UeP8A4jn%_)MCLf|0o7ysK*~`oHZ-{V9lH zf71TnBRh}-$B*dOggWtlXSIL!V#xa+0KF%ueRcRR_Vv>;YZwB$IT*5HA|gz#xa&)Bh#w_wThf*_dDU2N+oUFQjhobGn*Z!51TI>&Kx&u46b> z*t^|{W-2bcD?LB4H_r7Y<-!k0Dmj;&ri|;qUDK^Z`HlbF(AHgtrVkIf->wWV;=Zz6I zwW)e_IRxTRJwfv8*AK&IQWFB=IKMSc3Z*q)w`ZL1b{)&Fk8I6AU*S2Op73gbUk}>Y z6>zIE@>~+f42qAvO=*;l{CVhAxsw+qrOC@YwHQ4s z<|b$TWszuF6T98MV6N_3oLvv8@jU|O?NpN%e(QF~Yr7uzI%vM9VJ+VrAyGXiPph!I zkEowXD={Bw(TsC#_RhZ17XIX+am24J4sWbl+#rl-<*PK?yGd6=#d?#N1h**WbTe>M zDE>Csc1oEy(3#46;U2)#4%vjnQ;kAOjpRR9&JCtFP<={Lp)IHjjObgB-`XBM^4U+~ znyRNISV4nxsQv$hmXb*vKh#yjVV{m`13nn_Z1T&-fCLy@dY~ zeycmTr;!ueMp6$*%Ap%KzMSM8fHQ2$(~q}NUF{+*lc}I@b^E%`*7d;>%In|VFR+#P zM*01u0}a$l{346@a1}X$@t(*3p*q3G3hovqQX7d(osZJr> zJ{?lEF98%|3RoAxTsv-wucG_pV&X`?*9FClw0IjV*FjBIm-i1hisfHKrhVC((*J$3 z&voT9&$hbbok#qbFC*Zm)cNPuWwLXH-mAf^dZo8au%-tTCTtDh7w@!+LAXZH*PW)W zag>~o6d$+OJ92~f5Y^8!sfgl>zOO-7`stRk&Z)VI>T7CVWw=uoX+`?r?$A3uIy}#` zo;3NG?ig~sl_@nqsbz(=M)(QabEYkhk7B2hM%RkY=r?e~{2u_9s(y{Z#rXVyU26j8 zJS!ntl&5cOM(b*e*Ft-naQkmWz~R*Ou`6O5ip~d3?7VSGQLMC^g{t9tr~vx&4NEtr ztRK1hrHqhfL8|8lnNKUH!BL+&`X>t*6H71Yxd|J4{cGkmH;#R^L{q-%eds$X4q=M! zWH`^EuaqyfyUC&vy*#iw@>K1Rs~#GC>`oDw3{R{Cxo_P?5qvIDdK&MB8vkw&RlM*? zQy4Dzo_ecedVKKR#9p-EA3*$N;x(8OZ?1y5_z_I0tNL5ZAda5Pxo>R6{(_~jS*1ms zX9ygNMl|K!`C>(yzH~fIKc8xNCh-K@A#Zh)E#a7!j-JAiv)`i_Lfav;{tbK2G5d{< ze{wf|jqUN(V)I`po78L$)uGgxDGzv0+@;eaug*}7TGYoxcNbafOlj{u`a6%wUCR&?U z6iq%Iek)1cT`=TT`JHtsJsRo*&~sNSGrbxr5vO4d=b-Uo-h++TIpic`v85PtS0e zD0Z5sA1khD=~cdY6XJvH58_)n4M&+sUgA=`$Z-=NxHo{K%OY(OjVOh;XG@fEeOg4m zL{{8@0}VfTyJN!?nYXhz=AoOv2fw)8jT#Xa8HUW+=T)&Q$mOgweD{GRZ)RvW`g^{H z`2o0X+iLlTghDCkkX<$vv8vnxGB2` z>hskZu>G}%K+!D8Sk%2^t}Pua2Q+ma5e6B=_(3)a<7Jo?0v}wVN9*QfhWI5ZbAyjzxa+gt(eq zV+WRwR-DrxqtFQhg{RAA?6BG|RU2t5*@A|fVeFp;-s8R3$00on9=l|%GF2VN$=B9a zxr|zHuk)tY(L1TKsx>S|it8p1U|=}M_Va?qKn`}(uhr(ajb4A#!IRqQ@KC~UFN{Hq z%~cf^5BUoEJ98CKlF#GlnpY_?6IL43Tpn*Vrd9d&otLCxZM{+y=gA2qy3<8$zfKU% zdjDS9ECJ(MY6gf_OUg~W$`azvRIsYMdwU*d#g-5pY3IxXXU%AxFATOJ9j6!Z4W(*W zodi1+Z+8|N-~H{lsJ2mF({~c00bqZu#|=%tSn3oGc{;~SlnIR^z}Z6o{H$3*%t&H| zC@xiNRqA8_n|4-*VVZPx&o^2cie`|lO<5=JU2uFgzXuD-=6>qM_s!#~i(mrSS5xme zZRbV{^a=Vi*nE570-AVeFNoMuhxXIr?qbaf(Db)6oT%NcuI}GIfZf>#^bW0ZnHn>k7eu(mvND`IwAf=f$bh1*3yD%v*O}%{iPWHoeqn=dnW#&81LEKM8iSO=p zL=3E)XK=GEmAHxDkPzeX%kEC3QFAiJvtG#C4s+u?1dg{H_0u~gHYODVgG;K}q&fBd z-viCBNJ@rxU8cuA$2|KgSTxHGmobh5NNm!N{(L$_!r-=&l4L@6Tjm@-tP&iiUi47- z{2#zU5h2TPrd!KE-^;C!)CqRFKf$5AJ}2UAbkofGf9FPfb(QMX$iHmLqME}tu6kX9 zN{fETc`V{|(>q<4m@F;Uwsl;-x2EmWlWc3(IemLd9q0dMezY?#BDzl~b%trO?&@ir&hF(p(VYp_2Mo*2odV`seR7Nj=e6As@rrm& zy@r^XFL%t=ebedcWqDg*)%LUc9_2nAJT|P-0qH|o9cb);$%LhmbGw(36+W}elJ}^4 zoaZ|c>V`<+te4Z3-KK+VKSpbmcA2=HsgmTrj^Qb9U5hO41BK5O!waSJGAft%yYZ{L z?LE#F=r%JLIA}eyc0Ut3;|q;A?yh_YEy>a_GQ80B0eE39K>F|x`s25U;^K#Lf)%)E z2EQ{`vVbgZIS!1+Pp^XsmgJo)SNwr)E!Os7r{7<`Pk8p`4Q2}AJM-K^)P%*$<7?0{ z7lcT?REg-0`&T^i6Xi{}x6iF07L|Tq4PGroR*PiJA6Fut*tBa{<6+~GHSIFkmYCPi z92lqPcyUQf45^aOc6@y^VcsHq8duG!I8EcVHBl3c@9_C-`uLc=j7PuB{^sz8ZhalR z_@*1@g~3F z^==cadH53D5(eD145S0fIrM{UxhAT}bQ~fTgB!*4obUsun%#p5B_M>`)5W9v3(F+- z!Tsnw5?QEdUAg;X;<^d*J5-h0VTsj1$6zU?bpMDFQusk{#v2kHkTx45rEbZi+8Sx* z;CdBhN~46$$n+Ly2^iRfxMtl4bBrrnxvfM=jSo;8;TaJ;pVvrZ_qgP;@M%W?qcoAq z4-%2v$MA2?MQNr=7taVN0*1~z--9%oZ?!l!r<~D867BKV{gmw=0 z-4HvaTkM&s4$e}K%Xr&$ni|qyf#IfEvKdorg?#IWsdN6Gj=t`krLwP#U(zy8h@Gk0 zO*H&k9{+%=7hA`Bg!p=L;D^qN9STh-p3PW2XEwqLsGS1)#Xc&pX zH&6G%{x74l+o|!8yP!%m7Y7*=o8?3O9r%4wJ_v4aH$lC4gb!?qLCUSxeT&*=FBi{c zB&NW8FA4BWdUwfgn4i*HSQP8&#~Y7ZKFz{bktf*BtO2&-T@yyG0w5?RKbGsc(?Y0Y zc71)qGr85*NzVnwsNLaHNd4oRPWE=HIS1p6Z?4BHTt8MO2E{xK2glPfvApp~F&FKn z56=REWD~u}U+W%gpiSsz>hmDxu-_-ZD5)|0-x8_@xyR0~!2||xZ$AeHo|AN@&+Z76 zIKF%=$64hM5m=%?u;^wDo}p7E{B$Z(N6BlZ~Zu)1IQ?9BOmWa^cw>WzlG(h?R$^B-1ESV^pbN&y_kbh z^vLGflAzIhP#_~VWpd1)1vqAC685I~=koVwi-i@$3hp=q&2>+cl}BIsmPm!ilzJhZ zMXfxawjMIxeSv0;8&xjG3E+uSJT&k80y|H6^wfN{m+_WyVfvhhLGPFF;BIPIq3-0u zYS?_SxLbl0DH0rt zm*PcI+zB4s-66O;!P1@goY`l-@0)LCzjMx>bLI?_A!{a+$-r7G&vW0u`?|i{k1s38 zQGMzh*R&~N^1ANyW^9Z=&GqV$w`5sUF0hylc0nao)kY((XocB12Lc{bgubJs9G3H@ z@AT!ac(eGHocY#_z`2~DND`GPf4_!G~nOSx< zNw~sfbEdcQV~xesvAr0rB|Yg@)b{m0!&4k7J_&zqr&w!43TDz7rv6cv`|?NR~a*1c7o9B|Rhcl>G6c^P6#EtSt8P!$qwgcRp4JT#6@df~qSbvx@_j(hMuf-wTxF z0}NOJgzVUjX}_2%>a3$u!GuEbPVf+wD;^g@bD8T#V1Kykl#>i~J$C*-{cs^6l9jYD zHcu+WoHr@yXBkpbyX+Z2+mM5d$K`&fJs5d*V3}8Da4a=rIsf!GKQsKe8Ky7ATJhws zExE5`JeKg-ozKbrkc*#gzf?k@3fS_90Tf84MxVt|V?HkTBSYG|<#zfXb+=zRkv~chzaNtOzrZwQ)t)cdu z)%2U>A6-SGB~*fesDE^nvu5g;Jji=vDWN)45u9SUcG=>jQPF#h4LVa{5XF2HP<93nIh-jzXrFqUyAS-% z{u32L;T@yhopWCp3h9QJ;UsI^5g109RLL4GxB9dIkVwJ1V7}{`+uoau=BYug(B<|| z`tPuGCL2?1QQ#9~&NFc4{^hOWw5GW`K@^W>RFLFzZ_h5sTuB?8#7a3+;p5%&6Gr#t zjQ4zsIF_rymp%Ub7aS##`AWVL9cSpX2avJWHGSf?A1>9%{HDD^v*G21&%)Tss%uQ=%QIyLlTE}sC(JhZEtM0X%Y+wAy98lWBnWB$RFSm} z*gokkulnZu7)ebUu$=|@5OwrU=AToDrwC%={<+AKi1-^5V5ReY@w(-cFLEq2L~T?) zyta+RQT8}4Pe%Y!&M1vq@#{A-cMI6g6hzn3Uu$XWx7z$a~zL}tUt;9gabVd$GeYX2b-ik~*(YJ}0fG%2{ z58Kj~Q9f*KsYVRWVba}V3CHC+aWTgQ1``V1rv*4o_^1O+m(HHn!7qjN&Ga9^Hv6RN_Z`Ptdw zly;BV_%hIWF{o_!x&)f3rCOH5gyg)OyI!%XTlAdDc{}N-PRIwHcc`W6}LEKfAozzBi#y?(cAm?hu;PK>;$=o&Qsi31~hu3QPdY(It8_YOsUUCFy zZbkDbTBuEi`h^CKRdyS?I{8e%g(-E@%S7Qbw4kJPm*YJy_A>yFWQ?r&mXkidV_h>|PSHHvcu7CdvKjW-Zk>B_MCbo!2%JB$_if%yaA()Pc$ z8vh?3!vs+cn3X<1io|jPwcX=m6maKRmN((p7;7fYgquozq6fJ6{V{50i@aw9#i<%& z!o>k5^AfVxHa#nVtqYx*42zXDn>PWkGo_N~?@4CXS$g0L^ho>dE+8!mp^kwav2+-8 z=j|d6Jjlr_UlDhi#XOdK&#~=omO$q-inB-hGB{BA|Csy#k4lmM)$?a|>uRLnc{6IEkJJvaxx&a`%6N#Qa))zn6uE zu*jzZA! z%A19u30Z77k1@TuSYf&+QTge{rvi-@apu06@=N4F@1Mni zZ{>TO9v9zWj00f`m7&xW2V9(K&%%--l~PGe3;=43A`~MyHO^q7lcDL<^)iU|l&74_ zj64Nrb60}xX-i^pf34F`tPHHU>87SgYdw*2qj$+z|SI?-ocNg7WgwyqOH zfcF@Gl_q*|1L*UBHRgUO-KA}8H{r0}T(?v=_`UK`n~2msl>JcTWVjhrLCf3G;Lm(q z#wL!sngJWYB*FOg0#6+A$gA(K08`90rwnJN*!0)x0-+1qu zuP?4(0qAb2Y>%s|o|8U&J~2h!n)aJ8>6A4cui%hkHEPwSX+CJokg$7AV~MxzC3k4a zKRVtT`h_Gz&jc& zG%4yLra`W#9~rMzg^^hQ1?c5RJqqY@jmugId7sUp_>7SfYX*~dP?y(XHIXGuPq~fQ zufOzT%^?%Y^*)t}xp^dYW8*_m};*YXB*!a3Ut9sAE~ zRDE4+0=U)9o;YV!uM}^cxtM`A1pcROL}I;mC6hoxtkg*&YBg}Yb5ZmRM?v&Ydyz| zZx4KFF|!3zg~-7FI9wnn>*)D(C3QoEW?BEo%7D{?j=KglY`$S7970^p9ZE-=pgVK? zG&8NSr;s{z2@24nsVhdvB+SR#>XTD^aQPI`YS20(NAyC?$oh%D{e|Z=yHyx9X-~I;MXC9!$gm-Z(52$c!Krw^nJ?&sNdXto+|2 zPZE|_J|4vK_5Qc&~fcRZY4ELCB&Xw#~j9=}hiS}QB0%kSayl2ihE^sh)bAI<4JaP@Gu0v!$ zM{&K0bDOic(=KzSzyDJi6`EQ#8~07)VOtOI@DJu4Wx+$)CuL|NLqFwdPQMo49tM1F zUZ>IBq7`OIiJ7MlQ(pvcv9ts-xh7=C4=(mGNgxjUSIWM=UZF2o$Nu@vdH?_b^Y#A| za0Qr*K``b)upnz*-~l@3(D9X#83_sLy6VG{WKO(nK^#aL2?JKcf^iU-=u|a#)sf5^ z{c4;==(ZrqoAk1DV9FvIGlkIx+Y_=*w$A#Wgho$nc!u!;`)VY51YYeK)%=QvnUhPr z$~!;9Y1$QhMg;WFsU_J94Uqo15{#jwx*bQ+RcUw};vibbtE zX0Cp5Ps3*AB*jafq3mQFR|1-oUk>EmYUQhl0k z-@@TBMI7h2DOFL8SlaTt5e= z-;1Gg)}$lB)WOClp5Yu4a=AktOFAEE*wFjXqRz%YPkcb<*LMo&E(oc#rFftDsnoZb zR=Sm1dSV;>!ird{=%J`C#9if6snmTV*ONk|LUbz*Doqm7hGuL%Im)YFzN!QtS8;=zgv`2CX!KAp8@N~NGo9d(v)cM6(=t?MuQV_C9o6K2{}m~M{qV!NbKcDoJw?Z@SvRxz+HmD~UkNt&_Rf9UxbJ$} zw`;5lm2)wzaC3Hc$zjjWIkKE%HjSGM;pj=JN=zEJ7cZH=6`s^%{na=^@UM4;6+sZu zhzD244Z9l)Odv0&0lwn6Wp|tQ-w8nl9zDqT{nxAzhSmjyZ@fP_eh9XQUwi<`{2Qxe zb;|&<2$*+~zD+O8-I=tKcb>}T@ne6{a%nx((yBDDQy?Yl?F3G|(`lzjYWu}}D%14E zpUaXa_286Wj%Ob?VG*5cN&AygpmgPP>mycJiiF0Uv(4EGbLJ|X(9q7aQbe(!m3f&3 zLr?w!p#eQ#H(szpXm71|dD*Fr!esCp*G2QKM@CoaP$G!wmK~=fQ>Kjd9LQFp8A{l7 z>+Pw7hDr@?!@>4OzI2~1U30RkwpM?d_SzfE*2$mxFJQ{3+vqt$#)v<1V#sa* zO}HEusL(~wm|MNuFSd|7(KL5kB0Rsn(@na%O!H8UrriJXv~kj*TGyPW?6AaMW4A>Z z@6wk$Jd13yuqJ4t%SUDKT9!wS^x!K-Sk#DRKGO?oTmLgWRjlNfegD$`h@QV~eMS&( zEF~|+n0ex!Fao1&o59@;!OX(b`JQIC1@}l%ztEeFY%v-O)>ky2HG2|`8o>!1Z+!`L z=F0ZYw;6D=@2aHSif7h#Yk#8!B)4`%qv9~}* z@_^ed^Svrzmf1Jh5A*sJ=!?WPp#&ABCQ0F$B)ELsyqA$ZeHWE|&1KoV?H3(c?6_;b zT-WHrSU$z}-&-J@B80KIv?LOv3Dy7-#K8IY!QNz$*Ob0mjzna-?* zcImS1C2Y1nCP)wVW8gDd5vznAaZz{|3!*!J8Uybr_kz3XHAAI)Vub6Ba?qb2BpkC2(tF`#g8p)liTejO_uHGHclK0 zauRg=0ve$deXPjLHnTcNz5q`1gjGX*?Kik4wJKL{ zez)WHXnNOjoHH}u9m?B~hm}DmLJJV=MCEFSb&D;k4`Au*w$9#nc(Xox)e7&g=4@85 zu~@TcdN z5upsV$iz(Yet4Oq&Qm_aG5JcBOCyoGDPuA1Tg%3jxFqSw7MN+B`!e!rKtJDnb*@-^ z!KR#)b;EF8;+MRnM21{%g{7*@>GBTSdA(Uw@!{8zR04hT0pXERnnx>T`lsmd?`2BP z^vMyYlzH!&q#iw~kZO>WWOsdc(w$jQCOB04^LkiD*P{Oq%|n}aJH?@1yiMhE(_@D( zLDu<>Z2A~}Q_rHC1ZeBh4^;MTm`5i>T}%5#RB?mgz}xZo=*3)iT~RqD;p4KymE&TR zl>$l9my`Rryi-9l!I#HWA2{dadai9b3sM@d;Ev?hj6tW#(n+6%6Xk}1B8)Uy{0P;z z_%ae)M9r8hLzi^Mm7MWaRR+zuVP=%jyj3*UnfK>{`L-$_-N}ZI!sD7^nrgPGQy`%X&)Rjx;cN?%wM)(JBk%aDPtBrM?oEk zHA#X%&6HRRd!Sj~Pr4ndY)|I8C$>#IeNG{XcYYSDI3mK_+@z(rl`KOO{xP!2K_0(& z7ZrG`UD$~);7FtL)za71!g5@HFoQ>ZEv%xA$t2=_zXwdx{^hKHQFaii7iC7vF_}AZ z(uY}@+bQ^SfP>dqNRT|JTV2w`Vl5Y+o%I_})d%G7+B&#w1uD?>DqW5FSmjP|@nG3J zJs9gT%_@<%NSlObxq82{zY?+q3gXRkVcqzBxy^9>1pLyLDyb)bol})5d0pSmjJDa) zyQa2$X)s5j*u-_WZoG(dd`H8eZJZUVO%O)iT!x74{3AiUPzLsIyKxzC(R1;gyv}-X ziA!%abjS<>j}{BV|+wz=?mo|YleJDe0Al@(aO3f$M&oqsZ))U;sm50_hC z#(>*cSC7fvyMOXk<%O=$SFVPL@ai91wUdr>ts@*qu_6slzr&-zyHd?m!?mZf`qtC6 z^XA0V+u?n$j5FlhGTXyw14Ku*jl(oYDk!fM`ea;Z5~mjYerLufBqwi1fDgD99L}by zL*6>Y+a$ZKJhj;=9k8}9)$*hlssHh)PjnHYx9(2i*5sjNk4*22o?`@w4`YOD{JqF> zJEeQ8Qfl!$OpRM-TPym9Ty@b70Bc6lj>}g${CHlx=sggCNK~|pxtn8b@mIh#zsWKT zFXmVw+LRRi@>`V4xQ019{ln4xuV3-nwRu2+Rh$>^>j=O)OKP|iF+SU?->XfF^_6Kf z^6D%cgou9UNe4f2wxPizzj5#Tdb}l$CJ;*4jEqfJ#6rF!9 z(^3l^^muwpvTK|_orol~RZ`lWUZ|NFKOUamv(nym<(%0sT<2Gb7f-iyk5G~taLaOx zlL!bwP!M?E<4o5w*Fe3d2-m7ZwY6U*Lch`Laa#p-youik&!rHLxGxeX*^%6vs>G$> z-2^NuUX)FxH41!Fzt$ywy-dtepsPun7uYZ)=T6a7Yv%kcDIQc?sX4dI*D zYP4ZiGWXIwEAoEl8U_0c(2sB^6ik`_lI)Eh{&W!iop<$Oe{?Ibw!tq<#?;P{+8f^V z;(5GM)0U%sC%ol@>Pf}dhw=M4501HO<}!*@%SYzsK>~~I&SBDe&}UIi3x!Xk`EKlg zF@2wYwyYrT`Ml)Frh=bY2w>ruOw#jKpI4l=w9KBJz#{a+ZCb9sE7iQgo2dlB zJoDrfClh(;M$tocJ^4y~_IYI{q5j_x51f$(Pm`k^0Aq{~uG;cwmak_P$%{N!`Lbm1 z^jLp6C2M}ZA~bh$CKZV#l7({Puuno$2!#LUVW@FK0Dv7!00l|-#_Y@ZFgN$zC+cJn zJtN>To_u&KezRoH6weX#li@AjyCclckYWUrc^H8VQ!-;#VtkuieLLPGX|FWwOFh!E zcosa)WRR0J?1Z{o=Q4mFbj9_f@`#M{d@7u~gMN-_;j<#6hswJPD4Nk0Z00(w19_OT>!X zPqUCKwvGA=IGC(#Nw(uTZH^!VxveyFc|>LTB&@W^l?62VR~m5;1bV92bA)K6Q%XSV zFJQ_Eh%DOLvH2b#VAoX~K(%#rw57WQpL;t1-Nt&{9I;kzU$d(|-_PDqPVE%x1dJ~f z`Ly{RKftSfcSJ8CWnNixb-h*X1SC+ph|kMfZAWcjA<^;DY?AP&zYSAkukl?{xOqq&N$dL?LP_ev zZ4K%gUIkX`4impck5YU5j!~l({hC2L&cSgL|6gCsB3+#aXaLxJ;DXkila+%MEFC#t zXQU*+!08K=HF;}A>R=EHti`$D8ch5{y}euFeS>3dG+HT}A7ht}qm)S$UVJ~$1T+$P zxnCw)GZTs*8qfYo+8gjl8CfA2xQ*HJG{Nan5oqO-LqZkH@w4TAP_2@{o%K&`yxD&H zPi-$G?PBUOISrGQ-X{cBna4lJ5TSi07WWH%;+n6(kQ0&{0$*j{XSqT1%j{l>P8EQ+ zisiW#b>8MISt69(>QtpZAqxmcn)n~XGrT<>IkYkksaHc9txD!CS_y|=My%+~0r59z ziHt);KHuV`);hRu%3fKuZt7ycgu1?Kx{gOeG&?LvV|!+obi625!*)mWd^lm%-WLH|D)pLgkm=gX*iQTUzQSq9X;q zTR7H}Fj_Iis#zk65R)^N;AuGit7iD0(~y>yO4@Am*3_vw$OLmQ<5UXEL)uO1+LS#b zltSRnZnn`;RaJCvkq;^9eF58sav+d7F(rW+H*6&?-MVrJx2vjsh@=?f#X-vR&}1r# zA3bNDO-n1VpK~N?Hs-=Jo{{kEie6ZS{?7q3CX(Yo_4#g^P6x>+Mu%v9{+ z@P7Y%zwW3Ib@<>nQt&Uf4QzjdPepIvDpN$a{N<{F94l0gF+f)puzQ^G`DqkY2bsV6 z^7^$Sk!n$(SKEzZ?{)i-(p8gr98*n3OOK*;o($PA55TO)H4C_=QqSjYDQc?t5A6U! zZA9BupD5!@+`fvtkR2kTl>@Nv*}_UJsm2Nq{== zv!P(tZdn;>fyq|K++!o+c<}Apa#BbtH{1#Z>!zuLHZ5 zF0+G%Oqzy2K`frmR~{xN$vrc+Bpl^WG(~LK8Ews5A6@-!EW$A(l`PrXW1ibncrPWa z{pvh%p`BJv$GxkoRu%Ae`BE2<%@wGHzyKNqb>aqHH!@2y>oEbL#ig$jqMd{^W)!<= z71w^X22l*F!10o=iyCY}^2)%^+Dc!-WoSbs*(s?Qp1h=RQM1hwe*Buy1*jL5Tm0&s z$TmgcuRl;ZB(3wVt~gm3fH(6So%eO2qqv51`!-HRfx`lWsJP;WMxuQi7Vq|%Ac1)t z58k^c1lNV3uii=f*6`cRdeWHvDM&e+bl2L=>iIRpn&M0#(u>x_S*piMrq#U61NE^7 ziI0*n(M0)P7C%}78*K0Ies*NtaJ!e*^Oobx`XP#4x_bpIUh1}|ia%<1d09KENXcNn z>Z{ek^{;}z51xvg&~o^W6eUU>*}cqO6)NuDP#H3<+_oJ^=Z!NXiBslpXJ$c{ZAaTI z-dxl}tXoy>K`9yHo!touIz#b;BDJzXHkO(eJo;=pi$uKjS&B3nX65Wt?6>ehzPAlR zk1-&L_|oM%o81Zf7HXe8uyB`d6z^=(fz{BnG66fIrsMrtOabbFk|1v?vyX4BF5p0Xtis@FHLv*j;rm{5DC=W@_ zIJZn(_u=`3GFbp8O=gmtZKFOT%@@T;Vj+Z=w|4@(i|(ZF>NXpQ5`(2*; zUP+y7N4nh{-Lu;}{@nLoEI#*7c4#2TJxV|fN{WGY=d8#lifwgJXYeh3zZtcpnK;z4 zYn!|Ex%R-DL3rG~F-z5j2iU5uTUQ=n0oZt4PoKoYAKeZbq@C)cxFt50^@3cnoT7_N zeOLb2I5*il))+Xr(J#*jps_?RVY*||CU9WeEA;d!SFR5zMOi2QsiTQ1(pcsDIt}c3 zUJ3JGK+`c;56prv6#Yy;miSXpT9iy96Uz zBmQ>zy^J^94Pg6hC56s|9uIfhf22i~(724}=#-1I`*HKc$pN%IBZ{nlbA&@Q{DB`P2(Xi zTl67GF~2%do}rOy#NmnXj`;hdk>H;X-|ii`k^~3SlB1vB=J4vKn!lDu;*CG;fHnvC zxWQhb!tSK~v{0T7*FM8Z`MbB)CZV^>@=Z}BqaY$+$lO@zml% z%?S%}7=w?E{OLFmZ+~kYvbrlT-KD|TeQHqToNfkAGf}rfHz`Bn-1YZ1+3zP)!{%$! z8`jzD%aVH)CN?M$$j|yHC9bV_@$S~vL}BKw%ULDFz**=*6yc9O_KT|Z>x1+)SU8(E zBsXyF&_|0R{!ye21q95yzZg^g+)v}wcNHFveql>g&|=R}=Rfd#vpFOu37fwrOtx2q zf!_A+zD{u9{Cy&A;WVGm&HQ2E*w2r1ypx_Ni*NY2`4Jgf(vugl ztG2}W$c}*1R&y;)i(1p89Vc6@r!`9eGeXbi2k-Ai%}r&jz?spIZ4ZSfCARnj79zS% z?QfnW)BSjY+>IElJ}LNdTii;Nc;@Pij39!utn2 z^qz`v(vc1WAN@$UCG@wYZaDb)?Kp0Idn1KnN0jndrMq#7w?TH{cASP22tg zyiOBP>em|06u!fpDv-9DT~xxt3R7(d^BboRQMZ@dXT|EDQbZ-#xu%T}qmx8E)8pj* zZ@MfDKLq_#d4~JM$wiFHP+2{pOE2>(=jA6ErgC#0eFC}QzIkzi3}mg%d7nTUIz<_O zuD!cYdiN53xmZU;XYwTB_0h-MsBMACHjig*CA$Uia#uw(Sf8<&QoTkO1pY`z&^UsoitUQKIJqK*dPQdr)r5^xVw`frD z>A)2FD|$BnUgVa$4-=lzO$!lh1T)@D6qik${)=aj$_>pv)4RtYV$85}{{r&)Ko|UX ztdPEndsa-+QUBv#z_>YVJNhH4Arm>|9b z`Ds=`9UtA3SB|^w2R2ggmxyi?6z1q!cp*)Xt0QjiuIL_8?{V+m-LsuS?%xQJV8VLy zdvV=%#k0d->I3y?V#P`b&OD&1E#=q+z|=ZdJ!51edV*LBNqjXLA`zksU&6p5dN(kXsNEtv15 zx!x|F-PfAeI=B2y&A@yAMX{M_>8hFgmra<-^+0=5Ac>i=g+EHe-8Nb{s^jNt$t?!7d{B>oJLUaU~ z5$)9mjfD)t)QC36`Y)hH?Lc$g_>tZAIwar_iu`53ZtyM2HKwY{JMLm1D{hZ{8yE;$ z!3Dp%S3yO~=_0!=0_wyvgyJ-mnwXab$bQZ{^hCL||4q+8(!lm>H`}+|~MKS@c2vuPC&9RsKT} z+<`k3#J0Zj0_CW7N*920DO8J6;q7=@`IW?Ykkanp^nJB=$VI2S?n% zw`bJ{?-=?bikyovjk`74fB#bA#*AI%-1Nr0$u|F5dh`}~g}GFMiv1W-ZCAI(-^-a$ zj_aV;7|qh6fAmV=w?+W#c6A_dy0yQiIp}IyJl#7tYgrRWQ^8~5&d3lX!ng?9aws{u zzVd&lI(XAEVL1VFFZ@_@6}vv78ICNiAi_sJRGS_f*%$b|!U%cH2EtlU!bmnht2M>h zCX~mn=cYFkwZa>vOKV-7TWvv?+dl>u4?EZLlT~;ceo2yZ9##|5)fmHT80Pl(82uU* z+%AL$&PXVfStmRsuYcyyt{q|k`~it)1ZG%S5)$%>!pJavwxHa5e^i|#Q#OGV&VrJy zP7k-GemZLOmfV;P%a_EM3FV4F6}Ypl)z^7Vef)lwA&wd8 z*YR5Yc>61QPbqM{+ky7aHwqBixp0gF2>-dBx(*z7O7;(X(&( zfEw?yF`u}`Pw4cp%ZH^)UpzZhib-Qrab_X^kJXMsdcc?q@C7T@T~Djt7~H|}JLIXL zh?_K28d#o)RfE9>$W_A-%UBN|mu}?sE_c-qF7Ir0Lbwa|d=^-6q)n$y?@xvwVKgju z6{|&4<57oP<6{_?gm+Ix&90phd5qT{99I9pGIm)ejcG)+=H{>H+v@rEABP@|TO_lA zDnRP8KqtEm$b2pu&v+F!2U#bb339mSEki{b*VTk>sZ~~g(&zrsl=Lx5nWXN?+OzE$ z!802ADq(~%X1G6H7ln_!Yf<}%iG{8$^k~}PIE}WN{6I!UNADUvTE`^zv{%S5h4gf8 z67VRP+!#1NVA%++Dda5cvZdrqV@g!W=9PaaJ4=W%w`|^B`#qi(B4>BGd!6--SMzuK zaC%Fl`&~?_JtlooYD_8hcEFXsVv!I)K*OMQ?o`N9 zl2k#a#htOA-9r}lt8ugd>V=`13IVZuiJK0SbB2Y*JCno<XMju*j9OYm0@6rcJpMZ>U_o*UKo=EaAZYe5Mgb=ZcM}-n6rUY>{8Y4uf_74r= zp|K|l)I&uNtroYp>TGO*HsmcvkFMBU<4SN}STK3+8fOSWh%hc*_yW61r0Qh4O6ydn z2g0fZHd`a2DkjG)^A+;vK(b_*8)D`dVO%xbB>i35Y9!qAN*(*0Ubgke`?J7ab;UC) zx*$2@GAj-4%!Zv-uN%i}ay8yyzodz8%~y9LwbFJmC|3GlX>$nit`XgIHK(2NbPY8l zghtP$CyvRtpX-J;jH$#arvmB|aiariH)>_NSAu5^V65a%Cmk38X!Mr3ANiL-|*2z@OduYTmhl7t8bbp`Hl?BTQk8*Y?3sUZdKT zim)K5*RmKsSlGeMDQ9&_Z|FsxeqEfY$X)A~buTGsnGyEu#?DsV67TB6bEy>EkYr9* z4V#5uwuhdevCN0RfJ6K{AFnd~&y}OqaDsN+^VZJiNofLYG&iPJp005{e85(_Q80#I z(r#cf?yh-Khk#)lq38|2g>Ox9*yr(B73^}RU&ldl`zaqC0ASgS54qCTYIA9tHK@Wh zMkEl(_?4>P%-Q&}I}xkb;oBprn*CcAOaw6iqXS4F{J#FE@S#?wMgUGCUwfWQC+#Zb zoPAA0Z@YH8>e1)bz}Jzs|hK!^mn@%Mf@Qn@cpC~R>X2Dz`z zJfvy{FO}4zd@)}{@~F5IHBjxz%pv*7?STuC-K{1*!LW3z*+_!$G_!F|`JPCc78(cU zP?!|n4(fm}BUJBT%@6N?HP5V$9MYa3uL8!wE30axvvy6I0=402!%6zfah%S=$tWKZ zqlAo^&mI2>ivLpMP139Aytts(LApOyA1x-lBNbd?ruBV4DKPNefg$K>S=r`Ib!JW~ z>0~k6>)75lI!Z-`RjA#~E{0M@>4mkXfG`BfodBWSe)f-(?f+5UI?t&Vke+>OZ;q{xOL7PuE8um=;aKaLU`|gSe^)uK2H;B$Gx=9KB_2h(g3prV|fU_2bKHjP5Obz;JFGG zu4S1jChqBjxZB@_GPs0I%q9fSDUZl%-@Z(uSRQY>2hKJN5A)q;wF>EmSg5FG=KAg( za|)<6T$$`DE3(<`jv)T|-;wnGci*E~{Hk{i@9qFk zRXl_6@<=dlog3F0%~7Z5?l1OShHn$aESupj6}kR>)MtB zcT?MclDssFeOdg4r3D$@kNzYs1#5n`U*Kc&?4=N8k2~%ah?E&A)s3{&l>hc-O{z(Fp1i9*^wn zBzWPPLHF@N7}8FHno~{HDeRGHV?3Yhy+MJv8;lG_V5Q@UK4x(klI~kP4s{Ip4G(Yi z0b5@~0^t;;QYPbQxvMd=&0oNCFq5C;6d4+!FaxQ!&m2jo9e`Q>Ar%gJKLk?x=V>{0~G%{1c*wsR{AoZH(r#)RG~h0z=EeFvM?Il zG~R;MVO)7s;$3U+am&fapMBx`RfU=VTInwLWXPYsU}fHR+SzDMg?6a9A5Vq2*Yxs! zZ_3?N1dAmaWaN^hDES3;GqYZ-EYwb3g!_W;RMu|6MVoP5|n939}EjG2;SR~D{Q@K46SKCq^ zu?_3cC3~gkr3ibEyb-Wd6C1Sg6U-hl9-`;igIBFY3QT!~irXs@nNxc^9Y_L9M9YB~ zFR@$dW?f5leRUEcmFPOF!n)lNjV4Ij$@txg!9NKdt0fArL)C#_p8E+&cXB+n@FTU+ z@Xv0B%fm@_coucPhyDm>c_YV(}ohR zY!ds({A0A}Grh7Sn@LJgZy)S0l^I{u`ZY`*LDh00vLiKM!3?Kbn|LFy-$vW#3OWyW zB{zBg%lN|WTU4L3Tjq8!3$y!jlgGlV=g^MW*kEh%^oC-xdEHILcorKbdJbDY{jBAh z9V2=a?s}%4uVvPpz<`a0cbdo31lUut?fK>mLfz=W!oJ{qwiY2h_Ct)uxT=acvU81b z$jDX-c6Q_{1vu$4;yDFp=Z(13jtwhWGRD7j=(vkz-@~jQP+0OOMpxryQ9!0IqBIT6 z?{FFZ?C6+BAw|lq+E*T5(Bm!IT$eI6Puh&`Jkrd@ciq2iR93<)GsKV}ZHzhYy>GC;iR zkniZ1CvK{@JuMcNnuolpvc159?!E_hys2GNj=!(}I=U-p1wojJjBnjd-{7lSK#_%|Q#MNxXz-Tsr z>C4R^1f0lE`BbA@SgZg;iYWAD=RV>x>nLa$3ml+NQLS;n7mgzvrj=qtDl8V5Qi&XAw%|&&P94$W zdKklYzSuQ3dzKZZH;FJ**QRFao5wi6GjmrTBox{VkaQxHf!RF7q4D+ZwNAhOG1?o~ z*ReiXFk%SQ%FF%=cje6d!T97n<8GQIr1d!}y<0m@CC|%KD{b0;fF^nR!`KIfCpTei zlSJMyOkCH}I7t1T_~iY(`{aqi^72P6bFbBBV?hxTwbI?y!6RxixJNZB|!`$X4qUgO{@jk`UXY=1l3vJ7@(KZe;w%LlgR zQ7TF=gba=W*}IE#LUXB~h+X3pU@`jvYWUFX~V8oR=+9%35)ue#MG|>Sj|+&sI*T0Qb)yLR&@X1L&(qf}53{rQ>qd zoF7tu$AgV4)xLQ+n!jPX?P0%VmnZlc^h^@rgVt-7{kh@=>Y_@HE^eD{OwPodoRiP5 zbCZQw_rOulU_0b!+{04@njC&mwGSEDlPx!t z_qr(G)(}x&{_yfCFpcIGaTaq#b+?X5=G&nq&;!OVFxSMA)q#=d$x=_Y!;$uiR`B(- zu=M4y#f{Q&^;($ITVP;zH3BpBK45?zJK_HB;Fjm{+_|vf{Ob`$LEoy4jGiSBCpI4E z4sRCBLp8}ajtjO3O@PLaViA%_7wiIjuw2H+&%y5CiENBhn$W9sX+ImMhUuiXU@jKr ztL_osq0!f+?sAf_;|Wu1WW~yRNQJMKqp?s4SBBKeA z&F6>PyM5KkGC^NfZVm_2=Bmsmv5We>Oi($@P_a3YzZ`@gLJr2pFkuwF)61TYgu zq#Aw#cg7_9UNCT9hmP=WN0XBfv+MF`O=n8w-H2H;&r4;nfphLO?taD7?Y>0G26er zXxtoQO01K;tACIjX|dpcs{O_3H=oiDPH{O^Qu;W{;L+Xa2n=c<|NA^FvIn_^wVVXLi~uGb;!N^caGwb`kf0EPj5 z0J=gz2Jpj{=bo?g=7+J_8hd|N%Y~m=iZOQta&BpA(Cv^U?pQT?HC}8AFzs`fL@jw2 z=wMGRRg$|6;vRiIb8!3$9%vaP!(=}eqGklju}iQ{`RDz>KZxr%t5ABRQMR2c?PjxU zS35G+L7lxdQ%-QpFO(mLgQKbYpwIeO#O(RV|38JyY`_o0r#Ru&BY3+Swt77|_60f} zeAndarPh*_Y8tbiuwb+hdajlER3Y407jJWy+3T^r&Brc0%pag6Y*cDh@+r^ejzC z+UMllt46!*xO`1+?>77XUI8*gj3Syj7A*0{m6A1_q2VcLGG!;{B<1LB=M`h5VidY4 zYQEP%eVXN2*_!LkAz`DJ%X}V*UHK~WeotuK~AJK4w-?T!9l5hnrjHDL(tU_xlp9hYDB1eSvX>}mkCT3&TfZE@qggctW6yv1QUXu z$b8y6E8kvD?OwiThDPLr3ZNQIJG+^CY?}7gc=a?3%`2YAaR|Xpj z9ir@I_d1YZg1guG-&c1tbX{~68yobI&guN#v*`P|@P5zz`+Y0o3c9MdYO|Q|rpq3` zi(U)SC=s|#_L-k=%!r<2u1wGuSXP=F6oRYPzx#^6EBC0ENXAGPdkaR0cVrJ&0$NsO zfSRz_+J^CzWM3#-1chNfiCy=dJ6smnaU0@YrK~ERnByNfh^CqO`St5P>E8#F-F_)GFw(Qt z(WTH>T$^7_j_FJ3r|{ftj$m@Dh=chP+!OfOqVv83Hl9smXIT2X@hmX)notFD)%@V^ zNP3bug;5*u-imkd0!4bknLg5~p)t|3Dh}dD6OZD4`JS4e`+cWM-xl4sOk47+R^MsX zFuD1=#T?*i=r}oX;ORf}AG&z$?ZEw8-EWZD)mPt?&m2lQ+$fg(HV2$K+>+U0hgiV7 zN3v5P#3@|)Y)T)Qh)9&HINJnz_&;k}9rhb9d7;_q`xML7H`6WAl%}V$SeHEu*QLG2 zj;FPLg3Hj6P2bBY559dK&F50WdbaYIaXC?cUaz^wrTS?qTm9Fn0*xJ|Rv3+0!EaU; z1;92cZ){kU6)GmWMhtlgR_%gN%+%ihw2U&Wmm|N?nIj;L5!F^qdiGiRdK~-rn8BrL zG(+`i?6IGI;TZXMFI?5{nYO9?ZMQVfExWlgb1`0RajZpd3;KR50(yTbKQMKixMU-q zU}_3~alw&d%c!u;ZzXgT3&IgXqReCRm13yc|jtmN~A*(&-FcF^Trz^sD;d-RhaEC){})ADkC6i?4&J z)J}D%2->;M8)Ui?$Bg$fy4zl!t;P$%7mvh0kT?l0wmfHzav2;pA_fuNMBKV1{@^gz zM}QK4FZNj5J5C5|F`DEE^uL2xy~BB;?Hcgfn650R=x9+WrHtEDeKJMBjaV3TgBd!Q z9po~8b2M2s?BZQSH<{P1Ws#fVSBA@PG+yIv+`4q$Q#fKTS4%ghiJ{EXEnnytTWVBT zIGyt zWJ1pbbiS-it$5y9a6&nT5i8m&3Uhj{%o3DmM;)+0z19CCjh>V_Subp!=114m4+-3Z zQXyXl1)VTewy#A$!Y9SdEwd^bsm3V#XszQT4>mx;eP5=rK_(;-_-K53weW@ z45P^y7zelYFUd!?^gm^ zFOUDZ4$w#EstP?YSR)byTC|D0Sr7W^ne5a$7~fHr(IZT(#8co44)CVD=O|xWZdFxv zGa`>GHAX^c_PNUNH9z(DA7k*Z*X?YZPnEX@yxaD^cIcz!OPd({^LSU9M~0iIxvgys zC0#bWHmU~>D5y}vuH1a@v$!)TQ z$CBl{jRWha0r~?GR*7@q)@s6C2rdx8yT+gsHx{ze@09u`3Tk+ILNim1tW5r(zf2782y)2e`VuXK1-&Tv1 zHvhZOi}9jbn$0Co`K5NRW;5ib<#YgZXYhFWYw1iI>BPO2X|Fzr|JxAKL#ft)bUGi; zaHU4W=)z8N@H%amvdEp%jr`f5omgiz*w~q zT%yn-yi3twA7xg$z=&og#r>Hj3cpGn-)v2P{-&WZhD;r6XE>(wRmVPXFMS_{{Y5A% zIlFOFc^<3i#{gGKcB7(Z!XJ>UvPiL%xQEbHHmeobj#ez8)1oC*1#yE)} zu7)40dy;0qO$_PisYv@1-ji_jJHGq4_e12#(HbS)(M2>Fn_8DfA+t4Qk6>LBPy)hw zv-z;tyx6%v9>c!tf?p{pLgHO<3#Iv_)zZo>CS~g5`9=FOna6i{FLOCbpiwUbCX&Zul@U8sl7tZksy47)TZ!&>W|Y zwx0TCQ0HR2Jdag5!JXflT*Z@O6?%>FR|8AJHxgAXJ!IGS7Mi*NrB>JYrV*W>sUpJ4 z%#xLFGqjnR(OgBV5w)vqIzBg3L!&~z_;|9p>i+(%+Wfyk6sRm+}M}J<>bBEyLbyor~*|J#&}2^^g^mQ|$

`bi&SW6Ck4~oiFE=e_al?+y>?yQO( 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�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

    -YBwf$9Y|LoHl+KVjAW<9 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 Rzdye&&Hs;Q0RL_3zW^UeJ^=s# literal 0 HcmV?d00001 diff --git a/lib/checkpoints.py b/lib/checkpoints.py new file mode 100644 index 0000000..a362b19 --- /dev/null +++ b/lib/checkpoints.py @@ -0,0 +1,127 @@ +""" +A collection of function used for saving and loading the model weights. +Based on the Occupany Networks repository: https://github.com/autonomousvision/occupancy_networks + +If you use in your project pelase consider also citing: http://www.cvlibs.net/publications/Mescheder2019CVPR.pdf +""" + +import os +import urllib +import torch +from torch.utils import model_zoo + +class CheckpointIO(object): + ''' CheckpointIO class. + It handles saving and loading checkpoints. + Args: + checkpoint_dir (str): path where checkpoints are saved + ''' + def __init__(self, checkpoint_dir='./chkpts', initialize_from=None, + initialization_file_name='model_best.pt', **kwargs): + self.module_dict = kwargs + self.checkpoint_dir = checkpoint_dir + self.initialize_from = initialize_from + self.initialization_file_name = initialization_file_name + if not os.path.exists(checkpoint_dir): + os.makedirs(checkpoint_dir) + + def register_modules(self, **kwargs): + ''' Registers modules in current module dictionary. + ''' + self.module_dict.update(kwargs) + + def save(self, filename, **kwargs): + ''' Saves the current module dictionary. + Args: + filename (str): name of output file + ''' + if not os.path.isabs(filename): + filename = os.path.join(self.checkpoint_dir, filename) + + outdict = kwargs + for k, v in self.module_dict.items(): + outdict[k] = v.state_dict() + torch.save(outdict, filename) + + def load(self, filename): + '''Loads a module dictionary from local file or url. + Args: + filename (str): name of saved module dictionary + ''' + if is_url(filename): + return self.load_url(filename) + else: + return self.load_file(filename) + + def load_file(self, filename): + '''Loads a module dictionary from file. + Args: + filename (str): name of saved module dictionary + ''' + + if not os.path.isabs(filename): + filename = os.path.join(self.checkpoint_dir, filename) + + if os.path.exists(filename): + print(filename) + print('=> Loading checkpoint from local file...') + state_dict = torch.load(filename) + scalars = self.parse_state_dict(state_dict) + return scalars + else: + if self.initialize_from is not None: + self.initialize_weights() + raise FileExistsError + + def load_url(self, url): + '''Load a module dictionary from url. + Args: + url (str): url to saved model + ''' + print(url) + print('=> Loading checkpoint from url...') + state_dict = model_zoo.load_url(url, progress=True) + scalars = self.parse_state_dict(state_dict) + return scalars + + def parse_state_dict(self, state_dict): + '''Parse state_dict of model and return scalars. + Args: + state_dict (dict): State dict of model + ''' + + for k, v in self.module_dict.items(): + if k in state_dict: + v.load_state_dict(state_dict[k]) + else: + print('Warning: Could not find %s in checkpoint!' % k) + scalars = {k: v for k, v in state_dict.items() + if k not in self.module_dict} + return scalars + + def initialize_weights(self): + ''' Initializes the model weights from another model file. + ''' + + print('Intializing weights from model %s' % self.initialize_from) + filename_in = os.path.join( + self.initialize_from, self.initialization_file_name) + + model_state_dict = self.module_dict.get('model').state_dict() + model_dict = self.module_dict.get('model').state_dict() + model_keys = set([k for (k, v) in model_dict.items()]) + + init_model_dict = torch.load(filename_in)['model'] + init_model_k = set([k for (k, v) in init_model_dict.items()]) + + for k in model_keys: + if ((k in init_model_k) and (model_state_dict[k].shape == + init_model_dict[k].shape)): + model_state_dict[k] = init_model_dict[k] + self.module_dict.get('model').load_state_dict(model_state_dict) + + +def is_url(url): + ''' Checks if input is url.''' + scheme = urllib.parse.urlparse(url).scheme + return scheme in ('http', 'https') \ No newline at end of file diff --git a/lib/config.py b/lib/config.py new file mode 100644 index 0000000..e43cf05 --- /dev/null +++ b/lib/config.py @@ -0,0 +1,48 @@ + +from lib import pairwise, multiview +import torch + +method_dict = { + 'pairwise': pairwise, + 'multiview': multiview, +} + + +def get_model(cfg): + ''' + Gets the model instance based on the input paramters. + + Args: + cfg (dict): config dictionary + + Returns: + model (nn.Module): torch model initialized with the input params + ''' + + method = cfg['method']['task'] + device = torch.device('cuda' if (torch.cuda.is_available() and cfg['misc']['use_gpu']) else 'cpu') + + model = method_dict[method].config.get_model(cfg, device=device) + + return model + +def get_trainer(cfg, model, optimizer, logger): + ''' + Returns a trainer instance. + + Args: + cfg (dict): config dictionary + model (nn.Module): the model used for training + optimizer (optimizer): pytorch optimizer + logger (logger instance): logger used to output info to the consol + + Returns: + trainer (trainer instance): trainer instance used to train the network + ''' + + method = cfg['method']['task'] + device = torch.device('cuda' if (torch.cuda.is_available() and cfg['misc']['use_gpu']) else 'cpu') + + trainer = method_dict[method].config.get_trainer(cfg, model, optimizer, logger, device) + + return trainer diff --git a/lib/data.py b/lib/data.py new file mode 100644 index 0000000..2823249 --- /dev/null +++ b/lib/data.py @@ -0,0 +1,390 @@ +import numpy as np +import glob +import logging +import os +import torch.utils.data as data +from lib.utils import augment_precomputed_data, add_jitter, get_file_list, get_folder_list, read_trajectory +import torch + +def collate_fn(batch): + data = {} + + def to_tensor(x): + """ + Maps the numpy arrays to torch tenors. In torch tenor is used as input + it simply returns it. + + Args: + x (numpy array): numpy array input data + + Returns: + x (torch tensor): input converted to a torch tensor + """ + if isinstance(x, torch.Tensor): + return x + elif isinstance(x, np.ndarray): + return torch.from_numpy(x).float() + else: + raise ValueError(f'Can not convert to torch tensor, {x}') + + + for key in batch[0]: + data[key] = [] + + for sample in batch: + for key in sample: + if isinstance(sample[key], list): + data[key].append(sample[key]) + else: + data[key].append(to_tensor(sample[key])) + + for key in data: + if isinstance(data[key][0], torch.Tensor): + data[key] = torch.stack(data[key]) + + return data + + +class PrecomputedIndoorDataset(data.Dataset): + """ + Dataset class for precomputed FCGF descrptors and established correspondences. Used to train the Registration blocks, + confidence block, and transformation synchronization layer. If using this dataset the method descriptor argument and + train_desc flag in the arguments have to be set to null and False respectively. Eases the training of the second part + as the overlaping pairs that build a graph can be presampled + + """ + + def __init__(self, phase, config): + + self.files = [] + self.random_shuffle = config['data']['shuffle_examples'] + self.root = config['data']['root'] + self.config = config + self.data = None + self.randng = np.random.RandomState() + self.use_mutuals = config['data']['use_mutuals'] + self.dist_th = config['data']['dist_th'] + self.max_num_points = config['data']['max_num_points'] + self.augment_data = config['data']['augment_data'] + self.jitter = config['data']['jitter'] + + self.device = torch.device('cuda' if (torch.cuda.is_available() and config['misc']['use_gpu']) else 'cpu') + + logging.info("Loading the subset {} from {}!".format(phase,self.root)) + + subset_names = open(self.DATA_FILES[phase]).read().split() + + for name in subset_names: + self.files.append(name) + + def __getitem__(self, idx): + + file = os.path.join(self.root,self.files[idx]) + data = np.load(file) + + file_name = file.replace(os.sep,'/').split('/')[-1] + + xs = data['x'] + ys = data['y'] + Rs = data['R'] + ts = np.expand_dims(data['t'], -1) + + mutuals = data['mutuals'] + inlier_ratio = data['inlier_ratio'] # Thresholded at 5cm deviation + inlier_ratio_mutuals = data['inlier_ratio_mutuals'] # Thresholded at 5cm deviation + overlap = data['overlap'] # Max overlap + + + # Shuffle the examples + if self.random_shuffle: + if xs.shape[0] >= self.max_num_points: + sample_idx = np.random.choice(xs.shape[0], self.max_num_points, replace=False) + else: + sample_idx = np.concatenate((np.arange(xs.shape[0]), + np.random.choice(xs.shape[0], self.max_num_points-xs.shape[0], replace=True)),axis=-1) + + xs = xs[sample_idx,:] + ys = ys[sample_idx] + mutuals = mutuals[sample_idx] + + + # Check if the the mutuals or the ratios should be used + side = [] + if self.use_mutuals == 0: + pass + elif self.use_mutuals == 1: + mask = mutuals.reshape(-1).astype(bool) + xs = xs[mask,:] + ys = ys[mask] + elif self.use_mutuals == 2: + side.append(mutuals.reshape(-1,1)) + side = np.concatenate(side,axis=-1) + else: + raise NotImplementedError + + # Augment the data augmentation + if self.augment_data: + xs, Rs, ts = augment_precomputed_data(xs, Rs, ts) + + if self.jitter: + xs, ys = add_jitter(xs, Rs, ts) + + + # Threshold ys based on the distance threshol + ys_binary = (ys < self.dist_th).astype(xs.dtype) + + if not side: + side = np.array([0]) + + # Prepare data + xs = np.expand_dims(xs,0) + ys = np.expand_dims(ys_binary,-1) + + + return {'R': Rs, + 't': ts, + 'xs': xs, + 'ys': ys, + 'side': side, + 'overlap': overlap, + 'inlier_ratio': inlier_ratio} + + def __len__(self): + return len(self.files) + + def reset_seed(self,seed=41): + logging.info('Resetting the data loader seed to {}'.format(seed)) + self.randng.seed(seed) + + + + + + +class PrecomputedPairwiseEvalDataset(data.Dataset): + """ + Dataset class for evaluating the pairwise registration based on the precomputed feature correspondences + + """ + def __init__(self, args): + + self.files = [] + self.root = args.source_path + self.use_mutuals = args.mutuals + save_path = os.path.join(self.root, 'results', args.method) + save_path += '/mutuals/' if args.mutuals else '/all/' + + + logging.info("Loading the eval data from {}!".format(self.root)) + + scene_names = get_folder_list(os.path.join(self.root,'correspondences')) + + for folder in scene_names: + curr_scene_name = folder.split('/')[-1] + if os.path.exists(os.path.join(save_path,curr_scene_name,'traj.txt')) and not args.overwrite: + logging.info('Trajectory for scene {} already exists and will not be recomputed.'.format(curr_scene_name)) + else: + if args.only_gt_overlaping: + gt_pairs, gt_traj = read_trajectory(os.path.join(self.root,'raw_data', curr_scene_name, "gt.log")) + for idx_1, idx_2, _ in gt_pairs: + self.files.append(os.path.join(folder,curr_scene_name + '_{}_{}.npz'.format(str(idx_1).zfill(3),str(idx_2).zfill(3)))) + + else: + corr_files = get_file_list(folder) + for corr in corr_files: + self.files.append(corr) + + def __getitem__(self, idx): + + curr_file = os.path.join(self.files[idx]) + data = np.load(curr_file) + + idx_1 = str(curr_file.split('_')[-2]) + idx_2 = str(curr_file.split('_')[-1].split('.')[0]) + curr_scene_name = curr_file.split('/')[-2] + metadata = [curr_scene_name, idx_1, idx_2] + xs = data['x'] + + xyz1 = np.load(os.path.join(self.root,'features',curr_scene_name, curr_scene_name + '_{}.npz'.format(idx_1)))['xyz'] + xyz2 = np.load(os.path.join(self.root,'features',curr_scene_name, curr_scene_name + '_{}.npz'.format(idx_2)))['xyz'] + + if self.use_mutuals == 1: + mutuals = data['mutuals'] + xs = xs[mutuals.astype(bool).reshape(-1), :] + + return {'xs': np.expand_dims(xs,0), + 'metadata':metadata, + 'idx':np.array(idx), + 'xyz1': [xyz1], + 'xyz2': [xyz2]} + + def __len__(self): + test = len(self.files) + return len(self.files) + + def reset_seed(self,seed=41): + logging.info('Resetting the data loader seed to {}'.format(seed)) + self.randng.seed(seed) + + + + + + +### NEEDS TO BE IMPLEMENTED ### +class RawIndoorDataset(data.Dataset): + def __init__(self, phase, config): + + self.files = [] + self.random_shuffle = config['data']['shuffle_examples'] + self.root = config['data']['root'] + self.config = config + self.data = None + self.randng = np.random.RandomState() + self.use_ratio = config['misc']['use_ratio'] + self.use_ratio_tf = config['misc']['use_ratio_th'] + self.use_mutuals = config['misc']['use_mutuals'] + self.dist_th = config['misc']['dist_th'] + self.max_num_points = config['misc']['max_num_points'] + + self.device = torch.device('cuda' if (torch.cuda.is_available() and config['misc']['use_gpu']) else 'cpu') + + logging.info("Loading the subset {} from {}!".format(phase,self.root)) + + + subset_names = open(self.DATA_FILES[phase]).read().split() + + for name in subset_names: + self.files.append(name) + + def __getitem__(self, idx): + + file = os.path.join(self.root,self.files[idx]) + data = np.load(file) + + file_name = file.replace(os.sep,'/').split('/')[-1] + + xs = data['x'] + ys = data['y'] + Rs = data['R'] + ts = data['t'] + ratios = data['ratios'] + mutuals = data['mutuals'] + inlier_ratio = data['inlier_ratio'] # Thresholded at 5cm deviation + inlier_ratio_mutuals = data['inlier_ratio_mutuals'] # Thresholded at 5cm deviation + overlap = data['overlap'] # Max overlap + + + # Shuffle the examples + if self.random_shuffle: + if xs.shape[0] >= self.max_num_points: + sample_idx = np.random.choice(xs.shape[0], self.max_num_points, replace=False) + else: + sample_idx = np.concatenate((np.arange(xs.shape[0]), + np.random.choice(xs.shape[0], self.max_num_points-xs.shape[0], replace=True)),axis=-1) + + xs = xs[sample_idx,:] + ys = ys[sample_idx] + ratios = ratios[sample_idx] + mutuals = mutuals[sample_idx] + + + # Check if the the mutuals or the ratios should be used + side = [] + if self.use_ratio == 0 and self.use_mutuals == 0: + pass + elif self.use_ratio == 1 and self.use_mutuals == 0: + mask = ratios.reshape(-1) < self.use_ratio_tf + xs = xs[mask,:] + ys = ys[mask] + elif self.use_ratio == 0 and self.use_mutuals == 1: + mask = mutuals.reshape(-1).astype(bool) + xs = xs[mask,:] + ys = ys[mask] + elif self.use_ratio == 2 and self.use_mutuals == 2: + side.append(ratios.reshape(-1,1)) + side.append(mutuals.reshape(-1,1)) + side = np.concatenate(side,axis=-1) + else: + raise NotImplementedError + + # Threshold ys based on the distance threshol + ys_binary = (ys < self.dist_th).astype(xs.dtype) + + if not side: + side = np.array([0]) + + + return {'R': Rs, + 't': np.expand_dims(ts, -1), + 'xs': np.expand_dims(xs, 0), + 'ys': np.expand_dims(ys_binary, -1), + 'side': side, + 'overlap': overlap, + 'inlier_ratio': inlier_ratio} + + + def __len__(self): + return len(self.files) + + def reset_seed(self,seed=41): + logging.info('Resetting the data loader seed to {}'.format(seed)) + self.randng.seed(seed) + +class Precomputed3DMatch(PrecomputedIndoorDataset): + # 3D Match dataset all files + DATA_FILES = { + 'train': './configs/3DMatch/3DMatch_all_train.txt', + 'val': './configs/3DMatch/3DMatch_all_valid.txt', + 'test': './configs/3DMatch/test_all.txt' + } + +class Precomputed3DMatchFiltered(PrecomputedIndoorDataset): + # 3D Match dataset with only overlaping point cloud and with examples + # that have more than 5% inliers (see dataset readme for more info) + + DATA_FILES = { + 'train': './configs/3DMatch_new/3DMatch_filtered_train.txt', + 'val': './configs/3DMatch_new/3DMatch_filtered_valid.txt', + 'test': './configs/3DMatch/test_all.txt' + } + + +# Map the datasets to string names +ALL_DATASETS = [Precomputed3DMatch, Precomputed3DMatchFiltered] +dataset_str_mapping = {d.__name__: d for d in ALL_DATASETS} + + +def make_data_loader(config, phase, shuffle_dataset=None): + """ + Defines the data loader based on the parameters specified in the config file + Args: + config (dict): dictionary of the arguments + phase (str): phase for which the data loader should be initialized in [train,val,test] + shuffle_dataset (bool): shuffle the dataset or not + + Returns: + loader (torch data loader): data loader that handles loading the data to the model + """ + + assert config['misc']['run_mode'] in ['train','val','test'] + + if shuffle_dataset is None: + shuffle_dataset = shuffle_dataset != 'test' + + # Select the defined dataset + Dataset = dataset_str_mapping[config['data']['dataset']] + + dset = Dataset(phase, config=config) + + loader = torch.utils.data.DataLoader( + dset, + batch_size=config[phase]['batch_size'], + shuffle=shuffle_dataset, + num_workers=config[phase]['num_workers'], + collate_fn=collate_fn, + pin_memory=False, + drop_last=True + ) + + return loader diff --git a/lib/descriptor/__init__.py b/lib/descriptor/__init__.py new file mode 100644 index 0000000..94acab5 --- /dev/null +++ b/lib/descriptor/__init__.py @@ -0,0 +1,6 @@ +from lib.descriptor import fcgf + +descriptor_dict = { + 'fcgf': fcgf.FCGFNet, +} + diff --git a/lib/descriptor/common.py b/lib/descriptor/common.py new file mode 100644 index 0000000..a8aead3 --- /dev/null +++ b/lib/descriptor/common.py @@ -0,0 +1,10 @@ +import MinkowskiEngine as ME + + +def get_norm(norm_type, num_feats, bn_momentum=0.05, D=-1): + if norm_type == 'BN': + return ME.MinkowskiBatchNorm(num_feats, momentum=bn_momentum) + elif norm_type == 'IN': + return ME.MinkowskiInstanceNorm(num_feats, dimension=D) + else: + raise ValueError(f'Type {norm_type}, not defined') diff --git a/lib/descriptor/fcgf.py b/lib/descriptor/fcgf.py new file mode 100644 index 0000000..8baf89b --- /dev/null +++ b/lib/descriptor/fcgf.py @@ -0,0 +1,284 @@ +""" +Source code of the Fully Convolutional Feature Descriptor (ICCV 2019), based on the FCGF repository: https://github.com/chrischoy/FCGF/ + +If you use in your project please consider also citing: https://node1.chrischoy.org/data/publications/fcgf/fcgf.pdf + +""" + +# -*- coding: future_fstrings -*- +import torch +import torch.nn as nn +import MinkowskiEngine as ME +import MinkowskiEngine.MinkowskiFunctional as MEF + +def get_norm(norm_type, num_feats, bn_momentum=0.05, D=-1): + if norm_type == 'BN': + return ME.MinkowskiBatchNorm(num_feats, momentum=bn_momentum) + elif norm_type == 'IN': + return ME.MinkowskiInstanceNorm(num_feats, dimension=D) + else: + raise ValueError(f'Type {norm_type}, not defined') + + +class BasicBlockBase(nn.Module): + expansion = 1 + NORM_TYPE = 'BN' + + def __init__(self, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + bn_momentum=0.1, + D=3): + super(BasicBlockBase, self).__init__() + + self.conv1 = ME.MinkowskiConvolution( + inplanes, planes, kernel_size=3, stride=stride, dimension=D) + self.norm1 = get_norm(self.NORM_TYPE, planes, bn_momentum=bn_momentum, D=D) + self.conv2 = ME.MinkowskiConvolution( + planes, + planes, + kernel_size=3, + stride=1, + dilation=dilation, + has_bias=False, + dimension=D) + self.norm2 = get_norm(self.NORM_TYPE, planes, bn_momentum=bn_momentum, D=D) + self.downsample = downsample + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.norm1(out) + out = MEF.relu(out) + + out = self.conv2(out) + out = self.norm2(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = MEF.relu(out) + + return out + + +class BasicBlockBN(BasicBlockBase): + NORM_TYPE = 'BN' + + +class BasicBlockIN(BasicBlockBase): + NORM_TYPE = 'IN' + + +def get_block(norm_type, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + bn_momentum=0.1, + D=3): + if norm_type == 'BN': + return BasicBlockBN(inplanes, planes, stride, dilation, downsample, bn_momentum, D) + elif norm_type == 'IN': + return BasicBlockIN(inplanes, planes, stride, dilation, downsample, bn_momentum, D) + else: + raise ValueError(f'Type {norm_type}, not defined') + + + + + +class FCGFNet(ME.MinkowskiNetwork): + NORM_TYPE = 'BN' + BLOCK_NORM_TYPE = 'BN' + CHANNELS = [None, 32, 64, 128, 256] + TR_CHANNELS = [None, 64, 64, 64, 128] + + # To use the model, must call initialize_coords before forward pass. + # Once data is processed, call clear to reset the model before calling initialize_coords + def __init__(self, + in_channels=3, + out_channels=32, + bn_momentum=0.1, + normalize_feature=True, + conv1_kernel_size=7, + D=3): + + ME.MinkowskiNetwork.__init__(self, D) + NORM_TYPE = self.NORM_TYPE + BLOCK_NORM_TYPE = self.BLOCK_NORM_TYPE + CHANNELS = self.CHANNELS + TR_CHANNELS = self.TR_CHANNELS + self.normalize_feature = normalize_feature + self.conv1 = ME.MinkowskiConvolution( + in_channels=in_channels, + out_channels=CHANNELS[1], + kernel_size=conv1_kernel_size, + stride=1, + dilation=1, + has_bias=False, + dimension=D) + + self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, D=D) + + self.block1 = get_block( + BLOCK_NORM_TYPE, CHANNELS[1], CHANNELS[1], bn_momentum=bn_momentum, D=D) + + self.conv2 = ME.MinkowskiConvolution( + in_channels=CHANNELS[1], + out_channels=CHANNELS[2], + kernel_size=3, + stride=2, + dilation=1, + has_bias=False, + dimension=D) + self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, D=D) + + self.block2 = get_block( + BLOCK_NORM_TYPE, CHANNELS[2], CHANNELS[2], bn_momentum=bn_momentum, D=D) + + self.conv3 = ME.MinkowskiConvolution( + in_channels=CHANNELS[2], + out_channels=CHANNELS[3], + kernel_size=3, + stride=2, + dilation=1, + has_bias=False, + dimension=D) + self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, D=D) + + self.block3 = get_block( + BLOCK_NORM_TYPE, CHANNELS[3], CHANNELS[3], bn_momentum=bn_momentum, D=D) + + self.conv4 = ME.MinkowskiConvolution( + in_channels=CHANNELS[3], + out_channels=CHANNELS[4], + kernel_size=3, + stride=2, + dilation=1, + has_bias=False, + dimension=D) + self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, D=D) + + self.block4 = get_block( + BLOCK_NORM_TYPE, CHANNELS[4], CHANNELS[4], bn_momentum=bn_momentum, D=D) + + self.conv4_tr = ME.MinkowskiConvolutionTranspose( + in_channels=CHANNELS[4], + out_channels=TR_CHANNELS[4], + kernel_size=3, + stride=2, + dilation=1, + has_bias=False, + dimension=D) + self.norm4_tr = get_norm(NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, D=D) + + self.block4_tr = get_block( + BLOCK_NORM_TYPE, TR_CHANNELS[4], TR_CHANNELS[4], bn_momentum=bn_momentum, D=D) + + self.conv3_tr = ME.MinkowskiConvolutionTranspose( + in_channels=CHANNELS[3] + TR_CHANNELS[4], + out_channels=TR_CHANNELS[3], + kernel_size=3, + stride=2, + dilation=1, + has_bias=False, + dimension=D) + self.norm3_tr = get_norm(NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, D=D) + + self.block3_tr = get_block( + BLOCK_NORM_TYPE, TR_CHANNELS[3], TR_CHANNELS[3], bn_momentum=bn_momentum, D=D) + + self.conv2_tr = ME.MinkowskiConvolutionTranspose( + in_channels=CHANNELS[2] + TR_CHANNELS[3], + out_channels=TR_CHANNELS[2], + kernel_size=3, + stride=2, + dilation=1, + has_bias=False, + dimension=D) + self.norm2_tr = get_norm(NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, D=D) + + self.block2_tr = get_block( + BLOCK_NORM_TYPE, TR_CHANNELS[2], TR_CHANNELS[2], bn_momentum=bn_momentum, D=D) + + self.conv1_tr = ME.MinkowskiConvolution( + in_channels=CHANNELS[1] + TR_CHANNELS[2], + out_channels=TR_CHANNELS[1], + kernel_size=1, + stride=1, + dilation=1, + has_bias=False, + dimension=D) + + # self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D) + + self.final = ME.MinkowskiConvolution( + in_channels=TR_CHANNELS[1], + out_channels=out_channels, + kernel_size=1, + stride=1, + dilation=1, + has_bias=True, + dimension=D) + + def forward(self, x): + out_s1 = self.conv1(x) + out_s1 = self.norm1(out_s1) + out_s1 = self.block1(out_s1) + out = MEF.relu(out_s1) + + out_s2 = self.conv2(out) + out_s2 = self.norm2(out_s2) + out_s2 = self.block2(out_s2) + out = MEF.relu(out_s2) + + out_s4 = self.conv3(out) + out_s4 = self.norm3(out_s4) + out_s4 = self.block3(out_s4) + out = MEF.relu(out_s4) + + out_s8 = self.conv4(out) + out_s8 = self.norm4(out_s8) + out_s8 = self.block4(out_s8) + out = MEF.relu(out_s8) + + out = self.conv4_tr(out) + out = self.norm4_tr(out) + out = self.block4_tr(out) + out_s4_tr = MEF.relu(out) + + out = ME.cat((out_s4_tr, out_s4)) + + out = self.conv3_tr(out) + out = self.norm3_tr(out) + out = self.block3_tr(out) + out_s2_tr = MEF.relu(out) + + out = ME.cat((out_s2_tr, out_s2)) + + out = self.conv2_tr(out) + out = self.norm2_tr(out) + out = self.block2_tr(out) + out_s1_tr = MEF.relu(out) + + out = ME.cat((out_s1_tr, out_s1)) + out = self.conv1_tr(out) + out = MEF.relu(out) + out = self.final(out) + + if self.normalize_feature: + return ME.SparseTensor( + out.F / torch.norm(out.F, p=2, dim=1, keepdim=True), + coords_key=out.coords_key, + coords_manager=out.coords_man) + else: + + return out + diff --git a/lib/descriptor/residual_block.py b/lib/descriptor/residual_block.py new file mode 100644 index 0000000..45d275e --- /dev/null +++ b/lib/descriptor/residual_block.py @@ -0,0 +1,77 @@ +import torch.nn as nn + +from fcgf_lib.model.common import get_norm + +import MinkowskiEngine as ME +import MinkowskiEngine.MinkowskiFunctional as MEF + + +class BasicBlockBase(nn.Module): + expansion = 1 + NORM_TYPE = 'BN' + + def __init__(self, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + bn_momentum=0.1, + D=3): + super(BasicBlockBase, self).__init__() + + self.conv1 = ME.MinkowskiConvolution( + inplanes, planes, kernel_size=3, stride=stride, dimension=D) + self.norm1 = get_norm(self.NORM_TYPE, planes, bn_momentum=bn_momentum, D=D) + self.conv2 = ME.MinkowskiConvolution( + planes, + planes, + kernel_size=3, + stride=1, + dilation=dilation, + has_bias=False, + dimension=D) + self.norm2 = get_norm(self.NORM_TYPE, planes, bn_momentum=bn_momentum, D=D) + self.downsample = downsample + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.norm1(out) + out = MEF.relu(out) + + out = self.conv2(out) + out = self.norm2(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = MEF.relu(out) + + return out + + +class BasicBlockBN(BasicBlockBase): + NORM_TYPE = 'BN' + + +class BasicBlockIN(BasicBlockBase): + NORM_TYPE = 'IN' + + +def get_block(norm_type, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + bn_momentum=0.1, + D=3): + if norm_type == 'BN': + return BasicBlockBN(inplanes, planes, stride, dilation, downsample, bn_momentum, D) + elif norm_type == 'IN': + return BasicBlockIN(inplanes, planes, stride, dilation, downsample, bn_momentum, D) + else: + raise ValueError(f'Type {norm_type}, not defined') diff --git a/lib/filtering/__init__.py b/lib/filtering/__init__.py new file mode 100644 index 0000000..22b6854 --- /dev/null +++ b/lib/filtering/__init__.py @@ -0,0 +1,6 @@ +from lib.filtering import , oanet + + +filtering_dict = { + 'oanet': oanet.OANet +} diff --git a/lib/filtering/oanet.py b/lib/filtering/oanet.py new file mode 100644 index 0000000..9c511b6 --- /dev/null +++ b/lib/filtering/oanet.py @@ -0,0 +1,265 @@ +""" +Extension of the filtering network proposed in Learning Two-View Correspondences and Geometry Using Order-Aware Network (ICCV 2019), +to 3D correspondence filtering. Source coude based on the OANet repository: https://github.com/zjhthu/OANet. + +If you use in your project pelase consider also citing: https://arxiv.org/pdf/1908.04964.pdf + +""" + +import torch +import torch.nn as nn +from lib.utils import kabsch_transformation_estimation +import logging + +# If the BN stat should be tracked and used in the inference mode +BN_TRACK_STATS = True + + +class PointCN(nn.Module): + def __init__(self, channels, out_channels=None): + nn.Module.__init__(self) + if not out_channels: + out_channels = channels + self.shot_cut = None + if out_channels != channels: + self.shot_cut = nn.Conv2d(channels, out_channels, kernel_size=1) + self.conv = nn.Sequential( + nn.InstanceNorm2d(channels), + nn.BatchNorm2d(channels, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(channels, out_channels, kernel_size=1), + nn.InstanceNorm2d(out_channels), + nn.BatchNorm2d(out_channels, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(out_channels, out_channels, kernel_size=1) + ) + + def forward(self, x): + out = self.conv(x) + if self.shot_cut: + out = out + self.shot_cut(x) + else: + out = out + x + return out + + +class trans(nn.Module): + def __init__(self, dim1, dim2): + nn.Module.__init__(self) + self.dim1 = dim1 + self.dim2 = dim2 + + def forward(self, x): + return x.transpose(self.dim1, self.dim2) + + +class OAFilter(nn.Module): + def __init__(self, channels, points, out_channels=None): + nn.Module.__init__(self) + if not out_channels: + out_channels = channels + self.shot_cut = None + if out_channels != channels: + self.shot_cut = nn.Conv2d(channels, out_channels, kernel_size=1) + self.conv1 = nn.Sequential( + nn.InstanceNorm2d(channels, eps=1e-3), + nn.BatchNorm2d(channels, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(channels, out_channels, kernel_size=1), # b*c*n*1 + trans(1, 2)) + + # Spatial Correlation Layer + self.conv2 = nn.Sequential( + nn.BatchNorm2d(points, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(points, points, kernel_size=1) + ) + self.conv3 = nn.Sequential( + trans(1, 2), + nn.InstanceNorm2d(out_channels, eps=1e-3), + nn.BatchNorm2d(out_channels, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(out_channels, out_channels, kernel_size=1) + ) + + def forward(self, x): + out = self.conv1(x) + out = out + self.conv2(out) + out = self.conv3(out) + if self.shot_cut: + out = out + self.shot_cut(x) + else: + out = out + x + return out + + +class diff_pool(nn.Module): + def __init__(self, in_channel, output_points): + nn.Module.__init__(self) + self.output_points = output_points + self.conv = nn.Sequential( + nn.InstanceNorm2d(in_channel, eps=1e-3), + nn.BatchNorm2d(in_channel, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(in_channel, output_points, kernel_size=1)) + + def forward(self, x): + embed = self.conv(x) # b*k*n*1 + S = torch.softmax(embed, dim=2).squeeze(3) + out = torch.matmul(x.squeeze(3), S.transpose(1, 2)).unsqueeze(3) + return out + + +class diff_unpool(nn.Module): + def __init__(self, in_channel, output_points): + nn.Module.__init__(self) + self.output_points = output_points + self.conv = nn.Sequential( + nn.InstanceNorm2d(in_channel, eps=1e-3), + nn.BatchNorm2d(in_channel, track_running_stats=BN_TRACK_STATS), + nn.ReLU(), + nn.Conv2d(in_channel, output_points, kernel_size=1)) + + def forward(self, x_up, x_down): + #x_up: b*c*n*1 + #x_down: b*c*k*1 + embed = self.conv(x_up) # b*k*n*1 + S = torch.softmax(embed, dim=1).squeeze(3) # b*k*n + out = torch.matmul(x_down.squeeze(3), S).unsqueeze(3) + return out + + +class OANBlock(nn.Module): + def __init__(self, net_channels, input_channel, depth, clusters, normalize_w): + nn.Module.__init__(self) + channels = net_channels + self.layer_num = depth + logging.info('OANET: channels:' + str(channels) + ', layer_num:' + str(self.layer_num)) + self.conv1 = nn.Conv2d(input_channel, channels, kernel_size=1) + + l2_nums = clusters + + self.l1_1 = [] + for _ in range(self.layer_num//2): + self.l1_1.append(PointCN(channels)) + + self.down1 = diff_pool(channels, l2_nums) + + self.l2 = [] + for _ in range(self.layer_num//2): + self.l2.append(OAFilter(channels, l2_nums)) + + self.up1 = diff_unpool(channels, l2_nums) + + self.l1_2 = [] + self.l1_2.append(PointCN(2*channels, channels)) + for _ in range(self.layer_num//2-1): + self.l1_2.append(PointCN(channels)) + + self.l1_1 = nn.Sequential(*self.l1_1) + self.l1_2 = nn.Sequential(*self.l1_2) + self.l2 = nn.Sequential(*self.l2) + + self.output = nn.Conv2d(channels, 1, kernel_size=1) + + def forward(self, data, xs): + #data: b*c*n*1 + x1_1 = self.conv1(data) + x1_1 = self.l1_1(x1_1) + x_down = self.down1(x1_1) + x2 = self.l2(x_down) + x_up = self.up1(x1_1, x2) + out = self.l1_2(torch.cat([x1_1, x_up], dim=1)) + + logits = torch.squeeze(torch.squeeze(self.output(out), 3), 1) + weights = torch.relu(torch.tanh(logits)) + + if torch.any(torch.sum(weights, dim=1) == 0.0): + weights = weights + 1/weights.shape[1] + + x1, x2 = xs[:, 0, :, :3], xs[:, 0, :, 3:] + + rotation_est, translation_est, residuals, gradient_not_valid = kabsch_transformation_estimation( + x1, x2, weights) + + return logits, weights, rotation_est, translation_est, residuals, out, gradient_not_valid + + +class OANet(nn.Module): + """ + OANet filtering class. Build an OAnet object that represent the extension of the filtering network proposed in + (https://arxiv.org/abs/1908.04964) to the problem of 3D correspondence filtering. + + The local context is aggregated using Context normalization and Order-Aware clustering blocks. + + Args: + cfg (dict): configuration parameter + + """ + def __init__(self, cfg): + nn.Module.__init__(self + ) + + self.iter_num = cfg['misc']['iter_num'] + depth_each_stage = cfg['misc']['net_depth']//(cfg['misc']['iter_num']+1) + self.side_channel = (cfg['data']['use_mutuals'] == 2) + + self.reg_init = OANBlock(cfg['misc']['net_channel'], 6 + self.side_channel, + depth_each_stage, cfg['misc']['clusters'], cfg['misc']['normalize_weights']) + + self.reg_iter = [OANBlock(cfg['misc']['net_channel'], 8 + self.side_channel, depth_each_stage, cfg['misc']['clusters'], cfg['misc']['normalize_weights']) + for _ in range(self.iter_num)] + + self.reg_iter = nn.Sequential(*self.reg_iter) + + self.device = torch.device('cuda' if (torch.cuda.is_available() and cfg['misc']['use_gpu']) else 'cpu') + + + def forward(self, data): + """ + For each of the putative correspondences infers a weight [0,1] denoting if the correspondence is an inlier (1) + or an outlier (0). Based on the weighted Kabsch algorithm it additionally estimates the pairwise rotation matrix + and translation parameters. + + Args: + data (dict): dictionariy of torch tensors representing the input data + + Returns: + output (duct): dictionary of output data + + """ + + assert data['xs'].dim() == 4 and data['xs'].shape[1] == 1 + #data: b*1*n*c + input_data = data['xs'].transpose(1, 3).to(self.device) + + res_logits, res_scores, res_rot_est, res_trans_est = [], [], [], [] + + # First pass through the network + logits, scores, rot_est, trans_est, residuals, latent_features, gradient_not_valid = self.reg_init( + input_data, data['xs'].to(self.device)) + + res_logits.append(logits), res_scores.append(scores), res_rot_est.append(rot_est), res_trans_est.append(trans_est) + + # If iterative approach then append residuals and scores and perform additional passes + for i in range(self.iter_num): + logits, scores, rot_est, trans_est, residuals, latent_features, temp_gradient_not_valid = self.reg_iter[i]( + torch.cat([input_data, residuals.detach().unsqueeze(1).unsqueeze(3), + scores.unsqueeze(1).unsqueeze(3)], dim=1), data['xs'].to(self.device)) + + gradient_not_valid = (temp_gradient_not_valid or gradient_not_valid) + + res_logits.append(logits), res_scores.append( + scores), res_rot_est.append(rot_est), res_trans_est.append(trans_est) + + + # Construct the output + output = {} + output['logits'] = res_logits + output['scores'] = res_scores + output['rot_est'] = res_rot_est + output['trans_est'] = res_trans_est + output['latent features'] = latent_features + output['gradient_flag'] = gradient_not_valid + + return output diff --git a/lib/layers.py b/lib/layers.py new file mode 100644 index 0000000..c22dd62 --- /dev/null +++ b/lib/layers.py @@ -0,0 +1,202 @@ +import torch +import torch.nn.functional as F +import numpy as np +import time +from sklearn.neighbors import NearestNeighbors +from lib.utils import extract_mutuals, pairwise_distance, knn_point +#from Pointnet2_PyTorch.pointnet2_ops_lib.pointnet2_ops import pointnet2_utils + + +class Soft_NN(torch.nn.Module): + """ Nearest neighbor class. Constructs either a stochastic (differentiable) or hard nearest neighbors layer. + + Args: + corr_type (string): type of the NN search + st (bool): if straight through gradient propagation should be used (biased) (https://arxiv.org/abs/1308.3432) + inv_temp (float): initial value for the inverse temperature used in softmax and gumbel_softmax + + """ + + def __init__(self, corr_type='soft', st=True, inv_temp=10): + super().__init__() + + assert corr_type in ['soft', 'hard', 'soft_gumbel'], 'Wrong correspondence type selected. Must be one of [soft, soft_gumbel, hard]' + + if corr_type == 'hard': + print('Gradients cannot be backpropagated to the feature descriptor because hard NN search is selected.') + + self.temp_inv = torch.nn.Parameter(torch.tensor([inv_temp], requires_grad=True, dtype=torch.float)) + + self.corr_type = corr_type + self.st = st + + + + def forward(self, x_f, y_f, y_c): + """ Computes the correspondences in the feature space based on the selected parameters. + + Args: + x_f (torch.tensor): infered features of points x [b,n,c] + y_f (torch.tensor): infered features of points y [b,m,c] + y_c (torch.tensor): coordinates of point y [b,m,3] + + Returns: + x_corr (torch.tensor): coordinates of the feature based correspondences of points x [b,n,3] + + """ + + dist = pairwise_distance(x_f,y_f) + #dist_min = torch.min(dist, dim=2,keepdim=True).values + #dist = dist - dist_min + + if self.corr_type == 'soft': + + y_soft = torch.softmax(-dist*self.temp_inv, dim=2) + + if self.st: + # Straight through. + index = y_soft.max(dim=2, keepdim=True)[1] + y_hard = torch.zeros_like(y_soft).scatter_(dim=2, index=index, value=1.0) + ret = y_hard - y_soft.detach() + y_soft + + else: + ret = y_soft + + elif self.corr_type == 'soft_gumbel': + + if self.st: + # Straight through. + ret = F.gumbel_softmax(-dist, tau=1.0/self.temp_inv, hard=True) + else: + ret = F.gumbel_softmax(-dist, tau=1.0/self.temp_inv, hard=False) + + else: + index = dist.min(dim=2, keepdim=True)[1] + ret = torch.zeros_like(dist).scatter_(dim=2, index=index, value=1.0) + + + # Compute corresponding coordinates + x_corr = torch.matmul(ret, y_c) + + return x_corr + +class Sampler(torch.nn.Module): + """ Sampler class. Constructs a layer used to sample the points either based on their metric distance (FPS) or by randomly selecting them. + + Args: + samp_type (string): type of the sampling to be used + st (bool): if straight through gradient propagation should be used (biased) (https://arxiv.org/abs/1308.3432) + inv_temp (float): initial value for the inverse temperature used in softmax and gumbel_softmax + + """ + def __init__(self, samp_type='fps', targeted_num_points=2000): + super().__init__() + assert samp_type in ['fps', 'rand'], 'Wrong sampling type selected. Must be one of [fps, rand]' + + + self.samp_type = samp_type + self.targeted_num_points = targeted_num_points + + + def forward(self, input_C, input_F, pts_list): + """ Samples the predifined points from the input point cloud and the corresponding feature descriptors. + + Args: + input_C (torch.tensor): coordinates of the points [~b*n,3] + input_F (torch.tensor): infered features [~b*n,c] + pts_list (list): list with the number of points of each point cloud in the batch + + Returns: + sampled_C (torch tensor): coordinates of the sampled points [b,m,3] + sampled_F (torch tensor): features of the sampled points [b,m,c] + + """ + + # Sample the data + idx_temp = [] + sampled_F = [] + sampled_C = [] + + # Final number of points to be sampled is the min of the desired number of points and smallest number of point in the batch + num_points = min(self.targeted_num_points, min(pts_list)) + + for i in range(len(pts_list)): + + pcd_range = np.arange(sum(pts_list[:i]), sum(pts_list[:(i + 1)]), 1) + + if self.samp_type == 'fps': + temp_pcd = torch.index_select(input_C, dim=0, index=torch.from_numpy(pcd_range).to(input_C).long()) + + # Perform farthest point sampling on the current point cloud + idxs = pointnet2_utils.furthest_point_sample(temp_pcd, num_points) + + # Move the indeces to the start of this point cloud + idxs += pcd_range[0] + + elif self.samp_type == 'rand': + # Randomly select the indices to keep + idxs = torch.from_numpy(np.random.choice(pcd_range,num_points, replace=False)).to(input_C) + + sampled_F.append(torch.index_select(input_F, dim=0, index=idxs.long())) + sampled_C.append(torch.index_select(input_C, dim=0, index=idxs.long())) + + return torch.stack(sampled_C, dim=0), torch.stack(sampled_F, dim=0) + + + + +if __name__ == "__main__": + + test = torch.rand((3,10,10)) + test_1 = torch.rand((3,10,10)) + test_2 = torch.rand((3,10,3)) + + soft_nn_1 = Soft_NN(corr_type='soft') + soft_nn_2 = Soft_NN(corr_type='soft_gumbel') + soft_nn_3 = Soft_NN(corr_type='hard') + + # Iterrative + neigh = NearestNeighbors() + ret_iter = [] + array_input = test_1[0,:,:] + for i in range(test.shape[0]): + neigh.fit(test_1[i,:,:].cpu().numpy()) + idx = neigh.kneighbors(test[i,:,:].cpu().numpy(), n_neighbors=1, return_distance=False) + + ret_iter.append(test_2[i,idx.reshape(-1,),:]) + + ret_iter = torch.stack(ret_iter) + ret_1 = soft_nn_1(test,test_1,test_2) + ret_2 = soft_nn_2(test,test_1,test_2) + ret_3 = soft_nn_3(test,test_1,test_2) + + diff = ret_1 - ret_2 + diff_2 = ret_2 - ret_3 + diff_3 = ret_1 - ret_3 + diff_4 = ret_1 - ret_iter + + + + + # Test the mutuals + pc_1 = torch.rand((5,2000,3)).cuda() + pc_2 = torch.rand((5,2000,3)).cuda() + pc_1_soft_c = torch.rand((5,2000,3)).cuda() + pc_2_soft_c = torch.rand((5,2000,3)).cuda() + + test_mutuals = extract_mutuals(pc_1, pc_2, pc_1_soft_c, pc_2_soft_c) + + + # Test the sampler + test_C = torch.rand(3000,3).float() + test_F = torch.rand(3000,32).float() + + pts_list = [300,700,1000,400,600] + + # Test random sampling + sampler = Sampler(targeted_num_points=100,samp_type='rand') + sampled_C, sampled_F = sampler(test_C,test_F,pts_list) + + # Test fps + sampler_fps = Sampler(targeted_num_points=100, samp_type='fps') + diff --git a/lib/logger.py b/lib/logger.py new file mode 100644 index 0000000..515d452 --- /dev/null +++ b/lib/logger.py @@ -0,0 +1,81 @@ +import os +import sys +import numpy as np +import logging +from datetime import datetime +import coloredlogs +import git +import subprocess + + +_logger = logging.getLogger() + + +def print_info(cfg, log_dir=None): + """ Logs source code configuration + + Code adapted from RPMNet repository: https://github.com/yewzijian/RPMNet/ + """ + _logger.info('Command: {}'.format(' '.join(sys.argv))) + + # Print commit ID + try: + repo = git.Repo(search_parent_directories=True) + git_sha = repo.head.object.hexsha + git_date = datetime.fromtimestamp(repo.head.object.committed_date).strftime('%Y-%m-%d') + git_message = repo.head.object.message + _logger.info('Source is from Commit {} ({}): {}'.format(git_sha[:8], git_date, git_message.strip())) + + # Also create diff file in the log directory + if log_dir is not None: + with open(os.path.join(log_dir, 'compareHead.diff'), 'w') as fid: + subprocess.run(['git', 'diff'], stdout=fid) + + except git.exc.InvalidGitRepositoryError: + pass + + # Arguments + arg_str = [] + + for k_id, k_val in cfg.items(): + for key in k_val: + arg_str.append("{}_{}: {}".format(k_id, key, k_val[key])) + + arg_str = ', '.join(arg_str) + _logger.info('Arguments: {}'.format(arg_str)) + + +def prepare_logger(cfg, log_path = None): + """Creates logging directory, and installs colorlogs + Args: + cfg (dict): config parmaters + log_path (str): Logging path (optional). This serves to overwrite the settings in cfg + + Returns: + logger (logging.Logger): logger instance + log_path (str): Logging directory + + Code borrowed from RPMNet repository: https://github.com/yewzijian/RPMNet/ + """ + + logdir = cfg['misc']['log_dir'] + + if log_path is None: + datetime_str = datetime.now().strftime('%y%m%d_%H%M%S') + log_path = os.path.join(logdir, cfg['method']['descriptor_module'] if cfg['method']['descriptor_module'] else 'No_Desc' + '_' + + cfg['method']['filter_module'] if cfg['method']['filter_module'] else 'No_Filter', datetime_str) + + os.makedirs(log_path, exist_ok=True) + + logger = logging.getLogger() + coloredlogs.install(level='INFO', logger=logger) + file_handler = logging.FileHandler('{}/log.txt'.format(log_path)) + log_formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(name)s - %(message)s') + file_handler.setFormatter(log_formatter) + logger.addHandler(file_handler) + print_info(cfg, log_path) + logger.info('Output and logs will be saved to {}'.format(log_path)) + + return logger, log_path + + diff --git a/lib/loss.py b/lib/loss.py new file mode 100644 index 0000000..425e0f4 --- /dev/null +++ b/lib/loss.py @@ -0,0 +1,330 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import numpy as np +import math +from sklearn.metrics import precision_recall_fscore_support +from lib.utils import rotation_error, transformation_residuals + +def _hash(arr, M): + if isinstance(arr, np.ndarray): + N, D = arr.shape + else: + N, D = len(arr[0]), len(arr) + + hash_vec = np.zeros(N, dtype=np.int64) + for d in range(D): + if isinstance(arr, np.ndarray): + hash_vec += arr[:, d] * M**d + else: + hash_vec += arr[d] * M**d + + return hash_vec + + + +class DescriptorLoss(): + """ + Descriptor loss class. Creates a DescriptorLoss object that is used to train the FCGF feature descriptor. The loss is defined the same as in + the original FCGF paper. + + Args: + cfg (dict): configuration parameters + + """ + def __init__(self, cfg): + self.w_desc_loss = cfg['loss']['loss_desc'] + + # For FCGF loss we keep the parameters the same as in the original paper + self.pos_thresh = 1.4 + self.neg_thresh = 0.1 + self.batch_size = cfg['train']['batch_size'] + self.num_pos_per_batch = 1024 + self.num_hn_samples_per_batch = 256 + + def contrastive_hardest_negative_loss(self, + F0, + F1, + positive_pairs, + num_pos=5192, + num_hn_samples=2048, + pos_thresh=None, + neg_thresh=None): + """ + Computes the harderst contrastive loss as defined in the Fully Convolutional Geometric Features (Choy et al. ICCV 2019) paper + + https://node1.chrischoy.org/data/publications/fcgf/fcgf.pdf. + + Args: + F0 (torch tensor) + F1 (torch tensor) + positive_pairs (torch tensor): indices of positive pairs + num_pos (int): maximum number of positive pairs to be used + num_hn_samples (int): Number of harderst negative samples to be used + pos_thresh (): margain for positive pairs + neg_thresh (): margain for negative pairs + Returns: + pos_loss (torch tensor): loss based on the positive examples + neg_loss (torch tensor): loss based on the negative examples + """ + + N0, N1 = len(F0), len(F1) + N_pos_pairs = len(positive_pairs) + hash_seed = max(N0, N1) + sel0 = np.random.choice(N0, min(N0, num_hn_samples), replace=False) + sel1 = np.random.choice(N1, min(N1, num_hn_samples), replace=False) + + if N_pos_pairs > num_pos: + pos_sel = np.random.choice(N_pos_pairs, num_pos, replace=False) + sample_pos_pairs = positive_pairs[pos_sel] + else: + sample_pos_pairs = positive_pairs + + # Find negatives for all F1[positive_pairs[:, 1]] + subF0, subF1 = F0[sel0], F1[sel1] + + pos_ind0 = sample_pos_pairs[:, 0].long() + pos_ind1 = sample_pos_pairs[:, 1].long() + posF0, posF1 = F0[pos_ind0], F1[pos_ind1] + + D01 = torch.sum((posF0.unsqueeze(1) - posF1.unsqueeze(0)).pow(2), 2) + D10 = torch.sum((posF1.unsqueeze(1) - posF0.unsqueeze(0)).pow(2), 2) + + D01min, D01ind = D01.min(1) + D10min, D10ind = D10.min(1) + + if not isinstance(positive_pairs, np.ndarray): + positive_pairs = np.array(positive_pairs, dtype=np.int64) + + pos_keys = _hash(positive_pairs, hash_seed) + + D01ind = sel1[D01ind.cpu().numpy()] + D10ind = sel0[D10ind.cpu().numpy()] + neg_keys0 = _hash([pos_ind0.numpy(), D01ind], hash_seed) + neg_keys1 = _hash([D10ind, pos_ind1.numpy()], hash_seed) + + mask0 = torch.from_numpy( + np.logical_not(np.isin(neg_keys0, pos_keys, assume_unique=False))) + mask1 = torch.from_numpy( + np.logical_not(np.isin(neg_keys1, pos_keys, assume_unique=False))) + pos_loss = F.relu((posF0 - posF1).pow(2).sum(1) - pos_thresh) + neg_loss0 = F.relu(neg_thresh - D01min[mask0]).pow(2) + neg_loss1 = F.relu(neg_thresh - D10min[mask1]).pow(2) + + return pos_loss.mean(), (neg_loss0.mean() + neg_loss1.mean()) / 2 + + + def evaluate(self, F0, F1, pos_pairs): + """ + Evaluates the hardest contrastive FCGF loss given current data + + Args: + F0 (torch tensor): features of the source points [~b*n,c] + F1 (torch tensor): features of the target points [~b*n,c] + pos_pairs (torch tensor): indices of the positive pairs + + Returns: + loss (torch tensor): mean value of the HC FCGF loss + + """ + pos_loss, neg_loss = self.contrastive_hardest_negative_loss(F0, F1, pos_pairs, + num_pos=self.num_pos_per_batch * + self.batch_size, + num_hn_samples=self.num_hn_samples_per_batch * + self.batch_size, + pos_thresh=self.pos_thresh, + neg_thresh=self.neg_thresh) + + loss = pos_loss + neg_loss + + return loss + + +class ClassificationLoss(): + """ + Classification loss class. Creates a ClassificationLoss object that is used to supervise the inlier/outlier classification of the putative correspondences. + + Args: + cfg (dict): configuration parameters + + """ + def __init__(self, cfg): + self.w_class = cfg['loss']['loss_class'] + self.w_class = cfg['loss']['loss_class'] + self.compute_stats = cfg['train']['compute_precision'] + self.device = torch.device('cuda' if (torch.cuda.is_available() and cfg['misc']['use_gpu']) else 'cpu') + + + def class_loss(self, predicted, target): + """ + Binary classification loss per putative correspondence. + + Args: + predicted (torch tensor): predicted weight per correspondence [b,n,1] + target (torch tensor): ground truth label per correspondence (0 - outlier, 1 - inlier) [b,n,1] + + Return: + class_loss (torch tensor): binary cross entropy loss [b] + """ + + loss = nn.BCELoss(reduction='none') # Binary Cross Entropy loss, expects that the input was passed through the sigmoid + sigmoid = nn.Sigmoid() + + predicted_labels = sigmoid(predicted).flatten().to(self.device) + + class_loss = loss(predicted_labels, target.flatten()).reshape(predicted.shape[0],-1) + + # Computing weights for compensating the class imbalance + + is_pos = (target.squeeze(-1) < 0.5).type(target.type()) + is_neg = (target.squeeze(-1) > 0.5).type(target.type()) + + num_pos = torch.relu(torch.sum(is_pos, dim=1) - 1.0) + 1.0 + num_neg = torch.relu(torch.sum(is_neg, dim=1) - 1.0) + 1.0 + class_loss_p = torch.sum(class_loss * is_pos, dim=1) + class_loss_n = torch.sum(class_loss * is_neg, dim=1) + class_loss = class_loss_p * 0.5 / num_pos + class_loss_n * 0.5 / num_neg + + return class_loss + + def evaluate(self, predicted, target, scores=None): + """ + Evaluates the binary cross entropy classification loss + + Args: + predicted (torch tensor): predicted logits per correspondence [b,n] + target (torch tensor): ground truth label per correspondence (0 - outlier, 1 - inlier) [b,n,1] + scores (torch tensor): predicted score (weight) per correspondence (0 - outlier, 1 - inlier) [b,n] + + Return: + loss (torch tensor): mean binary cross entropy loss + precision (numpy array): Mean classification precision (inliers) + recall (numpy array): Mean classification recall (inliers) + """ + predicted = predicted.to(self.device) + target = target.to(self.device) + + class_loss = self.class_loss(predicted, target) + + loss = torch.tensor([0.]).to(self.device) + + if self.w_class > 0: + loss += torch.mean(self.w_class * class_loss) + + + if self.compute_stats: + assert scores != None, "If precision and recall should be computed, scores cannot be None!" + + y_predicted = scores.detach().cpu().numpy().reshape(-1) + y_gt = target.detach().cpu().numpy().reshape(-1) + + precision, recall, f_measure, _ = precision_recall_fscore_support(y_gt, y_predicted.round(), average='binary') + + return loss, precision, recall + + else: + return loss, None, None + + +class TransformationLoss(): + """ + Transformation loss class. Creates a TransformationLoss object that is used to supervise the rotation and translation estimation part of the network. + + Args: + cfg (dict): configuration parameters + + """ + + def __init__(self, cfg): + self.trans_loss_type = cfg['loss']['trans_loss_type'] + self.trans_loss_iter = cfg['loss']['trans_loss_iter'] + self.w_trans = cfg['loss']['loss_trans'] + self.device = torch.device('cuda' if (torch.cuda.is_available() and cfg['misc']['use_gpu']) else 'cpu') + self.trans_loss_margin = cfg['misc']['trans_loss_margin'] + self.inlier_threshold = cfg['loss']['inlier_threshold'] + + def trans_loss(self, x_in, rot_est, trans_est, gt_rot_mat, gt_t_vec): + """ + Loss function on the transformation parameter. Based on the selected type of the loss computes either: + 0 - Vector distance between the point reconstructed using the EST transformation paramaters and the putative correspondence + 1 - Frobenius norm on the rotation matrix and L2 norm on the translation vector + 2 - L2 distance between the points reconstructed using the estimated and GT transformation paramaters + 3 - L1 distance between the points reconstructed using the estimated and GT transformation paramaters + + Args: + x_in (torch tensor): coordinates of the input point [b,1,n,6] + rot_est (torch tensor): currently estimated rotation matrices [b,3,3] + trans_est (torch tensor): currently estimated translation vectors [b,3,1] + gt_rot_mat (torch tensor): ground truth rotation matrices [b,3,3] + gt_t_vec (torch tensor): ground truth translation vectors [b,3,1] + + Return: + r_loss (torch tensor): transformation loss if type 0 or 2 else Frobenius norm of the rotation matrices [b,1] + t_loss (torch tensor): 0 if type 0, 2 or 3 else L2 norm of the translation vectors [b,1] + """ + if self.trans_loss_type == 0: + + x2_reconstruct = torch.matmul(rot_est, x_in[:, 0, :, 0:3].transpose(1, 2)) + trans_est + r_loss = torch.mean(torch.mean(torch.norm(x2_reconstruct.transpose(1,2) - x_in[:, :, :, 3:6], dim=(1)), dim=1)) + t_loss = torch.zeros_like(r_loss) + + elif self.trans_loss_type == 1: + r_loss = torch.norm(gt_rot_mat - rot_est, dim=(1, 2)) + t_loss = torch.norm(trans_est - gt_t_vec,dim=1) # Torch norm already does sqrt (p=1 for no sqrt) + + elif self.trans_loss_type == 2: + x2_reconstruct_estimated = torch.matmul(rot_est, x_in[:, 0, :, 0:3].transpose(1, 2)) + trans_est + x2_reconstruct_gt = torch.matmul(gt_rot_mat, x_in[:, 0, :, 0:3].transpose(1, 2)) + gt_t_vec + + r_loss = torch.mean(torch.norm(x2_reconstruct_estimated - x2_reconstruct_gt, dim=1), dim=1) + t_loss = torch.zeros_like(r_loss) + + elif self.trans_loss_type == 3: + x2_reconstruct_estimated = torch.matmul(rot_est, x_in[:, 0, :, 0:3].transpose(1, 2)) + trans_est + x2_reconstruct_gt = torch.matmul(gt_rot_mat, x_in[:, 0, :, 0:3].transpose(1, 2)) + gt_t_vec + + r_loss = torch.mean(torch.sum(torch.abs(x2_reconstruct_estimated - x2_reconstruct_gt), dim=1), dim=1) + t_loss = torch.zeros_like(r_loss) + + return r_loss, t_loss + + def evaluate(self, global_step, data, rot_est, trans_est): + """ + Evaluates the pairwise loss function based on the current values + + Args: + global_step (int): current training iteration (used for controling which parts of the loss are used in the current iter) [1] + data (dict): input data of the current batch + rot_est (torch tensor): rotation matrices estimated based on the current scores [b,3,3] + trans_est (torch tensor): translation vectors estimated based on the current scores [b,3,1] + + Return: + loss (torch tensor): mean transformation loss of the current iteration over the batch + loss_raw (torch tensor): mean transformation loss of the current iteration (return value for tenbsorboard before the trans loss is plugged in ) + """ + + # Extract the current data + x_in, gt_R, gt_t = data['xs'].to(self.device), data['R'].to(self.device), data['t'].to(self.device) + gt_inlier_ratio = data['inlier_ratio'].to(self.device) + + # Compute the transformation loss + r_loss, t_loss = self.trans_loss(x_in, rot_est, trans_est, gt_R, gt_t) + + # Extract indices of pairs with a minimum inlier ratio (do not propagate Transformation loss if point clouds do not overlap) + idx_inlier_ratio = gt_inlier_ratio > self.inlier_threshold + inlier_ratio_mask = torch.zeros_like(r_loss) + inlier_ratio_mask[idx_inlier_ratio] = 1 + + loss_raw = torch.tensor([0.]).to(self.device) + + + if self.w_trans > 0: + r_loss *= inlier_ratio_mask + t_loss *= inlier_ratio_mask + + loss_raw += torch.mean(torch.min(self.w_trans * (r_loss + t_loss), self.trans_loss_margin * torch.ones_like(t_loss))) + + # Check global_step and add essential loss + loss = loss_raw if global_step >= self.trans_loss_iter else torch.tensor([0.]).to(self.device) + + return loss, loss_raw \ No newline at end of file diff --git a/lib/pairwise/__init__.py b/lib/pairwise/__init__.py new file mode 100644 index 0000000..a113d05 --- /dev/null +++ b/lib/pairwise/__init__.py @@ -0,0 +1,141 @@ +import torch +import torch.nn as nn +import MinkowskiEngine as ME +from lib.layers import Soft_NN, Sampler +from lib.utils import extract_overlaping_pairs, extract_mutuals, construct_filtering_input_data +from lib.pairwise import ( + config, training +) + +__all__ = [ + config, training +] + + +class PairwiseReg(nn.Module): + """ + Pairwise registration class. + + It cobmines a feature descriptor with a filtering network and differentiable Kabsch algorithm to estimate + the transformation parameters of two point clouds. + + Args: + descriptor_module (nn.Module): feature descriptor network + filtering_module (nn.Module): filtering (outlier detection) network + corr_type (string): type of the correspondences to be used (hard, soft, Gumble-Softmax) + device (device): torch device + mutuals_flag (bool): if mutual nearest neighbors should be used + + Returns: + + + """ + + def __init__(self, descriptor_module, + filtering_module, device, samp_type='fps', + corr_type = 'soft', mutuals_flag=False, + connectivity_info=None, tgt_num_points=2000, + straight_through_gradient=True): + super().__init__() + + self.device = device + self.samp_type = samp_type + self.corr_type = corr_type + + self.mutuals_flag = mutuals_flag + + + self.connectivity_info = connectivity_info + + self.descriptor_module = descriptor_module + + # If the descriptor module is not specified, precomputed descriptor data should be used + if self.descriptor_module: + self.sampler = Sampler(samp_type=self.samp_type, targeted_num_points=tgt_num_points) + self.feature_matching = Soft_NN(corr_type=self.corr_type, st=straight_through_gradient) + self.precomputed_desc = False + else: + self.precomputed_desc = True + + self.filtering_module = filtering_module + + def forward(self, data): + + filtering_input, f_0, f_1 = self.compute_descriptors(input_dict=data) + + registration_outputs = self.filter_correspondences(filtering_input) + + return filtering_input, f_0, f_1, registration_outputs + + + + + def compute_descriptors(self, input_dict): + ''' + If not precomputed it infers the feature descriptors and returns the established correspondences + together with the ground truth transformation parameters and inlier labels. + + Args: + input_dict (dict): input data + + ''' + + if not self.precomputed_desc: + + xyz_down = input_dict['sinput0_C'] + + sinput0 = ME.SparseTensor( + input_dict['sinput0_F'], coords=input_dict['sinput0_C']).to(self.device) + + F0 = self.descriptor_module(sinput0).F + + # If the FCGF descriptor should be trained with the FCGF loss (need also corresponding desc.) + if self.train_descriptor: + sinput1 = ME.SparseTensor( + input_dict['sinput1_F'], coords=input_dict['sinput1_C']).to(self.device) + + F1 = self.descriptor_module(sinput1).F + else: + F1 = torch.empty(F0.shape[0], 0).to(self.device) + + + # Sample the points + xyz_batch, f_batch = self.sampler(xyz_down, F0, input_dict['pts_list']) + + # Build point cloud pairs for the inference + xyz_s, xyz_t, f_s, f_t = extract_overlaping_pairs(xyz_batch, f_batch, self.connectivity_info) + + # Compute nearest neighbors in feature space + nn_C_s_t = self.feature_matching(f_s, f_t, xyz_t) # NNs of the source points in the target point cloud + nn_C_t_s = self.feature_matching(f_t, f_s, xyz_s) # NNs of the target points in the source point cloud + + + if self.mutuals_flag: + mutuals = extract_mutuals(xyz_s, xyz_t, nn_C_s_t, nn_C_t_s) + else: + mutuals = None + + # Prepare the input for the filtering block + filtering_input = construct_filtering_input_data(xyz_s, xyz_t, input_dict, self.mutuals) + + else: + filtering_input = input_dict + F0 = None + F1 = None + + return filtering_input, F0, F1 + + + + def filter_correspondences(self, input_dict): + ''' + Return the infered weights together with the pairwise rotation matrices nad translation vectors. + + Args: + input_dict (dict): input data + + ''' + + registration_outputs = self.filtering_module(input_dict) + + return registration_outputs \ No newline at end of file diff --git a/lib/pairwise/__pycache__/__init__.cpython-36.pyc b/lib/pairwise/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e682d2c3a8b9fd1b5ae6cfffe91dce87c6d3f0ed GIT binary patch literal 3455 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 UuD3~# 0: + indices = np.argpartition(weights.cpu().numpy(), -best_k, axis=1)[0,-best_k:,0] + weights = weights[:,indices,:] + x1 = x1[:,indices,:] + x2 = x2[:,indices,:] + + if w_threshold > 0: + weights[weights < w_threshold] = 0 + + + x1_mean = torch.matmul(weights.transpose(1,2), x1) / (torch.sum(weights, dim=1).unsqueeze(1) + eps) + x2_mean = torch.matmul(weights.transpose(1,2), x2) / (torch.sum(weights, dim=1).unsqueeze(1) + eps) + + x1_centered = x1 - x1_mean + x2_centered = x2 - x2_mean + + weight_matrix = torch.diag_embed(weights.squeeze(2)) + + cov_mat = torch.matmul(x1_centered.transpose(1, 2), + torch.matmul(weight_matrix, x2_centered)) + + try: + u, s, v = torch.svd(cov_mat) + except Exception as e: + r = torch.eye(3,device=x1.device) + r = r.repeat(x1_mean.shape[0],1,1) + t = torch.zeros((x1_mean.shape[0],3,1), device=x1.device) + + res = transformation_residuals(x1, x2, r, t) + + return r, t, res, True + + tm_determinant = torch.det(torch.matmul(v.transpose(1, 2), u.transpose(1, 2))) + + determinant_matrix = torch.diag_embed(torch.cat((torch.ones((tm_determinant.shape[0],2),device=x1.device), tm_determinant.unsqueeze(1)), 1)) + + rotation_matrix = torch.matmul(v,torch.matmul(determinant_matrix,u.transpose(1,2))) + + # translation vector + translation_matrix = x2_mean.transpose(1,2) - torch.matmul(rotation_matrix,x1_mean.transpose(1,2)) + + # Residuals + res = transformation_residuals(x1, x2, rotation_matrix, translation_matrix) + + return rotation_matrix, translation_matrix, res, False + + +def transformation_residuals(x1, x2, R, t): + """ + Computer the pointwise residuals based on the estimated transformation paramaters + + Args: + x1 (torch array): points of the first point cloud [b,n,3] + x2 (torch array): points of the second point cloud [b,n,3] + R (torch array): estimated rotation matrice [b,3,3] + t (torch array): estimated translation vectors [b,3,1] + Returns: + res (torch array): pointwise residuals (Eucledean distance) [b,n,1] + """ + x2_reconstruct = torch.matmul(R, x1.transpose(1, 2)) + t + + res = torch.norm(x2_reconstruct.transpose(1, 2) - x2, dim=2) + + return res + +def transform_point_cloud(x1, R, t): + """ + Transforms the point cloud using the giver transformation paramaters + + Args: + x1 (np array): points of the point cloud [b,n,3] + R (np array): estimated rotation matrice [b,3,3] + t (np array): estimated translation vectors [b,3,1] + Returns: + x1_t (np array): points of the transformed point clouds [b,n,3] + """ + x1_t = (torch.matmul(R, x1.transpose(0,2,1)) + t).transpose(0,2,1) + + return x1_t + + +def knn_point(k, pos1, pos2): + ''' + Performs the k nearest neighbors search with CUDA support + + Args: + k (int): number of k in k-nn search + pos1: (torch tensor) input points [b,n,c] + pos2: (torch tensor) float32 array, query points [b,m,c] + + Returns: + val: (torch tensor) squared L2 distances [b,m,k] + idx: (torch tensor) indices of the k nearest points [b,m,1] + + ''' + + B, N, C = pos1.shape + M = pos2.shape[1] + + pos1 = pos1.view(B,1,N,-1).repeat(1,M,1,1) + pos2 = pos2.view(B,M,1,-1).repeat(1,1,N,1) + + dist = torch.sum(-(pos1 - pos2)**2, -1) + + val, idx = dist.topk(k=k,dim = -1) + + return -val, idx + +def axis_angle_to_rot_mat(axes, thetas): + """ + Computer a rotation matrix from the axis-angle representation using the Rodrigues formula. + \mathbf{R} = \mathbf{I} + (sin(\theta)\mathbf{K} + (1 - cos(\theta)\mathbf{K}^2), where K = \mathbf{I} \cross \frac{\mathbf{K}}{||\mathbf{K}||} + + Args: + axes (numpy array): array of axes used to compute the rotation matrices [b,3] + thetas (numpy array): array of angles used to compute the rotation matrices [b,1] + + Returns: + rot_matrices (numpy array): array of the rotation matrices computed from the angle, axis representation [b,3,3] + + """ + + R = [] + for k in range(axes.shape[0]): + K = np.cross(np.eye(3), axes[k,:]/np.linalg.norm(axes[k,:])) + R.append( np.eye(3) + np.sin(thetas[k])*K + (1 - np.cos(thetas[k])) * np.matmul(K,K)) + + rot_matrices = np.stack(R) + return rot_matrices + + +def sample_random_trans(pcd, randg=None, rotation_range=360): + """ + Samples random transformation paramaters with the rotaitons limited to the rotation range + + Args: + pcd (numpy array): numpy array of coordinates for which the transformation paramaters are sampled [n,3] + randg (numpy random generator): numpy random generator + + Returns: + T (numpy array): sampled transformation paramaters [4,4] + + """ + if randg == None: + randg = np.random.default_rng(41) + + # Create 3D identity matrix + T = np.zeros((4,4)) + idx = np.arange(4) + T[idx,idx] = 1 + + axes = np.random.rand(1,3) - 0.5 + + angles = rotation_range * np.pi / 180.0 * (np.random.rand(1,1) - 0.5) + + R = axis_angle_to_rot_mat(axes, angles) + + T[:3, :3] = R + T[:3, 3] = np.matmul(R,-np.mean(pcd, axis=0)) + + return T + + +def augment_precomputed_data(x,R,t, max_angle=360.0): + """ + Function used for data augmention (random transformation) in the training process. It transforms the point from PC1 with a randomly sampled + transformation matrix and updates the ground truth rotation and translation, respectively. + + Args: + x (np.array): coordinates of the correspondences [n,6] + R (np.array): gt rotation matrix [3,3] + t (np.array): gt translation vector [3,1] + max_angle (float): maximum angle that should be used to sample the rotation matrix + + Returns: + t_data (numpy array): augmented coordinates of the correspondences [n, 6] + t_rs (numpy array): augmented rotation matrix [3,3] + t_ts (numpy array): augmented translation vector [3,1] + """ + + # Sample random transformation matrix for each example in the batch + T_rand = sample_random_trans(x[:, 0:3], np.random.RandomState(), max_angle) + + # Compute the updated ground truth transformation paramaters R_n = R_gt*R_s^-1, t_n = t_gt - R_gt*R_s^-1*t_s + rotation_matrix_inv = T_rand[:3,:3].transpose() + t_rs = np.matmul(R,rotation_matrix_inv) + t_ts = t - np.matmul(R, np.matmul(rotation_matrix_inv, T_rand[:3,2:3].reshape(-1,1))) + + # Transform the coordinates of the first point cloud with the sampled transformation parmaters + t_xs = (np.matmul(T_rand[:3,:3], x[:, 0:3].transpose()) + T_rand[:3,2:3].reshape(-1,1)).transpose() + + t_data = np.concatenate((t_xs,x[:, 3:6]),axis=-1) + + + return t_data, t_rs, t_ts + + +def add_jitter(x, R, t, std=0.01, clip=0.025): + """ + Function used to add jitter to the coordinates of the correspondences in the training process. + + Args: + x (np.array): coordinates of the correspondences [n,6] + R (np.array): gt rotation matrix [3,3] + t (np.array): gt translation vector [3,1] + std (float): standard deviation of the normal distribution used to sample the jitter + clip (float): cut-off value for the jitter + + Returns: + x (np.array): coordinates of the correspondences with added jitter [n,6] + y (np.array): gt residuals of the correspondences aftter jitter [n] + """ + + jitter = np.clip(np.random.normal(0.0, scale=std, size=(x.shape[0], x.shape[1])), + a_min=-clip, a_max=clip) + + x += jitter # Add noise to xyz + + # Compute new ys + temp_x = (np.matmul(R,x[:,0:3].transpose()) + t).transpose() + y = np.sqrt(np.sum((x[:,3:6]-temp_x)**2,1)) + + return x, y + + +class ClippedStepLR(optim.lr_scheduler._LRScheduler): + def __init__(self, optimizer, step_size, min_lr, gamma=0.1, last_epoch=-1): + self.step_size = step_size + self.min_lr = min_lr + self.gamma = gamma + super(ClippedStepLR, self).__init__(optimizer, last_epoch) + + def get_lr(self): + return [max(base_lr * self.gamma ** (self.last_epoch // self.step_size), self.min_lr) + for base_lr in self.base_lrs] + + + +def ensure_dir(path): + """ + Creates the directory specigied by the input if it does not yet exist. + """ + if not os.path.exists(path): + os.makedirs(path, mode=0o755) + +def read_trajectory(filename, dim=4): + """ + Function that reads a trajectory saved in the 3DMatch/Redwood format to a numpy array. + Format specification can be found at http://redwood-data.org/indoor/fileformat.html + + Args: + filename (str): path to the '.txt' file containing the trajectory data + dim (int): dimension of the transformation matrix (4x4 for 3D data) + + Returns: + final_keys (dict): indices of pairs with more than 30% overlap (only this ones are included in the gt file) + traj (numpy array): gt pairwise transformation matrices for n pairs[n,dim, dim] + """ + + with open(filename) as f: + lines = f.readlines() + + # Extract the point cloud pairs + keys = lines[0::(dim+1)] + temp_keys = [] + for i in range(len(keys)): + temp_keys.append(keys[i].split('\t')[0:3]) + + final_keys = [] + for i in range(len(temp_keys)): + final_keys.append([temp_keys[i][0].strip(), temp_keys[i][1].strip(), temp_keys[i][2].strip()]) + + + traj = [] + for i in range(len(lines)): + if i % 5 != 0: + curr_line = '\t'.join(lines[i].split()) + traj.append(curr_line.split('\t')[0:dim]) + + traj = np.asarray(traj, dtype=np.float).reshape(-1,dim,dim) + + final_keys = np.asarray(final_keys) + + return final_keys, traj + + + +def write_trajectory(traj,metadata, filename, dim=4): + """ + Writes the trajectory into a '.txt' file in 3DMatch/Redwood format. + Format specification can be found at http://redwood-data.org/indoor/fileformat.html + + Args: + traj (numpy array): trajectory for n pairs[n,dim, dim] + metadata (numpy array): file containing metadata about fragment numbers [n,3] + filename (str): path where to save the '.txt' file containing trajectory data + dim (int): dimension of the transformation matrix (4x4 for 3D data) + """ + + with open(filename, 'w') as f: + for idx in range(traj.shape[0]): + # Only save the transfromation parameters for which the overlap threshold was satisfied + if metadata[idx][2]: + p = traj[idx,:,:].tolist() + f.write('\t'.join(map(str, metadata[idx])) + '\n') + f.write('\n'.join('\t'.join(map('{0:.12f}'.format, p[i])) for i in range(dim))) + f.write('\n') + + +def read_trajectory_info(filename, dim=6): + """ + Function that reads the trajectory information saved in the 3DMatch/Redwood format to a numpy array. + Information file contains the variance-covariance matrix of the transformation paramaters. + Format specification can be found at http://redwood-data.org/indoor/fileformat.html + + Args: + filename (str): path to the '.txt' file containing the trajectory information data + dim (int): dimension of the transformation matrix (4x4 for 3D data) + + Returns: + n_frame (int): number of fragments in the scene + cov_matrix (numpy array): covariance matrix of the transformation matrices for n pairs[n,dim, dim] + """ + + with open(filename) as fid: + contents = fid.readlines() + n_pairs = len(contents) // 7 + assert (len(contents) == 7 * n_pairs) + info_list = [] + n_frame = 0 + + for i in range(n_pairs): + frame_idx0, frame_idx1, n_frame = [int(item) for item in contents[i * 7].strip().split()] + info_matrix = np.concatenate( + [np.fromstring(item, sep='\t').reshape(1, -1) for item in contents[i * 7 + 1:i * 7 + 7]], axis=0) + info_list.append(info_matrix) + + cov_matrix = np.asarray(info_list, dtype=np.float).reshape(-1,dim,dim) + + return n_frame, cov_matrix + +def extract_corresponding_trajectors(est_pairs,gt_pairs, est_traj, gt_traj): + """ + Extract only those transformation matrices from the estimated trajectory that are also in the GT trajectory. + + Args: + est_pairs (numpy array): indices of point cloud pairs with enough estimated overlap [m, 3] + gt_pairs (numpy array): indices of gt overlaping point cloud pairs [n,3] + est_traj (numpy array): 3d array of the estimated transformation parameters [m,4,4] + gt_traj (numpy array): 3d array of the gt transformation parameters [n,4,4] + + Returns: + ext_traj_est (numpy array): extracted est transformation parameters for the point cloud pairs from [k,4,4] + ext_traj_gt (numpy array): extracted gt transformation parameters for the point cloud pairs from est_pairs [k,4,4] + """ + ext_traj_est = [] + ext_traj_gt = [] + + est_pairs = est_pairs[:,0:2] + gt_pairs = gt_pairs[:,0:2] + + for gt_idx, pair in enumerate(gt_pairs): + est_idx = np.where((est_pairs == pair).all(axis=1))[0] + if est_idx.size: + ext_traj_gt.append(gt_traj[gt_idx,:,:]) + ext_traj_est.append(est_traj[est_idx[0],:,:]) + + return np.stack(ext_traj_est, axis=0), np.stack(ext_traj_gt, axis=0) + +def computeTransformationErr(trans, info): + """ + Computer the transformation error as an approximation of the RMSE of corresponding points. + More informaiton at http://redwood-data.org/indoor/registration.html + + Args: + trans (numpy array): transformation matrices [n,4,4] + info (numpy array): covariance matrices of the gt transformation paramaters [n,4,4] + + Returns: + p (float): transformation error + """ + + t = trans[:3, 3] + r = trans[:3, :3] + q = nq.mat2quat(r) + er = np.concatenate([t, q[1:]], axis=0) + p = er.reshape(1, 6) @ info @ er.reshape(6, 1) / info[0, 0] + + return p.item() + + +def evaluate_registration(num_fragment, result, result_pairs, gt_pairs, gt, gt_info, err2=0.2): + """ + Evaluates the performance of the registration algorithm according to the evaluation protocol defined + by the 3DMatch/Redwood datasets. The evaluation protocol can be found at http://redwood-data.org/indoor/registration.html + + Args: + num_fragment (int): path to the '.txt' file containing the trajectory information data + result (numpy array): estimated transformation matrices [n,4,4] + result_pairs (numpy array): indices of the point cloud for which the transformation matrix was estimated (m,3) + gt_pairs (numpy array): indices of the ground truth overlapping point cloud pairs (n,3) + gt (numpy array): ground truth transformation matrices [n,4,4] + gt_cov (numpy array): covariance matrix of the ground truth transfromation parameters [n,6,6] + err2 (float): threshold for the RMSE of the gt correspondences (default: 0.2m) + + Returns: + precision (float): mean registration precision over the scene (not so important because it can be increased see papers) + recall (float): mean registration recall over the scene (deciding parameter for the performance of the algorithm) + """ + + err2 = err2 ** 2 + gt_mask = np.zeros((num_fragment, num_fragment), dtype=np.int) + + + + for idx in range(gt_pairs.shape[0]): + i = int(gt_pairs[idx,0]) + j = int(gt_pairs[idx,1]) + + # Only non consecutive pairs are tested + if j - i > 1: + gt_mask[i, j] = idx + + n_gt = np.sum(gt_mask > 0) + + good = 0 + n_res = 0 + for idx in range(result_pairs.shape[0]): + i = int(result_pairs[idx,0]) + j = int(result_pairs[idx,1]) + pose = result[idx,:,:] + + if j - i > 1: + n_res += 1 + if gt_mask[i, j] > 0: + gt_idx = gt_mask[i, j] + p = computeTransformationErr(np.linalg.inv(gt[gt_idx,:,:]) @ pose, gt_info[gt_idx,:,:]) + if p <= err2: + good += 1 + if n_res == 0: + n_res += 1e6 + precision = good * 1.0 / n_res + recall = good * 1.0 / n_gt + + return precision, recall + + + + +def do_single_pair_RANSAC_reg(xyz_i, xyz_j, pc_i, pc_j, voxel_size=0.025,method='3DMatch'): + """ + Runs a RANSAC registration pipeline for a single pair of point clouds. + + Args: + xyz_i (numpy array): coordinates of the correspondences from the first point cloud [n,3] + xyz_j (numpy array): coordinates of the correspondences from the second point cloud [n,3] + pc_i (numpy array): coordinates of all the points from the first point cloud [N,3] + pc_j (numpy array): coordinates of all the points from the second point cloud [N,3] + method (str): name of the method used for the overlap computation [3DMatch, FCGF] + + Returns: + overlap_flag (bool): flag denoting if overlap of the point cloud after aplying the estimated trans paramaters if more than a threshold + trans (numpy array): transformation parameters that trnasform point of point cloud 2 to the coordinate system of point cloud 1 + """ + + + trans = run_ransac(xyz_j, xyz_i) + + + ratio = compute_overlap_ratio(pc_i, pc_j, trans, method, voxel_size) + + overlap_flag = True if ratio > 0.3 else False + + + return [overlap_flag, trans] + + + +def run_ransac(xyz_i, xyz_j): + """ + Ransac based estimation of the transformation paramaters of the congurency transformation. Estimates the + transformation parameters thtat map xyz0 to xyz1. Implementation is based on the open3d library + (http://www.open3d.org/docs/release/python_api/open3d.registration.registration_ransac_based_on_correspondence.html) + + Args: + xyz_i (numpy array): coordinates of the correspondences from the first point cloud [n,3] + xyz_j (numpy array): coordinates of the correspondences from the second point cloud [n,3] + + Returns: + trans_param (float): mean registration precision over the scene (not so important because it can be increased see papers) + recall (float): mean registration recall over the scene (deciding parameter for the performance of the algorithm) + """ + + # Distance threshold as specificed by 3DMatch dataset + distance_threshold = 0.05 + + # Convert the point to an open3d PointCloud object + xyz0 = o3d.geometry.PointCloud() + xyz1 = o3d.geometry.PointCloud() + + xyz0.points = o3d.utility.Vector3dVector(xyz_i) + xyz1.points = o3d.utility.Vector3dVector(xyz_j) + + # Correspondences are already sorted + corr_idx = np.tile(np.expand_dims(np.arange(len(xyz0.points)),1),(1,2)) + corrs = o3d.utility.Vector2iVector(corr_idx) + + result_ransac = o3d.registration.registration_ransac_based_on_correspondence( + source=xyz0, target=xyz1,corres=corrs, + max_correspondence_distance=distance_threshold, + estimation_method=o3d.registration.TransformationEstimationPointToPoint(False), + ransac_n=4, + criteria=o3d.registration.RANSACConvergenceCriteria(50000, 2500)) + + trans_param = result_ransac.transformation + + return trans_param + + + +def compute_overlap_ratio(pc_i, pc_j, trans, method = '3DMatch', voxel_size=0.025): + """ + Computes the overlap percentage of the two point clouds using the estimateted transformation paramaters and based on the selected method. + Available methods are 3DMatch/Redwood as defined in the oficial dataset and the faster FCGF method that first downsamples the point clouds. + Method 3DMatch slightly deviates from the original implementation such that we take the max of the overlaps to check if it is above the threshold + where as in the original implementation only the overlap relative to PC1 is used. + + Args: + pc_i (numpy array): coordinates of all the points from the first point cloud [N,3] + pc_j (numpy array): coordinates of all the points from the second point cloud [N,3] + trans (numpy array): estimated transformation paramaters [4,4] + method (str): name of the method for overlap computation to be used ['3DMatch', 'FCGF'] + voxel size (float): voxel size used to downsample the point clouds when 'FCGF' method is selected + + Returns: + overlap (float): max of the computed overlap ratios relative to the PC1 and PC2 + + """ + neigh = NearestNeighbors(n_neighbors=1,algorithm='kd_tree') + trans_inv = np.linalg.inv(trans) + + if method == '3DMatch': + pc_i_t = (np.matmul(trans_inv[0:3, 0:3], pc_i.transpose()) + trans_inv[0:3, 3].reshape(-1, 1)).transpose() + pc_j_t = (np.matmul(trans[0:3, 0:3], pc_j.transpose()) + trans[0:3, 3].reshape(-1, 1)).transpose() + + neigh.fit(pc_j_t) + dist01, _ = neigh.kneighbors(pc_i, return_distance=True) + matching01 = np.where(dist01 < 0.05)[0].shape[0] + + neigh.fit(pc_i_t) + dist10, _ = neigh.kneighbors(pc_j, return_distance=True) + matching10 = np.where(dist10 < 0.05)[0].shape[0] + + overlap0 = matching01 / pc_i.shape[0] + overlap1 = matching10 / pc_j.shape[0] + + elif method == 'FCGF': + # Convert the point to an open3d PointCloud object + pcd0 = o3d.geometry.PointCloud() + pcd1 = o3d.geometry.PointCloud() + pcd0.points = o3d.utility.Vector3dVector(pc_i) + pcd1.points = o3d.utility.Vector3dVector(pc_j) + + pcd0_down = pcd0.voxel_down_sample(voxel_size) + pcd1_down = pcd1.voxel_down_sample(voxel_size) + + pc_i = np.array(pcd0_down.points) + pc_j = np.array(pcd1_down.points) + + pc_i_t = (np.matmul(trans_inv[0:3, 0:3], pc_i.transpose()) + trans_inv[0:3, 3].reshape(-1, 1)).transpose() + pc_j_t = (np.matmul(trans[0:3, 0:3], pc_j.transpose()) + trans[0:3, 3].reshape(-1, 1)).transpose() + + neigh.fit(pc_j_t) + dist01, _ = neigh.kneighbors(pc_i, return_distance=True) + matching01 = np.where(dist01 < 3*voxel_size)[0].shape[0] + + neigh.fit(pc_i_t) + dist10, _ = neigh.kneighbors(pc_j, return_distance=True) + matching10 = np.where(dist10 < 3*voxel_size)[0].shape[0] + + overlap0 = matching01 / pc_i.shape[0] + overlap1 = matching10 / pc_j.shape[0] + + # matching01 = get_matching_indices(pcd0_down, pcd1_down, np.linalg.inv(trans), search_voxel_size = 3*voxel_size, K=1) + # matching10 = get_matching_indices(pcd1_down, pcd0_down, trans, + # search_voxel_size = 3*voxel_size, K=1) + # overlap0 = len(matching01) / len(pcd0_down.points) + # overlap1 = len(matching10) / len(pcd1_down.points) + + else: + logging.error("Wrong overlap computation method was selected.") + + + return max(overlap0, overlap1) + + +def get_matching_indices(pc_i, pc_j, trans, search_voxel_size=0.025, K=None, method = 'FCGF'): + """ + Helper function for the point cloud overlap computation. Based on the estimated transformation parameters transforms the point cloud + and searches for the neares neighbor in the other point cloud. + + Args: + pc_i (numpy array): coordinates of all the points from the first point cloud [N,3] + pc_j (numpy array): coordinates of all the points from the second point cloud [N,3] + trans (numpy array): estimated transformation paramaters [4,4] + search_voxel_size (float): threshold used to determine if a point has a correspondence given the estimated trans parameters + K (int): number of nearest neighbors to be returned + + Returns: + match_inds (list): indices of points that have a correspondence withing the search_voxel_size + + """ + + pc_i_copy = copy.deepcopy(pc_i) + pc_j_copy = copy.deepcopy(pc_j) + pc_i_copy.transform(trans) + pcd_tree = o3d.geometry.KDTreeFlann(pc_j_copy) + + match_inds = [] + for i, point in enumerate(pc_i_copy.points): + [_, idx, _] = pcd_tree.search_radius_vector_3d(point, search_voxel_size) + if K is not None: + idx = idx[:K] + + for j in idx: + match_inds.append((i, j)) + + return match_inds + +def extract_mutuals(x1, x2, x1_soft_matches, x2_soft_matches, threshold=0.05): + ''' + Returns a flag if the two point are mutual nearest neighbors in the feature space. + In a softNN formulation a distance threshold has to be used. + + Args: + x1 (torch tensor): source point cloud [b,n,3] + x2 (torch tensor): target point cloud [b,n,3] + x1_soft_matches (torch tensor): coordinates of the (soft) correspondences for points x1 in x2 [b,n,3] + x2_soft_matches (torch tensor): coordinates of the (soft) correspondences for points x2 in x1 [b,n,3] + + Returns: + mutuals (torch tensor): mutual nearest neighbors flag (1 if mutual NN otherwise 0) [b,n] + + ''' + + B, N, C = x1.shape + + _, idx = knn_point(k=1, pos1=x2, pos2=x1_soft_matches) + + delta = x1 - torch.gather(x2_soft_matches,index=idx.expand(-1,-1,C),dim=1) + dist = torch.pow(delta,2).sum(dim=2) + + mutuals = torch.zeros((B,N)) + mutuals[dist < threshold**2] = 1 + + return mutuals + +def extract_overlaping_pairs(xyz, feat, conectivity_info=None): + """ + Build the point cloud pairs based either on the provided conectivity information or sample + all n choose 2 posibilities + + Args: + xyz (torch tensor): coordinates of the sampled points [b,n,3] + feat (torch tensor): features of the sampled points [b,n,c] + conectivity_info (torch tensor): conectivity information (indices of overlapping pairs) [m,2] + + Returns: + xyz_s (torch tensor): coordinates of the points in the source point clouds [B, n, 3] (B != b) + xyz_t (torch tensor): coordinates of the points in the target point clouds [B, n, 3] (B != b) + f_s (torch tensor): features of the points in the source point clouds [B, n, 3] (B != b) + f_t (torch tensor): features of the points in the target point clouds [B, n, 3] (B != b) + + """ + + if not conectivity_info: + + pairs = [] + + # If no conectivity information is provided sample n choose 2 pairs + for comb in list(combinations(range(xyz.shape[0]), 2)): + pairs.append(torch.tensor([int(comb[0]), int(comb[1])])) + + conectivity_info = torch.stack(pairs, dim=0).to(xyz) + + # Build the point cloud pairs based on the conectivity information + xyz_s = torch.index_select(xyz, dim=0, index=conectivity_info[:, 0]) + xyz_t = torch.index_select(xyz, dim=0, index=conectivity_info[:, 1]) + + f_s = torch.index_select(feat, dim=0, index=conectivity_info[:, 0]) + f_t = torch.index_select(feat, dim=0, index=conectivity_info[:, 1]) + + return xyz_s, xyz_t, f_s, f_t + + +def construct_filtering_input_data(xyz_s, xyz_t, data, overlapped_pair_tensors, dist_th=0.05, mutuals_flag=None): + """ + Prepares the input dictionary for the filtering network + + Args: + xyz_s (torch tensor): coordinates of the sampled points in the source point cloud [b,n,3] + xyz_t (torch tensor): coordinates of the correspondences from the traget point cloud [b,n,3] + data (dict): input data from the data loader + dist_th (float): distance threshold to determine if the correspondence is an inlier or an outlier + mutuals (torch tensor): torch tensor of the mutually nearest neighbors (can be used as side information to the filtering network) + + Returns: + filtering_data (dict): input data for the filtering network + + """ + + filtering_data = {} + Rs, ts = extract_transformation_matrices(data['T_global_0'], overlapped_pair_tensors) + + + ys = transformation_residuals(xyz_s, xyz_t, Rs, ts) + + xs = torch.cat((xyz_s,xyz_t),dim=-1) # [b, n, 6] + + if mutuals_flag is not None: + xs = torch.cat((xs,mutuals_flag.reshape(-1,1)), dim=-1) # [b, n, 7] + + + # Threshold ys based on the distance threshol + ys_binary = (ys < dist_th).type(xs.type()) + + + # Construct the data dictionary + filtering_data['xs'] = xs + filtering_data['ys'] = ys + filtering_data['ts'] = ts + filtering_data['Rs'] = Rs + + + return filtering_data + + +def extract_transformation_matrices(T0, indices): + """ + Compute the relative transformation matrices for the overlaping pairs from their global transformation matrices + + Args: + T0 (torch tensor): global transformation matrices [4*b,4] + indices (torch tensor): indices of the overlaping point couds [B,2] + + Returns: + rots (torch tensor): pairwise rotation matrices [B,3,3] (B!=b) + trans (torch tensor): pairwise translation parameters [B,3,1] (B!=b) + + """ + + indices = indices.detach().cpu().numpy() + T0 = T0.detach().cpu().numpy() + + rot_matrices = [] + trans_vectors = [] + + for row in indices: + + temp_trans_matrix = T0[4*row[0]:4*(row[0]+1), :] @ np.linalg.inv(T0[4*row[1]:4*(row[1]+1), :]) + + rot_matrices.append(temp_trans_matrix[0:3,0:3]) + trans_vectors.append(temp_trans_matrix[0:3,3]) + + rots = torch.from_numpy(np.asarray(rot_matrices)).to(T0) + trans = torch.from_numpy(np.asarray(trans_vectors)).unsqueeze(-1).to(T0) + + return rots, trans + + +def pairwise_distance(src, dst, normalized_feature=True): + """Calculate Euclidean distance between each two points. + + Args: + src (torch tensor): source data, [b, n, c] + dst (torch tensor): target data, [b, m, c] + normalized_feature (bool): distance computation can be more efficient + + Returns: + dist (torch tensor): per-point square distance, [b, n, m] + """ + + B, N, _ = src.shape + _, M, _ = dst.shape + + dist = torch.matmul(src, dst.permute(0, 2, 1)) + + # If features are normalized the distance is related to inner product + if not normalized_feature: + dist = -2 * dists + dist += torch.sum(src ** 2, dim=-1)[:, :, None] + dist += torch.sum(dst ** 2, dim=-1)[:, None, :] + + return torch.sqrt(dist) + + + + +if __name__ == '__main__': + + # Weighted Kabsch algorithm example + + pc_1 = torch.rand(1,5000,3) + + T = sample_random_trans(pc_1) + + R = T[:,:3,:3] + t = T[:,3:4,3] + + pc_2_t = torch.matmul(R,pc_1.transpose(1,2)).transpose(1,2) + t + + rotation_matrix, translation_vector, res, _ = kabsch_transformation_estimation(pc_1, pc_2_t) + + print('Input rotation matrix: {}'.format(R)) + print('Estimated rotation matrix: {}'.format(rotation_matrix)) + + print('Input translation vector: {}'.format(t)) + print('Estimated translation vector: {}'.format(translation_vector)) + + +class Timer(object): + """A simple timer.""" + + def __init__(self): + self.total_time = 0. + self.calls = 0 + self.start_time = 0. + self.diff = 0. + self.avg = 0. + + def reset(self): + self.total_time = 0 + self.calls = 0 + self.start_time = 0 + self.diff = 0 + self.avg = 0 + + def tic(self): + self.start_time = time.time() + + def toc(self, average=True): + self.diff = time.time() - self.start_time + self.total_time += self.diff + self.calls += 1 + self.avg = self.total_time / self.calls + if average: + return self.avg + else: + return self.diff \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..52c7a4f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +coloredlogs +tqdm +nibabel +pyyaml +gitpython +tensorboardx +easydict +multiprocess diff --git a/scripts/benchmark_pairwise_registration.py b/scripts/benchmark_pairwise_registration.py new file mode 100644 index 0000000..fc106aa --- /dev/null +++ b/scripts/benchmark_pairwise_registration.py @@ -0,0 +1,430 @@ +""" +Script for benchmarking the pairwise registration algorithm on 3DMatch and Redwood datasets. +The script expects that the correspondences (any feature descriptor) are precomputed +and benchmarks the transformation estimation algorithms. Other datasets can easily be added +provided that they are expressed in the same data formats. + +NOTE: The results might deviate little from the official benchmarking code that is implemented +in matlab (https://github.com/andyzeng/3dmatch-toolbox). The reason being different RANSAC +implementation and overlap estimation (official one is also implemented here but is slower). + +Code is partially borrowed from the Chris Choy's FCGF repository (https://github.com/chrischoy/FCGF) + +Author: Zan Gojcic +""" + +import os +import glob +import sys +import numpy as np +import argparse +import logging +import open3d as o3d +from collections import defaultdict +import torch +import coloredlogs +from matplotlib import pyplot as plt +cwd = os.getcwd() +sys.path.append(cwd) + +from lib.utils import ensure_dir, read_trajectory, write_trajectory, read_trajectory_info, get_folder_list, \ + kabsch_transformation_estimation, Timer, run_ransac, rotation_error, load_config, \ + translation_error, evaluate_registration, compute_overlap_ratio, extract_corresponding_trajectors + +from scripts.utils import make_pairwise_eval_data_loader +from lib.checkpoints import CheckpointIO +import lib.config as config + +o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Error) + +SHORT_NAMES = {} +SHORT_NAMES['3d_match'] = {'kitchen':'Kitchen', + 'sun3d-home_at-home_at_scan1_2013_jan_1':'Home 1', + 'sun3d-home_md-home_md_scan9_2012_sep_30':'Home 2', + 'sun3d-hotel_uc-scan3':'Hotel 1', + 'sun3d-hotel_umd-maryland_hotel1':'Hotel 2', + 'sun3d-hotel_umd-maryland_hotel3':'Hotel 3', + 'sun3d-mit_76_studyroom-76-1studyroom2':'Study', + 'sun3d-mit_lab_hj-lab_hj_tea_nov_2_2012_scan1_erika':'MIT Lab'} + +SHORT_NAMES['redwood'] = {'iclnuim-livingroom1':'livingroom1', + 'iclnuim-livingroom2':'livingroom2', + 'iclnuim-office1':'office1', + 'iclnuim-office2':'office2'} + + +def estimate_trans_param_RANSAC(eval_data, source_path, dataset, scene_info, method, mutuals, save_data=False, overlap_method='FCGF'): + """ + Estimates the pairwise transformation parameters from the provided correspondences using RANSAC and + saves the results in the trajectory file that can be used to estimate the registration precision and recall. + + Args: + eval_data (torch dataloader): dataloader with the evaluation data + source_path (numpy array): coordinates of the correspondences from the second point cloud [n,3] + dataset (str): name of the dataset + scene_info (dict): metadata of the individual scenes from the dataset + method (str): method used for estimating the pairwise transformation paramaters + mutuals (bool): if True only mutually closest neighbors are used + save_data (bool): if True transformation parameters are saved in npz files + overlap_method (str): method for overlap computation [FCGF, 3DMatch] + + """ + + # Initialize the transformation matrix + num_pairs = scene_info['nr_examples'] + est_trans_param = np.tile(np.eye(4),reps=[num_pairs,1]) + + # Configure the base save path + save_path = os.path.join(source_path,'results', method) + save_path += '/mutuals/' if mutuals else '/all/' + ensure_dir(save_path) + + reg_metadata = [] + + logging.info('Starting RANSAC based registration estimation for {} pairs!'.format(num_pairs)) + avg_timer, full_timer, overlap_timer = Timer(), Timer(), Timer() + full_timer.tic() + + overlap_threshold = 0.3 if dataset =='3d_match' else 0.23 + + for batch in eval_data: + for idx in range(batch['xs'].shape[0]): + + data = batch['xs'][idx,0,:,:].numpy() + pc_1 = batch['xyz1'][idx][0] + pc_2 = batch['xyz2'][idx][0] + meta = batch['metadata'][idx] + pair_idx = int(batch['idx'][idx].numpy().item()) + + avg_timer.tic() + T_est = run_ransac(data[:,0:3], data[:,3:]) + avg_time = avg_timer.toc() + T_est = np.linalg.inv(T_est) + + overlap_timer.tic() + overlap_ratio = compute_overlap_ratio(pc_1, pc_2, T_est, method=overlap_method) + avg_time_overlap = overlap_timer.toc() + + overlap_flag = True if overlap_ratio >= overlap_threshold else False + est_trans_param[4*pair_idx: 4*pair_idx + 4, :] = T_est + + reg_metadata.append([str(int(meta[1])), str(int(meta[2])), overlap_flag]) + + if save_data: + np.savez_compressed( + os.path.join(save_path, meta[0], 'cloud_{}_{}.npz'.format(str(int(meta[1])), str(int(meta[2])))), + t_est=T_est[0:3,3], + R_est=T_est[0:3,0:3], + overlap=overlap_flag) + + + if len(eval_data) != 0: + logging.info('RANSAC based registration estimation is complete!') + logging.info('{} pairwise registration parameters estimated in {:.3f}s'.format(num_pairs,full_timer.toc(average=False))) + logging.info('Transformation estimation run time {:.4f}s per pair'.format(avg_time)) + logging.info('Overlap computation run time {:.4f}s per pair'.format(avg_time_overlap)) + + # Loop through the transformation matrix and save results to trajectory files + for key in scene_info: + if key != 'nr_examples': + scene_idx = scene_info[key] + ensure_dir(os.path.join(save_path, key)) + trans_par = est_trans_param[scene_idx[0]:scene_idx[1],:].reshape(-1,4,4) + write_trajectory(trans_par,reg_metadata[scene_idx[0]//4:scene_idx[1]//4], os.path.join(save_path, key, 'traj.txt')) + + + +def infer_transformation_parameters(eval_data, source_path, dataset, scene_info, method, model_path, mutuals, save_data=False, overlap_method='FCGF', refine=False): + """ + Estimates the pairwise transformation parameters from the provided correspondences using a deep learning model + and saves the results in the trajectory file that can be used to estimate the registration precision and recall. + + Args: + eval_data (torch dataloader): dataloader with the evaluation data + source_path (numpy array): coordinates of the correspondences from the second point cloud [n,3] + dataset (str): name of the dataset + scene_info (dict): metadata of the individual scenes from the dataset + method (str): method used for estimating the pairwise transformation paramaters + model_path (str): path to the model + mutuals (bool): if True only mutually closest neighbors are used + save_data (bool): if True transformation parameters are saved in npz files + overlap_method (str): method for overlap computation [FCGF, 3DMatch] + refine (bool): if the RANSAC should be applied after the network filtering on the inliers (similar to 2D filtering networks) + + """ + # Model initialization + logging.info("Using the method {}".format(method)) + + # Load config file + cfg = load_config(os.path.join('./configs/pairwise_registration/eval', method + '.yaml')) + model = config.get_model(cfg) + + # Load pre-trained model + model_name = model_path.split('/')[-1] + model_path = '/'.join(model_path.split('/')[0:-1]) + + kwargs = {'model': model} + + checkpoint_io = CheckpointIO(model_path, initialize_from=None, + initialization_file_name=None, **kwargs) + + load_dict = checkpoint_io.load(model_name) + + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + model.to(device) + + # Initialize the transformation matrix + num_pairs = scene_info['nr_examples'] + est_trans_param = np.tile(np.eye(4),reps=[num_pairs,1]) + + save_path = os.path.join(source_path,'results', method) + save_path += '/mutuals/' if args.mutuals else '/all/' + + ensure_dir(save_path) + reg_metadata = [] + + logging.info('Starting {} based registration estimation for {} pairs!'.format(method, num_pairs)) + avg_timer, full_timer = Timer(), Timer() + full_timer.tic() + T_est = np.eye(4) + + overlap_threshold = 0.3 if dataset =='3d_match' else 0.23 + logging.info('Using overlap threshold {} for the dataset {}.'.format(overlap_threshold, dataset)) + for batch in eval_data: + + # Filter the correspondences and estimate the pairwise transformation parameters + avg_timer.tic() + filtered_output = model.filter_correspondences(batch) + + + avg_time = avg_timer.toc() + + # We still have to loop through the batch for the overlap estimation (point cloud not the same size) + for idx in range(batch['xs'].shape[0]): + + pc_1 = batch['xyz1'][idx][0] + pc_2 = batch['xyz2'][idx][0] + meta = batch['metadata'][idx] + pair_idx = int(batch['idx'][idx].numpy().item()) + if refine: + data = batch['xs'][idx,0,:,:].numpy() + inliers = (filtered_output['scores'][-1][idx].cpu().numpy() > 0.5) + T_est = run_ransac(data[inliers,0:3], data[inliers,3:]) + + else: + T_est[0:3,0:3] = filtered_output['rot_est'][-1][idx].cpu().numpy() + T_est[0:3,3] = filtered_output['trans_est'][-1][idx].cpu().numpy().reshape(-1) + T_est = np.linalg.inv(T_est) + + overlap_ratio = compute_overlap_ratio(pc_1, pc_2, T_est, method=overlap_method) + overlap_flag = True if overlap_ratio >= overlap_threshold else False + + est_trans_param[4*pair_idx: 4*pair_idx + 4, :] = T_est + + reg_metadata.append([str(int(meta[1])), str(int(meta[2])), overlap_flag]) + + if save_data: + np.savez_compressed( + os.path.join(save_path, meta[0], 'cloud_{}_{}.npz'.format(str(int(meta[1])), str(int(meta[2])))), + t_est=T_est[0:3,3], + R_est=T_est[0:3,0:3], + overlap=overlap_flag) + + + if len(eval_data) != 0: + logging.info('RANSAC based registration estimation is complete!') + logging.info('{} pairwise registration parameters estimated in {:.3f}s'.format(num_pairs,full_timer.toc(average=False))) + logging.info('Pure run time {:.4f}s per pair'.format(avg_time/eval_data.batch_size)) + + # Loop through the transformation matrix and save results to trajectory files + for key in scene_info: + if key != 'nr_examples': + scene_idx = scene_info[key] + ensure_dir(os.path.join(save_path, key)) + trans_par = est_trans_param[scene_idx[0]:scene_idx[1],:].reshape(-1,4,4) + write_trajectory(trans_par,reg_metadata[scene_idx[0]//4:scene_idx[1]//4], os.path.join(save_path, key, 'traj.txt')) + + + + +def evaluate_registration_performance(eval_data, source_path,dataset, scene_info, method, model, mutuals=False, save_data = False, overlap_method='FCGF', refine=False): + """ + Evaluates the pairwise registration performance of the selected method on the selected dataset. + + Args: + eval_data (torch dataloader): dataloader with the evaluation data + source_path (numpy array): coordinates of the correspondences from the second point cloud [n,3] + dataset (str): name of the dataset + scene_info (dict): metadata of the individual scenes from the dataset + method (str): method used for estimating the pairwise transformation paramaters + model (str): path to the model + mutuals (bool): if True only mutually closest neighbors are used + save_data (bool): if True transformation parameters are saved in npz files + overlap_method (str): method for overlap computation [FCGF, 3DMatch] + refine (bool): if the RANSAC should be applied after the network filtering on the inliers (similar to 2D filtering networks) + + """ + # Prepare the variables + + re_per_scene = defaultdict(list) + te_per_scene = defaultdict(list) + re_all, te_all, precision, recall = [], [], [], [] + re_medians, te_medians = [], [] + + # Estimate the transformation parameters (if the trajectory files are note existing yet) + if method == 'RANSAC': + estimate_trans_param_RANSAC(eval_data, source_path, dataset, scene_info, method, mutuals, save_data, overlap_method) + else: + infer_transformation_parameters(eval_data, source_path, dataset, scene_info, method, model, mutuals, save_data, overlap_method, refine) + + logging.info("Results of {} on {} dataset!".format(method, dataset)) + logging.info("--------------------------------------------") + logging.info("{:<12} ¦ prec. ¦ rec. ¦ re ¦ te ¦".format('Scene')) + logging.info("--------------------------------------------") + scenes = get_folder_list(os.path.join(source_path,'correspondences')) + scenes = [scene.split('/')[-1] for scene in scenes] + + for idx, scene in enumerate(scenes): + # Extract the values from the gt trajectory and trajectory information files + gt_pairs, gt_traj = read_trajectory(os.path.join(source_path,'raw_data', scene, "gt.log")) + n_fragments, gt_traj_cov = read_trajectory_info(os.path.join(source_path,'raw_data', scene, "gt.info")) + assert gt_traj.shape[0] > 0, "Empty trajectory file" + + # Extract the estimated transformation matrices + if mutuals: + if method == 'RANSAC': + est_pairs, est_traj = read_trajectory(os.path.join(source_path, 'results', + method, 'mutuals', scene, "traj.txt")) + else: + est_pairs, est_traj = read_trajectory(os.path.join(source_path, 'results', + method, 'mutuals', scene, "traj.txt")) + else: + if method == 'RANSAC': + est_pairs, est_traj = read_trajectory(os.path.join(source_path, 'results', + method, 'all', scene, "traj.txt")) + else: + est_pairs, est_traj = read_trajectory(os.path.join(source_path, 'results', + method, 'all', scene, "traj.txt")) + + + temp_precision, temp_recall = evaluate_registration(n_fragments, est_traj, est_pairs, gt_pairs, gt_traj, gt_traj_cov) + + # Filter out only the transformation matrices that are in the GT and EST + ext_traj_est, ext_traj_gt = extract_corresponding_trajectors(est_pairs,gt_pairs,est_traj, gt_traj) + + re = rotation_error(torch.from_numpy(ext_traj_gt[:,0:3,0:3]), torch.from_numpy(ext_traj_est[:,0:3,0:3])).cpu().numpy() + te = translation_error(torch.from_numpy(ext_traj_gt[:,0:3,3:4]), torch.from_numpy(ext_traj_est[:,0:3,3:4])).cpu().numpy() + + re_per_scene['mean'].append(np.mean(re)) + re_per_scene['median'].append(np.median(re)) + re_per_scene['min'].append(np.min(re)) + re_per_scene['max'].append(np.max(re)) + + + te_per_scene['mean'].append(np.mean(te)) + te_per_scene['median'].append(np.median(te)) + te_per_scene['min'].append(np.min(te)) + te_per_scene['max'].append(np.max(te)) + + + re_all.extend(re.reshape(-1).tolist()) + te_all.extend(te.reshape(-1).tolist()) + + precision.append(temp_precision) + recall.append(temp_recall) + re_medians.append(np.median(re)) + te_medians.append(np.median(te)) + + logging.info("{:<12} ¦ {:.3f} ¦ {:.3f} ¦ {:.3f} ¦ {:.3f} ¦".format(SHORT_NAMES[dataset][scene], temp_precision, temp_recall, np.median(re), np.median(te))) + + logging.info("--------------------------------------------") + logging.info("Mean precision: {:.3f} +- {:.3f}".format(np.mean(precision),np.std(precision))) + logging.info("Mean recall: {:.3f} +- {:.3f}".format(np.mean(recall),np.std(recall))) + logging.info("Mean ae: {:.3f} +- {:.3f} [deg]".format(np.mean(re_medians),np.std(re_medians))) + logging.info("Mean te: {:.3f} +- {:.3f} [m]".format(np.mean(te_medians),np.std(te_medians))) + logging.info("--------------------------------------------") + + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument( + '--source_path', default='./data/eval_data/', type=str, help='path to dataset') + parser.add_argument( + '--dataset', default='3d_match', type=str, help='path to dataset') + parser.add_argument( + '--method', default='OANet', type=str, help='Which method should be used [RANSAC, RegBlock, Joint]') + parser.add_argument( + '--model', + default=None, + type=str, + help='path to latest checkpoint (default: None)') + + parser.add_argument( + '--batch_size', + type=int, + default=32, + help='Batch size (if mutuals are selected batch size will be 1).') + + parser.add_argument( + '--mutuals', + action='store_true', + help='If only mutually closest NN should be used (reciprocal matching).') + + parser.add_argument( + '--save_data', + action='store_true', + help='If the intermediate data should be saved to npz files.') + + parser.add_argument( + '--overwrite', + action='store_true', + help='If results for this method and dataset exist they will be overwritten, otherwised they will be loaded and used') + + parser.add_argument( + '--overlap_method', + type=str, + default='FCGF', + help='Method to compute the overlap ratio (FCGF or 3DMatch) FCGF is slightly faster than official 3DMatch') + + parser.add_argument( + '--only_gt_overlaping', + action='store_true', + help='Transformation matrices will be computed only for the GT overlaping pairs. Does not change \ + registration recall that is typically reported in the papers but it is almost 10x faster.') + + parser.add_argument( + '--refine', + action='store_true', + help='The results of the deep methods are refined by the subsequent RANSAC using only the inliers') + + + args = parser.parse_args() + + # Prepare the logger + logger = logging.getLogger() + coloredlogs.install(level='INFO', logger=logger) + log_formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(name)s - %(message)s') + + + # Ensure that the source and the target folders were provided + assert args.source_path is not None + + # Adapt source path + args.source_path = os.path.join(args.source_path, args.dataset) + + # Prepare the data loader + eval_data, scene_info = make_pairwise_eval_data_loader(args) + + + with torch.no_grad(): + evaluate_registration_performance(eval_data, + source_path=args.source_path, + dataset=args.dataset, + scene_info=scene_info, + method=args.method, + model=args.model, + mutuals=args.mutuals, + save_data=args.save_data, + overlap_method=args.overlap_method, + refine=args.refine) \ No newline at end of file diff --git a/scripts/download_3DMatch_eval.sh b/scripts/download_3DMatch_eval.sh new file mode 100644 index 0000000..4167e73 --- /dev/null +++ b/scripts/download_3DMatch_eval.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +DATA_TYPE=$1 + +function download() { + if [ ! -d "data" ]; then + mkdir -p "data" + fi + cd data + + if [ ! -d "eval_data" ]; then + mkdir -p "eval_data" + fi + cd eval_data + + if [ ! -d "3d_match" ]; then + mkdir -p "3d_match" + fi + cd 3d_match + + url="https://share.phys.ethz.ch/~gsg/LMPR/data/" + + if [ "$DATA_TYPE" == "raw" ] + then + data_set="3d_match_eval_raw.zip" + echo $url$data_set + else + data_set="3d_match_eval_preprocessed.zip" + echo $url$data_set + fi + + + wget --no-check-certificate --show-progress "$url$data_set" + unzip $data_set + rm $data_set + cd /../../.. + + +} + +function main() { + if [ -z "$DATA_TYPE" ]; then + echo "Data type has to be selected! One of [raw, preprocessed]" + exit 1 + fi + + echo $DATA_TYPE + if [ "$DATA_TYPE" == "raw" ] || [ $DATA_TYPE == "preprocessed" ] + then + download + else + echo "Wrong data type selected must be on of [raw, preprocessed]." +fi +} + +main; diff --git a/scripts/download_3DMatch_train.sh b/scripts/download_3DMatch_train.sh new file mode 100644 index 0000000..ffa1caf --- /dev/null +++ b/scripts/download_3DMatch_train.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +DATA_TYPE=$1 + +function download() { + if [ ! -d "data" ]; then + mkdir -p "data" + fi + cd data + + if [ ! -d "training_data" ]; then + mkdir -p "training_data" + fi + cd training_data + + if [ ! -d "3d_match" ]; then + mkdir -p "3d_match" + fi + cd 3d_match + + url="https://share.phys.ethz.ch/~gsg/LMPR/data/" + + if [ "$DATA_TYPE" == "raw" ] + then + data_set="3d_match_raw.zip" + echo $url$data_set + else + data_set="3d_match_preprocessed.zip" + echo $url$data_set + fi + + + wget --no-check-certificate --show-progress "$url$data_set" + unzip $data_set + rm $data_set + cd /../.. + + +} + +function main() { + if [ -z "$DATA_TYPE" ]; then + echo "Data type has to be selected! One of [raw, preprocessed]" + exit 1 + fi + + echo $DATA_TYPE + if [ "$DATA_TYPE" == "raw" ] || [ $DATA_TYPE == "preprocessed" ] + then + download + else + echo "Wrong data type selected must be on of [raw, preprocessed]." +fi +} + +main; diff --git a/scripts/download_pretrained_models.sh b/scripts/download_pretrained_models.sh new file mode 100644 index 0000000..79242f7 --- /dev/null +++ b/scripts/download_pretrained_models.sh @@ -0,0 +1,6 @@ +mkdir pretrained +cd pretrained +wget --no-check-certificate --show-progress https://share.phys.ethz.ch/~gsg/LMPR/pretrained_models/pretrained_models.zip +unzip pretrained_models.zip +rm pretrained_models.zip +cd .. diff --git a/scripts/download_redwood_eval.sh b/scripts/download_redwood_eval.sh new file mode 100644 index 0000000..e426e5b --- /dev/null +++ b/scripts/download_redwood_eval.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +DATA_TYPE=$1 + +function download() { + if [ ! -d "data" ]; then + mkdir -p "data" + fi + cd data + + if [ ! -d "eval_data" ]; then + mkdir -p "eval_data" + fi + cd eval_data + + if [ ! -d "redwood" ]; then + mkdir -p "redwood" + fi + cd 3d_match + + url="https://share.phys.ethz.ch/~gsg/LMPR/data/" + + if [ "$DATA_TYPE" == "raw" ] + then + data_set="redwood_eval_raw.zip" + echo $url$data_set + else + data_set="redwood_eval_preprocessed.zip" + echo $url$data_set + fi + + + wget --no-check-certificate --show-progress "$url$data_set" + unzip $data_set + rm $data_set + cd /../../.. + + +} + +function main() { + if [ -z "$DATA_TYPE" ]; then + echo "Data type has to be selected! One of [raw, preprocessed]" + exit 1 + fi + + echo $DATA_TYPE + if [ "$DATA_TYPE" == "raw" ] || [ $DATA_TYPE == "preprocessed" ] + then + download + else + echo "Wrong data type selected must be on of [raw, preprocessed]." +fi +} + +main; diff --git a/scripts/extract_data.py b/scripts/extract_data.py new file mode 100644 index 0000000..fe805ab --- /dev/null +++ b/scripts/extract_data.py @@ -0,0 +1,376 @@ +""" +Source code used to extract FCGF features, pairwise correspondences and training that can be used to train our network +without computing the FCGF descriptors on the fly. This way of training greatly eases the sampling of the point cloud pairs and +can at least be used to pretrain the filtering network, confidence estimation block and transformation synchronization. + +""" + +import argparse +import os +import open3d as o3d +import torch +import logging +import numpy as np +import sys +import coloredlogs +import torch +import easydict +import multiprocessing as mp +import sys + +cwd = os.getcwd() +sys.path.append(cwd) + +from sklearn.neighbors import NearestNeighbors +from functools import partial + +from lib.descriptor.fcgf import FCGFNet +from scripts.utils import extract_features, transform_point_cloud +from lib.utils import compute_overlap_ratio, load_point_cloud, ensure_dir, get_file_list, get_folder_list + +o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Error) + + + +def extract_features_batch(model, source_path, target_path, dataset, voxel_size, device): + """ + Extracts the per point features in the FCGF feature space and saves them to the predefined path + + Args: + model (FCGF model instance): model used to inferr the descriptors + source_path (str): path to the raw files + target path (str): where to save the extracted data + dataset (float): name of the dataset + voxel_size (float): voxel sized used to create the sparse tensor + device (pytorch device): cuda or cpu + """ + + source_path = os.path.join(source_path,dataset,'raw_data') + target_path = os.path.join(target_path,dataset,'features') + + ensure_dir(target_path) + + folders = get_folder_list(source_path) + + assert len(folders) > 0, 'Could not find {} folders under {}'.format(dataset, source_path) + + logging.info(folders) + list_file = os.path.join(target_path, 'list.txt') + f = open(list_file, 'w') + model.eval() + + for fo in folders: + scene_name = fo.split() + files = get_file_list(fo, '.ply') + fo_base = os.path.basename(fo) + ensure_dir(os.path.join(target_path, fo_base)) + + f.write('%s %d\n' % (fo_base, len(files))) + for i, fi in enumerate(files): + save_fn = '%s_%03d' % (fo_base, i) + if os.path.exists(os.path.join(target_path, fo_base, save_fn + '.npz')): + print('Correspondence file already exits moving to the next example.') + else: + # Extract features from a file + pcd = o3d.io.read_point_cloud(fi) + + if i % 100 == 0: + logging.info(f'{i} / {len(files)}: {save_fn}') + + xyz_down, feature = extract_features( + model, + xyz=np.array(pcd.points), + rgb=None, + normal=None, + voxel_size=voxel_size, + device=device, + skip_check=True) + + np.savez_compressed( + os.path.join(target_path, fo_base, save_fn), + points=np.array(pcd.points), + xyz=xyz_down, + feature=feature.detach().cpu().numpy()) + + f.close() + +def extract_correspondences(dataset,source_path,target_path, n_correspondences): + """ + Prepares the arguments and runs the correspondence extration in parallel mode + + Args: + dataset (str): name of the dataset + source_path (str): path to the raw files + target_path (str): path to where the extracted data will be saved + n_correspondences (int): number of points to sample + + """ + source_path = os.path.join(source_path,dataset,'raw_data') + + + scene_paths = get_folder_list(source_path) + idx = list(range(len(scene_paths))) + + + pool = mp.Pool(processes=6) + func = partial(run_correspondence_extraction, dataset, source_path, target_path, n_correspondences) + pool.map(func, idx) + pool.close() + pool.join() + + +def run_correspondence_extraction(dataset,source_path, target_path, n_correspondences, idx): + """ + Computes the correspondences in the FCGF space together with the mutuals and ratios side information + + Args: + dataset (str): name of the dataset + source_path (str): path to the raw data + target_path (str): path to where the extracted data will be saved + n_correspondences (int): number of points to sample + idx (int): index of the scene, used for parallel processing + + """ + + # Initialize all the paths + features_path = os.path.join(target_path,dataset,'features') + target_path = os.path.join(target_path,dataset,'correspondences') + + fo = get_folder_list(source_path)[idx] + fo_base = os.path.basename(fo) + files = get_file_list(os.path.join(features_path, fo_base), '.npz') + + ensure_dir(os.path.join(target_path, fo_base)) + + # Loop over all fragment pairs and compute the training data + for idx_1 in range(len(files)): + for idx_2 in range(idx_1+1, len(files)): + if os.path.exists(os.path.join(target_path, fo_base,'{}_{}_{}.npz'.format(fo_base,str(idx_1).zfill(3), str(idx_2).zfill(3)))): + logging.info('Correspondence file already exits moving to the next example.') + + else: + pc_1_data = np.load(os.path.join(features_path, fo_base, fo_base + '_{}.npz'.format(str(idx_1).zfill(3)))) + pc_1_features = pc_1_data['feature'] + pc_1_keypoints = pc_1_data['xyz'] + + pc_2_data = np.load(os.path.join(features_path, fo_base, fo_base + '_{}.npz'.format(str(idx_2).zfill(3)))) + pc_2_features = pc_2_data['feature'] + pc_2_keypoints = pc_2_data['xyz'] + + # Sample with replacement if less then n_correspondences points are in the point cloud + if pc_1_features.shape[0] >= n_correspondences: + inds_1 = np.random.choice(pc_1_features.shape[0], n_correspondences, replace=False) + else: + inds_1 = np.random.choice(pc_1_features.shape[0], n_correspondences, replace=True) + + if pc_2_features.shape[0] >= n_correspondences: + inds_2 = np.random.choice(pc_2_features.shape[0], n_correspondences, replace=False) + else: + inds_2 = np.random.choice(pc_2_features.shape[0], n_correspondences, replace=True) + + + pc_1_features = pc_1_features[inds_1,:] + pc_2_features = pc_2_features[inds_2, :] + pc_1_key = pc_1_keypoints[inds_1,:] + pc_2_key = pc_2_keypoints[inds_2,:] + + # find the correspondence using nearest neighbor search in the feature space (two way) + nn_search = NearestNeighbors(n_neighbors=1, metric='minkowski', p=2) + nn_search.fit(pc_2_features) + nn_dists, nn_indices = nn_search.kneighbors(X=pc_1_features, n_neighbors=2, return_distance=True) + + + nn_search.fit(pc_1_features) + nn_dists_1, nn_indices_1 = nn_search.kneighbors(X=pc_2_features, n_neighbors=2, return_distance=True) + + ol_nn_ids = np.where((nn_indices[nn_indices_1[:, 0], 0] - np.arange(pc_1_features.shape[0])) == 0)[0] + + # Initialize mutuals and ratios + mutuals = np.zeros((n_correspondences, 1)) + mutuals[ol_nn_ids] = 1 + ratios = nn_dists[:, 0] / nn_dists[:, 1] + + # Concatenate the correspondence coordinates + xs = np.concatenate((pc_1_key[nn_indices_1[:, 0], :], pc_2_key), axis=1) + + np.savez_compressed( + os.path.join(target_path, fo_base, '{}_{}_{}.npz'.format(fo_base, str(idx_1).zfill(3), str(idx_2).zfill(3))), + x=xs, + mutuals=mutuals, + ratios=ratios) + + +def extract_precomputed_training_data(dataset, source_path, target_path, voxel_size, inlier_threshold): + """ + Prepares the data for training the filtering networks with precomputed correspondences (without FCGF descriptor) + + Args: + dataset (str): name of the dataset + source_path (str): path to the raw data + target_path (str): path to where the extracted data will be saved + voxel_size (float): voxel size that was used to compute the features + inlier_threshold (float): threshold to determine if a correspondence is an inlier or outlier + """ + source_path = os.path.join(source_path,dataset,'raw_data') + features_path = os.path.join(target_path,dataset,'features') + correspondence_path = os.path.join(target_path,dataset,'correspondences') + target_path = os.path.join(target_path,dataset,'training_data') + + + ensure_dir(target_path) + + # Check that the GT global transformation matrices are available and that the FCGF features are computed + folders = get_folder_list(source_path) + + assert len(folders) > 0, 'Could not find {} folders under {}'.format(dataset, source_path) + + logging.info('Found {} scenes from the {} dataset!'.format(len(folders),dataset)) + + for fo in folders: + + scene_name = fo.split() + fo_base = os.path.basename(fo) + ensure_dir(os.path.join(target_path, fo_base)) + + pc_files = get_file_list(fo, '.ply') + trans_files = get_file_list(fo, '.txt') + assert len(pc_files) <= len(trans_files), 'The number of point cloud files does not equal the number of GT trans parameters!' + + feat_files = get_file_list(os.path.join(features_path,fo_base), '.npz') + assert len(pc_files) == len(feat_files), 'Features for scene {} are either not computed or some are missing!'.format(fo_base) + + coor_files = get_file_list(os.path.join(correspondence_path,fo_base), '.npz') + + assert len(coor_files) == int((len(feat_files) * (len(feat_files)-1))/2), 'Correspondence files for the scene {} are missing. First run the correspondence extraction!'.format(fo_base) + + # Loop over all fragment pairs and compute the training data + for idx_1 in range(len(pc_files)): + for idx_2 in range(idx_1+1, len(pc_files)): + if os.path.exists(os.path.join(target_path, fo_base,'{}_{}_{}.npz'.format(fo_base,str(idx_1).zfill(3), str(idx_2).zfill(3)))): + logging.info('Training file already exits moving to the next example.') + + + data = np.load(os.path.join(correspondence_path, fo_base,'{}_{}_{}.npz'.format(fo_base,str(idx_1).zfill(3), str(idx_2).zfill(3)))) + xs = data['xs'] + mutuals = data['mutuals'] + ratios = data['ratios'] + + # Get the GT transformation parameters + t_1 = np.genfromtxt(os.path.join(source_path, fo_base, 'cloud_bin_{}.info.txt'.format(idx_1)), skip_header=1) + t_2 = np.genfromtxt(os.path.join(source_path, fo_base, 'cloud_bin_{}.info.txt'.format(idx_2)), skip_header=1) + + + # Get the GT transformation parameters + pc_1 = load_point_cloud(os.path.join(source_path,fo_base, 'cloud_bin_{}.ply'.format(idx_1)), data_type='numpy') + pc_2 = load_point_cloud(os.path.join(source_path,fo_base, 'cloud_bin_{}.ply'.format(idx_2)), data_type='numpy') + + pc_1_tr = transform_point_cloud(pc_1, t_1[0:3,0:3], t_1[0:3,3].reshape(-1,1)) + pc_2_tr = transform_point_cloud(pc_2, t_2[0:3,0:3], t_2[0:3,3].reshape(-1,1)) + + overlap_ratio = compute_overlap_ratio(pc_1_tr, pc_2_tr, np.eye(4), method = 'FCGF', voxel_size=voxel_size) + + # Estimate pairwise transformation parameters + t_3 = np.matmul(np.linalg.inv(t_2), t_1) + + r_matrix = t_3[0:3, 0:3] + t_vector = t_3[0:3, 3] + + # Transform the keypoints of the first point cloud + pc_1_key_tr = transform_point_cloud(xs[:,0:3], r_matrix, t_vector.reshape(-1,1)) + + # Compute the residuals after the transformation + y_s = np.sqrt(np.sum(np.square(pc_1_key_tr - xs[:,3:6]), axis=1)) + + # Inlier percentage + inlier_ratio = np.where(y_s < inlier_threshold)[0].shape[0] / y_s.shape[0] + inlier_ratio_mutuals = np.where(y_s[mutuals.astype(bool).reshape(-1)] < inlier_threshold)[0].shape[0] / np.sum(mutuals) + + np.savez_compressed(os.path.join(target_path,fo_base,'cloud_{}_{}.npz'.format(str(idx_1).zfill(3), str(idx_2).zfill(3))), + R=r_matrix, t=t_vector, x=xs, y=y_s, mutuals=mutuals, inlier_ratio=inlier_ratio, inlier_ratio_mutuals=inlier_ratio_mutuals, + ratios=ratios, overlap=overlap_ratio) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument( + '--source_path', default=None, type=str, help='path to the raw files') + parser.add_argument( + '--target_path', default=None, type=str, help='path to where the extracted data will be saved') + parser.add_argument( + '--dataset', default=None, type=str, help='name of the dataset') + parser.add_argument( + '-m', + '--model', + default=None, + type=str, + help='path to latest checkpoint (default: None)') + parser.add_argument( + '--voxel_size', + default=0.025, + type=float, + help='voxel size to preprocess point cloud') + parser.add_argument( + '--n_correspondences', + default=10000, + type=int, + help='number of points to be sampled in the correspondence estimation') + parser.add_argument( + '--inlier_threshold', + default=0.05, + type=float, + help='threshold to determine if the correspondence is an inlier or outlier') + parser.add_argument('--extract_features', action='store_true') + parser.add_argument('--extract_correspondences', action='store_true') + parser.add_argument('--extract_precomputed_training_data', action='store_true') + parser.add_argument('--refine', action='store_true') + parser.add_argument('--with_cuda', action='store_true') + + + args = parser.parse_args() + + # Prepare the logger + logger = logging.getLogger() + coloredlogs.install(level='INFO', logger=logger) + log_formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(name)s - %(message)s') + + device = torch.device('cuda' if args.with_cuda and torch.cuda.is_available() else 'cpu') + + if args.extract_features: + assert args.model is not None + + checkpoint = torch.load(args.model) + config = checkpoint['config'] + + num_feats = 1 + model = FCGFNet( + num_feats, + config.model_n_out, + bn_momentum=0.05, + normalize_feature=config.normalize_feature, + conv1_kernel_size=config.conv1_kernel_size, + D=3) + + model.load_state_dict(checkpoint['state_dict']) + model.eval() + + model = model.to(device) + + with torch.no_grad(): + if args.extract_features: + logger.info('Starting feature extraction') + extract_features_batch(model, args.source_path, args.target_path, args.dataset, config.voxel_size, + device) + logger.info('Feature extraction completed') + + if args.extract_correspondences: + logger.info('Starting establishing pointwise correspondences in the feature space') + extract_correspondences(args.dataset,args.source_path, args.target_path, args.n_correspondences) + logger.info('Pointwise correspondences in the features space established') + + if args.extract_precomputed_training_data: + logger.info('Starting establishing pointwise correspondences in the feature space') + extract_precomputed_training_data(args.dataset,args.source_path, + args.target_path, args.inlier_threshold, args.voxel_size) + logger.info('Pointwise correspondences in the features space established') + + \ No newline at end of file diff --git a/scripts/utils.py b/scripts/utils.py new file mode 100644 index 0000000..b2211e1 --- /dev/null +++ b/scripts/utils.py @@ -0,0 +1,199 @@ +""" +Contains the util function used in the provided scripts. +Some of the functions are borrowed from FCGF repository (https://github.com/chrischoy/FCGF/tree/440034846e9c27e4faba44346885e4cca51e9753) +""" + +import os +import re +from os import listdir +from os.path import isfile, join, isdir, splitext +import numpy as np +import torch +import MinkowskiEngine as ME +from lib.data import PrecomputedPairwiseEvalDataset, collate_fn, get_folder_list,get_file_list +from lib.utils import read_trajectory + +def read_txt(path): + """ + Reads the text file into lines. + + Args: + path (str): path to the file + + Returns: + lines (list): list of the lines from the input text file + """ + with open(path) as f: + lines = f.readlines() + lines = [x.strip() for x in lines] + + return lines + + +def ensure_dir(path): + """ + Creates dir if it does not exist. + + Args: + path (str): path to the folder + """ + if not os.path.exists(path): + os.makedirs(path, mode=0o755) + + +def extract_features(model, + xyz, + rgb=None, + normal=None, + voxel_size=0.05, + device=None, + skip_check=False, + is_eval=True): + """ + Extracts FCGF features. + + Args: + model (FCGF model instance): model used to inferr the features + xyz (torch tensor): coordinates of the point clouds [N,3] + rgb (torch tensor): colors, must be in range (0,1) [N,3] + normal (torch tensor): normal vectors, must be in range (-1,1) [N,3] + voxel_size (float): voxel size for the generation of the saprase tensor + device (torch device): which device to use, cuda or cpu + skip_check (bool): if true skip rigorous check (to speed up) + is_eval (bool): flag for evaluation mode + + Returns: + return_coords (torch tensor): return coordinates of the points after the voxelization [m,3] (m<=n) + features (torch tensor): per point FCGF features [m,c] + """ + + + if is_eval: + model.eval() + + if not skip_check: + assert xyz.shape[1] == 3 + + N = xyz.shape[0] + if rgb is not None: + assert N == len(rgb) + assert rgb.shape[1] == 3 + if np.any(rgb > 1): + raise ValueError('Invalid color. Color must range from [0, 1]') + + if normal is not None: + assert N == len(normal) + assert normal.shape[1] == 3 + if np.any(normal > 1): + raise ValueError('Invalid normal. Normal must range from [-1, 1]') + + if device is None: + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + + feats = [] + if rgb is not None: + # [0, 1] + feats.append(rgb - 0.5) + + if normal is not None: + # [-1, 1] + feats.append(normal / 2) + + if rgb is None and normal is None: + feats.append(np.ones((len(xyz), 1))) + + feats = np.hstack(feats) + + # Voxelize xyz and feats + coords = np.floor(xyz / voxel_size) + inds = ME.utils.sparse_quantize(coords, return_index=True) + coords = coords[inds] + # Convert to batched coords compatible with ME + coords = ME.utils.batched_coordinates([coords]) + return_coords = xyz[inds] + + feats = feats[inds] + + feats = torch.tensor(feats, dtype=torch.float32) + coords = torch.tensor(coords, dtype=torch.int32) + + stensor = ME.SparseTensor(coords=coords, feats=feats).to(device) + + return return_coords, model(stensor).F + + +def transform_point_cloud(x1, R, t, data_type='numpy'): + """ + Transforms the point cloud using the giver transformation paramaters + + Args: + x1 (np array): points of the point cloud [n,3] + R (np array): estimated rotation matrice [3,3] + t (np array): estimated translation vectors [3,1] + Returns: + x1_t (np array): points of the transformed point clouds [n,3] + """ + assert data_type in ['numpy', 'torch'] + + if data_type == 'numpy': + x1_t = (np.matmul(R, x1.transpose()) + t).transpose() + + elif data_type =='torch': + x1_t = (torch.matmul(R, x1.transpose(1,0)) + t).transpose(1,0) + + + return x1_t + + +def make_pairwise_eval_data_loader(args): + """ + Prepares the data loader for the pairwise evaluation + + Args: + args (dict): configuration parameters + + Returns: + loader (torch data loader): data loader for the evaluation data + scene_info (dict): metadate of the scenes + """ + + dset = PrecomputedPairwiseEvalDataset(args) + + batch_size = 1 if args.mutuals else args.batch_size + + # Extract the number of examples per scene + scene_names = get_folder_list(os.path.join(args.source_path,'correspondences')) + scene_info = {} + nr_examples = 0 + save_path = os.path.join(args.source_path, 'results', args.method) + save_path += '/mutuals/' if args.mutuals else '/all/' + + for folder in scene_names: + curr_scene_name = folder.split('/')[-1] + if os.path.exists(os.path.join(save_path, curr_scene_name, 'traj.txt')) and not args.overwrite: + pass + else: + if args.only_gt_overlaping: + gt_pairs, gt_traj = read_trajectory(os.path.join(args.source_path,'raw_data', curr_scene_name, "gt.log")) + examples_per_scene = len(gt_pairs) + scene_info[curr_scene_name] = [nr_examples * 4, (nr_examples + examples_per_scene) * 4 ] + nr_examples += examples_per_scene + + else: + examples_per_scene = len(get_file_list(folder)) + scene_info[curr_scene_name] = [nr_examples * 4, (nr_examples + examples_per_scene) * 4 ] + nr_examples += examples_per_scene + + # Save the total number of examples + scene_info['nr_examples'] = nr_examples + + loader = torch.utils.data.DataLoader( + dset, + batch_size=batch_size, + shuffle=False, + num_workers=4, + collate_fn=collate_fn, + pin_memory=False, + drop_last=False) + + return loader, scene_info \ No newline at end of file diff --git a/train.py b/train.py new file mode 100644 index 0000000..85749b6 --- /dev/null +++ b/train.py @@ -0,0 +1,158 @@ +import sys +import os +import logging +import torch +import time +import argparse +import numpy as np +import torch.optim as optim +from tensorboardX import SummaryWriter + +import lib.config as config +from lib.utils import load_config +from lib.data import make_data_loader +from lib.checkpoints import CheckpointIO +from lib.logger import prepare_logger + + +# Set the random seeds for reproducibility +np.random.seed(41) +torch.manual_seed(41) +if torch.cuda.is_available(): + torch.cuda.manual_seed(41) + + +def main(cfg, logger): + """ + Main function of this software. After preparing the data loaders, model, optimizer, and trainer, + start with the training and evaluation process. + + Args: + cfg (dict): current configuration paramaters + """ + + # Initialize parameters + model_selection_metric = cfg['train']['model_selection_metric'] + + if cfg['train']['model_selection_mode'] == 'maximize': + model_selection_sign = 1 + elif cfg['train']['model_selection_mode'] == 'minimize': + model_selection_sign = -1 + else: + raise ValueError('model_selection_mode must be either maximize or minimize.') + + # Get data loader + train_loader = make_data_loader(cfg, phase='train') + val_loader = make_data_loader(cfg, phase='val') + + # Set up tensorboard logger + tboard_logger = SummaryWriter(os.path.join(cfg['misc']['log_dir'], 'logs')) + + # Get model + model = config.get_model(cfg) + + # Get optimizer and trainer + optimizer = getattr(optim, cfg['optimizer']['alg'])(model.parameters(), lr=cfg['optimizer']['learning_rate'], + weight_decay=cfg['optimizer']['weight_decay']) + + trainer = config.get_trainer(cfg, model, optimizer, tboard_logger) + + # Load pre-trained model if existing + kwargs = { + 'model': model, + 'optimizer': optimizer, + } + + checkpoint_io = CheckpointIO(cfg['misc']['log_dir'], initialize_from=cfg['model']['init_from'], + initialization_file_name=cfg['model']['init_file_name'], **kwargs) + + try: + load_dict = checkpoint_io.load('model.pt') + except FileExistsError: + load_dict = dict() + + epoch_it = load_dict.get('epoch_it', -1) + it = load_dict.get('it', -1) + + metric_val_best = load_dict.get('loss_val_best', -model_selection_sign * np.inf) + + if metric_val_best == np.inf or metric_val_best == -np.inf: + metric_val_best = -model_selection_sign * np.inf + + logger.info('Current best validation metric ({}): {:.5f}'.format(model_selection_metric, metric_val_best)) + + # Training parameters + stat_interval = cfg['train']['stat_interval'] + stat_interval = stat_interval if stat_interval > 0 else abs(stat_interval* len(train_loader)) + + chkpt_interval = cfg['train']['chkpt_interval'] + chkpt_interval = chkpt_interval if chkpt_interval > 0 else abs(chkpt_interval* len(train_loader)) + + val_interval = cfg['train']['val_interval'] + val_interval = val_interval if val_interval > 0 else abs(val_interval* len(train_loader)) + + # Print model parameters and model graph + nparameters = sum(p.numel() for p in model.parameters()) + #print(model) + logger.info('Total number of parameters: {}'.format(nparameters)) + + # Training loop + while epoch_it < cfg['train']['max_epoch']: + epoch_it += 1 + + for batch in train_loader: + it += 1 + loss = trainer.train_step(batch, it) + tboard_logger.add_scalar('train/loss', loss, it) + + # Print output + if stat_interval != 0 and (it % stat_interval) == 0 and it != 0: + logger.info('[Epoch {}] it={}, loss={:.4f}'.format(epoch_it, it, loss)) + + # Save checkpoint + if (chkpt_interval != 0 and (it % chkpt_interval) == 0) and it != 0: + logger.info('Saving checkpoint') + checkpoint_io.save('model.pt', epoch_it=epoch_it, it=it, + loss_val_best=metric_val_best) + + # Run validation + if val_interval != 0 and (it % val_interval) == 0 and it != 0: + eval_dict = trainer.evaluate(val_loader,it) + + metric_val = eval_dict[model_selection_metric] + logger.info('Validation metric ({}): {:.4f}'.format(model_selection_metric, metric_val)) + + for k, v in eval_dict.items(): + tboard_logger.add_scalar('val/{}'.format(k), v, it) + + if model_selection_sign * (metric_val - metric_val_best) > 0: + metric_val_best = metric_val + logger.info('New best model (loss {:.4f})'.format(metric_val_best)) + checkpoint_io.save('model_best.pt', epoch_it=epoch_it, it=it, + loss_val_best=metric_val_best) + + + # Quit after the maximum number of epochs is reached + logger.info('Training completed after {} Epochs ({} it) with best val metric ({})={}'.format(epoch_it, it, model_selection_metric, metric_val_best)) + +if __name__ == "__main__": + logger = logging.getLogger + + + parser = argparse.ArgumentParser() + parser.add_argument('config', type=str, help= 'Path to the config file.') + args = parser.parse_args() + + cfg = load_config(args.config) + + # Create the output dir if it does not exist + if not os.path.exists(cfg['misc']['log_dir']): + os.makedirs(cfg['misc']['log_dir']) + + logger, checkpoint_dir = prepare_logger(cfg) + + cfg['misc']['log_dir'] = checkpoint_dir + # Argument: path to the config file + logger.info('Torch version: {}'.format(torch.__version__)) + + main(cfg, logger)