From 0bec3130f99d241465276c4f3e9310ed3bf96546 Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Mon, 7 Dec 2020 18:34:54 -0800 Subject: [PATCH 01/40] [WIP] Support Deepgrow 2D/3D Training Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/__init__.py | 4 + monai/apps/deepgrow/dataset.py | 255 ++++++++++++++++++++++++ monai/apps/deepgrow/handler.py | 223 +++++++++++++++++++++ monai/apps/deepgrow/interaction.py | 61 ++++++ monai/apps/deepgrow/train.ipynb | 299 ++++++++++++++++++++++++++++ monai/apps/deepgrow/train.py | 197 +++++++++++++++++++ monai/apps/deepgrow/transforms.py | 306 +++++++++++++++++++++++++++++ monai/handlers/utils.py | 111 +++++++++++ 8 files changed, 1456 insertions(+) create mode 100644 monai/apps/deepgrow/__init__.py create mode 100644 monai/apps/deepgrow/dataset.py create mode 100644 monai/apps/deepgrow/handler.py create mode 100644 monai/apps/deepgrow/interaction.py create mode 100644 monai/apps/deepgrow/train.ipynb create mode 100644 monai/apps/deepgrow/train.py create mode 100644 monai/apps/deepgrow/transforms.py diff --git a/monai/apps/deepgrow/__init__.py b/monai/apps/deepgrow/__init__.py new file mode 100644 index 0000000000..bcd2ef7a95 --- /dev/null +++ b/monai/apps/deepgrow/__init__.py @@ -0,0 +1,4 @@ +from .dataset import * +from .handler import * +from .interaction import * +from .transforms import * diff --git a/monai/apps/deepgrow/dataset.py b/monai/apps/deepgrow/dataset.py new file mode 100644 index 0000000000..0170cb9e10 --- /dev/null +++ b/monai/apps/deepgrow/dataset.py @@ -0,0 +1,255 @@ +import json +import os +import sys +from typing import Callable, Dict, List, Sequence, Union + +import numpy as np + +from monai.apps.datasets import DecathlonDataset +from monai.transforms import ( + AsChannelFirstd, + Spacingd, + LoadNiftid, + Orientationd, + ResizeWithPadOrCropd, + Compose, GridSampleMode, +) + + +# TODO:: Test basic functionality +# TODO:: Unit Test +class DeepgrowDataset(DecathlonDataset): + def __init__( + self, + dimension: int, + pixdim: Sequence[float], + spatial_size: Union[Sequence[int], int], + root_dir: str, + task: str, + section: str, + transform: Union[Sequence[Callable], Callable] = (), + download: bool = False, + seed: int = 0, + val_frac: float = 0.2, + cache_num: int = sys.maxsize, + cache_rate: float = 1.0, + num_workers: int = 0, + limit: int = 0 + ) -> None: + self.dimension = dimension + self.pixdim = pixdim + self.spatial_size = spatial_size + self.limit = limit + + super().__init__( + root_dir=root_dir, + task=task, + section=section, + transform=transform, + download=download, + seed=seed, + val_frac=val_frac, + cache_num=cache_num, + cache_rate=cache_rate, + num_workers=num_workers + ) + + def _generate_data_list(self, dataset_dir: str) -> List[Dict]: + dataset = super()._generate_data_list(dataset_dir) + + tmp_dataset_dir = dataset_dir + "_{}.deep".format(self.section) + new_datalist = create_dataset( + dataset, + ['image', 'label'], + tmp_dataset_dir, + self.dimension, + self.pixdim, + self.spatial_size, + self.limit, + False) + + dataset_json = os.path.join(tmp_dataset_dir, "dataset.json") + with open(dataset_json, 'w') as fp: + json.dump({self.section: new_datalist}, fp, indent=2) + return new_datalist + + +def _get_transforms(keys, dimension, pixdim, spatial_size): + mode = [GridSampleMode.BILINEAR, GridSampleMode.NEAREST] if len(keys) == 2 else [GridSampleMode.BILINEAR] + transforms = [ + LoadNiftid(keys=keys), + AsChannelFirstd(keys=keys), + Spacingd(keys=keys, pixdim=pixdim, mode=mode), + Orientationd(keys=keys, axcodes="RAS"), + ] + + if dimension == 2: + transforms.append(ResizeWithPadOrCropd(keys=keys, spatial_size=spatial_size)) + return Compose(transforms) + + +def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): + vol_image = data[keys[0]] + vol_label = data.get(keys[1]) + data_list = [] + + image_count = 0 + label_count = 0 + unique_labels_count = 0 + for sid in range(vol_image.shape[0]): + image = vol_image[sid, ...] + label = vol_label[sid, ...] if vol_label is not None else None + + if vol_label is not None and np.sum(label) == 0: + continue + + image_file_prefix = 'vol_idx_{:0>4d}_slice_{:0>3d}'.format(vol_idx, sid) + image_file = os.path.join(dataset_dir, 'images', image_file_prefix) + image_file += '.npy' + + os.makedirs(os.path.join(dataset_dir, 'images'), exist_ok=True) + np.save(image_file, image) + image_count += 1 + + # Test Data + if vol_label is None: + data_list.append({ + 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, + 'positive_guidance': [[-1, -1, -1]], + 'negative_guidance': [[-1, -1, -1]], + }) + continue + + # For all Labels + unique_labels = np.unique(label.flatten()) + unique_labels = unique_labels[unique_labels != 0] + unique_labels_count = max(unique_labels_count, len(unique_labels)) + + for idx in unique_labels: + label_file_prefix = '{}_region_{:0>2d}'.format(image_file_prefix, int(idx)) + label_file = os.path.join(dataset_dir, 'labels', label_file_prefix) + label_file += '.npy' + + os.makedirs(os.path.join(dataset_dir, 'labels'), exist_ok=True) + curr_label = (label == idx).astype(np.float32) + np.save(label_file, curr_label) + + label_count += 1 + data_list.append({ + 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, + 'label': label_file.replace(dataset_dir + '/', '') if relative_path else label_file, + 'positive_guidance': [[-1, -1, -1]], + 'negative_guidance': [[-1, -1, -1]], + 'region': int(idx) + }) + + print('{} => Image: {} => {}; Label: {} => {}; Unique Labels: {}'.format( + vol_idx, + vol_image.shape, + image_count, + vol_label.shape if vol_label is not None else None, + label_count, + unique_labels_count) + ) + return data_list + + +def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): + vol_image = data[keys[0]] + vol_label = data.get(keys[1]) + data_list = [] + + image_count = 0 + label_count = 0 + unique_labels_count = 0 + + image_file_prefix = 'vol_idx_{:0>4d}'.format(vol_idx) + image_file = os.path.join(dataset_dir, 'images', image_file_prefix) + image_file += '.npy' + + os.makedirs(os.path.join(dataset_dir, 'images'), exist_ok=True) + np.save(image_file, vol_image) + image_count += 1 + + # Test Data + if vol_label is None: + data_list.append({ + 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, + 'positive_guidance': [[-1, -1, -1, -1]], + 'negative_guidance': [[-1, -1, -1, -1]], + }) + else: + # For all Labels + unique_labels = np.unique(vol_label.flatten()) + unique_labels = unique_labels[unique_labels != 0] + unique_labels_count = max(unique_labels_count, len(unique_labels)) + + for idx in unique_labels: + label_file_prefix = '{}_region_{:0>2d}'.format(image_file_prefix, int(idx)) + label_file = os.path.join(dataset_dir, 'labels', label_file_prefix) + label_file += '.npy' + + curr_label = (vol_label == idx).astype(np.float32) + os.makedirs(os.path.join(dataset_dir, 'labels'), exist_ok=True) + np.save(label_file, curr_label) + + label_count += 1 + data_list.append({ + 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, + 'label': label_file.replace(dataset_dir + '/', '') if relative_path else label_file, + 'positive_guidance': [[-1, -1, -1, -1]], + 'negative_guidance': [[-1, -1, -1, -1]], + 'region': int(idx) + }) + + print('{} => Image: {} => {}; Label: {} => {}; Unique Labels: {}'.format( + vol_idx, + vol_image.shape, + image_count, + vol_label.shape if vol_label is not None else None, + label_count, + unique_labels_count) + ) + return data_list + + +def create_dataset( + datalist, + keys, + dataset_dir, + dimension=2, + pixdim=[1.0, 1.0, 1.0], + spatial_size=[512, 512], + limit=0, + relative_path=False) -> List[Dict]: + if not isinstance(keys, list): + keys = [keys] + + transforms = _get_transforms(keys, dimension, pixdim, spatial_size) + new_datalist = [] + for idx in range(len(datalist)): + if limit and idx >= limit: + break + + image = datalist[idx][keys[0]] + label = datalist[idx].get(keys[1]) if len(keys) > 1 else None + print('{} => {}'.format(os.path.basename(image), os.path.basename(label) if label else None)) + + if dimension == 2: + data = _save_data_2d( + vol_idx=idx, + data=transforms({'image': image, 'label': label}), + keys=['image', 'label'], + dataset_dir=dataset_dir, + relative_path=relative_path + ) + else: + data = _save_data_3d( + vol_idx=idx, + data=transforms({'image': image, 'label': label}), + keys=['image', 'label'], + dataset_dir=dataset_dir, + relative_path=relative_path + ) + new_datalist.extend(data) + return new_datalist diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py new file mode 100644 index 0000000000..e5ef9e2d71 --- /dev/null +++ b/monai/apps/deepgrow/handler.py @@ -0,0 +1,223 @@ +import logging +import os +import statistics + +import numpy as np +import torch +import torch.distributed +import torchvision +from torch.utils.tensorboard import SummaryWriter + +from monai.engines import Engine +from monai.engines.workflow import Events +from monai.handlers.utils import make_grid_with_titles +from monai.metrics import compute_meandice +from monai.transforms import rescale_array + +# TODO:: Unit Test + +class MeanDice: + def __init__(self): + self.data = [] + + def reset(self): + self.data = [] + + def update(self, y_pred, y, batched=True): + if not batched: + y_pred = y_pred[None] + y = y[None] + score = compute_meandice(y_pred=y_pred, y=y, include_background=False).mean() + self.data.append(score.item()) + + def mean(self) -> float: + return statistics.mean(self.data) + + def stdev(self) -> float: + return statistics.stdev(self.data) if len(self.data) > 1 else 0 + + +class DeepgrowStatsHandler(object): + def __init__( + self, + summary_writer=None, + interval=1, + log_dir="./runs", + tag_name='val_dice', + compute_metric=True, + add_scalar=True, + add_stdev=False, + merge_scalar=False, + fold_size=0, + ): + self.writer = SummaryWriter(log_dir=log_dir) if summary_writer is None else summary_writer + self.interval = interval + self.tag_name = tag_name + self.compute_metric = compute_metric + self.add_scalar = add_scalar + self.add_stdev = add_stdev + self.merge_scalar = merge_scalar + self.fold_size = fold_size + + if torch.distributed.is_initialized(): + self.tag_name = 'r{}-{}'.format(torch.distributed.get_rank(), self.tag_name) + + self.plot_data = {} + self.metric_data = {} + + def attach(self, engine: Engine) -> None: + engine.add_event_handler(Events.ITERATION_COMPLETED(every=self.interval), self, 'iteration') + engine.add_event_handler(Events.EPOCH_COMPLETED(every=1), self, 'epoch') + + def write_images(self, epoch): + if not self.plot_data or not len(self.plot_data): + return + + all_imgs = [] + titles = [] + for region in sorted(self.plot_data.keys()): + all_imgs.extend(self.plot_data[region]) + metric = self.metric_data.get(region) + dice = '{:.4f}'.format(metric.mean()) if self.compute_metric and metric else '' + stdev = '{:.4f}'.format(metric.stdev()) if self.compute_metric and metric else '' + titles.extend([ + 'img({})'.format(region), + 'lab({})'.format(region), + 'out({}, dice => mean:{}, stdev:{})'.format( + region, dice, stdev) if self.compute_metric else 'out({})'.format(region) + ]) + + colors = [(0, 0, 255), (0, 0, 255), (255, 0, 0)] + img_tensor = make_grid_with_titles( + tensor=torch.from_numpy(np.array(all_imgs)), + titles=titles, + colors=colors, + nrow=3, + normalize=True, + pad_value=2) + self.writer.add_image(tag='Deepgrow Regions', img_tensor=img_tensor, global_step=epoch) + + logging.info("Saved {} Regions {} into Tensorboard at epoch: {}".format( + len(self.plot_data), sorted([*self.plot_data]), epoch)) + self.writer.flush() + + def write_region_metrics(self, epoch): + metric_sum = 0 + means = {} + stdevs = {} + for region in self.metric_data: + metric = self.metric_data[region].mean() + stdev = self.metric_data[region].stdev() + if self.merge_scalar: + means['{:0>2d}'.format(region)] = metric + stdevs['{:0>2d}'.format(region)] = stdev + else: + if self.add_stdev: + self.writer.add_scalar("{}_{:0>2d}_mean".format(self.tag_name, region), metric, epoch) + self.writer.add_scalar("{}_{:0>2d}_mean+".format(self.tag_name, region), metric + stdev, epoch) + self.writer.add_scalar("{}_{:0>2d}_mean-".format(self.tag_name, region), metric - stdev, epoch) + else: + self.writer.add_scalar("{}_{:0>2d}".format(self.tag_name, region), metric, epoch) + metric_sum += metric + if self.merge_scalar: + self.writer.add_scalars("{}_region".format(self.tag_name), means, epoch) + + if len(self.metric_data) > 1: + metric_avg = metric_sum / len(self.metric_data) + self.writer.add_scalar("{}_regions_avg".format(self.tag_name), metric_avg, epoch) + self.writer.flush() + + def __call__(self, engine: Engine, action) -> None: + total_steps = engine.state.iteration + if total_steps < engine.state.epoch_length: + total_steps = engine.state.epoch_length * (engine.state.epoch - 1) + total_steps + + if action == 'epoch' and not self.fold_size: + epoch = engine.state.epoch + elif self.fold_size and total_steps % self.fold_size == 0: + epoch = int(total_steps / self.fold_size) + else: + epoch = None + + if epoch: + self.write_images(epoch) + if self.add_scalar: + self.write_region_metrics(epoch) + + if action == 'epoch' or epoch: + self.plot_data = {} + self.metric_data = {} + return + + device = engine.state.device + batch_data = engine.state.batch + output_data = engine.state.output + + for bidx in range(len(batch_data.get('region', []))): + region = batch_data.get('region')[bidx] + region = region.item() if torch.is_tensor(region) else region + + if self.plot_data.get(region) is None: + self.plot_data[region] = [ + rescale_array(batch_data["image"][bidx][0].detach().cpu().numpy()[np.newaxis], 0, 1), + rescale_array(batch_data["label"][bidx].detach().cpu().numpy(), 0, 1), + rescale_array(output_data['pred'][bidx].detach().cpu().numpy(), 0, 1) + ] + + if self.compute_metric: + if self.metric_data.get(region) is None: + self.metric_data[region] = MeanDice() + self.metric_data[region].update( + y_pred=output_data['pred'][bidx].to(device), + y=batch_data['label'][bidx].to(device), + batched=False) + + +class SegmentationSaver: + def __init__( + self, + output_dir: str = "./runs", + images=True + ): + self.output_dir = output_dir + self.images = images + os.makedirs(self.output_dir, exist_ok=True) + + def attach(self, engine: Engine) -> None: + if not engine.has_event_handler(self, Events.ITERATION_COMPLETED): + engine.add_event_handler(Events.ITERATION_COMPLETED, self) + + def __call__(self, engine: Engine): + batch_data = engine.state.batch + output_data = engine.state.output + device = engine.state.device + tag = '' + if torch.distributed.is_initialized(): + tag = 'r{}-'.format(torch.distributed.get_rank()) + + for bidx in range(len(batch_data.get('image'))): + step = engine.state.iteration + + image = batch_data['image'][bidx][0].detach().cpu().numpy()[np.newaxis] + label = batch_data['label'][bidx].detach().cpu().numpy() + pred = output_data['pred'][bidx].detach().cpu().numpy() + dice = compute_meandice( + y_pred=output_data['pred'][bidx][None].to(device), + y=batch_data['label'][bidx][None].to(device), + include_background=False).mean() + + np.savez(os.path.join(self.output_dir, "{}img_label_pred_{:0>4d}_{:0>2d}_{:.4f}".format( + tag, step, bidx, dice)), image, label, pred) + + if self.images: + torchvision.utils.save_image( + tensor=torch.from_numpy(np.array([ + rescale_array(image, 0, 1), + rescale_array(label, 0, 1), + rescale_array(pred, 0, 1) + ])), + nrow=3, + pad_value=2, + fp=os.path.join(self.output_dir, "{}img_label_pred_{:0>4d}_{:0>2d}_{:.4f}.png".format( + tag, step, bidx, dice)) + ) diff --git a/monai/apps/deepgrow/interaction.py b/monai/apps/deepgrow/interaction.py new file mode 100644 index 0000000000..7e67add613 --- /dev/null +++ b/monai/apps/deepgrow/interaction.py @@ -0,0 +1,61 @@ +from typing import Dict, Optional + +import torch +from ignite.engine import Engine, Events +from torch.cuda.amp import autocast + +from monai.engines.utils import CommonKeys +from monai.transforms import Transform + + +# TODO:: Unit Test + +class Interaction: + """ + Deepgrow Training/Evaluation iteration method with interactions (simulation of clicks) support for image and label. + + Args: + transforms: execute additional transformation during every iteration (before train). + Typically, several Tensor based transforms composed by `Compose`. + max_interactions: maximum number of interactions per iteration + train: training or evaluation + key_probability: field name to fill probability for every interaction + """ + + def __init__( + self, + transforms: Optional[Transform], + max_interactions: int, + train: bool, + key_probability: str = "p_interact" + ) -> None: + self.transforms = transforms + self.max_interactions = max_interactions + self.train = train + self.key_probability = key_probability + + def attach(self, engine: Engine) -> None: + engine.add_event_handler(Events.ITERATION_STARTED, self) + + def __call__(self, engine: Engine, batchdata: Dict[str, torch.Tensor]): + if batchdata is None: + raise ValueError("Must provide batch data for current iteration.") + + for j in range(self.max_interactions): + inputs, _ = engine.prepare_batch(batchdata) + inputs = inputs.to(engine.state.device) + + engine.network.eval() + with torch.no_grad(): + if engine.amp: + with autocast(): + predictions = engine.inferer(inputs, engine.network) + else: + predictions = engine.inferer(inputs, engine.network) + + batchdata.update({CommonKeys.PRED: predictions}) + batchdata[self.key_probability] = torch.as_tensor( + ([1.0 - ((1.0 / self.max_interactions) * j)] if self.train else [1.0]) * len(inputs)) + batchdata = self.transforms(batchdata) + + return engine._iteration(engine, batchdata) diff --git a/monai/apps/deepgrow/train.ipynb b/monai/apps/deepgrow/train.ipynb new file mode 100644 index 0000000000..9b9b1b917d --- /dev/null +++ b/monai/apps/deepgrow/train.ipynb @@ -0,0 +1,299 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import tempfile\n", + "import time\n", + "\n", + "import torch\n", + "\n", + "from monai.apps.deepgrow import (\n", + " AddInitialSeedPoint,\n", + " AddGuidanceSignal,\n", + " InteractionFindDiscrepancyRegions,\n", + " InteractionAddRandomGuidance,\n", + " InteractionAddGuidanceSignal,\n", + " Interaction,\n", + " DeepgrowStatsHandler,\n", + " DeepgrowDataset\n", + ")\n", + "from monai.data.dataloader import DataLoader\n", + "from monai.engines import SupervisedEvaluator\n", + "from monai.engines import SupervisedTrainer\n", + "from monai.handlers import (\n", + " StatsHandler,\n", + " TensorBoardStatsHandler,\n", + " ValidationHandler,\n", + " LrScheduleHandler,\n", + " CheckpointSaver,\n", + " MeanDice)\n", + "from monai.inferers import SimpleInferer\n", + "from monai.losses import DiceLoss\n", + "from monai.networks.nets import BasicUnet\n", + "from monai.transforms import (\n", + " Compose,\n", + " LoadNumpyd,\n", + " AddChanneld,\n", + " ToTensord,\n", + " ToNumpyd,\n", + " NormalizeIntensityd,\n", + " Activationsd,\n", + " AsDiscreted,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\", '/workspace/Data/deepgrow_spleen')\n", + "root_dir = tempfile.mkdtemp() if directory is None else directory\n", + "os.makedirs(root_dir, exist_ok=True)\n", + "print(root_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "network = BasicUnet(dimensions=2, in_channels=3, out_channels=1, features=(64, 128, 256, 512, 1024, 64))\n", + "\n", + "pre_transforms = Compose([\n", + " LoadNumpyd(keys=('image', 'label')),\n", + " AddChanneld(keys=('image', 'label')),\n", + " AddInitialSeedPoint(\n", + " label_field='label',\n", + " positive_guidance_field='positive_guidance',\n", + " negative_guidance_field='negative_guidance'),\n", + " NormalizeIntensityd(keys='image', subtrahend=208.0, divisor=388.0),\n", + " AddGuidanceSignal(\n", + " field='image',\n", + " positive_guidance_field='positive_guidance',\n", + " negative_guidance_field='negative_guidance'),\n", + " ToTensord(keys=['image', 'label'])\n", + "])\n", + "\n", + "interaction_transforms = Compose([\n", + " Activationsd(keys='pred', sigmoid=True),\n", + " ToNumpyd(keys=['image', 'label', 'pred', 'positive_guidance', 'negative_guidance', 'p_interact']),\n", + " InteractionFindDiscrepancyRegions(\n", + " prediction_field='pred',\n", + " label_field='label',\n", + " positive_disparity_field='positive_disparity',\n", + " negative_disparity_field='negative_disparity'),\n", + " InteractionAddRandomGuidance(\n", + " label_field='label',\n", + " positive_guidance_field='positive_guidance',\n", + " negative_guidance_field='negative_guidance',\n", + " positive_disparity_field='positive_disparity',\n", + " negative_disparity_field='negative_disparity',\n", + " p_interact_field='p_interact'),\n", + " InteractionAddGuidanceSignal(\n", + " field='image',\n", + " positive_guidance_field='positive_guidance',\n", + " negative_guidance_field='negative_guidance'),\n", + " ToTensord(keys=['image', 'label'])\n", + "])\n", + "\n", + "post_transforms = Compose([\n", + " Activationsd(keys='pred', sigmoid=True),\n", + " AsDiscreted(keys='pred', threshold_values=True, logit_thresh=0.5)\n", + "])\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_ds = DeepgrowDataset(\n", + " dimension=2,\n", + " pixdim=[1.0, 1.0, 1.0],\n", + " spatial_size=[512, 512],\n", + " root_dir=root_dir,\n", + " transform=pre_transforms,\n", + " section=\"training\",\n", + " cache_num=0,\n", + " limit=1,\n", + " task=\"Task09_Spleen\"\n", + ")\n", + "train_loader = DataLoader(train_ds, batch_size=4, shuffle=True, num_workers=4)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "val_ds = DeepgrowDataset(\n", + " dimension=2,\n", + " pixdim=[1.0, 1.0, 1.0],\n", + " spatial_size=[512, 512],\n", + " root_dir=root_dir,\n", + " transform=pre_transforms,\n", + " section=\"validation\",\n", + " cache_num=0,\n", + " limit=1,\n", + " task=\"Task09_Spleen\"\n", + ")\n", + "val_loader = DataLoader(val_ds, batch_size=4, shuffle=False, num_workers=4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "device = torch.device(\"cuda\")\n", + "network = network.to(device)\n", + "\n", + "output = os.path.join(root_dir, 'output')\n", + "os.makedirs(output, exist_ok=True)\n", + "\n", + "save_interval = 5\n", + "max_val_interactions = 5\n", + "max_train_interactions = 15\n", + "learning_rate = 0.0001\n", + "epochs = 5\n", + "amp = False\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# define event-handlers for engine\n", + "val_handlers = [\n", + " StatsHandler(output_transform=lambda x: None),\n", + " TensorBoardStatsHandler(log_dir=output, output_transform=lambda x: None),\n", + " DeepgrowStatsHandler(log_dir=output, tag_name='val_dice'),\n", + " CheckpointSaver(save_dir=output, save_dict={\"net\": network}, save_key_metric=True, save_final=True,\n", + " save_interval=save_interval, final_filename='model.pt')\n", + "]\n", + "\n", + "evaluator = SupervisedEvaluator(\n", + " device=device,\n", + " val_data_loader=val_loader,\n", + " network=network,\n", + " iteration_update=Interaction(\n", + " transforms=interaction_transforms,\n", + " max_interactions=max_val_interactions,\n", + " train=False),\n", + " inferer=SimpleInferer(),\n", + " post_transform=post_transforms,\n", + " key_val_metric={\n", + " \"val_dice\": MeanDice(\n", + " include_background=False,\n", + " output_transform=lambda x: (x[\"pred\"], x[\"label\"])\n", + " )\n", + " },\n", + " val_handlers=val_handlers\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loss_function = DiceLoss(sigmoid=True, squared_pred=True)\n", + "optimizer = torch.optim.Adam(network.parameters(), learning_rate)\n", + "lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5000, gamma=0.1)\n", + "\n", + "train_handlers = [\n", + " LrScheduleHandler(lr_scheduler=lr_scheduler, print_lr=True),\n", + " ValidationHandler(validator=evaluator, interval=1, epoch_level=True),\n", + " StatsHandler(tag_name=\"train_loss\", output_transform=lambda x: x[\"loss\"]),\n", + " TensorBoardStatsHandler(log_dir=output, tag_name=\"train_loss\", output_transform=lambda x: x[\"loss\"]),\n", + " CheckpointSaver(save_dir=output, save_dict={\"net\": network, \"opt\": optimizer, \"lr\": lr_scheduler},\n", + " save_interval=save_interval, save_final=True, final_filename='checkpoint.pt'),\n", + "]\n", + "trainer = SupervisedTrainer(\n", + " device=device,\n", + " max_epochs=epochs,\n", + " train_data_loader=train_loader,\n", + " network=network,\n", + " iteration_update=Interaction(\n", + " transforms=interaction_transforms,\n", + " max_interactions=max_train_interactions,\n", + " train=True),\n", + " optimizer=optimizer,\n", + " loss_function=loss_function,\n", + " inferer=SimpleInferer(),\n", + " post_transform=post_transforms,\n", + " amp=amp,\n", + " key_train_metric={\n", + " \"train_dice\": MeanDice(\n", + " include_background=False,\n", + " output_transform=lambda x: (x[\"pred\"], x[\"label\"])\n", + " )\n", + " },\n", + " train_handlers=train_handlers,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "start_time = time.time()\n", + "trainer.run()\n", + "end_time = time.time()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Total Training Time {}'.format(end_time - start_time))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/monai/apps/deepgrow/train.py b/monai/apps/deepgrow/train.py new file mode 100644 index 0000000000..71ffd53cc0 --- /dev/null +++ b/monai/apps/deepgrow/train.py @@ -0,0 +1,197 @@ +import os +import tempfile +import time + +import torch + +from monai.apps.deepgrow import ( + AddInitialSeedPoint, + AddGuidanceSignal, + InteractionFindDiscrepancyRegions, + InteractionAddRandomGuidance, + InteractionAddGuidanceSignal, + Interaction, + DeepgrowStatsHandler, + DeepgrowDataset +) +from monai.data.dataloader import DataLoader +from monai.engines import SupervisedEvaluator +from monai.engines import SupervisedTrainer +from monai.handlers import ( + StatsHandler, + TensorBoardStatsHandler, + ValidationHandler, + LrScheduleHandler, + CheckpointSaver, + MeanDice) +from monai.inferers import SimpleInferer +from monai.losses import DiceLoss +from monai.networks.nets import BasicUnet +from monai.transforms import ( + Compose, + LoadNumpyd, + AddChanneld, + ToTensord, + ToNumpyd, + NormalizeIntensityd, + Activationsd, + AsDiscreted, +) + +directory = os.environ.get("MONAI_DATA_DIRECTORY", '/workspace/Data/deepgrow_spleen') +root_dir = tempfile.mkdtemp() if directory is None else directory +os.makedirs(root_dir, exist_ok=True) +print(root_dir) + +network = BasicUnet(dimensions=2, in_channels=3, out_channels=1, features=(64, 128, 256, 512, 1024, 64)) + +pre_transforms = Compose([ + LoadNumpyd(keys=('image', 'label')), + AddChanneld(keys=('image', 'label')), + AddInitialSeedPoint( + label_field='label', + positive_guidance_field='positive_guidance', + negative_guidance_field='negative_guidance'), + NormalizeIntensityd(keys='image', subtrahend=208.0, divisor=388.0), + AddGuidanceSignal( + field='image', + positive_guidance_field='positive_guidance', + negative_guidance_field='negative_guidance'), + ToTensord(keys=['image', 'label']) +]) + +interaction_transforms = Compose([ + Activationsd(keys='pred', sigmoid=True), + ToNumpyd(keys=['image', 'label', 'pred', 'positive_guidance', 'negative_guidance', 'p_interact']), + InteractionFindDiscrepancyRegions( + prediction_field='pred', + label_field='label', + positive_disparity_field='positive_disparity', + negative_disparity_field='negative_disparity'), + InteractionAddRandomGuidance( + label_field='label', + positive_guidance_field='positive_guidance', + negative_guidance_field='negative_guidance', + positive_disparity_field='positive_disparity', + negative_disparity_field='negative_disparity', + p_interact_field='p_interact'), + InteractionAddGuidanceSignal( + field='image', + positive_guidance_field='positive_guidance', + negative_guidance_field='negative_guidance'), + ToTensord(keys=['image', 'label']) +]) + +post_transforms = Compose([ + Activationsd(keys='pred', sigmoid=True), + AsDiscreted(keys='pred', threshold_values=True, logit_thresh=0.5) +]) + +train_ds = DeepgrowDataset( + dimension=2, + pixdim=[1.0, 1.0, 1.0], + spatial_size=[512, 512], + root_dir=root_dir, + transform=pre_transforms, + section="training", + cache_num=0, + limit=1, + task="Task09_Spleen", + download=True +) +train_loader = DataLoader(train_ds, batch_size=4, shuffle=True, num_workers=4) + +val_ds = DeepgrowDataset( + dimension=2, + pixdim=[1.0, 1.0, 1.0], + spatial_size=[512, 512], + root_dir=root_dir, + transform=pre_transforms, + section="validation", + cache_num=0, + limit=1, + task="Task09_Spleen" +) +val_loader = DataLoader(val_ds, batch_size=4, shuffle=False, num_workers=4) + +device = torch.device("cuda") +network = network.to(device) + +output = os.path.join(root_dir, 'output') +os.makedirs(output, exist_ok=True) + +save_interval = 5 +max_val_interactions = 5 +max_train_interactions = 15 +learning_rate = 0.0001 +epochs = 5 +amp = False + +# define event-handlers for engine +val_handlers = [ + StatsHandler(output_transform=lambda x: None), + TensorBoardStatsHandler(log_dir=output, output_transform=lambda x: None), + DeepgrowStatsHandler(log_dir=output, tag_name='val_dice'), + CheckpointSaver(save_dir=output, save_dict={"net": network}, save_key_metric=True, save_final=True, + save_interval=save_interval, final_filename='model.pt') +] + +evaluator = SupervisedEvaluator( + device=device, + val_data_loader=val_loader, + network=network, + iteration_update=Interaction( + transforms=interaction_transforms, + max_interactions=max_val_interactions, + train=False), + inferer=SimpleInferer(), + post_transform=post_transforms, + key_val_metric={ + "val_dice": MeanDice( + include_background=False, + output_transform=lambda x: (x["pred"], x["label"]) + ) + }, + val_handlers=val_handlers +) + +loss_function = DiceLoss(sigmoid=True, squared_pred=True) +optimizer = torch.optim.Adam(network.parameters(), learning_rate) +lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5000, gamma=0.1) + +train_handlers = [ + LrScheduleHandler(lr_scheduler=lr_scheduler, print_lr=True), + ValidationHandler(validator=evaluator, interval=1, epoch_level=True), + StatsHandler(tag_name="train_loss", output_transform=lambda x: x["loss"]), + TensorBoardStatsHandler(log_dir=output, tag_name="train_loss", output_transform=lambda x: x["loss"]), + CheckpointSaver(save_dir=output, save_dict={"net": network, "opt": optimizer, "lr": lr_scheduler}, + save_interval=save_interval, save_final=True, final_filename='checkpoint.pt'), +] +trainer = SupervisedTrainer( + device=device, + max_epochs=epochs, + train_data_loader=train_loader, + network=network, + iteration_update=Interaction( + transforms=interaction_transforms, + max_interactions=max_train_interactions, + train=True), + optimizer=optimizer, + loss_function=loss_function, + inferer=SimpleInferer(), + post_transform=post_transforms, + amp=amp, + key_train_metric={ + "train_dice": MeanDice( + include_background=False, + output_transform=lambda x: (x["pred"], x["label"]) + ) + }, + train_handlers=train_handlers, +) + +start_time = time.time() +trainer.run() +end_time = time.time() + +print('Total Training Time {}'.format(end_time - start_time)) diff --git a/monai/apps/deepgrow/transforms.py b/monai/apps/deepgrow/transforms.py new file mode 100644 index 0000000000..634b1e2c9d --- /dev/null +++ b/monai/apps/deepgrow/transforms.py @@ -0,0 +1,306 @@ +import numpy as np +import skimage +import skimage.measure +from scipy.ndimage.filters import gaussian_filter +from scipy.ndimage.morphology import distance_transform_cdt + + +# TODO:: Fix Base Class +# TODO:: Fix class names (for interactions) +# TODO:: Fix param names for each class init +# TODO:: Add 3D support for each of the following transforms +# TODO:: Unit Test +##################################################################################### +# FOR 2D +# Following are used while training +##################################################################################### +class AddInitialSeedPoint(object): + def __init__(self, label_field, positive_guidance_field, negative_guidance_field): + self.label_field = label_field + self.positive_guidance_field = positive_guidance_field + self.negative_guidance_field = negative_guidance_field + + def __call__(self, data): + positive_guidance = data[self.positive_guidance_field] + negative_guidance = data[self.negative_guidance_field] + + if type(positive_guidance) is np.ndarray: + positive_guidance = positive_guidance.tolist() + + if type(negative_guidance) is np.ndarray: + negative_guidance = negative_guidance.tolist() + + curr_label = data[self.label_field] + curr_label = (curr_label > 0.5).astype(np.float32) + + blobs_labels = skimage.measure.label(curr_label.astype(int), background=0) + assert np.max(blobs_labels) > 0 + + for ridx in range(1, 6): + curr_label = (blobs_labels == ridx).astype(np.float32) + if np.sum(curr_label) == 0: + positive_guidance.append([-1, -1, -1]) + negative_guidance.append([-1, -1, -1]) + continue + + distance = distance_transform_cdt(curr_label).flatten() + probability = np.exp(distance) - 1.0 + + idx = np.where(curr_label.flatten() > 0)[0] + seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) + dst = distance[seed] + + pg = np.asarray(np.unravel_index(seed, curr_label.shape)).transpose().tolist()[0] + pg[0] = dst[0] + + assert curr_label[..., pg[-2], pg[-1]] == 1 + assert len(pg) == 3 + + positive_guidance.append(pg) + negative_guidance.append([-1, -1, -1]) + + data[self.positive_guidance_field] = np.asarray(positive_guidance) + data[self.negative_guidance_field] = np.asarray(negative_guidance) + return data + + +class AddGuidanceSignal(object): + def __init__(self, field, positive_guidance_field, negative_guidance_field, sigma=2): + self.field = field + self.sigma = sigma + self.positive_guidance_field = positive_guidance_field + self.negative_guidance_field = negative_guidance_field + + def signal(self, img, pos, neg): + signal = np.zeros((2, img.shape[-2], img.shape[-1]), dtype=np.float32) + for p in pos: + if np.any(np.asarray(p) < 0): + continue + signal[0, int(p[-2]), int(p[-1])] = 1.0 + + signal[0] = gaussian_filter(signal[0], sigma=self.sigma) + signal[0] = (signal[0] - np.min(signal[0])) / (np.max(signal[0]) - np.min(signal[0])) + + assert np.max(signal[0]) == 1 + + for n in neg: + if np.any(np.asarray(n) < 0): + continue + signal[1, int(n[-2]), int(n[-1])] = 1.0 + + if np.max(signal[1]) > 0: + signal[1] = gaussian_filter(signal[1], sigma=self.sigma) + signal[1] = (signal[1] - np.min(signal[1])) / (np.max(signal[1]) - np.min(signal[1])) + + return signal + + def __call__(self, data): + img = data[self.field] + pos = data[self.positive_guidance_field] + neg = data[self.negative_guidance_field] + + sig = self.signal(img, pos, neg) + data[self.field] = np.concatenate([img, sig], axis=0) + return data + + +##################################################################################### +# FOR 2D +# Following are click-transforms used by batch training/validation step +##################################################################################### +# NOTE:: All the Interaction* Works on batch Data + +class InteractionFindDiscrepancyRegions(object): + def __init__(self, prediction_field, label_field, positive_disparity_field, negative_disparity_field): + self.prediction_field = prediction_field + self.label_field = label_field + self.positive_disparity_field = positive_disparity_field + self.negative_disparity_field = negative_disparity_field + + def __call__(self, data): + positive_disparity = [] + negative_disparity = [] + + for pred, gt in zip(data[self.prediction_field], data[self.label_field]): + pred = (pred > 0.5).astype(np.float32) + gt = (gt > 0.5).astype(np.float32) + + disparity = gt - pred + + negative_disparity.append((disparity < 0).astype(np.float32)) + positive_disparity.append((disparity > 0).astype(np.float32)) + + data[self.positive_disparity_field] = positive_disparity + data[self.negative_disparity_field] = negative_disparity + return data + + +class InteractionAddRandomGuidance(object): + def __init__(self, label_field, positive_guidance_field, negative_guidance_field, positive_disparity_field, + negative_disparity_field, p_interact_field): + self.label_field = label_field + self.positive_guidance_field = positive_guidance_field + self.negative_guidance_field = negative_guidance_field + self.positive_disparity_field = positive_disparity_field + self.negative_disparity_field = negative_disparity_field + self.p_interact_field = p_interact_field + + def __call__(self, data): + positive_guidance = data[self.positive_guidance_field] + negative_guidance = data[self.negative_guidance_field] + + if type(positive_guidance) is np.ndarray: + positive_guidance = positive_guidance.tolist() + + if type(negative_guidance) is np.ndarray: + negative_guidance = negative_guidance.tolist() + + for i, pos_discr, neg_discr, curr_label, probability in zip( + range(len(data[self.label_field])), + data[self.positive_disparity_field], + data[self.negative_disparity_field], + data[self.label_field], + data[self.p_interact_field] + ): + will_interact = np.random.choice([True, False], p=[probability, 1.0 - probability]) + if not will_interact: + continue + + can_be_negative = np.sum(neg_discr) > 0 + can_be_positive = np.sum(pos_discr) > 0 + correct_pos = np.sum(pos_discr) >= np.sum(neg_discr) + + if correct_pos and can_be_positive: + distance = distance_transform_cdt(pos_discr).flatten() + probability = np.exp(distance) - 1.0 + idx = np.where(pos_discr.flatten() > 0)[0] + + if np.sum(pos_discr > 0) > 0: + seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) + dst = distance[seed] + + pg = np.asarray(np.unravel_index(seed, pos_discr.shape)).transpose().tolist()[0] + pg[0] = dst[0] + + assert curr_label[..., pg[-2], pg[-1]] == 1 + assert len(pg) == 3 + + negative_guidance[i].append([-1, -1, -1]) + positive_guidance[i].append(pg) + + if not correct_pos and can_be_negative: + distance = distance_transform_cdt(neg_discr).flatten() + + probability = np.exp(distance) - 1.0 + idx = np.where(neg_discr.flatten() > 0)[0] + + if np.sum(neg_discr > 0) > 0: + seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) + dst = distance[seed] + + ng = np.asarray(np.unravel_index(seed, neg_discr.shape)).transpose().tolist()[0] + ng[0] = dst[0] + + assert curr_label[..., ng[-2], ng[-1]] == 0 + assert len(ng) == 3 + + negative_guidance[i].append(ng) + positive_guidance[i].append([-1, -1, -1]) + else: + positive_guidance[i].append([-1, -1, -1]) + negative_guidance[i].append([-1, -1, -1]) + + data[self.positive_guidance_field] = np.asarray(positive_guidance) + data[self.negative_guidance_field] = np.asarray(negative_guidance) + return data + + +class InteractionAddGuidanceSignal(AddGuidanceSignal): + def __init__(self, field, positive_guidance_field, negative_guidance_field, sigma=2, number_intensity_ch=1): + super().__init__(field, positive_guidance_field, negative_guidance_field, sigma) + self.number_intensity_ch = number_intensity_ch + + def __call__(self, data): + images = [] + for img, pos, neg in zip( + data[self.field], + data[self.positive_guidance_field], + data[self.negative_guidance_field] + ): + img = img[0:0 + self.number_intensity_ch, ...] # image can have only number_intensity_ch channels + signal = self.signal(img, pos, neg) + images.append(np.concatenate([img, signal], axis=0)) + + data[self.field] = images + return data + + +class InteractionAddGuidanceSignalClickSize(InteractionAddGuidanceSignal): + def __init__(self, bins, sigma_multiplier, normalize=False, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.normalize = normalize + self.bins = bins + self.sigma_multiplier = sigma_multiplier + + assert len(self.bins) == len(self.sigma_multiplier) + + @staticmethod + def digitize(array, bins): + array = np.asarray(array) + bins = np.asarray(bins) + + distances = np.sqrt((array[:, np.newaxis] - bins[np.newaxis]) ** 2) + assignment = np.argmin(distances, axis=1) + return assignment + + def __call__(self, data): + img = data[self.field] + pos = data[self.positive_guidance_field] + neg = data[self.negative_guidance_field] + + img = img[0:0 + self.number_intensity_ch, ...] # image can have only number_intensity_ch channels + signal = np.zeros((2, img.shape[-2], img.shape[-1]), dtype=np.float32) + + positive_interactions = np.asarray(pos) + positive_interactions = positive_interactions[positive_interactions[:, 0] > 0] + + if len(positive_interactions) > 0: + level = self.digitize(positive_interactions[:, 0], self.bins) + + for l in range(np.max(level), -1, -1): + curr_interactions = positive_interactions[level == l] + for location in curr_interactions: + if np.any(location < 0): + continue + signal[0, int(location[-2]), int(location[-1])] = 1.0 + + signal[0] = gaussian_filter(signal[0], sigma=self.sigma * self.sigma_multiplier[l]) + if self.normalize: + signal[0] = (signal[0] - np.min(signal[0])) / (np.max(signal[0]) - np.min(signal[0])) + + signal[0] = (signal[0] - np.min(signal[0])) / (np.max(signal[0]) - np.min(signal[0])) + assert np.isclose(np.max(signal[0]), 1) + + negative_interactions = np.asarray(neg) + negative_interactions = negative_interactions[negative_interactions[:, 0] > 0] + + if len(negative_interactions) > 0: + level = self.digitize(negative_interactions[:, 0], self.bins) + + for l in range(np.max(level), -1, -1): + current_locations = negative_interactions[level == l] + for location in current_locations: + if np.any(location < 0): + continue + signal[1, int(location[-2]), int(location[-1])] = 1.0 + + signal[1] = gaussian_filter(signal[1], sigma=self.sigma * self.sigma_multiplier[l]) + if self.normalize: + signal[1] = (signal[1] - np.min(signal[1])) / (np.max(signal[1]) - np.min(signal[1])) + + signal[1] = (signal[1] - np.min(signal[1])) / (np.max(signal[1]) - np.min(signal[1])) + assert np.isclose(np.max(signal[1]), 1) + + data[self.field] = np.concatenate([img, signal], axis=0) + return data diff --git a/monai/handlers/utils.py b/monai/handlers/utils.py index e401e18b0c..bb2da0e3f7 100644 --- a/monai/handlers/utils.py +++ b/monai/handlers/utils.py @@ -9,13 +9,19 @@ # See the License for the specific language governing permissions and # limitations under the License. +import math from typing import TYPE_CHECKING, Any, Callable +import cv2 +import numpy as np import torch import torch.distributed as dist +from torchvision.transforms import transforms from monai.utils import exact_version, optional_import +irange = range + if TYPE_CHECKING: from ignite.engine import Engine else: @@ -54,3 +60,108 @@ def all_gather(tensor): output = [torch.zeros_like(tensor) for _ in range(dist.get_world_size())] dist.all_gather(output, tensor) return torch.cat(output, dim=0) + + +def make_grid_with_titles(tensor, titles, colors=None, title_pos=None, nrow=8, padding=2, normalize=False, range=None, + scale_each=False, pad_value=0): + """Make a grid of images. + + Args: + tensor (Tensor or list): 4D mini-batch Tensor of shape (B x C x H x W) + or a list of images all of the same size. + titles (list): ( [title_1,title_2,title_3,...title_n]) where labels is Bx1 vector of some titles + colors (list): ( [color_1,color_2,color_3,...title_n]) where color is [R,G,B] + title_pos(x,y): Title position on the image + nrow (int, optional): Number of images displayed in each row of the grid. + The final grid size is ``(B / nrow, nrow)``. Default: ``8``. + padding (int, optional): amount of padding. Default: ``2``. + normalize (bool, optional): If True, shift the image to the range (0, 1), + by the min and max values specified by :attr:`range`. Default: ``False``. + range (tuple, optional): tuple (min, max) where min and max are numbers, + then these numbers are used to normalize the image. By default, min and max + are computed from the tensor. + scale_each (bool, optional): If ``True``, scale each image in the batch of + images separately rather than the (min, max) over all images. Default: ``False``. + pad_value (float, optional): Value for the padded pixels. Default: ``0``. + + Example: + See this notebook `here `_ + + """ + if not (torch.is_tensor(tensor) or + (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): + raise TypeError('tensor or list of tensors expected, got {}'.format(type(tensor))) + + # if list of tensors, convert to a 4D mini-batch Tensor + if isinstance(tensor, list): + tensor = torch.stack(tensor, dim=0) + + if tensor.dim() == 2: # single image H x W + tensor = tensor.unsqueeze(0) + if tensor.dim() == 3: # single image + if tensor.size(0) == 1: # if single-channel, convert to 3-channel + tensor = torch.cat((tensor, tensor, tensor), 0) + tensor = tensor.unsqueeze(0) + + if tensor.dim() == 4 and tensor.size(1) == 1: # single-channel images + tensor = torch.cat((tensor, tensor, tensor), 1) + + if normalize is True: + tensor = tensor.clone() # avoid modifying tensor in-place + if range is not None: + assert isinstance(range, tuple), \ + "range has to be a tuple (min, max) if specified. min and max are numbers" + + def norm_ip(img, min, max): + img.clamp_(min=min, max=max) + img.add_(-min).div_(max - min + 1e-5) + + def norm_range(t, range): + if range is not None: + norm_ip(t, range[0], range[1]) + else: + norm_ip(t, float(t.min()), float(t.max())) + + if scale_each is True: + for t in tensor: # loop over mini-batch dimension + norm_range(t, range) + else: + norm_range(tensor, range) + + if tensor.size(0) == 1: + return tensor.squeeze(0) + + # Title + font = 1 + fontScale = 1 + thickness = 1 + colors = colors if colors else [(255, 0, 0)] + org = title_pos if title_pos else (10, 40) + + # make the mini-batch of images into a grid + nmaps = tensor.size(0) + xmaps = min(nrow, nmaps) + ymaps = int(math.ceil(float(nmaps) / xmaps)) + height, width = int(tensor.size(2) + padding), int(tensor.size(3) + padding) + num_channels = tensor.size(1) + grid = tensor.new_full((num_channels, height * ymaps + padding, width * xmaps + padding), pad_value) + k = 0 + for y in irange(ymaps): + for x in irange(xmaps): + if k >= nmaps: + break + + working_tensor = tensor[k] + color = colors[k % len(colors)] + if titles is not None: + working_image = cv2.UMat( + np.asarray(np.transpose(working_tensor.numpy(), (1, 2, 0)) * 255).astype('uint8')) + image = cv2.putText(working_image, f'{str(titles[k])}', org, font, + fontScale, color, thickness, cv2.LINE_AA) + working_tensor = transforms.ToTensor()(image.get()) + + grid.narrow(1, y * height + padding, height - padding) \ + .narrow(2, x * width + padding, width - padding) \ + .copy_(working_tensor) + k = k + 1 + return grid From 4feb450f4643f79dccba99ffbab6547c4ff52e3f Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Mon, 7 Dec 2020 18:39:14 -0800 Subject: [PATCH 02/40] Remove sample train scripts from PR Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/train.ipynb | 299 -------------------------------- monai/apps/deepgrow/train.py | 197 --------------------- 2 files changed, 496 deletions(-) delete mode 100644 monai/apps/deepgrow/train.ipynb delete mode 100644 monai/apps/deepgrow/train.py diff --git a/monai/apps/deepgrow/train.ipynb b/monai/apps/deepgrow/train.ipynb deleted file mode 100644 index 9b9b1b917d..0000000000 --- a/monai/apps/deepgrow/train.ipynb +++ /dev/null @@ -1,299 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import tempfile\n", - "import time\n", - "\n", - "import torch\n", - "\n", - "from monai.apps.deepgrow import (\n", - " AddInitialSeedPoint,\n", - " AddGuidanceSignal,\n", - " InteractionFindDiscrepancyRegions,\n", - " InteractionAddRandomGuidance,\n", - " InteractionAddGuidanceSignal,\n", - " Interaction,\n", - " DeepgrowStatsHandler,\n", - " DeepgrowDataset\n", - ")\n", - "from monai.data.dataloader import DataLoader\n", - "from monai.engines import SupervisedEvaluator\n", - "from monai.engines import SupervisedTrainer\n", - "from monai.handlers import (\n", - " StatsHandler,\n", - " TensorBoardStatsHandler,\n", - " ValidationHandler,\n", - " LrScheduleHandler,\n", - " CheckpointSaver,\n", - " MeanDice)\n", - "from monai.inferers import SimpleInferer\n", - "from monai.losses import DiceLoss\n", - "from monai.networks.nets import BasicUnet\n", - "from monai.transforms import (\n", - " Compose,\n", - " LoadNumpyd,\n", - " AddChanneld,\n", - " ToTensord,\n", - " ToNumpyd,\n", - " NormalizeIntensityd,\n", - " Activationsd,\n", - " AsDiscreted,\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\", '/workspace/Data/deepgrow_spleen')\n", - "root_dir = tempfile.mkdtemp() if directory is None else directory\n", - "os.makedirs(root_dir, exist_ok=True)\n", - "print(root_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "network = BasicUnet(dimensions=2, in_channels=3, out_channels=1, features=(64, 128, 256, 512, 1024, 64))\n", - "\n", - "pre_transforms = Compose([\n", - " LoadNumpyd(keys=('image', 'label')),\n", - " AddChanneld(keys=('image', 'label')),\n", - " AddInitialSeedPoint(\n", - " label_field='label',\n", - " positive_guidance_field='positive_guidance',\n", - " negative_guidance_field='negative_guidance'),\n", - " NormalizeIntensityd(keys='image', subtrahend=208.0, divisor=388.0),\n", - " AddGuidanceSignal(\n", - " field='image',\n", - " positive_guidance_field='positive_guidance',\n", - " negative_guidance_field='negative_guidance'),\n", - " ToTensord(keys=['image', 'label'])\n", - "])\n", - "\n", - "interaction_transforms = Compose([\n", - " Activationsd(keys='pred', sigmoid=True),\n", - " ToNumpyd(keys=['image', 'label', 'pred', 'positive_guidance', 'negative_guidance', 'p_interact']),\n", - " InteractionFindDiscrepancyRegions(\n", - " prediction_field='pred',\n", - " label_field='label',\n", - " positive_disparity_field='positive_disparity',\n", - " negative_disparity_field='negative_disparity'),\n", - " InteractionAddRandomGuidance(\n", - " label_field='label',\n", - " positive_guidance_field='positive_guidance',\n", - " negative_guidance_field='negative_guidance',\n", - " positive_disparity_field='positive_disparity',\n", - " negative_disparity_field='negative_disparity',\n", - " p_interact_field='p_interact'),\n", - " InteractionAddGuidanceSignal(\n", - " field='image',\n", - " positive_guidance_field='positive_guidance',\n", - " negative_guidance_field='negative_guidance'),\n", - " ToTensord(keys=['image', 'label'])\n", - "])\n", - "\n", - "post_transforms = Compose([\n", - " Activationsd(keys='pred', sigmoid=True),\n", - " AsDiscreted(keys='pred', threshold_values=True, logit_thresh=0.5)\n", - "])\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "train_ds = DeepgrowDataset(\n", - " dimension=2,\n", - " pixdim=[1.0, 1.0, 1.0],\n", - " spatial_size=[512, 512],\n", - " root_dir=root_dir,\n", - " transform=pre_transforms,\n", - " section=\"training\",\n", - " cache_num=0,\n", - " limit=1,\n", - " task=\"Task09_Spleen\"\n", - ")\n", - "train_loader = DataLoader(train_ds, batch_size=4, shuffle=True, num_workers=4)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "val_ds = DeepgrowDataset(\n", - " dimension=2,\n", - " pixdim=[1.0, 1.0, 1.0],\n", - " spatial_size=[512, 512],\n", - " root_dir=root_dir,\n", - " transform=pre_transforms,\n", - " section=\"validation\",\n", - " cache_num=0,\n", - " limit=1,\n", - " task=\"Task09_Spleen\"\n", - ")\n", - "val_loader = DataLoader(val_ds, batch_size=4, shuffle=False, num_workers=4)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "device = torch.device(\"cuda\")\n", - "network = network.to(device)\n", - "\n", - "output = os.path.join(root_dir, 'output')\n", - "os.makedirs(output, exist_ok=True)\n", - "\n", - "save_interval = 5\n", - "max_val_interactions = 5\n", - "max_train_interactions = 15\n", - "learning_rate = 0.0001\n", - "epochs = 5\n", - "amp = False\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# define event-handlers for engine\n", - "val_handlers = [\n", - " StatsHandler(output_transform=lambda x: None),\n", - " TensorBoardStatsHandler(log_dir=output, output_transform=lambda x: None),\n", - " DeepgrowStatsHandler(log_dir=output, tag_name='val_dice'),\n", - " CheckpointSaver(save_dir=output, save_dict={\"net\": network}, save_key_metric=True, save_final=True,\n", - " save_interval=save_interval, final_filename='model.pt')\n", - "]\n", - "\n", - "evaluator = SupervisedEvaluator(\n", - " device=device,\n", - " val_data_loader=val_loader,\n", - " network=network,\n", - " iteration_update=Interaction(\n", - " transforms=interaction_transforms,\n", - " max_interactions=max_val_interactions,\n", - " train=False),\n", - " inferer=SimpleInferer(),\n", - " post_transform=post_transforms,\n", - " key_val_metric={\n", - " \"val_dice\": MeanDice(\n", - " include_background=False,\n", - " output_transform=lambda x: (x[\"pred\"], x[\"label\"])\n", - " )\n", - " },\n", - " val_handlers=val_handlers\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "loss_function = DiceLoss(sigmoid=True, squared_pred=True)\n", - "optimizer = torch.optim.Adam(network.parameters(), learning_rate)\n", - "lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5000, gamma=0.1)\n", - "\n", - "train_handlers = [\n", - " LrScheduleHandler(lr_scheduler=lr_scheduler, print_lr=True),\n", - " ValidationHandler(validator=evaluator, interval=1, epoch_level=True),\n", - " StatsHandler(tag_name=\"train_loss\", output_transform=lambda x: x[\"loss\"]),\n", - " TensorBoardStatsHandler(log_dir=output, tag_name=\"train_loss\", output_transform=lambda x: x[\"loss\"]),\n", - " CheckpointSaver(save_dir=output, save_dict={\"net\": network, \"opt\": optimizer, \"lr\": lr_scheduler},\n", - " save_interval=save_interval, save_final=True, final_filename='checkpoint.pt'),\n", - "]\n", - "trainer = SupervisedTrainer(\n", - " device=device,\n", - " max_epochs=epochs,\n", - " train_data_loader=train_loader,\n", - " network=network,\n", - " iteration_update=Interaction(\n", - " transforms=interaction_transforms,\n", - " max_interactions=max_train_interactions,\n", - " train=True),\n", - " optimizer=optimizer,\n", - " loss_function=loss_function,\n", - " inferer=SimpleInferer(),\n", - " post_transform=post_transforms,\n", - " amp=amp,\n", - " key_train_metric={\n", - " \"train_dice\": MeanDice(\n", - " include_background=False,\n", - " output_transform=lambda x: (x[\"pred\"], x[\"label\"])\n", - " )\n", - " },\n", - " train_handlers=train_handlers,\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "start_time = time.time()\n", - "trainer.run()\n", - "end_time = time.time()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print('Total Training Time {}'.format(end_time - start_time))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/monai/apps/deepgrow/train.py b/monai/apps/deepgrow/train.py deleted file mode 100644 index 71ffd53cc0..0000000000 --- a/monai/apps/deepgrow/train.py +++ /dev/null @@ -1,197 +0,0 @@ -import os -import tempfile -import time - -import torch - -from monai.apps.deepgrow import ( - AddInitialSeedPoint, - AddGuidanceSignal, - InteractionFindDiscrepancyRegions, - InteractionAddRandomGuidance, - InteractionAddGuidanceSignal, - Interaction, - DeepgrowStatsHandler, - DeepgrowDataset -) -from monai.data.dataloader import DataLoader -from monai.engines import SupervisedEvaluator -from monai.engines import SupervisedTrainer -from monai.handlers import ( - StatsHandler, - TensorBoardStatsHandler, - ValidationHandler, - LrScheduleHandler, - CheckpointSaver, - MeanDice) -from monai.inferers import SimpleInferer -from monai.losses import DiceLoss -from monai.networks.nets import BasicUnet -from monai.transforms import ( - Compose, - LoadNumpyd, - AddChanneld, - ToTensord, - ToNumpyd, - NormalizeIntensityd, - Activationsd, - AsDiscreted, -) - -directory = os.environ.get("MONAI_DATA_DIRECTORY", '/workspace/Data/deepgrow_spleen') -root_dir = tempfile.mkdtemp() if directory is None else directory -os.makedirs(root_dir, exist_ok=True) -print(root_dir) - -network = BasicUnet(dimensions=2, in_channels=3, out_channels=1, features=(64, 128, 256, 512, 1024, 64)) - -pre_transforms = Compose([ - LoadNumpyd(keys=('image', 'label')), - AddChanneld(keys=('image', 'label')), - AddInitialSeedPoint( - label_field='label', - positive_guidance_field='positive_guidance', - negative_guidance_field='negative_guidance'), - NormalizeIntensityd(keys='image', subtrahend=208.0, divisor=388.0), - AddGuidanceSignal( - field='image', - positive_guidance_field='positive_guidance', - negative_guidance_field='negative_guidance'), - ToTensord(keys=['image', 'label']) -]) - -interaction_transforms = Compose([ - Activationsd(keys='pred', sigmoid=True), - ToNumpyd(keys=['image', 'label', 'pred', 'positive_guidance', 'negative_guidance', 'p_interact']), - InteractionFindDiscrepancyRegions( - prediction_field='pred', - label_field='label', - positive_disparity_field='positive_disparity', - negative_disparity_field='negative_disparity'), - InteractionAddRandomGuidance( - label_field='label', - positive_guidance_field='positive_guidance', - negative_guidance_field='negative_guidance', - positive_disparity_field='positive_disparity', - negative_disparity_field='negative_disparity', - p_interact_field='p_interact'), - InteractionAddGuidanceSignal( - field='image', - positive_guidance_field='positive_guidance', - negative_guidance_field='negative_guidance'), - ToTensord(keys=['image', 'label']) -]) - -post_transforms = Compose([ - Activationsd(keys='pred', sigmoid=True), - AsDiscreted(keys='pred', threshold_values=True, logit_thresh=0.5) -]) - -train_ds = DeepgrowDataset( - dimension=2, - pixdim=[1.0, 1.0, 1.0], - spatial_size=[512, 512], - root_dir=root_dir, - transform=pre_transforms, - section="training", - cache_num=0, - limit=1, - task="Task09_Spleen", - download=True -) -train_loader = DataLoader(train_ds, batch_size=4, shuffle=True, num_workers=4) - -val_ds = DeepgrowDataset( - dimension=2, - pixdim=[1.0, 1.0, 1.0], - spatial_size=[512, 512], - root_dir=root_dir, - transform=pre_transforms, - section="validation", - cache_num=0, - limit=1, - task="Task09_Spleen" -) -val_loader = DataLoader(val_ds, batch_size=4, shuffle=False, num_workers=4) - -device = torch.device("cuda") -network = network.to(device) - -output = os.path.join(root_dir, 'output') -os.makedirs(output, exist_ok=True) - -save_interval = 5 -max_val_interactions = 5 -max_train_interactions = 15 -learning_rate = 0.0001 -epochs = 5 -amp = False - -# define event-handlers for engine -val_handlers = [ - StatsHandler(output_transform=lambda x: None), - TensorBoardStatsHandler(log_dir=output, output_transform=lambda x: None), - DeepgrowStatsHandler(log_dir=output, tag_name='val_dice'), - CheckpointSaver(save_dir=output, save_dict={"net": network}, save_key_metric=True, save_final=True, - save_interval=save_interval, final_filename='model.pt') -] - -evaluator = SupervisedEvaluator( - device=device, - val_data_loader=val_loader, - network=network, - iteration_update=Interaction( - transforms=interaction_transforms, - max_interactions=max_val_interactions, - train=False), - inferer=SimpleInferer(), - post_transform=post_transforms, - key_val_metric={ - "val_dice": MeanDice( - include_background=False, - output_transform=lambda x: (x["pred"], x["label"]) - ) - }, - val_handlers=val_handlers -) - -loss_function = DiceLoss(sigmoid=True, squared_pred=True) -optimizer = torch.optim.Adam(network.parameters(), learning_rate) -lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5000, gamma=0.1) - -train_handlers = [ - LrScheduleHandler(lr_scheduler=lr_scheduler, print_lr=True), - ValidationHandler(validator=evaluator, interval=1, epoch_level=True), - StatsHandler(tag_name="train_loss", output_transform=lambda x: x["loss"]), - TensorBoardStatsHandler(log_dir=output, tag_name="train_loss", output_transform=lambda x: x["loss"]), - CheckpointSaver(save_dir=output, save_dict={"net": network, "opt": optimizer, "lr": lr_scheduler}, - save_interval=save_interval, save_final=True, final_filename='checkpoint.pt'), -] -trainer = SupervisedTrainer( - device=device, - max_epochs=epochs, - train_data_loader=train_loader, - network=network, - iteration_update=Interaction( - transforms=interaction_transforms, - max_interactions=max_train_interactions, - train=True), - optimizer=optimizer, - loss_function=loss_function, - inferer=SimpleInferer(), - post_transform=post_transforms, - amp=amp, - key_train_metric={ - "train_dice": MeanDice( - include_background=False, - output_transform=lambda x: (x["pred"], x["label"]) - ) - }, - train_handlers=train_handlers, -) - -start_time = time.time() -trainer.run() -end_time = time.time() - -print('Total Training Time {}'.format(end_time - start_time)) From 67851f56cd69d93451e4a1869f4710657e953c84 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Tue, 8 Dec 2020 08:34:29 +0000 Subject: [PATCH 03/40] Adds an image to bounding box transform (#1326) * adds a bounding box transform Signed-off-by: Wenqi Li * fixes integration Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- docs/source/transforms.rst | 12 +++++ monai/transforms/croppad/array.py | 14 ++++++ monai/transforms/croppad/dictionary.py | 32 ++++++++++++++ monai/transforms/utils.py | 27 ++++++++++++ tests/test_bounding_rect.py | 43 ++++++++++++++++++ tests/test_bounding_rectd.py | 49 +++++++++++++++++++++ tests/test_integration_classification_2d.py | 2 +- 7 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 tests/test_bounding_rect.py create mode 100644 tests/test_bounding_rectd.py diff --git a/docs/source/transforms.rst b/docs/source/transforms.rst index f02fb141e4..65fceebe8d 100644 --- a/docs/source/transforms.rst +++ b/docs/source/transforms.rst @@ -105,6 +105,12 @@ Crop and Pad :members: :special-members: __call__ +`BoundingRect` +"""""""""""""" +.. autoclass:: BoundingRect + :members: + :special-members: __call__ + Intensity ^^^^^^^^^ @@ -564,6 +570,12 @@ Crop and Pad (Dict) :members: :special-members: __call__ +`BoundingRectd` +""""""""""""""" +.. autoclass:: BoundingRectd + :members: + :special-members: __call__ + Instensity (Dict) ^^^^^^^^^^^^^^^^^ diff --git a/monai/transforms/croppad/array.py b/monai/transforms/croppad/array.py index d8075e5d01..2cd8ee861e 100644 --- a/monai/transforms/croppad/array.py +++ b/monai/transforms/croppad/array.py @@ -21,6 +21,7 @@ from monai.data.utils import get_random_patch, get_valid_patch_size from monai.transforms.compose import Randomizable, Transform from monai.transforms.utils import ( + compute_bounding_rect, generate_pos_neg_label_crop_centers, generate_spatial_bounding_box, map_binary_to_indices, @@ -632,3 +633,16 @@ def __call__(self, img: np.ndarray, mode: Optional[Union[NumpyPadMode, str]] = N See also: https://numpy.org/doc/1.18/reference/generated/numpy.pad.html """ return self.padder(self.cropper(img), mode=mode) + + +class BoundingRect(Transform): + """ + Compute coordinates of axis-aligned bounding rectangles from input image `img`. + """ + + def __call__(self, img: np.ndarray) -> np.ndarray: + """ + See also: :py:class:`monai.transforms.utils.compute_bounding_rect`. + """ + bbox = [compute_bounding_rect(channel) for channel in img] + return np.stack(bbox, axis=0) diff --git a/monai/transforms/croppad/dictionary.py b/monai/transforms/croppad/dictionary.py index 7d0b4f85cd..557e80474b 100644 --- a/monai/transforms/croppad/dictionary.py +++ b/monai/transforms/croppad/dictionary.py @@ -24,6 +24,7 @@ from monai.transforms.compose import MapTransform, Randomizable from monai.transforms.croppad.array import ( BorderPad, + BoundingRect, CenterSpatialCrop, DivisiblePad, ResizeWithPadOrCrop, @@ -580,6 +581,36 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda return d +class BoundingRectd(MapTransform): + """ + Dictionary-based wrapper of :py:class:`monai.transforms.BoundingRect`. + + Args: + keys: keys of the corresponding items to be transformed. + See also: monai.transforms.MapTransform + bbox_key_postfix: the output bounding box coordinates will be + written to the value of `{key}_{bbox_key_postfix}`. + """ + + def __init__(self, keys: KeysCollection, bbox_key_postfix: str = "bbox"): + super().__init__(keys=keys) + self.bbox = BoundingRect() + self.bbox_key_postfix = bbox_key_postfix + + def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.ndarray]: + """ + See also: :py:class:`monai.transforms.utils.compute_bounding_rect`. + """ + d = dict(data) + for key in self.keys: + bbox = self.bbox(d[key]) + key_to_add = f"{key}_{self.bbox_key_postfix}" + if key_to_add in d: + raise KeyError(f"Bounding box data with key {key_to_add} already exists.") + d[key_to_add] = bbox + return d + + SpatialPadD = SpatialPadDict = SpatialPadd BorderPadD = BorderPadDict = BorderPadd DivisiblePadD = DivisiblePadDict = DivisiblePadd @@ -591,3 +622,4 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda RandWeightedCropD = RandWeightedCropDict = RandWeightedCropd RandCropByPosNegLabelD = RandCropByPosNegLabelDict = RandCropByPosNegLabeld ResizeWithPadOrCropD = ResizeWithPadOrCropDict = ResizeWithPadOrCropd +BoundingRectD = BoundingRectDict = BoundingRectd diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 15d31016f2..54d0632d9c 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -9,6 +9,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import itertools import random import warnings from typing import Callable, List, Optional, Sequence, Tuple, Union @@ -537,6 +538,32 @@ def generate_spatial_bounding_box( return box_start, box_end +def compute_bounding_rect(image: np.array): + """ + Compute ND coordinates of a bounding rectangle from the positive intensities. + The output format of the coordinates is: + + [1st_spatial_dim_start, 1st_spatial_dim_end, + 2nd_spatial_dim_start, 2nd_spatial_dim_end, + ..., + Nth_spatial_dim_start, Nth_spatial_dim_end,] + + The bounding boxes edges are aligned with the input image edges. + This function returns [-1, -1, ...] if there's no positive intensity. + """ + _binary_image = image > 0 + ndim = len(_binary_image.shape) + bbox = [0] * (2 * ndim) + for di, ax in enumerate(itertools.combinations(reversed(range(ndim)), ndim - 1)): + dt = _binary_image.any(axis=ax) + if not np.any(dt): + return np.asarray([-1] * len(bbox)) + min_d = np.argmax(dt) + max_d = max(_binary_image.shape[di] - np.argmax(dt[::-1]), min_d + 1) + bbox[di * 2], bbox[di * 2 + 1] = min_d, max_d + return np.asarray(bbox) + + def get_largest_connected_component_mask(img: torch.Tensor, connectivity: Optional[int] = None) -> torch.Tensor: """ Gets the largest connected component mask of an image. diff --git a/tests/test_bounding_rect.py b/tests/test_bounding_rect.py new file mode 100644 index 0000000000..04fea8a22c --- /dev/null +++ b/tests/test_bounding_rect.py @@ -0,0 +1,43 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +import monai +from monai.transforms import BoundingRect + +TEST_CASE_1 = [(2, 3), [[-1, -1], [1, 2]]] + +TEST_CASE_2 = [(1, 8, 10), [[0, 7, 1, 9]]] + +TEST_CASE_3 = [(2, 16, 20, 18), [[0, 16, 0, 20, 0, 18], [0, 16, 0, 20, 0, 18]]] + + +class TestBoundingRect(unittest.TestCase): + def setUp(self): + monai.utils.set_determinism(1) + + def tearDown(self): + monai.utils.set_determinism(None) + + @parameterized.expand([TEST_CASE_1, TEST_CASE_2, TEST_CASE_3]) + def test_shape(self, input_shape, expected): + test_data = np.random.randint(0, 8, size=input_shape) + test_data = test_data == 7 + result = BoundingRect()(test_data) + np.testing.assert_allclose(result, expected) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_bounding_rectd.py b/tests/test_bounding_rectd.py new file mode 100644 index 0000000000..c33a3c371d --- /dev/null +++ b/tests/test_bounding_rectd.py @@ -0,0 +1,49 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +import monai +from monai.transforms import BoundingRectD + +TEST_CASE_1 = [(2, 3), [[-1, -1], [1, 2]]] + +TEST_CASE_2 = [(1, 8, 10), [[0, 7, 1, 9]]] + +TEST_CASE_3 = [(2, 16, 20, 18), [[0, 16, 0, 20, 0, 18], [0, 16, 0, 20, 0, 18]]] + + +class TestBoundingRectD(unittest.TestCase): + def setUp(self): + monai.utils.set_determinism(1) + + def tearDown(self): + monai.utils.set_determinism(None) + + @parameterized.expand([TEST_CASE_1, TEST_CASE_2, TEST_CASE_3]) + def test_shape(self, input_shape, expected): + test_data = np.random.randint(0, 8, size=input_shape) + test_data = test_data == 7 + result = BoundingRectD("image")({"image": test_data}) + np.testing.assert_allclose(result["image_bbox"], expected) + + result = BoundingRectD("image", "cc")({"image": test_data}) + np.testing.assert_allclose(result["image_cc"], expected) + + with self.assertRaises(KeyError): + BoundingRectD("image", "cc")({"image": test_data, "image_cc": None}) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_integration_classification_2d.py b/tests/test_integration_classification_2d.py index aadf379dcb..aa0fd57f76 100644 --- a/tests/test_integration_classification_2d.py +++ b/tests/test_integration_classification_2d.py @@ -243,7 +243,7 @@ def test_training(self): repeated.append(results) np.testing.assert_allclose(repeated[0], repeated[1]) - @TimedCall(seconds=1000, skip_timing=not torch.cuda.is_available(), daemon=False, force_quit=False) + @TimedCall(seconds=1000, skip_timing=not torch.cuda.is_available(), daemon=False) def test_timing(self): self.train_and_infer() From dce81d5655f05d8f51f8919a2450b68cdede44f9 Mon Sep 17 00:00:00 2001 From: Isaac Yang Date: Tue, 8 Dec 2020 12:09:48 -0800 Subject: [PATCH 04/40] Remove flake8 from requirements-dev.txt during public container image build (#1327) flake8-executable is GPL'ed Signed-off-by: Isaac Yang Signed-off-by: Sachidanand Alle --- .github/workflows/setupapp.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/setupapp.yml b/.github/workflows/setupapp.yml index b8b02e6ace..a3a1745977 100644 --- a/.github/workflows/setupapp.yml +++ b/.github/workflows/setupapp.yml @@ -151,7 +151,8 @@ jobs: run: | docker build -t localhost:5000/local_monai:latest -f Dockerfile . docker push localhost:5000/local_monai:latest - docker tag localhost:5000/local_monai:latest projectmonai/monai:latest + sed -i '/flake/d' requirements-dev.txt + docker build -t projectmonai/monai:latest -f Dockerfile . docker login -u projectmonai -p ${{ secrets.DOCKER_PW }} docker push projectmonai/monai:latest docker logout From 85e7abe130176ad20b6ebf979d3e5a8701a80d1d Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Tue, 8 Dec 2020 22:37:49 +0000 Subject: [PATCH 05/40] fixes tutorial #82 (#1331) * adds test init_reader Signed-off-by: Wenqi Li * fixes loadimage Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- monai/data/image_reader.py | 16 ++++++------ monai/transforms/io/array.py | 11 +++++---- tests/test_init_reader.py | 48 ++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 tests/test_init_reader.py diff --git a/monai/data/image_reader.py b/monai/data/image_reader.py index 6c243f2b08..5b0450ab8a 100644 --- a/monai/data/image_reader.py +++ b/monai/data/image_reader.py @@ -28,12 +28,14 @@ from itk import Image # type: ignore from nibabel.nifti1 import Nifti1Image from PIL import Image as PILImage + + has_itk = has_nib = has_pil = True else: - itk, _ = optional_import("itk", allow_namespace_pkg=True) + itk, has_itk = optional_import("itk", allow_namespace_pkg=True) Image, _ = optional_import("itk", allow_namespace_pkg=True, name="Image") - nib, _ = optional_import("nibabel") + nib, has_nib = optional_import("nibabel") Nifti1Image, _ = optional_import("nibabel.nifti1", name="Nifti1Image") - PILImage, _ = optional_import("PIL.Image") + PILImage, has_pil = optional_import("PIL.Image") class ImageReader(ABC): @@ -121,7 +123,7 @@ class ITKReader(ImageReader): def __init__(self, **kwargs): super().__init__() self.kwargs = kwargs - if int(itk.Version.GetITKMajorVersion()) == 5 and int(itk.Version.GetITKMinorVersion()) < 2: + if has_itk and int(itk.Version.GetITKMajorVersion()) == 5 and int(itk.Version.GetITKMinorVersion()) < 2: # warning the ITK LazyLoading mechanism was not threadsafe until version 5.2.0, # requesting access to the itk.imread function triggers the lazy loading of the relevant itk modules # before the parallel use of the function. @@ -136,7 +138,7 @@ def verify_suffix(self, filename: Union[Sequence[str], str]) -> bool: if a list of files, verify all the suffixes. """ - return True + return has_itk def read(self, data: Union[Sequence[str], str], **kwargs): """ @@ -307,7 +309,7 @@ def verify_suffix(self, filename: Union[Sequence[str], str]) -> bool: """ suffixes: Sequence[str] = ["nii", "nii.gz"] - return is_supported_format(filename, suffixes) + return has_nib and is_supported_format(filename, suffixes) def read(self, data: Union[Sequence[str], str], **kwargs): """ @@ -522,7 +524,7 @@ def verify_suffix(self, filename: Union[Sequence[str], str]) -> bool: if a list of files, verify all the suffixes. """ suffixes: Sequence[str] = ["png", "jpg", "bmp"] - return is_supported_format(filename, suffixes) + return has_pil and is_supported_format(filename, suffixes) def read(self, data: Union[Sequence[str], str, np.ndarray], **kwargs): """ diff --git a/monai/transforms/io/array.py b/monai/transforms/io/array.py index 22e2b8e3d6..fd44555fa7 100644 --- a/monai/transforms/io/array.py +++ b/monai/transforms/io/array.py @@ -70,13 +70,14 @@ def __init__( if reader is not None: if isinstance(reader, str): supported_readers = { - "NibabelReader": NibabelReader, - "PILReader": PILReader, - "ITKReader": ITKReader, - "NumpyReader": NumpyReader, + "nibabelreader": NibabelReader, + "pilreader": PILReader, + "itkreader": ITKReader, + "numpyreader": NumpyReader, } + reader = reader.lower() if reader not in supported_readers: - raise ValueError(f"unsupported reader type: {reader}.") + raise ValueError(f"unsupported reader type: {reader}, available options: {supported_readers}.") self.register(supported_readers[reader](*args, **kwargs)) else: self.register(reader) diff --git a/tests/test_init_reader.py b/tests/test_init_reader.py new file mode 100644 index 0000000000..87777d83a3 --- /dev/null +++ b/tests/test_init_reader.py @@ -0,0 +1,48 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +from monai.data import ITKReader, NibabelReader, NumpyReader, PILReader +from monai.transforms import LoadImage, LoadImaged + + +class TestInitLoadImage(unittest.TestCase): + def test_load_image(self): + instance1 = LoadImage(image_only=False, dtype=None) + instance2 = LoadImage(image_only=True, dtype=None) + self.assertIsInstance(instance1, LoadImage) + self.assertIsInstance(instance2, LoadImage) + + for r in ["NibabelReader", "PILReader", "ITKReader", "NumpyReader", None]: + inst = LoadImaged("image", reader=r) + self.assertIsInstance(inst, LoadImaged) + + def test_readers(self): + inst = ITKReader() + self.assertIsInstance(inst, ITKReader) + + inst = NibabelReader() + self.assertIsInstance(inst, NibabelReader) + inst = NibabelReader(as_closest_canonical=True) + self.assertIsInstance(inst, NibabelReader) + + inst = NumpyReader() + self.assertIsInstance(inst, NumpyReader) + inst = NumpyReader(npz_keys="test") + self.assertIsInstance(inst, NumpyReader) + + inst = PILReader() + self.assertIsInstance(inst, PILReader) + + +if __name__ == "__main__": + unittest.main() From 179c72ea0ea6120b9dbd928b90cbc8fe216ff49e Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Thu, 10 Dec 2020 01:09:17 +0800 Subject: [PATCH 06/40] 1330 Refine generate_spatial_bounding_box API (#1336) * [DLMED] refine generate_spatial_bounding_box Signed-off-by: Nic Ma * [DLMED] update according to comments Signed-off-by: Nic Ma * [DLMED] add check for margin value Signed-off-by: Nic Ma Signed-off-by: Sachidanand Alle --- monai/transforms/croppad/array.py | 32 +++++++++++++-- monai/transforms/croppad/dictionary.py | 7 ++-- monai/transforms/utils.py | 56 +++++++++++--------------- tests/test_bounding_rect.py | 6 +++ 4 files changed, 62 insertions(+), 39 deletions(-) diff --git a/monai/transforms/croppad/array.py b/monai/transforms/croppad/array.py index 2cd8ee861e..4c69a61b15 100644 --- a/monai/transforms/croppad/array.py +++ b/monai/transforms/croppad/array.py @@ -21,7 +21,6 @@ from monai.data.utils import get_random_patch, get_valid_patch_size from monai.transforms.compose import Randomizable, Transform from monai.transforms.utils import ( - compute_bounding_rect, generate_pos_neg_label_crop_centers, generate_spatial_bounding_box, map_binary_to_indices, @@ -638,11 +637,38 @@ def __call__(self, img: np.ndarray, mode: Optional[Union[NumpyPadMode, str]] = N class BoundingRect(Transform): """ Compute coordinates of axis-aligned bounding rectangles from input image `img`. + The output format of the coordinates is (shape is [channel, 2 * spatial dims]): + + [[1st_spatial_dim_start, 1st_spatial_dim_end, + 2nd_spatial_dim_start, 2nd_spatial_dim_end, + ..., + Nth_spatial_dim_start, Nth_spatial_dim_end], + + ... + + [1st_spatial_dim_start, 1st_spatial_dim_end, + 2nd_spatial_dim_start, 2nd_spatial_dim_end, + ..., + Nth_spatial_dim_start, Nth_spatial_dim_end]] + + The bounding boxes edges are aligned with the input image edges. + This function returns [-1, -1, ...] if there's no positive intensity. + + Args: + select_fn: function to select expected foreground, default is to select values > 0. """ + def __init__(self, select_fn: Callable = lambda x: x > 0) -> None: + self.select_fn = select_fn + def __call__(self, img: np.ndarray) -> np.ndarray: """ - See also: :py:class:`monai.transforms.utils.compute_bounding_rect`. + See also: :py:class:`monai.transforms.utils.generate_spatial_bounding_box`. """ - bbox = [compute_bounding_rect(channel) for channel in img] + bbox = list() + + for channel in range(img.shape[0]): + start_, end_ = generate_spatial_bounding_box(img, select_fn=self.select_fn, channel_indices=channel) + bbox.append([i for k in zip(start_, end_) for i in k]) + return np.stack(bbox, axis=0) diff --git a/monai/transforms/croppad/dictionary.py b/monai/transforms/croppad/dictionary.py index 557e80474b..8e927eb605 100644 --- a/monai/transforms/croppad/dictionary.py +++ b/monai/transforms/croppad/dictionary.py @@ -590,16 +590,17 @@ class BoundingRectd(MapTransform): See also: monai.transforms.MapTransform bbox_key_postfix: the output bounding box coordinates will be written to the value of `{key}_{bbox_key_postfix}`. + select_fn: function to select expected foreground, default is to select values > 0. """ - def __init__(self, keys: KeysCollection, bbox_key_postfix: str = "bbox"): + def __init__(self, keys: KeysCollection, bbox_key_postfix: str = "bbox", select_fn: Callable = lambda x: x > 0): super().__init__(keys=keys) - self.bbox = BoundingRect() + self.bbox = BoundingRect(select_fn=select_fn) self.bbox_key_postfix = bbox_key_postfix def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.ndarray]: """ - See also: :py:class:`monai.transforms.utils.compute_bounding_rect`. + See also: :py:class:`monai.transforms.utils.generate_spatial_bounding_box`. """ d = dict(data) for key in self.keys: diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 54d0632d9c..44205e4e09 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -516,6 +516,13 @@ def generate_spatial_bounding_box( generate the spatial bounding box of foreground in the image with start-end positions. Users can define arbitrary function to select expected foreground from the whole image or specified channels. And it can also add margin to every dim of the bounding box. + The output format of the coordinates is: + + [1st_spatial_dim_start, 2nd_spatial_dim_start, ..., Nth_spatial_dim_start], + [1st_spatial_dim_end, 2nd_spatial_dim_end, ..., Nth_spatial_dim_end] + + The bounding boxes edges are aligned with the input image edges. + This function returns [-1, -1, ...], [-1, -1, ...] if there's no positive intensity. Args: img: source image to generate bounding box from. @@ -524,44 +531,27 @@ def generate_spatial_bounding_box( of image. if None, select foreground on the whole image. margin: add margin value to spatial dims of the bounding box, if only 1 value provided, use it for all dims. """ - data = img[[*(ensure_tuple(channel_indices))]] if channel_indices is not None else img + data = img[list(ensure_tuple(channel_indices))] if channel_indices is not None else img data = np.any(select_fn(data), axis=0) - nonzero_idx = np.nonzero(data) - margin = ensure_tuple_rep(margin, data.ndim) - - box_start = list() - box_end = list() - for i in range(data.ndim): - assert len(nonzero_idx[i]) > 0, f"did not find nonzero index at spatial dim {i}" - box_start.append(max(0, np.min(nonzero_idx[i]) - margin[i])) - box_end.append(min(data.shape[i], np.max(nonzero_idx[i]) + margin[i] + 1)) - return box_start, box_end - - -def compute_bounding_rect(image: np.array): - """ - Compute ND coordinates of a bounding rectangle from the positive intensities. - The output format of the coordinates is: + ndim = len(data.shape) + margin = ensure_tuple_rep(margin, ndim) + for m in margin: + if m < 0: + raise ValueError("margin value should not be negative number.") - [1st_spatial_dim_start, 1st_spatial_dim_end, - 2nd_spatial_dim_start, 2nd_spatial_dim_end, - ..., - Nth_spatial_dim_start, Nth_spatial_dim_end,] + box_start = [0] * ndim + box_end = [0] * ndim - The bounding boxes edges are aligned with the input image edges. - This function returns [-1, -1, ...] if there's no positive intensity. - """ - _binary_image = image > 0 - ndim = len(_binary_image.shape) - bbox = [0] * (2 * ndim) for di, ax in enumerate(itertools.combinations(reversed(range(ndim)), ndim - 1)): - dt = _binary_image.any(axis=ax) + dt = data.any(axis=ax) if not np.any(dt): - return np.asarray([-1] * len(bbox)) - min_d = np.argmax(dt) - max_d = max(_binary_image.shape[di] - np.argmax(dt[::-1]), min_d + 1) - bbox[di * 2], bbox[di * 2 + 1] = min_d, max_d - return np.asarray(bbox) + return [-1] * ndim, [-1] * ndim + + min_d = max(np.argmax(dt) - margin[di], 0) + max_d = max(data.shape[di] - max(np.argmax(dt[::-1]) - margin[di], 0), min_d + 1) + box_start[di], box_end[di] = min_d, max_d + + return box_start, box_end def get_largest_connected_component_mask(img: torch.Tensor, connectivity: Optional[int] = None) -> torch.Tensor: diff --git a/tests/test_bounding_rect.py b/tests/test_bounding_rect.py index 04fea8a22c..69476479a3 100644 --- a/tests/test_bounding_rect.py +++ b/tests/test_bounding_rect.py @@ -38,6 +38,12 @@ def test_shape(self, input_shape, expected): result = BoundingRect()(test_data) np.testing.assert_allclose(result, expected) + def test_select_fn(self): + test_data = np.random.randint(0, 8, size=(2, 3)) + test_data = test_data == 7 + bbox = BoundingRect(select_fn=lambda x: x < 1)(test_data) + np.testing.assert_allclose(bbox, [[0, 3], [0, 3]]) + if __name__ == "__main__": unittest.main() From 34e28570b0a38c9a744ae87697b8bebbbd6ffcd6 Mon Sep 17 00:00:00 2001 From: Eric Kerfoot <17726042+ericspod@users.noreply.github.com> Date: Wed, 9 Dec 2020 21:15:05 +0000 Subject: [PATCH 07/40] DynUNet Torchscript Support (#1334) * Working on DynUNet Torchscript compatibility Signed-off-by: Eric Kerfoot * Working on DynUNet Torchscript compatibility Signed-off-by: Eric Kerfoot * Working on DynUNet Torchscript compatibility Signed-off-by: Eric Kerfoot * Working on DynUNet Torchscript compatibility Signed-off-by: Eric Kerfoot * Working on DynUNet Torchscript compatibility Signed-off-by: Eric Kerfoot Co-authored-by: Yiheng Wang <68361391+yiheng-wang-nv@users.noreply.github.com> Signed-off-by: Sachidanand Alle --- monai/networks/nets/dynunet.py | 90 +++++++++++++++++++++++++++------- tests/test_dynunet.py | 16 +++--- tests/utils.py | 11 ++--- 3 files changed, 83 insertions(+), 34 deletions(-) diff --git a/monai/networks/nets/dynunet.py b/monai/networks/nets/dynunet.py index a70da683ba..0915785db6 100644 --- a/monai/networks/nets/dynunet.py +++ b/monai/networks/nets/dynunet.py @@ -19,6 +19,37 @@ __all__ = ["DynUNet", "DynUnet", "Dynunet"] +class DynUNetSkipLayer(nn.Module): + """ + Defines a layer in the UNet topology which combines the downsample and upsample pathways with the skip connection. + The member `next_layer` may refer to instances of this class or the final bottleneck layer at the bottom the UNet + structure. The purpose of using a recursive class like this is to get around the Torchscript restrictions on + looping over lists of layers and accumulating lists of output tensors which much be indexed. The `heads` list is + shared amongst all the instances of this class and is used to store the output from the supervision heads during + forward passes of the network. + """ + + heads: List[torch.Tensor] + + def __init__(self, index, heads, downsample, upsample, super_head, next_layer): + super().__init__() + self.downsample = downsample + self.upsample = upsample + self.next_layer = next_layer + self.super_head = super_head + self.heads = heads + self.index = index + + def forward(self, x): + downout = self.downsample(x) + nextout = self.next_layer(downout) + upout = self.upsample(nextout, downout) + + self.heads[self.index] = self.super_head(upout) + + return upout + + class DynUNet(nn.Module): """ This reimplementation of a dynamic UNet (DynUNet) is based on: @@ -93,6 +124,43 @@ def __init__( self.check_kernel_stride() self.check_deep_supr_num() + # initialize the typed list of supervision head outputs so that Torchscript can recognize what's going on + self.heads: List[torch.Tensor] = [torch.rand(1)] * (len(self.deep_supervision_heads) + 1) + + def create_skips(index, downsamples, upsamples, superheads, bottleneck): + """ + Construct the UNet topology as a sequence of skip layers terminating with the bottleneck layer. This is + done recursively from the top down since a recursive nn.Module subclass is being used to be compatible + with Torchscript. Initially the length of `downsamples` will be one more than that of `superheads` + since the `input_block` is passed to this function as the first item in `downsamples`, however this + shouldn't be associated with a supervision head. + """ + + assert len(downsamples) == len(upsamples), f"{len(downsamples)} != {len(upsamples)}" + assert (len(downsamples) - len(superheads)) in (1, 0), f"{len(downsamples)}-(0,1) != {len(superheads)}" + + if len(downsamples) == 0: # bottom of the network, pass the bottleneck block + return bottleneck + elif index == 0: # don't associate a supervision head with self.input_block + current_head, rest_heads = nn.Identity(), superheads + elif not self.deep_supervision: # bypass supervision heads by passing nn.Identity in place of a real one + current_head, rest_heads = nn.Identity(), superheads[1:] + else: + current_head, rest_heads = superheads[0], superheads[1:] + + # create the next layer down, this will stop at the bottleneck layer + next_layer = create_skips(1 + index, downsamples[1:], upsamples[1:], rest_heads, bottleneck) + + return DynUNetSkipLayer(index, self.heads, downsamples[0], upsamples[0], current_head, next_layer) + + self.skip_layers = create_skips( + 0, + [self.input_block] + list(self.downsamples), + self.upsamples[::-1], + self.deep_supervision_heads, + self.bottleneck, + ) + def check_kernel_stride(self): kernels, strides = self.kernel_size, self.strides error_msg = "length of kernel_size and strides should be the same, and no less than 3." @@ -114,29 +182,13 @@ def check_deep_supr_num(self): assert 1 <= deep_supr_num < num_up_layers, error_msg def forward(self, x): - out = self.input_block(x) - outputs = [out] - - for downsample in self.downsamples: - out = downsample(out) - outputs.insert(0, out) - - out = self.bottleneck(out) - upsample_outs = [] - - for upsample, skip in zip(self.upsamples, outputs): - out = upsample(out, skip) - upsample_outs.append(out) - + out = self.skip_layers(x) out = self.output_block(out) if self.training and self.deep_supervision: - start_output_idx = len(upsample_outs) - 1 - self.deep_supr_num - upsample_outs = upsample_outs[start_output_idx:-1][::-1] - preds = [self.deep_supervision_heads[i](out) for i, out in enumerate(upsample_outs)] - return [out] + preds + return [out] + self.heads[1 : self.deep_supr_num + 1] - return out + return [out] def get_input_block(self): return self.conv_block( diff --git a/tests/test_dynunet.py b/tests/test_dynunet.py index ca5e056a16..6b89c8c4fd 100644 --- a/tests/test_dynunet.py +++ b/tests/test_dynunet.py @@ -16,8 +16,7 @@ from parameterized import parameterized from monai.networks.nets import DynUNet - -# from tests.utils import test_script_save +from tests.utils import test_script_save device = "cuda" if torch.cuda.is_available() else "cpu" @@ -111,14 +110,13 @@ def test_shape(self, input_param, input_shape, expected_shape): net.eval() with torch.no_grad(): result = net(torch.randn(input_shape).to(device)) - self.assertEqual(result.shape, expected_shape) - + self.assertEqual(result[0].shape, expected_shape) -# def test_script(self): -# input_param, input_shape, _ = TEST_CASE_DYNUNET_2D[0] -# net = DynUNet(**input_param) -# test_data = torch.randn(input_shape) -# test_script_save(net, test_data) + def test_script(self): + input_param, input_shape, _ = TEST_CASE_DYNUNET_2D[0] + net = DynUNet(**input_param) + test_data = torch.randn(input_shape) + test_script_save(net, test_data) class TestDynUNetDeepSupervision(unittest.TestCase): diff --git a/tests/utils.py b/tests/utils.py index 3ab73a4fcd..6c717264ac 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -29,7 +29,7 @@ import torch.distributed as dist from monai.data import create_test_image_2d, create_test_image_3d -from monai.utils import optional_import, set_determinism +from monai.utils import ensure_tuple, optional_import, set_determinism nib, _ = optional_import("nibabel") @@ -457,11 +457,10 @@ def test_script_save(net, *inputs, eval_nets=True, device=None, rtol=1e-4): result1 = net(*inputs) result2 = reloaded_net(*inputs) set_determinism(seed=None) - # When using e.g., VAR, we will produce a tuple of outputs. - # Hence, convert all to tuples and then compare all elements. - if not isinstance(result1, tuple): - result1 = (result1,) - result2 = (result2,) + + # convert results to tuples if needed to allow iterating over pairs of outputs + result1 = ensure_tuple(result1) + result2 = ensure_tuple(result2) for i, (r1, r2) in enumerate(zip(result1, result2)): if None not in (r1, r2): # might be None From 7aeb01e56c9e764e1a8e7dac4e0043bfa8bd26f1 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Thu, 10 Dec 2020 11:26:03 +0000 Subject: [PATCH 08/40] fixes params groups (#1339) * fixes params groups Signed-off-by: Wenqi Li * update based on comments Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- monai/optimizers/utils.py | 44 ++++++++++++++++++++--------- tests/test_generate_param_groups.py | 28 ++++++++++++++++-- 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/monai/optimizers/utils.py b/monai/optimizers/utils.py index fdd8bc072f..57c7528ba4 100644 --- a/monai/optimizers/utils.py +++ b/monai/optimizers/utils.py @@ -13,7 +13,7 @@ import torch -from monai.utils import ensure_tuple +from monai.utils import ensure_tuple, ensure_tuple_rep def generate_param_groups( @@ -35,9 +35,11 @@ def generate_param_groups( match_types: a list of tags to identify the matching type corresponding to the `layer_matches` functions, can be "select" or "filter". lr_values: a list of LR values corresponding to the `layer_matches` functions. - include_others: whether to incude the rest layers as the last group, default to True. + include_others: whether to include the rest layers as the last group, default to True. - It's mainly used to set different init LR values for different network elements, for example:: + It's mainly used to set different LR values for different network elements, for example: + + .. code-block:: python net = Unet(dimensions=3, in_channels=1, out_channels=3, channels=[2, 2, 2], strides=[1, 1, 1]) print(net) # print out network components to select expected items @@ -48,27 +50,41 @@ def generate_param_groups( match_types=["select", "filter"], lr_values=[1e-2, 1e-3], ) + # the groups will be a list of dictionaries: + # [{'params': , 'lr': 0.01}, + # {'params': , 'lr': 0.001}, + # {'params': }] optimizer = torch.optim.Adam(params, 1e-4) """ layer_matches = ensure_tuple(layer_matches) - match_types = ensure_tuple(match_types) - lr_values = ensure_tuple(lr_values) - if len(layer_matches) != len(lr_values) or len(layer_matches) != len(match_types): - raise ValueError("length of layer_match callable functions, match types and LR values should be the same.") + match_types = ensure_tuple_rep(match_types, len(layer_matches)) + lr_values = ensure_tuple_rep(lr_values, len(layer_matches)) + + def _get_select(f): + def _select(): + return f(network).parameters() + + return _select + + def _get_filter(f): + def _filter(): + return filter(f, network.named_parameters()) + + return _filter params = list() _layers = list() for func, ty, lr in zip(layer_matches, match_types, lr_values): - if ty == "select": - layer_params = func(network).parameters() - elif ty == "filter": - layer_params = filter(func, network.named_parameters()) + if ty.lower() == "select": + layer_params = _get_select(func) + elif ty.lower() == "filter": + layer_params = _get_filter(func) else: - raise ValueError(f"unsuppoted layer match type: {ty}.") + raise ValueError(f"unsupported layer match type: {ty}.") - params.append({"params": layer_params, "lr": lr}) - _layers.extend(list(map(id, layer_params))) + params.append({"params": layer_params(), "lr": lr}) + _layers.extend(list(map(id, layer_params()))) if include_others: params.append({"params": filter(lambda p: id(p) not in _layers, network.parameters())}) diff --git a/tests/test_generate_param_groups.py b/tests/test_generate_param_groups.py index 122b22dba4..2130234013 100644 --- a/tests/test_generate_param_groups.py +++ b/tests/test_generate_param_groups.py @@ -21,7 +21,7 @@ TEST_CASE_1 = [ { "layer_matches": [lambda x: x.model[-1]], - "match_types": ["select"], + "match_types": "select", "lr_values": [1], }, (1, 100), @@ -30,7 +30,7 @@ TEST_CASE_2 = [ { "layer_matches": [lambda x: x.model[-1], lambda x: x.model[-2], lambda x: x.model[-3]], - "match_types": ["select", "select", "select"], + "match_types": "select", "lr_values": [1, 2, 3], }, (1, 2, 3, 100), @@ -84,6 +84,30 @@ def test_lr_values(self, input_param, expected_values): for param_group, value in zip(optimizer.param_groups, ensure_tuple(expected_values)): torch.testing.assert_allclose(param_group["lr"], value) + n = [len(p["params"]) for p in params] + assert sum(n) == 26 or all(n), "should have either full model or non-empty subsets." + + def test_wrong(self): + """overlapped""" + device = "cuda" if torch.cuda.is_available() else "cpu" + net = Unet( + dimensions=3, + in_channels=1, + out_channels=3, + channels=(16, 32, 64), + strides=(2, 2), + num_res_units=1, + ).to(device) + + params = generate_param_groups( + network=net, + layer_matches=[lambda x: x.model[-1], lambda x: x.model[-1]], + match_types="select", + lr_values=0.1, + ) + with self.assertRaises(ValueError): + torch.optim.Adam(params, 100) + if __name__ == "__main__": unittest.main() From ee5d50913d0397bdd42bdb47e54e219ff424400d Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Thu, 10 Dec 2020 21:44:06 +0800 Subject: [PATCH 09/40] 1338 Enhance save_final in CheckpointSaver handler (#1341) * [DLMED] enhance save_final in CheckpointSaver Signed-off-by: Nic Ma * [DLMED] add log message Signed-off-by: Nic Ma Signed-off-by: Sachidanand Alle --- monai/handlers/checkpoint_saver.py | 11 +++++++++++ tests/test_handler_checkpoint_saver.py | 1 + 2 files changed, 12 insertions(+) diff --git a/monai/handlers/checkpoint_saver.py b/monai/handlers/checkpoint_saver.py index 57d8728cd4..0cc05b2dc4 100644 --- a/monai/handlers/checkpoint_saver.py +++ b/monai/handlers/checkpoint_saver.py @@ -188,6 +188,13 @@ def attach(self, engine: Engine) -> None: else: engine.add_event_handler(Events.ITERATION_COMPLETED(every=self.save_interval), self.interval_completed) + def _delete_previous_final_ckpt(self): + saved = self._final_checkpoint._saved + if len(saved) > 0: + item = saved.pop(0) + self._final_checkpoint.save_handler.remove(item.filename) + self.logger.info(f"Deleted previous saved final checkpoint: {item.filename}") + def completed(self, engine: Engine) -> None: """Callback for train or validation/evaluation completed Event. Save final checkpoint if configure save_final is True. @@ -196,6 +203,8 @@ def completed(self, engine: Engine) -> None: engine: Ignite Engine, it can be a trainer, validator or evaluator. """ assert callable(self._final_checkpoint), "Error: _final_checkpoint function not specified." + # delete previous saved final checkpoint if existing + self._delete_previous_final_ckpt() self._final_checkpoint(engine) assert self.logger is not None assert hasattr(self.logger, "info"), "Error, provided logger has not info attribute." @@ -211,6 +220,8 @@ def exception_raised(self, engine: Engine, e: Exception) -> None: e: the exception caught in Ignite during engine.run(). """ assert callable(self._final_checkpoint), "Error: _final_checkpoint function not specified." + # delete previous saved final checkpoint if existing + self._delete_previous_final_ckpt() self._final_checkpoint(engine) assert self.logger is not None assert hasattr(self.logger, "info"), "Error, provided logger has not info attribute." diff --git a/tests/test_handler_checkpoint_saver.py b/tests/test_handler_checkpoint_saver.py index 8513b6625e..2df36d9720 100644 --- a/tests/test_handler_checkpoint_saver.py +++ b/tests/test_handler_checkpoint_saver.py @@ -117,6 +117,7 @@ def _train_func(engine, batch): n_saved, ) handler.attach(engine) + engine.run(data, max_epochs=2) engine.run(data, max_epochs=5) for filename in filenames: self.assertTrue(os.path.exists(os.path.join(tempdir, filename))) From babe9ee73515758f0520d4dc16f4e8716e7bfaea Mon Sep 17 00:00:00 2001 From: charliebudd Date: Thu, 10 Dec 2020 15:51:44 +0000 Subject: [PATCH 10/40] 1337 profiling tools (#1343) * adding simple profiling tools Signed-off-by: charliebudd * removing old timing decorator Signed-off-by: charliebudd * auto-reformatting Signed-off-by: charliebudd * removing unnecessary list comprehension in sum() Signed-off-by: charliebudd * adding imports to __init__.py Signed-off-by: charliebudd * [MONAI] python code formatting Signed-off-by: monai-bot Signed-off-by: Sachidanand Alle --- monai/utils/__init__.py | 1 + monai/utils/decorators.py | 19 --------- monai/utils/profiling.py | 90 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 monai/utils/profiling.py diff --git a/monai/utils/__init__.py b/monai/utils/__init__.py index 8f27a7faf3..d2d3e41d67 100644 --- a/monai/utils/__init__.py +++ b/monai/utils/__init__.py @@ -15,3 +15,4 @@ from .enums import * from .misc import * from .module import * +from .profiling import * diff --git a/monai/utils/decorators.py b/monai/utils/decorators.py index 0d14eb0dd3..35a594d077 100644 --- a/monai/utils/decorators.py +++ b/monai/utils/decorators.py @@ -9,28 +9,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -import time from functools import wraps -def timing(func): - """ - This simple timing function decorator prints to stdout/logfile (it uses printFlush) how many seconds a call to the - original function took to execute, as well as the name before and after the call. - """ - - @wraps(func) - def timingwrap(*args, **kwargs): - print(func.__name__, flush=True) - start = time.perf_counter() - res = func(*args, **kwargs) - end = time.perf_counter() - print(func.__name__, "dT (s) =", (end - start), flush=True) - return res - - return timingwrap - - class RestartGenerator: """ Wraps a generator callable which will be called whenever this class is iterated and its result returned. This is diff --git a/monai/utils/profiling.py b/monai/utils/profiling.py new file mode 100644 index 0000000000..a8d6e2c630 --- /dev/null +++ b/monai/utils/profiling.py @@ -0,0 +1,90 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import time +from functools import wraps + +import torch + +__all__ = ["torch_profiler_full", "torch_profiler_time_cpu_gpu", "torch_profiler_time_end_to_end"] + + +def torch_profiler_full(func): + """ + A decorator which will run the torch profiler for the decorated function, + printing the results in full. + Note: Enforces a gpu sync point which could slow down pipelines. + """ + + @wraps(func) + def wrapper(*args, **kwargs): + + with torch.autograd.profiler.profile(use_cuda=True) as prof: + result = func(*args, **kwargs) + + print(prof, flush=True) + + return result + + return wrapper + + +def torch_profiler_time_cpu_gpu(func): + """ + A decorator which measures the execution time of both the CPU and GPU components + of the decorated function, printing both results. + Note: Enforces a gpu sync point which could slow down pipelines. + """ + + @wraps(func) + def wrapper(*args, **kwargs): + + with torch.autograd.profiler.profile(use_cuda=True) as prof: + result = func(*args, **kwargs) + + cpu_time = prof.self_cpu_time_total + gpu_time = sum(evt.self_cuda_time_total for evt in prof.function_events) + + cpu_time = torch.autograd.profiler.format_time(cpu_time) + gpu_time = torch.autograd.profiler.format_time(gpu_time) + + print("cpu time: {}, gpu time: {}".format(cpu_time, gpu_time), flush=True) + + return result + + return wrapper + + +def torch_profiler_time_end_to_end(func): + """ + A decorator which measures the total execution time from when the decorated + function is called to when the last cuda operation finishes, printing the result. + Note: Enforces a gpu sync point which could slow down pipelines. + """ + + @wraps(func) + def wrapper(*args, **kwargs): + + torch.cuda.synchronize() + start = time.perf_counter() + + result = func(*args, **kwargs) + + torch.cuda.synchronize() + end = time.perf_counter() + + total_time = (end - start) * 1e6 + total_time_str = torch.autograd.profiler.format_time(total_time) + print("end to end time: {}".format(total_time_str), flush=True) + + return result + + return wrapper From a614a23bd1793b6a2b1e72b97fe8a4f714ea2c5d Mon Sep 17 00:00:00 2001 From: Christian Baker <31904251+crnbaker@users.noreply.github.com> Date: Thu, 10 Dec 2020 17:19:19 +0000 Subject: [PATCH 11/40] Hilbert transform simple layer and DetectEnvelope transform implemented. #1210. Requires torch.fft module and PyTorch 1.7.0+. (#1287) Signed-off-by: Christian Baker * New tests/utils.py unittest decorators added: SkipIfModule(), SkipIfBeforePyTorchVersion() and SkipIfAtLeastPyTorchVersion Signed-off-by: Christian Baker * New unit tests added test_hilbert_transform.py and test_detect_envelope.py Signed-off-by: Christian Baker * New exception InvalidPyTorchVersionError implemented in monai/utils/module.py Signed-off-by: Christian Baker * New class HilbertTransform implemented in monai/networks/layers/simplelayers.py Signed-off-by: Christian Baker * New class DetectEnvelope implemented in monai/transforms/intensity/array.py, uses HilbertTransform Signed-off-by: Christian Baker Signed-off-by: Sachidanand Alle --- docs/source/networks.rst | 5 + docs/source/transforms.rst | 6 + monai/networks/layers/simplelayers.py | 73 ++++++++- monai/transforms/intensity/array.py | 45 ++++- monai/utils/module.py | 12 ++ tests/test_detect_envelope.py | 165 +++++++++++++++++++ tests/test_hilbert_transform.py | 226 ++++++++++++++++++++++++++ tests/utils.py | 41 +++++ 8 files changed, 569 insertions(+), 4 deletions(-) create mode 100644 tests/test_detect_envelope.py create mode 100644 tests/test_hilbert_transform.py diff --git a/docs/source/networks.rst b/docs/source/networks.rst index 779a42f9cb..2224b42a74 100644 --- a/docs/source/networks.rst +++ b/docs/source/networks.rst @@ -179,6 +179,11 @@ Layers .. autoclass:: GaussianFilter :members: +`HilbertTransform` +~~~~~~~~~~~~~~~~~~ +.. autoclass:: HilbertTransform + :members: + `Affine Transform` ~~~~~~~~~~~~~~~~~~ .. autoclass:: monai.networks.layers.AffineTransform diff --git a/docs/source/transforms.rst b/docs/source/transforms.rst index 65fceebe8d..f7e075f376 100644 --- a/docs/source/transforms.rst +++ b/docs/source/transforms.rst @@ -216,6 +216,12 @@ Intensity :members: :special-members: __call__ +`DetectEnvelope` +""""""""""""""""""""" +.. autoclass:: DetectEnvelope + :members: + :special-members: __call__ + IO ^^ diff --git a/monai/networks/layers/simplelayers.py b/monai/networks/layers/simplelayers.py index a726975138..bd800a7c91 100644 --- a/monai/networks/layers/simplelayers.py +++ b/monai/networks/layers/simplelayers.py @@ -17,12 +17,15 @@ from torch import nn from torch.autograd import Function +from monai.config import get_torch_version_tuple from monai.networks.layers.convutils import gaussian_1d, same_padding -from monai.utils import SkipMode, ensure_tuple_rep, optional_import +from monai.utils import InvalidPyTorchVersionError, SkipMode, ensure_tuple_rep, optional_import _C, _ = optional_import("monai._C") +if tuple(int(s) for s in torch.__version__.split(".")[0:2]) >= (1, 7): + fft, _ = optional_import("torch.fft") -__all__ = ["SkipConnection", "Flatten", "GaussianFilter", "LLTM", "Reshape", "separable_filtering"] +__all__ = ["SkipConnection", "Flatten", "GaussianFilter", "LLTM", "Reshape", "separable_filtering", "HilbertTransform"] class SkipConnection(nn.Module): @@ -130,6 +133,72 @@ def _conv(input_: torch.Tensor, d: int) -> torch.Tensor: return _conv(x, spatial_dims - 1) +class HilbertTransform(nn.Module): + """ + Determine the analytical signal of a Tensor along a particular axis. + Requires PyTorch 1.7.0+ and the PyTorch FFT module (which is not included in NVIDIA PyTorch Release 20.10). + + Args: + axis: Axis along which to apply Hilbert transform. Default 2 (first spatial dimension). + N: Number of Fourier components (i.e. FFT size). Default: ``x.shape[axis]``. + """ + + def __init__(self, axis: int = 2, n: Union[int, None] = None) -> None: + + if get_torch_version_tuple() < (1, 7): + raise InvalidPyTorchVersionError("1.7.0", self.__class__.__name__) + + super().__init__() + self.axis = axis + self.n = n + + def forward(self, x: torch.Tensor) -> torch.Tensor: + """ + Args: + x: Tensor or array-like to transform. Must be real and in shape ``[Batch, chns, spatial1, spatial2, ...]``. + Returns: + torch.Tensor: Analytical signal of ``x``, transformed along axis specified in ``self.axis`` using + FFT of size ``self.N``. The absolute value of ``x_ht`` relates to the envelope of ``x`` along axis ``self.axis``. + """ + + # Make input a real tensor + x = torch.as_tensor(x, device=x.device if torch.is_tensor(x) else None) + if torch.is_complex(x): + raise ValueError("x must be real.") + else: + x = x.to(dtype=torch.float) + + if (self.axis < 0) or (self.axis > len(x.shape) - 1): + raise ValueError("Invalid axis for shape of x.") + + n = x.shape[self.axis] if self.n is None else self.n + if n <= 0: + raise ValueError("N must be positive.") + x = torch.as_tensor(x, dtype=torch.complex64) + # Create frequency axis + f = torch.cat( + [ + torch.true_divide(torch.arange(0, (n - 1) // 2 + 1, device=x.device), float(n)), + torch.true_divide(torch.arange(-(n // 2), 0, device=x.device), float(n)), + ] + ) + xf = fft.fft(x, n=n, dim=self.axis) + # Create step function + u = torch.heaviside(f, torch.tensor([0.5], device=f.device)) + u = torch.as_tensor(u, dtype=x.dtype, device=u.device) + new_dims_before = self.axis + new_dims_after = len(xf.shape) - self.axis - 1 + for _ in range(new_dims_before): + u.unsqueeze_(0) + for _ in range(new_dims_after): + u.unsqueeze_(-1) + + ht = fft.ifft(xf * 2 * u, dim=self.axis) + + # Apply transform + return torch.as_tensor(ht, device=ht.device, dtype=ht.dtype) + + class GaussianFilter(nn.Module): def __init__( self, diff --git a/monai/transforms/intensity/array.py b/monai/transforms/intensity/array.py index a464109417..b1b11fe6f4 100644 --- a/monai/transforms/intensity/array.py +++ b/monai/transforms/intensity/array.py @@ -20,10 +20,11 @@ import numpy as np import torch -from monai.networks.layers import GaussianFilter +from monai.config import get_torch_version_tuple +from monai.networks.layers import GaussianFilter, HilbertTransform from monai.transforms.compose import Randomizable, Transform from monai.transforms.utils import rescale_array -from monai.utils import dtype_torch_to_numpy, ensure_tuple_size +from monai.utils import InvalidPyTorchVersionError, dtype_torch_to_numpy, ensure_tuple_size class RandGaussianNoise(Randomizable, Transform): @@ -509,6 +510,46 @@ def __call__(self, img: np.ndarray, mask_data: Optional[np.ndarray] = None) -> n return img * mask_data_ +class DetectEnvelope(Transform): + """ + Find the envelope of the input data along the requested axis using a Hilbert transform. + Requires PyTorch 1.7.0+ and the PyTorch FFT module (which is not included in NVIDIA PyTorch Release 20.10). + + Args: + axis: Axis along which to detect the envelope. Default 1, i.e. the first spatial dimension. + N: FFT size. Default img.shape[axis]. Input will be zero-padded or truncated to this size along dimension + ``axis``. + + """ + + def __init__(self, axis: int = 1, n: Union[int, None] = None) -> None: + + if get_torch_version_tuple() < (1, 7): + raise InvalidPyTorchVersionError("1.7.0", self.__class__.__name__) + + if axis < 0: + raise ValueError("axis must be zero or positive.") + + self.axis = axis + self.n = n + + def __call__(self, img: np.ndarray) -> np.ndarray: + """ + + Args: + img: numpy.ndarray containing input data. Must be real and in shape [channels, spatial1, spatial2, ...]. + + Returns: + np.ndarray containing envelope of data in img along the specified axis. + + """ + # add one to transform axis because a batch axis will be added at dimension 0 + hilbert_transform = HilbertTransform(self.axis + 1, self.n) + # convert to Tensor and add Batch axis expected by HilbertTransform + input_data = torch.as_tensor(np.ascontiguousarray(img)).unsqueeze(0) + return np.abs(hilbert_transform(input_data).squeeze(0).numpy()) + + class GaussianSmooth(Transform): """ Apply Gaussian smooth to the input data based on specified `sigma` parameter. diff --git a/monai/utils/module.py b/monai/utils/module.py index 0edf9047ac..039c4f9fb5 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -21,6 +21,7 @@ OPTIONAL_IMPORT_MSG_FMT = "{}" __all__ = [ + "InvalidPyTorchVersionError", "OptionalImportError", "exact_version", "export", @@ -105,6 +106,17 @@ def exact_version(the_module, version_str: str = "") -> bool: return bool(the_module.__version__ == version_str) +class InvalidPyTorchVersionError(Exception): + """ + Raised when called function or method requires a more recent + PyTorch version than that installed. + """ + + def __init__(self, required_version, name): + message = f"{name} requires PyTorch version {required_version} or later" + super().__init__(message) + + class OptionalImportError(ImportError): """ Could not import APIs from an optional dependency. diff --git a/tests/test_detect_envelope.py b/tests/test_detect_envelope.py new file mode 100644 index 0000000000..aec014731b --- /dev/null +++ b/tests/test_detect_envelope.py @@ -0,0 +1,165 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +from monai.transforms import DetectEnvelope +from monai.utils import InvalidPyTorchVersionError, OptionalImportError +from tests.utils import SkipIfAtLeastPyTorchVersion, SkipIfBeforePyTorchVersion, SkipIfModule, SkipIfNoModule + +n_samples = 500 +hann_windowed_sine = np.sin(2 * np.pi * 10 * np.linspace(0, 1, n_samples)) * np.hanning(n_samples) + +# SINGLE-CHANNEL VALUE TESTS +# using np.expand_dims() to add length 1 channel dimension at dimension 0 + +TEST_CASE_1D_SINE = [ + {}, # args (empty, so use default) + np.expand_dims(hann_windowed_sine, 0), # Input data: Hann windowed sine wave + np.expand_dims(np.hanning(n_samples), 0), # Expected output: the Hann window + 1e-4, # absolute tolerance +] + +TEST_CASE_2D_SINE = [ + {}, # args (empty, so use default (i.e. process along first spatial dimension, axis=1) + # Create 10 identical windowed sine waves as a 2D numpy array + np.expand_dims(np.stack([hann_windowed_sine] * 10, axis=1), 0), + # Expected output: Set of 10 identical Hann windows + np.expand_dims(np.stack([np.hanning(n_samples)] * 10, axis=1), 0), + 1e-4, # absolute tolerance +] + +TEST_CASE_3D_SINE = [ + {}, # args (empty, so use default (i.e. process along first spatial dimension, axis=1) + # Create 100 identical windowed sine waves as a (n_samples x 10 x 10) 3D numpy array + np.expand_dims(np.stack([np.stack([hann_windowed_sine] * 10, axis=1)] * 10, axis=2), 0), + # Expected output: Set of 100 identical Hann windows in (n_samples x 10 x 10) 3D numpy array + np.expand_dims(np.stack([np.stack([np.hanning(n_samples)] * 10, axis=1)] * 10, axis=2), 0), + 1e-4, # absolute tolerance +] + +TEST_CASE_2D_SINE_AXIS_1 = [ + {"axis": 2}, # set axis argument to 1 + # Create 10 identical windowed sine waves as a 2D numpy array + np.expand_dims(np.stack([hann_windowed_sine] * 10, axis=1), 0), + # Expected output: absolute value of each sample of the waveform, repeated (i.e. flat envelopes) + np.expand_dims(np.abs(np.repeat(hann_windowed_sine, 10).reshape((n_samples, 10))), 0), + 1e-4, # absolute tolerance +] + +TEST_CASE_1D_SINE_PADDING_N = [ + {"n": 512}, # args (empty, so use default) + np.expand_dims(hann_windowed_sine, 0), # Input data: Hann windowed sine wave + np.expand_dims(np.concatenate([np.hanning(500), np.zeros(12)]), 0), # Expected output: the Hann window + 1e-3, # absolute tolerance +] + +# MULTI-CHANNEL VALUE TEST + +TEST_CASE_2_CHAN_3D_SINE = [ + {}, # args (empty, so use default (i.e. process along first spatial dimension, axis=1) + # Create 100 identical windowed sine waves as a (n_samples x 10 x 10) 3D numpy array, twice (2 channels) + np.stack([np.stack([np.stack([hann_windowed_sine] * 10, axis=1)] * 10, axis=2)] * 2, axis=0), + # Expected output: Set of 100 identical Hann windows in (n_samples x 10 x 10) 3D numpy array, twice (2 channels) + np.stack([np.stack([np.stack([np.hanning(n_samples)] * 10, axis=1)] * 10, axis=2)] * 2, axis=0), + 1e-4, # absolute tolerance +] + +# EXCEPTION TESTS + +TEST_CASE_INVALID_AXIS_1 = [ + {"axis": 3}, # set axis argument to 3 when only 3 dimensions (1 channel + 2 spatial) + np.expand_dims(np.stack([hann_windowed_sine] * 10, axis=1), 0), # Create 2D dataset + "__call__", # method expected to raise exception +] + +TEST_CASE_INVALID_AXIS_2 = [ + {"axis": -1}, # set axis argument negative + np.expand_dims(np.stack([hann_windowed_sine] * 10, axis=1), 0), # Create 2D dataset + "__init__", # method expected to raise exception +] + +TEST_CASE_INVALID_N = [ + {"n": 0}, # set FFT length to zero + np.expand_dims(np.stack([hann_windowed_sine] * 10, axis=1), 0), # Create 2D dataset + "__call__", # method expected to raise exception +] + +TEST_CASE_INVALID_DTYPE = [ + {}, + np.expand_dims(np.array(hann_windowed_sine, dtype=np.complex), 0), # complex numbers are invalid + "__call__", # method expected to raise exception +] + +TEST_CASE_INVALID_IMG_LEN = [ + {}, + np.expand_dims(np.array([]), 0), # empty array is invalid + "__call__", # method expected to raise exception +] + +TEST_CASE_INVALID_OBJ = [{}, "a string", "__call__"] # method expected to raise exception + + +@SkipIfBeforePyTorchVersion((1, 7)) +@SkipIfNoModule("torch.fft") +class TestDetectEnvelope(unittest.TestCase): + @parameterized.expand( + [ + TEST_CASE_1D_SINE, + TEST_CASE_2D_SINE, + TEST_CASE_3D_SINE, + TEST_CASE_2D_SINE_AXIS_1, + TEST_CASE_1D_SINE_PADDING_N, + TEST_CASE_2_CHAN_3D_SINE, + ] + ) + def test_value(self, arguments, image, expected_data, atol): + result = DetectEnvelope(**arguments)(image) + np.testing.assert_allclose(result, expected_data, atol=atol) + + @parameterized.expand( + [ + TEST_CASE_INVALID_AXIS_1, + TEST_CASE_INVALID_AXIS_2, + TEST_CASE_INVALID_N, + TEST_CASE_INVALID_DTYPE, + TEST_CASE_INVALID_IMG_LEN, + ] + ) + def test_value_error(self, arguments, image, method): + if method == "__init__": + self.assertRaises(ValueError, DetectEnvelope, **arguments) + elif method == "__call__": + self.assertRaises(ValueError, DetectEnvelope(**arguments), image) + else: + raise ValueError("Expected raising method invalid. Should be __init__ or __call__.") + + +@SkipIfBeforePyTorchVersion((1, 7)) +@SkipIfModule("torch.fft") +class TestHilbertTransformNoFFTMod(unittest.TestCase): + def test_no_fft_module_error(self): + self.assertRaises(OptionalImportError, DetectEnvelope(), np.random.rand(1, 10)) + + +@SkipIfAtLeastPyTorchVersion((1, 7)) +class TestDetectEnvelopeInvalidPyTorch(unittest.TestCase): + def test_invalid_pytorch_error(self): + with self.assertRaises(InvalidPyTorchVersionError) as cm: + DetectEnvelope() + self.assertEqual("DetectEnvelope requires PyTorch version 1.7.0 or later", str(cm.exception)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_hilbert_transform.py b/tests/test_hilbert_transform.py new file mode 100644 index 0000000000..1e9e0e660f --- /dev/null +++ b/tests/test_hilbert_transform.py @@ -0,0 +1,226 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +import torch +from parameterized import parameterized + +from monai.networks.layers import HilbertTransform +from monai.utils import InvalidPyTorchVersionError, OptionalImportError +from tests.utils import ( + SkipIfAtLeastPyTorchVersion, + SkipIfBeforePyTorchVersion, + SkipIfModule, + SkipIfNoModule, + skip_if_no_cuda, +) + + +def create_expected_numpy_output(input_datum, **kwargs): + + x = np.fft.fft( + input_datum.cpu().numpy() if input_datum.device.type == "cuda" else input_datum.numpy(), + **kwargs, + ) + f = np.fft.fftfreq(x.shape[kwargs["axis"]]) + u = np.heaviside(f, 0.5) + new_dims_before = kwargs["axis"] + new_dims_after = len(x.shape) - kwargs["axis"] - 1 + for _ in range(new_dims_before): + u = np.expand_dims(u, 0) + for _ in range(new_dims_after): + u = np.expand_dims(u, -1) + ht = np.fft.ifft(x * 2 * u, axis=kwargs["axis"]) + + return ht + + +cpu = torch.device("cpu") +n_samples = 500 +hann_windowed_sine = np.sin(2 * np.pi * 10 * np.linspace(0, 1, n_samples)) * np.hanning(n_samples) + +# CPU TEST DATA + +cpu_input_data = dict() +cpu_input_data["1D"] = torch.as_tensor(hann_windowed_sine, device=cpu).unsqueeze(0).unsqueeze(0) +cpu_input_data["2D"] = ( + torch.as_tensor(np.stack([hann_windowed_sine] * 10, axis=1), device=cpu).unsqueeze(0).unsqueeze(0) +) +cpu_input_data["3D"] = ( + torch.as_tensor(np.stack([np.stack([hann_windowed_sine] * 10, axis=1)] * 10, axis=2), device=cpu) + .unsqueeze(0) + .unsqueeze(0) +) +cpu_input_data["1D 2CH"] = torch.as_tensor(np.stack([hann_windowed_sine] * 10, axis=1), device=cpu).unsqueeze(0) +cpu_input_data["2D 2CH"] = torch.as_tensor( + np.stack([np.stack([hann_windowed_sine] * 10, axis=1)] * 10, axis=2), device=cpu +).unsqueeze(0) + +# SINGLE-CHANNEL CPU VALUE TESTS + +TEST_CASE_1D_SINE_CPU = [ + {}, # args (empty, so use default) + cpu_input_data["1D"], # Input data: Random 1D signal + create_expected_numpy_output(cpu_input_data["1D"], axis=2), # Expected output: FFT of signal + 1e-5, # absolute tolerance +] + +TEST_CASE_2D_SINE_CPU = [ + {}, # args (empty, so use default) + cpu_input_data["2D"], # Input data: Random 1D signal + create_expected_numpy_output(cpu_input_data["2D"], axis=2), # Expected output: FFT of signal + 1e-5, # absolute tolerance +] + +TEST_CASE_3D_SINE_CPU = [ + {}, # args (empty, so use default) + cpu_input_data["3D"], # Input data: Random 1D signal + create_expected_numpy_output(cpu_input_data["3D"], axis=2), + 1e-5, # absolute tolerance +] + +# MULTICHANNEL CPU VALUE TESTS, PROCESS ALONG FIRST SPATIAL AXIS + +TEST_CASE_1D_2CH_SINE_CPU = [ + {}, # args (empty, so use default) + cpu_input_data["1D 2CH"], # Input data: Random 1D signal + create_expected_numpy_output(cpu_input_data["1D 2CH"], axis=2), + 1e-5, # absolute tolerance +] + +TEST_CASE_2D_2CH_SINE_CPU = [ + {}, # args (empty, so use default) + cpu_input_data["2D 2CH"], # Input data: Random 1D signal + create_expected_numpy_output(cpu_input_data["2D 2CH"], axis=2), + 1e-5, # absolute tolerance +] + +# GPU TEST DATA + +if torch.cuda.is_available(): + gpu = torch.device("cuda") + + gpu_input_data = dict() + gpu_input_data["1D"] = torch.as_tensor(hann_windowed_sine, device=gpu).unsqueeze(0).unsqueeze(0) + gpu_input_data["2D"] = ( + torch.as_tensor(np.stack([hann_windowed_sine] * 10, axis=1), device=gpu).unsqueeze(0).unsqueeze(0) + ) + gpu_input_data["3D"] = ( + torch.as_tensor(np.stack([np.stack([hann_windowed_sine] * 10, axis=1)] * 10, axis=2), device=gpu) + .unsqueeze(0) + .unsqueeze(0) + ) + gpu_input_data["1D 2CH"] = torch.as_tensor(np.stack([hann_windowed_sine] * 10, axis=1), device=gpu).unsqueeze(0) + gpu_input_data["2D 2CH"] = torch.as_tensor( + np.stack([np.stack([hann_windowed_sine] * 10, axis=1)] * 10, axis=2), device=gpu + ).unsqueeze(0) + + # SINGLE CHANNEL GPU VALUE TESTS + + TEST_CASE_1D_SINE_GPU = [ + {}, # args (empty, so use default) + gpu_input_data["1D"], # Input data: Random 1D signal + create_expected_numpy_output(gpu_input_data["1D"], axis=2), # Expected output: FFT of signal + 1e-5, # absolute tolerance + ] + + TEST_CASE_2D_SINE_GPU = [ + {}, # args (empty, so use default) + gpu_input_data["2D"], # Input data: Random 1D signal + create_expected_numpy_output(gpu_input_data["2D"], axis=2), # Expected output: FFT of signal + 1e-5, # absolute tolerance + ] + + TEST_CASE_3D_SINE_GPU = [ + {}, # args (empty, so use default) + gpu_input_data["3D"], # Input data: Random 1D signal + create_expected_numpy_output(gpu_input_data["3D"], axis=2), # Expected output: FFT of signal + 1e-5, # absolute tolerance + ] + + # MULTICHANNEL GPU VALUE TESTS, PROCESS ALONG FIRST SPATIAL AXIS + + TEST_CASE_1D_2CH_SINE_GPU = [ + {}, # args (empty, so use default) + gpu_input_data["1D 2CH"], # Input data: Random 1D signal + create_expected_numpy_output(gpu_input_data["1D 2CH"], axis=2), + 1e-5, # absolute tolerance + ] + + TEST_CASE_2D_2CH_SINE_GPU = [ + {}, # args (empty, so use default) + gpu_input_data["2D 2CH"], # Input data: Random 1D signal + create_expected_numpy_output(gpu_input_data["2D 2CH"], axis=2), + 1e-5, # absolute tolerance + ] + +# TESTS CHECKING PADDING, AXIS SELECTION ETC ARE COVERED BY test_detect_envelope.py + + +@SkipIfBeforePyTorchVersion((1, 7)) +@SkipIfNoModule("torch.fft") +class TestHilbertTransformCPU(unittest.TestCase): + @parameterized.expand( + [ + TEST_CASE_1D_SINE_CPU, + TEST_CASE_2D_SINE_CPU, + TEST_CASE_3D_SINE_CPU, + TEST_CASE_1D_2CH_SINE_CPU, + TEST_CASE_2D_2CH_SINE_CPU, + ] + ) + def test_value(self, arguments, image, expected_data, atol): + result = HilbertTransform(**arguments)(image) + result = result.squeeze(0).squeeze(0).numpy() + np.testing.assert_allclose(result, expected_data.squeeze(), atol=atol) + + +@skip_if_no_cuda +@SkipIfBeforePyTorchVersion((1, 7)) +@SkipIfNoModule("torch.fft") +class TestHilbertTransformGPU(unittest.TestCase): + @parameterized.expand( + [] + if not torch.cuda.is_available() + else [ + TEST_CASE_1D_SINE_GPU, + TEST_CASE_2D_SINE_GPU, + TEST_CASE_3D_SINE_GPU, + TEST_CASE_1D_2CH_SINE_GPU, + TEST_CASE_2D_2CH_SINE_GPU, + ], + skip_on_empty=True, + ) + def test_value(self, arguments, image, expected_data, atol): + result = HilbertTransform(**arguments)(image) + result = result.squeeze(0).squeeze(0).cpu().numpy() + np.testing.assert_allclose(result, expected_data.squeeze(), atol=atol) + + +@SkipIfBeforePyTorchVersion((1, 7)) +@SkipIfModule("torch.fft") +class TestHilbertTransformNoFFTMod(unittest.TestCase): + def test_no_fft_module_error(self): + self.assertRaises(OptionalImportError, HilbertTransform(), torch.randn(1, 1, 10)) + + +@SkipIfAtLeastPyTorchVersion((1, 7)) +class TestHilbertTransformInvalidPyTorch(unittest.TestCase): + def test_invalid_pytorch_error(self): + with self.assertRaises(InvalidPyTorchVersionError) as cm: + HilbertTransform() + self.assertEqual("HilbertTransform requires PyTorch version 1.7.0 or later", str(cm.exception)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/utils.py b/tests/utils.py index 6c717264ac..763ddaa9b2 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -28,6 +28,7 @@ import torch import torch.distributed as dist +from monai.config import get_torch_version_tuple from monai.data import create_test_image_2d, create_test_image_3d from monai.utils import ensure_tuple, optional_import, set_determinism @@ -66,6 +67,18 @@ def __call__(self, obj): return unittest.skipIf(self.module_missing, f"optional module not present: {self.module_name}")(obj) +class SkipIfModule(object): + """Decorator to be used if test should be skipped + when optional module is present.""" + + def __init__(self, module_name): + self.module_name = module_name + self.module_avail = optional_import(self.module_name)[1] + + def __call__(self, obj): + return unittest.skipIf(self.module_avail, f"Skipping because optional module present: {self.module_name}")(obj) + + def skip_if_no_cuda(obj): """ Skip the unit tests if torch.cuda.is_available is False @@ -80,6 +93,34 @@ def skip_if_windows(obj): return unittest.skipIf(sys.platform == "win32", "Skipping tests on Windows")(obj) +class SkipIfBeforePyTorchVersion(object): + """Decorator to be used if test should be skipped + with PyTorch versions older than that given.""" + + def __init__(self, pytorch_version_tuple): + self.min_version = pytorch_version_tuple + self.version_too_old = get_torch_version_tuple() < self.min_version + + def __call__(self, obj): + return unittest.skipIf( + self.version_too_old, f"Skipping tests that fail on PyTorch versions before: {self.min_version}" + )(obj) + + +class SkipIfAtLeastPyTorchVersion(object): + """Decorator to be used if test should be skipped + with PyTorch versions older than that given.""" + + def __init__(self, pytorch_version_tuple): + self.max_version = pytorch_version_tuple + self.version_too_new = get_torch_version_tuple() >= self.max_version + + def __call__(self, obj): + return unittest.skipIf( + self.version_too_new, f"Skipping tests that fail on PyTorch versions at least: {self.max_version}" + )(obj) + + def make_nifti_image(array, affine=None): """ Create a temporary nifti image on the disk and return the image name. From 31e0f8db5d57fce1012ffc4eaf97393b2539303a Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Fri, 11 Dec 2020 10:32:32 +0000 Subject: [PATCH 12/40] ci/cd with 1.7.1 (#1345) * ci/cd with 1.7.1 Signed-off-by: Wenqi Li * revise various tests, fixes docs Signed-off-by: Wenqi Li * temp full tests Signed-off-by: Wenqi Li * remove temp. tests Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- .github/workflows/integration.yml | 2 +- .github/workflows/pythonapp.yml | 14 +++++++------- .github/workflows/setupapp.yml | 6 +++--- docs/source/utils.rst | 5 +++++ monai/config/deviceconfig.py | 8 -------- monai/networks/layers/simplelayers.py | 7 +++---- monai/transforms/intensity/array.py | 5 ++--- monai/utils/misc.py | 21 --------------------- monai/utils/module.py | 23 +++++++++++++++++++++++ monai/utils/profiling.py | 22 +++++++++++++++++++++- tests/min_tests.py | 2 ++ tests/test_detect_envelope.py | 3 +-- tests/test_highresnet.py | 2 +- tests/test_hilbert_transform.py | 3 +-- tests/test_integration_workflows.py | 4 ++-- tests/utils.py | 13 ++++++++++--- 16 files changed, 82 insertions(+), 58 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 1dcc7675f0..003a746de4 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -34,7 +34,7 @@ jobs: which python python -m pip install --upgrade pip wheel python -m pip uninstall -y torch torchvision - python -m pip install torch==1.7.0 torchvision==0.8.1 + python -m pip install torch==1.7.1 torchvision==0.8.2 python -m pip install -r requirements-dev.txt - name: Run integration tests run: | diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 4db50b2723..8e92ea0ed7 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -80,13 +80,13 @@ jobs: - if: runner.os == 'windows' name: Install torch cpu from pytorch.org (Windows only) run: | - python -m pip install torch==1.7.0+cpu torchvision==0.8.1+cpu -f https://download.pytorch.org/whl/torch_stable.html + python -m pip install torch==1.7.1+cpu torchvision==0.8.2+cpu -f https://download.pytorch.org/whl/torch_stable.html # min. requirements for windows instances python -c "f=open('requirements-dev.txt', 'r'); txt=f.readlines(); f.close(); print(txt); f=open('requirements-dev.txt', 'w'); f.writelines(txt[1:12]); f.close()" - name: Install the dependencies run: | - python -m pip install torch==1.7.0 - python -m pip install torchvision==0.8.1 + python -m pip install torch==1.7.1 + python -m pip install torchvision==0.8.2 cat "requirements-dev.txt" python -m pip install -r requirements-dev.txt python -m pip list @@ -108,7 +108,7 @@ jobs: fail-fast: false matrix: os: [windows-latest, macOS-latest, ubuntu-latest] - timeout-minutes: 20 + timeout-minutes: 40 steps: - uses: actions/checkout@v2 - name: Set up Python 3.8 @@ -134,11 +134,11 @@ jobs: - if: runner.os == 'windows' name: Install torch cpu from pytorch.org (Windows only) run: | - python -m pip install torch==1.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html + python -m pip install torch==1.7.1+cpu -f https://download.pytorch.org/whl/torch_stable.html - name: Install the dependencies run: | # min. requirements - python -m pip install torch==1.7.0 + python -m pip install torch==1.7.1 python -m pip install -r requirements-min.txt python -m pip list BUILD_MONAI=0 python setup.py develop # no compile of extensions @@ -173,7 +173,7 @@ jobs: pytorch: "-h" base: "nvcr.io/nvidia/pytorch:20.07-py3" - environment: PT17+CUDA102 - pytorch: "torch==1.7.0 torchvision==0.8.1" + pytorch: "torch==1.7.1 torchvision==0.8.2" base: "nvcr.io/nvidia/cuda:10.2-devel-ubuntu18.04" - environment: PT17+CUDA110 # we explicitly set pytorch to -h to avoid pip install error diff --git a/.github/workflows/setupapp.yml b/.github/workflows/setupapp.yml index a3a1745977..ed5d560861 100644 --- a/.github/workflows/setupapp.yml +++ b/.github/workflows/setupapp.yml @@ -36,7 +36,7 @@ jobs: which python python -m pip install --upgrade pip wheel python -m pip uninstall -y torch torchvision - python -m pip install torch==1.7.0 torchvision==0.8.1 + python -m pip install torch==1.7.1 torchvision==0.8.2 python -m pip install -r requirements-dev.txt - name: Run unit tests report coverage run: | @@ -82,7 +82,7 @@ jobs: - name: Install the dependencies run: | python -m pip install --upgrade pip wheel - python -m pip install torch==1.7.0 torchvision==0.8.1 + python -m pip install torch==1.7.1 torchvision==0.8.2 python -m pip install -r requirements-dev.txt - name: Run quick tests CPU ubuntu run: | @@ -151,7 +151,7 @@ jobs: run: | docker build -t localhost:5000/local_monai:latest -f Dockerfile . docker push localhost:5000/local_monai:latest - sed -i '/flake/d' requirements-dev.txt + sed -i '/flake/d' requirements-dev.txt docker build -t projectmonai/monai:latest -f Dockerfile . docker login -u projectmonai -p ${{ secrets.DOCKER_PW }} docker push projectmonai/monai:latest diff --git a/docs/source/utils.rst b/docs/source/utils.rst index 6a03529c30..e0b993da60 100644 --- a/docs/source/utils.rst +++ b/docs/source/utils.rst @@ -26,3 +26,8 @@ Misc ---- .. automodule:: monai.utils.misc :members: + +Profiling +--------- +.. automodule:: monai.utils.profiling + :members: diff --git a/monai/config/deviceconfig.py b/monai/config/deviceconfig.py index 1bb2bb7907..355069f941 100644 --- a/monai/config/deviceconfig.py +++ b/monai/config/deviceconfig.py @@ -100,14 +100,6 @@ def set_visible_devices(*dev_inds): os.environ["CUDA_VISIBLE_DEVICES"] = ",".join(map(str, dev_inds)) -def get_torch_version_tuple(): - """ - Returns: - tuple of ints represents the pytorch major/minor version. - """ - return tuple((int(x) for x in torch.__version__.split(".")[:2])) - - def _dict_append(in_dict, key, fn): try: in_dict[key] = fn() diff --git a/monai/networks/layers/simplelayers.py b/monai/networks/layers/simplelayers.py index bd800a7c91..4860b2862c 100644 --- a/monai/networks/layers/simplelayers.py +++ b/monai/networks/layers/simplelayers.py @@ -17,12 +17,11 @@ from torch import nn from torch.autograd import Function -from monai.config import get_torch_version_tuple from monai.networks.layers.convutils import gaussian_1d, same_padding -from monai.utils import InvalidPyTorchVersionError, SkipMode, ensure_tuple_rep, optional_import +from monai.utils import PT_BEFORE_1_7, InvalidPyTorchVersionError, SkipMode, ensure_tuple_rep, optional_import _C, _ = optional_import("monai._C") -if tuple(int(s) for s in torch.__version__.split(".")[0:2]) >= (1, 7): +if not PT_BEFORE_1_7: fft, _ = optional_import("torch.fft") __all__ = ["SkipConnection", "Flatten", "GaussianFilter", "LLTM", "Reshape", "separable_filtering", "HilbertTransform"] @@ -145,7 +144,7 @@ class HilbertTransform(nn.Module): def __init__(self, axis: int = 2, n: Union[int, None] = None) -> None: - if get_torch_version_tuple() < (1, 7): + if PT_BEFORE_1_7: raise InvalidPyTorchVersionError("1.7.0", self.__class__.__name__) super().__init__() diff --git a/monai/transforms/intensity/array.py b/monai/transforms/intensity/array.py index b1b11fe6f4..58eb0da2a7 100644 --- a/monai/transforms/intensity/array.py +++ b/monai/transforms/intensity/array.py @@ -20,11 +20,10 @@ import numpy as np import torch -from monai.config import get_torch_version_tuple from monai.networks.layers import GaussianFilter, HilbertTransform from monai.transforms.compose import Randomizable, Transform from monai.transforms.utils import rescale_array -from monai.utils import InvalidPyTorchVersionError, dtype_torch_to_numpy, ensure_tuple_size +from monai.utils import PT_BEFORE_1_7, InvalidPyTorchVersionError, dtype_torch_to_numpy, ensure_tuple_size class RandGaussianNoise(Randomizable, Transform): @@ -524,7 +523,7 @@ class DetectEnvelope(Transform): def __init__(self, axis: int = 1, n: Union[int, None] = None) -> None: - if get_torch_version_tuple() < (1, 7): + if PT_BEFORE_1_7: raise InvalidPyTorchVersionError("1.7.0", self.__class__.__name__) if axis < 0: diff --git a/monai/utils/misc.py b/monai/utils/misc.py index ef688174f1..020884bbcc 100644 --- a/monai/utils/misc.py +++ b/monai/utils/misc.py @@ -12,7 +12,6 @@ import collections.abc import itertools import random -import time from ast import literal_eval from distutils.util import strtobool from typing import Any, Callable, Optional, Sequence, Tuple, Union @@ -287,23 +286,3 @@ def dtype_torch_to_numpy(dtype): def dtype_numpy_to_torch(dtype): """Convert a numpy dtype to its torch equivalent.""" return _np_to_torch_dtype[dtype] - - -class PerfContext: - """ - Context manager for tracking how much time is spent within context blocks. This uses `time.perf_counter` to - accumulate the total amount of time in seconds in the attribute `total_time` over however many context blocks - the object is used in. - """ - - def __init__(self): - self.total_time = 0 - self.start_time = None - - def __enter__(self): - self.start_time = time.perf_counter() - return self - - def __exit__(self, exc_type, exc_value, exc_traceback): - self.total_time += time.perf_counter() - self.start_time - self.start_time = None diff --git a/monai/utils/module.py b/monai/utils/module.py index 039c4f9fb5..4bc9a6d63b 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -16,6 +16,8 @@ from re import match from typing import Any, Callable, List, Sequence, Tuple, Union +import torch + from .misc import ensure_tuple OPTIONAL_IMPORT_MSG_FMT = "{}" @@ -31,6 +33,8 @@ "get_full_type_name", "has_option", "get_package_version", + "get_torch_version_tuple", + "PT_BEFORE_1_7", ] @@ -264,3 +268,22 @@ def get_package_version(dep_name, default="NOT INSTALLED or UNKNOWN VERSION."): del dep del sys.modules[dep_name] return dep_ver + + +def get_torch_version_tuple(): + """ + Returns: + tuple of ints represents the pytorch major/minor version. + """ + return tuple((int(x) for x in torch.__version__.split(".")[:2])) + + +PT_BEFORE_1_7 = True +ver, has_ver = optional_import("pkg_resources", name="parse_version") +try: + if has_ver: + PT_BEFORE_1_7 = ver(torch.__version__) < ver("1.7") + else: + PT_BEFORE_1_7 = get_torch_version_tuple() < (1, 7) +except (AttributeError, TypeError): + pass diff --git a/monai/utils/profiling.py b/monai/utils/profiling.py index a8d6e2c630..bcdc0357c4 100644 --- a/monai/utils/profiling.py +++ b/monai/utils/profiling.py @@ -14,7 +14,7 @@ import torch -__all__ = ["torch_profiler_full", "torch_profiler_time_cpu_gpu", "torch_profiler_time_end_to_end"] +__all__ = ["torch_profiler_full", "torch_profiler_time_cpu_gpu", "torch_profiler_time_end_to_end", "PerfContext"] def torch_profiler_full(func): @@ -88,3 +88,23 @@ def wrapper(*args, **kwargs): return result return wrapper + + +class PerfContext: + """ + Context manager for tracking how much time is spent within context blocks. This uses `time.perf_counter` to + accumulate the total amount of time in seconds in the attribute `total_time` over however many context blocks + the object is used in. + """ + + def __init__(self): + self.total_time = 0 + self.start_time = None + + def __enter__(self): + self.start_time = time.perf_counter() + return self + + def __exit__(self, exc_type, exc_value, exc_traceback): + self.total_time += time.perf_counter() - self.start_time + self.start_time = None diff --git a/tests/min_tests.py b/tests/min_tests.py index e22d94bc57..cd855aa543 100644 --- a/tests/min_tests.py +++ b/tests/min_tests.py @@ -32,6 +32,7 @@ def run_testsuit(): "test_cachedataset", "test_cachedataset_parallel", "test_dataset", + "test_detect_envelope", "test_iterable_dataset", "test_ensemble_evaluator", "test_handler_checkpoint_loader", @@ -51,6 +52,7 @@ def run_testsuit(): "test_handler_validation", "test_hausdorff_distance", "test_header_correct", + "test_hilbert_transform", "test_img2tensorboard", "test_integration_segmentation_3d", "test_integration_sliding_window", diff --git a/tests/test_detect_envelope.py b/tests/test_detect_envelope.py index aec014731b..cbd281f6e8 100644 --- a/tests/test_detect_envelope.py +++ b/tests/test_detect_envelope.py @@ -156,9 +156,8 @@ def test_no_fft_module_error(self): @SkipIfAtLeastPyTorchVersion((1, 7)) class TestDetectEnvelopeInvalidPyTorch(unittest.TestCase): def test_invalid_pytorch_error(self): - with self.assertRaises(InvalidPyTorchVersionError) as cm: + with self.assertRaisesRegexp(InvalidPyTorchVersionError, "version"): DetectEnvelope() - self.assertEqual("DetectEnvelope requires PyTorch version 1.7.0 or later", str(cm.exception)) if __name__ == "__main__": diff --git a/tests/test_highresnet.py b/tests/test_highresnet.py index 6a4b129588..0afa4b1a9b 100644 --- a/tests/test_highresnet.py +++ b/tests/test_highresnet.py @@ -53,7 +53,7 @@ def test_shape(self, input_param, input_shape, expected_shape): result = net.forward(torch.randn(input_shape).to(device)) self.assertEqual(result.shape, expected_shape) - @TimedCall(seconds=100, force_quit=True) + @TimedCall(seconds=200, force_quit=True) def test_script(self): input_param, input_shape, expected_shape = TEST_CASE_1 net = HighResNet(**input_param) diff --git a/tests/test_hilbert_transform.py b/tests/test_hilbert_transform.py index 1e9e0e660f..1099468102 100644 --- a/tests/test_hilbert_transform.py +++ b/tests/test_hilbert_transform.py @@ -217,9 +217,8 @@ def test_no_fft_module_error(self): @SkipIfAtLeastPyTorchVersion((1, 7)) class TestHilbertTransformInvalidPyTorch(unittest.TestCase): def test_invalid_pytorch_error(self): - with self.assertRaises(InvalidPyTorchVersionError) as cm: + with self.assertRaisesRegex(InvalidPyTorchVersionError, "version"): HilbertTransform() - self.assertEqual("HilbertTransform requires PyTorch version 1.7.0 or later", str(cm.exception)) if __name__ == "__main__": diff --git a/tests/test_integration_workflows.py b/tests/test_integration_workflows.py index 2a0b5d5d86..8e96947ccb 100644 --- a/tests/test_integration_workflows.py +++ b/tests/test_integration_workflows.py @@ -296,7 +296,7 @@ def train_and_infer(self, idx=0): def test_training(self): repeated = [] - test_rounds = 3 if monai.config.get_torch_version_tuple() >= (1, 6) else 2 + test_rounds = 3 if monai.utils.module.get_torch_version_tuple() >= (1, 6) else 2 for i in range(test_rounds): results = self.train_and_infer(idx=i) repeated.append(results) @@ -308,7 +308,7 @@ def test_training(self): daemon=False, ) def test_timing(self): - if monai.config.get_torch_version_tuple() >= (1, 6): + if monai.utils.module.get_torch_version_tuple() >= (1, 6): self.train_and_infer(idx=2) diff --git a/tests/utils.py b/tests/utils.py index 763ddaa9b2..50c159053e 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -28,11 +28,12 @@ import torch import torch.distributed as dist -from monai.config import get_torch_version_tuple from monai.data import create_test_image_2d, create_test_image_3d from monai.utils import ensure_tuple, optional_import, set_determinism +from monai.utils.module import get_torch_version_tuple nib, _ = optional_import("nibabel") +ver, has_pkg_res = optional_import("pkg_resources", name="parse_version") quick_test_var = "QUICKTEST" @@ -99,7 +100,10 @@ class SkipIfBeforePyTorchVersion(object): def __init__(self, pytorch_version_tuple): self.min_version = pytorch_version_tuple - self.version_too_old = get_torch_version_tuple() < self.min_version + if has_pkg_res: + self.version_too_old = ver(torch.__version__) < ver(".".join(map(str, self.min_version))) + else: + self.version_too_old = get_torch_version_tuple() < self.min_version def __call__(self, obj): return unittest.skipIf( @@ -113,7 +117,10 @@ class SkipIfAtLeastPyTorchVersion(object): def __init__(self, pytorch_version_tuple): self.max_version = pytorch_version_tuple - self.version_too_new = get_torch_version_tuple() >= self.max_version + if has_pkg_res: + self.version_too_new = ver(torch.__version__) >= ver(".".join(map(str, self.max_version))) + else: + self.version_too_new = get_torch_version_tuple() >= self.max_version def __call__(self, obj): return unittest.skipIf( From 2b4db5b37e0425f2c5764cd8f2ccb2fb40abf021 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Fri, 11 Dec 2020 23:40:50 +0800 Subject: [PATCH 13/40] 1349 Align output data type with input in NormalizeIntensity (#1352) * [DLMED] add astype in NormalizeIntensity transform Signed-off-by: Nic Ma * [DLMED] update according to comments Signed-off-by: Nic Ma Signed-off-by: Sachidanand Alle --- monai/transforms/intensity/array.py | 5 ++++- monai/transforms/intensity/dictionary.py | 4 +++- tests/test_normalize_intensity.py | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/monai/transforms/intensity/array.py b/monai/transforms/intensity/array.py index 58eb0da2a7..ac2d1e46fd 100644 --- a/monai/transforms/intensity/array.py +++ b/monai/transforms/intensity/array.py @@ -200,6 +200,7 @@ class NormalizeIntensity(Transform): nonzero: whether only normalize non-zero values. channel_wise: if using calculated mean and std, calculate on each channel separately or calculate on the entire image directly. + dtype: output data type, defaut to float32. """ def __init__( @@ -208,11 +209,13 @@ def __init__( divisor: Optional[Sequence] = None, nonzero: bool = False, channel_wise: bool = False, + dtype: np.dtype = np.float32, ) -> None: self.subtrahend = subtrahend self.divisor = divisor self.nonzero = nonzero self.channel_wise = channel_wise + self.dtype = dtype def _normalize(self, img: np.ndarray, sub=None, div=None) -> np.ndarray: slices = (img != 0) if self.nonzero else np.ones(img.shape, dtype=np.bool_) @@ -252,7 +255,7 @@ def __call__(self, img: np.ndarray) -> np.ndarray: else: img = self._normalize(img, self.subtrahend, self.divisor) - return img + return img.astype(self.dtype) class ThresholdIntensity(Transform): diff --git a/monai/transforms/intensity/dictionary.py b/monai/transforms/intensity/dictionary.py index f0030849d9..64f641ecd1 100644 --- a/monai/transforms/intensity/dictionary.py +++ b/monai/transforms/intensity/dictionary.py @@ -227,6 +227,7 @@ class NormalizeIntensityd(MapTransform): nonzero: whether only normalize non-zero values. channel_wise: if using calculated mean and std, calculate on each channel separately or calculate on the entire image directly. + dtype: output data type, defaut to float32. """ def __init__( @@ -236,9 +237,10 @@ def __init__( divisor: Optional[np.ndarray] = None, nonzero: bool = False, channel_wise: bool = False, + dtype: np.dtype = np.float32, ) -> None: super().__init__(keys) - self.normalizer = NormalizeIntensity(subtrahend, divisor, nonzero, channel_wise) + self.normalizer = NormalizeIntensity(subtrahend, divisor, nonzero, channel_wise, dtype) def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.ndarray]: d = dict(data) diff --git a/tests/test_normalize_intensity.py b/tests/test_normalize_intensity.py index a5021c5f26..06768f77b7 100644 --- a/tests/test_normalize_intensity.py +++ b/tests/test_normalize_intensity.py @@ -59,6 +59,7 @@ class TestNormalizeIntensity(NumpyImageTestCase2D): def test_default(self): normalizer = NormalizeIntensity() normalized = normalizer(self.imt) + self.assertTrue(normalized.dtype == np.float32) expected = (self.imt - np.mean(self.imt)) / np.std(self.imt) np.testing.assert_allclose(normalized, expected, rtol=1e-6) From 22ef30175cd836e5d556878a57d8f6995f83c93c Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Fri, 11 Dec 2020 16:51:19 +0000 Subject: [PATCH 14/40] fixes #1353 (#1354) Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- monai/data/dataset.py | 7 +++++-- tests/test_lmdbdataset.py | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/monai/data/dataset.py b/monai/data/dataset.py index bf2d22f838..892546b2a4 100644 --- a/monai/data/dataset.py +++ b/monai/data/dataset.py @@ -321,6 +321,7 @@ def __init__( cache_dir: Union[Path, str] = "cache", hash_func: Callable[..., bytes] = pickle_hashing, db_name: str = "monai_cache", + progress: bool = True, pickle_protocol=pickle.HIGHEST_PROTOCOL, lmdb_kwargs: Optional[dict] = None, ) -> None: @@ -338,6 +339,7 @@ def __init__( hash_func: a callable to compute hash from data items to be cached. defaults to `monai.data.utils.pickle_hashing`. db_name: lmdb database file name. Defaults to "monai_cache". + progress: whether to display a progress bar. pickle_protocol: pickle protocol version. Defaults to pickle.HIGHEST_PROTOCOL. https://docs.python.org/3/library/pickle.html#pickle-protocols lmdb_kwargs: additional keyword arguments to the lmdb environment. @@ -352,15 +354,16 @@ def __init__( if not self.lmdb_kwargs.get("map_size", 0): self.lmdb_kwargs["map_size"] = 1024 ** 4 # default map_size self._read_env = None + self.progress = progress + print(f"Accessing lmdb file: {self.db_file.absolute()}.") def _fill_cache_start_reader(self): # create cache - print(f"Accessing lmdb file: {self.db_file.absolute()}.") self.lmdb_kwargs["readonly"] = False env = lmdb.open(path=f"{self.db_file}", subdir=False, **self.lmdb_kwargs) if not has_tqdm: warnings.warn("LMDBDataset: tqdm is not installed. not displaying the caching progress.") - for item in tqdm(self.data) if has_tqdm else self.data: + for item in tqdm(self.data) if has_tqdm and self.progress else self.data: key = self.hash_func(item) done, retry, val = False, 5, None while not done and retry > 0: diff --git a/tests/test_lmdbdataset.py b/tests/test_lmdbdataset.py index b867e31e20..e4d79ad4bd 100644 --- a/tests/test_lmdbdataset.py +++ b/tests/test_lmdbdataset.py @@ -144,11 +144,15 @@ def test_shape(self, transform, expected_shape, kwargs=None): ] cache_dir = os.path.join(os.path.join(tempdir, "cache"), "data") - dataset_precached = LMDBDataset(data=test_data, transform=transform, cache_dir=cache_dir, **kwargs) + dataset_precached = LMDBDataset( + data=test_data, transform=transform, progress=False, cache_dir=cache_dir, **kwargs + ) data1_precached = dataset_precached[0] data2_precached = dataset_precached[1] - dataset_postcached = LMDBDataset(data=test_data, transform=transform, cache_dir=cache_dir, **kwargs) + dataset_postcached = LMDBDataset( + data=test_data, transform=transform, progress=False, cache_dir=cache_dir, **kwargs + ) data1_postcached = dataset_postcached[0] data2_postcached = dataset_postcached[1] From 9ebc3ff44ec8a6976d567ba5c098c252c5169a2b Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 11 Dec 2020 19:05:49 +0000 Subject: [PATCH 15/40] Occ sens stride (#1356) * add striding for occlusion sensitivity Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> * autofix changes Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> * baseline - sensitivity Signed-off-by: Rich <33289025+rijobro@users.noreply.github.com> Signed-off-by: Sachidanand Alle --- monai/metrics/occlusion_sensitivity.py | 55 +++++++++++++++++---- tests/test_compute_occlusion_sensitivity.py | 1 + 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/monai/metrics/occlusion_sensitivity.py b/monai/metrics/occlusion_sensitivity.py index 900cfe4645..9879f472a9 100644 --- a/monai/metrics/occlusion_sensitivity.py +++ b/monai/metrics/occlusion_sensitivity.py @@ -10,7 +10,8 @@ # limitations under the License. from collections.abc import Sequence -from typing import Union +from functools import partial +from typing import Optional, Union import numpy as np import torch @@ -18,6 +19,8 @@ try: from tqdm import trange + + trange = partial(trange, desc="Computing occlusion sensitivity") except (ImportError, AttributeError): trange = range @@ -84,7 +87,9 @@ def compute_occlusion_sensitivity( pad_val: float = 0.0, margin: Union[int, Sequence] = 2, n_batch: int = 128, - b_box: Union[Sequence, None] = None, + b_box: Optional[Sequence] = None, + stride: Union[int, Sequence] = 1, + upsample_mode: str = "nearest", ) -> np.ndarray: """ This function computes the occlusion sensitivity for a model's prediction @@ -123,6 +128,13 @@ def compute_occlusion_sensitivity( speed the analysis up, which might be useful for larger images. * Min and max are inclusive, so [0, 63, ...] will have size (64, ...). * Use -ve to use 0 for min values and im.shape[x]-1 for xth dimension. + stride: Stride for performing occlusions. Can be single value or sequence + (for varying stride in the different directions). Should be >= 1. + upsample_mode: If stride != 1 is used, we'll upsample such that the size + of the voxels in the output image match the input. Upsampling is done with + ``torch.nn.Upsample``, and mode can be set to: + * ``nearest``, ``linear``, ``bilinear``, ``bicubic`` and ``trilinear`` + * default is ``nearest``. Returns: Numpy array. If no bounding box is supplied, this will be the same size as the input image. If a bounding box is used, the output image will be @@ -147,12 +159,28 @@ def compute_occlusion_sensitivity( # If no bounding box supplied, output shape is same as input shape. # If bounding box is present, shape is max - min + 1 output_im_shape = im_shape if b_box is None else b_box_max - b_box_min + 1 - num_required_predictions = np.prod(output_im_shape) + + # Calculate the downsampled shape + if not isinstance(stride, Sequence): + stride_np = np.full_like(im_shape, stride, dtype=np.int32) + stride_np[0] = 1 # always do stride 1 in channel dimension + else: + # Convert to numpy array and check dimensions match + stride_np = np.array(stride, dtype=np.int32) + if stride_np.size != im_shape.size: + raise ValueError("Sizes of image shape and stride should match.") + + # Obviously if stride = 1, downsampled_im_shape == output_im_shape + downsampled_im_shape = np.floor(output_im_shape / stride_np).astype(np.int32) + downsampled_im_shape[downsampled_im_shape == 0] = 1 # make sure dimension sizes are >= 1 + num_required_predictions = np.prod(downsampled_im_shape) # Loop 1D over image for i in trange(num_required_predictions): # Get corresponding ND index - idx = np.unravel_index(i, output_im_shape) + idx = np.unravel_index(i, downsampled_im_shape) + # Multiply by stride + idx *= stride_np # If a bounding box is being used, we need to add on # the min to shift to start of region of interest if b_box_min is not None: @@ -178,11 +206,20 @@ def compute_occlusion_sensitivity( batch_images = [] batch_ids = [] + # Subtract from baseline + sensitivity_im = baseline - sensitivity_im + + # Reshape to match downsampled image + sensitivity_im = sensitivity_im.reshape(tuple(downsampled_im_shape)) + + # If necessary, upsample + if np.any(stride_np != 1): + output_im_shape = tuple(output_im_shape[1:]) # needs to be given as 3D tuple + upsampler = nn.Upsample(size=output_im_shape, mode=upsample_mode) + sensitivity_im = upsampler(sensitivity_im.unsqueeze(0)) + # Convert tensor to numpy sensitivity_im = sensitivity_im.cpu().numpy() - # Reshape to size of output image - sensitivity_im = sensitivity_im.reshape(output_im_shape) - - # Squeeze, subtract from baseline and return - return baseline - np.squeeze(sensitivity_im) + # Squeeze and return + return np.squeeze(sensitivity_im) diff --git a/tests/test_compute_occlusion_sensitivity.py b/tests/test_compute_occlusion_sensitivity.py index 897177c6ed..9f30162c47 100644 --- a/tests/test_compute_occlusion_sensitivity.py +++ b/tests/test_compute_occlusion_sensitivity.py @@ -43,6 +43,7 @@ "label": 0, "b_box": [-1, -1, 2, 3, -1, -1, -1, -1], "n_batch": 10, + "stride": 2, }, (2, 6, 6), ] From 2a652fe36d51216a4a9db025de09f7f8a88e5210 Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Fri, 11 Dec 2020 18:46:27 -0800 Subject: [PATCH 16/40] support both 2D and 3D transform for deepgrow Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/__init__.py | 11 + monai/apps/deepgrow/dataset.py | 67 ++--- monai/apps/deepgrow/handler.py | 12 + monai/apps/deepgrow/interaction.py | 13 +- monai/apps/deepgrow/transforms.py | 442 ++++++++++++----------------- 5 files changed, 253 insertions(+), 292 deletions(-) diff --git a/monai/apps/deepgrow/__init__.py b/monai/apps/deepgrow/__init__.py index bcd2ef7a95..13e1b66a98 100644 --- a/monai/apps/deepgrow/__init__.py +++ b/monai/apps/deepgrow/__init__.py @@ -1,3 +1,14 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + from .dataset import * from .handler import * from .interaction import * diff --git a/monai/apps/deepgrow/dataset.py b/monai/apps/deepgrow/dataset.py index 0170cb9e10..9815eebd33 100644 --- a/monai/apps/deepgrow/dataset.py +++ b/monai/apps/deepgrow/dataset.py @@ -1,3 +1,14 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import json import os import sys @@ -11,8 +22,8 @@ Spacingd, LoadNiftid, Orientationd, - ResizeWithPadOrCropd, - Compose, GridSampleMode, + Compose, + GridSampleMode ) @@ -59,14 +70,13 @@ def _generate_data_list(self, dataset_dir: str) -> List[Dict]: tmp_dataset_dir = dataset_dir + "_{}.deep".format(self.section) new_datalist = create_dataset( - dataset, - ['image', 'label'], - tmp_dataset_dir, - self.dimension, - self.pixdim, - self.spatial_size, - self.limit, - False) + datalist=dataset, + keys=['image', 'label'], + output_dir=tmp_dataset_dir, + dimension=self.dimension, + pixdim=self.pixdim, + limit=self.limit, + relative_path=False) dataset_json = os.path.join(tmp_dataset_dir, "dataset.json") with open(dataset_json, 'w') as fp: @@ -74,7 +84,7 @@ def _generate_data_list(self, dataset_dir: str) -> List[Dict]: return new_datalist -def _get_transforms(keys, dimension, pixdim, spatial_size): +def _get_transforms(keys, pixdim): mode = [GridSampleMode.BILINEAR, GridSampleMode.NEAREST] if len(keys) == 2 else [GridSampleMode.BILINEAR] transforms = [ LoadNiftid(keys=keys), @@ -83,8 +93,6 @@ def _get_transforms(keys, dimension, pixdim, spatial_size): Orientationd(keys=keys, axcodes="RAS"), ] - if dimension == 2: - transforms.append(ResizeWithPadOrCropd(keys=keys, spatial_size=spatial_size)) return Compose(transforms) @@ -115,8 +123,6 @@ def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): if vol_label is None: data_list.append({ 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, - 'positive_guidance': [[-1, -1, -1]], - 'negative_guidance': [[-1, -1, -1]], }) continue @@ -138,8 +144,6 @@ def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): data_list.append({ 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, 'label': label_file.replace(dataset_dir + '/', '') if relative_path else label_file, - 'positive_guidance': [[-1, -1, -1]], - 'negative_guidance': [[-1, -1, -1]], 'region': int(idx) }) @@ -175,8 +179,6 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): if vol_label is None: data_list.append({ 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, - 'positive_guidance': [[-1, -1, -1, -1]], - 'negative_guidance': [[-1, -1, -1, -1]], }) else: # For all Labels @@ -197,8 +199,6 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): data_list.append({ 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, 'label': label_file.replace(dataset_dir + '/', '') if relative_path else label_file, - 'positive_guidance': [[-1, -1, -1, -1]], - 'negative_guidance': [[-1, -1, -1, -1]], 'region': int(idx) }) @@ -215,17 +215,17 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): def create_dataset( datalist, - keys, - dataset_dir, + output_dir, + keys=('image', 'label'), + base_dir=None, dimension=2, - pixdim=[1.0, 1.0, 1.0], - spatial_size=[512, 512], + pixdim=(1.0, 1.0), limit=0, relative_path=False) -> List[Dict]: - if not isinstance(keys, list): + if not isinstance(keys, list) and not isinstance(keys, tuple): keys = [keys] - transforms = _get_transforms(keys, dimension, pixdim, spatial_size) + transforms = _get_transforms(keys, pixdim) new_datalist = [] for idx in range(len(datalist)): if limit and idx >= limit: @@ -233,22 +233,25 @@ def create_dataset( image = datalist[idx][keys[0]] label = datalist[idx].get(keys[1]) if len(keys) > 1 else None - print('{} => {}'.format(os.path.basename(image), os.path.basename(label) if label else None)) + if base_dir: + image = os.path.join(base_dir, image) + label = os.path.join(base_dir, label) if label else None + print('{} => {}'.format(image, label if label else None)) if dimension == 2: data = _save_data_2d( vol_idx=idx, data=transforms({'image': image, 'label': label}), - keys=['image', 'label'], - dataset_dir=dataset_dir, + keys=('image', 'label'), + dataset_dir=output_dir, relative_path=relative_path ) else: data = _save_data_3d( vol_idx=idx, data=transforms({'image': image, 'label': label}), - keys=['image', 'label'], - dataset_dir=dataset_dir, + keys=('image', 'label'), + dataset_dir=output_dir, relative_path=relative_path ) new_datalist.extend(data) diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py index e5ef9e2d71..82ab4e48b9 100644 --- a/monai/apps/deepgrow/handler.py +++ b/monai/apps/deepgrow/handler.py @@ -1,3 +1,14 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import logging import os import statistics @@ -14,6 +25,7 @@ from monai.metrics import compute_meandice from monai.transforms import rescale_array + # TODO:: Unit Test class MeanDice: diff --git a/monai/apps/deepgrow/interaction.py b/monai/apps/deepgrow/interaction.py index 7e67add613..4253f1d86f 100644 --- a/monai/apps/deepgrow/interaction.py +++ b/monai/apps/deepgrow/interaction.py @@ -1,3 +1,14 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + from typing import Dict, Optional import torch @@ -27,7 +38,7 @@ def __init__( transforms: Optional[Transform], max_interactions: int, train: bool, - key_probability: str = "p_interact" + key_probability: str = "probability" ) -> None: self.transforms = transforms self.max_interactions = max_interactions diff --git a/monai/apps/deepgrow/transforms.py b/monai/apps/deepgrow/transforms.py index 634b1e2c9d..8d70856f65 100644 --- a/monai/apps/deepgrow/transforms.py +++ b/monai/apps/deepgrow/transforms.py @@ -1,306 +1,230 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +A collection of "vanilla" transforms for spatial operations +https://github.com/Project-MONAI/MONAI/wiki/MONAI_Design +""" + import numpy as np -import skimage -import skimage.measure -from scipy.ndimage.filters import gaussian_filter -from scipy.ndimage.morphology import distance_transform_cdt - - -# TODO:: Fix Base Class -# TODO:: Fix class names (for interactions) -# TODO:: Fix param names for each class init -# TODO:: Add 3D support for each of the following transforms -# TODO:: Unit Test -##################################################################################### -# FOR 2D -# Following are used while training -##################################################################################### -class AddInitialSeedPoint(object): - def __init__(self, label_field, positive_guidance_field, negative_guidance_field): - self.label_field = label_field - self.positive_guidance_field = positive_guidance_field - self.negative_guidance_field = negative_guidance_field - def __call__(self, data): - positive_guidance = data[self.positive_guidance_field] - negative_guidance = data[self.negative_guidance_field] +from monai.transforms.compose import Randomizable, Transform +from monai.utils import min_version, optional_import + +measure, _ = optional_import("skimage.measure", "0.14.2", min_version) +distance_transform_cdt, _ = optional_import("scipy.ndimage.morphology", name="distance_transform_cdt") +gaussian_filter, _ = optional_import("scipy.ndimage", name="gaussian_filter") + - if type(positive_guidance) is np.ndarray: - positive_guidance = positive_guidance.tolist() +class AddInitialSeedPointd(Randomizable, Transform): + def __init__(self, label='label', guidance='guidance', dim=2, connected_regions=6): + self.label = label + self.guidance = guidance + self.dim = dim + self.connected_regions = connected_regions - if type(negative_guidance) is np.ndarray: - negative_guidance = negative_guidance.tolist() + def randomize(self, data=None): + pass - curr_label = data[self.label_field] - curr_label = (curr_label > 0.5).astype(np.float32) + def _apply(self, label): + label = (label > 0.5).astype(np.float32) - blobs_labels = skimage.measure.label(curr_label.astype(int), background=0) - assert np.max(blobs_labels) > 0 + blobs_labels = measure.label(label.astype(int), background=0) if self.dim == 2 else label + assert np.max(blobs_labels) > 0, "Not a valid Label" - for ridx in range(1, 6): - curr_label = (blobs_labels == ridx).astype(np.float32) - if np.sum(curr_label) == 0: - positive_guidance.append([-1, -1, -1]) - negative_guidance.append([-1, -1, -1]) - continue + default_guidance = [-1] * (self.dim + 1) + pos_guidance = [] + for ridx in range(1, 2 if self.dim == 3 else self.connected_regions): + if self.dim == 2: + label = (blobs_labels == ridx).astype(np.float32) + if np.sum(label) == 0: + pos_guidance.append(default_guidance) + continue - distance = distance_transform_cdt(curr_label).flatten() + distance = distance_transform_cdt(label).flatten() probability = np.exp(distance) - 1.0 - idx = np.where(curr_label.flatten() > 0)[0] + idx = np.where(label.flatten() > 0)[0] seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) dst = distance[seed] - pg = np.asarray(np.unravel_index(seed, curr_label.shape)).transpose().tolist()[0] - pg[0] = dst[0] + g = np.asarray(np.unravel_index(seed, label.shape)).transpose().tolist()[0] + g[0] = dst[0] + pos_guidance.append(g) - assert curr_label[..., pg[-2], pg[-1]] == 1 - assert len(pg) == 3 + return np.asarray([pos_guidance, [default_guidance] * len(pos_guidance)]) - positive_guidance.append(pg) - negative_guidance.append([-1, -1, -1]) - - data[self.positive_guidance_field] = np.asarray(positive_guidance) - data[self.negative_guidance_field] = np.asarray(negative_guidance) + def __call__(self, data): + data[self.guidance] = self._apply(data[self.label]) return data -class AddGuidanceSignal(object): - def __init__(self, field, positive_guidance_field, negative_guidance_field, sigma=2): - self.field = field +class AddGuidanceSignald(Transform): + def __init__(self, image='image', guidance='guidance', sigma=2, dim=2, number_intensity_ch=1, batched=False): + self.image = image + self.guidance = guidance self.sigma = sigma - self.positive_guidance_field = positive_guidance_field - self.negative_guidance_field = negative_guidance_field - - def signal(self, img, pos, neg): - signal = np.zeros((2, img.shape[-2], img.shape[-1]), dtype=np.float32) - for p in pos: - if np.any(np.asarray(p) < 0): - continue - signal[0, int(p[-2]), int(p[-1])] = 1.0 - - signal[0] = gaussian_filter(signal[0], sigma=self.sigma) - signal[0] = (signal[0] - np.min(signal[0])) / (np.max(signal[0]) - np.min(signal[0])) - - assert np.max(signal[0]) == 1 - - for n in neg: - if np.any(np.asarray(n) < 0): - continue - signal[1, int(n[-2]), int(n[-1])] = 1.0 - - if np.max(signal[1]) > 0: - signal[1] = gaussian_filter(signal[1], sigma=self.sigma) - signal[1] = (signal[1] - np.min(signal[1])) / (np.max(signal[1]) - np.min(signal[1])) - + self.dim = dim + self.number_intensity_ch = number_intensity_ch + self.batched = batched + + def _get_signal(self, image, guidance): + guidance = guidance.tolist() if isinstance(guidance, np.ndarray) else guidance + if self.dim == 3: + signal = np.zeros((len(guidance), image.shape[-3], image.shape[-2], image.shape[-1]), dtype=np.float32) + else: + signal = np.zeros((len(guidance), image.shape[-2], image.shape[-1]), dtype=np.float32) + + for i in range(len(guidance)): + for point in guidance[i]: + if np.any(np.asarray(point) < 0): + continue + + # print('{}:: Point: {}'.format('-VE' if i else '+VE', np.asarray(point))) + if self.dim == 3: + signal[i, int(point[-3]), int(point[-2]), int(point[-1])] = 1.0 + else: + signal[i, int(point[-2]), int(point[-1])] = 1.0 + + if np.max(signal[i]) > 0: + signal[i] = gaussian_filter(signal[i], sigma=self.sigma) + signal[i] = (signal[i] - np.min(signal[i])) / (np.max(signal[i]) - np.min(signal[i])) return signal - def __call__(self, data): - img = data[self.field] - pos = data[self.positive_guidance_field] - neg = data[self.negative_guidance_field] - - sig = self.signal(img, pos, neg) - data[self.field] = np.concatenate([img, sig], axis=0) - return data - - -##################################################################################### -# FOR 2D -# Following are click-transforms used by batch training/validation step -##################################################################################### -# NOTE:: All the Interaction* Works on batch Data + def _apply(self, image, guidance): + if not self.batched: + signal = self._get_signal(image, guidance) + return np.concatenate([image, signal], axis=0) -class InteractionFindDiscrepancyRegions(object): - def __init__(self, prediction_field, label_field, positive_disparity_field, negative_disparity_field): - self.prediction_field = prediction_field - self.label_field = label_field - self.positive_disparity_field = positive_disparity_field - self.negative_disparity_field = negative_disparity_field + images = [] + for i, g in zip(image, guidance): + i = i[0:0 + self.number_intensity_ch, ...] + signal = self._get_signal(i, g) + images.append(np.concatenate([i, signal], axis=0)) + return images def __call__(self, data): - positive_disparity = [] - negative_disparity = [] - - for pred, gt in zip(data[self.prediction_field], data[self.label_field]): - pred = (pred > 0.5).astype(np.float32) - gt = (gt > 0.5).astype(np.float32) - - disparity = gt - pred + image = data[self.image] + guidance = data[self.guidance] - negative_disparity.append((disparity < 0).astype(np.float32)) - positive_disparity.append((disparity > 0).astype(np.float32)) - - data[self.positive_disparity_field] = positive_disparity - data[self.negative_disparity_field] = negative_disparity + data[self.image] = self._apply(image, guidance) return data -class InteractionAddRandomGuidance(object): - def __init__(self, label_field, positive_guidance_field, negative_guidance_field, positive_disparity_field, - negative_disparity_field, p_interact_field): - self.label_field = label_field - self.positive_guidance_field = positive_guidance_field - self.negative_guidance_field = negative_guidance_field - self.positive_disparity_field = positive_disparity_field - self.negative_disparity_field = negative_disparity_field - self.p_interact_field = p_interact_field - - def __call__(self, data): - positive_guidance = data[self.positive_guidance_field] - negative_guidance = data[self.negative_guidance_field] - - if type(positive_guidance) is np.ndarray: - positive_guidance = positive_guidance.tolist() - - if type(negative_guidance) is np.ndarray: - negative_guidance = negative_guidance.tolist() - - for i, pos_discr, neg_discr, curr_label, probability in zip( - range(len(data[self.label_field])), - data[self.positive_disparity_field], - data[self.negative_disparity_field], - data[self.label_field], - data[self.p_interact_field] - ): - will_interact = np.random.choice([True, False], p=[probability, 1.0 - probability]) - if not will_interact: - continue - - can_be_negative = np.sum(neg_discr) > 0 - can_be_positive = np.sum(pos_discr) > 0 - correct_pos = np.sum(pos_discr) >= np.sum(neg_discr) +class FindDiscrepancyRegionsd(Transform): + def __init__(self, label='label', pred='pred', discrepancy='discrepancy', batched=True): + self.label = label + self.pred = pred + self.discrepancy = discrepancy + self.batched = batched - if correct_pos and can_be_positive: - distance = distance_transform_cdt(pos_discr).flatten() - probability = np.exp(distance) - 1.0 - idx = np.where(pos_discr.flatten() > 0)[0] - - if np.sum(pos_discr > 0) > 0: - seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) - dst = distance[seed] - - pg = np.asarray(np.unravel_index(seed, pos_discr.shape)).transpose().tolist()[0] - pg[0] = dst[0] - - assert curr_label[..., pg[-2], pg[-1]] == 1 - assert len(pg) == 3 - - negative_guidance[i].append([-1, -1, -1]) - positive_guidance[i].append(pg) - - if not correct_pos and can_be_negative: - distance = distance_transform_cdt(neg_discr).flatten() - - probability = np.exp(distance) - 1.0 - idx = np.where(neg_discr.flatten() > 0)[0] + @staticmethod + def disparity(label, pred): + label = (label > 0.5).astype(np.float32) + pred = (pred > 0.5).astype(np.float32) + disparity = label - pred - if np.sum(neg_discr > 0) > 0: - seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) - dst = distance[seed] + pos_disparity = (disparity > 0).astype(np.float32) + neg_disparity = (disparity < 0).astype(np.float32) + return [pos_disparity, neg_disparity] - ng = np.asarray(np.unravel_index(seed, neg_discr.shape)).transpose().tolist()[0] - ng[0] = dst[0] + def _apply(self, label, pred): + if not self.batched: + return self.disparity(label, pred) - assert curr_label[..., ng[-2], ng[-1]] == 0 - assert len(ng) == 3 + disparity = [] + for la, pr in zip(label, pred): + disparity.append(self.disparity(la, pr)) + return disparity - negative_guidance[i].append(ng) - positive_guidance[i].append([-1, -1, -1]) - else: - positive_guidance[i].append([-1, -1, -1]) - negative_guidance[i].append([-1, -1, -1]) + def __call__(self, data): + label = data[self.label] + pred = data[self.pred] - data[self.positive_guidance_field] = np.asarray(positive_guidance) - data[self.negative_guidance_field] = np.asarray(negative_guidance) + data[self.discrepancy] = self._apply(label, pred) return data -class InteractionAddGuidanceSignal(AddGuidanceSignal): - def __init__(self, field, positive_guidance_field, negative_guidance_field, sigma=2, number_intensity_ch=1): - super().__init__(field, positive_guidance_field, negative_guidance_field, sigma) - self.number_intensity_ch = number_intensity_ch - - def __call__(self, data): - images = [] - for img, pos, neg in zip( - data[self.field], - data[self.positive_guidance_field], - data[self.negative_guidance_field] - ): - img = img[0:0 + self.number_intensity_ch, ...] # image can have only number_intensity_ch channels - signal = self.signal(img, pos, neg) - images.append(np.concatenate([img, signal], axis=0)) - - data[self.field] = images - return data +class AddRandomGuidanced(Randomizable, Transform): + def __init__(self, guidance='guidance', discrepancy='discrepancy', probability='probability', dim=2, batched=True): + self.guidance = guidance + self.discrepancy = discrepancy + self.probability = probability + self.dim = dim + self.batched = batched + def randomize(self, data=None): + pass -class InteractionAddGuidanceSignalClickSize(InteractionAddGuidanceSignal): - def __init__(self, bins, sigma_multiplier, normalize=False, *args, **kwargs): - super().__init__(*args, **kwargs) + @staticmethod + def find_guidance(discrepancy): + distance = distance_transform_cdt(discrepancy).flatten() + probability = np.exp(distance) - 1.0 + idx = np.where(discrepancy.flatten() > 0)[0] - self.normalize = normalize - self.bins = bins - self.sigma_multiplier = sigma_multiplier + if np.sum(discrepancy > 0) > 0: + seed = np.random.choice(idx, size=1, p=probability[idx] / np.sum(probability[idx])) + dst = distance[seed] - assert len(self.bins) == len(self.sigma_multiplier) + g = np.asarray(np.unravel_index(seed, discrepancy.shape)).transpose().tolist()[0] + g[0] = dst[0] + return g + return None @staticmethod - def digitize(array, bins): - array = np.asarray(array) - bins = np.asarray(bins) - - distances = np.sqrt((array[:, np.newaxis] - bins[np.newaxis]) ** 2) - assignment = np.argmin(distances, axis=1) - return assignment + def add_guidance(discrepancy, probability): + will_interact = np.random.choice([True, False], p=[probability, 1.0 - probability]) + if not will_interact: + return None, None + + pos_discr = discrepancy[0] + neg_discr = discrepancy[1] + + can_be_positive = np.sum(pos_discr) > 0 + can_be_negative = np.sum(neg_discr) > 0 + correct_pos = np.sum(pos_discr) >= np.sum(neg_discr) + + if correct_pos and can_be_positive: + return AddRandomGuidanced.find_guidance(pos_discr), None + + if not correct_pos and can_be_negative: + return None, AddRandomGuidanced.find_guidance(neg_discr) + return None, None + + def _apply(self, guidance, discrepancy, probability): + guidance = guidance.tolist() if isinstance(guidance, np.ndarray) else guidance + default_guidance = [-1] * (self.dim + 1) + + if not self.batched: + pos, neg = self.add_guidance(discrepancy, probability) + if pos: + guidance[0].append(pos) + guidance[1].append(default_guidance) + if neg: + guidance[0].append(default_guidance) + guidance[1].append(neg) + else: + for g, d, p in zip(guidance, discrepancy, probability): + pos, neg = self.add_guidance(d, p) + if pos: + g[0].append(pos) + g[1].append(default_guidance) + if neg: + g[0].append(default_guidance) + g[1].append(neg) + return np.asarray(guidance) def __call__(self, data): - img = data[self.field] - pos = data[self.positive_guidance_field] - neg = data[self.negative_guidance_field] - - img = img[0:0 + self.number_intensity_ch, ...] # image can have only number_intensity_ch channels - signal = np.zeros((2, img.shape[-2], img.shape[-1]), dtype=np.float32) - - positive_interactions = np.asarray(pos) - positive_interactions = positive_interactions[positive_interactions[:, 0] > 0] - - if len(positive_interactions) > 0: - level = self.digitize(positive_interactions[:, 0], self.bins) - - for l in range(np.max(level), -1, -1): - curr_interactions = positive_interactions[level == l] - for location in curr_interactions: - if np.any(location < 0): - continue - signal[0, int(location[-2]), int(location[-1])] = 1.0 - - signal[0] = gaussian_filter(signal[0], sigma=self.sigma * self.sigma_multiplier[l]) - if self.normalize: - signal[0] = (signal[0] - np.min(signal[0])) / (np.max(signal[0]) - np.min(signal[0])) - - signal[0] = (signal[0] - np.min(signal[0])) / (np.max(signal[0]) - np.min(signal[0])) - assert np.isclose(np.max(signal[0]), 1) - - negative_interactions = np.asarray(neg) - negative_interactions = negative_interactions[negative_interactions[:, 0] > 0] - - if len(negative_interactions) > 0: - level = self.digitize(negative_interactions[:, 0], self.bins) - - for l in range(np.max(level), -1, -1): - current_locations = negative_interactions[level == l] - for location in current_locations: - if np.any(location < 0): - continue - signal[1, int(location[-2]), int(location[-1])] = 1.0 - - signal[1] = gaussian_filter(signal[1], sigma=self.sigma * self.sigma_multiplier[l]) - if self.normalize: - signal[1] = (signal[1] - np.min(signal[1])) / (np.max(signal[1]) - np.min(signal[1])) - - signal[1] = (signal[1] - np.min(signal[1])) / (np.max(signal[1]) - np.min(signal[1])) - assert np.isclose(np.max(signal[1]), 1) + guidance = data[self.guidance] + discrepancy = data[self.discrepancy] + probability = data[self.probability] - data[self.field] = np.concatenate([img, signal], axis=0) + data[self.guidance] = self._apply(guidance, discrepancy, probability) return data From 5dd1481ef18d342b1c404d2f94906ce468e7efb8 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Mon, 14 Dec 2020 16:23:35 +0800 Subject: [PATCH 17/40] 1318 Update highlights 0.4 (#1325) * [DLMED] update highlights page Signed-off-by: Nic Ma * [DLMED] update arch module chart Signed-off-by: Nic Ma * [DLMED] update GradCam, LoadImage, TorchScript, Layer wise LR, Occlusion sensitivity Signed-off-by: Nic Ma * [DLMED] add partition dataset and cross validation Signed-off-by: Nic Ma * adds CAM vis. Signed-off-by: Wenqi Li * adds a cam link Signed-off-by: Wenqi Li * patchdataset desc. Signed-off-by: Wenqi Li * update fig Signed-off-by: Wenqi Li * adds tutorial links Signed-off-by: Wenqi Li * update tutorial link Signed-off-by: Wenqi Li * fixes typos Signed-off-by: Wenqi Li * [DLMED] remove DeepGrow from arch chart Signed-off-by: Nic Ma Co-authored-by: Wenqi Li Signed-off-by: Sachidanand Alle --- docs/images/arch_modules_v0.3.png | Bin 742924 -> 0 bytes docs/images/arch_modules_v0.4.png | Bin 0 -> 756885 bytes docs/images/cam.png | Bin 0 -> 55587 bytes docs/source/highlights.md | 52 +++++++++++++++++++------ monai/config/type_definitions.py | 2 +- monai/data/thread_buffer.py | 2 +- monai/data/utils.py | 2 +- monai/transforms/utility/dictionary.py | 2 +- 8 files changed, 45 insertions(+), 15 deletions(-) delete mode 100644 docs/images/arch_modules_v0.3.png create mode 100644 docs/images/arch_modules_v0.4.png create mode 100644 docs/images/cam.png diff --git a/docs/images/arch_modules_v0.3.png b/docs/images/arch_modules_v0.3.png deleted file mode 100644 index 768ff9de6077710a67fed8c463d1282c12b11d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 742924 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 z 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%0AEJxdkL~Slk~j9{hvcjf=M9tgl6D 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≤l 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 apqPJ{x2>3Nruz%{Pg+tzB414R#s32uU-tF@ diff --git a/docs/images/arch_modules_v0.4.png b/docs/images/arch_modules_v0.4.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5a7d9d21719db7dd3d0d5549e2487fc44f2c36 GIT binary patch literal 756885 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�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


4CRY*`KJZh{~wK_x#pcdet`_ytwmb;J~7UJvd*5 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¬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%0ASST2ufs1OP(VC>Eqm%(qYbg1^@WJtX5 zGyq!0Ks)=k`DCG{oePe^}rNZm^vbr(r+P}5X=lQh!Y2>0>t9tBp zKZ}>h%qFn;K~9C6lhqUd3Bzc#J`c)z@>dHW{p_G2Eo|O>i(>0aG##9`86GxwZ=1D+ zc>5OfR8{OuLlr}l8eah@1B=j9+k`>tELIzwPwxMz7XSfGMRZ0fBBi4#r7Q$$wZ!d> zM|9NP)q|GIXc+W=YNbviy5pOQua_T$A?xSa;Iuq$#|q|*bIgQ z(p&P>{R_yp#O2Pu7FpLF2>BK+r1|TW@5bp|9ZqsmmuQAo9RISalolnMbe}O6m%XCX zAKrI7$W^h^+OiW}WgCjmRB@265m!22ZU5`x`y^#|p4YaV^Sgv_?GdV-sUU%Z=hHu` zWHBB{=4(rCI(Y=&kTLI6w7vyFtD(k=b_|bF=ew6c=??#JqMqK?kdHx|`jxoavN{jH znL@T+{>btHgRdIfA8?~m<<9-ve%wPYv5lo8Ph2XnAFzbB6+Y2A23yAr`1$QscfBJP zw^5)OK=yyyvgO|K3H87DjZCZi(q5@SB|IkBtcFJ0ZMNv*~(0{99) z#{`f!mYnpt25yh|beAKY!~&KdMPV!e?eU|uU|-6*R4}Yyp0{z@zNMmy#e00Uks<2)R;(vZ2ql(&3!~a+xI2m18e?jGu1QYSLZez27bsL@@DHiA;Ki ztt`{>Ot$Cucg)+?R!a5iAIthaKM|s;(;D7?VqS9kl=Hqs^K=mBeZ5C~rX=Tvt$IqZ zBsQ;0GRV(`BSjm|cIfd8ga6%l)lV~{*T-YV{gFY@R<;+OATc`l(?T|N+0t4vw()v) zodfI+NbawqUAbK%P3(f7r|L@Xrkam4Kad-0Pq7NficOY7gzH7$f_WeZ7(&h7uq;>g<3UAc2l;*f6*1^aXqglX_ZoH5lp=RDYHxIo7YQU=bF0RzdsC zqxiRI}8tfmHePYj!~NHX~Zr9QyY9&fI^b zTAASD`O+q-fjgM(PEi8{dm>h=WIrpM9Xy8nPe%Q`Ajg|i#M4h#DxqJd)`<2oNhVY6Azhg+wxla`S__7wauorfS`GRi57n` zA(+n_W$Ev4tSp@$*8~7FjVeCsF`=|B{4aGxtxvZ7c z|4$R;2QiHiF^vwF-l9RLLx94$&4tI`KSH@IxKdV`^wt~?g2KKIoCk;&TLghV?`!-1 zlY+S%SgIwbn=tqJapOP(sfY5FkUqAqvl63b`K@|`9eRc9GZ_jt*$Vle+GnE=PtFGV z!jy+L=r6VXtZ?PXL&<4*>E{~%EAXgkZK`Q4sApj;lte2N9U>FkErq>|oPtg^IXi@} zaV(ox9{SNg6)-Z`#|a>U1+&=j~B$^ZU$gQ>~2JLxR@j zU)vKGpy{@`QTJlH;`?tabkj$wCgzqpb}%ekc_D@egvSNJ<>i7nM!*tXc^>D?bj*|h z;Cf9s?G&j@zywq_pA8$LR+yI!A&UqGc_7`PE;|$>@*1AbOyfbJ=I)PLxjYVY2gJ%v zXwfsLA|=HTyXC;f+!^D0nC&s~`of$=G_!h+g$KfXB+a`vy>>0LS}ME0!HW}RewruJxwX_MqwvNQa^G`g@#NTA>Pl|tty zfma{iS0H#n>FR+LhlQqrB|N>PMFr)7?4xXioLE9~l_8TJ^G%1F%&xEcCAi*3@W0`` zttW?}s_gk?Y=nnW6qVu(Co&yjwiK+qSFusDZC&{zxXehd#Q-^oDo*d|0xmewXd1r_#I^8Gm{kf%0{hOCxG@U-& zgn`=mMAZ|J;$N1Ol1g1G0ghS@r^}mmGak4vwfm*I%oF%dZgSJMcfVOc9%J6JZXE8? zhdcB@2QKpS=6VH&(GZdsH--4V4aL-%EP-Loah3!AizQuNT!jlrqUA3hTISKp#Rjit zPe|z*aSPg-%B0+ZqL^xN3LzxG&n={65e5eCOspne0Yj~dtSc9HsutfjDx}5w4YO=> z{AquT>7S?%kXT4L{sj{Nn#(OsBi$!5C5zkciH~rJf(|)tysjgqhZgcnoomLBH)TSS zBqXUIfjl!PzkcJYEG5K?UM|ZpFxERdez9pG0=QNOccG$l{&3$BBczW)|0zFadz2#Y zOofE3$&I?vjZ^D8Tzb6@xOnie`FLMX_T_|y!O-2lS0}ZpDru^3q*%NSaRY`3xWSF8 z%^4hJk&82ME*pCxhtQmB?URv z7Y#4F=FXnuZ^q$}8qH%bz&+8-!aK4< zF4Y*K_v`E+s{s3#URG|9L(9h>HX&A=JRlrv!FQ&*%>aD{+8j7E>k)7CNuA6#Ev&c< zff{A%t%2O~XsG9RFNC`Dw26j}B|PUWaH<;2Yd^3AA(9z=_XaQb+)D1mg{13YzG=!w z`e)WP1iWPd6R4eAp{I4Hd}ZhTY8ZAqyFf^j8b5C6A6bvv1_P}apN~ne%YYi?;MzSc zE)_}%1XD}qp#HEj*zmfAn*KlVZ5$)qbzPSc*> zgljRB93BCvY>`-{%)PrldYLYSFymsw#3I068)~yYtQ7KfZ*V*bnLFc2f=RMT;BWa2 ze?|7%)JoDcgBer#Shc$l)HFgZYN!rS^>1~!tI^7-2#+Zl2KLp`fkw6$!{b7aW&ufG z`|Ne1cw`--5m}ns z7nDz|e85nsU68^#w2h~#A+EHJLX%6Y%)o$*Le(Z^eZ-+zIi{t_ev=sh;n&5ZlG1v> znm!pfT%3NS4#x#q{*T&4G7wXTL~3gfga(k~JOn~#Gk|Pkj((mf`+4FX@5O_*#=AcC zX&z4B&I#b-rI&O({JG(9cIHhnEt~JLG_BDoM<5;iHM1#|ixilwg$r!w^6!hYd5_zS zMG_rT-Bp7}#dRjqqvUUh$NVnjX-*U>OSGF}{=s zMD^RwGI>qyRS1hPUwkG8SHVwl-~=ouVW(MKEz@3-V|j?rUba;04oSrdkR%pk{d8D4 z3QJ!;s9)_&zQ1@=1(_XS!Fd{mt=Tbi&Fr>m$ ze&t~;ZDbaXU-QA^iSIb2z9m z#m<<$&GqAUlo^)4%M6XKX*1vMds}Z(Y8k^m216MRIt@B~%aG79o_XB)4Nx8eF2xt8 z0Z6vta6>|xQ|Oe1JZ`*d->nmr zb@?!lBWfDGk7N@ZZ~;v(8{4!F16PP%b8OK+-d1%^LwmaGKNc4z>99UA>imS!${U>p zqY)4GO%WHMR2YDetF03i(ckc1wNWb!ms6d4@CG}-DqI=Cw)OSkY~rV+*lT|%|yTS|cz zRS0U(G&G0oEv|_A*<+J(icqng5?LQt0>i#?Yv}H85Z*Hny#3*Lesy=Km%G!3)MGd| z&zNV-M6~$wLL6;8rV@&t7hXLy;b4wsg`7IWF@+8hWVI2cM1Ou+br!VPMy+PRkbTn4 zk=G45?HI)^@&ZFEeP^>3+`LY^pb#y%pl}#)OanY5XCC^XgTmSw^har;vpoUkyqx@_ z$^YKRaU&G0;|{&*@!AL&jOH80UBS$Kr(@Mo+}9;`rwUwk5}MV63`EXp62Z7VVK#ZDF2$B3C|*>x|48<8yP($#VScdt27b{;?4ZR$YV?&HW?2+_M=rM}(nU{A3;-N47Q`IE?> zl*#R2+ge7WrFt>vne|uWU-v__Q0M26O8B&(+%^Zqo`;}CArcXD8xe`|6FQEf_DYj7 zl(8|+gLA?^Y4X&YW{Ig77J1()I_@!Wpj!+w&G)c-M>C*C{C zKj`+wA%iNzIZfXm>to}=N?((HVxM(4V3jIvJ`hr$Yp>2AAk<-3XP4PJK2RBkd`o!i zTFT6@p*Im1kBxT-3BIa7Y@ES$J5#Wg06!WdvMF>z`jxW<|6H^xPlHvBX4NiKEl$_C zH*C19B*8p3;m~dS5hWuR!O{&l{hcmr3A?fGduEkc?bFh%U}BFJom+B&q{)3SV{)fmtd~j%iQEl0f^@w&YSKg5oR)*^rHw)NUxyf@3=?WxePnN1WUilKk}I$jSBTdTHsfcs@cU42=QyZDgW z}3b^8?`qm(56hRTPM512TRAbifO3PNT&~XlYP_A|o!V88bEMsdY8djZ^nq#3MCt)AW@i6>$;YeKTV*D;X|v^W~VpSq1vtfSzbk4H*X}-UBu`DKJ2#=Tb8P>y9`Ax33fmbZNG43LVwrwY{@pSa9 z7G@WA-gNlysaGm(uqZ0H24mwb)aRXjy?cB&8e<;0B)pZEe{Uds zXYcK*4k~d(M?hKc6LSB>aAv3Ktf1k3oII`Z^~04bp^q-|xL-&DT|Ytp8{!XA1*pRlE9H-85U`*5HFAs4!v*^_e6>_o;C zp%Q^x;f67fots*BF<*frg1;MUH@g?h4cnJE9LGs$UERm_6KgtJLf!@YZmb(O=9h^_ z8lht_ajvg;HlKCB8g5I{Iv58vsAzx;_tpNO)2hRbhMYm zC;bjSu9GtYnMAn48;(OR6f6PPP(L$0d&-WEfl8B7UmC!js_Mt!6W0L&oon9#>%;{Z4SkOj^xM_5d zQRCBE@@=AN*d{E^~9?PqcsETNvN)N{-9O`z5G2FRrpz6BfMaK#K z-`O`~Og%nr9=`*2{gzd#sLPX;TCyw^&iI-!3P@9|sOKCmj&5g~?PuYX)!Fe+iefvn z!b=|r8rP@!jZGEB)MJOE_QiXi(=|uWW%naARGXp}+3-oXf*rRF6!x~k*;n*FI*OP6 zpd4Cu#vO#g?>YHSo!Gm)jMao|L5~;H=!a76s`d8{?zfWDE@=9dEeHRqQ(=pavq;x* zzH7fN9GcphY?d)lx4fPNf1jk(xZETL-YdoxgXgz&w z@sW}ocm+up!)9YiMZzN?E9PQDxtC4BwiL@W!r_V4wbxZdzgtb9gk$LiyxjW4)K#$0I%mDkRdOnzx%MAoYCsy5un<=hI9a2VkBHix+BrOf(WL3)E#aY4 z8#UCG%Z~{fU-&IhF$BemHETXPe%g-BE{ZbII2coWW$*Ki9> z-KvTmkiGdXlhs4BO6_Wz6#O$;e03MQ!lax#Wv=akXlblRUP_PS(Y$|>wSfmklK)o{ zsb51<+8$plyKZYYRhX&AI0S#I(Q#tLG&5CB3}vo{p`iIw=nPK zESm3yet_j>HOeb<8~Qm}Rr%=?@4+#elFs0KWYz`y2!t&(4KZdm`(NS+JU=vQp7nW} z0#jC@$I}8XY&^V<%ZQ;#1)s?cpFnP=MUL;&tNHgWMA+9NZYX$rlQt}FdS&%c?j85T zn$)8RQkbt`EGAKow<&Acbux6_L1H$5x85yF8)Cx{TvN;f0<1v8j0KQi9e-IcNFa#%1uIS3O#bxyZX?(9ItT5}G#UbxXVD z9eBP8vkX&T0`le;Wc8LAo;(?o%SOv?^C;_mFO_@Ado zRk$GH5Iw9i>0twOg0E5-c^j-;HjZ~=;fSwxvgZjd10lb5Px$7i@cNUiFx&Vw{mM}y zyDfbN6w89b;moL*43RMZxvYM~OI2`30YMQs-6a1`Hzy`m+32G-d6!k&DcEP=a5}HX z6KgK6ISeVREE=4fM_!4Fk?gJKob^!bqdY7xYu`i*J?$@d4CEwy>tR!qf2Hu zKssrxLCQP4-)6%u^Np=XK1UBk#Bs5M^~UWKv*qx>sG1hSa@@G&~lnnU($E^0NSqsJjLHIb<+ja07J$c9Wja!IJtS2hD<^T}6x zI|y1%OWKGn15q`L;VKlrF=Uw7$y(gebA9XRsTCj1Fx+;TdpQ3)=zZ|VbmdY(9T*`O zg}RIS?99Ntm@Uzw$Hwv_4AEKI5!j3b_QxSMHAtqc|F*|f6Z*c3eC*} z_=CSq%~bMJ-gfjT0c`bEBJTe@zBI{}vpt>3b*2@G#$TNISwAT=3X2#VGHKZN1$7S3 zxKXaod(X~T`PT~f+WX6hl1A+5J&)$|=8Y+qD+CW7PzNo#&`keYPrAf_eNV8k(S|7} zYH>SX~ zA>WFpk#ho+`=eK+xCP{KhO@^T^-RxZ1?{5lzT*L@cRIr4EF?)lJ(K{8E9^!bqQe); zt{^i{fwKN}0TT8=ii`u3MVy3%WCEW3ILd1e&^*Ok7ws~F|7XvC!k;9Ud+HL(@Vu(C zf#w~Tl;Y3mNM~QOzbesNyFTBPXCIoRNqQT~`ZS-goea6{tgsF3F>WUzu|~g$;*7ve zW{HeRRu#lts1+7UtVDQ5eCaQF;Pq@EHBSPypXeC4@N`JXBYx3j_McN2C)wM^O}S|> zfgLa-eP-i!xRKo-IW{dKR7!_2(O1nc>9O>sOVqiyiT4?e8P%=F`uQtfrxo=h`%JVC zoMV6K+bvqCjVgkmrhe>ZNUjT=E0Lyak$)3?Tn!01gVen|FUh z!sfSW*d2vbkabRH59Hg+KWUURE8T7+QS(BGH`3WZd2*rvdw&aG2Qqo^(=7hBvh$O6 z2D%~dQN4nsL%Xig22{Dao?C1>Xok2uuH4WE+xlSq*ZPH<&9L{UBkqxqqgR$ zaUF_jNAg=m5+g~e02T1&xrdab8Z~x6?SO=tjEs_i=Y#&?jq3v-?8{i`0^5i{1wYm; zTEXwPoTn2~IG#lxdW$Ys438YSq1LZ+N=INshGG0vJ~Jhk*qL$r0cDkm_>=hsvbhs) zA5cvrt=NI7e8j+fecbX$B_V^7MD6NB4l21p64jo`vg23PBKB4w+azv1NQIr7*aR|3 zGkGb5%Z9#)V-sZ?iyPK2u6rG#?cYRXi%x0yz%?)KHd6K7cz~NEPn?>!ZAO@4<~F1PY)mlj4$=|J&q|%yC=tqm6YMXpghF_0-no=)VU?|r z$uoS-5rs?;ymjjpK1Z?Qc4b7!L-%sHkVRLTX_6;z_r7V1NLZ>D(7i1hD)4eOoSodA z(7)Q5VwqFCY3?c3Ll+%#)Ikv^urt8D%q^biK-5<4_bVeBt0=2aM>ZQN?LwNCHOd#0 z7#r;0`>9g3Ke%vgCzJma$_Q85FAN=U))s&FNP%eFDp_^xp#IQhlPtHSle*i|4o%3d zT0CfJ0sAPCACw&2P<3Sy1a~G>>aXhJ$qu_Lnx3Qs27kGemwGUcKLP3FVJ<0?Ez6x1 zLliD9jl!YY+%cm-7;Si?bS>iR0|yUvJW_G5qltacs_$3MU2%|Va6#D9jL3Q!fg{^7 z!h%Q2M1Q25EwWhfzJtr4{DGk#umi^N6R)^8 z;v66JzOH8=Y(}w83=~pU;ueh8UE_X{YiYz5RJl1Z6(?gQw8683b_imP(z+gX4mwEHn`}9vM zg!LnCer}*PM!N6jX?~bos;bY)2REm1c8tv|KFzK0`UhG*oE55_=!*AbShJ?O^l;#$ z8qVn<;Ab#8iT4IT$#cgM_+eP5??$GbNIif~rot=(~I z;dI0O7m*==T!a;jha#Mt&u6Dmz1OGa0_(*d*;)(aD`P5kj2l z_AyGN|IleF%ZQ1CP4K;O5WZ+wrF(8d`0G(z)ZR^yN2{rCtEqSC+`z=r_bYDL_S5y6 zOvcZpGD{P$un4PkxLtHalIwK5K_GS`g2;`*y+Alj;odgNGu%a$q$q>pohe8tQRFu+ z0qBwP#lt3M-nXtzhbwkU#~&F881SLAV-V;`cI|$iWnxq0!4-KnZLvcwiX}k+m4mq% zT&=&$0@D@kh`{(cY1(dQHW~;Jk_r|!VLdcVL>7Z^Mm%-L}+Mn__utpy*nDuhTRbR%b9%O52Y8wf^p1fILwL!OF}s zhUZ%j3xOND7<%e4VR(yI>8$h|8@CI7#iq=Ou-Jrr1+KNf_02gt`Q3}fkE$>ZVn&9e z@6Q@gO*xPy)Zp>=So#af2i`Ibi`&U7eYAAR?V|a*>TddjQ!#svs8m6E12(|UHnvue5UPY>FlSK8yt{)O? zQIblFK0i8l*^|w41`?)rJaOeD={N{pBj7 zG5{BXAgql}9}M2Y>6uPqQx-UUqMJ5P)1X2kh46qhJRfYO-9bVcCUy$ScNd|dd>h|# zv7LM0B5!UG{fvtr>tEZn>Rf`qii_g^s{07*;a-)A*IK`r&%!kZ?TTYnDW6UQD~w(x zz2oMasRs{FS4`EHX$qx}8g{b}wsW)j&AQ7=t>4%A*)fM4vCZDgeBeZN@3m3elp%m{ z?%<}6Bd#b6GDrJyEgyfuF4B9e+YAQ%i|5IX#)oDLfotH@k<2B!Dal0yw*`{X)ac9I)c30RL#%;s%2&`Bv*~JZ! z)YwnqQ^szGf+9*cXnXmzsQ?*HEoJ|bwfjb{>_-<39v$UO!tbRbc^8goFZGz>C8|dt zA%s-#s{&UH2(@3gm9vII)@1QX1B`!-C#h@69_nTNMEoeH>F~Nk+d<=jyO6DNvjruR za@Qis$BN9v!>=LPp~aWT^_ns-)22+0H~>JQ_8)0r-5xDT#az6tPjK14_n@La&g@dz z$>tsb4~-U((Ffke=6r!^0L!|&=!>PY+|Dg0}G(pfs- z*}zIY;5m~=4`^+3v?;5U)1%wgOG+}d>$Zu?ZI?IvJb8ME31G6FIJ)Bk5B0!-Q1-r~ z*i1bVc3Q0OzBC0iZ-!jU6xxCA)(+T_Ullrn`X$BdNeUcbDOQoR z&4}B)Q=E#=eiQT9h50o((>P^)wu&h?J0WaZ^j^4o7ZtN>ex7dTGX2vB)ixy@UmKH_ zsY9@!dqGK_QSNsN0Oiber}+^XQ%Nn2Yz;m)B_T=Kulvo*x~e$;fW~30z{%5;p#tD7 z91mM_3Rl*Q-Kx5{G92;`8SsL3PASLOG9iIZAsOG{?l_H<5)zgc3o)uNXN9yjm)(OD z#;@z<7V)=pRYA?EU_Nqyc>ePxs~rBsTjZBUyS3SvFYuWVENolsT>P>$=46m@wYE@X z7DEEtLhtoScE#@0CEq}Zd}mg2JHjbb8`_^e+3Jnkmtj?+3HM;kjcTQO9(SeV<6cU| zyuh+<(yEi81n|HO?rkorRsKY6waMI+MKQwS?jCX0dSkX)dkiYxYfVi*6|nL4QJWp1 znyZ-Nj34#wT64o+`PVYy?5Hj(QUJi($XU_AjF2o_n&=YfJ-HKv@m^3yzpvNxM;vWC zNko_l^=H8Eva-v>e1(O)RXo>Ba}EE;C%b%JnbS{eksPSn<0vio7QcUuggvukc1R?f zDcs`&6#DC@yczkR8TYGSYq%oxt(vJ1@i=j@3AxcSA1TiVC=_*Bu1*Y;>&G%Qr}dOA3uuy-)TLI2wu>2xgHnEEmI1 z{X9!=d&pFd&V~8(-0JP%TlFvF|5t;A#mqqRQaxkAvE%I0P-WQoyrPL}M)FXbI-T!0 zYm zt;pK#Lg~r%k`@o{p}*Kt+ZX*%5$8)~$Ha2=Hx`+aU!rj9grl1!1E_nFQpAN63CBcr z{}d4pLX~gH%(W{<+*_uL5cD|sL`%D*oZPh(odj@`$?WV!UyJK^dPts(_f8~f)F|$3 zv*#%`L~EvOaW-Cv&e|No4#hF66v^gN(wc@Si>$vX_Z&-oc+7&yB8vIh>df>-$nM!j zpa1^>6qdwGBeY$?HrK(?r#Sz-&D_5DWKsduckQq$DN8p=>bSt}nZ-+nii>_aiFV-2 zmkk-cnUe>O$WnKrmhcfxHOs{~onI_0GsJ{|wtb$H<`79><7MYEh7!3B$j&lWhS`GB! zT@DrT%w{*;2DH+oI~{lMEhp$T69e(C)uWsGt{M<`_Q()5kY6S366m{h*U)YW4A{M< zx-Qe?c~Q@JJ(j~-d`CPi+SNFnrz|F>`iZxpbXPs&J8chjK*D+28MS@FzpmCx*64;3 zvVBap(MW~!ky99Q-&X9sTJFM%1Kg{NI|4d8jkH*z3%|ImW3xr!?mPAhS%p1gzm^M+ z8@?lFM;F$5>jEvU2H5B@hfBW7SyB1`o=*XClN6f?)T7~UO$AU!*DJ|gj^cR3NQ}RT zy=SMELzA3mxTxgrYj!S}`?+~{zB6$6v38XQU!r1?+3`%ixD!Ljb%u=BE*uvFG&a@A zoX9BWZ*l2ap_ z8n}}qPXzJbi{ftZE}n)KnX%ZZ(m0ooYF!P^`y@=MEXm{ zKkb4^B+Ge8!mcE@Z^fAIRIpIqsX8ywBKiJaQTK_Qw@fnM6Q2b_c7raDqt;h%45+4b_0j5mt@{53pr}etH0CBj zP$?+<3Y#V0=QH1~a^QL63#w!`E;Ri?nRz|;%XCG=W_y^+Q(w_>)^|aM{S08os%=R> zcG*8hzMO-)j>l@=zfsGF^Ca2^)R+?}t$x4+Oy2G&P~I79cQ^e+4?B&>dnRD*C%O_F z`2I4Bn!U`Ta(+mu`B&sW@h&+yoW!l~8y9D*UUM(tTGbzrayD#Yth_*ltOSnykzbrNe@p&q+S{v{GFx&F(&8RD zm96)3uArauHjVrHNI?z^U`kwz-*iew9F|>Q_&9pleP7$WzN#=P_p*jiw3?o3APM8W z7-*6%@_}2SgBy9Y(AtW$sd~l_+#zwRPt)?vA_+Tm2;fc}W7$Ap1h#Pk+_~1Fb;ydQn=laj9<)wGD zH0b+?PHjGSZ!xrO+io;%38L)#xQ-I~RQoFChpU@~oXf@9D$IwE(!Z=ldu_=NP=#lHU&>HWM8G0i-Mi zySler&0SAH1(Gmk!LVrYi*ZS1CF*F4bo3QvLGVBJ9lNw=_bxroT%+^mDw>wHwKL7& zb&k|gM9a?uN?oyr2Zs$S9i=NP-Oe;r7saltP@m|my`oKEkX6Y$=^qxYozEkRam8ty z5kXb&DJ8p}^D%g{$0e~V@jLe?&WQ9guyYnnR!LT3jmF#j98fI+;l;WuM5RD?snI)+bi8Wt23m3Tvu1 zb;e~05)K-2VXyXwdU4oISM(@tBQSmPbM;+Ez6BUgrwspScSl&Ry-syE&YS>L=oNaE z(RUeMlSe;iacVJXhnSRPH4-ZgBVFD4>K;!Z52d(}x_-%zse_Em+YPJz^Y0iaw2_0v z(4f9C{HC7gT2Xo~CO?08#T+Yk?iaZnndw1QnWAqDxe23WQD!ns z$CV^~BfNDnbKhNAj#n6R+~b#uht^fKYd`bnzrpTr5-OjA1PNiNP|G^ao-5gW+0ryi z&x=YC!112vk+T6`sf|ZUBK_j1MkCwJOkd1_Zv5~&j0n$`NYrdECA9GqE~TVNs&3<` zHy!olHs2?I2`nhdRuCy*gI36GbADE? zg6_s@9W8A5ZQ;=~Eh(&F+mYkE`?%>0|EiZnp{k-DSPr7G`o{ZXyd?L3Ot47c^(*Zd z{4#{3SK4K+5yt$>oLg@`)|Dws4Zt+=reeYgcz#IJ|1V+g8ln10YXqZ0pVVY zmK<5Y`{(1A{}s?G^Se;Jz)a5cc{1>#l=0uA;4K(`pg?5nT;!FP?l^Zw?`_uZb-AZwM&*T&#~j{D~oK0tGcq5iI{%7K60 zdgH_U-x?Wg74LM12a}Uze}5{)xBs56`abMc{P!EkZeQs?Yka?jYGPkIfN1WyilSbNxRn5aUmFs4^<~_wD97W&R^4=OHRaDUNb~RzQX@ zCj31}BUxo)!U+zQsxbe4eoz#A*JVY?fv+&zc=Q6f6Lz|{}er1eAQaTdbwNPRBI3aE`H&4G)?bA-T!tu#uqF;5IY7O zm+=j}3zYox%irH2{Et}XAY{lCqqta1SN!`E-r@eAs=>^A`7m)Sv;Y39?)Be=H z@~6)RZ#}kIkUeH6S^|d^lVwIWkl@)U?carb&V|!6S<=Un8Hu6F#WueBs`=k`30*Eg zR9!iNe|S2vfG=^>8H-M{;aTbVe|95=e+5)`xUmEL88dX{Ys3Dx+)q1yzt78|=PEXj zFFB&_nv&?7>|6wtQ~$ml$}fZU5IPlh7G^E~ccs8)mkC*A_j6c$!VcK8YisHi`h9jT zE$)=+%V&>ASRb1k158GV{=UA<|6}j1!lK;XxM2zDQbf8-rMp7`5h+oTZV>724hcyC zK}i(^q`MiKAq8m|y1P5SHG=N{d+;87=kJmGx^&OX^Q?8px__~-=vqKHf{|3S>C2p5 z5B-4aU-6av?@nlIev}kE7~T+WV*Qf-dTHB8k-%i(m5afLojb2?e$a$J{Hvp*DCW;V z>lxwriqc3e*y+z=tOj0h!2w+9^)qv>>!kw$T?OBQX4K-s&G=L!iditl5nglB>*YfQ zUvRS@z&HI3PxyL(8KOuC18d~y(7!ivN%X+1>CIh|r~n!7HcHfWjht71zk^EbCJEIY z8tLe1-Tm*AuAi9#O8NJne*N(GiC+>4zbWM6QcN`b7vP8b-pE0RLwq~krwrHcfC@zr z6UoS8gn?e9?MTLZnHkGgPS5S;3+zd*!@j|D$mAk)fja#r@pLrbylamy6~<%Dl-H}^ zjr-rz?w`v4T}(WrhwS2r$b@PTsrxBF>-0Ap3&S_uC;xynFvpmMeHt+)|ChfO^uB)B zB|yhpnDO!W=x~z-#j)%uP&)oJTXpeP0nW`c2KmggzW_&&)ihQz zQD4D_n==2s^;;Z~2=F}*7)6Xtb{@@DHyaA%Lj&*YxjwRjALVpAc>oeK=|Kc7>@iOso=jNSb=6w=u^YUaPtGRy#Ll8P-!qgrJ?%! zGTg6&4tZy_iRpjW&=%_td-r2aZjjXw@!w#4A^blpLYDY}GEo(pV{r3xvkd+x1w&pR zK$_3*r2ctCd&a**sG!Z}N6-glLf0QC4rtL*Cx9w(m{PS*xfrc_^R_dQuD65kRi?z1 zE=BNlv{e1ycj12&?q!G+1>vE&-OXGvEKb>Zjm{O?XTyiRujYXoKAPw}uJ(4kH6ri^3?{ZH~=H*?rB>k{LTga4o6#{XK6 zWjSWsP`&EE8yn*$`Ys0_UW6=A#op{puuRvL=jzdP%71I5`M2`WiTAGY{ap)jth9RZ z|Dc@^ai=?NZu-7A*%9O4UK?@B>UH{zIvaWYH}yBU4liG{W>=u_@!vp z+oXR1+wynYKhxW8YxsHG5bV$;c#~l=1^@TSWtF#NyC^ySyfbm9|DIeS$2L^I`sNJ} z+`fMAx>rACuk=KNmH%6(KU@7ULU12<@gx7Ajqvpho?fo|t;hNQ`Zf@wi2u{+Y--Hg z==Jb2US~b9b^cQ64s!+fS^j;N8^@om7PQ$y3#BRh*Oo+rD@Ea%r>%|!@Vhhqr5DG) z?;KQnfn!5Tch$h0n*j8w`ad@Mn|7{sDuA3a+<9x)+FaNDk%m207|Gy9iQ=9)6;vlbo{eK~j_WvWq|D0eOYZvah zb*|%|9H9?AT#JEcM4!#pzrpq`1{43L#)3bd`TSSZC7sxgE2fRlZnD^G0wjlzKhkR8 z*xD=QGyFX%^P9|m>pHzr@d}9kOQFr;p4U-MQ^#xQrTbrxccORGQowWT;|Fz*gB;qc z{#F&H|IMui4jTqte1(6G1LDU2MzqW3a^UcAcJti>|1wzbCbvG)yFSV7 z;3;}%-evtv82+y%{(x{jh5UXCvH5K3;vMh$q}k-@zAPLzsGiK`y|1Sd3fY{t>hgzG zLlmkU`t&LvT7w4@X9S=5Pa2auwQ+GVwFn@hFVJKS%hm~j?$9snzq`~6+L&Plqcs-` z!==$Cq8EE!-DPYLPAm80!qK8FtGCeMD|Y808INeA_5hb59hZZ^oyDYl2-ljESKo4i zRM~B)@9tP-n`5rV_`lb!FmXz}C)@Ssk$bhSn-@tZy+{KbSi;}N@4mzqjbN*KdQwjc%LnC<$3(m7-uY9O{i4y>KJ#Y_lNU4!ncJ>0Uk$;D)~Io z#=kgIp%bP6&o)ceF8*bHI?q)cL1aj2NXd+K(|k$dAYoy(rFXdk>aug$3V?WN398U2 zJ>(Sa)UOa00rQh*(rt=#&$`u zp9Hf?0W+wTi44VPvbheI&%+a2yO68-a<4DdZ+kfW0+NjbfFPoQhE;}ysob1vc*-?_ z*nRQ@yK;b~={Jz(~)7*dA7wcKz%ni{Y1%P zPip>*=K$mB^<&(R%B&CZ?Of6<7PN#Yr$5N&2+zJHBg+7778Mi9Q0>t-fSJb#oQ;2b zJ6n77CBie^Eb#fuHYib{oQ$#Uf?o@MM4|7 zcpI+}j-oEiMk>KEs}D7^^XOlA?^Wh|6bSKJ;60w!d*VrYm%?#y5CtVxDmK{0>6a?e zSgfNvTEka&RAllky223%pv@knA|lqgQ)0sPRB){3$5r)Z@midt!p0v zgj@^-`uOFqP)tg|qQ#DKCLgQ7amm>|ebqk!fGE|f%`i!#(583eSAbsGdEjw-_-LeB zINi9Iwbep4RE+~;TcgP(BGst&@Cuv%52VzmV_fo_X$Ve+9709 z(5**9IIp$B9l*fc@;Wle-A%Yxtn8lRpzyf(L&f@`@Tcp+8@Emx zwfM9oiadoz(P8Oy&3KwKYN5^Zlda1WOuyMK&Vac#Ie8mfm{vb+zjmQbh)-cjw^I~T zP&_|t1?-H!Gi7T$`(aY_^xdsPp}m||n?h;}19ZG&R!p^q^o2zp`9!MTxp_>!ytJbS zFhD5wJADB4b+<9!sW%fnQ2(P-bzl%5DP#ztpvl$jlks?(&;vSTW4UFz!~*8-&uv8% z`dYlhMz1~U6TXtKEgbl5d0|A6rp_*U&1}4I)KUgRC1*N>@1m-YNIT_HRH^?CB<$gb zO6B*rY_?J(5}IC)nS>GX#G9pFSy7@gzEgXKpsej>T2;+#bPy&*C%$YDlMfNx5op7; ztz~NJOZJ{8(EowIqw|CF<2At(9UYHKOw)7Y-4-1KV@bt!Ys8VmdvAF}|CC#L9Ed#w zpp3jU5nexDL`9P5xkTz=5E7lK_~N&j@fod7`( zuQuu!kTXyrL2Rx%a{6gYa!-lc8CKwC6|#GeQN7Dmzp&v>?29Oi(WCN!JBMdeC+MLr z-3jd6>!aB!vR@eF>V`EaoZZAO{qZ#*g|?_MP11+UGZ$At3SDCpI6yr$Gm@t#{z_0o zj-hte|NcHU3;CHGAkbdTD(6c=tm^i(CWIO2#Q}1K;@8hS?%X$NfU~q&a*TRLDo9qm;iXgcJyCV znT2M3cc$refS><~CN7UP!Ko%OM{@MIU{3B1TC5?E!_)bx_bo}o*OCF$6v49t( zKRLa0iWn6(Iond(Sk2|1l5>!BbmZoF(XR>6UleT`i)6S2cwzU8Q)Oqk)!2Gqg0K^u za5m)PyHmA(XmC0~J#Yho&H#b-XFe*-9~<~4Xm~I5v2DU3EyCx&d-OgCJL?tfk>~MC zA!x%SI$t!`2<#*i%ex59w$XM224~J9I)+>uO%WEF0Y!@a6f>X|Q1}UNUMyV^McU}y z6Ezz0OTVi3L9J8US=2Bc|K?DCRAqoAH})&O&!xBb+uM1018fCuI0H&zQTXV42zIFL z52t&CJrxl&2-H@rKpjU6BANmv1#wzvAp1QcnN!m{dkk$D zM~{Vr^@96{T};C= zknzO>NmqRIS@M{#i7s5G!lg7-jg02*CmM5q%CZgvsdPO`i)tvgiV@p2MF{&kD$^^2u+8ymSq}K-EQBB`o0kR>hcA=q9aKt<1awkR7WwgL8zY;LJ z-VXcd7}U+F)?X6&t`$xFgp2xftL{)4k`Bw@QtxS%T92LNm@epg@+;m0K+~{<)TfZ0 zqMqx)*g6S@3V?XyR{P>UE9!r`e&b)W;KxU%gj+LX3e(6dKuCg@&6sa0R3@Y|=K1&y zqGWX^UVL(TwQR98dA#;Am|ffdswr~WT4Fi#B#RKt@Q^s;p2}88xKYF+AO}TwUSxFp1a277n+b!jRkq{5l;m|J z^Yzs27o~H4y@VfsW^L(M_@?rYoQJ{>`&$F?5RrFLDqTR@(7=N#DK2Sx^8*AHHdE*PJ#`+@%kghefh8FfNLdXcY6gJb#(VwlCDg%0}Nu8o&2fNjE9!9h1#6v0JQ#s93)bA(MbkBm7F2L z+4Jbo30_`$7B+Oe_CzK6+^I-_1!WGak`AVK4q2I!L=kc*mR;asvgW9ui*Nw6`}@;ggV+Y@+Yb92BD4es8;LI}ZHOm4rAluD zRA<0VX`|g)s92=)S|Mu<#1-4EzWAk4`+<)5RO13CV+m0D4z`Xri#6z}t;tXd7@dlD zK|{dJR`&Ft{6NEyC>g?@(=b2Lla{8+Vz8u_N}od>iB-AbuZ- zQgMfcW4{Z(y$)sd%y!keZd@6~RhcU|aa%JUtx%hbW;=HarYIN6b>T0C33I$ybbZic z%g%ZjQl=M*rJ~W_%tY z(FSe@n;r!g->e?=H5CNNms@xo@qfEJkDiD%EN?N-l)Yh41o^7CQ%iYtKHHfu9E3!= z1kT)>VLf?FU)LIgQ*3si7gLrZu9}{LD_3`D^DRtad`Ir_m9^ui2*K^Mt=d+}?#7Gu z;`RkQqiagiloPg9%sZ-VqvZgLmxK4BqUH^|fVUM}8ByU;7`-I}#F5{lcP2KAME2*S z(mBx0yd9T(RtC*B-?|aNw68HrNpA!%;26RuudPa@Pd&DYu-Y$nX;8L)*2t`O7GJrw zb9)iUx_D~hEHB*aM$dY#9@2@un9RLgt9}avC0GnQD|Qq-cFEeNv3VMl=3gnFcptA# zL3kBwce7k{XJ%V}qHUv`0h#-PI>W#eV7*&8mwgei@^Jwi$G0b~-EU!pIy^O03>J#= zzdt`khXD1FI?-A^QB4G0JO1abZ4?AHY)~odY&=dj$l(JZS!K}@5lxLOz5U1btW zA!K@1=viIu`9ItDGfZLA&Gh?;i2WQ2X^5?yeG{Y-y=S4C^~Ah6^SAsJ%&8P&b=7Gw z+59#kOtD%Y(!1;JYRxwgAvPm;Ca2vwszWmJHx*Ko zAE}{L+w{ov?x2?@#e#5z*l|eQuiX4)Ph#SGo)LV)T&L{GsHTvFvt-RNtomNhD2ZIE)LZ9?Ma%cfe){7 zSSYF%jq0j24wzm zmdlRcn!wK%EnyrorJGXCI8jFrWh77glHZpecPO;{!Ei#M#`x(sgOD<|hyA$dO@6$F>Y))PofGI& zCa$T>Ya1oVXeFax{7@3O_p;3cUx-wlr*~Ovo$?zhtT<4(l}Zi366t$*!|3a!wnRN% zu6?thmFYYZawi)Il|IVfZ8RdK)L>YouM^Q2ZmFabD0I$V4?(@y?XWayFF{@IzF+ z7S*&h0&V4rD}MTFsx_nISyr1YxUUtnVcUBELg%>Zl!1JxD1m;2isV_Fuo=IEP~)b> zZ&^0dMC;cUSUD>T=xN9 zaSZyC(F&mqVxn7P&J%0!5hp*z;Ya!&6f1RVZN6k~AeF_2s#Vzl<1eN za$JRT!6@2j_0$(*9uKBDpK)y5(2;@gD4&Uv@vyyVfmIv z@qGfXpB5P<0ZACk2B*s+bE)O{=_U}avFvi9{pQ`Q$Zoy`Oh(X%aw@mxJQrdu8dh2s z7&pDbZ(n_q$l|~M&ZFT`Vqw4+QR6&tgI%;Tmfl3%Qxl57xT4GaKV39X!hP+QIKWez zze`!hzNJUe;+_>2cSyX?5A;%&L!i-mcg}1pI(%x~chaT823d;ao2HuslTPWO;T0ql z?n%Epg>0-F0->%9lWr+KmR&=&Ztp#jJ~wFIH-3@iyYS|K8yxAr2?Zg3U*37ujUo$MBbmIGqBu#bLx<2-f;M<%y-I4cU{h1Z>UN5~i zNZ#vt-I{-sa!KNWYHJ!LC^g1z=<{o8aiW%{7O0QSmiZnp#-5bU0I`T`owWPNyRxkS z%|bmia!&hnOV4!?VdXjU8q&LrlMU(R7Ziesl}h1`jboZZ8`x927Y?I?wAl7L-&SU7 z530pDR3a*W!z_bH%}_$~U7RNsqRMHe9L|`q2Gf{dJsl|%0mR=lz~A4T{z{GMXedNQ zR+`=&r4VbiG5LF0!_p!Yo%$)KT3_d!#*rZp(eV78d^Q{lojwa#uiJW^e$M`n!Id7Z z+B>T(ovuQdz%T|*-%c+>8%&KG&2w0v8!?Xcz(8r28lVn+5wZR|^&v|drtQ1feeOhq zu&vgWJiB11>6TS2I4lBp6$#Z*!aF#HKWqvqoVN1(sG_Gya|pi=eN!#gtwUWK1P0NE zq%&yqQA~N<{JHHc8MRh94&V&Tj^P+g46%h9Mp(H68I^Lh$*!u`eUQ9xH$Mk(s$W!l zWQ1mCL;1nvhh@$t%H72Fn|)D;$D^DHk18xYtnvM^-=ak+K5~Y8-Vmg~GNrTPUINBJ zyLmmn0QZyA=L2@j6c#75c~UC|yUoGlXZ}fvbU*4%+JL=^2~BuM)#GYhN`b7$Pp#Jw z4XDf&7tT0CFE~f`E2pF;hNZ;Fl~FDUStH;RNy(Lt9{%^)W+lU$IC&Om28BfBqj5Yb zpZznsJyo^VJAAY;4J2-LwQ#%Cr{}I+sLD2Z4DF2=kS2ebUwkjGV@Wk5WNzzy8(Xh4 z4C*9i+3|XggmmoKLj~>Gh-UCu{a|0yEWPAP20DfbI^IaLtq3phKb}+C@gzx=XNKrX zqHT3RT$}d3^RgBOla{mhjUh{;NwnXq`t0ZQ#F=<_c2@*Rq2zs{hT@AV9X`t%r*G3C zR{=1~2oVC1S*;OTEeI!zH#^{rl2-oF_KT@cKca{p(&ehi|3r3#WNUuJ2+QPt!e+tteAg7G~STv-zA~x4A|ous|b_M-yux_FJGP@Y&Gqf zy{F_H2{AhAYfl-ck zf@`syPHM!ANc-~0Bk|F@!rpKusP9#Hh%y;w3B((l=z*c${Ib6Eq{Qz@obwWA#j|5iI+6o(T`OHxQ zNMvX((_FbC*WFLQ)XYUYd~{MJLG%udb~=}tV|qD-ED{@nU-^*YlS-oP>MFC1>Cb`w z`#+>(PR44E?CgHsCM=6-Vu`DPRv}jD$?LGpJyl)JSJHMvgaKoq(i~$W5>EHSN(oZN z^a`8mBPx@}fy{Mbm`yJblYJ&CX7_Wx1t9biWc=o7x}y*@{7lAMT#XP?QKfW0lz2oX zh)L{nYhuY?msY%OE{}qSHO$P4V)$j9rN{6L1e|Ac-0o8K;Zuc+Z1N+`)s^taY}h}g&dQ0-K}JhUX*to)q|jQdOqvlqv>Awq5u>JkE>Tyr z)HID9X5h+vDEu|9C zry63aNxCl+fho!u@~`;cThr4`4$qg%zSIT^-)7W3#&Odp466{Xn3yS`Yj&|s+V6K9 zpXEsy2e>{Qe``*>^^KTrF2?&iDkWLcTSjkg6=%8USy=CVDyzSJqO&l6^w`^a?WrXd zwW#?Ux{3J)r>4A`EP6{m7PpA7w2ypY@>+pZ7~_C-Z|EBTH8S>=k9!mBgT@pdzxkJW z0_p1NErv?eJdcFIXBnAcvL$*^?p0fp!Y2x)qJ|UV{NZ~vE3F}J4_xPjOMN1J<+V4? zB8^`#OA*VM&dEQk5k{a%V5i$@VqfD#|4S8s8w)=8wE3B%*ks*5@$M5|tceP0gxMEU z@B12)gmee)yJEb4M)^P;r-7kH1I0Y*{d_lMt|R`lA2sFJ)x=uYiDD*(Js&0H45&;f z-P|*(3o(!m0G1gfY=gb>_+)OeJRDx-e>P-3{d$<&U2+<5?gm^h`DQR}X~XlvvtN~O zq=rgyD?<45cv!=Pua;D|r)&y882Ahk>fWPR3cAG!W(VF;`W1ghHiE&od=4>wOUz4o z*Z;%?u=6lCO0|L6xW~Xq$ZmWNT69|KX0*_Q8Llvg3%|BZKdXkUT9A4 zNG*s&TmiTYSf+eGkOxip;HGd2LzRJET zMs%(p>a@qOrG%3 zmy>*mYqKk_sSe{K(NP>UXuGnK4Z#j&sPVXPYgmTVJgrQkU7YAt%o3Osg_!r#*_=(v zSFxdM5iPp4wTt#K1-&y#T0PlS3tUpC1Oq?>mnCqql*0Se7b31|7O$Y9I0>i%tPSkN zZKoOlw@lxU7_`7Sz_d9PhjPf#I-~xq3D9rJp$U zT#23&QhQRGH4U=AmHGOU-X{<@@(e4}_hbiXw+TXf$L*~nlT}0(wLJV;6I?nYW60;Zpy^eaibB=TWiM~f+S5oo#gEwC-Fk|EPgtIJshWTxubWMcvH&nm5~@Ej zJtPv7s(vzY8qgJS1UN^Xt&876QHws^4|Hdkk{&T;_PzY}u>PN$)b`4^-4Q_eBYv-Q9tk;h@ zxuY9|Aac7PLSP$sq~ac8?i=Mmoi2_OoN6qG-SZA+()PaO#$_@o>m$0cxlMDY?N z*&}_rZjnbSimH`)MwkC`7sLVg;IR2!BHPiSsoVBXIg!YN>@%oHaU~<+4Zy;UUcPUT zSgY}I--nS=-?2>KE+(;7)>Tm&S1$R1hUX)i4t&txgkObN0rd-Z5oL4APEwq$b-6lU*@Tns;9C2 z*l-Yu>EMdJ<9(pP0D0>kFcTW@&F$beCo*H;^K`2NrZNMycbDJ!I1RAuB8n8OnLxDM zM0xY2v;e1Kw5;h9a*#QIbf~e^`=_PLkQyO87V#B($LZm%zn8$RiVZvXbD<(44ejMU?S2~QpLn?)RauHc(>BBWNQ|~Esk90ik4GHl$0gsipsdY>^3j= zh)|RbjD09g2^o)wL8JO^*TJEX+k20Yi>X>uTlt{_X}Q6Ty{*CdGOcF>#gZp2*Wtl~m$k?;Ufgf8(VTrf%7Q*g1D z#Cj{~V?NGa38{omQ5B(PX*Bb~6>p6x%+cy{>_;q-?XBKP-md&!#)@eQ!Z zevVwF<^iWV-2&VQD<9=hKG6(fcE_XAYDKosZ>Bb61ADURX>a%scaVdCC+rWL=8*vt zsO}-~al%Q*Z4nJ^nBSS@#T~gd0A+B^;N z@r37vWEw}hB!uw{ZS1S99)GyZu%LSqO!z7J5IgiiN!4RgbzkY2Sq#!NLLE;jSrIB0 zvZaO2o(>k+>xg(!t6)xwVWf3n>vxn+TW3(A?t34WS`16Q;UB8_-132V%F%ZLkA9LQsa-}l>0(Oex%fBTsZT0xSa8xD z9Os@tQnGi{TfQ@w=fvcm{m@M5ejDkr&JcbhJF>XO*lq{Y5F$HZq{f!aPmy|01(u3!B{giUl#s#Hyj>zrShRW&1ze04; z7F!9HSlT_NKyu@(+~9+Dc|PD_p4{2etvMn#rBd8T>?svZG!(^LF^1rOpKe2- zI4R`^PHEyzMB_<*(*=(c{Jx^vO|`f$^dtE`Gs8~d`9i;ST*A3{k%Ix}0VHq}-*25( zpD>-=C~(QCWlCA7q-Z=3>~nVknPgqcVidJ_`0$@~NxZUw8NHU0tP*xClVgIEWhyL)t4)0)E5qMZ<( zD9+alS}Iolg4-K*f%9s1rf7-BkikV=7^{=We$bJSj=RahGURyIQ@dOghxr+jU|Z}) z0WLB4IoxDKo(vYa%P}m;>jVK_qM`T^UM8|<3>MN;XYf7>pQ?Z%`l3&tR3!%{o<20B z3~?Put_~OtB3-MdH#=9znzk5s;?zkrU>k9HOc`oF{Tbnxu8nVM0^hO&h30Hv@Z zuQoR_h2l$d6_-*D`Ch_)jF*wDe|_Bu zqq6E1YShNqYNt$GJ|4?OtL8|!pZKQTU3aVflF)U~THPOh>`7~p0agzNp=CNDuMB3k zpA5xeNo?VYBrldA&oS8x?t1t?p8vgC8GdS#OXeOs-U@g_a3*jNmAH4y5>6VPI80z< z+#0sA_%m)8<;PD8y7~m2*Pa{*GFC6kYF-QgQdMA^l|{`+Z$p~V)$+_N^l~ne;dx?Lq=z%~+k4p)?1=0O?E-hSW zU#VK(L3=8vbd?Ni(O|r-1ek_LT1TQiVY1C(bKTU_?{a2iOMpR}w?EBZ=(eneLpn42 z8U)kI+OlR-1i0vsS~wG8J_jCXM7=1Mnwuh%ziUieEyRI0n`WlXTJlj&)AxVWuIwk? z;%>SKYvCD687x00DptUrim74s5g!tYksXoy9XkBvO#ZiR8-O7+3OMa9@eB7@V?O6C zy_)*@j=jR4QALgK#mo1J`~j}&z!9?lE#K^l)1ulVJ>o4hTNa2-AOX;cPm@kRDH9oD)DWB63R8rH6!fSfOJW>p5nZ0{s?FPl-|oJs zegr=%c@u|fB^-HbW4!s$toQnw`aEcY9F*pYR$}}T5m{l?7Ai#)@lJc*!#S9f%=8G} z!SsTOr|6NuKDK32LviimJt@x+dHI?pPfP=&6N*NF*uZuvgj1`x+TE7Bsjk|Lc@v%7 zc_(S|m8rx_G^UWrS+Q#ApXzGX0dOvU%;6$Wgk}B!aOMt44muq>UPWXkZDSS{_gKp= zBH`#w^A!Kg5eYZN+gots%~{FU^S)d3)^}4W-H%$af!7efCTHEspth?1|e4vLTb&vWlcZ9~eed@AdW$8|fynOYh6Qbaj_@xRZ+ ziAoIZ!8Tw4K1K7b^OnNOmHB|W1_R102^1j@MKO`P37he6hG^}HmE3GeC>D;;&W1|H z$~T;2%ayc$yOf1LHm{xC&->mldG4|yYsyJmQ#@;!Zq8TkZgfi~+Tox_BhP3y%yM} zzA3yb@PAs-j&B9$?r&$&uPw!sLd#-0V|%ps#w$u}7%ELEmaNCW+z(v*O%rxxNz8|A zF$^Qylt6zHgqdMiq1|I+`#}zh4KCV{ueVu?KFaB#VgCzpWJ>~Whj$I*(s%7zH@Dio z>X4Zi`JodE-r^!nLIpx`ZLZQp7)a*MP5hZbqBL`Ij{?Q-J7C9JOXi2Z!kjZ?C{Ki7 zH=*8VwR9o;@Rmh;ic9_@#%{nNq^$4*?>p%WvlEjeuH3vQSWka@ZZFQ1F>R*SbX6T} z+@0jPw>R>v5-6a)5-3lViNPrHmODKMO8JJy(G4pT zRO>Jb8gvB2r$0!1SQL>89ecp>9p_8WlQSkm2B%*Q?O5@s;w%b@uD6j0h*9m|v$`OX z#_y8*+YHp+H*PDgnZuOfS`z{#rlXHNH_YG_2WGRaASixN9cOH^|m;&%rnHA}=}*Afa@N zGT!_pqU|7eCbhcUbF^WBA?QuT4_*AKh4N!H5$5QC+cJ8sDN5bv-WG3!VF(@8Gp&n<)-%75ENjh@ z)hs4w^NxqY6g_Eore#qTE~YCCfm{GPXy~(F;Z&%zktVessOG!I4a&gFZhm1NlHsc8 z)!z~KCL*upwtIa8ssg5u^Z~t@j#(mPfmYDeX8MbHf7OA_(L8se+!~YdWRF%O^LC^? zcCJf16g>n|V`@v@S1LBU<5lahl-*C00*vXEK||?!TM3O(RMp*7W%>IHMfT4MefRV9 zcoo)UcSVLCT6*p>yl8kaE>D}~1v^)He@kx<-&OvVwuKy^86uOFo*4e@b;b2ylLyBF zEXK?VM&;waKm}+^ougoK`l}98K8C%RPr$O)Becv@oIJfD_^G$|D=RfV2)hD_0}Ll) z~Cq}H++!JQf#Oh$zt2hR)zr;qd^zh_29OEjNJ z$K2}X)p60(iZJA7U}l}H;booc+quBi8=jcoC2zsZsb=&R55|&0y5i`yv+I?tyS$WwOA83$}JzK?CuUmPBh3 zL*i?k-}7UoLXJ;=HAD^?olJj|?quR!*Yc%}F_*#0!ebkQh#eR~MD0B!qahj0!{ALazECmsqBuKbuMD$=m)_o%AqJf(=g-E9Hqo zT~%bEqA)-q@hg=Zw;DZ_H}$j-uCQf34*A&!rVh8~*;bBeVHJ5ZaF8K=jT=#tL`3p# zB{B-v<}rH2YW#Q{3e>0zg!wOUaRj%rr`<5f$vo+nS~ zGE&NqCVmhF)Qf?0;n$&;Ro_sSH-$t~zdmNl5d9{U%jeh890JP71VqbuzX6 z;rPwF2{Y<~608*kKQ$lB73W*Lm>PscxWY}=YRhC}efMJNaCEpEV|z?|o_dcIZG}wR zR<9xEOq5oA=AOHZJ(U*>Fx?qiQG*XC<3Kzc%EiarLSVdOS=S=-}bs^?w8s) zHY19+*2>PeAEXSE3=PQ-C?DQV2n=DXqbY+}ByJMD=O4d(J5{P;kt8cj5ntSyXlG8^ z4zJXJh?W@wh5=2wQ$2@wrU)+hf;Xbg;$px{Koz#sW_S8Qz1q$jrh(Oz;za!UuPy0cKU{KwSJ`$;W1bzgz(FYVpkSD`~CLXmajAeTM-> z=}!q)?_rsLphSA?gZafG044sy5nX`{%^?)3S{YMBrN761=+w8JR8{~EpDbH&0#l?u zrwpXXoQj%!xWAz{giQ%{D>_xfF@{4%dxtfK*HZY;%|p_l?Z%@jG1yXalG&p?5N)F^ zGT*KuKM=j_G@IjOP0GB|YI%3>PJ0Vx2PP8YPv)@aoflh0X7M7QB!VNtv+htD`GsYhYTH?LCjz$leZ+*y$e(~dOI9JTxokrj}-5-@-Ldr)c z&VA(OJmZJ((QJ963?aq>D9X%C0s&9>HIBXO9qLTykXErR0>aP|!xvneKOH=3Vn44(*HChp9V&n7 zU4K-rnDTqT^TiW03IoGaG*GQec;=5y+Jjk19>ThjHUSRHUqoR@Zo~YJf>epmDD<|v z&UTVDBP<`k>5t?H-ehwFrZk`^m{b_346KOA*l2$eO=Lu9F zbIr>>@wP_iAR^^Kx^MA{%na4pYyZ=?{$v$E=k|yM9dv69aM@e70!QFyucqGbyvS5a zH%ImNFjFsA)a{a_Y=s1oN)L#%^5Xp%Kc4r{3QL{I6ps}NYhqTzm1%U@l!fdmXYUYn z&?}1f36};WPt$h3?{_v#qQ=6_-6eO*tCvwYro`dYtgH{~1ef61J(=@IBhF`AUk$?x zWS~8UIHfE-_V!jv$*#j5BupDjO(o-3Zkh-zby%&Qz2ILTE{#alEE+dSWT`rSW*c#k zVn!F@wm%x_%>85;%%h%qX0K!gK_%=Qmo-WIL|tmYRR=2c;Oao>5kzd!E8lccrn7u( z1CKKJeSa6XY~FHomAUxVM#>Ls>x9{?8-WWN^mUqB&GL&0#mF_vssMT#qe9wWa$xYx zW9cMZs0=tI*PrtB2t!*wrF#_ZbFKeWABQouO0uN5z{1+OK^%?cM*JSaHL-~Tw--%h zS#Y^w(~G}zyQNCn$@{p%^wfmUtHx>~wL4qkrep`c%@$eQxM) z`4Fao6+^*3((v>i%F&OtNp`qxXq2(=a9>|dbQK2UMs-?GktG#2U?2RH+aAhZXqfO1 ze8QajyLt`5wab6VAc6ZaH73}a5X8l&VYO;3*>60B{Q_|k{e5^*O^`@cbn9qCv8{=K z)h^6z{I{2jx#sDvSqd$-b6Wk!tRvyw&kY=Ee2S3%E&yN!DD?@1JC!_8B#1|qjUk|z z(%m=e$Ex%Vi%4Cz(3-(u9aGqOjRJO02++9D~Y<*-M|K?4p&Cm+K4<>lgDg%!= z+QMv%oYr8{-rhd3OioG8yAN5OzO$TkZ>1R{;S7d~YUBa)c3#Wy+kvfZoUMqtZ1X0< z7O+a3YgxqVpBnC;?Iv(C&_BRIJjXPTA>etqKFAcU^f6>jVXcYEuH*CxQG$bI<=m#; zvyIl&l{jwlI{;O`rNsE=w68}k zlQ?jPKP9aX_G95o3|&|m932YVia&zTS-gjfL=ZG*h*mpGbL^dg)-KId?=wczODO%)z=&@X!L;5U!CLxxW zx6epRyv_S4ms`vU2@h&sZDJa2e&1&|i?o${fzk*8y%}HLsS$Oy=Z%HZdkyui|ud#Xk+4oL5 zDdGJbUY4U(lG#r@hZQHY9+!v*hRT;il{&O}#660_U=J??hsoPg=j9{G#;a%{w>i4`js-e>Hi!^gDEZ}-K`mmF-yBA%vfSH8 zbUI&1;R>kjv5;G}RwU&4W+lNz4GFn9sQ#cNPvBd9uURo!D0UD7w=!afI*p&dA7`W% zuSd#~2Xfqx3!wx1qP?${|ZG?w$r3|ww$U!9h}xf|2% z_Hh_oGQl$_vrM6_?b6|<^D+Tf{7vMEL%St)>%guXk<$Oi)O$z6^}b)Ah#=8P^cvBk z_uhku7(_&f8bpgSdK)AXL>pc7UZO_tMDM-V38N1tMj72b^7;Pmz5cS+S*%%S-sgSF z-p}6Z6Lf$`yJa9l`*xW z->({eRGb62UvIL?04Y<_JgWMr(Nwv(Q$6a-8YAKxHj^r&60aFyfPcu$oS)TXt)Bg-`whc4jBejbXY`30RyJjJizHf{CVv8Z zZ-uCf9^pFB0t7~cg*}k2*AQx(!F^3onQV6tqocNbDEWX2^1$oG2eHkbjBglO{V?TS z^Xd~NgVZ?XfU#7Z^G_H>xf$-@&dasEj=N-@?Yd!=+A%G%V7C{_x{v@9}?qH&uPpdC$kH zl(OdD{3mSg!!AE)6Ok)*`WBP@=J1Ig%X0CRhxh`CX$ONjm(sT6q&D&jA!p0TJ(-Db zzi5Ne8?<6R@Lyodh7O&YQgSqajet9#?`NB>j0ym)y#JTLSLq!eUR0j@l9j559=sl{ zVa_9}XHR1z>hQO;_=*Wr5xFG}0OKwLF=?}=OV*3+9`?a>U#g8h1b)QBW1&p(F#L=; z%u>h`h7i#9OA!gz>H8#!+I1*Vp@6n)mLG9|VDb)~{fW?l8 z8J<^c`t(xsMYu9WxxpkEakzYpLw4XVsnr9YWWTxJ9!Hpgu}@F3TLvrsjIsTA-==>6 z`Nt7j&#ciXkShkrzLv#+ws-Eh(pNGjLpc92yXV9Z`RsoUb{Iy5#l9U6Tv`-9F_onL zDZt|cPdeZVXl^)q;=C8w`XFUJ>v>2sd=f>6D%r&j5j@eTyvg*K>A^H*`WgI^){(*c z`L-l0(Gd~+7(d0tXSk@%ou06Jhu7>8c^>6Avk{=Vw(c(&E_c@e>gbcmLO4JlG)P`} zK+7NG4x0`)h$UeH90q>fC)bv=Cm9e%g>{pGmI6v(-`P>X#$@G5cj zsDnk3lK%>({O1k7rU-e)F$ftE6y6F;d}!8XXg6 znQ>0%4X*`T1DWenf|@-}RL+Gt%j+78yB!%X?E+nZlQ_ zP{!QHbr4_nFa4gtFq|IoT@~V}JY&+-3E*OGO!ApL{0W^S_=0VVj84R4b>+jAR38_` zMaqxBjr37}L>75?ZWpRJ?m4BDH}|eSMQEnr`tUS1YnvwzD^cGG8Q%&0Qo^z zr$Qcn;T`_Q?&c25fNx>-`#Vz6#9A&9uvDR|dkn~rdYYuZ`X62Ic`8PQ?fc>_5xh9S z|Ae(_j70Dka~dFOpZ{?4?XPcZPJpP2aI;}Oc?+ahHQ={^<0-w5hD#U3P#-9>zX8U; z3g*Bv_hWplx>SIz2h{d_A01ZA`2XbFAx)xnWiadgH#=m)~JmSeFL^X`-Xxl#my=VedK2AlF#ntjJ7ZU*!Ac9Og*U zY8wjhH*jDHEw%f7lXRex=6{MvGn;WC`~NCwz$6hyRlF=fQQ)-NmP;#Ed%ffpgpKD9 zTLFwKancW#MSu59CqVpN08;U90n^^W9Df6v6fwU(stKi7Sxp4Fk z;g33-KMy;#k5k6nYmqh<3>wff>KY1wbbBM}S3UdZjg>w~EL=p1l>Niv1t;79D6VIu z?gE+~Ac*~@2+6B-0KXoY8AbbCR`^l^b8rf@$#=00S~30C*w-KZJfHzE3?=ciM0JBci&7TpMz!yIlt_&~QxZ9K+ow z7F+=Y^^;t9n+w6uvLU?X+Bkn|Wl;>lu_bc$3=6s|^#a421)#B#XlqPhZiXMFTwD=B&S;D>XJTzcg<0i~wC<$Lk*AdyKDc1V^Mh^u?k8o2EJb zXiEjE0SZs&VK};Ijq^GAqX_^hyUHN|q*rnl7ywk&0dS3*eEspy2_VHm!%kbT>UB>i zd9C42LP@XO-qQ}e_>gvoL=ya|qUq09Q|FsJ;35?HieXlP?>tnhgS0(Ncybi*t*mxu z)BEDL7(dzYJ)ICZu(PPMNa+RG(feohe)ys{V{Z(sZ2xB-4aiWLE_w8Nacr8cM_a&E zYJu#~e<5Lkv;P$D6T^Ua&8qtV^9vVXYkXKhCPl`0*wb~Ty;WXfR46NB-& z5&rJ4$rsmga|K;7Q;S<0z5kbV8~ujZ3{3hmU~Fbm+xYa;m0H=q#Cqeumo`89SUKS| z?J=hIqsPka53EvgNr2zMzkfQ(KT>|Aoc9RxF<9l1@^i3a_XFj@tijjC)!a2x2R9el zdax6>S)+1f*=^v}4Dzgd5$t}D+UqjnH|wouvDqJf_&tPP>a;2+Tp-=qt^jXbvvTUY zkKWNP-$}@U5oM*?=z~J%ks~B~ntP+|ug$f;ot5w-I4_*WD4J^#6BjzFJL+|mbpmZX z)({-6dc@cINoCRxwJeOb1o#pj_6rZpBLpqn!t1J?A5EKVG0R606Oe2zd+7zlvIMJA zSIYK`X${uha))6Ke1`XW&neTBz4Xpp6YVrv-quSdz0gT^->o<6cPuJ$>l$kR59S<%>y07SZFPylWar<0C7 z@Y5kqw-|7kcLim~>?g&0mX?Mwo!ffB_4$s$;dzh`xRDpx13JA&(|oOTwgq5vqVGeo z(#%Psk%Em0=d%lw?DBtGR|OW+!%EW3_e!`xRTq}ReR1i${RIZ(1&jpn!?+odbbl}_suck@b(P!guyncleXvBnaZ9ggL-h=S|p z1vfwaK|B(b0Di3J1ejmim1&q+UR>bl=@QB(8u~yI$6hviZibQd7|BvKL(CEp99Uo7 zyRM5f5TWFh{^`HAab5#<_5;TH4sm*3sFYJ$4Xr-lf}7_)YJ+`-PhI6W$w%`5uB*+2 z@8z`Hz?K75`fqxASa+(ZCLw29YxESkL{;3W`K4Jxeu`UkhHSc-oXLf&w!6>@SX?SrS;5t-=Gn@70rAt*}G( zuE~i%IDlN4X;&&+5df*|qN=REh|8ZUuL*YG`FFJp_V?wMU)V!p+2dbjjvPXjMpKuT z(uuUiYP1!Wx%2trfEI{8PL6@Z(G2=pQ;xO+2UUciD2}Vux^h<1zXJ1?Yk&nV9>9O>T?BhdVmG{!!BAcmGYx z#I0mGC%V;5ZbcA@#`|)_$~lwx^^%Pd>=Fznvrmp?GW53W-CE*?%jlaQgqA+|)d8`zAfyEm)tOkGgW=V5hwKqE3z-+Jc?AGEfrKP6^KyP=$? zvo7&mtIZ+i6ds!U_{2WxGA1{x|7q$|w#i=Yq^0*MqL(paJ}4mE>f~2$3!EK{ZOls=JRN` z6?}+c`WpzM@^SRWVa1zi5&I`C&nF#9%BzLPWiIvy++wb_*T!cW$gF~T_k4KE{052c z!V3U(mhDuQN!qL3IcpRw&i1-MmK3F^o^eQ!TI6S`pli z$pXXEmT6`w4@lf#z4epYs-Qh;+iJwa%yzf~kNec)b^yI}yQbRR0;3ylZZ<1w z%#OP#dch?BYn+2J%(M6fD*3I2(-$v}Z;W3tzV_vMRsr{=;8*8_8XLq`)qipGlGDoo z7ma#^EoY)!E~3CpjEObzeUmkz`$s}=9#n?968ix#@qYTOS6#^Pee#X8ho zmhrLib{`XKI}gR9fxFZ`#}^4fb3u5$Z!g<|cTJAY-qz8rU8L4xA}!2CZ+uJSL!4mB z-+I%WZD+-N+q~iVUC8V;^&>-v5*p0xG~XMG z31rwo>bZ?*f-Id|&2(NRNbUF`plw0n%tw9ncA}0C*yscV;@D9?dZ`Nc&VT}U2hH|? zL}NF_u;tSYYLq!p^1GaCqs_59FQ@~MbMs_M@M^Ga=SjN!l2M+E$i6^Sx+eC07=peY z)qt4xsoh3CQ>VE1Xjq)k*OT_0mt?d<-w!?VxQ8z|kR z;sUnWBZ`b@l(!x>AaT9;pYcq@d9&O4|-n& z+6j5>8ZIs5?L$%p&l!@&;Tz2Nni@H|zD}_%sdLOx3W-7&wnX~-K)H+*``;x4TPva zwNzVZ)nJ#OnwM3+)MvP|+fV6sc;#pE6+`=9VM*`=v!ljr5oiugC@5kp){P&XYTvZ3 zWE$RH`d`yEUk~ai-QFHTO};eyFK(RwZM)rKRQetp&3JQk^!XDWq0@wQ`2mPe>N~k& zvGjdK9scaEFLh1CvaeUcA)IRLod-Ik@Am! zxSt`}($k(^AwSrcYkhO3z3#FOb=Z`c;IrOWO%M{9%!Q%7^P9T?z}pt?A>Q5%)Yn~5d!aLB|u zXV#etlzK80u&`s^P5WP1L9CsxKf~F-E*J>?asgYLQF}iJ`9x8rOG8w6hits2(jQNo zB$hUHNr?t|R5Cc2oNHOgSP00kRzIK?V_>Xl{O-dRVfHA zz3~LucpUcs+BVGcItx1EnFOO>J3gOZ1V)K%*6)&E{2v!!LZ1aE4%&KUpf?ZPNM%OV z_4tEvKEt$*9^D(e9Gr1I{^mWA5#a^tO z$A++ieHv|Ev7oeQ8~Z|B^K3CTUMZt;DPI`P$I0913X8Vxpg~4jVZj9(tBl2y$lKOt zAmx-rbRvB(>!xf5q^;p2Yq)QJ9!?vraGNJ{>&2t(S>>me{|mF;nqoSgowf-e)c7o! zQs4D?WFH`AdaV(`3T*OYyq1WjoP~w-S$3iRnj%srKNbZl%(dGacj2J6{>7;p;RU-7 z0b_HKy6ITVEpPbSTT%MeF+Jt6cX2g|ilg2tNdIx|3NH(DV9H~aA8NcB82j+#Wnbi= z;{ptTIg7KS;Wg`|S%B3sK@N%;DmC0eFjA$TYi|fjiy!v1yT)Bqw2$5NG}ObjbbQk2 z36v~qhdL7; zdA7u-Fb;cFEi4z`OV8XB_7DqZ2v5G_H|K zc#It-=P(EYk^{}Z|6}iVk@xbkE;J| z;?((zuzP4@?Q6Hkjq1ZL)~U?zDelGLX82bW`~5@|JGP4GT>BkQ%Hfg#sLq$_tTdX} zQ-vZ>&|;1Ko5Hj%!PCq@p=pITOB%9{Ildd_U3erLUC5gw4-Q0&5>!%h>SG_o@5w)SVrQ+OL+IUy8SLbYZ=l=NTbueTVp%9nVr z=4ml@FsR#g0;#Mdnkn!cE;1Wq{p)Y*MwUlHiTCs2*o0AOoIeZV72rjypObOteU&#Q zP0ji}!un;;kc%$^3Y#FIr&ZEtnznixk+JUPess!sByI=*k?70>T$l!Hw+kSK^KO1V z0xa@ZAGaLY<*P&f{&D1XS;oQYitykge2|G(lxQR;S0~TWQhs)CKDt+P_a!lF(5=ss z8^B87tpbu6$Bdx?Z#av!^^R=w>V_5_m|@U@PWRK3n4atn;;$%HsCWEJ zzTJS~dr7^ONMgB*A7#xI`kD4j329~Bi6(`WjkL{;b}#!mEc0@GIMr*;vGFcQSBi7V z`iA9N}(1QAl-m4m^ETh|q088USGv7;sB-F!8epv5-c^pf8J^!0kbM~=2ul^+ zOpHJ@;8Q9mXflqv!PPjC^sd`x(T6d7G6$OGZHI%gZe?Q@o3&(29PF33Lppvw=LL^) zS>@@#dtf8*+2P}s%`U1ojVpvG8oYUh%#W|8*N-G%DSq+iOYSn z9~V+DXpLABPwM+Sx94ZAgEB4$#&hSayHlq?%ozAjznIZmsW-JA0-N&{c=ep<+|~gB zGgsSCZTRkad93BNzK55{GQa`Q@>_oE#pA}KPq%D)KC#{*9klOO_g|M}aD6^HF&A-; zq-2(#Dur_5v&We%$~D_}2mb6SBV_a=qY2zxu6R0KC;kZxPr&DETkUxRyVz$d-|+rc z9~K@a=+{)PX)K8Km6Qp~pQSEh7N`dS326jzTVYBtfgi`?s?7)G87!xBEUwadVXEmE z?QF4^Je-ELn@MB8p_%k2%hZ!2_$|;?H&RyUt74$VGQh&76{b>Yd@%Ygm4Nx^O-~CO z2k`!!vQ^_^I7ebB&l8N%g&EZw%O26{b6o?>l6~ zJ&`dSinq}=>kV6;#%+d%Rd}cH4^`R@cqoQ+wrli2YY%?S(EHT7=X{cm17PN`EN0lpq#Q5C2FHmVtFODMIdDtk zdP{zwx$7an$g-3|S>|9Y-#AYfyj0?GhtLKKIG%59RT>pF_pp~(3- zzq^j(dhph`X$JJS3Fv#G59i)RfqDvkxceG^mY8Lkq@RRxZwwl@yb9pR4*n~UsLZPX z`xEDpSOgckQ7{8?6|Zb z9GddjKIHZn+=A{h8#Z3gJ$+oTN*xex9GA!HTVK~qF6MN8F8n~|wI(#L+#Xl$qLatR zdjQM(nhSec4<5}-Y;%3f?fSEnvr-`5pyt38jGPMv+tR62?ve;E6A5+$RWdRc4s>D* z$)`1Ztq&vcQB6YB5bm!rk3-=kLw$>oLltIC8~zw3U(zM8wPZSkB8m13=cF_k@Z9+ zbvw5OAvZZQho4yb;%Wri**5YobM?`c-5Aw7FJCNKo(vkTH~4PJ@w)uGOwz5-gj?DLmHl;8Fo#moMFa-(V)S8lNUPM(<$d(71v`s8)!po( zEgxY@@7T4rZI2@->I_VKk})hn$?dxbstm{|#;jzS-25od1H)a?M&?pJIU{OwqY>MpII?y-70kAu#9o zj-lW)+Gc0-Yw?#^mTwI5UN2O$Ya(|NguF%vHU0)5|<;L^ep`W^h84~sm>yiqk`)39r21yS$@c(v$+Rtct& z0#Vy;kx@m`mp~B9V@-ZnHzE(K<45z+^`6&je>+N^2|_b8n?Pdh?_~64K7WQS``XRU z1)xU7qU;9U_{f-k%nF-_8Z*m3N)y|litQeYa%67%U^qJ7D#+_K+QWb|<-l;PWY24_ zNOX8q!s%g@u3dkDWHW+mt2!)@Q99cj@R{_vQ-$P3cdz#VwfTZ(0ESYDTeV2SNA4#A z!4(y!JmN|Rnv<$VsUEV&FZi9O3bjlkSmf`b*Z3z8y;VQ=oW>l@bZBdpEvf-c$+)cG zzZHqPyb?hDlvROW@G$k!PA{!ngmD01Je}cd0BIwH)W5>QJ_$%4?-%2Ju1cb-dLYr$ z1vD{)kfsaema=ghd8YZ}9Y%9_J|UA?eKSdA1-qv3GbvfUvZ4+t1_S!cl(pL!yRxv- zz#^1ZUF&z}i~YVDw#l*0WYUb&vbSQECBb8?FVB;%7~DF(x6_*V#TK>jKU89P30JEs zypaU7s-P{~ML(@dZF9d=j9h|`EqCbBqBE~ z>V4=l2304^tEyn?X}twoy5V>G87iUek8vXJg1kZ0opoPbWkb!*aY4=&Io!>%;j^nc zVuO0~ir^*&WMAr1mdTx*Iu2aTC*j=dXq{7I=JdPpj>U>XNbux`%SOhk1d~(O)<9!N ze^xc3vx;4rSP`uIG6j&c{gD$Tgvs8Nm^%|n3{<8@D~8+{*QI8d+@Y_kR$A}?#*Pc} z0Y3!IKRTV3;NRQxirEc2H+Y}oJP8tJlT%c~hc zf_QnK<&yf;RDV~D2e55u5=hjv5zmOn&@Q-x`i_M#vuBSdiFAN@OmR4d8Ft89n%(o1 zaUiqygUapYCEFhaHlM2>?0ll@ldhZ(Zy%^&PopEN7XPf!I{Ib08=)vlvPMv$wFl4Y zYe5Ec$XL+awA7w=qd83BqPg11l{;(Lk3=o6JeS?Z33Gv#^6OihA6vU?x&1mH#N1%# zr;cfanvo>RXRibuX0h*wukkh8It2X2U=Tmp>1j&DNi-HKulgO+8{61Sdf@S=o+)CB zYnbcQa&|d$M#dgPA~-@sj_3AbH^njHYNm#HvQo(t9WNFDV4og&)ER{)!>G zSS<@jk>&+_8CzY!l+wmGl?FWtY4k7(VJFmcpsci}m-+Z=+o-kRwu`e_%;B;`sgKF; zQJ7kaBd-R*Bg1sVkSFA$Z3pyn>vQGxzGuheH&c5*-kH2RqRjGRiNS(u0V z&=X6eMxH4Ke&Lhw$c8Q^{PRU>3MM3L9=q6EIKkJLwcT!5&0*H3K!lO18Qx>+e zV84~E;{|on{a!T`?SVic_;BDCDCeyeiLmYQHU>0*p}v19C+!O!wee=l?7>*79|F4SBB<#-@L;@i>(BL*8wZyU~`R!UZrw^2?c_HSpUI z+JB_QxpfI!pC-)Y>hPQ`Hz9Z@uy>rHyfaSxmcXh#KBMkg+2TU)eANk>$;p_S-TbY# zn9Z8u>6DPszWRG}-v=M_h8R4^RNoi`_3pn$!c?ct(nf)sBbiO!b>_9y{?rbBpKcU0 z(-OEbTh6cTa-W#Kqv7MC0_^is#%be`gZ_wulB|l(c~s&ro%fWu?9$J7THZP?<>q(K z!Dqhl@|-5G(Y=wb-KmMZPVj*dS15GMEpDjc>)%tuk_MY1vL(*GJSE%mWg5JwIzX*q zx0f?|MA$QkiWpo^9lk2V1qeFwSWn%R zpgtGAR1C9=o#V@FqS0#-n*Tu{URc=l4DI?yLmSv^luuG4<*q_TqStax7r1igT#=+i zj1q#LCr1wDFS$!ZlpiQc_PUv2clHxTk#F9?#veMNI>uEtp<9WC3Sk-;JJcP}K=akP zKS3BBJNG};XTOMMxXz)N0y=15AAo}epG36hTCm>kE2rq_p;NFRA>5xrb=@cd7pe(< zNu;6Wv|~Z2t;Oc03*PV5hAiZtW~tIIGaLSj!eWfVXEF|GufH;-`e~2da4hL|v4x!W zeD^BN{j?!%*oolw<7kU$KtGXyDbRwrnh_~iELm^d4B1TH1F4urcLm9?tN*cAstxA8 zXL)qAU8X5vXIt2eODEk5ACHv&Q2+CUZ;hRgmx20&_%2ub)m7%Fu8_m4!ScOhQi_iC zz#I$K{wISKIocKse-(}3@!!t=8vlMG5&7%spgB5_^Gv@faq&PU0B_dHSlR25sKDF5 zy^DnrwC62v=me329@Rb|UDTv{l|(`Jy>s0Z|Ei%Bzh->`LJ>aRvR6}pD%c6fWBUVo z#a(7wc<}>?u5$b`5yz)gbOY##75K?4Ut5z3NFm5{l7hu$-Dw7^4@70ufX0iyAM>cd z*?bz0qy>!iwUe}W`@+7AI;`HqvVMJ4Rf(3y&+vf8@NY;=PPQfKseCY)g6u}E)p6d6Wqu6F!RY{|>xx5wRx zMI3de)((xa)50VBcGfl_$B=E>v0GA=omqzl^i7#`B7H{Z2-8=$?UXSI z+n(bQyH9Uqa?Il(iL$gCB;DOQo8EYQKZtS!b6;(z3Cv+sQI#vv4eQJRU=bi3jN%;p zJWdltRU(#JX5f+?sQs)*x-8xDM>j?{1RqmnQfP97%Ev?+-54oE5&o6RO5kDK`Bpm2 zFxB8)qBhsH+9oviM^aPadsO>M(8tW@N$19c{(Lfaz+A3Qt(=63O6=O#C8F#p9|ix% z*u#p`u(0wFBD0G;7sZ|a;~Ej3OEYJ=z{{tBjrGpC*QKRB<1tU8ggx?k99PiQkbZ#V zdYV_$fD@RN+gy>+*IEJPbY(k`BH-S*VPJP`faP>FZaz$GWf?l(`142$?K7h#^_^$L zsXD{~L)FHwwFbc<)3|BDG9WKzN8i-~n~{wi87Xh$_NfPN@LY=Zm~pn5-eR8jjmpi= zMOtXU{#s+>nV=uLEem6Qi4|a7S(Xu{BN<|4?z=uvoPo&dE1o`{!9FmOTbH<0oKw$& zW{qZsMPEDP!7#Hi#Tt)-)?i~^Pd`hHdypC&z^z&HVn)GW)Z z{&y?IFH@c9;$UX;{zGP!;;n+x%;9R08_s12T1~BkP0eH5sEvaI+fWt_1tb^;X=+b5pYyfx_-xf3;{@db;;-dpdYWj-H;h=W-Ha zUx`l`DtWKHA<}PKkYWGQcVFI+hEBV<+k6y9Z>*}eymmhVgR~6xBoxKbe1TG%>WR2| zJ96KRoT*Qf`Y4}Ek3y-F!!Z?n6nsnD6Qqs$IjBkQ9HPGXjibt_l{w|C;C;QvL{OCI zhV~Zk0XH*k4cLZ4z&IqVPR|dpgaD`^UnF~?M#XwGSmZA411U#11nntO8$9O!{)wwA z6iJV`zbY}{NW9-zRw0kTcgN~-PZLOsm@3qmsg*|JVm&vO`HBz&bb`@@%pe+mMK}1n z^r+b4EAeXt+oe-_*bz0Yo!t7oawNb8{P&( z7SD*OEkCmlEs4rEuF-HJxT+>sx;h&$BwodMPP6{fkZn09E)6SBOA@bbFb*xDWi#>)o#=^wmtEJZQAJ6^}XHPM5TGFMJAJT zw-qiRoG|k~lWl|;__Lbf6nylPaY|c%lobM~k$rbzOUn0WtjUkxK@H=-mn&=bx4stJ zjmyrx;6->yGhP-rgDYQ6+KJhl2ohsHu`TDdf3FU$*)x}z|5G*%bu)uXaN8gwM2qdp zoX*BTnOm;-XrF{AS$0C52B?dy-W#z1a1pFv!!3@%NS%`Xx&A=P*0Sg+cz~IHywv|T zX8`d;^ZIbOWU!o|Mq+=jPR3=n*yM`Sg<9Cqf*MHxoj-~40{`~V==ae8L=&Q)_KW(N zjFo|-k}PtfyLpw=J7qc>3?^v4OLU}p@3yLwD~1O@Vup3AQQ9?$e=>`Gw6U$&(<>9H zm9sY3csCL!iGoOg5{SK6i$3YfBqG8@Ntt#(G0u+ywbUDXv9~ywSgF%lcRP63F9Z0m zU0YBubj>Z(JtOW~iy22=Sk=`C?#`<7gr~jc>oX^8cQW<) zyx?EhT#4|0{*m!W*Un3bp;6{kH~DLZPP*{ML+^5)A^?f%*N~LX>51>W4swnemgaoX zC>e&YFaDIX5kRDPLAPSR0tJcJz7IOikPs6k2g}LPdqhNk)-jd28KB+uNTrF6!)<0P zDAfeHMIBZY4t+4~3)+RJ7$ds^DTVbIfQI03(v(F@s&%@B@$rY}4Q2>-Bk=j*#cWjU zTxv)t*MUUncJ)JxM7AF1i9y#lG#rIX9u!1nPFD6NCX2Md7VfO_;|&@=?br2_kFrG_ z);;WjO0yvQzt~f1#@LG9IKzPs+E~W2t&`|6er^3CR-WAhh1wAmqo_U#YO>6Bdl5bH zvw0q6vBz{Yi$E`&jj03d44B+F_rSZSWogEjYsHb=++y817E=2X3^bZ)-k`0garM=o zxba4{!6zHHZ%^(N`M6UC{EU6B8-ZN=#3Iy~?QTAR;Q|ET_wlWj<%Pq_{0K+2(RZ3k z9Tt=Cdk`?O@!(ig`f-y=fRkm%rSaQyZ0N+N=S||(BxxE3X*n7GuCB@L^7Dr_UI%C^ z-JKNQhWQ#+b~4Ww%l!^F3>!UXf+jzjEJ+B66Di%5^mrsx zzoS5J^`lxt{rGuruM&VTgd+2xa-${4TnB-Vui$e9yg6?{1U+LjW-=OhX5liVZL;3y zcLYBeQ46rGac^OV!%L>y)`vFriY&M$Tk@+&N?n&^Sg66IElzD1SM{0|G=i!rI&Q?4=DqWjVrLnEt z<;6syQH1PHZ1adwJ%_Hb5gl)C+xfdy8Y|la4<7C!+BsArQi^@D&vh9B#N=8sdQy^j zVj%idpZ4+$;eXX=H=5G2R=r`fCNqqvv~#3X-0P1O>x8?12W6qA>~vwmtVj_+bNi9k z?o^eM3$)YEFhnN@U?8eZv5y;1@TW}PuZlXVyCxRxXsg)B_@*D-5#SO(`5kd zC{ZvSkdLO)T|`R0eCYvztCH;9s(Gt&stggKe4}@@`Ue8~jio6(lGW?j#s$^Ws%Lm4 zx{DF<$^n`Fy8pIgz0lJl`cF%RzW*D!SG{9bjS#qT`J{YR@!f8Jig!{o__D?XdhH94 zO72E~Pv8$oZUTM>G13;(IVSXQq{4;Ef3z`q9u+(45U%BRYd6u^^F3B`aO%alx~qL{ znnxbs@rPaeR@m%r$?YaTh=MO>M^?Mru>5wZ>?$36TbPo;djk+PydIG7LYhUGgxkH{ zy=E0D_&K~1%8e51KdUY!Xa4CO+186aOgw zoJzXkj@x5o4?Ua#s0gmpsuPDNyu+#{emw4-q=rs(uBn-U<5(-sR~M-ApF)wuaVx2m z+%4q@sc;O#)~l#ksgZOyv+W;7a)f1S>=BsX80(sP?8qUnq}b*(gJX@g_VP+it`pAt z|Bnkm*~ZwRrTTrp7hxhKtCf)og8N&|26Fw;U!0vhy{p7sw1G<8U7|4_%x4Q%@#{5Q zhsN57fq%4JA*r@3m-LZ?Kg6nNXr9O!yCC+BT=GqLZ)udtaTKUNTJgLGa_}IFvpBZl zrdh#Xx3k1`;ugycRU7bw^3N=ZVd3 zas)X1WsKA2#WOou=?MjE)$v3&!j*~&CTY#Q@}}Lp9b2Hx0R_AW8y4MWt{h-Bm_LA^ zb|MwrCcKjy7$lT;o2$jIt#n5Kp$vDp+X{aqhC&1XYo$7P#`C9>ihRHG&w0=*j0l^V za`x21rOU2l(EH~*^hT0Y9_%|J1CgVn2qvS%pN?x5+H{BY?yk%rkIE@ds;Og7oA92& zcf<|NAFQEZ)(dMr3LcA33MNp}oXwKn?ycbe?gd_%@P|yrwms8+UQXBnvW)C<2aEOm zP|VQq(TE3NxRAM!_bfNacvslAn<-AmIqzVx{C$}|zIp1KP4Cw;R^(_6>aK3mSJ#b5 zVBdUiHtrrhgp69JRtm?*XTL?$dg-O}ySG6^n9ETnw>JQRB;i`%R;H}qf4V?`pLf7D z&4pXPz->9hd1k6inzdiiZC(96u?4gISfsX3D6#DAhobYIc%Af2`DXF$*vLf&Uk9Zk zPedvg$334YG8ZbfkK;}Cjp8<_I4wgpmBNL_C&dmJ5`%U3{tlAoscz*G*$k=E*{yg= z=}I*SS`jYJ^=`pxs*9H=7PKvRe3Fn*ne9Ji(wFulBI{eyJJbwyw9b7$3T}39@&Qml z4eM*MIe|6!VHka6S6j0OduG0oW^~ZU9}&wBx^yF?w?wb@oAzyH!bVtl17)Ph^J~#H|~wPQt@OmIeQL$!54iv7t+0mH;0vDD$isJX(LK{cx&%Uq5ZX$SLV|IPH|V6nPwTx?#v6`nPXx$?^&k)er0?C9BGo*N~a zE{u%c3Z7}3Yd=UMmYLwBOm}~({Zzy7bj0+b-^{^AZ4)WeK;jvG`--_x=D{ zx5-IaN$j#;L}~nxg2$ifkLQJYSwk7itbnG%FLl&HGTSnc=273!6i(4>P_GpQkfH;I z$IxNlvs98GI)&xU?~|=RJ(dcyTLqe%{0?JGH>ySxzhH)YFJD*y%vL4Dit9?HW3Kcb3@4Knq%6@F+QK0tI)O(6Gir7CX6*LIk~p^ zdM21TGrJ(C>~G9B-;UI;=!t5#?3Q2;MNrRk)mnf7LBEV6N#m++qltF}=aG_?J5XpS z(}BHFO-pEDP~3`$=0(t12)TaU-V{g}4xE?Vl~)g}dBku$)*wWbUA%d0>{_C1DbLeV zJ<1=Y3{&&#qXgNEb;ryaFOX-_^(~grN0)==Ixnaow#l(v6Ek`#D|byUEzJoTCf1gf z-^y~0l#P^qlbuRlSG)z29uDT0n}^Ip8_UEwcqDrgAH?_D21TCUR9lW5F$hMy60$Se zQWM*yJ^kP-I0x(t=o#D;`u1%lW9k@Sb#Y}tsPCZfEbsgkfiH13tjj{GeWJ0(H_S(Q z(^=CR0j7RY=UaZLW9p<`th7i9O)|fl3g%I|F!Xz#YYr^z{m?3=^Wn2jBF*KuYI9?L zj_(=Sp;V`h-T~OJrxKL7JmyE&LhPyH6tRb6^H;%5Bk5}Cjdp7(0Lw&_gvk)%(#UW@ zdQ4HG%bV_F)GHcx{bcV2Dr!DNYJ@-KggSjejXZ_?Sg=Ilj$-tB#-T*>M+%dmgcREh zuUdiFYf6WGl@&w!ya&vRrgGmP_;z-#ik7?UYbY%buV~dVV3j(|h?w21Yr}EOzqkof zRECt?>lt{a)V6ItPy~H)_`|QUv8Cn7{_E~KGpw$dnZ-`_edW#bYuGJf>(9PPI?cr` z)c=ZX{d$piH2C&f?w0ChYWUUPj0|E6CF=-}QIu3LMFzKG@irdC)*k}z8Q>=fvopZ# zH@_AI4iN9}p5d!gK+XF3O{w?^sBmyd?`hc2*)|qbj{*-NZX}mQ@$*iO|DJi{-m{M@ zPX%+D@sTnyahx-_8A-S=+t)=#znf4a@ucnH*O#)~nTyp_TS9OLVkp2io;!mcyPkWP zJ;MCr2oQ3f9?Nd@t#ML*VC`|W=_PI+ZE9|CTKcLam{A`s+LDWQ3R*=ec58+c#;N zZx7|aSO4!h1I~hV=GJ;a;TSM>3l^fKEg2@b_wWCjM)8jUIG7m!J}VY>eZz61mk~~- zpMIp|YS+kvVMqU?S!Nm9T)gHzm*iacP%M~vedEWYge=GGzxouIU(Q4nmFO_BhQLee;t z5mn(x5v;EC95fLxfZ8~1Xoz`$_E)QErBwrAYH-)YCFaxXG+VdCEo{7r z&raA9gQLJl{o=UE+gyr(pn1Mhfu=$S(8G>X||R7bq*RxnJ(`6 zhz7lrqPhDk%ue~X51ByQB2>h>CxV5|@Q0mFKwCukWUyv-DWd^_Ev< z#pbUb8|If|Hb5guH&Pr68wqb=P_mXo9?&5BJX7VizJy7tAoO6qcKiU7-}K5X7*`5e zsXi-44waHU;Ut<}sjWx6Ph>d%;WfWO5BKBun;Ftii^aW5$VH8>bYM49v~`e$cxVn= znwFZRU$RZP2vAfMl&p@kr#>?0Qcf~LVJ90 zEH6=#xB!)e?P!;WX1ed&sGvTr{C0_rclDo?^;Tl=NPLAXd(Mqu^(e&)i9df1)5!0a z891r)BO_VctLGE3NdniuQ#L`VNI%_7n!K)Ydk;9Q)wH0O9SirO%9*UKsT|=|QVhPH z9LTa^aW@Nq*1riv)}a^xz3QV=V{y$j_B87d(b z`d(bOV{GRCVyc?@o(3m%8m93A5HmB-g(WDrW02;*km9eWvd;Nz9OG+=9n#)i9HBdN z`oB{!h7UaP-3S+Y-~%jOrL+NB|Lye;g1?4qTs!AAte6GUf8p9J5S!ym!Km06h2i=@ z=RFGP)UfdeBDZ|PTPNfA4$|07e1xWD*MsG5Xw(|V*5vm0Ty(lqYLJTCe<$C&-VVH+ z=uhTb;S0nN_yCppayQ;CL`r)_!JbEB@w+D?dzQtN1J1UQw`8djfLCwI<$lJ-MVAme zF4F&2r^q?c-U+mvE^WE1B{4z5RD1JRo!@Qdz7ouWv-sA*;Dg@#i+bUxFL-3Z!?oA> zY5ADZ1utX?p||P*e=GJ)^hCDSZT|24XGwe3I1-5c-}x88$@TRgMX{FF1#2#Z4IN#! z-Oi4-FSbdG9N#kDp0V~_))}P}12p{`fjDvM^Hn)H#=f928cmvg-DOU0KUz=1|1PAv z8|_8l=lrIqH$?~^>b zOC7%Oc7V(<#zyr5c6Djl4urTf^+Qd`{o_C9XxV{WC}6muAi*$y_AKCch$g*ZHe>)z^s z8$xFbHmyIoI(5|aol6<*O91W14k_A9m40Vy>o@^y_`dBA)Vu6)GXIxB3GV5d1K2XK z*oOE{0f6zlAhW~8-**3dc6Ytd5D4d4yb>IWZBy4TDioB~Se}!b3I1Pj{QDX@ZrMPpc44soyI2c|M2zQ@l=O@`xzOLkqVKKE!o*ylB^^ldnF;+``CL% z_AE)Vx9oYWLiXMx#~#PQad_@i>id13-|O}J8^`B-?)$y3>w5nV8@!u<u*M*D#D%^_=iu`S}rxa|o@p#roQF)d*EDHV647obSk);mnk+>Q8Ez57Ao4 z58Dpy14P*pf!Mt|8`n$PZSMj+#EwQ!8~PwfT)~-o{-a+xUcI_A?1a5+SkTiYJ^~Ei z?HN!%_Z}4^8jt}KgItK>Y3J=!ep|o~%T=w7ww^JiT^$NDY7HWevyBo*z@n#2X(l1W zMjaId)`z=X=PZ0UDBfE%DM|LH0-bi#Lo=U9>8#RXFXtQ<&bMFWK(H3?i&DtIx+&MP zslQmS|dDLh(LI+p+(W{CDdCA@RJ}d@-aV_iq}7g-(-LmRVhGu<_R2QT>Q~!a$SXF2BF=w_~Sz zh#PPnZ4<8;6Zw99?n?NE04f1SdG4|2=~;oK$hN*!;p^ZU2NET{CRFRtM_O zn}V%D7f;O};RE=Uzz;%xIy4p^538WNH+4TASdtXSfeh0yi6UReK zH}VYr<%UbGe{bLwa#{iIWvaydnf#fHN6sYY2IM}TE^gJcH{h96>-#e}q5{?bL_rty zBc;F3TB;|d!y(QQ5YSG!I0Pv!BXs6MN|#Rze@a_g_p)_eF~fsqqoPkj5A3z*15eiX z(*2J^XK#}N2k9r}t%V$^ZJrREr93fD=NqR>u`-04!Obqdz9ZU~{bmpcghkbemS>yC z248%C3LF?Zzq)vF!6)2Cs6N=l#XBX$S_6&>tDf;&Hy+8_+a829S!G_s%8n$OeHx8+N(FqOQOms!;=5kDSHvZ4k z5mOa+-!9IVD3G`aXqn1rJ5DrBWbqQj^oOSiz^Qt|=6_!NG4+34xz?iAqJY557f17o z0cV2M0FXXU9#bJhm)S%)B~N!p4Hql>e9bJ=@tM<{+{kyE;rjqX%a>(dCW`(>gjhFB zGIQ${7^F-yM3rZXMJ`fM;O*fQ+-TTy_$9SnU=yVc&%lMETdAo4BK~&`%djxWBah(EE#%v>Czk|8;@?6Q$l26%<5i)&Kk3Od7&+wFW!r zPw;oRSR3K~}i$!&$3Xm}fa??+Ee+73Ea;7B=Y;CQRsfrP zF|eZO;yoO&|Fzyk-j?f6FWv$A7B4mZ=K|vCffqCBg#nh$o(EFE- z(nO-k=HD1xANkjChu2Zvd*?RN*D;JiiR!y-IXXTg6Ip+`H7+6o{2M9#KW_}L)k^>S zgmd8SiyQLg8W!3lz^N*+8HKX_GieGOJHt#iCX*PW^wVjO7i8w!Nn6-b{q;k1T>pLN z-1X}w|LY^M(BT7AGGj$p$oPj9LiX6f=txe%=VZkVKPB+(5UhXWent53I$_?h@i1%@ z=1juf|2wqhdtH?|FXg?}`}^KYZKIKGzaNi{MM?Uv9izVu5!wU44|GugB;jB6a>@7d z3;tE3;KTk}>xdxk2b&j^S66?(=uGF|2?r=&!&s;Y@;9k*&`is@;l4(~O4MmlWmL2Y zZS!zez(@{oT|T@Q&qUa0HaEJ!O?`18q{jbUvCu2(&;MPM|8vEP4p1N7a!V0XZ*(ywY;d>&R&`cO#Swa zK8ODt8Ihkn)zpM!wKkPD)!*kE{_l|Q`2p5oxJw1S@Wph*=wnM@)C4Y}I30KWFk&8h z;Y45{QA0a2inH~W#%vRZ4S$uXM57pECN=Wecm8=iKxIkosuTwPpe=jnW zu~qCCbSd3z-n|4pB)*G#MS)FN{!>b|TWxO!6h!~u!?}3kChq>fwti^Te3DZU^3P?T z-MjEc?^@@6;t;1u{reN(jQ*4LXjSZX|MRleZD>P}Sz>39(lU5$Vo)kZ$@#Zv_V`4-Te1qPpB^}*=3UQtbpk6Z*xD9_-o3b0<44l%N_pDMPT(JH6u{Z`xEcbhJGDH zjK3MNTHSQPw$|;7V%^&)Qv~g6crhP1Zd!YG!AAZ)w_lLY@0J0Ni&oig`^41658N>R zTCW|2*hw0)zVYn37-DN=E}(!Gx5(qrYzF}MlSnO^Md0gI2}M1gNH=6k<8xk?gRK0KD6>+Y_LUpIPni36JlBr_DMoN}t3`atT8VOz8)j!2u=R+R|iB@Ukz!-EWPaA;NQ&z^r#d84yy zXz<>v>#MwPnYkWCv4Y#)Qkn0fitxSPSTG}bTC#A-jU7Yao<%l$_u2S*i8*WB-V_5$ zglfKC?U6n2d*dppuK)3^^P1znjBN*HN1WQ{FLh(~RJ4C{ z3bwzt*kFO#7T@SW8$-{Z#I(*QAd=i7Etwsr@(6~f*?464wWfaWbBe6>q^jfKx|xwW zw`C*y-q~l>^TaEH_4-BD-_LtRw+Du!#tGk;0D$wSA2;?BrUvbogYRacZr*FGRBPB< zg`$Idu@D{7Y(zB+nL8XY9C2aC*PGG)#hPBKxboe)^@x-lY^Y(gNWyg#*5M0UMI`7} zdUK1}UEXaz1Q`wYs{~YbHI-}BuMkgTUpF$j~xS;;24jjYCV#RXmM&-sDIN-Jh7sdumKNBgq`6Y=Vs z;$0`6s4|OJ2%AkG*ZP~QD_P|BV@qMj+61Rg%zYO&;wrjpqBD6r>f19YYJL28BC9sTZ^ z{b*)Gr`25hZ))+*_mb_fua1mNObQ8}^Gr7KmDRZ*bC~qbmca<7+OFbXEI{Tn4KeCX zM+B_H&qP&%N$B89mSR%5rp?s*^&wnZT3ySBQ5wUtvAba7O!}qyx3<6+_(tg{u{U8Y z!^jPYKBs$0n{T*p7fHqqWF)t}31(2Jr1G+(~5}{pwM0EggIK-m{H#w8i|{1V&WiTu~5+RnM1ioqrn6_ z_=HEx%zY)q9Sqy(bt1Azb>A%O>#sU}?s&VL{!E%dsyJE%$SpMkuY;YSYp?gVH=xX~HBy3^q7u0!YrVY) zZG34o^3ZA1Q?=kKH2n5toEL-Cv%C2pDTGfGO=@9NcqGFkuJOC27YTel8#uMF1P7y0 z+SQ#qO&-DT#sJQY7~LZYnzEk^#q|U9-pi}HZ-4fS)dKbt4(qFr6Q3VzN7zpF3683p zFAI80Ge_^*er*eC$&!gP3;inZK9gS3KG8DK0?w7<`oBmLfgKE*S-4;((9nMlR3xa_ zEU#Xn>0t$Wk0;Kj4|8HGGdAnDA@oUJ=eCPay;Mc0Dj~+6rSzVq;1{ZB6L@+NGSukS zt9URdBBS6klBHs|RQ^V+9~V85HDti%c1}@VDe{(p2ioKUdY&`Fw7wRz-L189U1*JG zDUb+5c+`q$Mg=K}@j6nY^?{7_R@s6)V~bS9>s=MUNTxdPW;X*p19Hopz=O!ZWe+Wt zuYwmTExz9bT2+J@TTIecNn00pa&L7T>-`Ukz4m(ZMh(8|V|e$wmnuRG9FM)n07;D@ zVvN4A?s&K=#F_|#P778Kf&|==i1m_R@Jujz?0PUfZfW3g1FZls_lryg*77-Oa4n%X zY=sa36D20)(=irMRRUX)Y zTv_rB!Oi`ZEVMoD3xEzpN!?iGHlb*JAcl&%xuol~C@nUa?%YHpp)mT~3aH}^*4+br z4li8frw-pr`PWF~+IrEi>avYob4KA&Vz*eGN() zLCVYH0})#~EUFTDdEyA_dS}B!y`OM1E!cDo&!6BzT6T;XBCWEO)e#;7m$AY!M&h)U z1`IE%ir@1mcxz{QWo3tMu@&IY8hlFan+K4Ab*VkOE0MUgZ-$KljdWfhzeY91_tTk3 z-@xa;jRAm72Ho0P!=Yb4KYX)8=LyMzGn|gPc`u&(6${x7rGF@uGXCy+1F;3cjU;Gq zw;RI@)B{1-@?x8CnwjJv5EP(YU}KiH$f+LEW4veotO)95TxSKwstly*+Z7#NtRyq zw!wa*D~AwO1hBdjFef-vIW0EAwykRYO{}~-@tH|K3pjO z`cwON6^k4QA{-oMMIzx#N1E|Oxc~TwiXjMsDKap7OEE}$AgV`{YHab z{5lY?tH7uK+&dw36vvj&3DR;rvblw19UDPi#yN0uKYe>a6rE9X>)ypN`?Vs8%Dz7a z3ML1t=l2hj{v2rhMIXv@8ao&yVpo2|iEfpvd+Ww!Lk8<~g7Tf_HRcCx#!gjYCC}5$ zXCPe9xX{c~*R!u#N|1()n(4*xil~Yxkf8SW{ikKR9&76fCM1ExI{-vH1N8yLZ7pg6 z`b+v4&G#wtjx#_$X*Gfnm$7jmF)flkC?i?qz3`z6vd|d0$QO+uFyAggfPc zqe9RzxxE?v*@G5TWZWK0ogdD^evVdVoLB7Cc%mzu+%isz$AWLdcf3*@PAG5tDnA=9 zhXQ_f~tN-Z}ifcaqCNbu{A+4Hk)y;2IhalbxmZdZ=xLY}V@o36FUKwXpB zG7p9I&H32FJNu_++vjlmokK3wtElr1NeKSlnRUWy>-kxR7a^0%L&#BIA8sjqIW+d6 zyCV@hngR1lM(ebRJ%z;0N`_TYtDWFLAL+oyNO~<&e9g4=!4)OYRM)4QqnO&Pnw8*R z`JN=$c>f5Tp$FA-9?6R{j09(R-<54E>3z1=B~v!@c<0?O%QjZkmI8BSZLx>bBBm7; zHVtI#gMeZ)C7erdE#VrqJ2f0c@LMEJAI7R4?=e}sNfY$fEcK!2vU|al9Rku*__u1X zH<`5n;De*EZHIB#m#+P(rCZ>v+)~86KmTeG{Qi=TElHidP z)`@Oan|Mp_rWkly?z@JfvIG#S8JDDyH<|7}S`6o1$gepQ+O2}|cLy76<>=b|aEx1Z zM~C|@hKK&9u7Wq)0!TiOxks|sRyG8Oas99XliLL$z*qDmK0CBGZTPsiE(rh)*evx! z(($|NorTI<-^2dY!S86w>?Dk>^o}?71E9loE+yLo6*}4iX7&0&cJxtDg8r-3)fpr= zV}{)|J+7tcy)j9l{JeY1wc z=W_`yc#C2)2yJmkddY5()yc-os&zHOT42I#IFsgl89lG@c3!;abtd6_%1W;5S^Z=s zU^U9hBU_y~wNC2WmiudK@1NO|)So%05xBH&TBB_cAT1LFvEM%Wpwu_b<++ht=#qM8 z4NN~*IE%tWEw$vPJC=RiJh!F`(%c#x$3y2P@QZxl)d0R3Nb=K1d5p&6PfGSzzr@-LJHCU7~cH zhcZHKLhu(H8+-aAwTeJ<5{yamPMOSdfdu!e0mKZij2iJni!|W)PTzX;a3@eIW%2KB z*NS1aEoRl(pI&b8Ww;?N5qT6mE_MFwkkzM)+E3Npg1^Il6-BE zGiUKh<%s~{Qipfy{@9}*?5jhl22#4Sg0eRciGAOMx)OQzqtS`l&M)IA2M#hcCC_=a z8V0CfqKTiyZmc^-YcBPK)OdNUAnR37UeX99ogPssChb9`zx~6J~UDx z6OwA>-|Jr)w;8k2uyHi-DQP*a6pw^i-8><;r|F?Srhie-?kFLV=ow$({;yxUx*m5I z?HfrS%jz9Gmd|+mwD4@DBjqqzJdAxcq!jLM){#(|{?)Ar?Ug5~88Q9uA`(#uVs44t zuRre1oUXqscVy`po({Z9An*ps;hX||a`Dsm&)!vXXwS%2ns09aNEkjE>^`;pBj)8# zXSA$T!Wn%0-nM44jS6JUq_4haz`--)E%LS#-rG-$lKVwD26oz3XMa5OIzKRIxjutW z;%+{dn%!dH6X-6L(D9v!X}NbIB{q4qMY!3KDHAChW|;nskkA1p9&^JKUav0kwED9k z!8&U0-kkQhM&^7=uSSkZY)z;LtSfstXzZ!g*ondpdg`jPRWF(7+z}J0ca7-5uJLwb zo*wdeq_D!q<$1ia_P{N1cF)akHYtnU*8;RRksr~lm?OAS62B*&6Lz`eVdB^&Uo4fo zF3V-6(?&N$^feLwYH$OG@BI^B9~sbPKpIMB-V;@3As`dBxg?aa6G4Jiv(FG2LCm{Ip+#;tG+$E;v;Z1aG z*GRe=c3;*`Pz_yE8v^;%v^q<;?cC9>YzyuTTe)*g`c*0ku~N?{G00O^mBc1(825Iq z<4}EkRgR#|8ug^e>!MeeX&ggyT6%1%c??@0g$0>QjOd9P26x(!T;ndJ1=yn}xA!?c zv8Ha&k46)P{Rru}J*y^CBX&g3!tK4u*O&4xc}%+Q)*Ao>6!1Jz{mOgYUiMb#7 z{1qmC$K`~s#+MwFpn-VXh?AZ3_|*4qQDk^uluqpklv(nOeSb5@PyRCOVGl#!D+CZb zgW*+M_`i^R<8K0kY)IqELsjc(-|ie;vXR|}AWTd}Yg{VYA3d8{whxcj6TA5kkyHx% z3@X0ovXX3y8gkxEiq}kWLwZ23Oox&aIFKd+>}T4X@1-nCKBe8^nGX(uAspjE>TFQ+ z3B5S$yE*AM=WLbYe@;8EfStWg?;DbhACI(l#r9okzf3RHkl=8Bbl1jzLBWp&hAc1Z zi%27r2aVBU(gd@Hc&eG9zBs{Yv1gp7X@D1!pZ=?@mbEXo+p1Ah(n;sG&TT533BNxD zhqj-Rw^X2MdMvbAMW3$imA`XncZ$%KA*xNJJIX-c#L7QC@<+<22E8DCIld>a`7nHy z8DLz`iKdK#=6158)=2J@UVFiFC}uL@`mU68GeiR46$aoqkF9_pxMGXa%xupcsYIpQ z5==L~zv6XF8jCie#<5k}cBcs?)R*t8MUgvzbQY zCu*{ZFdq!>KNvr$2ikbn!$Y26B;s|p1?c+j@+|2*-^vVH^l>~>QNq;vhD#d>>iQ49WScMaa%1d6Wu`KyEoeN|rd@tj9DuF}+OJ4T9ue74_V5@- zOs>i!{K=vjQ->-V4Farv@9Nx!FAdx=RSxH?{AmJpi0F8e&d8{`ftXK(qqbX#d}mRI zV0F8mm>Q8@PbpjN$%>Awt6|0fm*s?|0}1D>KRTDD&v|1p=(w#R?H!#nLvw%4|3i&5 zt{7;UzC(Tk)riM0y@U=Chr0SP^0yS5CM=uqRM&l3#|_wvK#euea`^LiDA2eCKpnwn z5_lRL!o`)NFkE-MjqbNkIC~=PGt_&NzfSCvk|Xcrf1u;*w8`4)p}@*opebLqi@4we zwea!2jD1Sv=3=SP%Bw7z_$X^9tnlo|Ba+J=Lz#E?%Ug*=9fC1Fh0qJn2rY@KAt>B( zb|I18PMvKbxr>f#U};_{L-}W(c!u+2Um$n2+#)sJo)^HOqFbN9lwWhi9Xc}5CYtV^ z^R>9J2C?5~fsvyku5+*KIq?>yme^{`_}3t*5XT0v33%s{iY~P+{StOKJ*w{Ww-r_{ zfsMt5_(o~Qrn&nO-XG@$!lbhe0<}XC2liY8A)0s(@YHN+OijN{iHB+@9zZ50fZ9~B z$eyzHlS{?T>)ol$re&|^OK*Ux_O#e{`Lq4gTXn<)T6va;e9p@uihV7okEcO1P9e~B z4^acCY#%!%n(8in%VSR+rq6qa01bQfS9~eEckWrh08$EX`09*fg7whQ;&B_H~qNrRu|du`S1X+;9^bG$#; zv?lh?ehLmXkm#_uoIYO;F-Z7r(hL}wcd%;w^Wop|^AsY9bWsL&oA4yFQgqLJGD@f? zvTwO8w3q|aziVhR0D4>bGba^Qslg|DDW$Yw>&&Jjf3i3UvIcNitZ$BAb2tE6w>Og%b?Ok=02_RpBxFyb?)`o zM-D(WCf*CPs_H2$5-z-^0*n9~$n552%r>A{=&+m=+p$-!I$@L8ff89r_LNiksu;S6 z9%~VPi8<`8fVU45++>Dkyl*(Ht?cWXv7S+%oKW#@qLHo4Af>D6khscnn19=GXlTY1 zh~K`g^uf5VzsQmXdH9MW+QhH6Lz@M9sD{dnM4`S~k?AI#!ry8D`&>8(&3C%lIsTMu z7zYzu#h8iyRtl}=NIAXbmEb`ldw&Yu98^O%0>&sc7fvn?{HE)@+n%;`CU0z}dw_@m4?C)ThA?~J7|t(Tv+ z?0x}^N8Ax6i~%iC+kMsNO1qrdWAn6g*WUvF<_kC6+iqGrEhAATgM)8V5-!^PgcrW#ka*@z9p;{#0_mY}?1KS{whh6#zd6u}G zlM^9mu~2-sHmHc)`IO%v>TjmRMn8cD~CwFJZ;Jg z2%98cXC+%yefRBM>0HJ4zACSXJ4TII9gcC7+veJl1S@USY(a}^6RI7Jfv^13(hd5w z3x!GVgk;{#_Ws!^$!o2`v%haS3XdFpKKpz&(8mb?vC#;aVRT2(y_7kA|HXuRUE#wn zu~LJ*88B7)o_5n!WP3qz__&g@KJ;bgkN`M%n!UofT$2Nvs0QkySZz>O>2A7gT89lE z-W8PysW09B6YQ9!9wpUWu{uimWGE4G=|kGh&YB15mqO`VLCxs^znU6r+D@y#isGRV z&t+V(T#pxO-OP90nJqF&?-YG0w}t@3xuPfm-73(M;+ZVM#%tW<$q%;c_OtrrS_p5f zT0bn%E4RI&Yl0oS#Q4Bc)go0|cOpIc&|0r=Dcy>Tgbt1L{~#Pw>AGCT#n)G+4b$Yy zjIwiyWzs*_v-VVD0ZQZx+2bsZC&yv6p!a};mR28@&bsB*qoWl$Cbr2W*1CS@GT{N} zeTAp$e4Uvs8W3oXz_1h7l@ot=6Pc-y(=ed2M{9Q}Qa}%aKPlx+M;oKW2Sj@!cgr(I zKUu1<#F#Z8LW)^VKDmUR>XTy_FIK9`x;K?>2tne_auqu!!#qE*V?Ma;Mr&Pv8RO3O zS*?|%O7i^D!;q3s?x`|*Zqs$&XXnR+drRDsOfokZ{M@)k$9^MENa?`F0j$>JP(ddg zX|dzS^Xz?6A1MQnejHFOitBbY7%2e590xT#L!QCU7NL$}(L47#UN3lZb*qc{N$Z~7 z-+uZjVDwhxrDQOsl+W!UeG8$Px*rHpOFuewxG%d0`dzm}W0lhwBE>o9D3}R7g{?0! zym7V*3=8WbDQZ4d#FB&!p_p5>HFdK`{4#JgnVCfs^y7^5991dD5~Eu1WJF|`^{q)r znwYN0rPqqkhu;}uG`bybIMzvO3q7X*B~O zrGWXhRh6*oZbB%=$PEyxxG*qfF*Q{r!$orC_&T#W0f|&jXxZ3=sr#KLny&wP7H+r#k-bzNkG+ClFr zAY6RQQ}Pp6@vnt3eyHBb6>A_OmkvW(y|CPE)pd5vy~o?th|~+r8?kw|I5bdV-hLzb zUssltj+vTNf~{LJEtmbf#=X369$eZtXf%cNI#Dz?3dif1_;LEHvSwCYZ=2Nsgs1GW zv62b3DMY@~geHFG;Z$`(xl0E@uKQ?!wg83=kO2RM{Gx2O(#hI>87lu>V}DC);26zr zz%2gi`Z_b;<#otwDrF2To{5BjL(qBd_(EbwxF?uS6D=y>b-dc?k~L7a+TLN22Ygbi zR4p1AD9$F|g_OP{WtiI0rTT^jAv>~^I@Gkg?_y+(qH%;R%y&?y2;r8#y9PFl-ltwG zfyirmOW;j6|Kc&J*$d>LyBax7@#Ifz1i?qU(?-$xs_Tt!fw3avy4mU4?yren^k24n znwMuFIaR&Mr*ZDRak)9bQ3z-8*HFJs^#T6)m;J>BATeutsxg%y=S^qBtS;X(q+uir zBVEKJxts1Pu|(|$e>RltTQbn$LCvGz$_x$4dKk48ip4;1Tv+)g7dX-mF||ra5%`el zs(G|xY!p(OPRbkWkh7oQ$jo`vRrTsCtOlI>#1qx9iCA07yk7ZR<|GNEbfE=$w&4rw zCtnj0jAx!L0j;fQEJ1R@va|M91zc_#5EHOd`3y*o`@BKh+~Hx7x^m}IWr>x93(0e|q~SH`J`wGdFk+>?Uvrkq-!ZYwLOq({sJbjMiK9PWGuX->V;wmvjYB zBWH7dA*)AlyrX_t3j!N1qq?%5}q7(Sc4I${3}3Wg}?a7z!iKtQ5+@o3%q zn=#~dKl8Lj-qKwNZy|-1n+&0$<5Hq8Ca*TQjG3ux@r|uK;@)(?4lnz-_ba_@cMS&) z=3f4Fir)~=>vx`dtEKit5vVy;JAah<5k19LK=S*HNR}T$TgT`8KNlD?1Uhs#2!v=R8 zPHq_>ZW$f$bSQ-A!0aT_N$Gw|WtdJND0Q#VX-QSrozTl0b~$|WS{VKzyIsaT=b~p# z?@u2buR73w5*Hu8@{<{M9c$D5TzmLyd?c}Qh&;uQBQr}Zu%^z>adYTe!{RSN zL^|zL`D7kG6DpR%qwQ|Xn@$o$)%u{{Su)!xw9z2aZhisMHNeI2g?xfXi0r(m$X_`j z3G;~X4>gxWMBbDMjX}BWV&xe(=4L5w3kCgl}wNpa_?LJx9RP4!OtFzCDu7>@XeCHWoDm3Hw@)qnQ3wPT`bBpluaySDOwk=dU_0^ZP{vBWPVfmz< z`-}7|BVg!UyI7HI(ML+w3J|%Mquij)a_<=~Em3R=xi$QR zQ3)pqp}b6`98@NdE_*PmhTCs5Pu$Vc7pzF_By8S0=hlC*0C=&vUMZ9ONj2YHAfU-!XrFB+B9;8<0VNa(5P67F2y=&A?2v7Roa&;WRtBIS6uLNm9D0RG-BtR#E)$ z6=94npwU$w+pRatZtvBoGKu|-#>tGcHl1IG*UF)sEGW8FDY*;vrM&X^<|n?4FyvdagyARq@K+I|z+jgr+2M#zer`gI28L z0@;p9Vo!`5xkBPvZUryS-6ugaLHrf)_^8-?RUh`x#9q4K1tVv>W_{b2{s-Mroijn&L!eEXZM#dW11>W9^bARr+ zf!O(Pfx^j&?Ct#UP0BA`wQ?7K)uG2{w_AeoX zol!vC=rfE~&Q?1+e`PfyHb-|{7q4~JtE2H{@3?s*surjVTBF|~B&)y}%XN@U9z6I^85+_*K{ zx)gFxeqQI^qKa%fSgc&%gTBa9%u{TYI{%$?qd~V|%w7GBRq<#iFu`Q?p7l%z6*;s@ z!Sh-x#W$m%oT4bmi8)*++{pVOERC0eiB~Qyn}Kt54lzPjeBj z&NFdZ&O(Xa;jk()ODnOku9Nia)K5Jx>pl7!S!~o2IRJTm`fFhiqg1qfY%bij7;TPE zBQE*O??G^>$A(#c(S~CvR4=^OZsg*TVD?;uB%H{Hf4Q%hQ2B-}<&xUyMHtqdEN8O< zcr6nM;0_Ai_x-XqiZSYv^23ix#jxgl&0LfyFZ#olKFXzo{+hi-`q7yA1C}i=Gr15BMilVEX6rh43C}japZDPc?#WUws;#_x6;I_oO&j@6oF!0QdoHC ze9(VFE{fE&I1DW8ng-?DZsQ0UCv zqR@go2={RIl-DjM0jW$d*k-USde-ImeL30oY0_F*6iXV$JgVY5f3TvC0l&2OB?1?y zCjgFq=FBQLl5*e9YGmKw7Ig=gTE;O{r1^o%bD`?ZP76n zbFV~+5EjeMui^3!JqFEAzEqa3?!t%B6*Vbcv0BLFEN0NgvPC3c?7YFjc@cVlNQNTIjn9Zv~z zuMx=dXh2SNHN|nd4{(U~}AwQ+; z_N2g8?sR4Mb3DC)Nv|m(IFj`;;o}I_Bt~{Ucl}-=EBGt;D~ey%XrK|7LgB6Jm~8-2 zwVoW7L|aAyvskA&xL(><+I1f-P5nZ{-74<5f2$0p5iC2%P!2X4Bn>4LRZF}c!2cld z6L#mTRkE&ox3;?Mnkk%fW%a|x(P?#F4QI+FBi;&$QH_AB-xR-olWEFFp}eEo0p3v{}frH1aSzAu;sb$G#93SuMn_26ZkjsE#oCc&xk5tXLx#7f6i zVg86g;yrXgX1R-j*hkcn^XVLhGp_&uRE-z@2>r`+iQwB zf=l$h3cBfH7VBZHg+n7N1RWG= z6h14otOX&E)`MumDOd-o-n;)xv`MAC4WAg&i7bpQ%J{`ow~=6v*6ljIq8r4y`Gb|3 z`1V9CsKmG5TwT6w!@MWHd4`B8!uQniH_gm${wU3E8k=aF>}%FSN~V7IPKC#HusRq! zZaMQuuGhVK0kNJJhzSdPGuqte*y}@VEj}BT6!%`kBT8qy$T3zUxEj@FhZ~&xOuZxl zIB!^pf9kUadu{pYlNfPU0-DfM=TKeC@5B5XFlMm3Q&6#iSo9>3lkiE9+#|+ttbxw> z5{XUb5KAsGvQFg?z%`Puv<8Nm&=9c9uJB*+b}pcW*7+N>)oMC1Pv-f4k5op-WE{s` z8rUgf3cm4eG;pR}Jsl~otmT+Au+&`dhtSt{5^$c{e$feyJil5Utj=LF#-M6sEUOnr zbvce!a8!Fe!G#O#z9@8wM)F7bsa>IfzP{&mm_Nlc3LAtCa`$`vrS75VNazx`KMAUL z`fB3^-V%Pke-whNDx6@_6w_V;g!g2h*IzmACww0x(5`p3i^;YA@q2{I?A<~|mY!Rb zl*)x6A-F~Tg@pcKi=yloY6`~VZPRa@q757ttDaR>U=sy*l86}Y^9!q_7^#t1YGLDh z`B^}ziJ^kgP!)*h8`HY(e7pL=VfUzD{+UkIdj;<=_UWuTjhap#FHnLg^h&(-yZ(NU zyqo$px}Oip#jF|@x8?o{y6g6)QDymljk(I}M~jrxEFfeH78y99P9H7!DMg_~>&jS+ zGMxF-lEeENgYu(I9h7Q1mELRb_iuEt6w$|h60Uzvr8%A#?JpE=GC*OZxJbAc7k{Z) zf+%w5V=!B3_!dovyF!l40Xs;9Kip+8qM0@XVlT7wWXLtUG*hLVb~1#Lj=_+Ew-h-? zNql8E*yfX3lkQkIhx$|r^p7yqu!I$j>9=U6_W=O@TE`C|t1+8-cr)Fw0)Wh;9(YHu z*9o1zLK;)t?C?~Fo&CYbzFIkLlx>UHQ3tC~Lqf4OAB#tZDqT8*=&x2@O zpJ~phr1Rb{weEQm-FdLtAlClsKe0}R4{A7=k6#yeFRzRDk%=o*J)-l0#FFm!kf#=P z*q!`&oUuw=Fq(xAsggH2>bWY@?nmLe?1nv-jdbrEqN-ZcmwF;{bZnF*8mUVf$IM71 zNmDr50Dr?8m5hl~`tVuZVO`zs2y6fb7>^kjK(pb8m~C%b10BVb7p!?VCD&8FK(c>K zqtPHsNVVNZestktOJW7qU#F2vgGqy--LgMdpT;W=SXkgZ2HXQf7dEprtPa&Da4K6z zC>tFwO`R-q_Einl64Rr4kgyf?L~>cz$j#*WUitvHj zt4>jPvdbOGBFxrcRORY(E8gObaLuUf=^;- z^8F0y3^#%?cD;=hetyf~$T7*mv;RZTWiBg}kkc6)pQH_U*9gD{Wn7gXTP}SOH|Z#G zZb0dDD7rrt+jEA>vq^&8G-uOGYtuv}red}TiYX?__m+$7c0bW7qC*eW&GkrhR+kKJ znMXGQbj2gS5}L z{v0l|Zbgf|I1O}V`T;C%RjDW51Q9NDqmkS~a_ti9Jq%yFN41JeMprX5B7I)C`RyqE z%P$#8=%$*yF$3^r_cK=rEU7zguYM~GR&yc6^cV0k>|gCp5NJyg?g-=b+~}GE5K7{) z@Fd~YP{W_7yP`O)1EN=F3>Owgu5-u{b}8hsV)zOP`S#do7OvmyHm#4-Ktx$zao@zL z;;sLPkSkW1pr+-Ryp-DIA-)S+>364&WuH~FFTxL)Agwf8I7EZ$mow~a#*#PWy5d53 zR?&))biq<|HE2l(Z9enM(WzkIOFnhn&+viYWve0TN*)jbO|rogOYUG12quMm?52S0 z>Tu+UugODQ0pPtBCb`wQ&wHJb*Rz&ORc+#eL#~gDff-OwohAIHL7^^=2^eOkLyVaj z167Rgd7%KUbR>MX%S}%s>C}UcK?01NB2&WzMOTRNe4L9Qb&HOwZZGHG6P&xdDyO3& z9>KQS_&(M%NnP1rM=W)j=kAhiqh(;-1UdDSxX#Z2*z4yF;x#_alkK+!U43S^u5}%3 zG}P@*{IOY;|AxJnuHN|}bX|5aAN6QIW~<1O=Vh#Zf6!H0nwZ?u&ne5O(gSu*d7;kZl9F`|dJ%4U4`*tGywa|JyFop;S= zw|Zb5^HH(o(MZQ3ATq_Sw`qT4lTWn`><>=>nl?YUX!$t=IJ%+|p`r|7Hg zr$=>Q{&@=F`+^+|REWOi5v#M1>%(gcg@%Nm^KMQJbV)vRByq@A3+?FvjD-j#MJi1m z2n#XEH6UxMTgslVzPGNIf(tZ!Y&=nVrlPW;-nv14VrPBd<~~M>F*~{}5kC#7?2tQS zCDVU=oUlaINwy_O=}X$^;i#{eBX$r`GvKuuRwPr3;rLyFZo@qO9Wj_X31VOhJDkqT zJIqs;D#c)RieU!>oZv)UTc0xpjY0)w(FogBwEY1+&0dymR8{FmgbjAWwKwn$Br}lg<&jll)P0{S%;1 zNi#`t^^4$zf&rgiB}{3BsQDZOJOz!Me%#?u%stxPpeYXNtkjzZ5F+#Hxi6J z@T3$l`-Fi{?Al`#Kr$I!eUPmb$@ilgk#|}^go#}f$J@yX5r1E>xEa)tIbMSn4$dvs z$e9Up8XD1&I}{5oHvqQIh~)l!EaW%}`~zo%G{FVj3SiA2WBOBZXl0f*p*M>pkSr4L z4|07|x;+$}^~Xs#ovPf#Y^!mW!29HrY_Rghl5kFU+Tz2@N4=&w^(lwilr8KJQ%jY! zwI?k0Qx5dU9lcu9oP)aKO}{6;m)}I((PEKMVU4zaJ1C9_EdIdO$^9|&YS~%O54nNW zBMEH@&~ge9by0b@ymSV#VEpX6`^|x@DVJIM%7qrv6|yc<3L-SXQo8P{z{{Gru_}@b z(dq0JytU>4Y9ab8hn1tuI25tWOh84-`cCf!L@Us@Evm1uN8|0kNiN_;^wAttvDzp) z8kc;@|Ga!-yZeopExkW3m^*&=clgy9i>L|ZmGyV)DA-lahjb6?b8tY7Hupizt@sct{{l(d--P;I4y4f=~sstb11dZ+Zb+#~ck4Bg zPjpwgg9~#+fi4Y?fIh%)4|A`fw!L5!W3^yKjYQyVc{%?8_Hn>>=2>$>lMSXB#;4w? zRL6lLhJA`*DdpVWt%=a($$$;L20#XrJ)Wns)^)_jg9N>uTc9_Ej8$){-{+i3fKqyp zX+D3%k<4=oeyd9Lo7*BY{D73Ot4n^$ixTY zHXX3>ZGKK32^Al7KxiX)O=np=xsTDRK-oV+jK2RIGKrZl@5u_-T^yntMN7eeHzd^? zW9ovJYD>ZK$9%2DsWny3tMcKW;-YNdizzias4%Z)LL~S-P1C^s1z*q1lvq65l|!&5 z`)i`>`nrwm(STLvDerUFg05880~!cTwwe&)Y+J4{Z{Tlkt+Sm~P<2M@ZgbwCUa@s` zJC2oJE#~o^+`1bdA2Iny`(GzzswZK$kqdpw7|I&p@2@}ll>J`bi{S~&?L~<#^Yh9K zgKgBQ18tuT!izh7(H>6duDdF>id=Wp%hXGQl zvbHED`Xdg#x5VnV+Dz!3g-pbFfgxJY8!mNE6wqWwTZk4(%ji^&6|8&;Os&paf0{J$euqY(wxmqdP9u)HJzQ%qlzWJ`6@<6+Y|QCco2b6HN8MzS=@IR% z;F!SXO$;Af9ueIT`XBb*GaSw@d>7S%1VJKt86_bR(QDMG2_hoVYqW?KL>awBZ$b1< zr0Bi(-bERGbc4ZQn87ILm0$ATd!LWz>)D@Nm-k}cS!>--xu5%amdfvNlyQaHqY%N| z22nL}19pBn-GH$-aW_NAO`MgHnDcJ~66+sCT!kB}+z)k8PTb}%lJDRS1^7Lp-TYis zpzDXl?9Abo`JuC`wCsm%d8H?6=X;@4MDl{zw5hG3 z^RZ0GHdpS)R;LoCWer-(EJhhTLh81@djHNPOC?KqBnA3Cz6z+e7TsqmI+eH;stp;+ z=+Iuce*qe+&Sd;88RvX!!DbXn-o2QYT)`Uou*hx}{kikmH2968@vJ0p)mfHZiljJ) z;|qEmyqxDtm{wb&Ua}{ChH=qN)$Rj&8K+r_BL&1t1SrPj4~t3;H_66&i-zi8XLs6c zPEYc0v6RnZlD4gV`qxS8;;V#bfYn%fslZA)M>X)yM{4t8WjOJ9)P>F6H8hWsfkU?e zy{Jh#UITy2nQ1x!?(%MMbk{FgVDnN8CgQB8e(w54MswoseA|0^+T?DZ)~w`iPmV_@ zXRfR(h0%wKK`p3>QtTuj=>QZIRxWslbo!DQ11(3(tBxNTspEwJnES!^p&GL$EOe9X z8g=9=$1FB?+#E13qh0MAiI;9X^U%~g7cbk8KQ=rSH{9NPN7zGX{|GTYEC>wb0EQmX z86l}l>eg59`$v1Z<@kNc#H32ty}{}9&F&E2?PGo657DYk_`b7j)sBi*HJV1bu+g7R zYBglw!+W^_4kF^?T$K20)ve-(_;GhYloBno8a~wdANabeqSda7gf{$VZz1F_@NfV6 zERn#JfvU^7NhS}W>mO0BhdagEUbUKZ;F45*vy{Z>Q$Cagou3I4-3T>;Hf9+5=_bVT z4gv$741tngkn*AFomJe7M+HGuwbp_~mx9ssunaw6qmFTg5QADK#{9K&vg+Zn{!n+W z=c%R4AtWL?YG``$cz1Ne@X@YR7Nt(x#SmlgLw8#`oOS6HiW z8f!mv2AiDu>^9t2#*tG;+I^#YxNeVlb=q=9hyB_qf}^f zu~`a}B)h*-*j0HON_Tq6 zRsL+^JZoTQrXgApnqm?yRMKDFelz39Q0ll%^uyC{4*1<6Ou$wwj}a2U)SJ#^84(#L z{i{t(7zUa0SOvAWY|_SF>%-jqj0Xx%Bp*yQTbLa~;uH0_=~q*4d6apZDYn$VU)9-Q zaLKrbjpN+7mGH%x4>9^P&R(EU1dotQ>@H-&+wpg?HKtM~5Am3gj0fbh9xbRxw)Lz) zxMU0N(SKk2iTSQ-EY<@V!`N51f_MVQ#f<8f%4`)oL5 z)a;mtXdfjSb;b(pDhD{n(|yItt|AC~?AG@jgP@|3)hN7wU;6!Vu-~r-9vow5`aZG? z)D^2FOv-M3%F*|!zt1YVe!&aLfs@Rbth|(@vd&)2{{K zwSa78MMteoYpWPXMX392R&mQ?V~gOhTmAX?sT zIfYZGJ*jX~HhFxo=jTY zC-xrs3y|H?=sO{08>-GL(REDN&zzEOFk}^)PS-`GMK$C04I@PBTnbpQanyPA!7WZl z{EMiQD*ggEHR(x$l`9nN?Cb~+HkI=rc)5QW`nnqB#f&6=IueWJcdAqzu+%jZNntW~ z?<H3ti0U#vY*KVI@LsVDgd zaq5q;bBO2gP9@TWvD>4p$zHJ!C#}!;d|Gt)*xCR;p=w6f4;4JZBaECUz)0$;<++vg zA0HiR85TA4G_{1R{<;ea8#@r{&;~||a_A!N9(!${EW7(PaYwvaXY2SAOa3dRRkGlKJU$U$Uh6#YJ;kR|391?Y+3 z4fnmzhYlA}2HO`x(OeiQl(-ffcFv~zoD1uXQye);nwL}k^oLVIWR;=}L=M6T@u;f0 zV7!nk&BJwOqzE|Sn;9`bFs77B-gi`p1V6g=KHA~V_mO#zDu<$?$$86pQ(Gi0UDIqn zi4e(xB~mPE_Q4Q{{6+O=&I~EKuJ)3sG0ginICzI~8OQsVmFv9F_DXo;_T2eEI zga-tyZ>S_Vn;K4ng-f}osXC=U5x)TjT@~l9fdQ-pMbR3dUv_)wu;K@qFf1nRH8Avq zYZXag_I$jNlp~1!FxmwB`Nix;!w2ZF}0U&UYkT8ulLMiwF~P7}UpI(V5M zL{`4NN%paFsUN!s#8gWy^G1D3l^$PdPeMKV+a<&4JMZ|B@66I5Zh&Do?tP_3Q>*6Q zE{BmBm7~Dd`OX0g31nSQW~-mfX7WL;1vtkQ1_+gWz#}|j&H*<#cVzrvD^pq}o=4QM z69mu+OEpFt+i=6FU5dAGYUoAQQq?AJl5O6dGA@0D7b#(M-sRiN_FT%2Y2{>$F)@{- z0d>;9i29E5@@wLXiOIceX+{{o2h{s>u!#_o*)wxUyL<*;&K=MzsfU@hznKafeQ|}k z3w3tv`6f|({%HrjFb7E)<`guYh?4W;Jc$wOHn@9#kJ0~t=h+;h1H(O1#@rGd<Z6 zWHJ=!T==Qe0_Gx8FK5Q-(UPF~8Ovd5VvF|RH-rHYRJU1lT`*XqK>oiV(87|p$yn;Z zq<5O`XS6tSzuhx`Eb6HrWaMA^O`dfxeP@=j$rOwxoE7F)q(Y&)J7944t%En@F5p-6dS z7;)bUj1uW-RpDUcu*qTUs;puh;up1(Bz^qYnG%UXU&lB&m2nO9N?3sW>hX|tpKV2x znzD!f%s4Ce&?|Khp`F=nt~qhAq5-B3+%eeE{F$Iqfb-;OuWqUZpL~HC#I5-(T z)#5o(Z@lP;{yt?(*cFRfh+RL|{R5*#2mOl-BT1Ayb zVc*9Jk#t7F8N9)@-6sC5ip71qfRDmg3iTT0g69wz(QYA|I5H;%-@UdSDU=j$oB zZ?nS-(mPHQ=3dfs>%dwhe~Mv0yW>e-q-X7_Ges7Ovt}pf8RJ+3bL-J_{AMIkg$Nf% z*{e5KkNhMDeMFpCjl*X@J2yt~T%ReLU(J`xilJv3V$)lY++cf29WoH~YTGRR)W-A*fqn&J?3(OGm+H}5>1em9>}mt~Z?t<*%%RyY*OUn`i~E~c z6vfX~+n};6ue)~chz_N4ZonN@_L@o8!hEYq;AH8U* zV3YRrJhT7OUwQl}7g}w@^%*-jKhWE8x4z!R%Byf_OP2;vO5M6cU6KcMQ=V~>toG+W zzHgcYOxA1y;3dwMzS!IZOMgAdL8dd{KfJ6uAhUoxj=$9nNXR)$qU zi{6%NXMK@cE$Dd21L}R>qosZVcuZG;(T@howe*3Ff`_v0ERi#oarwH*-gMCC14~Xb zL%-win?EOh!*q?QI5-CwdJB(m%ZnJX%cj0*m&x;U?;^@mA6K|AdR`Das*F5oeVXe< z$vb%A7Hi(`$|kLRM}D%yk0k4B7Y@TUOp+U41jVgB-7XE@o4Gl3Yr*_u{>JQL%4Mh6t5b&_ukYpT$pRs79?ifL&QD~ zI+QxwE2$DU%L{dZrCW|(?ICB&06+l^Oh3?p5TO=p^w)pAB>nf}!CkISv)D@PB6%mcYDYC<+uE8s|GHsvOUrCN1N1h*W}+l9QbUN_Td zB(hmp%}We*%SG2ikHu;;b;B`nl;?qEK!}w$ zIdkdNC1hF63tsGH^u`YhyWKcCLo0n3_vnTV!456{VXVitH{L^AyH=iu^i*Eum`qqT3YE*O;kYyE>dw?*6`j*@cJgXg|VioPKYEk;4M{^yKQ z1-Z{Fe11f}J+(E3q0)OK(dl{>EYfUM51r<+Mel%3=H{yE1LWAJ2-KZJ>}YhD2971n z3~vA~=?_l~`fyweF*qvgf`aAc+czAS8Q5KSQdY z+Af=zW;XT*O4A2@4r))kRWi1%f^8BdN?5RStZVGP!0qS!CPpfb)7Ud!#%HG1xai04 zEPq*iH<7>a1nJ&7wM`Avr7g@&10p;QvGpDt3hVt}l;4{j_9i8zSMPuXD7nr$xIa~x zMXW-9Ffr-e0hKP(DQcQeJT3H2aljFut{stR*m52bsWV-Xa7NdnEu9O=L2RO|1?5R< zp5Lr=t|vEBxm-t{)UnXa9glBe>Y$wBN&oI3lwE~w^_DNQtWzeZ4MT3_bN2{&iB-2e z)q>VE0i<93>8GXA<$U`qZ0D&;Rq&jGa8u6Ir1MBNm%4aeEx1#3SQq>5cN-|3PgMRO z2miaQGwPUI`Zjq%Mb`b7O#n5-ZMV1uZeejWOXIyk+6dyGJ|=rjO+KKMlV|`oUywLS zh&DZ^)cl?Ucq&GK37i-j021Jk+WW_BJWA!qQ7KR{3mXHUY@=NF+vEMCEbeVFFB*jV zs|u0fuk&4^^G!o4ppe7(soMM~bX0f%kQm*{m4E2tQB0#LesU7mjGlwdQ@9I?N|ybO z@Q@~Uh5erERtt%*`42_C=s?bbQd8TV=NE?BjC+V{8X_HbO+!410`jBZuzEPWo8OGj z-y|R`?%(c9cg|b|kn@S7&Z=;on2EDx=80)pdAtt?Si|8d8nnt9=mCKn+0E`D)&Wzw;Db0@O+3Oi z(mR3rBXzsJ zqD*Smg*U1YM;w?S$KAMz{J|osqb$DJX)e>fUy}w370?yX_x2<)EJGWa zgYX}+^#Q0rw+Asq{UYH=kz21SRr%RmJACVQquuAVIKD3ZzTdY(eoNQwOU$7!`z@YN zxsV<}%H|~TuD0dgL(D+Q_PUkU*nYnq-TbP6wxXo^O|sglnNr7x)|^NT#zaPxKsK{02fj2a>Bb-CImp;AJ_a3jRDx z+PBP_Z>9Cd=l8+(!RvI+MU)BAM=tk!Y|@-Hv~^5c6s^W16dTzVT-5@DeX6eQZKKzb z+(P4nMIVr$+_6jH7lPmj`mc1&0D+*L%*SO1%`bdt{Vq%QnxZqD7ApWYK4cKo;#IHj z8H)Xrd7C=caG*?bdjTOfg4EqSOtqugs^k7pci7Bw{D{M&t9xo2BKp3@V(d3|C&1 z_vjpip7V0EYzKs!h%>E4zV0AbLfSDVag%!cbl)v|6E2s%{@ts_?71(;p+t7o2tt?Q zB4e>)_P7u^-ru{bdySfA05#dWoPE5J9E8P%<&xcvEWGT;N)EXWT?JEwCOi{x`w8q?=(*52>nvp@ns~z z!SL<>={{mT?QcXz3tVUk0ucN^fC3P3@q}a!!cd{T8TbrE;F#T_u#_7mmsLc2I7s@v zN*`hgpbg0~{T;aZ^HWdAsoV1P*^^MO?)KVWV z=;GPqn_Qv%UBrx%&jgP+U!!yhIo-NX_SalP*Yc{Kl0d!~(c^S#a2KMF#=)>mdoq+^ zf!?e&tsSsFj7D|c{6<(Buo`=N7ly0$nr6P(XTdMiJrQ4b$8&CJBODJ6(fV=loUhg_ ziQ$d?KWgUicd2V*R%uhE4h?Oe_~8hSY_jYtf#3$8_357c%>%$eEOOmYRL z>scl@CV6o1GW1$Z6JZRz0QtZg$v$ehJLD+8l{Y|_Jje&%idnU(c>rD zD4Pc&q%5bsRg~M_CnZ~@fxR9dyQk``r^J%A8+A{8A7>v6mvreZ)|5B?O@Ufw+ELpT zvy0rbLd<*UQu<&ppcP=<15)^dbVZ=gR^e z4JUt>5)YDF=O_lTw5|*;r?EkTXPNSqxE?L4%Ue%=eYcy)?R8hH^~v``XY!035XQZq zGacVTQn{^RKL+_nH1*_97s_nfY7Kk$@N6i!A%8$MnDwZAr^{p7Ssw_6p7$>uuf*p8 zXuRLXywms|2M>x&v3$BjmDhr9j-V90iF`XEIW@5#T^0=1=x~JsB`FnjN`7OxsnAVP zEHG>)AK=1EQZ-&pbrnEwhmCbLbyPp2lBK2STZBwg9=GVj)N;O1wt9#_I`SA!aZeUu-xWr;x)=2_R98R;N z(|1ARCR^PyM*-(ZwPgG$RHDEvo%JNC#a6;r%;Jz@L@@H2hSwbNa)Yh?R!Fu4qOEDy z3P-tHisI#aZ>0eKGofB6i{a$K*tUT)4&FBLf=DyTymwo3Hk>Qd_Jt(ITrC9c z(;7fTxlj&08TAvE4z&D=zqy~^c%0jjaYpgb!{)tmwE24~p-%GS4*OMxsWP{6B5cpV z_l|$)#b7KyOg7mrbOC3%~F}~ zO&Y!?jkvs0c9@g9q?!k91ko+~m42?jy2Qr-{?P7r`eh$d1!`Tz!FQmC&azX_NJOvA zJfO~*IsM&F<#bo5z)WICl*QttsX@B`S<8$^ZeG$|?&eAlgR7h;ZkcjmXcGYzz5TkPo&QAPiWZO?0u*L$4BPU8IN z^`hltD@uj%ki8p@C8_LD*+#w<)H+Ne)G=s_^vppixRa`VDNyguaQViSXua(tr93)( z%X%{oFeD#cm>C9)4d~-*R;P&fV9uP3UWePk_G8mW^vib?c&bnGqB6cJ7?KD)zFCgsACd8;(&FLN?L6ZI6 zUBZ!?(F!2xEU0d!=!}9CP;Yuq^Et1mk8`*RNE)gcH?12J*VAsyfW&l0y^DtetX8+` z!!|4akSifCeX(wr&n`|uLXs2@OI4K)C3fCPKEiIlkK1mw^HkB9J#(5HvN4ML{k)|L zaO36GfD_MY8d*TE0YafkXWvvs^`2ReI)GlQY*D&)*KFpw~e(i*##@J}vLcIfU1ggwndCxut}X5(N~try{PtX^A|H z_JE1+aFW_q5YV}MABMX#Fn%|e_;?$k6=x~+hUk0f=8a8z>Kj2|T0EV$XgrgFHsyQW zDf^DtT~V3KbxlTb%3sQZ9}B8QR(tO+VXJu(I)4ti$MZ-|$(8KZj)c;0JFZW50H0$A z(4lVlj71Cebv-zm91=;6W{o!3o(Im(6ROmK0h4g_ zb54@pw9I`Vso}#Rwh2ipI}a)b-G-ZJVP-q$$02e^lV)nz8N?^vZ0dCD0&8SVd%EAj z{~(W?+J?q1OjL8Yjf0dCB~$w>vy~HjjWl2dj!#k?SC>i^UGX;IUuAHh>J5;>8V)p&Pq@ zW4ZZNkKk)6V(7jdF}$a0&ZRTMbq#}eLG)Ue0zBYR`UI(GY0~^T=X7t2{{zA!#$Nh$ z<4!-PM3_e54Rh!o5Jpf7+cR1|mD0$FXXhQIrj9|d0xieRDwD%{p;!k8TP;7;oAwuO zbrd|TfK4S6;KoYP7p&6L09nj)^wr!d4|k39;=z%`Xl|=E)7sr3I?laa zfb;*dc1!Oz#Js#&8`&|((A+_uL$_E=yLH2hD?Pw0J+sI%YJ&kJI|MBUIcq9J#_|1Z zuk$2*YvQ&3u6UA=O!o~z@9J(YySV8K{s>x8mo!-OV+YN9IDxito!n+O(kF&ZGpG7w z^n|VWs!sD&tH6SQvdP@kUb)$5-oei_5-a=b9FT&D>Ezj_E+T=FdR5M1le|H22bZf9 z<66gKRCM^S7QNeNzq@>mT0S6gnuF&X%f$f6#cD5=hreCwS{YEz=cHoWE}UIYj0P;u zY&YUkU`j?Vm{sm!9Eim|HBdqBpUoeHlvD@RE#au8{$|{i&7IzyZajQh zpyJE%x@V5qRHnip=$fMX>hLu66UQ9p011xUZZ!+x(RiyU8GmpQ&J>L)08 z$lreH)_y$a`;~~V#mNmr`pfCRI^vI(%p6F`LhWtY%6oLesi^*Uw;8_+)V&Xj5&^D< zSJR(!J`aC&BX=(0#z3Y99JWC^qQ@iclBw)S9AVNiHZ&*k9(=el4nmGk&{tnSmNEa7uaJ<50g3rqZ+`Z`-7~ZPF)S0F)wAlCp|WO=0^}8i$^~yI-OW2A8PW_=Tfyj$69z z`LR->Gag3+SSpse9dT;bFz*BmED%!S&T)J26ZeY<-xuV4diyT0WVFX};K)~+w7GTl zmr!s!;cNGbZo>*qJ63?pNca1JZ^u;E>{YlQ)4zfsCOfu`T8=-D*SX^q>|}5dD7)=Gdlf3 z*0;9<0L;Bkk|Ntu@^bVW<|2UlI(+!z8Y;|0KoXi!10^swJ7`*u$^=AV=x61?)#qsX z&Hn7KQGY8Lix*N6OA^3kLEhWXNr_NAJuaNT;LfLt|x42`muuV%v@LQ(I{SU9Q>2(2C$@C--ZPY35}h3)?XfD2f&sC@{^Ms5=Y~O}g9mdaBL@e9Kw^a3 zm2MO5QM?S~U^L`T^=+P&n2}ZS5%-Q({8V9wp8IPd;AaITE+lIyZ1`eH!P4F$Cspzk1X^8ZJv42t3dC|=ST+ZeJR8D)Hd%l^3B~uKF?U z%T7^aYl3iX@eKcP*K8JcMz_7a12JOk7_Ugz+b`qxQF~@w>(!oDak^x%%O3Y*N~UzY z{nkMJ2Uy50$_*|aKn*kDa?or8v+IvLWW)dUM>E~$94~GUoZs$&2KMH#3-7KP0pb_Z zS<(C(`wP(=DYFe?JG9XC5VOxe0?G$-jvpcDF9y-6bwCTS87>&4Ycg+d;b}Q{oE2Xt zq4-H-Xqx}W71?u2U^W1wUCOm|8q8qbtqPX+m8R2mR!yf88ncOAp;KOA>h|XO6yYyC zG>WxK!FI|qGUoy4#Ko29O-+^MF=4OdA}+U?1C6Jo?~JVFDLpqy6ilm_W3pt|UN`+MG_SC}^wC z8799g6SME*b9!Ur$gO|ix!}Y@TMe%N2@q3&*mT{vgD`ca9Eze(eevE%zhvlD=Tb5U zIrCB(Q_!Gw&F(AnrTz|yVLgl3MwukgwKU)p5)j^YvgCoC3RZEifn-(M_T3&NN*JzIxkBDfZn1^}aY3JFQ^OW8Hm!0IM1r2@|OtV&sPtaMtH;+07UeIa)LKC z^d9HaP6guqxHXS$D$$$ZuQO-Amz6HwBh6D(z<`|kkM1*3)fcO|v=2RBP(mm7`3pYt zlb~H*CAa;E@{9d4CGBCSB1&h^!nrc!4(0|ze(2=M2gBNu5TUkk5Y+WGxiJPC(RnF+ zVWP4LVStM_;?6gB(!-#4*Qbj~+);aXF*8}`*CO%V3rb2aU;?fP|8|fSKxbtM?bnzg z`PLQc$Z;b-|D&_MV43vXgE&s(5xKXl%u#huo8&!9{cd#YJF$tmNt6HKQl+#v{A^th z;IHuC@wf*EkTq04)4hQc_?5Jo&c4Z7f9QFro+6qWE=R5S;rFzSB;V(|H{~=Z#VH3G z*@rwquMz_r0p1EC40p2Cc&hfFH*5_$7sB~1aa&Y=7AxjbB z@*FW zASmM{K`FbZEAynJ=bFVrstw)I8qJMV7@j>>rFeAgAZxT!OA~iXc@{S#z`#b^ls$lC zSP9_Z&GK9qR#DipfMXQTT_#aiI*jnm9jXb}ELO+Jz*B3dc%tXZ%rpku9FWTwk>Ak$ z1ug&3-2M(UaB(3H;Mtp0ky%D=rSjwcV>gRzP4E$@2w)hAkaZxY%*45gc` zkeM1)cuX6^9$y~EOz44M4@}tpCm8)>R#AbT#`yMZt)+eBCU!YNueP>`i7beNX|9EOKs{30 z)*JLJi#VPD+|Gdmg{}?;15HKDJth>sA7?;Mjb*V{$=MPM#i_Cvw2x#%u}Ab{VB1{w zlPo!TG-yqTP?vbXE2oq9*mcAigvPbyS99Zj7dDxeDe3+|%h7+L9U#T0a^0^Fsl#!? zk3azO+PAECOy-v^Ld({mOt9L)D%$P`P&BFJrJ3zc&rjFUCi%*nY%+!B2N^xHgidRK zNJTLCLO4EAKsU%J10@FK{=o#{YMo+2bWaT`BX)$`xTi5m z7Q)=G6XNglN)vasN#7$mS`&Mb0oaESRzO7m87+pn?5Vle{Cs~m6v0&(T>iKQ^~49W zFsqAe?)U0;j_JJp%bJ(+@VBorE*K5U4ysai=Fi?NQ;P*i9XXdwo{f9+n-0ZmD&jO6 zr`H`G7gaew_++YW`7Dz{_!*(uS7-0HF+P;eODXlDrP;PGSLwKjA}Ep-GY~hQW?Fm$ zxZ@U<^&Kruph8;AtigX5MCJg#@FR8j{?lx~$aL^^L zp;$nFyS+RRHx5VB-lStAr{Wjsp4F(nvGxqil%_6GVUi0oJS~(6rZVa6&%k`sp0VtZd`K4ivpJy<%A~B$s)p{|axM7^o3rwzZzP4xBlMxQ|=nOTqBsvqHw}$gV zYD}D4UE2UAa3G)j0fk7n&lueOUGksVm z?g^@@yt8aq)DIH}#xr&f>3G+h6OKYafuS{`Mi^T_S4?I;)<%=XFz){j>IBB?Q$O6he zP%riMGSFPccc@~*@BsV z={I(jE~U-uQBBu%IDKItlE#O948tF}0ulL75a7%!sKa~ zcrM3?{hof>dE=yyEz8v6DYP?hOSXH*94db1vWVG10^6vcdqwUV!3$!X7OQ<2Qmk8v zJ9I+Q-5n4d{UcSlXrBBtU53X(K?W-gzKM7T_yOCfcD%9m+H4~)zK?l=(%3R85mmW*sp#E0+ zlV7%3tY^75zWS{~&sU0MRLh0^g0npboDFCQOXr-&!Y4rT>^YZ14zgqPQXC2;qrZ9o zbg>eKTP4mlCP7>t+e>Up|J!=r1)m)BDu_~^WF$a*L(5V;Sj?Ye5fH2Ef|C++Cuqz( zgzL+SIJ@H&a-{LV&*kP^4>1+U4mSF-6d3U`7I+4*`Cw&cxJYl4t8Y}NAQ`FR`*DsOb`nGvOf83w2w;#aL~-IORDzzg zDp4^yE;D;Am8QO3o#n~>1&EM4>@Xczi?-wITE~2@s&zFAEXk4xa(?4Yo~ogmC>l6t zLx5D;Pa4IB)7jN(+qucc(M8^a4BbkUPPC*QpmMc0F1;=5?ZGtWjZ1LD-D@NT%a2eG z)K%+D$RdsPl;>9>{yOTENX(^Bp1IcJEQ0ny{!p?d2su#PI3~;CSD5?mceF8%3hUv8 zzxfF5nieZom6b+#Ev+Cz1nnnoHWx-gPPHPQIn|_#hpnd;lSHP9rEmqBnTGQ<uj1wF-&q0+vIoRLj7UVBFmF&yTAs_)A;1jyXxj9UCDtdmJUP9zs_Mc zXHrAOQ?1Jr3rOMr*>ya^N5A2c5YYqStIiQg3#Plc0A^!I@cUo$y^w7zbpn{?E&C|C z{xAQIMla=GdGr^oFI@N{`5bD0j?HDO?*@(A5M*~^&I$2A2>%z*{z>Ac8;bS&pq*$) zHawFL5N&(xcz4bdt~zqj`g4wynv&7`Z_EI+5|12&MK^Ggp{0Y6#&9-Zb{`0LRT177 z+r<4jYg`DhEy8=zvHXE_mPD$Q$g8OqV7Q$)ZtiXPx*!_MkxshcRC|;^AI5Tgu?zecja8Ccj?Z zYeU*8jYAy&w<#nJtBtgajVa7CsFwLZ{PoiP)5`)}TaP?+)&KOaX{R*Y1k13g!3C~q z={dDqJ}_8jbSYz?iesQ!5S@K(QFBLu)E+2I+0eBW2N7q7dEIfw*bKY)q)mNBcKje!OV!6r?HwBi}D3}pfiJQn_vEj44N zR&(H6%K*DB0D#tQ)yB*{+_^Dss`X$gH34Pb+^Af)soCh$3a zd4)6NbOV33ip9(rJyk|IVkGt zOl{nLDNEM?P$1cO0J&B*jfhRHOpCQ+kX z_I2Hxos1X)w8QhY>(5EgtE0@n5xl&3&**vHr;Ax||IibXkNs{8TGA3ZPZjynSGuKe zp*j~5>;M?Jz1E-O7PD#KjTPmFDHG}b>Wdpx6D+FY&5n`S51DULlHD^uuiSE0*D(`K z(vlu*uXP@frr?e-dD6H^niK3foDo3C=dOAWw$P z{t!IH{o;~`QGp^L(X~m7HFD6$;xl+}a%w2yf@z94BX^D5Wu&a-s=#kqJfeq5r#c5k z>faV_-((6s70`VXTFO^`#!&8yeW4dDr7D1CIyBDBLJYdYewsoiOvI2cfWojM~6Y|fRs%CHjkUe`Jmuw|&hmqv z8Si0j5hEXO5XVP4@5W^LD%#Q$)fb&HzA+CCPzHLc~=Nr^kd zuqcdv(f$(9fLcic{Q;FDxseb4d?d}kV5!&b)myK&uCs%Vz<;Ks7atd>_J3nGoEE)F zHghE0L-OAjxHk4?;eSaCC11dK(rW+(HfiEYTKscDGN2!!VPmpsa;*(zAw}@U!Al-T z4s|hDCJRh@`0FT&!vBN7dxJrT=1?e_7CXl&@rlJ=oU*PMEd?(HgKYdgb9v&+l@>o*D}q=Ql$Gps%G7_YBl2bEr5yf-Rm7jo5qti5DC@|Gw{+RjhGJ@y71YJbxDX z`t#|jIh6Z2NDkVEpZmVQ-RJ-{mioIK0(AJl-e*x&7XvS_S~}CsJSVGi7q{!(5+JM_ z#2BRu^!Qw`3rp5<#}QpyVW2%=8XSZaTUY(}jRl1Ni;Z&X9J;`)sh11R=gLm;fx-IC z&Y{0;cwUIUjv5NV{u>d8xjd2lXC#0K7yCLW3c4OJ4IH>&8-DNJa@9`3KW`oRzb$0W zfkRJSfY+b%`)4tKtel165k}QnFgn@L9sGTjR|0>7G;MBL_~Ym#*8d!Ti2vUYXYp$@ zjc@Dn5V`p$BD+5FLy^}(IdBd7P8xuPZe|z_iu=Dclg@qjKbe;Zl-9Yi4BGkR&!Zwg zKOitr@_kRT;}B&c^*{fs>u=l=wq+E>+MoPy6GMXkeRn)U_Y1%bUMBe@T6gc}`#sQ`=j{ozQu>eTnoOeL6$M<`%0Ojc4gGYu- z`}ga+P3-qtci#B>J!by-={wZo2@)T5B#jvV9cAg$|Ls(8FmckC?BM=;gVz6ruzeJ3 znQHR?e9R<3R!nID!Uh5+`hp#ze}9m5!21dUWxGih8O;#ogJS;s@%-=pS2|?a0%SFR z6QcjS_5a_u-YG9R;-41a{~m+?YXSZTn*YDI05-sl-HMABla0{L7cg7K3X)EiT8_H@bG84gtQ7O(9erFi`KUi2r1l zH_6B!v~3|7c>x)l@U`F+H+aFOn1N^XI?HofpKP+;at^>xrBj^$pb*7iX(3)dDqdk? zYJ2eiF!t49QTE-|lz`HTbO{LffOI#~q9C9kEiKZWLkJSm4N^)7N_R6zclXe#FmyA- z_ZuId_dV~q&Udc!CtL>Hv+o^iueG*4n7OKsFk;8)4@Wb61jCB=9mPuhMe}M z@dAh6iqw{mAz1xsr_a8H=Nnds7ad;#wz|p1{1B9X2RTT1oYZ#A+N}^e0)|u{(EJO4 z0uABE9~fx9{}>g9$z?sEWQus(t15ipu5;3oP~cJZrG%8C$F1_HyI?MgkyBB`K$g zobNo0yyW1@ttLf0^`T^p?)PRNP4H4*hS6x+0jC9EK{eV)|pA|zQjO^ zs@cEWGs5D2!RsleJ)g?IzMv|by~HqtzuS&x$n|0z&o$6i+@jZDn1wLbR>&4$=q4#{@|z6CjSF! z$OJ@&W@BKx8VdbfU#iR_EEHX0v_OO`T=%B}Rk690>tMlj4#zTn>P6|1Fk`gE@E~Kn zIt5w)wI{W(Gq+>9+sxw1=btXjj|rBx0R8ow;buxj+AEI;?u|}KHBrEgiwkr!1VAI< ziXzv*Mlki?71>Yp&%}2BHX+qL_lVo;&%OQxQ+7MD;A?0`#$jL^i9YT)7v+-qyXzR* zME3b*$-w55`g-gL?ik*Q*{xR{NbR~k(O&?z6|+{t3cicF0w?nbFD?%-2BcnD&&Qb7 zE|rXL=u~B_M3KG4{pVe~1w5-I<+>_1^dV`Xk=WeT97Ke4Gp;}FT=vZ*c$o&h^N5AK z52_9Nfu_3;_+vfG*s^8G!Pnq_rCc7RPJ)3Qn&{UWNJ#QHkV5!93~4?BL}Tv6G+1% zT{w6OZ@1mwB9@HTRq(q}lL8u-F3mN_-khBk-|&LB+5$P^g4MDxDXxY)jmez0r&r0% z^v&IWLIQ(9=P_E_;u1sO_C2O#z!yv^RnJWZJcQ)=tBd5&I(@2|*K%&(mE3C2c42)neQmZ)krh~$R%Q)w` ze}kIA=LMyMm%)$z#1q>eXCV+zZQdkP<}__Ye_BHQ-;Z*9G8RP&zVQLFu4MI3*1Ci2 zV68CG+K_Wcq7$@WfW5Wo6~~Utw`AZHfx7>u*H4U#($Pp_gnuNM%%fc~-af*YLQ7q3G)IB|MjRwltzG;vWso zrxdRG>m2Z;akE?h3{ON$w}5d1VRExAT1$)ZCFC^a5LR8R6F1e)MAi-#6+cehpny%_yq#UuK%GJjjK3&SB zK882^=sRzMWN^$eBkGe*4UH?gH(NjCR!hDFr5hfd72Er#{tdLIe?8_Eu9JGt6d>NWsX;73Qzym>Ay>OxM(*#~)N@zd)L2Ldb# zCYzTE>zmr`a|hCts&8V3(b%``g%$|#F1(RjFoKTt$66iNRzugT^%b9X)lQTgk8%Du z;VnHRPed_f?vc**;YOq##ij zsS51#{g6Xo+f+0*mBr<~kHgy2;Fes!Ql1>q`!D!B_}q-b)e2|-8S>qf1bD_jE3!{m zKB-DmiGOl;KUl^91eY2Du)6sxI4iQ^uY+|7C`lX#aFJ%aor8RjKEY5pxn=c*7um&qh4QA$a-JNY6SAuo= zD{2q>KZd9D17{o?A$P+_H-N?^%ht>5@7#Zzfw7$oL1PW3L)0z{8y&lb zbAR-vwcd-vRLi#S#sDMlmSdJ=(>g7y3)HzesV`j*GNt4vSLAQ@I0Y1PSN+b8Z>|2zAR8VoG(ZlQ_>&;aKrsgEW$&h8Y(jaT>$yJtqW}w7QCi*LVpYG` z&hX*)K3o{(t@63z8t#NJUH3}xraQvUZm*}QNLVIA)a!R~m%)|-nr&0fszTK&?VR-{ zck`G^_@GMI3JSE#4^3d@t{K{mNRy4ti`Sxcg2MYS=)-~2Xj9frlRz(0;Fc%=CAjw5 zgkM#wB&~WHyev>aXNiLzOe=y+nLMLSksr*#;8SJbG!u2m?1LD0+MX!1!T$zfJfeM( zTq@}g`Y2TFnyy(`%*UR^L!~_uZdN_mhUh_%Wz$Ezrx+9KeX~iJT2r@ zbK!#adW&Pd-(UXSV82dT-(nV;;gh8wYf}q1b9)IYnr7%rY=+bWDN z1-zN{%0>jd^S2GkYLOk?WuMKJ;<1E0) zF9xx|%lN{anD{=LiLb^e!c5Ay?mX+NdZG}>Q$I^{n}&)$ZD29Gis<-xWWCr9&6a}Td#-LFQ1 zt#zZ-kYmFryjL*}nc}g0s4bO+B`1H))T6pkmfZ788*Wuf|JGk^3m16{$O1ZfUgcHB z(Jp46;BO>8oVJZ_@sDjbxEAA)_&&Lwum}*ZYE;*6A-$*?o$%`PqRGD$-fESswTw~qk;L-T9DR=rBm0z63;XSpP&cSQ*`_PB zkXdcYTpWy}g$ss^MnGPxkVNM(Gc#>_k$~a* zPGM*PD@pwen(hYRb8|O|RJ^C;4UN;G-6&Y3iw(jqImOvQkEvAxpMK#GSqO71Zd?K$ zfRh|}>Lu%1wmLr9$nj>Dd!60j^7HkJPe#hq-e<2r7tDEWa|J&D%?+V??UKr`*1)p4DS7lHyk}mVlpKgAp7V;S=RHP-+}u!P|<~6XHPs4-_0@yy$be z0M%4xemJSen837a5P{bd@y}$=LV`}}{LAY4@a8;nWKz=xDgcIbOkJDC?fw3&-8^yy zEopK=W}R|p&wgK<<{?9K=e5&81G4YMMKKXPp>=ODf`2gBa7_gzUo581&@ellg9g8F zo7qBnr64u>Nk)cjS=xgu3qR04|M!7vkAFK!CFU=^xqrt8+7Xb65CtZb2p%j)nu6V$-tfD1S}y#yTI zn|RIBA|b{Ih8s5ciVZc-M76Tb)hgF2c}`IYEe3mWE%-Hd??y!kpB2H)*-M_q7B^#q@7}}2^puhK) z!-5R2RZxh<_L4-#*X^P`5trmz`?_WV5YEHG+ED!0YMhaD7n-bnpfi+7_LZtLn5*2% ztFFrHZY^2ZCS|Lz&ER}w_vPF8>44`~nU8mt?$Uium9D^wld#^o>@wAdSVOf}@vG+# z1PO#JLf04pvF>>K`8*2_wj~SDDX6+^uw5zfqhr@ZPqVm)g<)DJdsa7eGF*n zdW}}pv4ZsF$76dxDX3=A)|ATp%1$FkY{SY#F)(|}ygw@j3Cx|-s8ZlNCo$}#2eMR- zy$GZf5Pi#Pi@<>*6Gz5gI5i%kn~s6)mDt?8P{r}o!v^7ydtsG1rMj3)7Tz} zBqIj9da>NUKKN~Zw+@D*4-*T8=n+K9>Y+|iL59$H zSUShG)n#0LnfHtk{S!LTrn&`%A&7qzlw zdV}X$r972LDF`=iTYa zK@bXBjF1xl(!8Zozzi0&30`&@7+~g)$9xf`^6G-XnGu!#>Z}4X_ub;}RMsr4JdiSI zHI?Kx;AD>_ZJ8{P8d`Ts?5sCcVV9d5uGClfShb}3 z#0!8gG+4w|u<-D!+W<&IQB?n=p?Ds8O8}q%Z$3Bup1lsApPd=wiOg|#uygVoOMtMw z9;n60(A#kuM1A!iaF>-19m@aZx@yPfPS!iZr!NTH zC~A=wkc3|-aL7&jUhlmvoX@N0?ZZSxovggMeL8ql$Z#NLw<*8CsY55*tTfcB!clky zIEOU;1P@t&&-D^n8(x6cNo){cL_!zQRsu=n7zxJizxH^$ug=GD6;;fJwE_4cn>xxg z4kIMJV0wMCS@%W88gbbXw0;|9knXQG0I0ugRRbttUiZTK+SjNhB&98W5->$F+QYxj z(mEaPl|z-h3KvRy1r{2%8bK%c{gm}hxhr%F_lf69E5?dqAdibQ?mM@3EDKoGw&+x= z7a;$<;X#V_1#e-3*`mYs()S0xTrC>|M{=)&Te_F(OmG>iQg;`g6NT!32I+r(#S2P! zqdNm3UG^}~Ce)*sKeDNo$T``4LI~W{aBk86wjS@=0~dPE>e|0Z^}6-?(TT#!Njyk! z&(LJ*Aa~%S^@#b6G#~HJu{AYU@kiGHe%hFpE{8;3&9mr-R+jOJYWSh}RT&y+%rL&S zwkuXdXIYg7f0b*gC$V#_w+uN!0grRJp(N(AW^T9>T+~W^Dx2!+SM{@lNOk#1OdRJQ zo@@h$2m1XQ<_GYg%^6QnGx#X+$--MPajHy9m}A|SL~TV#;vRtM)87(-nL;w9(hq!W z(M2k|2}Ivw;#2CIL(LFeeNqMW$|Zwz&y8pW>^lm|tL$H^E7dbi^=iR{1jeZ@wWk?2 zKU9=UU(HlmYFhF%xi4Cgx)_0;y`ZSwUV;ifBU;I;l&XLhz^X}wZX5i}uggmTIFaSd z40UhV;Zt%{kYC{!v~;M|7q5IE{S?`R$hS=?hr2#cZ_v0FNq`I`LFguL{-z7I?au#5 zJ!!pZ3fl10Plwq4+(nFx5f{8D>I37Mru+Vmxj{0e4b}3aT*t|xCXTn^C`%O63;f>i zng2o~rr~6CVTQy#CdJ~cNbJ)`^id-4DJp0O8*awC>l)xC*t58Q$p-J^$MK zFmdcjZ|!khCpK#Yfl*5CbE%geh@ZFlZ2M%%U`dqQSNyk<iw9M**xoGR_;a&26{U6qoi$v7{15!5gBPe&=WlPcR4!aJM zi0DSb2SpKIRS(!fAtwUP1{rmSA!32(Ft!Uy$2Iqj>eIMV(DU+iODIzV7qizo+;O)$ z%gem&2sbx~c|dfJ$pS&WxI81FAR^AWLnt%C&(0itAXF3YPB*M+T@_C+g74E=yglBl z4?Gr0-I;NjBDQ=cQ#6$Bj|U6*#UncC%SmK1nmg_EussA^Z;*)qu=NY;YhM9Dg-YwV zNAQOR9`ekj3{L}`-iK{Sg$X4=5&a+a!5$yN)IP22-QCP?tYg+vXRvl1H+= zH2Cz|Zt9jFM5xtQ@Z+QJYia**0p8!ou?ncE7@Q`)Lu9RntH#oHJ3i!t-{an|dl<#> z7R6tR@~a!}yG1q%{Do?Sv~Sx)9o*-qg%Zo)u~1%mS5KC6!-IY_#K%6DGHT9TNLWi; zPDhmv^hggftUCzL|ZIl5X5t(n=gT7zV z$ufpeXHcESLngSZx8G1$?@vE-_)Dojlnf zc6Aslg*jUWMY7nP-XnF?B9_t3SwDNTCN@?^eRu$=Zir30wnMaGmAo8a2$hhCtAz>5 z`BnzD3;b{EZ~GDw6HxX6B`{qqAzQiYAmM>YfY<}LVZZyb#bMhg(*EB1`Ou18v$Y)Z z)OzDvGE|Gi~Rp_5X>fS)HoZZJW48BQS}j*RTDzx)es6TanH|CZ+vhxx)y925gY!)poH@Ex{b`dzj$@-LkE$y7uF63wSaHQFd06kEYF zX8$-kn71NNkWFWmnCFk^V>|o$FK~(|6%d$s7B|#YYwOQn6&Z$4emWEz@a}Ii_=7nB;vUfIL=Kzt zTZwMT&OjjM~ybJm+voaL{qb^6t@zUbHgQgQFGuBZ=dzQpb~5 z2|8Hc+_`k!Cbc*=)M`j%kc*feGd20qPqZS$tiq-%cB`4}eFag8sUD&FMqob9Ss zN1#GBG{L&pV)X0t#}2}{r;EoE`trid16+LQdIA!jsR<~hW?Lt9WiRxLn(PIys}9hIJ7 z`gtl>evw#Ngw%#9S%mg^%h{}4usrpWkYMnoaYnC5{J=3-tC=v`W1nEr3A7i6wlU1; z@uQ**JkSfP06XwQxnR_6>uO%#C*mMxbWVJ%0P3FWS1wXbvxD3nJ-b&!VHdfKZ3kS2TCLW+GxLq zEl-t7@>8Iq;fwpPn)$SPsx%QiP@h_u_O$v`4bcTok)Fqh`m4`6`DCv?>C zeaF2Eb?c31WXd}iVHT0w%0Rt2A#CIB-T4~P!|&hl(-qo?pOVe$p{IAsHlhBhP;LIo zW~;4&Z($pL>U72aPv;;bgBD8?^l!yuMBpn*CD$i>n=eQ}MLvn@6U zj)^(H;}ww2>y^!-Bv#*UrSZ!$V!(3w^$_bPLzlh$K*@?cjpRO)lpy1 z))+wXFgYi@LM9AvaEhAJ2`DA#!YiBo3~W6SFe5@)@S zUXg%BMU0hSoy@VBK>%*9IPYZn4a?fYL0d`*srdUB@)T2gfM>$9HQc#%f#vy7H3X#$ zo`(@EYC4&RfeoLoJ9t*6QXKxHVlvzBu@zCtO*q7^x+zo>x)>?~6;=?Xmw3~S9Z`ZjxCZW zd%@;e28{D>YaJOQ4B@G!H--?#UIn9@*ed0bBCLQ(UiWuZ!mo?pMYxW}-8-_P5+Pa5 z0*m5rta-Sn0u7!f21a<>^ZqLh+bdvGreQS;w~*F_i4|~VQ(aCZXf4YyNWz7$KgeH~ zN!T^nwI8Mn2gyd1ocl5|!185#yXqILAxRGXKnvRGt9t`h<48;i*|MO%KlZV&RYt|mn{z}GJlYhk& z5D#4c{k#}O?j1|!sf8y~Y7||H;j{uKHnrBIz?lNduw=r07yMR_=}x+Zt_|>mMtv&0(kh~BIzAS5;QZ=|Qg&7@ux2*RmKMh|E)(~b zd$&{W-dhCfNbtc@&%J0A-P(BjFa@|xS_v~jZdhLEtn{vcogMt*sc0q}^s16&dk|c4 z=bk|r_!uMC!ILLoe;il^u+A@Hs#YXO%Xr6E8J3$pj%ze7VZnsna)XSLyz4Y?h#L~^ zRgh?bg0I^z>fJhg%LFz=q4}i z>sRmJA=ROhvh#yMf#{RhRnd?67jlyC)3RKkW~1@M%)tA7#zX8c)F z*Y;B_v5e@1F<1Y__!WGErF^jwL-9~)`}@S(?d5saSe%^R$512a~4yQ)05 zv>@W11+@6l^;t(T=T?2fhF?Y**d5wHd1+a9{8QC+0UW6F+Ty?)7>2%Oz`Yu0!ioxZEJ&fznHYrBpbd;%%S?(&8_ zcWI3(+i0WRN%2sK@~Hro{BeTSVU(K;jr}PCIDLR~0(2bxvB!XykYNqgDH2OSrbRMT zv_ry%93`z~s%-2dR9wb=pUyVVcb+*8DrBcdm+w4dgV_x2fp8-v-GNgDG@BId)9KbC zqwBDsv5N|TB&a~IYw+vyf;6BF#Xr&&BVJ8CdArtBy8C%!9;mgxoxU5Cubuc}ET)R% z46Et10Dm3jqYdiv*j*j(-AK{xmFz;=iJ#sFv6Gd%WJ;gn zPBFnvP#r)!92YjR7=1;8`ot1Fv-9miclko)fmYgS7pL&zz<=!F+!KLE0X_r#}3OY%w1F8VHM}oHXQ`3j#!|Id1_3(>9{R%oF?Y z{F$|0v|I>bjD~U*-pmu8e)(6x|GK~uX9hW7&?HYE%sCw=Scf!t%iJDL&E@i@Irg^R zy%xSz5=!8O?H7zv7Rf3BHGY2kqdRAJQVrO}sN7swN3A|`gjOART*zA9H+}to>?|)< zfVxn$)+J4T(hBBx^*wK1#{VdpPGCyZ`c6!H!^2*$)4L0R4Ur(cdKm>F?Z?Sm^^04%@S3@w(E`RlE2qfnOq}_&E_ob|+|sJZgBN>DO*M^=he2qMnAPfT)1m8TLZi zi}fG7gKp`58gS z6h%%rjma0;hrM^1O~KAQ2AEf|c>Wr5@dK|)+I0A_XxRQ?kpRC4Z;PL`Phu#?H}|kRp>KGAy-A3vW$&G* z;CNSdj|4$7?Al~To0jbV*dgXat%=bvoEp66#jHI`Ix&h{6pwz`B|H=hVn9Q~#y33w z;rnY|h`{q`lanxEa0lGQOm|p}!y)QeYuq^puCt=&1Z2W&d&$6iNia;OaqV#=Ixnk% zppnBCV`ON|5)xP`+jDF%*$Td5fe%kPK90xSU`IteUEp3Xs&iNp{3~yvVAhI4#+T)( zi%mV{2b2f5<)pY>VTl`DndMX7vLCs;04%<>ck8m|w3$UBqBN^5D@9YI6O>Wl;;|Ys zFa*|`khD?&npXT6^cT3W`EjtZxf+C!GKzATxFA2pCF34D6b*hhb5$dUCS$qHaIr+! ze~jb^M57>i66yOPTDKFH^{x5boZIk?1z$8(+0F_ z7_avkBtI9rPj@13PVOcm74xSM;xPk?T+b_A`ldNnnXrQN)Yfgt4v{H5f5P7&sN{~YPX?PbHMF~!G+JQ z@V)+EHe=ZLoEM+oH*(lp3=&1lda~zRo^_R*);_vT_#;$WQ$rL#;T71B%T3LiQCkE^ z{ZA$PPaR*}^q>quLDj2265gq5r)gzi<%g~OR5c}bguiO*M)$M~e)4APjXIpC?$`~O zw~3yLf?g1LTn1(gPthGaUam7Q-5{;l1^iAhQW|{~7tF2F#A2{<%R!p+`mGcKpWpE{ zTbM8JN9LnU6G1?XP4}YinKPj4bMcEO1PlO{U2{75YBc1Kd*(8rjU6z@)8 z9fnTGf#st)z+f^iw>1a7g3fILGMDFWxrRh9RN^A&{MGv<`Fa|1k~dK81|1 zMF``5Ft)s6NsbWrIDA+eI1Xq+nSU{hkAB)hIjOH+_!m4A3@la99``EB;y@>|HeT@+ zqwk4EofsU-#A2bg^kBeW%cMo&u$@xP->cx%;wMO9dH}3PzwD(68Yjr_FHWGRbH0CK zI@16Wr^(NkV}@N_s^1V3Ml1f%)PpxM7{L$&s5Zf(l0lQd#Cqc{jg4LOyGO#OmgounN5KFVy1Mg1;a1J0924C(T* zs^DS}1;LQpf1OtU`y~6Bh;woCBM2eGjh z0H}k`&QGp18u!2E>hJOHOi*|3%~Dk=-;LxhW*Yz_z)%7?4o#sYb4O6>sa*zuSFWzW z#fC(y45k%Mt*6qeWc0K`hpv?bpu4ZSAz?byxNiJ=v!kHH5Oxkua%gs%>*_w%yD2lr zmkRh)b8ceqGY+ofOqIp~DitI#2coNn*47le;JFvfB3l(T;_qnDRG9@0!B4KGE}V`+ zuvKd^-)**DINye)&~=J-Z2>5 z`rukldDljJ_541BAGCx-4}kDH-uBu?EHrMZ99YzMeL;$hx8#Eu#>We*J=snR02sBC z!R@K6cmA^#PsG);#|1$S%r=ARO*g8Lj0nx6O=pdXz4>s6XEmNFRb={$U6}&F3TV=A zFE!s@MnS{}uiwp?zZ=<=J9sR>c-<-9q(e#tPRTaYSTEc}HUgel=4+TNX-w=Y?%ju> z7^t`D(caT55@Qfa#bBe+E6PNr`eT2L;W3l74>6jkJaH}UbhR09b!I=QLku**Zlu!o zpQ)6-(|}T&pTc*9G8V|7s&itj4aXDe`_P&?PYqJALs!8V2wohYUi;y0yD!B+uP3M?bUPq|qG#CfCwreYLoDHS+$ z-I+eR@hTDFDICT~rsQ4!woS@+$l*<*H@qz?oR_B!>th7-hn%}~;7FW@gy2y5GsOtb zK?UD4f=V-lO=+XSLZiwU1cA5~>;ATH$U#+8DfI~>*rE6FFO-$3Puuk`SD2nt33tk~ zxsY;?Du%KQvgy7g?hK=yRAGIXK2n0JYw5IO&r=}@|o|46g{6CXsteZ*ZU z;y@5j`o<;*KpU^IJ{TVy8(cf}!`Smvg&X!^677}!GnHG!UF@&#m9F79*ovgqgLgXE zy7)Q2wL&l2C(v%u8QPBl?)*N6{c&7b& zCr?#%vvu~@t0a$0_Jb=_OYyYybt^j_D1oQF3c2ja?a>dV=5%@;-B5*2ya{||7yS)4 z`0UPtC56jjr)|szf}8NKKHyTcoW%+=9HMO*>;6#k&7_AT+xTPN;MjY$&ZBGls_+G$uA%0nGRVPR;TO|8_ly{f!z}`u z6Ibhj4e!24VVn!WsCbx8f$OIKMaee!?|vI{Jw(I6G_iQU^m9Cto}5t%^UUEc9UVc0 zM}=#uUui&^Uc+i7^J-=)is442;=9o|tYp@F@A6!We3t(T73;=c86KG2(jO6U`MUR1 zebZKpPBLITwy4~MO`_h;{w-vB`zsf7+B%B=SV#MiJPn@iS20zRV~k)t1U@GFy^E*P zHgn2q!68i(+cP3gLKpjrvd1wqg24mX+^wRq*o218G+#wK3U&QO3Kcs<*=*G1g#Xu_ zLek;3JG10ZcYXMGamOD@-<9X;B82Q3Cn_95;cmK6!`4h*I+R&hg;ur?>{pTb4XW(n zt}&CC)=Lr-|HG1^AWcET8C>}p>BOSiukqM~gH07O&(p=^{gV8`y92{03Mu$);9aBx zBl=}i(0KJA7SG9VJoxfX;ad@Ub>B7lp$~-vrX5mFPdrK}QPC{$4eE;EquZqu?}YO# z-JO2Q`La~+IHi>XPk!af9m1lyNXR#IBhj)KWtT5}XwG{Q4QQOVg?h#I&eJ$Xp ziJoXnBp2waWc1Xd2)_$ol{4AcmJVhBGK3h%;N@rdK9wU7N8(U6`FeK7{MrSbJ< zWZ6D#M9hVi-3_2yyN8xR<{xm1}HAU`6FTd9!2he zhe2M?W|)MMj5_Z;qne^6qxEv`t(;{9g`FX(tcogsVgA=&LE8$u^0QG#Q(qiO<&$^4 zFKaE6)o2XUP5n@aWL5IAOxS|J5u|T(Hpa6ntEh^RNxtPP^^adF{8|D0uLI?tg>5Yg zhx+c!3?=6DDS3EW)4A)bEV*#{v}%im2Yc)<>k3M~$oOLCAC{PMd%H345eO?;#zYUG zJJI}a&}*g#kj%mE z6c==_{CVQj2U#FUM4M%J&-@u^pbh=;CAzmj)`=nYW zRqd^MwM*+aTpW!?k~2me*wSn$3Mx5Cf&LZ?<(kF0RV^c$jCP%Wm==@dVq7Fsf6Br* z#|(MhNZoT*_)zUx#f8~po$ry}h}>M=v^tl19fCK&iiug`s)q+}(|m=<0@N1YzNvnLB5R5_igh1vreg&6=yI@aypI06TD_%A`5AbPueLs( z;Z2J8X5dM$hs^WFU0wV4=+`zh^`jQbpZc=o(ke}W6NA+(*Y-JtbYBNkcAFp0he~l~ zulRadLhsEfe~I#{`<{kER5@39O+KPbhuLD>T=kp12T%cGupKGqXXfa1n!ID5yQF1DvckuVIyVc$ zi~ivPgl>uBp~+BrJh^&kEQE`S)=BcT{*7i(?CX)2~ZwbRvc2X~vDY?=k4BlZgJ3hYGLcI(5 z$+FvIGY6ThWZd9Nb$YXIZGZ**PxWpd5D2Z7byK=rUo_1MkFC**I-J+FJfhU!#*jat z%Y6>R-vG{$f>{J){0(_6ljF`{t)xWwM&9%v>O~O>t z9V&jQmv3D39QU=zMmR}LP+E(ksc11vz6o;n#JjsP)V}MZ@h8D(SkEmDCC(*2t?e|k zx+@3P)i*Pr$BNdx5c36#23C&4b?c&?X_AP!)W!vhICW0+m%{!<@{U>@6!lI%sx_QFQ zBxUV^ISaC1dZ;$NXRZAAF4OH`&Q&+S6Om^HdchPmVF@m{N zp1F(>b>!(#$I?qKzSh>6N4B6@&AAfm`NYBH_>1IY$?TL4cYEx6B%#*i%O#Ui{I!^uCn?sG(c*=3^B>SL;ZWp{$0oJaHP%pU@ zKQin+%q|cSSVIPi%wmg-vK<|b#XIA;$ zy>#$i+ePvPh9d|7f5KB} z^UD^G^N#3b-IOK06i~3aUd^LN9CRpq_v}BTm(2cFUvQUBl7?$?L%YIeCDi#gfxURE zN7i$~cjHBA!iW9V&L;^s5}Tj7@>AJb3SwxtH!L48|T`L20do%5>~ z5+7KsX&9gX-Sj*HW3u8+jT$y#^G6d7e8{S*^KtHi*n)jYDEwaMn|pn_doh;6-MRTO zw+R)iJfpk^1S=i{qasZTF8NN+ByJ{cH)nT!qG<`QH=y2{syEjp50`vyGJNje-W&CS zqyv7q_Pz1^$zm4nC!;_6?0wEW$5Ao-P^E+Jk87#Ccr%I0@g9{4)BcD!HP>+QVjJ^; z5Q`@{hrWZveqX`+zNENh?v3*n#%yX@=hz6rt+C3K{2u|LErfLX3yr%)JAvWk`I4BW zYt2`bSdkz5th~+?_V;lEKiS|=FQa40n>@8>j%f7SAnmlZ+q9Yg9?!r*C^h7*Mv->2 zPnmHan}!9d)tk_y{L_MvZh0iugw2?nytBc`fr>V1${G9Fn`h}RTXUUX)aR73vBX7N z)T@WM!aO)X_dA8B@b1H11wU53f>p^{IC&h&MmabkYCnubJbmMUF6~0$rJHei)SJ1n z7N>Jh>=UnTk=-h77gkl+Yr$yo2&R6o2_jO9YHFXsFRnjJ46`~u@Sl8oduyIEknUPK ziSwafd9ecvV@ zHy(i@&?WV<`HQ91z&ew;E^wR6YpQIkDakriw6x~l1y~G$x7f&QKRgTCs@P&};c%g3O#% z+wp8I9xRKQwwl$^SKZ*x!RE$Ti!E3|Z_X)+)@E=R2cmfwt~{jyMi&36^W7c6h@6p* z+t`?PXq^@~c9-5KIS=2hp56YiqG4Ud<)U-?=`)MzlOI%8TtYa^_Kz8!2u8c^j%p(3 zB*QYyFOac>2oEX6mvgAm+{kXvaGA+Y00$Q4+hD`ytUpje@~rgb>90xz%Ji()Ufg5 z7>Ds;m@HW=opF}uu5(-K)Q6+0*$WzG>z|_AgeJ6a$gO?BZHik?ksB_v0+9_X+JWpi zh9D;&t~d*#SEwDugPfcsYu3?U6y9592>Txv@xP;2GRL?%6 z!*cIxvg+_nVjMTVLX)s6HLQ23^L<@HC`xpNk1iEP@OzFvu~Wg42=x~w`v>JXr1_O1 zr+Gq3iKIJ*tVuN!lY2}1Evl)4e#O!3nn8kJ2J*eGQdTW1m=|5coQ%>}9pjwpx9T_x zW={oR{IyjNQJ0HrUm-D$Jui!nt0h{K7oInVDa)$m7qYaxZP7+HYl^fds>;5vt2^Cg zOkSKX&Tcbhc+KHa5Z)9EqHMaQohf zi*~hVYS^2}94ZH;*fAUKnZZQsS$NcR5jwWa3I1yraqrXShO}ZB$bYWAiG#5`y5(PC z6-?x;5X02ttV68-nazO=qIf@4NAc>B+k_*^`SL}xET4+g1&zNNQ@=T<)cLr~$cJ@@ z`7@%<*)`6#D!R%0taSgcFn5}g5kdW>Mkw&_^OHfc6hHe6xFG2k1gUMZ9WI3A?@ZbKjICwvrE)sA&1Dg-Bnx2{IHLZ*{&Ou_4{F|0>U_D{2gRH^l zZGx+swo6?zL)G+ypC4;p1mRxtJ|^Yd;9XQMss>KcMhP6|cxTjFV?goRcdjBUjE;-S z@&TRC@!O#fZlp?Aq1#3-0~1E;p)(F0*Ox@cYPEB62B*D27L08E>da%O5P8}QJAKJO zI6S`;8l7<|iZf0Z6FcZ|oyEqEIJ~SYD}-<~ZZaaoVNh@EVTh=h`-=%roKOqRg|y$H zC-WGA=s3X-79@;gGq-IWvo<7q`9c2lKHF>xOcPW{dhI><@HKZs;jZvdo+;#w-WRgh zN1@3V@8*!mi!Of7%>Sy1rzmP8{pvWXtP&Yy1DAt|3Rg)D`Dd;D|DzdC$Pt|cNMTo{ z1p>QF1P3(GI8n4%YerZ+NuNoDXTF2q{Ei<4l&kbfJf^+==Kx?}NYeC_PAN9KUwHx4 zh|gvw31p+(%)a*)KF!E%qvR1*O*ku1{ublFQ`4|T76S*b{Dr!VaepEhE<9!{i(hc& zAp;t1!9ybtv%tX}rB&fksvZhcbvu2LVjtGw+#H zsw@x0>)c-*?}+VA_;UmcfVu|hAiSIcqlbEeI^8Nn-xB}EuDj`abjZEbeG$`L2_gZGzynD65-ZF}+iOZKts zUZLkTJqPWPs`NM49p~ZtC<|AQ{pNTXYc6twhpqF`$g!tQq3t$-R{-`%BP4+0g3BMQK1e z!)JQhgQNCmWm|VeUX!1yEu2)xs;eq;sSNxWYgHM(tp?wtpccbDv6qFy_Q+#-!RRQf84!6OYRacT5*y`ktnoI@K z=hz|DWATEo9ku5Blq)}I@gtjhS}dM)4KtXVz2}_~EC4n3r`of@?MJcXK-K9aL2Im| z^C;;#^YAk)@>f<8{U(0wVcIl|UCW=7%pF*jDjOIQXdV0a2;C zT+_?rY3C|6+jA-#YN2}TOZ;8kvr)SZ^aA^;%IFk`%;?T;SmzyjrquV#PC9XR(#EEx z17NqEc0dGk9U0W$?{KnpVXl#E+nDIr7(qjX8kMvro`+Ne@a0R0x|lotT< z`OyVS-?Ad8QgCfgF1X1iRhf;ddzL$GK`0PnX-{q5KY^!Ovt!8&j*qDnt^oGIe`6ih z4hG*(VMLUNN#|OkvvlGY3*N5#X*%m;6|=NNG-{|sZ@A>(t(e?gMOwlg7p~gYcQT=O zBAF#)i}t%j;qCIq?JoEadzP#2+3mwg>deGrgg*|lY1H=*pe@$_O~5ccsX&L(RoRL@ z9YlC=Hh(PmjY&L&@Nue^Pb)fES45-jhR@l~a#i>qrixv}?)->+MCpWM8}W7XY40aV zhpClfYB&M^&FbaLCElic6L($jop8GE*P+`*5z3Im&%xI{Jk1<#iWM>2 zP)DBfa6p)1gjClQt0J7i^^BHA-PLZrn^6crz&HIY8o4orGZ~;7lGU>R!qpYYWuyLz zKb|9%;*p{B(*gJ|Ps!lMLQKT}FWxi91~U#@*YTl{CKCp>P~5g}TlLH&(}@3Uj>*XV zQR~b=Gsql^e|l)e}CnnYH}>f zzqb!!WVIuWkdUI1;B$zA2B5CO^fwmiL!L_~R-x4sKinI0IU%oD6WXcJOzKVp>Fhv8 zV2+Y@?Z!>WjK7Z{`Zms|>HdWk>jPOwv%&;EXpI*Ws_LD_hl*|&(qtl$5!n&@Onwwn z+=sFEud69--9Yw)Jo9Ll#14Mr!^s(0jg|Mw74@V;YPKDY7gi_w=+%&7QTI)-mQ8Rf|D-NUT|(fBif&}>JNte5fA`OM_B4CgZHUGZA|S~mj#%lS zDwrr#TrSdo!ty*IW0cWCMb{eg39w&Se~uQ8ok+8GqVHc0tflY=u}IiTElMkiXX<@1 zEqdD4y2sW=x65|`6fnbt8nUMvn)+_#+AX^nk%ePwVt3l_PThXL!<-nq)ddoA_GC$9 z>f3%M$C_ed2!NdMp_)BDPyh}{xG(P6?)umyz0->QbZ)hdOY8VW+H##&hN)TKw(|AZ zq)Bt}oV{&939I39SxB{nF<4{(-m(PzniT_p_*Qw!7m6ga!o#m3n#xqfE#IGim!9*m zXF_~oVv(&U&0ylLu|gG3sYvuTiiy*XjuYw+l~Jn;I4p-PFc7Zc+)Zl%_(R=3zR|3rjG;C19MnH-yo%Y(wBzURUlEmZ4bmnoR2zz{`bq4nFJnUW*t z;U!Oz!`|DPD2pX|wkCOa(aSJY#==A&hR*>A?NOxa$Lx`&hC1<=Lmb zx#q3+sQ?x2cJ91D#!lui8)!e&-LP84rL~6ec*|I5!%ZM>J_D59@anWP`R=a}36`~= zc3doBFkE}M&b{b+fkndpB?#$TV{)D}X;6RM#RSSdFMnTo#~8|sb?`!aZ|Q}xl-;E*Fxz$3RtJ)j(50B(SHkt zdj}E3!dIOpVFuUz*XQmGSMsR;eHtc)iBzIjdXF}cC*$=7elzt$Z%J}+xVTa_ z^2XUrmMf}Xeduc!5ZW_rKc=8it#v@hOM?^DmMY2nqyTmjUn}-)#NKuVfYK0}0^YjI zqRR_EhBfg4>ZImPzWM5^WSy5G?tI}^t=&(OY4&$?7NlZ~cl_n-+0tw;K#oFoI^iHX z$%jw*<$Q`FiHV99bjXFFjKQtFf7qkfAo=pU`kvF#%JpF+38$q=&i4aW{OzD~&h;bn zA^3CnTfag>BBgQ{Vdmu)fqIv>hwjA`GnX#M|4h`|g|gUwmB^!3IJJF#J*JqIoP>(d zzFuXY2WUNCvl$XVzk}-jEgN8gI>jqXUwv z(n@l7S$MxN1~kB7M+_yuyQWq&%K;4cXHyd>K2O9R-664!PE5txY`AC-`jeG$)v6AB zJ+HgD^*xSDKMTZc#TrOC4fBLvvJH+qh}PHRQ@&|Z4vd*BaK{DL9Y}e5TMcm@zw}Z+ zcC-lNaXL(=no4krDTE;eJ10#>kdQZyQcJtajiWTS=YT$tL=e@R6<_dw2#NgDaQ)@& z4RDnW-9ti40W)r1Zk_!z;>SfyV+|XjNhcf^KHHpnCcZ6mfSR0dP(P5wl`FU&`nO{n zE!5N8{q!lmj8g=EX6jF8L+s5bJoW#@IUzIFou9I6=9T&r9RPW5hKK8G0qIZH7Ib8) zszCU|D(A=I3FkAH97i$8?^%EjA|r@-zYONxw!o-gNowO+2OWtZpED zoA0-yV_Sto(&uzs!uB;y*{yy1)-lYAP`hoGB$^VyrW^utAH%ZZS;M%m1!J*Zmn&fW z7umHZ9sIDv1d|RkOApI3Y#grYc#T@tEAm8En6YbKPYo5SiEG(k;xyJT(bFzgkoPT6 z3Q^7&T5HgC6GZ`7Wy|JD-+yYC_I09MId4<0_=j`~xKvIA?a3cA(6e>frf+9hq|>Hd zFdPhU3V!C!j!Vkx=KG3;jSQh9B5f~&hu;Tg;ASRS&s=>m8p&VlcArYQ6tk_|MdN+~ z=D1uOY+MVaU4dd*rQe*4FYgS8IL~M#Z|PU68Lbasp5?jd^3$gO=6plw)H@JIMCf?gPJ^Jrv zo7AMlIEpqDU-<;5)i=|4-7#v^^&MxZhY2#Y(IJHqQn;_7md>#ym>;5cIaU%`8_&_h zo>XF=%#&U`cpUg`b=~PNHrtJfu5fab^zKpsb)t@}6gX7mKNSt*1LWm&`3suo^9b1^paEKhwyj^O73eFwnl5doOg&& z1C~HaEgmt|mwF7~V)<99^P+w$G4=V_YPAIDip|viT3phI3luxG`sd7tBPICjZHY54 zdj<;x!fZDS8}4k!u|w<$&rqj@E%7}kdsg-@4&uv49!q+3a;0Yw{4Ys*a}W27c;-vdqX&C3I03_C(2GkCf7 zSET;UYLUQ(-L$oMc8*Q&M41QpwgK(0_D0HY~>uQ};KRdO~&S#_cqpfe?@;U$td)lMQ&vy6y(o z7O5Un?IBKBZT9hd4k$Wn=w1$X@k2aJZ-B|qo?sUixml)lGkcIl=jn_DF8sqW!zlhP zIUd;q?(QXnFdfyBg4-K4q7_ywxP>^vhGZ4v&-mgzz@=GWs8bacCL- z$4n0dSad2U-@VuZ<6OkeE8GuCuQvY7#nHt_RJQrGU-k_gzsE6SUE|Du*QHtGb_Y0J z?*HJd8g7tIr`I1B{5T$fL~ zvItgv{I+Y~uLG36D`SyskQIL2&5wG=adV6e6vN@<#^V;_+Kz5RdpGaRgap<&Z=HaQQ@%O(kUFaov6%#bT{A$e7@me75q8;n@ z@C^K&7xQ#4EyBjY;L0WK-;?iZ!?HZVF1~Xx!*br#{)l@0HZSoY@<)X&aM>o^IZ#hI zOr*H_JN=705w~$C!VpU5ibnf_QN2nI$bN-ACp9av3Za}Izwp>X3sFMJ3e?9hVrq}} zDQxVPNdCpwFt*!}WM@)KXGb|$e0h6Hp4`7(Xwgmqr6;zVdCF~qC}z6gzZ`g zUjH`OnJ0o@Pqbbo|4Vl>btqXXqYRC~%XO+N+kWHs?}S+0h9#@bpN*nZ|Ng3_>bv^|21oUUuv%RX?DO&T(rmUIu&*5&qJxAc?Xz*WXm; zPml~l#a!%&dAi92)}m_fR}~$#<*S?haj5<0X@&#EL&Qv+|1K+~+n=Ywb60)2NdXjg zPxkt~nnuzB6~!nDa`af$>?RUT<*q8LuX z!}Y235&PNrT}0x4Cj77?>)YWsL$BZTH`Tw0#~-T}a9fa<0sY4#AeE$qijYQZ+iAUaDoQ0i|WN*==hH+d2Vv1!~{j*mIH zO%5bT5S7b|ejKJZdZSoxKAKI?9Z=G`A`AVuh%VZcOwKGANdAgdW-NQ-Ue_Zf#uVa} zEHhjVL*X-p@&;5ZgcY)C=chP_8?7CA#{KHZsgJp=oB*5!!S)Ls8L^jf$ST>#P|Zqi z9N5x;lyrF_4+^qwK>^`|HLM<;waqwcFxWz!XBqi8L_ptdbc^3LWwUErMVnIOZyZOk z=?-OGZOinW#mZXHpANwF&GqTD$Uhx6b!A@uMa7VCMF5r z1(UGzmHaA^QmiC*MGNo@`cpqic%c2Fm-Mi>uEw&?6N#&~B$A4lqZr{b9jh)$sN1-Y ztV4?(-xH1+vQX=Ao;}&Eik%#l9#mGOq zsCL^MA1`dAji7i(gdiIAG?OhW;vz!A!=kHd=qUQcBuS`vV5anV(z<_2;MLxplD7dT z{m#JLA2x#39}c^YMyR@}xiyTWwLMtJA{x`(^otJ`m}HaJcYPTG6@N*#7n9Hx&cHbo z#ohny@y~=@X;f?jm65m5gy@6prYo72=FML3M6p{zjIo|;2{lw)tpMXx*Isi3{2I?L0 z`hG|{x=s}ix~_xH6y3hK7SxxajhCMnY2jPR%PcjaFytUDlrPWX;!7uLH?8I3Pre9K z-u2kCV0>6{f%1?)&Jw(lt%Y{}eX5k(H!|NUL_mJkyzeoD9RL;?X8 zLJlstU)-hiKc}(i=L=x?n`VO=0Cu}y4EIOu;K%PxPSy#~7RMWpk|bz4Zrk{IZO%Y3YZa1m82IGMxZEs zgChMYgs$0l9=KcgD3Wsk(^^=@jHlWB7`!SW%s;OxHca;fw6c_Z3-`i*U!!)cyW?w{J^rCoFf!)u)K?pU~fq4kf8%r;q`}E&=sX?%Upq&Dz{?z2OA{r zhZ2Lxz+iZMKSmbw_B=@3Bt5axpJu>Ii+RMjPi%SH0SpRdP!&n|mFI zkJc~y&GU=}ufucMX+kiD`I&)DV=Bl-4}YzSf4=%=skj9Ck=|w?uIl!NFOUTyoOr%- zqR_g0vQ2*blCJ1y&FgTY_~UxjU+=KjQ3> z-uQF3ki(L$%+YsGKto1rTTJ?Po~3;DH-Z9{Z_Zma*&nyCY+>Ph{Z~z((`;HA3=dof zH6u3#p(cNf&ikvbJQ&{+DsUP_B5=e8n#|CK&s#k6REwtb0Kb?ADE2(ZZwh&a`viG< ziIsWB9;g`5V%dI;oLQHn7R9O;$M|8PKP*v3LE3STC$(P3{20}M+)1g@(t3F9;r6D) z>AoOJOgh#etgM@7anWy)72Wd&WrWKDDrhAdwB_y`GVJeXDNO_I8B$OK8Mk=Hxp26-kbW);nx*hh zII5D&0t|u#Is5A)js%3!kFsHTCuufW_Sn^J-l^Onq;5h#2%8>zN&oFKzzQ$%Zzc}g zPu8ZHcV#>rOuHTo=j-)S(Gr)1n2oXfbTyh?sj2?kVg4N~xO^rzh9rH3%+5X$0x+Qud67N_xda9-sfPP|=WabBq z*k2zmfZUfrj%ya;*~ruCq(3C-@}1A{27MWM+`Ta~(c7T5pJt-P%xz&|K5zm0dF13T z^|71{xzk(@&#fA0+5{Ql5qNyaj%diX+T27n?_zfaH&z=3I{`QodFnxpRk~0q8bpDD z_(Y}7I#fg;jOzK-2CiXS6k+z{+nQLn6ESiwcjW>|gGNKKcCz`buG6M7}j7Xw{5-lkavO)X&isrVBVjrRKr^(s4a5a+Xcn93!jT3=<+9rTahanl8I z2jv|$Bz;(yiEb)mo%GMW1NI4IH*`t@Vf~~Nit^Tt%|1KYlH9jFeG96A3?0o>hD0S{H*5NB_Ft|SmsgfAd2}v7VgBE}%gIwcodr|At*+tZ{YA7L{9lvWVN`cU95Df_X@>Hsfw-X5TTH+^P z6CROt=?Xk|3Tj1)jQNfY@--E@uKer}#5Tz%gG^g37>f6lq5+9|x3{g2>k$C4WpDIEN1g9d4{9E#R%atv)OJ4Ip9eJMA^L%Np&DBZth%~ zP;*w>A3Ux7M5$T5hS?t(1z{v?_o25=QM82)TNg-yUN)FYY6$dUijaCx`T}ahBkv)Z zAlB5qgX!8}C!m;Ip9&Q`9ztIfaE4ZXOERk+>8BvM^f$lCGIL1Aq5iztZdXc646e_| zT+IK_qIMyRn`&~U4eXNX#tn?2e^vh*H`wJqV7-X84+cS82Nu0g#3rXM!ud%4-1zs? z9TMDg+0%0z+Xtb2k6w6fA!@zIpKFoqFH+0cgXO%fIGh*!DOWQ5S?S^skY-XjB8X19 zQBk%#HQ=j)zKYYU$crz)QA4gbsFwvD8w!3UOCD!;hg>J#N&5I%n|`L;-sgzN=mdK?mD{Jy7~S3}rRN^$Q(u)9I?|(d{wNI1hhq!!Pu<`El_1)(Lx^07_VgqX6d*%{Y);u4r&2@YMX=@C}*-K%C~3FtcDD6NAllGr6m;y zDdRFe?ssA?c5zUy0-}hA@mlgg$77a_)tXUKS?e!igdTC%sG7oNK%@I(`ee9QzX$13OA z={uBthlAr49>t02M&zJwa#k&9Qo&55&{)#JQ8>v_3EL4lla=~{`jCI+&+ZN0!YvB` zj|(o%nXi9`DEfPzumZHFCn>a_8h(C=a3-gceCj(6Xuf$f_8mVvcU#atx43N$P{9N; zuBklsDeG45{dG`L(9yf2cCO{_UnKY@c5U@770u*mfwNZnGp-u)T8H{SuM#R6jixDtF z8y~{ZfAE~C>FBHzv(ytwphn=(oVndgiUW-oaqm+VO!79wXu=P8jau8k3Z$|1vI?lu z7}wIkTEFy|7xi~*fnG;b2S^9`h61q>*~!Z0T-?nEclr)k8Y-E0zPO$C6(L)B9$2BB zGh%||c-lWy%}SH&1S@BtR}dI1WMD`tkfH1M!gDal?1s&wx>f?NO}tT`TN0PD=OO31 z2mY&iqE0g&5>}hIY?-iQ)h?N+jB|jm5I$CuR)ZRYIYOgE1ExR1Ovwlkk7%gD1@uM< zlTCn4S2xH(x4;d6y?+U0ug&2ZAX%GN!STl$3wSEg zGzNr9FnkBZp9|Tq*bx*9x=kz!)})d?J^2G?%VOE&a0*fSETby@D!1!(tw3<%+%_UuB^Khlx~c_>DD>-5k_TD}k9O?16Uu+{Ld~kFV#5 z-dVbYj8YmlF&;=s`HihnFgA7+nbY}rzYN0sp#r^}ZAQ?s{ylMchnDW(!Oj;Efv7>C z^ck)(ci)M^w{4axpZU_F{eY|BD!;JrLke?J1}|1PCP0?Jsno!X77MNvD?OO>QMo=0uEoFOFN6q`=s zIFkiKDiG;AuyoG*KG2c*eWETo!*T3>IEsja)o{)`A9t-9LT3My)38P^73N~FDAr(^ zfHu|(nzt3g2vK4jRqpI;W#RDod8*afk&91j{y5qY6q1g+DhFAQEixvivrYatGR;M8 ztu|&1B)ozypzW}V8q77Ws%wHe@QBvfxz!(2IOkHY(?N-fZ!Q@9vJmAS@u1syqKl5` zSduB>q1p8PZBrU!JN2Im(Ss1Sqt@7Qe885fE{Np=C}CqCz4~VR%vdM`G2-2a4}rde z#}hHOhS}dTT`l{ZZ*=s}-SRc!oCw-!?{5k))^HGk%>?o4waJ=a zp`jKMWqM}TL=$%Z$F?_6Hyq`EEAXR^Eh5YmSLYIL4vAfKtpPnEKcCqmQ;3}KX;JH* zpmUf`zkoG`C>>vk_!4A_2^5#iMj~tQok*oI!IT63e%0VUc)V=9KKvN8KexTSo~9$J zJ4$B^Qrmj@0bbWDK zLo)U;*P|Caws0?f?#;OP#^$);#c4IQhz$90Hr*dw82h$dpc1eK`t|_A@&$(Y!e9fX zzRHE|8lJr4)j>s=T8E8%o%UuwhNbGh^R)c9{#HZd;%Wr}9{J4YcjMYDo-Gi6gj93& z7=wcED;tu?o0XOO^K?(jrYwRNVj2djFJsClVI~P83YyLOkBmZXxF+{> zOUesQYXp8&t5-CE>mp*gsWvO8Fo#oyv3SY4&X2k#mthQj+jV(Md@)9rzP}f!@TcA= z;-VA>LdemA%im zA0hb22s$i&L`JoH*4Q`=+Syw>TX+hwR~o2NQ6i#3<72Y*66f(5gp__YA)^ZiRrm8m zBiR~_e9dhAe*f)*lawUTb0e}%`P$*MLsB42&T{^xNB3u0=pJV!*MYZmzzj?_pAFhq zauX^{azWNYc?E-q#Hz$fvv^^f42&=e0zzV^ZEn|T>*7z;oHFRYSRBdc$7Jir8c@Qc z%^Nl)R_rGU$@(ApE|u4?_|ssOxg<4Hh9iL8H7y|LLKYj})Yu4`KG}EI49IM~%`_>Y z4t8`67g7&}Bxso&xO+q@L1zc@1iA!|FQ)G&QnvPdV=@X7eK*M-tgj)R<=8Dhp7&N2 z3BMaF-VQTJ0)97^i@Z8l2%pOB+>ZD$&FlK-Xaay9tU612zHKBX@Hkq>q=bo~ifL2w zCAj^n3dTdnEB|c`AZ!R^f~7g8{a2#@5l(-QVRclYI9dcGyNKs{UF>$x8!XPnM{N=3 zd5AyA7o84#6O}*{@gU;9vJ{{3#!n^1zRi2FSX@$yc6~M_GV^qX$L?zmxt!w0Jj?JSdWvUi3ZO3pRK&dNUV}VdxYl17hNdpW z>kP*?-t2h>ea6rIS++R%1W!~brNmZydf^_PX0J=9@pw$m^M)Jp9UWJXMyP&oc|-_t zQ%6>s$*E=T6HMymIynCv-q`??6=`?UbZ3418eUu(2=c6h%~z-!?zQ1kPR>s(%|2k1 z+wTZ9W<4paA!7%(6;u!{NMN&8i$jV65H(e5Y0iR3s3|f1NeLBxxsQ(@dxN=6n;Cu(djCd;R4JExKSx z3c$S}VJBH;x23Var-{}Lke?L^^w@UM`O0NkI#XJm7%Va6F>}4GA3uK=AczCwu`pK^C zjH$={IK7`bI=dH(^p%ef=ud??MjSMV5Ej+W%RFJh1~rsxpHyh`({=w!MD<@Qz{Kfg z!FVIY-dZ%dXwk>NG0pw>jsJ}1tfI*|mw_s8UX49L zf#I}jqao+CI`=En7@J>6;d>F*l2}W?A~gO{>d3?Nq^q&GWVZ*(tb>hc`g`vdr?dZ5X<@r4A zK3T-F8d5CRAkUT+;DyN9CE-tNGOY8gSpZ#|_LL1dUY4{68uc+~N#_B5Ck8AtJPC&t zMHFr(E^;Yc4RZij^6lHda=Q%NTl-y=YW#pk=vP>&W%v1dyAS_&;8SHg?{S&BnQ|Xf z^Q#E}s_t+crd(L7v^te*-6GqRzenL`kG2Jn$w=z+ zgsFDQCaZJ(YzrzX+OAo7!0xi4vwko-b3gOh{!T4Q2|Ve9?e<{R7lz~_a-euGpUpYg z>Pkgr?ixZJ>3GduJZQL$idq|^T&2#>?l@wt7f%?0h7Q~-)SQp%AzQylEf$u7SYV#_ z;kv2MAW|CJ{I2Q%u>NlOsv($=3r!o)#n~G7E9&}C(-wV*eBdlEIt}u)7COav#09%1 z%Ho?Gu>jSH-(IFSd>lr+X>oFQQ(oS_p1DZvUG7=sZCyAVgKBUuQ-sk-9|m21+oxw|1Pc5kNG?m`?yywu;qSH7lcq6K=GiiRyU-6f{AUxu&NY1DjKtIL4e zOtZ-LKhbv#=i&^WY--XZ6tq{-o=tbSq^XVz+YwB=tj4uU7K3X4jd?0pbWXmT)8cl^ zISCnAg{y(Dk`K%K&@oqsk*|-CX(fLYptQ*4>OFPcsmw0SVGz9Gk-Bp0aVaO1>ny%v zn?c{Wnch7-hP7CO{?5RKhFtl5lDhI*QzHFdt-F*w$JI^61YQ*na<}w}m)X0q$CwDV zKTAGKJ+$%V7);}$slCyDVFFJb=dj~~T%7!}wV&Iwn5#?vg}pDvmabAjv_)>HVoUmU%JK!uf$p*&lupLq zf&|dFfg;#N73TSwC>@D0&H!7-b~HV8lqK~eLJNV1WtRXY2&!_V5^CNmN$xwxBH1`E zg!O^`<~44w)_(D^rZe0MkJ6;oc;FB*K(VRLcGdQd;yp-PKB7$d;L_@wgv207*N-Up zQ4RtCRIUe#C3gYHkjxg2{>AkJ8YK8C00fAgf(}WKIKM?i;`_9jC+0D2+4r+4j6SRu z10^4f*8ghewVGh*1tD=91d<}y_Lb8@LRTJs5d zaib3LYq5#g5SvxH5!nGT&}e2je^)#_VeeF}jmuj&C_sT#g>B9IJC$pFA-|#Swh{G` z2Dr$QfQv}bJ`Gm+BLZA6GE;+fA)XE-@h6FvUh3)6&$Db+D--Vkp_4HYatFo&9%8cx zEczl@wv;?1C2D?A=oSl^`~8hVtQ5a=q7tS6Yq4xD%!arEzoY2U5GLgU+NGYCGuphx zwypmq9-IMB?8QjK~1jgWFYGn!q zRIgjK@cIf&jt?Norp+8^UN^#tb2c21{}LoVg+g@{BW+1IA%vtl?F}mWZ(rA2hj7b+VZ#6-Ab098YE;`pG*s!TLTw zn|e_Fe-A9$8Jp}0|R%i!bP7b8%Gxe%m`^B8+r3w>%t5S7@f5|H$VuH$AGeM*(KQ?Y!R9nn zt|FahC1wpyflI3=JnhV9lxCVg@9KubxLtsr5DcP>2cLj`+z>TYIfChL7GIq7=cp>& zwmrR)#u}PTyF#>;DWCiNMwMaXl>J~1O3s9ngJ++tz7PUSqQ|w<`b4(WY%He-=64^q zgu;2&@a6j@JbmHbT-!Iw6xD+v;z6gF>V07$(~(P|&wt2%CIj$^JBiCJxft1b&C6}p z~}* zWukf)I0G!X!3Y{!oEH)x01m;ZghwxCKWYk+$LyU0m$Z%}kOh`cgY_d#qD+#J`VaaRkHsH8lbhF9p1ULcUods1w0 zT=XQW-XAd+7VvyVE#q38+(k)2mg3d@Fq$w5POeYD&sHt~6X^xg!TftglMxgvB#TD? zfixwe72PPz-z{k4*yMF6{QjzvibFxPfo5E>sX<gMZmbfE?DwPd`~4d~n+KBWBFK)rWK!M^oXhN)VnDKv9555DL8}e|etd!Li7n0X;=)6cb3r4#WBkSI6#KqituXyxHm|1!AZxXnz3_2MQK zc%`>y;EIZE)y*v3{fgxp_;3IihO4LDCketyQE!D$ z*+b9yxRq^p-8SkOCh>;Ks(!wv!GnT+nioU`B=-7r#ATA3s~=-}p*^gPV1TlExbCYYpsva#c8&b>$1iG1jUEfffvQbWvV;^{V&}myx<-( zsT;XeKy4`4@HDYJFR4i{(uFm5G&ft}3z?O4E?_UUSU@sVEdnypoK z22Rq4IkALadXhBp_sz|$3u0vmA4Q>|+wo6r&3SN`cYG_9xr*R>>j;XDr48%1%9Os% zr?PpmmzdU0V@wdY!fkJ!hg2z3*Chmjk@~jkZ|TDAevM{SpAnDzDw#`ZG>}jYfVB+V z!UPUQzP2${_DNm2a&E5Aw}O?mP$xJ%56oJU63ET_*Y+Ft&W35%w?RAN2hd`M5HK;4 z=s1(%XgyqZjhNSa$uD-7W8MkxuGho^Gbd~*4Q$T|H%GzJ}TsID%vOJ$l`t?}~+wNqcPPR~X*BT#jr%t4NP{|Tz8C!H^YEd>#6U?(Gov|lMZDA1~mF7e;L!N*DZOwhJ?mAq9cwm zs6RBSMArm_M1>rfC9#Z0IT}D=j^+mwe1Kj8<58n6RDev~pXqmym5sZy$=_Z99@Mol zpQe;ACxlgU29A*Ij1Q&yX9hP3K}an=4Qx0s?L?AfTdU+eCq1M%W#LZW2I-+ z=UeaY9pT5LrWtM0sG(eY5iXQ%N3KlbAY~n>w~7E3_0J^aDcg<7B_E=l^9Z!*ZiF$e zNB<#Wa=^5P&PzXXmQTC#*?w+#J~wqeyXGtW&jaZ2VDAAZsm=#zEJwZgyzr7%W<0Y) zOploe3mvEIkIBv*769Mb!&FsJ=S^7XUw6;2!Q0iOs?4SbWn!w2cMCLN|sKCoxo=;$T00~3o4wd1(@SVG3_OzMo9Z;N&c?<4Vz#>rwi zon8K^YDxUAq?f;3G93ndaf?xBpZls!XFOki#ucUYTfV<$bqDx9?X>5>S$AYH4_3=~ z0Vf;H>32H9eq-?`!0FzVE!y{i(&H`z?dAYjS>(hg9EXa4l%()F-ZHo%Ib-(-7z%_~ zwcTZ*+3N(#E&{zOblhSluaOe11#M@8**0o~%#N4(m1f}jnok(9J23|dkMRf9BQ2fJ zvh6wYRc5p0}JaZM%E>GHqY`tcc4h*m9K}?tit?4!xP=S`MSRUKgzx;uIhD*mJ(1>Q9!yB5NT;x zfOH6g2qF#A-MI)6LFoo5K}wMB?(S|D4FZeqyx(%W&pG$uKHTU1+uQAbeY3_KbBxtY zEpJ!m?Sq05{hJ&xP)pbXp54J5%(2$)Gmz1d?mq%_-^_9{zMY>Hh4dU}QxpK@C>LaG zV1O7oLBJF2%mTs^5|cr){XRP1r|@i;?>8)OTvp$JM3^bz?Y&JE-U53B(<<*jx*n}M z6fDYjY%H|1VEqR*rD;r4eUc0=W1k!?6o?U5>0zAxX(;Dbyiq*>0srfVj-f&(G1X2ulT~{1^8*T6 zK-DDjaA~Mbu%E|vv-EbRYIN}3I`K%iA?vuV z)Lt!$zsXgm7~^$6VC>u}$3PH>%K%bl2E-NawPNrJH;o6-5R61su+o9Gn!u7nc=$5? zLj{8*Aei9@z|mH5?_<;xpMw+R%^58ig1zmIuSbE2FZ79^)3*D~aAk=iN@M;uFPETv zm5m4Iaj<#Nsxk$D_qNGbe1X3J#u}^q<4asJx^Dl<4Bo5dhsY&~Y(OxsLmq3%+kpgG zL7HQEkw2iNeu@GRZl_Wswehg=9hJXAUOy#+$-Dm8d2Qa!swMa76VS9{-IlLAydE(F zr{;cdSmwc)rx2vg(SO&m z;Gi!{J=!iKcmKNQdt@U$=e47}AeioP-g}*-F!!3ria6T{1#O<_;`)0FkobS(N(QVZ z7^OVT%XbfYS?>ym7k)qkTCKWCi<>KSwjefG5MF)yPd^fYJs=E8kcR z42R9UA{1=!SXbjRX_fY8NprmHiUEhCc*j{mWT9V>o&T`qb{Rf_ z1_+y&zjvQS=j!6KIILi}3zOH6>iPJ9hy4t-fV8DD#PmMZ_Q?3|?u1Sh9!Kobp0$9x zKiHh5@Xw`6C4Sf48iFvQ5KC!HgBx7|0GX(0N3Qj?3Ca#(eApPxb64WCoOZ_V*^ivq zb^a1IxGw6P7TAwRr*p*h3-#MFdj8N;{$z65)${vQ-Bau3DT1rn17S)(w6+W;SU2io z36=n0K+d82D>6XHYLz-4zT#ir^zLJ%{DRzKOw7O>YzA>zatC!x-aD==`|JoSNQ_sM z>MKQfW{rr)G3^7oMS8$N6@S-2_cPC8-MTa|#GfEizUDiiY46@-E=LLU0#)~UCZ@on zJ9EtM>bS%D59Ga(&_7WqAlQnyfFK2+G|?6|Ax&$sw`y^XEG37jS%dcFI)O1~c5#V4+W$09jJA=AF- z{Z6r#LHsm70ejN4!_&43e#TmN)dGwW3ujgrDd_Q}IrQ!NLmB|xm_0uV!h+J;lQ561 z`E*5E%XnJcD19 zYn{xn{O3W@T)xxy3ato!7LP;?U&EZSU)8XtH@n3Dv9BL>kq-Id)4&G!2(mLOfSSFF z4zIBkaB}FyS%d}~3>6U*y`ZdcDHlsg_BR7`(4`$+tMffqPji2~yIfqtXVFzr^B)b7)_k7W{1GQmJeaY@_b_J^4Vda5`iJ;j*C48ReNdd=$dr)p;S5JXlaxzFyp zobS5qiYXa^x(NivWy(JXlL~YLURn6Z-%^;=>!1x7b4RJr@c|Lwt zd77L-U6Js7?NEu}DgP$=a$68BoRupsP7Zd}w+n|1sTD#@vq~l$63Q%o2N-0r?_z`!zg1BH>g8ds07Cov!B63HaQLO( zLlkko%h}TPq!3$P_9lx2-ux#htzd2XAj$o>QqXI4bI{IP@S~$$l0P{@mt)Y==6&!F z?cSE#IYsifDItg##Ajka=C(EYWzYckN@klK+bI(En^)%S%cm!_zozPYsNE-D6*tFx zDSC?AKxf+99CFV6*s$B)ehln+3C9Rdm@L>BL+v1uiFqv-Q&R`B^_F@v%$+3@sHk5Z zK1bf!E}q@VxG8g)lbkq;fEQUT8%>-!Rq6GVjMU6w?6Y%@Ov4ndR!}*E>timK5FN=l z@d^tX;X(R|66v*urL0rn>7HdC|6oh= zTXv~on~?OQlN~|Pr{f5fTK`1g^xzz=^h^M!>IvVr@o+0EwkhX4g2=O}12(UIKk|EB zY;}BH3)p?|Bl|olTWxz9uMR9f6v;E&SK_~gn0cO!L*WYVHgP+@ZnG4E0WT%uE3y3V`! zlV`o-_M@+gjcWJOXjyqTwz$Xixb6e}*Uy%U%i8>pY40JYB|>+KvNHLniExvuwU+Na zp%*9paUv8jhTuw z+yEkrdfb6PcX+k1>aBnlqoh15SQS%ue@FE5M&U?$6|_gvw{@FE;eXd0&wyi2#<+W< zuLP?BaW^=Rcn!3Y@pZB@slCm=1iOGk3;p-M?^K`f3FvFqBtnf@a{z|O`{7uhLypx8 z%r-$M9mc&5^1puLVG_%gTdWC%+>Y8h2E;ZzmZ}D40q$cz!8+uGp;`)6LovW>>ZgL|MYQqU9n!RVwohc3D`W8 zGvwzNkRxt;@3p(fjqs!6QZ6zaf({iW+BkOLa+AGway)u${J+mE+D{;a_68o0j=aR%ZEI9F~9}58W@z|u{D{`2v*{W>4tnw%@w{?;x$DHj4iY-B84I3 zk1~Cw9y*!Hm>cs=U9u5+xRn`_Z-TcJJ>gDUNo)tuy5 zcEGR<&85bwH26IPw$Jx8^@#R~)bf<#R3vN2>MoSBof>T$O#~(j2T2pn!167va5+L_ z%40_uT}i6RG3syWMzhv9@x6Twr68lLFDcsh1DpgE<99)^7CwNH|Ew49P9Oaj7Y0gu zrAZYuZj?3kh1p}kxgRY{xs`rfPPb{k_Qmx{ue0T(bM~Hg^6e(coeus*4`lnkDpeoi^9DrkjZ_$jLKzGA}c#GF+8SfCoDITbGeo-+3 zl0f9HGB6i#s1`~N{3|90d#y?UXdz`*0?tL8SNy67N$JPL0ohQa%zS+?@Wt&Tzdva7 z$XknF+a9;2KcMgvTz6JJ>Tj$1b&tw_zIuMw{$n8X$aIqXJ;)s+zLVpTL!x$VH4WVP zno#4>SB9IJ-|pf!9)Xhz{`R*)LIC7_#=CL3NU@v&_f6|yNwiyzrD*8*6Gb-rmnr1@ z-gPAH!VDJi+0JC1GFBIDHA)q}8kJyIBm!SnmDEH;QCx{dm00LI;ltd^`H^)jm|*#i z?YAh6_gyE_Uy<%tfOw*xv4!*^G~_EwkGTQ951shDAIz;gX(KfqkELxlR<(kv4*UY1 zY;iyHAd-WX7?H}tP!X0SIZ~X=1xziffOCUDWO5Rbkev#JrhH;Kp9<@d=^-nU>@B`y z38xI>#zsy9C$pRJet{1Y+tclIYZa4^6F)B3SiV?jX*Rc2b2|qT#<_b+pJG=&j+tWx zhEo{{o^M->)JI)NTe-APj<{=rA@ zDRbdVPMS8ijgjp#$R z+k3tRX(_lq*2wrF{=l}QkSUQx@gDVzcWTSSkdT<|n(vMnO5^#cJC>wahTpYjw@sL7 zF;PT&Bn20YFKW;4Ja(Y4qL!{)&QeeV8m8E9KQrP5U@Jp2Xd{b|P#**xS*9D-R+w@Q z>|*fVh^_&{1lMxoL)E-dU}izIZ85o)*;~8j{)FW}1*g@Mcw4Tfd$Wk7!LLiMqb)Hi zf!RCB*HMtMwSR2*vfY#0^@MD|BfYlhCpy^yTSwNGiNA|;QxlRs<0QLkx0KswgJsLd zwvcf3h+8}Amf80I&Vm%Nw&2&0>u z9w@9SNbul&G7*xpBD7XC_rca(+iIr&6)t35AYJnhmAIY&5uX*Aj3xE$mn=V>T2J#? zr2Gjo`vO#wp~bEvYs{@4+pgHPKR%A*xtj6a|7`ocoE+Cy-%q0oUY3s;(PU#_%IhW-)K^ieL1xM%v(=Krm8Qb*@1wLgecEq>Q~Wb2 zR3$lfnRqz1WZ*ZKQVEN8!sXO4mK%uXO%8UijCG8RvTJ~s@g0$rYW9X&&3e7lyVi;| z_SbWMg7=<#d8j@|6-1q5u8s-cq+sxPI>J_Gz(}S1UFauohrPR zZv!Fi7c`jm*1V%KFxUz&v4Jd`LaFQ}yDFuj%9Y_--Xep;#z_M#RMZnF1iJ7J%F7PAUG!STMeb28tyE1*HSU zPf%P+8Ri6XSx8v4y!T*&G>_@LCQtz>GSQr<_Nk|%xjR1TNcK6}n)8nu>|Ok~3f_$( ztZ+zbaOwpPN%ju(g3xIjgIa(3@DMAKm<#RYM+JhnCGR)-|z(yuM_}x6&?k7n8c$3R6@QslBi>#LwW< z3A-LY#7U)mD}Oh`pxmJvh+`5GrVpVrptj=zLk|8B+z~ujuAkm~5XiS$@v)ECJW;0@MqO1;6WZ4>&$h%oJA!VQn#+ zZaU;n7WnxDt>`ffPQv|hVkP=Z`g_tbZ;VGo%ac4PuPdnGP>ht-_Rn}|V844JV zl7cSg(jbO=-+&LLUDJKeY-}o*mPJ^gCe_$m;g%0;YhoQQw@6m*Ciy>ZRvojnLtG{; z`JUIzaACIdCp}*3)bhY;RCScwIw9+4j?)cUaxm#`+&T#Mbscg9BwfolfcuQ?|67B| z`c{QXRMsGuuid|kK;W0``C@!2X?}bKd}SkM0I}2Gz0b)C#d(lY+PD%^aZX06)T>?F zYu|z&wY(;6NI+XAFZwcZ(y%+NKric#jMv7}TP}d_`;7=XOczqG3CdBwMlXuJ+SC_N zsvbi=bg^>POYUdZdNAO-(|*@=q!>Qy(6;X3ABFXYO0iD`_9LayN6bOCoIjle0TZOd zg&(*f4z4y8b!pRoY>A|+up|W+K)bfj0L2UK4FT+(VzdMN6uTz!+qv%bTf4my*xWnV zLC?&UkTtLy>2LiVZIom~{-?wmhxV9k856NMjke^gO}cm8y>D0sq|x;hq}MSbh{i)+ z^)~(d74>E_j3)q}N_o<}kpUx)#jo*~q4C+S?bqsTD=kE5o_RTLout|Jl8qd3S&)0U zw^U7)hdPjv>$jkIh@rzZY%jk|n!nmx-;b0yfQv#4>wSXn+C0lr1EDGIX?ymhs*B6` z=iw2`oMhp^>~Qp@D+o*%%2QIo)*<1-#Yfx^TV(R6x^(UFEsW5AnUKp-D-aIR$!ZKl zz{Ami;S?q3C?nu!rRrcpqHsugSi*93FZHyEh%u(REujPu>+(}XX(w6F z>^kA)ofh3|PB=9F%q7qU011aDjXPB75popD1u78H3A!wPwI<)@->)ymVK29?pPA6E ztvp$6lb?PIrfO1SGWzBUod;-`wd=7BMHzb({#s9&*X|VE!N;g^L*t{SW(Jbp=q*3r ziEb@F!mGjebNuFf$Flqf;} zO?cqzsi7-+j&RKFM!$;|$Sbyn&b&)g0_%c(w zc}1HTYtqsSG(@PK_cM`umL!q&9j!Tnn-r%e7C)r#J)cHC#%^2fHom~bw|Umas5E>x zy&9tTa+34i*-=izjJ4-Uga-d%6)<54~-mEyt?QD ztz`%+kdvQu8+DXEc!=qqjGXYy4^I1zXQX&@5MBf51;9nw*$Z3N+j|a(N{jXW{A9`F zj$!Q4Am=){yCX|4(s=%6>#hH=j2Un*7__dsm<8=O*)iq_jPAMg03E&f#vUN=^6$}g zy|4m)dV)X68jRy&QGUOyh{ui0E=hTQbq!l4aa2;TrULdiC#^DgwjL?IXU~#qS0=2N zjtIWIlx#d@-;V?qG2r(88sG_OKX6&b1 z)a|Kj&?u;}=l09jd@=U}_yO6?#6^Du_McR;X6)|DshCD4VkJJm-hw@tO3k~V3jthQ zEzLt`ZpWvH?TmCrYBIEPn*{#WpafZNcuxAhC(|!h-GnMbk5;4#ioQswN((jdRt;Qo z-^6PtR@h#NVzyYXVev5zI%G$v-gcU!i5eDhT+qSY+N4*&Dj&rp1z+4fd3%Y2&Z|wh z@N?-P6Mb(68qPwL##6B`_i*fVMW15Bdrc?{YYKWAc-t4{(S^It5As8_I@ zGsCBjqibMs1U!PpNA%ChZ}x~$2P&L&psoxq;8;HBIff}wHv=x}!g-rog%flwjmU0Z zEyCdv0|lteC}N}8%U|p$)AA(77+WwwR{TV+UkODv zvQVc9^$l~!fayf+=fUcPUpLH9cx4$-_I3+?kccgAPzolFrle+IDmD_%E#bcZxN|Od zm4}SCHJ*rgWNtb;{5_>$`Jkt?B-q(3_e+C&$J&GRx%j@9WckFG3lGv2nP^!P@cWc8jCZj_GK@ z2Vv1~k5JH(9ZB{nD1P_&aZ)6jN<_=8 zTRE==6AV3s8qOKNCG+))4ftyOrGWg@O$BVo!ny0i{TKZ-bSACE_wBYsRFw1N*$+gZ z>R*w3Hh$)7?zu0|qashyJrPkc>m#o_(9(U*+k#f5ny{We@q)IMjkP&{k*UAEf|Boj z1jO`nDjS;uKX=Rz3JL5Lg!e|mL8E)xrN>AzhD+q?cC&F3-Q3axXIz$Q*a zhs`qu;})!)W%XiLx*s&y#w>1T#|b2MnVza`eLG1c<#d%*f{t3uM39t=v1s5@e6@)6 zJ7jkm?r?qBFLIx`S&Q=>Q+_Si9Bs(r`Ob0{3LI!hQV%LrS@z0;ou!9v!sCg@kJH3W z=ycTP&$MI{Cr=VMU=R((3fAaC(v^!luWqE12 z*y7K6L{?k$@eDt9ELZ3XjzI;XTBdz-I$vk67tu)dNogz#b}I&N2%s}_bkeq&&9b(60HcR*YdH19e>k6C`lgYUum6x_w?Uq`s z&YlI@hGqVsz>_yh@||#Dcm@k|8(E_W&fy1t?_mB8J6M8$=;sI)k$mqZGO5Mb>iF?` zj&{EO9kQ(b*Hhesk+pJ9gWd6^f{ciMI6CfhgU`i+EHpXB_#LC=@SwA3*^ZwH!YkHc zvup3waMC|7NIsZUAWJ|6)SuZSlqj3OoYYwty1ER17^%4xvCdX?uO0L&C%<5GsO9iX z5v4rpSYv*VzVh{yFv_P0eNFTO9=YP?QHFgi3*M;lDXA-Q9o4g0)X)%4s(gp-;U^FD zP(HKA(uDm4fw*_Jbb`@fi^O3z>*C98(L(Tv*{LJPb-QS*wFY_Z{?Pbd|4_~=jj~s> z7{j$1!d{1um9Wu^)8xJ=_(cKrNC@uQK3UXM1cB9U45;&_|IU}iD58?@jzg_+gqlC@a-G60b@xnwlK--?s=VJaMCn;PD5K? zzdI-G9>IOv(NMF-EO676g)*R)cx-ZPGO^H$6*6PtO532PIH*gusx^lQ7I#$@luwx{ zi_hOAP{O!~>8tIz4No-7a8IYm{qaAZXrT^)`|O|avkQ{rYDwuv=k)AVTgv`n%_@=I zF|rk?-LZdT-JZNwcAac~mB7w6;l^^UArsa~(ID}5LkHJO@mAuEU*(DW*I4VhPIWSe zJEu=JYL)6EpIC;jTJ7jXNx*vm+j)VkWs(&3EX_ry;~YJ)md4DEaa@jZTRh?c)u7jg zH&cZL7O_@rBoeh9(>ROFX3?9({mFr+EBhe^us3iILg1r!e|z30M5Pngdbg{@_27CV zHy8br=7u&05teFxe+|ZQ$C%KpYaq~zsy~ht@Z@&j9q&QF6cP@b%<&9erV6V&OyVF-|F}H8=r!A@f|TDXT5GX zC%_q8XUD_zJrC?T!d7IplR=$SuO{7I7K8PcTCy}q5Go};{5IgF-UPMl2G0r93DVv4 zWCvMKWYd0R<{MYfZ?nDk>miRC_C+5it2Z}qz9f_afH1T5#Ba_G^O1b0_N|C`5?%mOz#s<7M~(g)9K0u1H9OXn z$S4?X`5i;Q2O!3{UY<`16v%9-O7mIu6Pb8wyhhd_x%HHdE=bkCECrWyVdQvThw%hJ z33w<&JPTlCXCc1URYd3(C-dg(dJc4_k7PxgOL}A>_r4%GE>{_DVL-(8UjhR&^=YR! z8^~;`_6_7T#VojkdwFR5eo-T}9aVPHU>nFE>CSd93IB5hZ`h2(!u4zk$$+s3R&(Wj z(cg<-LSe)eK`;eqa8Sv7Ex&wzIEYI7qk59c~`2Y0rCDe(5jhVC>;lbg3dw;g&QbNu6Z@JQ1*> zT-W@DiQ}vJIoAS=Gj5<+aaG1s)%0o)sIKgBrBcqUd`>kc$%NR=^F^c3Cuek1o=4NF zSkAqjQ9v6I6I5eU2zw!VZ|FjO(|mF!uuQJ_60JjH=dgF(dxE8-)=R4q7f&hqd+0*L zB>SV{7T=^t78Nmd^-sb_rtSJ=tCjyWeLz5MJ#^vPg@Xu|R=6uw#|_eeb@gG7pC zQ*`C=q*n7!u6jnX0l&E?C;klU3#P=VmkY40uhBUFtk1zkGUcy-FQ9?AFA}P$ph`K; z5uGB6__=oGSLkDd^Ml@3Pe2X$X1C;@g0+)$RykH;-Oz}kaqb;h-`?aCn(obDWxHv+ zJ61a{L+LNf(e828cN)Hl(S(fdp*;SI@*CSvT_K1sq=v->_xV~OiruN}kIxgEZ#A4B zZfAAkuMmjGlw8ug;uGKND+)!TcBJwX6;Fi7z(o3swu%mw1aX#rP~*1PN(YC|DzlCp zY->3x<^TI$Cl!koPLuf8=K@93gOurUpK0y>D$bI^3EwG4UB^-OPa*`~>S3exItP0j z_p+W^3G7%4Cg49tnO{%C7a5lHZgh$H15y;WOHt4gMgumC4237Pla{6A!uxmv%3*<2wUvu}8W}CYV zVB+(f{>nzf>=jPb!DOK$KN+OW;k-l2YSW*=_f~{X`Vu0bLxd@^k`wwb7XW|IaA$jn zlj=>UYM>kA!H|RGhW3H8&ikKS{!pZJ^`?OIx=Xx(bb=qZjo4%cXF(#7fD?JPAz9Nl zkCgW7DJL=9hf1llDv|IGn!(uSN?C$Co}s9^c$+sc7~VVn{dLkKm3*opEaofQBgfg= z0;^x)zp)6{7Jr4&vM;4sEqpxebp=|+K5T!)v&AK%^ezi|t>(F=u~1*!w&VQAyo3t< znV-)Kif86-F}ZS!cfKog=nH6ujx{1-f8WO2ceVn*vxqoCDFH47-tx&qhfQ*xC{w1PC_g4_F53iz%HH!ea4 z*D@E~9FB*s;g7Vs#|tEby6Ii-*EkZ?*sjkJ9n|({&C$a1-n-Zf5{Z5lVc4s@Zn~Da ziyvS`H}F9K&be3r?iz`mPPT!|fV&jy`iZP7oWkW^$t8;`F_YP8&4ez)=T7Mw2;cqR zo;8Bfxx>i`5I!%_l?#sxWx~7oY~RH`u&Pm<;S@xdUwNE^7gP^9;7=inZWbXqW^#ub z2P63iQ6{gz*(Y7MJ6Nsf@<~uzYOX#;=Z*>CCaZDDdk1BPA9pAwSS<{_V?uo}1!vZ{ zbHTge6TW$^473eFvcpA2IoO^PCRQS7cMI5~Iw*f5jyz;DmiCqjbtxBGkTk%7oTk>` zZV!939YDAAlf;djM&qL1Rj-fwTMRQ651v2i$+S2HUB8;s_C02`E-rrtW-8>G>rW$J zB+RvsCCz;jW31hl(ZdNZeFQwO6kd9Z@NHySH7vNaCNr59Y~3my|<95|4KZ z5f}^RooH+tZNefMNW0q+hF-0o0>8Y!fN#D9ReE4u3WYwT?9<&4KX(dnCjGGauQ0i& zq0ha)DlrH{6}m@aj#|uI#Z6_0DWhaSQU0C4TdBn0uRlw{@9(JtOAs&ro^G5ma<8Hh)i;0GT}J<7$V;Q&kxDq}X>k2ObP%J{$W67PmS z7f1QzrSnzJyYq3_L;+^kA z+}sIsp6>l|u=VHSJJCls;dq1&pL}-t^6xi9Sz^eg!*mPfz0H}Pt>4;-zM((%C( zmmwB7?waLK;c(BdI=!LxxkfWr3mp9hY>GX7RHzRkMuT5ethdHD3Izo4>u#|58sm|* zf2Zgz7^P;s2s)_eTX4Mf6rXy{O@dHIXL+GH+RVl4@KKw20B_@7n>b3rop>8;&D}rs z>S6oe2NK@65S}2n*yqQQ7W7vI!i@aCWejaXKd(T-*#mTJwfpmn;{J|uJQmgaL#mK@ z8u%5>QV&79~INMmXWmcWd6BTSI;*m2}hi*YfW5zl#hXrVvFfk7;|K60YLB{*@Kd%Jg z*AnTFM^zmL^)?swy61W=427#LlQ77-igQR$XQhLVN^QF0jd+#xbZntrnY6cemX(H6 zg!O3Um#T;19-AYv#lX~)JsY%5Go|K~>S{6xRz#nTZ-NKHWp$~7FQV(}OMn1ctq)qN z>vly4Ar~IU;?!1ydrAV8WTUOf=*8^i0t#OR9C-KPkhDgqP8xn^QTHdf`d}0 z@m~T6^z5WBDnc7>AVp*r@jm!$mu<1V=dhcQ(Sfdk-jnhf;G=9!4xR{&qH{`l2N_oZ zl#&T-V)!_aeby((D6Ko;`&q`Ws~Xv`GnQw|#7>aqqT%sX-re! zTBQRsaloOEe%<#Fp*0-+?=KIU7h(SYQ7=TnuJnIIR1Zm#tpnVX`VXoXPfDiY89<`G<4lliJCF-iaR=J6+jX6w5sI?j@5&tgrzwy2`&y*xmcyKu zGr@1(SZjKL`N3r+(3+-eFpJgj3)23Oni?uaFg0rD(`UbVgR8YPgAP3*2C~8bzi3tFLY^&V$Wtwd}ZsZ ziNsRhht)1yPH=s_I|e@V7R0{Isb91x58CjlUVHYPRG?lXhf7a4C3;KKaRf)`v+Qd| z@W)-8l6QYD{^ARqhyr4HU1YZEj6H9Jh>Ec97ixZdp3FYzYg->aep8~O>HjCH(=q-S zgoMkA30>MuaZN9yMYO1Jh3S($NB1Qgpf=Ys(04Km34u zRTo8E03OH6NRFk3qc&(-iDW!MbIF7j(BpM8a|E!PXQ(bjAz!Is)j63~L}k06>4IQA zW8VcR4hy0?9txN zb@TLu9UabZ<5YmZ+(M$FkdWh3z)Vl3gg#W{VgGpxE-(kAJfHNN+r-B`FUe%41|Dn-sFM<1_LTh*>lbnSSB05w@2nRmm!FhyRiWyy>tOob z|4r|&zKy?nauFekg4V88;0Zkz;Z#`hQGP%LsXoY?rgSlG@qsd~nf0#Fk8&^cO{+Bw zd}j?|Pb}CedXxF{n(^%mG#ATq;bA$*_IIHmB-?|IEp5K@_6==V<*D~H{SgjzhVgTc z`NX;#_aS&C{D3D#NQo`%k(R8(Gw`Ih7%ETZP*Jme?WAAlU3r_P@T$ zxr6dar~qR?iz652(evEJH8`I8bSkllb)HqP@Xp7p-(FXQu8JjFV+WT5nrvH6JM66a zGrDW6I;LQrY+HctE?Zxr54{(vRjsPK`yn339e0IBP`97W8N@q#BhGs2)gh9W8^Dj& z%A8Nu911Hr3Rb?MDlMR^s@7V>SkIg7)ol!Buo8r4EroD(T?Y)`J4YEA$a^0dXj8H} zhi3<^-AZd^o@lA8;Tn7O@@poB*nA)NmGY@d{}dC*W$YJ49<%th>@5KX<4| zR$WQ8RfPNBXYktg`@vt=AB4!;UAC}xF~b=V#RK4V1=zH#gBb}~r4Oj~7RR}-!mjpr z^Cjke|fM6h-F&otW<;|4S`14`Y|IZSDjbXj*uqXWU(VDr}J;SH}{$)Mj`w4!*Eyi7(-PD z#-X2}S+NS#vW6JIXEe%{g}8mCsocww%He}WCLcxF(J+ba%gugBv4wd$ZB6xf@44)s zdJ!HA_Mm`sZ|wl_L9fo&ta=hFG>n2D<>nRi&Is=qgT#OZR4`K#*>Ff+Ua9C!dIbd~r_9}Y7?$Gc)pxWxQ?M{8Ivju1YvC(RC^Mta2eDt$rDCd%+5q%; ze3<}Bks{)EGS#@-opw+MP<8m-DjewJI0^k^jH-Tv}L|CL+- z?(e4`r4Ikzx|~0*_l;`#j<>Y~Dz2(!Z2;S%#w7&IuF{v?bXA@w7nDYOol4;!kP3Ri z5M?QnC_PNr6XlhX`{=Q;MC^kk(Cg^eOqOBzo}VP`ygps>r+?KyV}Cz-J?1mcnEPo8 zB*ob}!t)WhvQ41Wyy-UY-Pt63mB7P;rB?SqfJPkrvV%O(Ru$)MTh9r8b>R?D!s#DYwE6&pa5P{K4HWsleps&bZ%S9YFur_@WwNU=?urYnei6Xjxox z;KF6fD_{N3KkN?t_o1N$yz`fvjq0gkd{ZCA`bYP3s_DPOTsXPB?RBgX(D(>=+QA-~ zm5pxl=V9$8H*7;O7>R)H32OoPIL@!gMmIRVDleJ6VK`FSZ;N12%6Af0|6+JxGZ+ExGOD2NdzlK8@ z5oZe+<9Lc5v!l6citvJ5Ifu>RF>$T~scSH~ZC|W>YT_IwPdKUZyuRQYmMic)T~odq z--$F=GJJyzz1u4F+dqlhdMJ%9PNU@7vg}4OIDziqC{A@QKhCkMc>m;0w_L0mVzyVL zMt+&XvlMUl*OUn1CXtP>a(MUU>!W$8Uw=E=(L4Y8lF^Aot>EXfSj3UhKKj?1jP!p> zpso3GIm?QScfjZK#n2$7;K6Ay4pO){XsX|~7!=?IuCi^2X@I={x&zA~Q4}xe`Id{C z)zlif^^?2!G>1Rb>NyRvV<1P#tpwm!B|XCD?WUX?uXr z#d-*@0!yG+Z2i$r9o3Tni+zjYQ~j<1jq-zbAv^1cQWZcQcb_PVGy*5^W+@rFPW-Op zWWE8!%JZ?A!AM2REsFAh8u_xr^|lkEue}bV_mW5$PrOz{JhLK{f=6iQ_m6RlgkPo|LTaa$ZB!dVl%ZICh0lnqwhob!3 z;K9$rf|)tH7(j*5<0x7frS)cHJ(qh8Y_LBlddmY9*Y+2+$EuI8%2OX;zkVFUKRx~6 zoP+s!!QXLD$wlGIr3uI8oY(j2-H(ZwkCV?9jib{)Ghj{D$WgB=6Huiq286J!G!2E* zybOxJ`c!qa-XPWy`4pwKi?SdAVRvKiZ~S!4u_HWGtb^8$g#SXXEcrc<(Q*KoX_Bm^BsPd}iThUEn(1e1q6Hi_++>6h zwe!y4Lf@6KtAX{?;Z@fdWiO%!YA-J@dax$h%@$nV&yZ!qXZTN+3fMcRoBz>+L9q+J zetQ7Se9aWJF58~FLjx~PJ$+?QgII`=U)mI&uBdaGe4=Q3*&gTscm^+1m`!O!1O@kP z9ktnT#Y@AAq-3@pAnT7WW#r6$t1vPB?kgT1>!kSJQ6R6NmJsTd{_AV(Tf_r_(Icmw z@vZTvV*hKY=TnWaMBO~OvcII=kT3b}#KZ(4}!SULGyQhO3i{9< znBnZn_IWd9Z#sN!m#4@G^%$5zJtxgpYpCZBxs(d#j>Qr$#&?x|uZD>)Abd0W!eme+ zdZs$b{cF2DiK9TgL8gb13ium<0b-r(F1{w|*n3io*hyOOCO~q|euVgoKcBc4!-uQ? z*RSsT!~Z@EhKs_V4-@WhErIJc83>(ada}MC`LJtVU8k%K(P!q^p-2MR8VxS>C(-OZ5;Fuj z)LDN+CtUmaThxZO^7F>HqD}2Us46EhhThUj=!9H3hT2yoAZg#@HBf&&y1z8V;ke_m zTUm=1u$)zEc(1RoTB{oO#dfMxtz*A>wLILbgGH-1KE>-a=I}U!1)oacc9~~nF{D3d zmcsSw%OuChhj__3g)RDm{c|N5>~y7uVi*^=jdIIgansdkCHtMfr%{nk7|0@TkQ0I*7;yvsA-_CWgv424*6d6rhpVsKyN@S z@if}2Xtf)3PlDzlW}ha?+(UDMc`QMP1j`VQ6x**IYQ3TUoaG&4y1M^c z;-76g5T~_VDty0Xgg|njqqK?$x0yX*%9!K5IYvo3LqwKz9iwXYo*BCj5 z+&cmr%*(lQ`IngZdK^0d37rl#wNH698d@#l?PAhQ_tpr|dtPJ}Tz`|c;_#0EjnV(K zmrn*b(&lmHk`1Wgk1k!!-!#ctFIE-Lo^)lyA0K(;ldnt0Y`cn7jD=MfM_JX3T zOKv4>H_DWIoi(5)p_(yC`A+KSI`u*Ezvbw6v*HuB_x;=~H~Xyi?mepWb>rNG5;tQ> zHFDLbs^5^1)%)Mqij!N9to79ykP7LgyG4WndUi)covJ+n5V_8JC%|! zpj)^s*R_1PK#hl9Tyr@Ffp#}QYdyzOV6+-ozFE%;dc1Ig*7LpkVYR-+RB-rMneoq? zNdf<#Hq0t!%!TCof8*r4D&l<P2&%{1$JU^ITlc!| z`4jqMAoO!+a?{;WdL&>3&zN)nC#FbhGR&+GI7`M5??$5Dv}A4V%GxW|VK)yQU?t}} zlPf$lZ%pl=Ykovy95S@5--E#t<@FXet%xpedV!PM_DssCr@28<0ca$Nfuq25N?Sp` z;wa@&p30wkZTanmWzLE9=Ir^GOXD8J15%n@#vn*ZB1RKmYu0dc(;5bi4_J z>~Aa*{!eAH5i-;hiY^9%FXA0nMY+P?B!fwF(anS|j=0!9vaZgG|IAGU>|SBRenH1t zwr=&y@%*o$Jb7RkdpHjIyXdhPU;k$;SqzhlLPHat?>|KUo#~7Hi%NCpCh)>=EPuS# z@!XCweFAgN74@D3$gX4U@zw;-y65>D^5vX7H##4Hm?-U@cD>JUfF4y&V{}4-kbF)` z&!@cBUT%A8-fT6<@7|z}UZh1})61u%#-!|x_D){kpNjg3WDA<>1Vo5JYf7XBA_!au zPr(j=M)AKH`#KU0Ge6iY52svi`>&DT=sg539%Fu|hYX`g{-1pF`riMRFJh*)r>*>F zY=2Yy|Knj%{8P=9eZ#xO2%bJBE`E}PMeL*-n!N<&$vWn;a*+-!hO17Qs39$+6$!-_-{g zNzwdc$jzGj;a+-I6()+@cmqYQMHM)j`c~sLgU*L&e2jpW6wA%cz`JYh5~y*1b}=+d zKwqMtfd_eMMRDR)i-vVyI0S&Ye0DI&AXk+(@flolgRYDy^908>jT!Z@*cw7s4=DdJ zEL$>&B&LG9n9BHsea;*MefPw^v#-K*0>T~7)}2Ts22POogu}_E9XF$Bsj1RLQ@Is& zF2@!g{|>=xNaZ~1UQaf_v3}d*Se0AjL$S}nC`m~{i?wVcUb9!&a-B z;cBf!&%=3#-2wF^N@t;T(T3s)Ixsy#RVN59|2oKtV5i?f^rwNQO*EIH&;R;Fq$B@> z17EZlPMEObVA21=+vE2`%`0?2F7whgF){kvbf6~0l6ZN@^{kA+^@;$GWJ z1EU~r$gBnQw$OC&yN_8Ry1}C>%jw!XYoL!1I}KILztLT*E2Uv=etAg9j1xozwXB(7 z67{Y;>uBipPCb|GEmy)l*z3GrTl|qKndP$UTciWKL|^Z+ItgTzpePvdF1ig%4d1dc zG`U4bZlll$9M7|#&wwhCAv#+5cuv-WAT3BQ@2FMm`Po(>OZRhtZR7zXa8Zj`w>+Ac zibA17yeBYFh?%<%8{y9EXaOMEcDgG#0DOq*LG!uJt@7nX(`rF4w1u*h$v{{GFs*W9 zA|d_~xn^VKdC1gaJ74wHH~!@UIF5h{nSjwA)ECYH=PvV@|> ziw4$V)o%_0mh~>d10k~de^yOAVMtBKue**L%L91+7Pt4U0C8${WM2AakfWv9GDV#D ztFF|xBz|vHp3~^yVTtalSqXr0)_xS^OJ3kgdW^C_cq(wDpzTlf>TUNI8h)74lF;bF6VDD-FN4!d}UlBx8}S=`rW6&z{Ukw zj6Az!0*}owGs@b`Jxu-}#joA}2gowRbDvdgUXMZxusJ{5D{+}aA2aFWRu!#xta0M2 zbM4-);wwfyGTrETm2mz;TJYxRSLd!&G?j=5x(iX|a=+D`j-ZXZEEu=!oiTFb+URano zLG5UUD?NCZk3VdcsIJERsX3s%u)Hor*BzPzs2&64D_dDuMyhAtE3x&5#Nxjg)jMNK4m{(jn5_A)Pb85O)s; z&v`%GFZX`epE$GGd#z{vpJ&Z5K(>&oU2zsO^lwn%>3aSo4w$@yka;dK$1gkmUp3ax zqn)I-J-D)34o8=|P5WA4c=jRu>rS%5WGJzY^{-tVL>)emfY3{gDeb-AF_6d-#n#RG zzCT~sUY@9!v)0Ls7zNKo@}W)s=tlW++qG>YjqhiLNvnq5KfbMl){u$df3Eg9F#>q8 zjvr3ILTqyJt1sppD;{A%C^`zZDY5gHY_*j@crrNg?S%^@R$sp<)6BrT36(H3%Gini zjInd}v-euv)*E9F+etqq$!TBTCGyTZACh|sMge*>gecg!}y3vgAFgVA~ezs;09s?5i zOR5N>0A^6UKU*tYyB`@O>oB_o4vpl=7>wgNx(?ybkSPyjv6yOFRu;VwIj68e@o?7p z(R1jL``?1%3bEI|^_m74n(9)-^OhKw6R{{{E(YTVIYQHx=_CjwNn;ds)b;^=P==0Y786#s=di;IE4{$ z>Yq;Lr$c`{Q#_APr8xE?w+NaGpmmYKJn{dLL|*padpQ@?>Fk&>(<)q=-5!D=eD#hV ztE)9XXAQUR;l`Gdn<@~vH1~c5QuL+9?o^tHP4tbfe_AR13JOE#8Anv~KCQk-Q>t=R;6rl$tFldfdlpBBVbiX`V*^_sA zU*U~*SuXGSk+q=t#9`VPZUbiD&7qC4^r5E#7~W?!pdhS7vqc4cziUlxJ$?&I{f7)57d9Q}Oo@W8#QBJ&V-zs! zgtP-6d2%!PTCj@@fS6_cCou}#k`j8LHny8BgeAq6?wAc57>GFi+0}f7j=PioomBod z(`@=rNR89;ye+tey!t-qYXLYCFTQz; za{6HatuvLIuR5wN2P31b&NFWBnS4Rx=4478^Fv6o_`c9bcMgYamX@bGC10b(DY)ZI*ZrrxETRV8m~KRRdY@5Waj*8I zs^~8TC$itmd=A3_dP$gVg9YO2 z>DHIjbf`d?6NA%jgf&D(^1S1oy`<3ssac@epCNtSF!V@HyAH6-5Z>Xj3CEQtx@odP z=)8+&e%TXib&wTApvI*)Rx!H2(l1;vjVNyJMpk@NRi?M|n(_B_<2Lu3Tw-u??35Uu zoqci~T%rkLg6a*ql|qAQg-IEt;ABXsz-@M}?oO7ZK0dt$`{7MDdaUt;OERgMI#cnCMxR-W0u_O7vD=PAmm{=5)vt0x|v^O6nhZpzN zBVi(Z-22@0e#fOgM3(dc@A~qeeyc$u9*{HHwEV6<_fk49-GYdOe$rw@=8cu5e_d9K zAHSnt?YZFV66M0-r2Ru=Q6f zo8tt)ktB$o(MtWZJF#m=TzUvb8zC?#*_%4*t#NpUO*YoR17c%;E&_2H4}k+RDY^E{ zbGggfMIQke13f6zhyfosSd4I=xcMhW4Nk57ddAD$F$F=39d$w5mVVLn^KVqQ1^DE( zk6PkigO~oU$!#(Lu^_qGsHOHJB4Sy@ob)R&;uaOn9k2YBn^Za9qc(t&`7QlERCr44 zEqEed@%hh#%=#{mog2kq!R{WSZ+>as8eVX1svxZ+2pMJF+jTLcPzOJpzkd~cXgl|( z2k{*9ne~Jd-}C9{#-(Lo9q4W-rnX&2qfy7a??NV&CCse#P(*8-jQ`+3iR7^hBD+z;vpoIf%EMSGo3aPc=vf!k> z=6-qZ`gqujy@O-1#BD~x8oBdSR03B`nfclVyvi}}g+q0fP$<3i?6M6|rbT(>9$?AO zin8@^vi?&*qvcrqCQw5k0SY~GyM1jXYO4#dM#O3K9YmE^Yg~h!Kj+4Zh2R*~kbD@{^7x&+L9&Jux^bFELZHc3UF}Ctz;ad7=_rD~W5^t#06ulLP9J|yT6me#htQWUth|V z!uZ52ZLq$5r`%?cYjxsV`?wU?A>sMtGlrVW7gLy&(RuO5FQA~foYBS~&cW+l{^|n` z#K2j2F!PP$uV+_FmkynVonL4!xZFl&y+QYc~++VtWl-MJzO! zSbH8|3i}W!9V9EZIb|DJ%BLUzYSSrdYD;Il5_H2^?WNDnDt}1in;0?CUx)!<{{jfA z=cC#P{W9r>>_JUd>55@n^VtfsM#^w-pz5^o&H!@ZkINP`$_tMSRM=kanOvF~4HU%% z-f&&AU9Duv!*wp;=wmFNS-kst^Y`NGKYovv0D{;35$eG+;_3ct%x*i(1@tz1KxgU# z<4NK){RGrvua8O7vCB@V=g(W#!ykTZR&3P8tg=qHQA-LQI$O?T9MKRZhYlj24twxh z!`^k>cCk$V0?3GBU?}PW!Yy&opA8SicKxz#G;He)_okffQ1D298!5Dqq~2XSu>2J; zag*y3E<*m@rW&~dfkQRsdeg{!?}@+${}SvVtZH7%iMLC)b)%b3Ls+5ls&%1T;mWU^ z*H=R^zo;hNZROfi50YzXx}&p`>duj@4!U&zjxz5gFcD_jRQc#ObYJ|k+>a#u*XT3C zdmZtTtVsS+MCAGBD}D6ip;x_V+bJuQ*d1BkN`0fw19_&o%)8h~xV9+yjE6XKb-h&Q z)VQ`;68zG>VgTO@8@sf@rW+DU{%hI5_bMKBq5i1*_Gv;Q)%tgX@rIye|BfZ2C zU7q!j5+k^>&KL8>yL&>Vf)~67%LL=^?0u=%G(_DH;jlnolb6dN(rd z*l_$oJEXK|<7~eK^T=dMh0D&qVmDa0Tdei*QhHRo6pszgMFV!DJmEJ3{_&H)+DdaNgis*>%1*5bc zx|krfHN{kmU;O%RrUfpbg*zWn%-4&LuhVUP99JP^^(H4$q-Z$tb>K(Dl!WJK?!*u7 z@~?)U32GW7e>v50hfcPtE+Q}ut~(}h_-9!lBy9Hrp5WU_4tb6EH=gYS<%8hB=~+a)x_uM%pq5WrwR9=>uQtSLvM}r6?5A&ZS6C@$ z)#h8`0at_5F@A8@a%keAv-#_c7}|ZB1%hh#1aYO?hVwkb6V;ZCCl@x z!6Y`ED7E_FSNO;S?#O0CG6^Fq%K?rO4}+_plE$Tw!uZ#07v4^bz1x?&vgR~CZ+*+B zS^9wgKZ@%aluM@|;V<4`#1!xkU>}Y_ksvo0C-5&Tf#zxeAn&xD`w!yx=U1i5+}1gZ z?+eQ@g?sGtRS$-%=G>d(L)DXN)e$?dR9)2cnx!YvANfxTCh)R|rSwYxBLG9&Bl7-E&+Qn7$K1CtFHQOJO|>vJ*k-#&~i)9J_;rwqGMd$ITIpU zHtdU#F}@g>zE(~_g`E-b{IRO03cq7JDf(%1+!;P9yiv@(Yp?a+?@qc-T7nUrbGn3? z@a+%XN&A?b35=bmOdR6C5oR`(W-=v#IMv-;O=4|V`odwxxn9Hw5gZz4ulBTJ6f#vi z#*e@Xkd{Cp_QnL$tlDs!X+&Tl>b#qrHy%qr4C8M!D|=Ki>ap+!gibgK1AVg+pr^{% z?A4Cbvu)IlsQ~h{O}8q)J@%>E3YlDK0HowQ&yo_W-gS$*OWG{mB;A1X>kID(-|iOt z?>si{)3}h)inA4BzT1MSP93lrCc5L`b1*+KpTvtlMFFX3Q36sL`bgGG6aI&!e4T#w_$0_(FZw5QGTQ&m|@%WAVy=?^Wm99I|EKsP6Y_?PZ_yg;}>%Q4=dixEq z>4X;ohACtvE(?JLdt;FZL-#EOBHPxyQ@>qbe7X-TxadtoJ(bj>O!o&q@y+?(j4xxj zM-@r5+CtO_h87=gz0*1k6+e@I^9*#fSqr0(*Kn&D=6`R#EIQ`}coW*9gs!dHX#cSz z1O9ecb7%;HQt7%7nx7yqn(VWor2AOSV6gEeME7LD-wl`e4v|Jd_x<~d^49b*1yuKmRT?C7SAEH_kG@Sb z*av(@lWhF^e%Bt#>u}r|=6mOt7_ra(KnswnK!fy?o&-oX$+)5ML9FroatH0++g|E~ zgC3oIpUO8w#F(e!|Vw64w-*yc~{|Ttx&F>}tk`49Rt1{nVZvo*5HOx%ly^{VbpU9yJf7;12 za?PTwE>Yu~u2dunZH3K&eoBR@M%K{vkSyTDT*8Mo ze3Im<3swNhb`p&Vtif;?s2W{(G3jn>!RowQ*nv4lhe6Gb{c;mC$M=y;BkDcx<@^9IY!`wO#Nwa5_UdCHj zmMxS9e=H2LRbqIUy_|9VZ-pg`h0}O@lXyya1VP$>D zyQbTQ#KrpVe-uPHLn+mmk0*pVkj&Jnb!cp6Y8dRZ#1`;ZWxSRY_eFy=s7;plileT9 zP}!Twdj%ohO^P^U{R`^Em~&GN$mLRkFJ1wL$Va0vvZLSgOj zr^^FXeYh+SnVPB3K&yV|R{^G+|Kwry1p6N_@vS+CcH8W8(#J0V=7&YdXg$Xajk?+M6be(!S&&`YWKBPrmuaMmRDU3&3a)m81d zWjnuRmz)8rHQFrIt0mM#NWfxInF0Kmg=*G14J zqInMHw~EAS2cikG(=t<_aDf4Tcie`U{bM!5`GFj3se>sXYCT_T)zT?)iP!pS*rZMJ z)^&+n+bl_|kc0XWM$f(b<$jjYOMlQMne|A9mpe03g)kmcq-NVsR#&sSVOog@W>AzQ z-KRLc^;M#~aI&n__cmXF%{`)Y+mVq5JyIb%t?E;MVxoNt#|MS_Rn~{tuR+TJcAKi6 zu$YQ5@Gq&A>Q!@tv$$I(0bP&&MKy&qpuV!6s$W(cSu$F4ztgM#Rdt^Fn6bA_f2w^9 z-8sbv*<)`?+*8E#4c@XS$2zvqEb6!>oe?>su7EboZ>5DrK8YE;vMnVpM6!!|4-$Yq zNgKBf+dAN3(c$1hYW#Olc?DP$aOz;S2%#Sw@Q@^)CwU$M9F-iblpCc_aq-^a~_wE67xff}@W zs%eTQaUI%9t?SaGy^SAhOusLF)SbExrl10`o)90Y$D|ZXVPVJeA43PkG=SW zEKUB7rAPm4X(T3pizQxN46y9~BBej{c(NJw<2S$H~%2Pst@DA8yh@mj|YIC z*?5JuH2K6=dQW%1m0KcZrn6NvwrYQ~E9;KlHJ@nqO62y8dG=WaxDeXp7H)AWkpd&K zEKfT7!)NJlE08`0a|)%>bk>YLWDQHvOeHwl^__v%S-)_5F8nXUZdvQ~PFRHQ>N3@jk0N%>l4R&Kq@ovCb$xL5-%Rilypq?4~K3V#+GFY-aQ_?MS zJ-svOM_Mj;n9&+h1bCG3Eft@TOY|ECBUA%j9=0CW&|XW-?&Hc>V^s1&l=_FiD#_R zDLPjZ-hjA=y6TX`{j$)r`u0)0KjskyP=Xg7>^8th|gjAagQ((Gm0e)`J-6lWNmcf`7L>d{V6Qx|?MMcu8Wl=G5~ zB>0n)flr-Tnz#^m^V<8iThBDI3CKT;*`G6-Zp!47k1BuS>$gg@_3(Y;d-v7>^Up2g z=`+eoy|9>i^0GB)j=TC&N?s`u%T2fi!&E~5Q&BZCASrs-F9EH*e_b3l8-pEV^M3(B zbLxv%&U*DFvvmEnn>Co@Fh!5!;$D|toQ~T38D>gc6}0MM^V+AF+4-vEyFY>QuqptT zh~k+lmBQzBOy=RfOGg?*Uqn@+zkr~NHqr6j`vT=_^+#=f5_rTtCFmzj&&||2KY3I1 zyRJfKQ+&?;wUELIHyg`V|K!+AI-$i^KJfg}v$A2g0$s*~Mz5XB;COqA6%EVD@V#3( zE_b-{C|>=t4pOus z%$?6Y>E9~2GUPk?T2t?sIa^2wGLbi4$-Yc(4FsvmySV=D>>h`szZ8 zo=PSs!RvqU*)vC1_k+Fm$wUN3xb;9t?N{=AX{D8+wM{Q8ywe`)FNR=3iH&R`uu3gk z*ov#Ae#d%LoxvAT=I~g=i91SC7E5081xQf18dldO$N98NKOVubyL26Q!_e{#z~b`! zqr&TCoG=?&S}1}J?>0UXT`$UjDg`o2OAE_n;JMMaS;O>0eGJM2-5-eI??Z_RCs3&8FQ#ew@;BO)0xdBKqkTw77O-dL5i!Ib#Bwa zb|QPR0&Z3_^v^c)Gzyab^nJ4q37QSL-qOpLk8TU;98^RzMD~2sMY(vbZ7O! zt~Yz*?9)RJ$AM!4mpFI5%tn%E4wpE4y-LQa;fO2EWdx}L2i6r_+)!KkH=_qlGx)eF zKw1zCiyBx1>(xr`i0s{77#++Xk8TAiV4ZZ-HN}WZ>#*`}09Mi^n9L{i@MW@7Uc3s~(`?cc&4llmoyS#KTG>pJw8-6)y+USlR6xUi zxKce`n_ud$#JmYxENuNT&f$kq^cvMuuN7dyg)3W9og~dyh~jVw#t5ebN1f%C8Uv0~ zdG7}n#WqMu8>v=F5Ma4TO1zyUv;EEXP5Dfs9>2USBf$wjw7GsTi#`7isdu}IgDy?M zD`0LzKSvvt;?4J9tah;qmy9+4_BIol#a1f8=iLsb44qi@fGYCF4l6ujwQjd7n}g`y z2Wv`uy)3*Huf34J<&;kH*Qh12r}M*x1YG&G*608r#V<@ldA z<>CToa;=)QUTA&%2$x>r9nMW`9w=Rn{OCL~84S6MD#}P`*ag>9je-EzC1e?cPt< za`0oFi^vCyg>&STGjiJVxaQAPwbKGT)iUhDqlr6~Q$B4!{L^cZ zJnmE$I#yDIr#uIvIRz4syxH7wVSo5qJ-YVv@2Ed$CURkCmS*1d9}ksa?{OY)p%Lk6 zX==ln2KfoNq=<))(+RwC$zk_0`KWLhtXlSPu`I&cIv_>KndVd`qL@LvBjd zGyMqB)rbJD0O6v!2*uBBf{$ss^U15y3POws$m5=B%3IrwbNNd|PbvT&5YSJ{dDOWQ zVJz#%M2j*^b){*qqE&8?;mlGZm|$Nn2azY zBkorrYLD~m^%Q!_I2Z-OV9@0S#b=CJ0h?5Ll#qb4Sh&A`hVf0Q+1lxRMONwNojHTy zOxQ1umS5BP<2~sN@28p-uktYpvAxShQDlV05IOn!5UZ6>eobucY_#l-TWlA< zEi0S7xZ9jt2?ic@!0m}d3~yF17>bbfG9D@glNlerxeFrp?55tPEbQAsW)3wuOZ6!*HY59Mobd?;}hebQw{`0AOe4q-U<7)@y=ed+x|7I-u}13SQuz4upR7T#vl5aG`H5e}=o3uJM)Gr9U6p z`%uG0Mh*o-W(I8plM|(#&~h2WvJ)s8O3V7rzjhyRFvhu;S{S}!-f;Jv`VkdgXn-sS z?1{@>|6=~;)V&b*ozlwwO8vF+Em{`Y8bptt_328CkT8?<8$Y;}7?=#S=V%KK*>}FF zTL!}+jZkjhrEGR^QG$l6`BA!~W%5V6JTRLRji-k$-BHIP4uBz1`Kmz9pR&h***kQE z!mG?@>iai@15D$Xiwn3n?xD}-?ta?OqGi?3**d=0^yGKZBQeY)j54Fb&?XclEk_3V zZh0W2>gIux)@@9zX5Dg$CqT~M7sZ!T=vs&Dw>u7*BU9I1UW5aAxlDNpKk zBF$H{=ue&xho?XhwQc^egaL5d^1njQO*iI!a|`Ma4*Pp&YU$XElRFi4u#PxgC$Rf? zF&6b%N*C$J;9Y^5T&}~Rv7W<~BJEh|ySz0K!1;{8;llZByLBhAvwln$0%mBkj9H|7zD)|7o}filx1N z^?b1rdcsNnX3B_JZXeV137@kfboutn*W}DPV&(Ox@rXL=G1C|f!`^E(98F$pK%pb9 z`P4XHM3*=LpY9O`W_b)$@wiUU^L>>=O0vj z3mprY;N`42@~yy>yAgK33Xg27TE^tvFA+JPp@w;OFm>>2jY*Qh@zk2 zz2hSQynEZL{-MSvv0cC<8-@f%`lqrHbN7*MV~+a1Veu^QXKOhzgcYB^SS{A5wh}A2 zuTc+~?WQtq2d-X0v~@!yro5HsNS2L$*qIbkG|n3-1++iV+WBCwA7VdXUjeHlo9Yq-pXbkhJJuA}l#u z4M}B>CQja@aOJcowG~#rqWCOLKGr`*s%}8MwKItY`4Dg3@Vum{dUv(y1XFIW zZd#5pF8Hegqtd6(<`hhzv;Ze}567oqi-FvgH$jb>7nBCIoz|On_9)Ib)AO_*X;H#3g|ab4c$w&i}h8eTi@E=>@MH!s8j#9(73>ZEHczB z-fxgwT-F+fmv{k?90LCEJ>0Wy{>O6JEM0oRSe)HVz5?R28Ao9XjHXgivE#sXj4xlJ zfC3Eho5v^H#bbE#xhtRoOzGu|^J5M#n3kNU4kMiD9^%F`j+O1hCI3l>``qef!aT9t zO1Lz1HkWYu-R9};xT4pa;i7bxy=}Epdax0mzg#TFX?h&Q4gU7a0G4u%kSv31gc)yR zHDHhiGtxO}1utKo?CHmS(MvCB74){TET=7&VY~ItK-T$*HZ*$w;6wN{)CApE4^zJ* z$5&mOfv%E|k8O{kbzfeWPbbmQwGr@f3~u{7V91hg-<*%R6Z9V2E@*qo!zSs@m!}Jel*j&jy)7>G2zAe7ZGEHyQYYi#&#s*arvZYV#Avt^$b?C6vH&Y_f2t?AY8b| z?Bnfj)g=H@8L+AWb?Mx9-uJ&3CK){p2T5qvGje!Prged~c{znt5}s}xeE0S34?iP{ z&>iIRVk$_ptDVwKBWFU}Z~9YYe8p+Z^^m=K=d9a?kR-mwg*22WR+zrVtzuFZUQ8&k*w+gVz%-2H1*GG1_?=vo3 zB{7ck0Sgz!5A^cH3+|7{aI$w~kNtblL14y<@3k*RB>6AHN>U8}!cpX{v>`74IK<{EN!|wVR$m{JB#th{Uj)kNL3BSz-xMI5&o3-8$D!D- z{B?v!U*oXqYHHwaF+H|usVaErFEdwU?YSE*GhGgdq!fmI3N=idXowJ8F*%l&BQT2) zE?^&xD_>OsIjz-?MvF~@>FN7&?njJ#CuFRTl;UZXU;kXPoGQ!Ei6|K`Eii;( zC>sKkb$HF7Pt8mRT?U#%&+fonV3C(B>}1kX()3)fb6EX-w;-1{4!@1Yk*>{{7o(vm zU$t|dv0FtHpK$DSY(i=L>2i-oCrDVvVayfV(5u813(R2b$|U_dP#NHTjvkc7D{PE3 zF_Fpt^1&3?r#$h)NDSa0Vx{LNM6dlmVq;Uy5_VcoR3+#-XFnI zHEAjs=9PQnqbkz?OSHV|XU-7^& z)MTE-g}Saj$1N0r^6k{WvY*P~7^S7lBvxskG3qb~Cd3OL-sp@~dvgn}6b0PNYL6Mt z3eBYWJ0Al{dQ^@>%cqli>xWs(eku1?ZgzM2>VmTvpe&e7z(MQ`@$n|OfeHPvUc^L( z%UKgMLe>q^lOh@J9jDgVInUbY^KFL@D7%@G9`PSn2QLYv0-!<&2HB z!sm_jmXVT-#e!}^QoZJ|^9F)Te&Yl@=#_YdTef?euCN?D9*wzs2+4BEd0A!nG-YBY zJl$?eZ(FTsZ!~%eGtkCp88y+b9%59A73Y!a&?;%rlhULOSh8!)&Yyp^OwvAvj;0 zob$AeTA!N!+N%svqWGfiBPA1<0792{5wvx|8N*PBpb(!v2s_&CXsCr+{2>2`3zOR? zqo$_i#9RnOhuTdBPJd96L>wCOtt8c<#BW;I`+8vce`r&6jF)31P8!`j+`d*ozwx7M zm?81Ky)L}+Cg$8%H8DitgRF zCq3F&>VVhHh_yFui z<3|cuWuP7>KCOii2-Rmf%Gu_P)3_JakNsHVRs>M!AtCTF^AHm%o52k{OW+G$) zu|ux={G-w>9!#Ts<7DOB+VdVJ+R5Ez!-3K?w*Mo zNXai{$lDMZe&B+j{Wi&gH1CtKLHyy$aoN?V$;nK3@mu*gr6&ak&M{>kfk@tDN|w zbO`#k+NKJD&*1cH+b;Pb72JBBKHgcp+`c2vBn?boH@CeayCu!ERtytgfMI`jm2t>b z0&Kc>>R|iC^?W1i&+O!L{RdVQRAU;9RAc^0ATH3k##W+HS|K2s$#V41A$u}m8@U=! zT476$vR78i#JJt(6Y#Fvr_Srp&mjZXgcjP}fz<>1hXN%@c8(4pPIs^^wTY?2~XacU@6@K0Z}@k2WkZ5E4%^tj!>X9<|4?DRL0v<<`c#) z8_j?T7I%aiKJ)+%Y`kMpK;wd=f}4Twq}S*%@7^EPE`g2v-GP#oY#+156;To4I!HoC zcJ|_X@v!U$+mTq>jS&H9$)K6{_S(Z?yq_k}*4p6^*jG#B_)pq2SFc>7>1#I%L<`43 zV3)MS*o3@o$ueR#ilKV91y3}MapY+Qa#z@a$tYzXfUp;rPO=?26A*8&jVzbIO3C5h zcr_te?D@=+_?EHu!oR6oLQJ2H*!zNqQu8C1Q`ZK-l&;`s{7RiZUeRn=)&*I@KFcBq zO?3rz4eL*H6`CDW=xDwJpEm8?auH7YWg}Rd=gMxt#L^J3i*zqv3m^vojwRsrY~`%V zPDqn#Az{f}s%LOc)sD2?ALz0Rj3QaUHU+r8IR@YA zZ1x+{DU8TPj8BUIo$V<--5uI+Ic;o}b-(j&+{x1dylUY8)SVDD3~yTj5zpALdLpI% z*GE&fVFEp-?!2W5i_?a{De#nG*#U!`?o>sI=;K{} z)it@1yC4jida+R8M0+ucsUtyvm+F6xQIX#5q5qM5@cz|;!1)@&Tw}|>JYNq!qNyG` zJ)b)uS#o^pAjQ9ct<_q2=@6Hc(|ifnrBZarh`E>{ zEO=LVLx-n*)FQI1#O;@4LOS>KzMqSE1IymbAp!1GJeWNhB9g={fKxYy-Cx$!X%qfw z7wV3P(r^T6E_Vt%W@G~eFy+LN6YjqP-t;{KQ`NJR2Pxgx<9)+#J-92(gj1>T3Br!J z?#$&+kvOh+_7yHi97zgFm5DoVTc)0pf?6e2dAyTo_817uSg5^lUbu3JBFkJoHwhi? zs+-yTYik%S=G;K3ehreER#o&YU-S-1AURbgS*F0-()_S55B;eRoLDCf@p1p>Ufg`O}R$75Fm|8Q7klmMy>?ksu9lz%di1OmSVI zLx~V2e&nY4JzSll;dbuBk?EADEXRraU@q2&)wH@i{ootXljx%#m;1K~!I~iHE5%QQ z5b9rvQU0r>;Y9qC9D6ZFb>gc-iJH|Uy z-Fc^8!V3SMd)JT7J!3!e6?27+K#ByiK{iokHKT+XajR z*`klQfaTs^rMhm>j_Spy;^B&s)>E4k$8U1Gg{^CyC?(n7c#!W^_7e8M2VNyhGi)K! z!_NyC&H7U&;|iFMuhaw-=?T2=*bd$&%*J8Q;^{_M+otC;Y<5>RSp^uwT&1P^YPeg? ze39w}EV%E0Kf$)YkOuWw6rVhvv<5n&k!sr7z=k*jDALj(wgkyN`2^Q>H&brCI1Ok^ zXuvasgrgp-bp2)r{M*>kooh@bNFRU`(JFhqWS7RERs&nLiLc9fIoqB2V89Ir-VW;LoAgRA#PSh~mLc=#-d2@3XG}-i2lSn!ZkA;V<*8P1i<+Vbjvz{BX~e2i zfwvva@_BzC6`o`m)75&ka~?_wB3YQ8<-6B}QO?Sy_n@Wn67Rya-#ouJYq$9M?l?)U zSb<2U3`tOZ&yh3LhbTbTC6yU@@5kv(IrBn%L`Z3v2|##yn1?dqy7}pzZVqAsb$sPV zV34vp$1B9?W~;)4{|W^{BD2Srg8MXlK=Bi&!+36i03qe#Ls2j(0V@<7INGbLo=t>a zX%^eLaE@SHjK~-3{~54^g+QXL6P}S)7Cz3uG|^*T5TxikY8OUt2KKg$jZSPUwnQF? z8&2j+c<;S0A_$JqO;7*Y9iIbpB8i!IK6pD?^+?YXPl9~X0+t7EY<5kC>hh}(pnq9_ zcWNfOZzQC|&FqrIi(Vj-C81e4nppA?dp~7i!)JQyqd6~3NA4z6BUZuWy&tq?x+kb90OzXmH(*}{@OALxRLYCbC zHP6B!&-UeXU^HSv&qp|_rsIxD`zYMv6yEF^9sg8*c?P`F*baW9 zDG%eR?{GL-nx&O!_qg3LUK1gGRSJ*lC_GKV#NJy7Zo|@Y8!Odfk~Yv$TQ6GQsor9d z-1XK~*hNF6?A9v^WI;4^FPE}RK~9VJJ>crf8B)8IkTR+D5rf&@`?P215#5Acpz>;= z_UbFza~IVw_hV=-S!X6J`B1mx1(DjcC(8eUX#=xTAr`a+jP2|X}KIZ75^hH1Z-4{ES)wJU*Z-w{;jnucy1N(jNsZ{ zhEP2rMqfGYUvPedE)Il^L?Cscr|`ASDHl`HpIzZEs2=}#E6NNV{uniolc?RGsei@; z%CxiEn-75h%-??bb{B@)LVjj{GK}X5wG#hkZ9au$Pr`&-qsK6M&@Tj@_UmDZ61C*xG*J&!q_DX<)BAw_s9oTIF`Q7sq zFa-wmc)faeYEjE{0adWAflLdd@lR+G@C+98BinKmcq2T(B#yi-Yty6bHR`d0>hMs4 z#jtM`8uD1!)k*|V&()P{``847=<45OwHuJ%+aoBVs@K~75#J5z2 zeNdM_7^y%?FQ5QcPV=UCA|p`NcxIaGn}OPpgWS-6M()XaRwP4@;N>|R`tO{z{3vS~ z(Km|z2bA_lUsnjHBXG)WNDYuQE(t18_7V-TJ(ky6f|bVx5~>o9j*!y2=-hFCpn{0N z?3anv)<1WRMvCrXIamU3<`Zh*dbIazBiy8)5oWQiPuT#bIV^$qn2Bx*bRRGdGmL9ty3Fmr zjK`wzrtiag85&1OnF4E1T-PQK+CSE#of=jKQm=-!yWQgm$kF?M+O}$mlCMWj0yolk zM@x9tlQ2(^IRFrXtHhOld$ugnDWqZV-%es4p$#!Tz%HFNu>%*hISh~<<&*f9Pr;<8 zQ{FIhlv+#Ial$;f{}Uuaz3-Uj=@oZ~HUAr_h7Xvj&vhu9`)wH+fd{}y6z6)dx;RMS zy8&`+$g>24aqz|Q8wyKIe%IU&d?M%ITn+SXV?7#9GS-udS63hLs6&5?;BJih(kbk0 zL$L1S&&upzuA<>>fD)1rkM)^WONdQ_tbY5I-_+if?{?-~XE1Lz60hxC{Xq83QQMJ` zu5#QDMaTOLSUFPP`dnF?3ZzZ~5uJ%nwGsBbQ0^T}MyQAC$+o?o{xAKS6Eofr-D)KM zL?EiDWumY+408x7o0M3~D2_p1i3V^hJqK12PG;1;g~@U(dNFG(ZQOI%HKGi^mvQ^) ztqL9a(aUK zteA6439}Ceqh8h?A9RCNWpRO?Cn`T{+N#y&-SM2jno|zc#kku?3FJ1$_dTD%=+*TE zRD1h)jDr|*VbFhPhFItLWymuzYBE9MpmDqeUh5HiCTfSKMCeiQ9-`u4_bh(o+ieaa zwDQ>j0t76=h+dsXP*z3p0_5{bA^T^y4a!$ImL$H?iAZf`)jZUob?I$1B zKOpqx%IW~|>1RL6TZ?!k$Pa|ZURZcHXrLD4T0{?S$s$-La#Rk(_*K5U@Dq#^qx)EC z4|VD^%=b|a=U?0JuYQVWv6D|#BL00=CI`h`z!H_#2nc(IP z?a0vkSx@7M-n-wYGvEagw7+N4T>;Y81^Rc~S1&(So`+ILQMuR$QNxp9s4pP8d?C%6 z$w4mp<3l}7lvc_#3la^1=nJ8z5Uo|7Z;yj?=)it73qO$Kzs!ltMvx8VY@|?0G~`VC zPyrQFV`QT(jFg$dsKlN3*0@>nG@z1xi1A$Eegq^-{J#X5fDU8dwQvFUe~d>=xPVIw9NQZLeg~sonk5M1^9@&nwgS=6i$gnUYg#V;MaIL%oZ6%tEC)q*IlpcO zwPth!|9k?{DfcJXMNqlpRH>@oJyYBZ^92t|rIGrEP7PQP@Q3anO<+d8uSICL9tlkH zo%bI9!RwE=@cWU){jx%c?%#lzf!sj&kAcfzxEXV0L-qDfvRyRoy&^a zNU=J)|Wc>Om7b$$T$zGanY9~ z0VKTKswDe9zjU&JHTF1@xRf`iypZgG;7H-&u~x|1*q%+-0_XjM)MtJh&PkJQ=VA3H z^*gtgmJVP5bY$2Y$Rxr*vh=_Eh%rC6!c@|8=#zEY+Mu8 z=l+jUwW*pJP>c(PT+35`_vWS4}Ls2rtmillP9qJb5@mS37*szZ17H9-&oTpd%OPR4$%h&t^uhqh6%jRLUO|MC}>1z;Q zv71QYNb4|`iM1yRh~!Fgh-WPQBwxBZdnB^ZZgaYXOhR2_fRYe{l54{_V?61UPVHt| z88g!Rjn9*|!+=}EY`S1|KtmA#<_DxjIk&!oRBW;VjgOW397A9qmRccqNgc4%vUbv2ZiqSXsMn5-IOkOnUSHG~UQ7lt`;U6<9I`pW zeFOefeKhM4TTZ<6v_zoWU6VBpRt1tyx7M7Dnh~nuOA;8}?NDB|Jmr&=^n-DJs zVa+CK*PE%Q9yy+$fpoLochC3T(2E&dmAtmM*nwon_mJ|f675}|3JE6=`_h|(7v2nX z1t2}2chL|x%1=c!{)uhNeu7>otH_at-f_dKx4=J@az>&fRH>$?s=hTxEq zeU^}g3}|b!DIx_>?^4I>nYLSlPn|C$=cu!yzJ2?~e)4{FQR}qaSE#w{Idmj|O&Ex4%qv|f2UxB}1BvOOxrGBrNO0T@rd~4UIJ}V_?Ru<2N}>ME5GLHgx8ESq_uLU zOWmw3WOPc15V2x|^9qP1Nm?B8yz!NZkO#uS(cN|1{ao;D%MEbp4#*&niX?b$A`D)q zJ-vpRV^SQZD*37DR4;rXYuW+*_`NMST6KR$Rr^i-EG5*Uh%UKleQ_WM(e@uH6yem>*ch;@!6(T(>Xf4dHk&f{u#dZ6)L#=c z=GB?7DBG!nflWf(ZrdK1L#iZnJ&y%rShWW4);V^$o3(Ctef0Wk3Pq^6EK@YyTGfqr zwpeV9164-f^dkR()lvL~s}IbM1i!^7k7X}!seN&t+j)b6Ere6lJy;JMQupY1 zB+g>uRRj5(Uv_oz%5nLPkoD|f`ih&bY2#J{5|F2OJ(q9Kq)OkPa`s1LNy62JCB!Qb zqYmF?dVFh0pWr}M_BlAuW@3q>7U7=74)PxmWw1fQd9z!n#%YLe&M8$AP$_S;X z8pG@7{KRfi7r(B2B;%jiD#cThUuht2Gnrj@Xm_WAzUw>c%nWnrlYV7g2i_ww+^&=? zUuxV|`9!z6Half4r-3MNpG@i5Xp52mjhZ(F`&yP}Whw+PT_@@Dx>uP;{!h6H%qqmF zgEBntuQ%EKq{PB`6c$#iI=L!1Mv-oOF-6R!yAS&!G^@-oX8&OQ0Wn*Td-Ld5P8|8c)OXI5_rUDAK&R1H zL0mJ=^Y>AIbOmp&SbX2PpzLg$4*xxg%v6lKo&E<#yL()|*hdlE%TKNHukTGqyIo6H zPp+w4&q7-_3o>4#_@>3ReU9ck;Jrojy+x_O<7BVMNwq-v+4t>;xG{4_KCo%yay+&1 zmY)pF{?MT1V?_ye_-vg8BJrhCik8?5$n&lXDF!+DZWD0(a=BtIG`sIfNQ^Db&jp_p zjNg#zi$L?zk=orb+2{yw6mVp7`o_=;CVi|LPxjeL-=04=VqC}<3ZN6VUSrwe|1oyh zfpDG1H>>deNBe<~jhX&Uj3oU#%_lQzJ459Uc{Ojw^-K2;1WhJ5D?CaPnxmzmRo6A2 z)I*8LKA^EW++I=UXe;XWF*Ka!Jb?bzw4CssU=;o~Q#m};y_zHLddEDTR>*cU|G|ul zEc>Z(fw^{lVOOZF=fM50TZTb?zZafh7RN=x8UiKVvyUSuyp}#S6>+8l=b=qp;e7wu zbJ;ip{dupGsg|XDx>}Cq+fIf{(D8)*r2=#Dk3$9Q!&^ZcS&_Kh=s}OIH`({EV@yk($6L zkyNcmE5F|FW&f%Cg5f4Xw8qi=@8BpaPa^XX;4?YxMWDSl`MEd@maEAXdw738{vnqC zHsSRo2fdN=+tEM8%(b#q`pptBNU7xKp}Poo0~Ueu)_GhpVOwLRgA?4#ThZlSJD8zJ z4DbANs>U)T0f|2OC}t2ziP<8#-&^V5t%6QfQcdQ}gJr!>y*A#>2lU2XTAxl~>$(!>qBpR}JP*C3*6y1!Zfy<23EvOa1IyQj&IWioN=zMeeo zMiK;|bFOv*eEntwfra+u`=yA4vteQplu*%ov%uzS%spQjcpgO|(k-=G)tRS4^|(uF z)6n6wTs(JQzAM`2T0-zs?mEHGup-6Ze4|j?+J7d~mT($QmO{(*tHxydtvLyH7V%Z$ zdXX4{6XdN``!=rUYW8}tUeC$a`@B864#%jS?R z6sMu*G3@`>g%Fdx<*4T6reC35(KMK}sQTDp*Zk==8csp#*}_szclb-^N5{B&6Ryt9 zL_VjLSlM{6+t=79j=j+gNje%jCruEh`3s3vkokcBM?#Z}0!AFT#X@8urXq6tu z3r>Y<+wfc`u@&+subhA5lr6Mh<4K|^o_{9d;%%+WZ}t*Irs%?pwc|J5fA@HiV9)*A zN&?Hgnin58uO0o)#ty_IR_clSfO_eRPV@Rh-r>W1|Gpm)MVz2nX{xq?(q-vsSh7F8 zH7&vOiSz5V!$!?i!e9KGm#1b=rE<1Kr2>m)+deDk$Y$feTmC|sQAerQdZ17?Y#d1J z4_CV+HmJXSgR49Cp{yH3V5QPxM{`7#>LqE<6Im^J@-r<3J!OqH36H;Tb4ku8zS1y_ z;safuBd884Ebsak*bLT$QB*c8(=pU;W{ebvervKW7sVqY({o3Wy3N+;IJ*Ed zq;J31tc0B?!DL$*(k`A zJKZRXIo+ao4hu&Exkjr_@1GX9PvcCy4GOY5<$BPgvJT#c@P+t5?wjVNVhn2pND&d2 z6V~0;(Zt9Od(D%xAtpIwXJ}jypBtSt%Io|ZW%AkHZ!eGeeqdJ_)Np^cw`_j}{0InOtP7puDN~7xZ2g zDC)`3Phe*Yt=Qa?s184TgoD39&KDO#kYwUD^ov>I772L~$%`fn)T$-3#AAyXHuaqe z@)Lvmw+!p<4t>nu|59P0L$f98fsjFt5V|Y;V(Mp8{YDMVna<|WzSH|O;mP~a8*22< z=%VqGv<#7n_^3Di6fOq!c67ZHSyc1Bxm2WY(V^m+eo|HXeTJo4XL`cx=z_pY&bP^J#Ugx1X{0ej;c zG6Kz6Iz(e}TC}e&N5nzb(}sy{r>m+?cd+6{i%+82)vSnup9*&gQpzq6u8hyq5YswG zheecoow#1k_kT9!^vTjLwk;akB}dKXjBm|xEzIQh7V4WA?f1CMToW2SHafYaM~z%_ zihM_C8p?6sD!-ZxQkP^ig8Jk|Bojj#l^s;S&V^T*P}Z&A^|)aaZB(FMpxio4^y(B( zQ9dV>0e72fgn|Ok)(ht$BO%d9W!5Pz>}b?t%%ixs=8z^+%af(yTay^Gz1v2$nuk53=fpulCmz_}`#^qCBw#7o%MdI+8zildD>1XK<+A z;U6OoA+r=A6L+!1sm2&tpjd~e_3A(fj_x8FB%$Ns?l5LETVDoS$NZf zy>1n8pX!@F3n-DuRMsf)N%WkI>GzfdJ@#PylCQk0d}VJt${V^s)t-x&1!!CE&x}>p zL2l%tM)##?FC-1x^WlgK^N?dv}hxS9j4joyk|?%yMNGt|eZ4O5uBU z>l?={l{L;1{8EU<;$%klHNm+8dX;&pNesNb{KF;M{S=0SEtcQ(AI=GvD3Pk7bSa|W z$=~_8Ek>ixcGJYMcf8$&Im8TdW$1=eJ!(ew6IvS%c3#4Rg#JT|$o}zq%WS7srwVON zK`6S@9tRVjS&rUimO9XT^k}p9)xH@O`DBP$j{@+v$-=(6g?y7*H5@V9vjU~%-=&ej{PTS96SDdg z0gIxWy!mtWeMU^jg3WnlS>$-{>o>*bL6%lXwY7g4LkQ9F5P1KoP^?&Nc*lsv72{8nO7Z+vINE2U z0oja0mL!|*bhPrCsLXffV!GK~T{`~#sIHyVB)J$Yt2@uJ{7+p8U;1D?AKMXK2$CbY zMJ`L#c0C!SVASpOn~*(KYC0yX*@!eLAgV&5u*K%Q#wr&zuCAXTL=2tbgky!u%w5t7vcY@HcusK8G`x;L1ydgqW4y zRZ-;cDz9j#e>V$!!XTXv#$|uZ=)pqCPbxP1IHByMD|n*EV9el=rFa-SsQeymQ3oxj zm%+cX^z**(kyr`Tc7orTUvw=tad|wf=(Lv{t{3dLAo~#=dtz%jdzb6g9Aq^v;BmJ$ z#>>DWP%SE-p@|2-+L3osQ$KO4si2`l>V1l$%jx^5{Z=6`MGJ3!8MMj~@BfJ=th6sd zkyA;Yv|7SjsL^O1RS%iAgU?}ezv~n6rL(T0f9Z`gct5dH0Ew|dQ#+tus6XqfH1(Z= zRsB|AkuC~JKG|mq_P=sD%XAbCmCaPsEk0&F^fMt@QXJu{-fH4N1QyLW!(-kpuoJis zDB%uId^YnJH7<{TMC9RBb}}27QFOf*bd9@KRR)uFN;>}3_~E`+XY0VO1J0I_wrIUr zpN(Ww#!6*iAEZ$oSfi^oZnJaqm&4~D5;Q!2X|LXpV#0qdcAaEmJ|9&F6#-CPTshY5~AiY+|@9OJZ1Y zr|CSMpM#y#s#TIeN`l)!gNTz(?DHz*t(Mi^o>VgQkZ$LG1@S_3xWa>(xnH1|X=<>X z&nhUaPk=}?F>eo*$K98S$yaMXQ?tNv4yfPnrFq#up?t@|Fn;;<>C=>Pn~4VlunT4^ zsVcGaHlXLiNjfHZXaw5ebhE_D6dcnL0@|Nil|vMG*2l7kJN({IGl$0(gEb00rZ|!m z=l4$~=@Tn0?~6?z2UMRO;N7LuEcUuAml&yqF*v$p$~15fo1=T)-O+(iEV#3J|J1Z# z`F%b0XJv;ykVbf{%ik4FdZaSTQs%Mn5{@qu;R0&+xJq;ut%$uB7>LO6%o1ZLOTf6h z>$KU;YjJVI6uZJI+d+hQ(XoDI|CcYmT^W&E+v(expITT)K6xHzA5nbxF0SIu4|UcK zh2eeECmEf%eFf9ew#=vkr8%3F>8Y_;BE8xlYYJ_P-oLvBE1?p)(LBd=8Nf+{b4^Gx zy4z~LS-o-2+cnk1>sIC0RFOR|MzqB3Ad&nY%nv2(!U-}_dKqIhtF-&=%(s0{v|h$e zT1r)Te3G14N+g0U<4kxtebWF0_mvG99)-KQ*^e{jHE*c0d=VnH&B>r}h>xpDX-6K;zUAfIf}j19S5 z{~{e<9j`X$kwJ_btAR{^H%+yML9WajWpLKx^cs)6MrEBU2+!tn#q>H|;9of%&(&y2 zoz>@?r^Lc@tD2UCWsvfn7PGC~5R(NSPpvr@Lx_&$!xyZ-vhhiVxPjX`GCo{Zih13- zuAHQvfM_RY`KXSujI#$K+%%~QGP|d&@Y~@pRdw?=q?27<+Ca84#B^fmrvCf3L$-=w}9Wt zG2x=`)bc{@m!HE=lR4;afjLM_EiPd?dY}fkASJw*3a$&uP#n>z(0*bEZ~}|l)@Cv% zbbW#Q>fb1BjRWdw98tRuoVb-d=9ZD6u1C_eTWp6vH1FV(upUWPx1D}Bv`UNTaq&GY z@=;;LC)Np1C95)MP@Hn09`t;Ks&E{p41E>+i^6bP_XMWc{yw#Blh*XM<)M1gLtJEoHUY98wn;{@XrAx~1qD>ss@+3Y?L@uaw4X!aiP1ba{BiQ5s9ixJF!Oufl|o z_5zOEiP6~j=YAbGQg>16$W5tc1z_B@ViUk#b>iL8+zy^P~{p&Hf33lFs&&sPUK{-yBYI|9m<@y(_!0vFCJNc z4Rri%bi~o&{p`jNCu)g%CWj|$6uBWk?9TIWrd{j&nKEXchwq55yHEVsY<>Un+Vk>WdAl(&UFv#S)PLmiHwL*FD||_nI8uc@m)W7;jQ3cmc!AkZSTy z#d|@x^>ki2DM8tsBORB>#aKut#EC4LHiGcv=$78C_PfqSbVAN`&%#3q#8D#|?<@n} zG5s!mJBuq*KQNvtxG#cG{0P&0F4DL=!DUu%02-;p^S<3aFBaUPaLi%cAog6AX0O=mv7lZg#v*JNQZ1-h3JY+vR!(tbp8G)5 zGmH~Yf|3P{3=z93>7bk6*(w4k`_SC$hQs9%jp%@W*wCLFh8PO6s0^ZKb#$zg2Krd`Y5zslOU?b`g$pQ>fis z;+M+MZZNBjuXhYsB~-88`6}R4)mC*g;+@MNAU47JMyyo==`0doW z+VwSC4e|))@ToV$CjfxMu??Q}S})XPTG()_IZk`vwvTG!DOhDpjlM4PiTqHk&*tnn zbi(=U`)DdPO{&$|Q^-&|2&IBUaJSXNdV_iG>KGH8Wx~k0B5`lhYCN?K>OHh=#+fb<0$U8S+n23DZWkzyIz;;XBI>DI2ga_02t z`-D{(T^jl7?d^K`&X(*h#HDXEn*GJNe?lPXZTYFtJcjTf9-qSciZsx0%{v+T_}JvV@eN}-+f2w`%kyw$>~hF&;gjBXF7fq2wivTrc^nMRS$ z;ZK8#=j_^z%18kxbstBwvOK@&ylh{2JT8NBr0sWXp=YWTmL8ee%OIr2t; z2I~=)6f&3+a5UN}7i9Y|?b>vjV3q}fT>7e4X{UrHje{JOXlFRtf` zDXjV9xhD;l33xIBltk2gx;`Xd*Bpcc$wR&{tlLsbLP>7i;j@BQa}8_cX{#MD2>sls z-cV2N-ee_}c_=`)=5#6%t>XMFYHv}qNLSD|7lIuaet=|)sso2(8y$66aCfuR_BzW& zHiu4qBiC>@QEx`0`Ges8=N;qR?bI+>-PHey&o&$s5wBI2}vR2iDWYn{K2JfbOPBT#*xFci>(NY!cLCq6oIQu^VlQ7nS%a9 zW)5x5O~cERFqH`AkvgM3sv@=nj``vX)0xJLv#gAplIgOWJ9ghiL-u*PzB1R}?}de@ zGfj}>%a`P3L`M~glq9IS*%7_=*Er8Er3k?A6*7$5JY1e`F1RQ`@i7Q4<~}PN=0Y3r zd4#`6Zt`U~a+y|47TwaEh;fZImU)}N-$Od@yCv+xO*WhfGs>|Mgbpz_77)clZYhnaLQq6lpf9&1q=cvO|oZFp$ zD-qk9(O6FjpsOQ6*p)!>uAL$sDfVs)2A^GX?G1;HUk*CLa~AP|?RB?LIrPsvE)2b+ z-(2M_kGMA;({4WC@-iC!OC?_G8Rr3rY(Nm z;gZH+{iRP68uUNWzwI03pI~D3sUFhs-C*Z(3_pPUl$~{>bLxBnkcMa+0e$FUR@^Wd zWk}$s+vbad1%&5wGRrKuAvYGE`!w~nWaRw%9eu@T`Z_LW@y{(w(Q=c}{ljVG1Cjrf z%O>1apT630boY~dY&}N0=@#^m)(O6Yb$G{LN=j_+jzbm@=shrfUu!qF-s;is{EP+d zPJ03dwj**tYe;lkeQRQi%}-FB7Ophx)Q{=cmars~c5pM%4M0b_*H^Nkj`otE zu`PT{z*>3W@X5}@-FL>26V?!)=-F5W$47eDft8V?22Y${LpF= z-P|GKA^RWQkwx$yHVpb3+mvytfCWP$Gwhj1tw-DiM3tbfta|oH-AN@<5DX$20~cWI9yA0f&%(a%3J5HY``- zifD2xSwH~_Rnduapx21)3{_(~9bvQYXAk1#u-ZV%dbTVd(`a+?3Nwe5e{#2WTi`mD z)SzEyx_wN33KTw78*cH#_PfPsWwN=Kn&LSv>D{v=+F5*(?Ah?cJ(ONGlC?Ij$hFw9 zzJD?`0nsndF(F6uu&4C#b062^Bc z!#@hnB{K7bTp)+$mj|?NVd3;#yRHn^r4NK9Mnt+W>Oolro zh;)qj?iY=S&DKe6Sb~?QiXgBzy$6CKBN39(1RkMoM%QXhYP&ZMPm@;JM0*eOqfp37 zUC^*q?7RT55!LQXPZI3ijwWOlo9?_t$u1vK{3nX)oE>y1kS*%2=z5pS>FG*y#xdCw z`cRbnr}Nf}zau{n2>zuEj+Hxz|I-tIw#WzEjyiE_QZx+_8T=`K9}U0F-I5FsMg|>Q z5=p_m#^;6FFle7BnoYI0O&`BGz$Qrn(o1Bxw{EpJj%q@gUif{B zpiSFKUJ;C4&;9Ud#1|+<5Wf2c2qHIQz%Lch3lK`KL2uI3^h{=%b7A7iM2Y=Q1h)pb ziS4besM?PhaI?s)I3cVBpGcn8>@e=YU_R|$q z0I1hgmiwwff}5{iY#mK%^`yJX8P$M_$Kg{@mb~|7G$WP#qQxoTx!}M@pezV|QNDg7 zf~#bhwIu8T6B!%aZsw=bC;Q&Y4OrB~s@g0mEkW(XFX!z&wXx$3LE8wm{_IwnuvLBU zi=m2C$q)%ue5ogqkqSQVJgIcL!l9re>C?nBGnnoEe@UvDggyiurWl1pi()Am`4fB0{I}b#dz(A64#D;$6@QH=|?R9;-_^=6RWE= zWVi)X5Fr0p*PEk>>DJJS)1aw(#<#HBRiR@%;s0Vx+>)tY51{v`iw1d?aA75i+r9F) z){XWOyP|{CDKZJqMPZdP_a!z=$jy9n??}N+b0iH4&Vx{HWeC|fZU8u$SP4K%I#=?C z6-wcg9FM&^{OBOA^XL=3bE>FKxjX5gLSeC2Mn}qdG^oi2WB_Dlx%HGrQqE@Ld!Cug z@{iGUCmQ86V`&+oOu9#w)j9N;eKPW2mcB3?A-2;Au=@Lr$eHiF7(8C9*kh9YWfgIQsFw-RE)8u}0o}znVCD4;Dwc(9H z30K*5?1VBD&@KpcXWKp13fB13p7jv@)5$GIrFumbAsRKU5((F_^N}K7C&rN$e>*sV zE5OOyqor9(ZzFcyHotWn3F@uXTP%1H6sD7V)SyI2evL}u-@zwdXPbSeKNesDDBW+f zdrm)F5*T3j-j;u%U)L9&t|f&m-17n%UZdV!Y6Aq0Qw8N~Rtm!()iQ3LSZklLm+ zT^oZ=;+op$jy~8#Np2(*QvHD!(e??jZiqye&?0qsxUq_8Q$+9?R;RZL^qe0V&5md$ zr5+eQ*4q*B>Bxeat6tCxr#rr^#6gyI52fH?PPE|y`FF^##u=`9t5PN_o%FJc( zZwKMw8sD_Fu@?z&7#%ZVp<9&|ZTivs-Gn=co+r%fF)1VyY5Pj&yR{$F&a6h`a5pQ~ zuF|+@@%g;pNMsd^r@|1yPrT~X2qpmKiKc_-&01_2k3Q(A-kl(@hSdfcUSrI8cUF1&7|&2e4G5y znI=2|g(h!S_c4f$G521C8kkAJAXeAj)FNAoUct-y1=_Goz=SZFq7oTLS%hc$s!S zIgu#gMMqGLMgeT!op?u8D|<7@=5;;2M<|D8ec#*u3_=fL%s{A^lo_{Zm4@~7rtEZ? zg3kEP#i2WKP|eLd_#y~-o_&5B;T{EX&?Bo7f-NA02D9kIMwQeyiTB))>m;t`eEn7& z0Gj8LIL??;DR6V)!7uu&s1k|@w>`JqO4ypL!JY@cha#;qqq4{p6Ji2G@)8MnD= z_wyj3$W0z6D7-`I)_t3c?JqK8#OBdJRbfAZCv%5i@Soe4oh(HveK%;Bj`F5c3$E>A zMW}Wem_Ttmm@BpsJ#<5~7eD{p5zsjgU3+G5PtM23(h0#|a>yim3m}7gg*1mYV)iYh z%4zR<)t~2ZWbz9tViinCQWJe4GmwOZj@f+g4zrgqeze706c_k7TQ79+RaQ=W1&|D( zCA@ry=J&pV_@QNnB^xXo&+#n9 z?@?aQ2M44r*G>)s|Mc1YUgOT=Tq`+Xh#M>XV)9rK|8>ygIOe<|V8n?sg{81YI$;JY;wq+fEuMiQh}LqQV!V0iv2&z-L8l4-j!?=W zgx=Na4rJftXY-^=vCYQBF07`5T6W_2W2{*MjCvj76u-S&_4ep3NZ=IW_avkc8ZbO~ z7-`?2ch3hE>E#t0&l+sruy5C9KgyqflR5Rf?8 z>S14P8(e7;Gu~6pNRmw@#F9#^6Tu9WQzNQ!=t{4$Luq-lBuiZ<0idrCJb*VbF)4dq zL3pqT;MtlVyY0wKc#+jOcF)4`KUj!=h-AI|5vU}km?c+v#Q$!vKxPMl>JH~-m~eB(iK!B^>W^EpdV3~ zIh&;YCEIxy`9SmwrE@%rQK=2wiqFJCA6hTJ-S5?XQBY&OQn4vYAH(i*F@8!gE*bRc zb&4tNq3kW|wj|S$n76lsg4BP=sRho>r1x$fCUmGX;^2R>sVAOZagtB4ihh8}2%9&7 zGF6Mk1)F;@tJn|RHQpapl!*HkXbf1||$7ijZHJ=mKDY3~Jqep{H9aU|e3KrFBnQC_us z2x@syZqITZ^2`>U64Sl0z@A!(RllT58yY<_u2K>Wt5XEuw_gy+84KJmsz0Sh0G#sL zT?s;3u_1N5q__s?QAR1zB;T-d_^qLamm1?d0P5)ifx5y&PfTScTy5IrWKGE*;B&!> zj2Q2j2upFcs!xX5I;#_f8k-)}cH7y5R_D_@C%U}xmtymltvI%*_PEZcalBT|Pjv)s zM|h+kaf4JTk}qtU$FnDLyq{Q;Ui3Qnzp!9NfVs5I=DtEN(Bc>5yn?pc1O3ukR@-G3h`nFxc7(!^P>mOtf^-frE? z%mR%Xjsd#_YGpD+Dt2lPH!Uo~=QUFvo2L}gzU*_kd>k8Njn$UtPHb70R&i+y)>@_gUoB#BdJEp+G;RcfvEd~&9lVHDS_Yp#U_u7YlpLpI~R{B}3&--j#$8LEx z4Rv`5j2eS;y}d&}?|NURUV0e_;+$-Wr$%?f9yx8Gxzwi#T@^p&yfIFKX6gS?^ImNg zvZZcnOL;GwWAS;=l*{cL7uz6)oNz-P^~BkRPRy=Mq76@t?~qpU8Gyuz?pXki6hM#g zx5bGjt~~f88|wgdrFHt^e2Y&|?}QXWq+0`j;6B&$#1}2!31MW-Jr8#vd2`@ct;mnL zgx-%Mn)ESPszDXP^7v6!d#+nz${O%IHjPd^~fyZ!1kNEndW!vXW9s2My8>rhjpM& z;?uh8qPdj+Csat>qf+x0K;7YzoJPcQ>Ht5FhR&I(8(616@6iVG1Xg7KR|_etljGqm zyiQ52M|ziH0h2VUviO6F>94*P+V!8LoN4KJtv(j&cSXF%lA1re3lplM z7hio_+`ZWoj!|l>mzIG9D$G#8<9xg*R?qmD!Cp11G_2s`lR?yl!TJU_?05L1ujIr% zaa=nCwJD|i)9Sq6@=p|OO03d&6C08)+kEHi6IHom7nz?38~T4M`CXBeix*%E@4 zWmB;`cbPIuEL45v;niE}w}(dveG0j{5P*${c@C^0haF;z32(iFgw&USk&MoLksieZ zR|dq&WM#5Yt=LXEFaZlscB(}Y44?i%Ft(!2Hg@dl{4#`ST9viDQ~51o5Nv+Y_ixLL z2H)Wu88sKrs<`-S^=J~sp+_Vx<)zPQ(&^sCTmcWA!`LxO9y?`#le@jUbxL%9Ny{V#`1?TAT8&M9H^E*2qe8bI6yxEVyFI0 zKzIor+*lXV3j~y~I9A*DYXo#=1tyGx`%L3D!YlqWo6Hhl6-DzU^RJUk1PCji|5)uT zDu!MzYr7;NN9qH)lOGnJS#{=>Ka8T;YPKFI<8%YfDF7vQWLbvyH!kYFTIVJ@nm}Mg z&>FfdgE&gSUWZU{OcV5#0c{Dzal-9({YRvv9|R5(f9LLq>DRwe(3n&>v=((9dQuOx z%4d~`pKf@9)w(BpOOCtGlqL^R0&|I=k&IgV=}^~Sd$hf*<;~;dw5J$cc=5nL!L(;t zow7?*D3WIUl*@}kTjNhFnr_vp$VZ1o3}%lAIO24s59eR{Bb|dwmIitP=CDKs=G9Z%u62A2Uf@I&f!P^p z=HNTQPsds_CY{4FJS*0J!=jCqjYB(!R!f>LOuhf^t|7s`pl%Y05p#*@vGCOYJX3Gyfx$8j$JnRmK(7==1(G#P57@cztoo`2&(7p(;Ih3%obT zHrk4Bkdp!D^Je{ng;I;;;Tx2}XM-l!oH-GouxR?g<{a1ZR38Y&rGP#bOBgITebhC? zF~o#(0*K3+*xOQy+1y-TUvZ5P{ByTDFqkCHbf~(Uq<3w0q<~hI&Kb)xKOJx0wPE~) zkL^zAwSsX$NAzR|7cCl;ry$QP)a6b)b=NhVL`~i;2ZPFAzQ2v+nQhtT57U~p;{k%Z zl`p2o5?lm*-)fLo%5HBxjk@fjrH_9ifdVs}px$mE@8YbZ+@bZN6^p2UfKd)ZUSw%X<3 zAvsYxkX6N95T)=GLtdv|+td*K1*Z2Z(c{~5ag{YrS~Er5J8#RzpDQF#zEJ;DYxvHh z55;D@mgMhE&NzO((AU0BQl)>!Dg-K>w3ljCU<{4iZB~o~hytUs&4l=|+GaIu{OQx~ z=Dfad2QZ!fh8m!6Gx<*KS--e9%phVGw!+G^c&vKz`HcldGS*5QaOBt>7Q=^Ii?5U zS@9+6vOCCgrK&O>c6v{uE$H`G7uOjk36I@X?%wP37CiHg#Qyk5!!O+t{S(csRi1d$ zPi0$~723Aqid8Cqlf+^eX*WIDRJr6}$@wfD(gah{gMguiN1y< zHH&-GvWCN;p|0ZPdmcv%MpB9KnpwI4j8czY=fs&NydZ_{2pTg;OA3qtOqz5y7P0B8 zXxOz%=+Ye=xIH`+0_jsHLJ0i8l{IdWq+TP_rW;Ps48V$ zTe(u2J+7qK8lPY8Vz`DE&o;tj_4S)VVA4IQs5$cUt;K0^E8(ryG+M=_;MhduS=4%; z%Yiarcb-YBDx2|y6@pQD%f}hZc;jGrO+JDCCGf7p@wBWl8M@E6G3mbjc_3B1sd#g8 z`MD1Ut~}`}z z9d`q+sPQ>IE50d>{KEGAOZIYtL!|rBUk%IOlm1_ST-ou19-<-Y5Z#6bm5-;3&*!LP zeHr#w*5Yn_j^{NZ%0;EJMxTHEddMnA2TcKrpAlyxQlj&$Ub1zBDyLk>kJ*IiFd>w_ zNU!O9iS?0!E`Tbe-j|%5q%jelX4+hk^rHkoPVnS59=a7MhSIYolLFwA7Y=?@IZ@J} zis+kOu!l3UPt~1reIr8^uI`fb>8X#8LnbE*NUc>^`LD#Y;xVp9lOygtk0Qc|p!Xz1 zTtwE-kpWk!WKU}LextMAY0;6bfJELe7jopg#_)lVwqB@FqdXpS<>HEyoZSdv8IK)No961 zEZ`-{3k?u_NwJ=a5kf0b?w5dtG)ouVq-_oS|lKGCbP@ zw%!sDn2ltAwXKj7bF3e!C2g^4xSz@ec`2GyLd5XL_9k zAWn|Ej4Ps=;Y%;Jn=k_-c(=37Rvb=9BUrJL$o zR7oajv_zj11}Zd?@$=?vx@6Ly2He%I6kXBgz zjDw!N>Kx&|G9QB5e%;v)wJ5fe!SZ)Ecx*j(c3w+#L}IBN#rgNeE}wuMhGDCT@K0zR z;1>va|G~N!xB2B6d0eOH?Daqkt2nYJD7uT-PjD{{cIKN|y`(23AcI z%m3kL@}3tJHyND*6<7hechN9=l^Nq}qfyJYk0;ZD#_RyralQLpSsGyLUo0>Nw% z^S#v6?UyuQ0Zsms9lHmq!T^yb%xnclPa7_vzUDjYh1SEG=HPVhBC9;2G_S+(#Ooks z*Tx_Rm8;?Oh)K#ud$&t2cOIH8Hco39gPH8@+$-(q|1?&Z|NE;eVjchS57?_;=r&-L zwPY2c_mu<&9f^Lo^WxToAb(WU{?)uPkSUZnH!=uWe`r!P%8O>Xje}oxO_x37N+Qfb z{ls#pt)jSO*_(Bmx)PZvF6i>?9wy@j^)N5z2-Q2V(-?K|g*0 zu}#xqZ6{eDpI<*bdXHZ5{RH{~nBG$zmoDB|qd!Trsc6*27~k z{9arw+b<3M-$(lY`3fTRhdOL=u|FRg-jNQ|uAn8rwMDlSz0!O@$lL4*x&?|K3rC^z zPge<4WN3%8KVzg-q5!XJ44^33Mau`JRaP~egW~M|6|kfw!R`*&d&LXwU(qy~Medsd z$}wof5IzutfT5}qhZ~S8&wU=D+5!4VSA#>U0ap-hF_LrnbQ{1i+=X9=Ju}u58=-|Z zViliC*3En|?3OzXXr;c|ul9zv8qCTjSUYuggIYs?4IaPoTVh4_;(C7)-UQ`8HpoY)JR~zC?80NiD^%G-(81WsOw8@>$b+djq7#e*nzA!i2yH_Gfi{w)af$L!I)-1TuY9m!Y03GZ-3kt? z`6HtJf4$HvSEznzLUtTy_~0<#-S8J~5e%`OrK7wymGYl*US4ULP2HW71#RvX84kYA z?mmdb3Hm8O6NwRdyWSjHSL$`-&I3vtfAN$SA+Dx1_?)*->)IXuee!-3AFyTs1{rXL zKzh<^%~tD%8}#>-M=|dQ)%(vr8x;|d5nONdf=`+Ue`+rS3l+Rbb|uF-ka4Qg69aTC zpv>q4tPI5FE8WDXV5FBz?@KIyhqKzvkj6hHDxc6sj1!iWsyn8$WP1|rwEIm`zYoUt z`;p|8b*{zVyL{AnYrQ)SL{dNkkkMGTw=f6t zdhKThLzi2P7p+xnCr^+#`eV zWS}4>AKp#yPhM%B&PqdE9wp_vq=>Cs@HR_YfcoXr4$?2K*lmrA4JW8QAk`f%38RZ( zkXN(?^SOsVZKj@#S(uxR;NelI=s}20;@&=t8V7Z6Qx9OSu(H4};csMs>$(N`Ux0B51jckh<*=Whpx}i%O12em+VKwcXw0*6Ivwx zIa{0(&~`{PfH5KGI-0dY-R09HE?^Py*m7zl(giiSpYnew`|7AFwDns$L267Bq`OPHL6C+`*QUF9YoFse_jlg=-8%ds8j498x3tuN*` z=lmSs=s(zIbi3HZO1X&SCjngF=bt7D>9TR@?}_PZG@p576vnrSxG_x~pK%>J;E?S$ z--?>@e16aNX}VuUJF7RQ1K{+0(Bnv&ZGJH%`Sslo5I+V=#ZBSe{=D}+)TH|2WBK~O z2!NjOy&xIp-cZlCjU|V!sHwdvPFsMf)%DSvL8xcCO?Aa%H448`1=s= zmUsjpm(=zt2dt`B1p%!wM(qsIVXnc(dcZbq5YIwph5jg>r*Ar}pGS-)L+c zzHGevf$KR3-_{*a5w5sZt~g`I(byIsI?qbnHr{dknTitSwIIkU`+IsZre8E)9ng32 zO3l5(TQ5wFw8g4nN5zvzj-nhIT{B$jR{WQ@81nFM6U+k7a8 zT(6V+GVSBebQAB{-t)Q*HJZ!Wz6;F3AcmQW%B`J5!S?E6a%ZsMHmwk#RrbdLpN+iv zSH|O7(2~N2-KClVBx|Ck`em1kU|cD7bph>Ay79{c;xfG)eQc}UCTn~D7f$;j8vv;4 zRj(FC)LwrMo>XebC&+%%W#A)}vJv4hpji#bJw<3*d=uI_`EA}T1#z&wa%;@CLCy)2 zXyr-^ar}TWiX)594%Dz3H@Ak8Zj*Fi>H+|l=OP@p2^9L-3y+mTww&? zDOtG46XQ{+&^uoNWgyevf`rT(Tce;le*Qx<=L*I#<3voRbv-ugK`DqRQxqS&o1(fp z2h`ER{k$re35;KZf)U`3p$G6pxscMj`Inu?{!V3rfU3MYjZa3`_nC|F!lfLJgrw@VXH?l$f}T;ukl0aiJ1c+^P5b)lZf`sefWw0kZ84599_(nRd@>2u;t@uGDBxGOxlE$f?gX825Zc917BeeW3yID?k~9Z@2SuKd>~?f zO0H{Ui%9FN=W4h-u*Wu&{5ctXbl_!r;kZlTg2hE@J-(5YdK3MWO=6#L(9Q<(nCmMR zgDE%3u{lon+}!x6Wi<}Gcwv%mpi?`n-$`4qZ1Hwc5qo-fKyNa^#%217e^YWh81)8q zju;E$&WS*{_$CRllncY~2k>5L#7f;&;z%Ozl1Y7DLitTw5PDX+;Wzj7&7fIXQ&Q6F zbU^eLTWk_d2{m_`su2LaatwZ5%<85j*NF}ePH0><%P}O=J4-7R!k)x-T;@RRN*-F5 zvHKbW_8K}5fz4BmK=b0uF~Bez0g{5gfFC>Dvp_lAchQE$Y5;^+Cq8HPXSaw2{sczO zw;QD}R&{>cgF{auXpUrq+??sFV`RG%dpblh>F23#K98KkZV?%}2)g0BV$EGI?_C$= z_?Abg6Ca+HiFpVmE@tLJ(I+uQQ*XA&&Yy_YK5+!&Wq(@10frNj(4OIw4 zeh1lf>|0aniX#BV3b=y-o~e3-3TTV|Ks(Ag$l4m(9=a*KAN+<+rp)U-%&Dca2ca9D zOb6(PCcm>v)e4V#Y?IC8k}Qhde}}jx4H(UrDJ8kt5$o~Ftu9}+lP{e$*07vmbyeEs z^$NNTY3Swmq=0EMovl-8D4wEH3}?S1Ag+hF8h<@|piuO+$|g)JV(sGk^P+7t=#XDl zPgmNL5;A_%>-YSz)=B;HNu2+<$H2#Zv;0#}w@^oM(=@%GVS4VncxmM+Wf@$zr?ZVc{o8T{U%pT+#`cgV;)4W zRVPUjb#w)sl0sYq#PdAcB)IeyXY_cwMEL9skAjNAUmze!AzFH{^{kz!pL}I!VDUCq zW{lFpIVBES(lXdOTY$sYA0go-*IgW3$xMsO({g8XOSgEB_6TK+Wp?nD2U_*;#~=6I zGccto|G3R3{;w278fn1p-FenYbOAKG-ly;)6ETnz01tZ}qiMEP+0bF}_Bfq%f!j_r z2sJmTy}?ZPQ6{cY9!J9lWVZ4owzd-C=Pov_Lx0`6d{3#t7CtL6O}WaUW1ayNnpJ2q_7uB*Nmn2O~rlFuL$dA zidAAm3a>mo6u6s$uz#_QRQU~PPorTQ38EqUx8PR|32(6%(yUbNk(oE24~%e{Co=gK z;txp*BD7}F3{eaaLd%F6Tn0ukH|{5*Z5n%PQ7&1i%rZAl#STbZ1qK~!Wd3b!@>|UN z&p*;()Xaxu8Z?uoFSF#v+G^?M9&H1mXLUEq_kOf2hSfK~XHHfsJGo@c$vY*-8w_>Z zgtg+(zqJAVhfWJZ% z)T#AtNgfpsU;PI1c2l@_Y?O?m9bcQo#tac1d(D@*(%liJ$Y_Q21l2_)HpMf$dzVM* zjS?hWHQw0xkHbKW@=Oj;)VxS;vvS$YX7D^gbM;=B28xPKr)xCq?l9W-lO0oX95(_| znQhcEk0%qxiXnaAVr(Ho$mEmu7y8i;+uEw#onV-#3<^9#SzD8+s#7XzZ6{`@e>b)5 z2cAf{#T$B#&ERHvL#x)me)IEJV_Get>pBqQct0UAzmoF~B9!!46vsWX2WyZYfO<_W~MR$;tS4vSM*3Gw-QzS>k)e z+S#8gmxbn$3ALPlDa2p9>KU6CbE5+avJJiUJPP?7ts5aOAu1FxPM~44$7sv;uf>>1 z$T(b_;U;*}X0rgA;FO`4e9fh*@GB40X*##oC}}kMQu*wg_5)W;zGJmN2v2+1N_sSH zHgh^MPyH7c0M?e*5W89>g3R#GYw*ucFiFD?uAWfMgkC~CM4+!_&X!x%uMYs4J!bm% zy&Z`3-2gXJYvKL`i07WkStXVZCsT5JtG;@Icyuex{d8eywmTD;+f?I~%6n%gy$xKt z2S_+9Z!z&~sr$d``3`ez%CAY|!;7R|OWrWdRIyg!yJF=CKhNM3Nkuc6ci(t9VzWR- zm+q^c=_SW$$`bqFMpxb%#?W>LsVUTHA(v?n+6B6d`q=urCFRgEGG06SHVPIW5z?z_g zV8bh*7Z3x=m*64$6aL63g&wCa4Yy0t4MTHK9MaD;yeRzqR{}%#j3o;cnx+D z7A3!U?o2paHi>)GUcGpdAO$Wm*tDx_Fmo`PuAb_a5&`viG}&76EDX2gq98@FsGZIdRR5D-^1L!G70@F5eH6I=^#P2K@P!R}JRgDC61W zFsCXGM`5uAz%&ic8+lM@GP3yEq{BH)NzJ&=IBT*ZkUzBHV)n=5=WOudZ+^Jb3%t%mu9Z zhK~?@PQjE*4T`9>i~_myM~jyEnUHASH@yc^X2;xZhRbJ)e+x#!8fVr&(W;tr4`fN# zbdo`_1QjASpjGXpBpsu0(>7;JD}92{K_9<))BI{7}dVu?y48D;LF{%T(Zko16> zM}GrYGKga3n!x5a7k2oXFLzl&q@HM*weZu^es=Thc5Ts*cpf zm2%_&S)N0rapSTCfcS)y+zyY;JVlYgkETFY2`tT8b7#55j-wgsDrE2Z`rcNIAPuCD;*I3iL{rTdn zg)}XRy4D_+SO_`PoVEoGbI86Y7^a>yErH_wHl+g7KVxoHNrtG4a~EoqcVY08B`~qF z|GfKDF`$(4`JXRjxw~NL^e@-qMK3@VQ=G7dF!{H1L5sq_Dt`o6@DGeor8*}2(eC2g z=76Y#%jQl#x9qqK#}gG2nTSbR+1p`*WrGkejcTkVHw0Z-;3C|~=VBsJ;Nao>XI=Ks zPwjtBJ9LsP{U}4X$U=@}`JJAQW;=P!i+O~X0b|#(%Qm1c9M0I)cxKQdTS1NLpvbuW z`s4JXpe8VDh2Z|3LVNMRT)V6^wzbw1u)=K3o5PJ;#^(fWlykfuMu6xBqq?3%A0Qo=Q4g@BwC#Pb@(F%0$>Q-08s|~2yUS&G&Q_* zo0a$9^`iV2i6HD-?p(k(;#FjfwbX_g5G!9627umyOhV{s$zFZ1+zB^YV`t zK%{_ue;H7S0w{YT^9Z0tx}aQly~9zPE+pbaKoXIvUqwH3euB{MDXmO=2^+rET$Eo8 z-qzhupc0DrN7)!%qWUr`!G>fzk_T8gO*eXx7(vQ)yYFm6PND4&sxQF+LL!<@d2n3f z1I*!7EEZoML(!1yZmCc2TVEnDOe`d-*aX%TntkN(>BmgxS)ck#G;}3l&JDW4y5zW$ zKs#Cdej(7{A&j7aP4jzrNhE6ZR5aSxfePg{777rAGQ8Y-nk@%&bu|Jmzh(jzR^@Bo zdeIa}M?a#@myI+9ULmloW<(+W#ijTMvi0X*3MGLO63pN`eLbHa-2(?>*-yf06AKOo zq2)Bnka%?i6H=2>d(Jvh1}0=cLsXZ27Ae_?{{@cO^oN)vFJ9pc_UkX83j$t3>*0bx zX-|8hIF~R8Q_1FM0I;@c)$l8zssJu+H?{rUx7`TYuj^G+S;%&vgCz%EH*?j6)X67A zT-{1qU_L<+@ve%5*O(5~nz+_&Mv)r0k?M^M`Vic9HU+_Yb22=I0P#N#XDP_wkv8mb zQ2#m{UaKd((Vkr3aPUz;eAO8+9{;YOOs}C#3ml`?c~YNW-QGe4+x;>+xz8?*n*5yAa+eAxDXOu&7tbUpyH$xv}0plD&qj(OCdt@j-b z8~9?~V+dl@eu5wdBTHU(=e>XRp;Vk{6v`8YYG7?3>`9lr%O@G)D3RoU+e%4R{)P#J?* z3+yA8)qp>EmQ94*lBeXU1rIC$S;f9i0yJ-ztcTk4iRZvt&y(u|86oj8(63Dfv`v1y z-%if_*6F23?b!EU->25tO63Q-QWX*2Bv5V0i9VUzU?^|qa#6PIxR6-5fQg3Nu055S#Mal?pBEh^#PEZaP zUUy|B@0-Dh0mf^On*DS29LDL22b%8G=-9xCc*RH*jBP!qEkR+e3)uch6cSQ?cWGU$ z9btS>sb}yA@=Q)xgIEmZq|7i@h+e|*5HN!9)lPhd34EKOv^noqdl7h3d~b?X>q9dN zHj#rgZRHTernK%yKUs<3l0pIrA6qbBp^J$LSgXg8N;srG0fJUf)2=@opH{25o#oKO zM{U3w_2vHloS=BMfGhD)!ex>TKuL+I(D@$}F`o_GhREH0{LTb>nnz2_1{pU0@oCQf zewrPgK=(t0fo(b1xg-{kZp!5?cdlQxLs~xz#lU67cVAQ6jj>4O{W+v^oM&>Gc8Cmy zWObg57I)v;L?%*SA+*C#3$qO%Ts9;Wl7;!T=4xaGQWh6sRYONRuw0?TM9;S0>;n>VzD&tKIK4QTJy9| zNOO1uH0>Rgq*_l(%goQ*CK}$k2M}=*3w$cTKa7HF6>ohxWSadN6X{k|Lmp$_R9?bOWSjZa|a+`$O~3czZda*Xde$ET-&$PE561bR(l z713DZKW+bC<~s^u7@rZ)Q;9LK0O9EAs9!?#AdtD04a^WZc^o;%b5NQA!Tq!5J5e^H z?a!x>&)wT(?o}%$^5u4Bl8KAMf`Bmb-(h1w@5=-BGd#?O$&E#A^>%iCI3t zKe(|yNHko6QO~R)*B3DxV;MONa@YtyrdPmQ+`p7n01vpdO!dAEz#vomz$~{G(FMjO zyobk6*;Ifv3iIT+4yMw$bAKfO|&9|hb+o8GcUh5(`O8;Qc?4^HA^uOMN8wI?RU zqHbIpiRq4f4p%uZPnJHYeQ2*8GsO4dmPN_)UM+1Jr6j*m575&R$m#nMcWr%uU_igp0!f&|DhTM`ir z*=us5gtbpsIo=q|araG2?=Sg-@@MJqs)>ei+0Pm~s9k8YOQrO`7!)_Jrm2CJ&j5jg|kH*A4&7>-lXbfP_el zIc>QD(*d)~h4);VQVPww-}uo2cIO-Xki=@VLT|uulaWUm_LJr?WA23ji9eYn{~*+AF;)PejTVE`_fc{xsXbVAMV@8yqya%|BFTq^Ob zQuusKLG-$F8rB+yT(V&ZcJcsjtAe>of@b|GHr4%Y)lBcUvy z=)|cBevd;IYc{_YZZaOZ%2A8GBNF=Dahu(!gdybBM8NHMlMTLlBiXUX%P6DT{vl*V z-L!4kcP<;9Ao|+@0O+zWe#g1UFvL)Xt?0k+ItjSz|4m(=B0FT6xd&4JfT|kLC;QDQ z=~=L-fwkEf!F_J`CiL(l<86Os5*$ zc-Uvol-!jtB!8tLSZ}EdbWKWSbc_GV6GhJ1CpGUyX8TH$`j1-Un;3KZbvyR&Rz~&r za49FiiC9#x}R@g}@XzeKg5XLBY@M zoEE^Lhsd!F8%`(|G!Q*Xogf&xLdDy?fw;l!B6Ajy_}JF`LY=V&@qvjL>wMg0ixnXG zg_hZ;ys%yorNU7y<{Qsb)+Pe&Q-l(OHa`T|@=ZEz>n|K1DHU0baetf+Zn^kX=SXtb zA$W>&MT`4Kf$|!;NQK(!PnSgIw@SaM&Xz8*F$X<%521fNIenV{^6q&irGQ$DtT%>k z-STTJ=8R>McB!pj&E+df8{QIhk%kSkU{c>cm*~ArPTvd z(JBGO8GoZk0Eqs)5>aywWNt-{2HgH@j?GTE63x!)2xb z3Chf2cb(NN;K2hW7>0!-;CM;WjE<^-MN&TrIxJxrM`SlWD4n(FaoImlW)DjHWdRtz^r(U_cLMv zRw|dOkOa0=9gs~)d9#oQ<;h&zflMY}`x;kI09zf~RsXnxARSPP;K-4!*?{0*xJ>BA z+;*cGIwFvX$#b@0u<0~X_dv-R`x~O30f^+DedEw2c6`YI&!2vv$9S!sYMoRj_qSU0 z`1kK5MJm9Bm-pMW1%zzA|MGc!OZwV;ei)yhQS~_u)5a%?hXQTZ?I1Cq2<%1`8iYZY z#J}1q)U)4!_7%ws3`OsWJwYq~P_{WdBDI6KNm;CJFR2xdc)f*ME3rk@eE>?3P?j#R ze)#+SF~pz3fc=2yC|+!T63So2gN-aqGqB+}Ta*Zv4gki-Oz)_zSMDQrlL^c@l*+*^ zc9VNztHXU9nuyN+TIp+NJlYj*dTG{gY!9mUG3>?&Z1MiUK7u=mGor(u{8fsu{#kgT zh30XEJ@1up`7I6m@4~GJFT1werFUhJKsSaK=BU=$LJ|ZJM7SI-zFORXqxe9+3JgIC zX|c3+M)$}g;r&T2_rN5O3;{JAS;OHvx!8OT?+Xl52l^PUm0zn}?CCD_QxzTGP3}61 zgDiUY|Q z(PqO|OCu=8U{!oo+2^U%6JSH4HbQdU%Qh#u@&)wFh`%VIh~Lm1m}7G8IDpT~TZ29x zhm|Et=C?ecX&2kvRt{A@rTYsw3Mctp!ECmobdjCN{Kc&iYZLmf;9H6^g(HCbbi^C8 zirq+rAacKL`_|yxe5<=yC*nDG>@B;}6#_@TDgahF0oH8^l<^WgT6{pl!UdKoWz#QS zA(P>C-vLou&DJ;Lpx7cOaVjtHaPNuX361%}w|!A}LLONFjhtp*bQvmlN{x*+$kZDz zL;)KMIh_%vCn;>=7srQH_Ej#x>82{nD&KwYq7SxTrK;gOrNHzYNNX_J)5IZmYr0*d zQ;~s3d&!3r9+>mKIsq`ptzJbeZKI-*;suq|Bkq`n44O2O?nBTngsjH*#x|Srx~ai* z1|GDTRoa56O`Yz1(n!CG>9zR*N8r#0>@GtYLBAAZ!(k^K%3x@hw-{45h6zX7t&Lk* zW`yZ~`^o7e{7DK&>UvGxc@IkU*Z9^8G~NHrBq8E)&PT3!J!Q9W!t6n&l62yJm72*q zt$OEFVC+g|9C{&4(=Zyd3nN*BxS=~x)QBK^3>#of=kreHNT=ve9DxQ8ndlH>ya2zi zY4Q{I3GgCX3L-q_MuY3lh@!gI7o+kCL2Z7FY=R*UUaV4PxU^g|J{CeGuMm&W=MZ2a zuCDI~1ZW_?$=wrUI`~ew>OJYjLtd?|){Xw7>-$bUy($o4(Sv6285q$nCQRgOoRE}M z9=(rH0jAb)o@=8I5&;v+8*hG?>C?2>5cyH4f?*+ZJ&>*EYm#k5;}Ow(CtX|DrDOg8 zBX!xiVv~-c{&jI-vYbBwF5zImR<6;9OuvioO;Bq6H-iU?JlV0$l(CPl8dAS~;DCc^ z7znNpN4fo-{9A0U$NAyQ2>iWtC{cFmEme;PNOi9St?IeP?dE`OIWP*l_CM}mPI{7( z+kCtg#wARWAZ;3-Zh7F zHlDe0I-Dj_)F@?*1@D`&U>49N7oD&{BJk4PcO+b1XXt#)(Wwe*luGi!67(oS7CpYd zxBvxj-dCma(E)i6K%%W623I!zhohLI%;Eo454|Ar7(e}A-8I=`(BGl$8I{y;c)=8} zMqthept(|Bc&8rn;=4<4-Hn8(!djIwP1aB3|g+x@D`RDxdMbbwoYR za633mld^%FLJ5rJ#9^*@Ka(6mQ}c7V<_T_>{1xNOQF85Fw7VDK_9yWo`Xp>Jn{8YjOy5*4V^?8|GQO3fKNOkJD1$ z-N?)U#x-pAlF>YNwi>5wQC6%wten@0&=*!bARl{44PJ5$6Pbbl5BJ|C)c=Am|88?z z#c3Hu{>AVTq6IBK&TK9G;MIj*rxOoy9;V1)1K9Pov^G?%arI0dL9A!*4!d@TcXH(u zKmcoi#jr_o0FSJgRdk8d=!i)nxfA zXy$1haV3%R0BRZtI21dHMTWfVN>8SxU-y}S2rIMhh0d#_{86C z)6zmN`e;7zqE*kDd};9uLW);l82DJ7H)2>pv2r zz7PD5=5z$`uH@6paXo)t?|#0$Xf1`@Z4$?QLdRCowf&`cQl;Erpp@SpAt_%(a#B#0 zES}kQd7WUGjQcdhhWB%KR&cEol+Nrz!}+FNW1076(9z5h%^a`Tp*LaTM^~zU`?G;7 zP@@NHi@C=nNRkl6sWwZ{V3isd7I?i6!l#bi#&d|>4T2tIe!+F7X2t_=p zu^*Xhy*s+Qp)>j%DZ&8FK|%wDi#jsInD-J-u!W&>(|%$+O*~EDu!YoM=SV>3;Kp_5 zRixFCHYzK~pT1!JV&hE$JFk*Nek@$+&4P~M+_6RVEC3|i$dr@AezFz1P2 z0(^pu5a&|^l2pR%A)`K2Ic!PUn+R^K2JiUu6{kJJuH=gk>@%T#dt71ECmWCkgSA$x z`7$+f&2k*FPPv4qt$Pb55=afs*irkDM@zSetw;5c&r8j?oia1w4W0NSk|E#I@T=i_ zz7%jb$JX4T4TTTW*gv82tr9C~+b>0T+dq^ou2pAp*I zOj1Hls6CRrt37Bq%rV2u$y5a@4b)$*-=ZQ&`8lZRhD6~C*1EvJohd`rgaAqEMZXmlqWcmz=T6YcZKLn#s)Qk92^U7=Wl zn4L0Ti8KWCjeKXl*=OkuIIL$IxXf2LewCRIh&h!#Z4Lg8Oe6$=EN6oJLL6Yb*+#`;@O_Dx%-}X_xar2`8{I4=3Cwk&i%u;5L)>3 zgNY@jl#CgZnWyqi4;{tYbg@n<1uF${|DS;V*Bg0z|62P#Rq{dQq0KWPT6htxyw?Ks zrp2h()8_o=3V-B+LT~tILhWH$(xv%E9cdJ3*apo}j<~D6MTV3ysGcpimXNcKiM-V_ z^|g82SCCriIJlvw#xvY2Un3&;O1hIcT=P2=h`NT{PaQZP!Ka&4?~)fl&NdG1f^3|L zPV6~mb2f`5-VaMpUz@%M{yTm=$?k3&HwHUCVrT(-qxVfn^s0~A^jd3r6ujDK+<$SC zeQc&5azY!KptfgGxzL|3S z)NYNLo%9rVt>Ui-{N`b{DXx(8;U^;FW??rApURy)j7TAdMWqwYA*`n%wA#<%)2;Tu z?R^jR{rCB-&9T>Ku!%6Yr#~L{KAO-H93g}hob{n%ivJ8e z?C7uGdliFf8^!ieHj$r3QLUV@@N=@_VtLGTN)E$-h{xo?Vi!(9v(@&IUC0UFa-s3h z;y0(AnPAt#S#m(RZShWELw$iVc&O=n79nSKWkr4J>ka5JnVlM<0AR!J1Sa7et>eL65qeiFX8xzrvfSr z=qMp6)qj>oif=v-$J_rL{ap9q#h*14C<5Lh_>jt_UN396Zsw$tyt~f>^1E-Jx+5C) z*v>NK_VAYUYFW@`;^=129do>~j|zm zjxQWeh9eew-Y}sA#R?M8YaP7bzux5(wJkh#ZH+vzsh`hXY1UsIZ3X4xQ&T|)E-ve> zv#MLJ>ro3~$StB5tgIM+Z42rlQ3sy&SWHo_YYEB7i4wE4F`b!-PZ#abP{)h;z^UG=WOvjy`{J zSwHOl)HL2!Z@as#A@20Dg;VfLubpFEkEq9o2INNq+YKkH0SlXjGv27FYMQM`dz15W zVO_cdrg0(licF0}t(R4Ze$!jzCpvB{N3Wb4ua<|rViL8#_j8`{*YT+|?!>@(J-SKd zz+z1?NnuO1d6T^9{?cwpH0*tE_K+PhckFZ!hRSS-iQIm7-TDigtFlU{H^bFDIw(n4 zlpC|Oex~{q3Cvwh9eg+$SN0N@D=26njSh-r+smCB{CHz#A@c(M2a|e7NNL}dCpKpu2%`Qa{G<@%_!)umJ;=i%J!nZKuclx7qhyHa$GagU?7mXO&y%HS5haZ*erc?u0XeYoq<)t;!f~ z%8-7S4L^m}X=OW<@TPdZaQOrqjhn3(yt^dU0+3P`QfwB|x5YKgp?y(K2{(&dkJcnt zSelMDAL&m|2%OW}Cs>{2ovKpyDzDjt{jY~T&cBvKMopUO{+AZx&-gq1=}F01>(k`S zw|$o&cmw%#$gPs|W+i`J`18O1r!+2DvE0N|f7Za2dHuul3@qPae81K!>QQ5M>m}9L z-**10diHB=s5*rEi3X?DJIggyL&qZ$yPb`|bO|*CvC0!ZXhHeRR@w0;yP28Db0qO- zEmtNpXY;C5lkOL^80!g4p|_WYmR&!@h1VH18!l2O@)Vv8-WE5ZON2BFJl?zQQs(MQ zZd|y1%ePg#c+xmn^RdzS42u8CunIp5m$k_?*qA8?&okZ;4plQu{7ZSICVIeJWc@i%GD#C4vb_E!T!(2#g1J&P5UaEJKsA1;1O0r3E49BvW8^)oeqr#|nYl6^P z&A9U0A9$PXtZA;??1wP5vun=}*g@vw-y?`Mn65t6cD}(jHJdFjexEdkFi}uR+pX<7 zw~;n_u`W4JXiT^Fx|#%E5lvP#CezhbtwKYRyMOMTA*6ma@S2}a^XhC3 z%-8&sVD*_bn}C;7{zz0?)N%dH@zMA@JeIy5C$ru~ld9(NaZb=&$w%}&A+5){7)a{l zTRL1o>*(*%xj%JgKU5Y`gS{;kynr}woXo7 zr9B8C^FckaRkKNeUcE*^>zX`8gZa_}t^6}u>FL0?Dj%!*PH)!cuxH4l~V0+N!q{Oc+x?pflw3VJM0 zr>_74k`_10140sYMzNRL^WmZ9@dA{#g3`|B4JTFawaAwqGmxs^xmb247&<{iBQ>?c z2%1jEkD3~p^8mMDs+V1Xx)<}&+C-f(~j8L>a1EbGuh1)t|?X))Z z#BzF@JEHVQo8q`FFO*9JO%&|j3n!XLrR)sFvLihyru?XBimcmky`OZ(S6DDxs<6(n zgv_EcB<&=5*{`U*_NEu-VUlVwMbS|=;~47$`1ElTS%PIqFOvVKiB+{ekzWflR6;^d zBGjExDn!P=-0sMDJ#5yPrQnM8czGW*KOd5m0$V1P{rL7sA>yoS16b#$FOQBiXO8e~ zHOgHj>8<+A@mDaUnwwa98z7*jnbLmk(apFQ6F|x!-6i=S?o}(eSK}L0zG~xg=-974 zjQj^SKPK>1q|^=n9ex*@5kZ05jH*)3fmK`E`NC1jB-lzNp9UVGFJ3vMj^n39{eZFC z#8)_B;uP1N6S!xGY$wdiAAAMO@2^aOM)XbLzU~^+#E0dBb*=qa-*+K}Xy~P)z4pFU z6c~XVv_8@aKH+#8#;YXvyg#}W#aUQRluIEX-D9&Ly5ifgvKosD)Fi#)+=;!U@vZDE zRTa1=a)1a?vzPL~hI0^37 zL}bF+)jTy?D~s?fp|@~eD1)wEhA8Lqxkg7*haqsBNK*(!m##%K-!hukcXl;RY><$B z*Np26_l+zeJevgz#yA=Tt>%@s527Fqq}5C+@fVtVcJf0WwVXwvj%(O?_~er^%LLsi z%~FZ6H3qR=?DM9d#5)6_bVsl>{Za5aJVkwjVQ8_I$=%<-`2T_no^zsXyOyXuy#JKn z0@e{w*p+M2JkaF&AJAb5=m-2AWYWZfSxOy;2W*GtUA^M4h+c@Df=n$G;KkG3tl11p z)GF0s?pJg*pH_0EX1X!N(dn6@hCtnf;_!S!aHH4X*Qs11F5Ry3qyks1B-bQ1!0Y9` zUkWz4UoK$M=p9BiEw5SAxJ@NSR8&Wh#5XFykKJhm=z>)QQr`_lkEHet1v zAe~LGS?|;$`c*%h#@@|#4d>jdXz{%cNvkLMNp>VxP3O~zsCtH-T@UYC_uQ;I{XS6C zY)v;h(-J%KU2dZo@=U)XOSrWH|fYclVkPaqqL%ukwzlmy~ut$T^~zt8><6; z20ZI5dUR5^kIAfNI7t4O>&f_ECHIkpv>8+{K3nd!g`rHyC6eq9zS8U;HVlcam3%3^ z@s0zz?;}wWz5t%ZTx{(Sy>?OS@&1UOm+BdP?!uG4lZB`KuZdWbnD@*L-FsDP(6IY! zBT@IDxXKSOc2#O}SxDu+GP4RroPk8ed$c-t`utWnu!RoEY(15mL?ou~=Rqwo50ceU zptQWpVgHQC-Ze759R{^bBezgQGWSyi{PCFs2Z|jF-{IfM-XQE^F{=5?8gi?^y!UoZ z<*g=L(VpW*M3uejv^W}p^*%eL*MUMdO1Pi{q<`HyS)x?wGBfxDn{K7(0)gV|SVk;4 zi}!JePj`U>wH`@lJ+7E&D(chm-ptF|$NpLLBKj@dXM+0{Q%AR`UJ=VQTvzQfloP?+ zneX+<)-2<4xR>mB?p%tyax*Wx_`Av)Yw@NbT;UwxUkW)x)^0K=3sY{5)zC3=uQn;0Y-wT!}F?ud?sj8$n&4%kC+WZ64W(XNdPT~j-BFo8J_InD$R=`7Cvi9yk2{Q9+w%R7*Ykhj z@J34aC$Bz)$iB-pxB)Ocl7F4~YfdOt`pG!*+uz}QniVA)E+W`HT71CUyjJ2lZkGRz zwyQ$S{a8OZ9ldd-53fZ%Jh;frm__+S8l0D$4HNB1Z|G}EB(V&6@Zr;^oh~1%y%m_L zux~C84M#`O;O2TK8U1?uvfG0GQ+kW}DdGh7i}}0Tbt#_5i<&h;@@w8v&0s&N-0Y!91i?u0Uv3Xst9)^pJxdGn{b zY!)nknK+Z+(+kH$Ce90DqJPxIC~o^WA9TJw>O);AGb-}tk#6DGA|Z3s(HU<|@~QV8)OTKdv;G#V=qjgM)--Ot^PX#rjvoSrE6((rf>p1Vh`WGtJ~_ zQcuyV8&1r1d00tb_7E{`K5N*lnn8T*F;HV2QfdDfN>$|3;I4k!xGW>8hF`RjERH_T zJ|R4)=N4Y}OrMd^ZpSu)CrxZ%mhxcRayi9SR*nIif4k;zCd=sg34o^WO}{Qry}i(G zJv|fHUwiJzscr=82`N;oSh^NFg5JaVYZiE2BgeWc+DB6HjG6ek-ECq?mlM^t-X*bIEr zG6-(2fSmqlulD8ZdpN!Kc?uL7GiJu z%gZl>lt*OC+mU_!bt1doVLOscJ2BGgJ zs3;LW5(YJy!%A67P|8M~1$O$a<=hniTYOh2{{ukU@}IS)jT|W<_&g-DChn~0)lb_Q z_I>kroiYVWB`X5F)>~nLwqi#mGYt}(x}6Odt+&fG);+o>WJ0F%XH}zHx7)~PytvH$ z_E3N|S*zhQ1;H_!A4V@^Xy4+@OoU@=%oCAe#+yYzR|(T&&#o|^JV~2;X0?qit`+C& z&c`-sH2{%xzhUKCpDoEUEI>`PT5;Oksw5YG98I%2m8PTYmm;hYVfgVJKm{TPEsU=P zKN3MI^NgtDhd}RncYqtP`t1p=ft0_vq4r#jHg%{rK+2_VN+v^=95jftQmPO%0P>RD zdsjt+dPy;OPw*m0B<48L$00-NJE4-{GXZijT)%E2t5pUENnB{Zb$X<*+ggCm!LQ(~N-^2JSYJTadG_7r}0m>{PZ|BQZa z^)`(II>1ha67Bgcl!+>|k1l*K+5UN;^ptVK;`!D{@Yzntt7k$~eM)Ow#k1G%kg8RB zIhUhtH8C`poOBI3oFBi=ezjv+$X-DD%34kpy7-8YQ?m13)@-I7?!|Sdx&?+(V-161 z0;9o)wc47?nx8`5Q?Uyd4|JcV@avOAV;`nSqt6r|ioFhCB8Qd}w_<8b73(i#h z$VmHX*bK(-h}!ibaishj@w%# zI4e`_W^+PhqYF#*&6hozPJX@Goq4@W%PA5ZzWy-XQg=LPs0YN2j_ zX3sZ=%vV7p0C*o=?>EaYujs=Sq4j+Hp=z^YRL(vUiOMyBtEwy5X;Aa}!}ltA?YPJ* zh!X#!SIuCk`b{8>DB3V8f-mi=zMNt15 z{lax2kyK&bn_YJXqo>35l56zpafkdpnRh(LmETnNW(cERdq~l!_c*ZPf2~<{>JN!Z zu8Cr+yhjK>fz7{jJ9#ofQ+gvm?&RO~qTc)lRg*xyS}jEJt4l=TzK7m8fryBPT3m1t zXHE^K8Uyua?bW1?SMYH20~!HUPNcydB3^ z%M8dj&-lK*@n}&_#a}K?muIhE@!K{?ZaWa zO@zN@iGiNi01_6vY!W>nk%m@1vp>R4g0c?%AIjb`Eb6ZB{-zXEO1eu@kPeXsX%s}I zJH?@qPU&tK2|>~ThVGKap_Cd*I)tHPh!J=;=Y3w+|9?Nn@w|B6dEhH$|MuSBwLWX@ zCnfn*AFaxCoef1XJB!BWfr|pphtJvr$=+$)TBBlU$mpZ`-gGbM!qt9gRdL@FXSfetcW4UdMK zIoc99dlJj_8SYAYaq%C?b_~aodhT>akI+b-+xu^rec^!{*LnDF9U7(U9XwwCR#4(t z+bM9j(hGwheZQxhCwh%jAY-#}*IRW@Wmaoy3s^0jyg9^1{@U=hu5pS)FYVnS0j{2XMWTrsdRWVW> z`rIxR4{Gj#+OCwjcyyda#S@y0EFH=^<wy7%TZH55 zqqYtGKGQ=xHms+U?u`upY+MzYdp+?VB_ie}T6hb;VlQBz&`-SAOJCWIt@63pJH1hT zn*Da2kBhWC*kd+Xl1^kCa#uBJCy@&3+!r<*H#b~D1**SL@lT2+xjs7c^qI`~0M=9Sp&g_O?KkYq#MK;0u7 znRbb{J)~Af zMUIk@kn&tA_!#>Ta69`l2MD7!7(q@TSoavp(;%9NWi_~8z#?2Jh-cZ_ppB*OOy>`lTxf;ZHhEZI&f!qwD+^lseXnPj<4hS5rI||hp}^0rK{Z$#s7!?yqsXNddqK)moD;kbk~O_5W=^{k(f4l_w9M z8JsuX7*H>uLw|HWsMHWNG5yDW^6dfV)uAP$dY2w&?@EX_v7?D4TL6$vEv;*+!23{D zr0(4>Wz#*G%3Z_Cj!o5xh;MvyL0;aN(HqO^KJrSROwaxnfA4jxlO{XrvxD)`vb4Xv zUGMWYu2wI`pwk`HWygX+sawkR}ytTwyg!_*QE9|kl#|-P0w;;Z?iBF(W zmeAMhpX=<^eaWkD@H`j;cf+&{_zyaMn6lUz zThiK^XE!yH>Fb-G1ZRDv+ zUFk*}3fjof)O%OEqTJDXPC0%SSVcj#q=!_8B$wWZ5TaW^G1kdw-xiNUw>7P$x%?;x zYXa%J*l29NXV&&)qt(fh;}K>)10=pYPBEc9b?hNdq~wvVl-14YW!{QM+ZY51#k}b zaP9spDVK{!k2Y3IwUZ7_dH|a^ z?GB-;!^@ki{5#CCTN?kp#7Do^xH!=T_WRZ%;&gjcU)?HJx)NGfmbJa) zmzW14^bIU9-P3$jr|PeRG^}5gx4_BmkX#PsN_k-fQq3&~FXz;Je)DcoZ$Wv~W?C;y zXw+sm{~oMCRt6U$m_^WGgO%!Jm?bNX>FGH6`6ljkW3H6K)dx(VT-IMZh%MBxjB2j~WN>4)a! zsT_6+nZ}3O;m>;i%oV9SZ=VJ#Evx>%gOm%ZXw5FHv@#;V3?{Is)@&?x+JBmKvQUQ~ z%RxjrJ*XHYD?YQ0E`*R3@A$k7n0!LY$R;MiM^>}*1gJ8qp;QtHI_Ljbi7Z+6C%|~S zKPVRfk4`YS&lKG)5`79a=;lTHyItn+yJuF*z)gsZb29fmQrt_UBNHNMC5@+$MJ3nU zzGlO^5iNqe=dTrl7BOaEwxB9tZazarQXyFdKv= z=lVN2nrYq3rZrqe#Y8n+vTD8L;PUVwk5ThhitX^XZEh1_y9M3HjCJKNKV}sEVnOz4 z#QHKst_w!Ej}c{_aBG0!o{6+G=h)TrIja4SK8WNZxobJy+g-{Dci!%VJ%sUI3?`88 z(C*Ow_l$cg;CwScEAjK+4$Z?wEk0}f2pPWKw?Ey_w8h5%Tw5Oyx@flNHsxQlf50(g z++IUNxGfbPCAN_KRwH++L3~joX^&{wvgESZzBXV2^>o8{CuQb1s+B1HDao6EDUWZr zG&l-oG?eVn?sKbL4yEdZX{p}&3kNC^jx?Hms$eO!?dPnKGjn}Y>J9lc2G30(bki1X8a9Nw^dT<$R5nX=idfoq3 zhJ`_P)WG03KxdK!6<_%8a7!qRGI-Pw9yT|?j1*$75{ zym)U(eXF*2+g48n2^%ZD+gNf9XH%Bl=ie^2hVwR3gGeyD-1wTWMhr-qrdCDJMg2%1 zKyGYXQev`{^suE`#gvwOq)d-|#^b!hB0C7?4Az{FF!I2EuJ`@yhGlatBEhD3lItyL zx5YTahFj1%KV>3vMRS-F&JRn-VYv&JHqMR8N;Sxhi=7nHn*}TgF?#S*zCfslgQGoSQxuOzp%65lM|{qW7`%&d&GUD6i* zFK%|pJYoN(n3U6?+`n*kS-Oj*S2svou-mYdm>>-G7#(2QGmfAHo1#q)Z@x*66Qj_G zB;saATp3lt!5cfWG}&{H{WVOKP;2f6^aPXAHEPXgE6@bvqxz`Y2FNOZKPiArO(wji zZ<9tIQmB3&2&B?6Kh|P%ocO&JzjZKwOF`}|;#gSuPu?y&oI$CjDr|Jz4Jm2^_ zbY%5s&$eNkL{$MJ{P39VK1uWgls?PU{zrWZechpwgZ% zEz1!45*JQYbJY~=xB(aynVD25aSvZa1uw_!*js}?l!{TD~-XK&GDhbTBKUHq_ z7A5@)R(E(4=9wj3^{L?cGjq^khQ~_$Tlt z6s{~jb_iri$k3Cc;CMuFIfw@1>B;(!+r`xN17VaptDewKvhL^__Xj3mBZBu-p@7a3W*S$9GOjru!yL3N$viX2DE>lGJiA-Z_?s2_W~h$6sJ|2fo_BIq0g=AZ3^# zfR*e$AO7%IqiJ1stk*3A2Tz5LlX%9RKhV;S7SaqQYJDjGJjF{I6dNF!CqETEw>bls zj&BSlg_Wz~YYi$THpYn|6^XI2)}-caIV4P1m+=%^r`^xWVyfp)gO z?6Ttu6v+W2q&n3jChVA4J+94?N0$mqh05h7ox zc42-d)i$uZXk<~M?_ssfY{BPrLA36`TMg#ZS0gXeU?uusoY@dO_6Ue1}c?APDhv;hU7yU2+8 zHp%;D4kOP=Kc`x3SO*T~xTB^qd3_~38<|p_=oqB`o}YfN?VPInP}AIFId+U1EX8h{*E7u%G{^+9VTOF4R>o&Yh1jgjkRV?jVrGTUp^CDKn zilwFc6?%{5KEIA4F_YKGpuk$@5b`aOXVaMClTq}O8$d8rs{Hdgf%mvcNC&^$^UPxx z7htwmw4V3-Mh6QV=Bld_EaM&qb+aAc2WkaTLiU9eKaomNJe6h?Z3Iis`xHPshh8Yc z+ux4Yb`-awv8`CDc_!ax@vG3V$^J#7Irwg_h|l#`_|EJ`a3X#B21*g*Dh=s?5mcct3~22zIq>(OMv_PaRAE9+B5{WW@kwsio@ zN|ZnezD45$puQC;Suw;YnO>^67|<|s6m z`@+io_g@rh@Q7xf$m+AJ64H8(jca9QZ4458Y0gOaiovMMaisr0J0^tmXA!X@>LZdS zOx;bRApn4$CWAp7LehI9AP_;feR=HlU8z+vWUkY{T7#$XLpK#!Dbr3x)YMYT(adOa zL_(kxY#5YTUJH-7@QYvpCk%YlXp?`p<)LQN_$QKsvcvu`uASbZQznb zJ(76TsJ)e~+sh^eXly!Ska z8+U`|-b)H>Qqto2Y%WHqvRJN#{0pS(zr&BnLX0&rlNOU_nG2MNn&w8);bGVf^i#Al z;S9m}RqZ+TfQGflhqH4Qw_Oc918BU1UPj_QKg?dB2iG4Aam7i#PWp(1UJKz7i4wc~ zl|Py7%&f6g64D0AQi=DmPkf+tvEGpP0;W z%y9hol>fqayRPK~HuhK70kh&p)YCF(LF9U1* zzYG}62L4PN_8zS@K}2J`PYxSbmdAtX3*_pGmnPjIPNb{gVZO8o?|1S#S!}d3{uLWi z)Kkhp@yBx(-tKVA_i#`@YQ>T}zp+$Erta#z+s~d(_~FgATM!C~7eUMtF$~Y;isrrd zTb_3(o7;9}^mVl4N4F{Fp`{f)dEl9wT)BIXj~Ebk+P~ z11RN!rmFTnsi(Z1S4Y#p?nB1!G(NX!gP8X>=#84v|6vNZ3 zn^4qi-%)VaFd?Guva8;Bx=!1lSvwcv3ognJ-~s(M{ah{$%Nd~UcHxQl9b)TpaqIZ@ z#jjGNOk2$NRNFW1luX<5gI2uG4Q=`9;5E>rU*Z&(_*74K(T1}31keC?KvAc)q; z1yn~lcrEbgJaea9k$?S2nnsM*&vs@Z${R(z4F74nEAY-=m!Q$6@U+!(;f`x3NHO8@ zhnpqPwhQ=BCROexf?A{Bgfk?NRW~uxSU4( z;UCwfFy`19%V8%%$#1V^`H{Ng?m}^aFC1W=(!`AR_iWUHzO-w-ax!{zJ`@EK1>=r$ zOc5DKu6E|aq;$O?!`NTsb6|f<&<6TgWorY=cx}sHx1kLp(xoP=cM~@9S(Y5+vspN z^A=GrWLn1Ci6CHtX*ZsG%ZK1d>tS8jAxxWjNmX4wfS+9#5s<{UE%lB&sHz8X`brgQ zitYSnw4-$>EuxGJO9(rC#YJ>4z^)<>2k*N6IXI^vSLJJ&FW1lR6>o{boXh z)eYQF7B|0EGVARSQ#RR#4Y%gp?^LWBlng7oag8pnR@(>3)KI0|#y(a^d&A_!W312& znR(`@fri;@e_kXbo%l&}{E}%;Y|8YWPnrL>|1Q1@v!Ejh!}Z1r<%C6G@_!k$?3cWu zuSPY2#%7A{|5Kpj7f~|J_|-FT3hlgwnJ?{T4<1aNAE-a|{J(cH10x)~(seZZeZo&S z!)A~5w?`_6w6|!CRxU=N-q(OTQ4W0!?l+!`+Fx2AKeYEg9Q@iJo!xug`&(pvPT{QI z@^?eJ*PG&la%-8?3^5!|+6Ufbm;r@sjo-J=^YY&NegnaZWVgF;p~-fvkp>w4Rt|C*j?q zU|iiuT@tP?a`|^2MJc{VP~MnlPV1YU57k_4=+GCL0xR-sW4IpK4GWw`s>XN5IQ1;P zj%##@z$#bZNw%5}Q9k`2-VKy}9aUq{SAgc5gQ%|cOte>xFUadbbUdN?@i($=68W`_ zUrYMb9&fLhiT8Ea++!Ferp4wMgvCL>Z7FPgM+L~s*Ki{u>lUN=M{hT8VHLU1(mMHj zv%C%jZ2EOs3KRpA5csZey1e!rX|=@i(cb@@u_GJAJUap_r(j|(Vh}^o4e$J9P99lP2rnKk zNY{IF(qg>u+U^eVF@bFh>;#K$v9WmqtvL%QPu-`g+OK4-IF&fSr2ESS8dmzDxzfZwz2|D_wGF*`Uzcp4&_u3wQ z^JA0!@>8EIT{!o`QWczs)FEJah%L>N9?0VsYbT3p{(Jr`V{)d3fyrybKFn(J?1zx8 z^~3VCJH)=y=Pa_!)9KTHI3&4@=00nN@kHZ(J8i!ff7#x+-eMW}*Y+n6A|FtFYC(Q} zrung5UDb58J}f~d=?PvritXLfsr z0ki9^Jp*sX(4g%IhiPvyz=s*|h+D=)z2i>X(kYUoS!A83EaM*`yu5__D*7SN{O1MR zL}b&$!rs%gDRG}ZL2KSW_UQaWY%*F?J?Wy;O2x+X-V#-CNMrs5teRbHb@@wmiHe_D zbwoh+1B<5Uil|hN+K$m78-#?$9a39ZV~<{ijXpjf2n1ku5w9|c?>K#Y3qoJ8e@@H$ zMW!9J%nJspg|Ag1;i8q?+({OIh0XKPqRibW&!1caqlrzfb!%Pwbd?w3HxbNWr(2}T zMl1Ju9cY1qwfH*md;%r}v7329NnH-ij%ugyc)HinfJ*cfySy6xri=t^@6@e1KQ!=g z=@Nc8gd8y4LnACMdPM?lnPpY3n_9e>UNZdM{XDLh*diRuD73@4!}wo~a2yv~KG;>^ zKP&*usZcrh_ou4(qA4d|;SC;j0Yk>Y^y$5c?Sxc)Oi6B9 zxyD3D*rVSRtly_-sF5+KmjPd|WS#ya7fXMKvk#R?CqQFr{^&Xe5-Th&PNo$(S)+<=yG`mHgK!{r3bZ zLc)#d)i}J5|4eYJbh3{47p}jje&kb!3mzGc@59}+yfYoNMxP?UCCCG=gAhnoi`-@9 zs*#mH8{a=W(KvSK;seddzoELc-g|@2ewnkmH5=g7g=%w=!{hOSdp z2LQ}iLj=KZQa{)_kVRy&TtfX)vj6CJjQzX4DrIb|Y5;2CD*8BmW}Ip^qwhV#MsxO4 zcu9;HdbV9kU+t8`+Y>M%#2%tz61lyu-*ANLn);a<8y(s*VBw&pQS(e6oc#-!J=M`h z=C$3>%RWsUNZlSDgZ`fqlIR&^THSKel~YO1 zo&7_m`4>A+Mu5%By0Bt5&!YgV?zc{TfADyfca^UN*U@if2m{*$_QZBaNY`&G%GPOB z+RCvdLukG~Lov}$oOB+9rxb1048uenrca+c?>DD}S->aiN>BOsgLfJIZ{ld=#;qU# zr9EAc)-t-A(0_)O|H1dHVK1f}dzc^zePENo{22dfF*PG88VZ=KPM(dgZ5J*w&wjHK zG7z1^iX8pw?;l>C4I>uTu0)sSUTqj}fqwqXc$LL^{VW)E7>DMp< z(kN2O=OEReoHJD3AS^jxF!FY-n1>?u+33auB5v5h;mKDbqY-0xjBT#lb7w#kNBO^9 z_dLpOOmf-$U2a+|Irx_*14B+~pj%);GB)ab{us<9v+UK=PN>=e63~6KavmUro3REL zQB!LZUiXIzl6rsQG3!-ta^wR~59(|;MqkMbL=KG>1}uxiMUSA;*=m>toLD$(%R|ch z%*=3q&dkEEVlMmaDM~O;uC0bt$Y}cP;K6p>4<#*-)0MS8uiu@^TO~l46zI)0Ea0Jo&2hzCr3f)1Q*6$!x(s)BU0M zRdJ1*ZtKOJHLG&{OXVMlLLox&NSebC2w!@O-`#yh*nstbJWN`}w;W&@f_TI?ev&!H z@(Y?3$JdvJpqaF{zCpk3E0rcfz?900?+N!q7O`psAL< zo&FCQ?i$rPf+nKO!-LptpCm1#ZTTYqQqA%or9f71P5P@i`pT&9vBfl1?1fiNgnk`+ z=&h0itFZh$Ox{IdN9H`}k;zc^rQjTYWYg=+<%it(QnuSjS--qpJH7FdC;05$-+2>u zItS|q!d}q0oj~U-?YD(h+o!v--AAxKGfVw|5?f5IX4Dt4N2xVtzpRq3CbC?&H94YB zV3yhHFexdV;P>7$M5~}x{`FWhF|iZM0;O4SnRLnYPs0)vPq9bg6WR$!Pu%ZL2n|<6 zm37(X&@!8ve;AO4lAPmCCkQe>?Qi8_-oVhd)s3vzSuF=Tq!&`wyWi}Rw>>|9dk4-j zAZ6v>#*o7!l$nLQhpHI1vTE_G$J3jQTFM>WfiN)_nu%Fs){proe67A7|FF&Uke zX!F~X#oCyCFm#2dc5Wln1RL|qbqT=XHQH?Kt0yt}NX-~|8y2uR8yF$sDm~jh1ujmgus7MzT@ihEIukex8?%O< z`R{4-bdM|t?oL-#nhxySER)W}oaXATZw7AX>O+MQK;h1=ge+)wfoQ-_z!V|WKvr?8jM%33Qgd^Gt7!$wzEHx?q1 zW!v*vK#Hi-rHC=)uJaREoDd8kaSZpyPL=_PUs4*Qmm)+Y)TnfS`;b}T!O;UZtGU~h zdkWz4r8xS+(E#FGSLH~8i3O>Fbs4OZrN;VE+yjAk|3wy=pS?EhvK1y7f-}~-_}{#` zWtGhBPyG*0qet0jqwF*Ja~||*;%SA-Hv&QwA@9}yq)+Z$g_uH>9&Xy<_fM_TBPPy) zyCMz0fD*FeHJsm*bfxG5xBX4+J#pG*?|XVVz7j0rjF!MJimst}6s7D(N^4Jy7G=1l z=`m%3M_fY-k+%u_AwpZMhgpSI3J_Z7ER7l!S&%v$q@+*{GK=@%(gj87O;}N6B*7DcAvX(84I6A5 z^l=F2`lSn$xgK#Pm>(FP1{<&6_v`ig=ek@4Q_B0!t(_VZNv}HOLayXJ;$BW+G;;>1 zT-ihh*Ox57n{0svgw-*=ovQ>Ut@E+c6#t?5=c8V7$(3Un?TTL?axr?xLunV#5}%%L+o{gt#ei^-6Eo?|QROsc832AZ=Otipxf ztFJqGqR&yuwwxZ-l*z^AJCFUEGdB(ZJ%^Xk?h3m^%UBLrx1#|1q&;w?y&G3QuhXQ9 zH~h)y;-fZ)#Hv)qj}6#m5}=#64G+pJpp2(kK97uBMFmA`nPm5+aL$=v(lFcYl@)Qe zos5#!>);$lFQtfKYopHBHXFQ@t1JYYzN1aZivQ&dBq?^0(HPyc(qX|EeCF#KZy7$B zOir_riGUScN|XsQU+UJZk@!B)!XYBtGqY{#jk>6IxfAmmN8iofAE9`kNo#fU_g+>1 z6o1YeOJ?=^W%1lm|LH@WkQ(vC&1ZrA1 zcL@u;Mq(Ggh!Mo72OHjK;^1B6x(N0?gC+g0e0b-6bO;8aVnr~4+^~*b_Y7&YHOecq z9W1#-J{+msQN9y7J1QrEm>fOoPeFZiZXi*5Uy+&&HRv;g;8mo*vAjEbRp%GBA4~~` zw1n97OZ1^5S>`|h>G6WTkTk;ck^WYXM^b~w5093t#H9Vdp;(L&`ibI9_T4-8w4BJ= zmoKVsE*S6UmJYGZPQ_P=P^9AB+oQFRQpu>`dIYm627Ja|B9Pdby1zNJ8SJe(cqWKEP(o80BU z&b@D2423`u28UbI&6@mny@SyQv@J>pgr1H2ox~pcxkW~I23TaZu0eiivqaMTe_V_y z%ifvB*xXP(wQh{zUMcj$BTA)UN7IT5L1i^M-N=^BSqaY}fNr68IWf)b?`Vq^;!bKV z7z|wUgziXMLQ{K9ltH}kce9#7NK!)b#rb?hfk`@!Sm-u3+Zyvo2CjbJ(6K)3z$>ii z`HvCui}m%IwSD7lIHJv#gsDGEN+9y1-9VBTXYDF;`UacqPeRH(3dj!-)c|^e$6cku zR`1R%$7ZQlV%0fD4`zFI6xq|fe|M`!S(-t=wig`5p`uVx|5EV6ShpYNR*w8lyp{Ye zy=uJmJ|6M5LgS1bTxvT-wHa&%4U)5&)*Qx`vdbWZ@wOy)T!?p7V@PrJ*+calg>Uf> z7!~l^#+Tf6M>)c_9nuwHiaH|-(v`E{rBi-yfP{b_`l-h>%8B0^QAB}*cTBxqRsFa4 zd7Bhv^%d&so)X3z%N!TClQ{i!@3K8rNO=z^;UH1{l$OhV;}3u@J{#XS`a~ZzE-lX9 z3swL64PWQYBl5+~dINo47y3bGuP{aSW+&tJ`}2=qiS$i+8k1oL|IM8tsXZI9d22LH zXWu+S?3oY{`CvlDyO!!&(3$%r*L}}F>Mo&&j4|j8sc&a9?KIFg045>i-YfR-<0k*O zTF^e!H*4GaJEy?E{e|%NZyuw*J-8>p-||H~+qw^pC~HUz$LLVPRhw;VvTe;(66b+P z8N0qTl9?LWekRX|8T^iu&)T7yJHUwA<8pAJxbKmu>eQe}?&nseJEmJYUew`3=*ILtcPB6AcbF8C~C)x>KOw zCjS5>5uqk6s7dGHKf*+1_BzYG3o*~)5@!!pX2vgi^O8LgC2MxbB|Vk{2K!Bg)mSc2 z9nhIFE)MBuPSJE+|0GDHPo7MP=JPOSvTCR>V>CqqEx!8R5xcg)NeKQc5uF0MoWQ z4H=6$uMMiE(b@1|CiaG97oyQDsd&2pH)olDf-<>P6_6{nm+|xw(mh>y*{Yy5TV$YC3){K)U~<&6t_)gpi_|iZh7nJtM&RAA7hdZ z(M$ELWwPftwx1BaAXYaE%94qwAyRoYfyJLD0b3L-oo8V@r3Wm!qwFfI*|TT(OtO;6 z0j^=N^Jai~4s=b%dV5A}1)W$~JwM+V{M9Yy;4(4Mf}4>lr785$NGQSVRhWyi>PCE6 z4A#2dtQqd(o2HieDkCJ5wQO)WK6WKln2eQFFMem#cnAItDr@H_^331m|I)nP2;-Yg z^%-rf(J08+txguA#yfKnaN?!hfSm&-yfd_g9Io;;wu#=ovMEfUsu;hjl$ zeW_={;nlPAL4WW z_t<;AkC|)}GK8nmzZDi5P|8fU181a7s1m=0M6V+ev=J=nQXq2BbL3-8`m6ni45Lvi z5}$iNP!tASIj~4=u4T|4(yt?5qI`B*zF;pDEdr#49;*)~!0t$wUTB24im{`M6CxO< z*d%SUo07oQ9ksRTM?X664ZFyxx$?2!3t{_jy%mdxMQJ)lM_zH+)86iFSM%4mxoary z?pJ*pA9aoL=kK~*;lF6X>(vG!lq+m&s{pa{h&WhN!&EcgbKZ{5w0TdbwRNb)tZvK! zA9j6g8d7TxL9~7;Y-ysdu6`pX=E23Fe=a8(d~X_{_;ltEITw<`Lw>WWJFTO`G}fy1 z4DSJre+8CIK=0P7+SF^nN{jE&0?u+E4x6pOJyjg*MK(PRs=kR|=|xeNc<84(4N5l5 zdn{_rPE`n4$&4H}Q-kB_vpwA&@cw(E14sx5H_RCCefRPo5WG!7DIe>nY{q4@YkOxp zwD9?=+n>Id8AorNaPT$_TgHoOd7R?KX>;sD*^?6A$_0Je^=n_+=_q|U10i!vE-h~& za|arqPf+4%@t4F_YQlSdxFmM`LwWbpO~>?JKBPg=QRT%#i*vf)e^8_UBP0G(c+7Q? z5>anm9${lV*;X}X=Q35=zL(jmM7Xz1w#W(Tf=PWn9ZCGUpZ*S@vO06n*}IyX=y8!A?V;-mVb++NaVW( ziTH=Es>=08*gn$lKK2t9VU8BRXKm1Oz!EaGmZ}<*=rL|Uk?eXH%EG8F(@1#ce?Egg z&~NLg0&^VWy>+?m}PuXLk|k9nsDk_J-x56Y+aNbSm7d>T%( zu)6Fy(;HB;AFx;8DSHO%w)5nhUu%HJR6;TKSii`0%@HN+Z$z=VDH0!)q2%IN>JJJ1kdZ|l#xR`lNih_r#g zR^|j=#dNO^Dbt{omgLtN6Ya0u^N**6_>m4KD-PNhp~M+*znt|MN!q7!zUYoFOeK=- zn(ej5VKGk15NZ!Uv{<;ykf?fVGZ@CZ?+Y_En+fBOWc2U02`D?RNj^JFBlf1$jP>we z6`Q9q&Y56ZQp?U)Xe%*#;*prf%-Ar~F9ltqoXM~W>|VS7Q#r`lAE^~S5J{o8l*N!A zJrWr*9cX6U8=kmlaO9m1u_JBh3*p{qgq_}cAPGAXQeoZ;ymqrchh0)`4b=<#u(j=x zM{@H9tB+n)wsGuOKC1gaHup^z0SOFz_J~8{RZ_mlo%tJK_}m$1FpPm5)NJ{mZ4ozlT537 zb2Xv#Z5Dh@QRT|s5SAd#47|KCHl8Twmn8?~B98Y9jpPY}rR=TsD)BTL*dn~&E?Xj! zEQj0DrN7n|u@OqF8oT;)R=nUH*+~p}`}K49j)Lr%i(`(94%X8{J#+eC_cB0DhOb+@ z#iv6iy?L}MUL`I>MvQ=i2JliiK%KZ5Two#ePU&XOZY>n~#OKe>m1dg;c;XA4R(&J+}$< z+@|TemQ_q6W?zXGE))6cI{9OLURpm-k05r^!%NMXJ53@e=PCwro31?eiQ-!Z4+Zsi_rav5# zfN@qQGLXD95^u8wWn6NBbRb*2Hp`WsYZuc9 zlXAV=(Op~(X7Le)UFJ%ee~tf#vwKRjy&BcU{QX$m?W3B#;6kQ(L_9sWj=6q4Gga}U zYKn&SPYze35v_t0d+gC(dU#^UA94(L{}wBntWyfb?=@|MA)$kTFnY9KsP3>(T-r4b zzlWjUcOge(f)_5wn+pj0Bj;2p z&_6V z&Qa?dZhJ&B&<~i(rzTIHNy?393OEH=wKG!Bu^Tn4iXi^>81?%j8WU58S|Zb446}T< z%W?UlNP}L~y+gdzNM(^0n-}W02YMf)fBH){p?mvKk9!&k7MSZkyS6#_c{?-ae;t?W z1Z8d#JhfOUxly?tt69 zyXqd2=R3(VCCsvercFHKxyM`^qS`s!gK9zFwV;5HQm`?X8B1$NGOVg1{C6vJdrh+S zZ`=N=;@DK@I7Qem+)pBZ5&4d5N0o-4%Pkfafr|Lgz#w>=f5vWi?}H#V!t0Xtd9pc+ zE-ms|P-5NU1b57Psp>~SZ0p~<2^2rZ7CJ&1H@7Lj4upEhQ05Du z$=h7_C%Mkm@S-|Cue@1Tpo4nWHVA18`ALxecC07k%(u6`Ra>Fcf?zv?2 ztn+83@Tynik>lm8=d~UGFed7~M=?5_-<$jQZJZ&FgG*A~xI8LDa@oYQas^=jxotg3OmI+`C8BHK^#k#Ad$LtG?5lq~s218{zS|Ul# zzSU_hx7G*!Z}e6a^61J{tndHOYquLX+z`8^t|M*iQg9cu91l?m^Qh~T>U|4}#2z4* z2e=+xW%>ubzE4(=T&n)T&Ir+Oyh^If?p_2*^R-@~+QV-tXc6OldAM6T*HU|UMe(&i zKA)5p;=MsVnk4-r*tTTxlg^IWbE}nW;4^(q>`2^uQSr%?R@H9MQD*Pf;~qg0R#6^U zRU7|C_59SqiKox`_xTU@IJa60hej$%I~@nJ>{`TI%*wG{vC*%*iZapPli^PIZ2R%+ zA2}e?L|z#AyPUMzo|E`iYJ>vI@HHmYNh&hhmF1ZcK!6P$X6W*N=rHO!>wjE%-9-~s zl}jyy6mjSxp*z3!m7X;?IDD_T-O$1b4Y1nv;3DoTny}s6=rJf4KcNaF96x|}pkr9L zeH%D;0XK^k0eTCogN^$;SJQ+kg-Nb5UsJqIm9`29<>~gsMsE=>dIV589fvoK?RB%o zsUOU`V>ppCoY|NMzCTZ>(vSH5F1t!a3S9~e?`dp~(t2FH-jPxw#I~yW*+9)Fc&2yjiEWO~gi4+Ze%K6pygPG!9oJt61w-{P4^&R>qTY@ty)cj{Y(k zYN$mA1h%>O;yF!(F|oX-9QjtctK(7b6j(SLFkZ#lw*=lF+%3v#XE7?fVpHDj2nv6n zVl5im*j$s^;ojl?*Ej#dar<#W+ygl#^-l%eCSK`6nLv^Jq?gmXm|cDi6oRuu&)*Sm z-Xg1)?hKLZ?l!iW|56@6DjI_`U%SlVENH>*2l;BqDMky`hbk@;j>6b{c~roVU_|@*jH(xZ#RIp*EcW*o~Fv#i3~O7qAHS@GRQTRTVCg)M8)9Gsz!XQx;*E zLI&8z5fqYt)Ft)0y^EOWHG)G9gE2FgA6|K8=fU@}|zcA>9$PVr!@8W5?*F9%Rj1WCPKSt?33ax^4$=kD|?C4nC&8oSfD6syMnT=joG zBk0HpA4&kPc?w@sZTae53;3-}Z6uvY#cW{HcU>gp#lMfgDG0x53B4&OB~$mVEZiiM z_?IRHKZYr|q+le8E%+2cKov6T@DA7#zf(o%=K{Cpt%O8{6!GG-UIt~d*IHX*M?oJH zC27_5e%6i+IL%Vw*qZ96zGKbhhS5-bQ_tSGtC}Jj`o)I3X0Yj0+9|6a!7gj|>09QZ zmi$o>UnU0T3pkxFY!l36b0hLW&fXmIjr=hd=0?U$BU90DL4_{-={M#;$(9)<1e0c8 zTG_}u0-gU7+-~L=g0M%*Gp@w#No;kk=zxdfpMd1^NBVV056BIDDIch69eE>gVM)xo zeGoio_-uBlCNXE{Z?5AWUu~gfrF&t$PP~2~=K$JP7Rr0+_)34y2$FOg(BJ%-o|2vtd{m!Q@TYE?548Nq zqxgo@4+{S!>+JZob};=i1>vz{AWU~YWa@+!>hJ|#LltGqS`AwlqE^7q$#Bt zINZ<#{JUBlGW>st>_j0S7%tsKwzi##qWS|T)cJf@(1!=V7r-=Gc%|PeqcYFQo8d3; zwzIo)i_7}W7f8*&2R7&Jtr$!zrItD4sRHFUzs0OEU;-!!2UIpjIfjenBpyzr@Wl%k z2LKddC75}%?>+V#pI!hBI;2rC^F|b!t}g!HtM9M$M!NIZPslTS->*-auQ&%Fx=9snC9F8V#b?%G0OSbb;{3Y zyeWzlI$sKzdE_zMCezgm+q`jzRFQ|t#2W^6Z?Hm3a?M-RF24~Rgqm5zLU7=Pe#R$< zl~E~&@FU54j<$RaGNZk3RaxtTaC+Z5*a2j0M|}!@Wb!6+y(5x@Dbu#}xb@qmp4`Ky z^Y9r&iOC#={sI)V_qs{z4@{iZ_JyJo&TZrw_H`1V0pda;-Xno`zYs zs8dkXpX8s2W-w-m;y768?3m_vqi2$)I);8^k5ZS0>*J%WCQv>?|fb((2 znp2Gowk!0-hb6z>f9$kA;%*Q#S@(C`%_!dCo%mb#rE$jwW0Zy zHRbal`k$9@c{TEFoyzd`lgs0=61e6?c)(4t+6+hvnDgX`66Lv~QVqzCh+vUf(|Zgc zGp@4WW;&X+^tXsed70P8qDTmq!Mh{k1)6*a^8`U@e=hg6n9TLVR3fkZGCO24*~rPG zr`N1S)wvtL6yE)qkFESD)_%$;bN_%v#Z-233Y1_8#c?wtS^+`CB)#**wKRAPB(6*S zh%}qlCW9c8DC(ni<=z|j#B27|&eZ_W`IO-Wfje!#P77;SU-|m&EC6Bp|4=AT*`FST zfh)IOqBC~%t<)QJ@!+}H-H>%q-9hAO;4d&R;Px?${O!7FD3)K@BdCi15gtP_g=@4p zq0xwb&6LD0*fDQX>4kn2o?lICmp}`$@}X(f;b!;W7^>^HTRFGt0a5x;#p4F~UlP=$ z-?IMCS`B&jY)q00lnNZhrnTwT(sLW7N4H46{d>{@LhOYgxbXcaD5y-t?_w`1GyAln zJ9{v8HE{)kuD7?s{#~;@KISh5UT^>72fjze+$>pI0*RX-<%S^Gx<65wPlh2Q5R$Yr z?F}Hpl=qmEGsDu}_o-LFX;$9G4W*`*P$?`Vg}9*&qZOpI!u!y2lh@#=i(XAr@;<30 zlD=E9<#eh%y2ndtLS>gQ-3F{c&>XxWV{^6c{tG8kKp|YdU^#d@8Y|n9409TMmW3JCggJK7iwSiwKetu_^OSd^@#Hcg?Mot zR;l`n%Kk&)^1ohBoxm#&Blt_0u6Y9mX(+d=0LSsRknLbspKRqwu4)_KjR>$GJuWD% za{`-{Y;ey9e!(&>!=lE3Hzx+RzK=s{$I$&G-WMT9#u9;6U8M_L-SzEp{gl{^-dk&G z*xs`+2m=ws`d-_L1LXV`ZH5!8haIznMr7OFc>`Knwih3x$3&Sc-f5ktR9P|Qqbo8|30$R3$ zZWLV-W1Yv0ugCdZYpK+yJG(1sM+l)aBa&j2q4{ICJkb=vLx5Ks{O;VClOC}r#;L;dcupnlPwj>4! zGnL(4WE%L!c9g>JjKbH$d_l@_Y?9i$HB05Cw*N*io#9iV1UZe5Z61U8(vJsN;cq|DrQa-yN~4$s2H!uOM{#rZVGC$k8(BWmr z*PEs4-E!@Wb2_u#9zm0oAIXQBv4YRCc5?{E5l1 z1cZH9j&|=*4wgX2KF=WqH?LK7H1m<9EjXdF(ZQ8CI>0^KH_ok12xE0Cb2u_#)w*QUtP-&lkMf)CH&?$H%>R zs^-0;SjV*^9)6bm*lxoN;0HPrYP&~HvyR6Zn<81jgwemv7CYj7j)Q}zJD4+$kmi-p z=E(LaCMtOT6;o3`JYcgW-78`Thuh;G2$bK1eS@+XwkHKF^hw%;4y#>238~q!P)=+~ zZIX4w3Cr;GMbEKyia5NSJ}!;Q27N<3nPB}Av%~Jn!g2pXmXtPd(W4FW|(-pQGt&~ z*lE4UD}jzjG@}+hW#8>U9|uVR*U}LM1cGncz2oG+n6MvOC2iIgAlsj*708?=*FW!i zTFcrP>Jbsj;W*CuE>b+PPtMzWkk*5SrWILTx4W(kDR^bT`t7oaThn!ki|jqK7BH9` z5=*m_%PU#(z*6KPPz*~JY%k<%ufS&#M3;JZ2qZZlA1X(UH-r|LD!J%?+5g$4i?P%4 zag!*1AalS9Ej*^$v1&Q7>f6yP^Iihj#KHa@WOjGy-dMQ(J?L5(fyr%*)w@>4)$n3nv@IXru1;zH+&!yIHB!{%#kON8yyFi0m`fe628e0TKK20Zlm(In*>vfSewa<4Mzr|%! zyU|yP7;kR65m7W-qpsBjo6aoRDUSbZI-XCCoXo=;fa#bEA7A(KrEyU4FCPukZ`n@a zR-exj%y$&c3QC{1%UsG|!lVOVtNcOX1-uW`%5~n#|4MfUYe;fW;Od9I3;_sU&GB3j zp*4YwDX8BJ(!4<0fM?hdw8*AeTaRzuxImL}nKD1QVJYPlD`~+%E}Wd~(af{=V?vdG_;>nX4xxRc0lU%v4f>5LMssWM=MuuUt4ez z3%F?ArYai2r*4c~zEAT^+0k?CY8U9s=3;)SbZ%2tHN2xm^f^~eo{YzGtEf$|;+SF@ z8k6I{inIC|4D{-Bk|X0aR?yEUx;)4gTu{s~e%huEAhrE^Or2il(zOg1ap~Cf9xD zbKITyPnR@64c(!^E}lK(CQH;^SuT;McG0+%R}ym$G`T~fvq8Rikv6JcA=hjex3p~oF81EU5-a<5)&Ht{I_}y}7en-}OWZx=fACU1&VFC5T#}uK8 zH~Ym4C2PED%lOJVPwm2G6zl)wVCcB7Dm9wqb35O6&9nLm&c10omUgpJ;(vevuKl& z_v}GBh)UNUj^ol`B@NoSSlLVI%|G^RsnQ)ajAx{rcQF`#b6uBN7EuGL3aAx){Bup$j9Xjp zNxW`!pgiXTu?y%lnb9F3*vnbc29=@XU_?gJ*R!zt!ZkUuxdy!`@+UE$^EmoCc`)K? z6j`GVJWmD4`@3IJ8EI`%Os$2D?dtQ`x&D@#9(Kf|K7gQ(d^sBj#+OS1a`r;^Qt?s|=5QGQIGih90?+cIx9Yzg4(V@)V*}eQQ?08DrUr>}6@_-n z1}WQM-GRcyt%ETxL;;njute_JmNG&!OS$C+sca6T!YYS0QFrJ~B3Pi6!EbW)rWiIx zm-TInaSnI?Y~eu;P$+m#Vi+c$V%sN>ny=XF29mXxm*t04wtbzgSAC_?MZd({!oX^{ zyBg9jD2`mr3ql3o?U<8uj=wIB=v8NaPvjE-G`L938QsFq(fODa1!1FkwD{LJNWCoa zS(tl&HN|7I9(wWEaLo;l$DK0nM%5(s!|_#fTq8Ex6`vUH>;5u~ zXz0Wjo(^qv+(Ln(i+UoVq99LURcK;(k1Q{=%qw(9cSmtY5yt-{a_YfEfFJMA^g55% zuz3F3$slfL0Ndt+%AAsLJLY^^#D@(NfEICunJefpv0C5uulb_5M^?PWsBovPazJMh zQ*dEp*y0dt#MHmLsq_7L%GN_uf%=;ES=1g1AqVXD6NMd8ppCvEXmhzI6WD^*nq(OI z<;!}{s7qi7B#^Hi-^@>UL(XLd%pS`KINlTOX)-$);qR-?-l*EBGH!!=`|)IkreXf- zDnD=aKI=25-Ql)GF&%=^@p8N+#dPk8@AW32S*!y{m=S$Y5q3XH&;t`>2r^mWlcyRv z2dhHM=!wMi_FW|GU~!jJY1o)cs$f7jsa@u@A(_jR;7h+C-I&j;>UE5L3HKgQ1=y<# zPl%{rTGE!WP@ICod^W$4DCWV%LBA^%&K<6Pd`1_a9t~-w{WW$^$cqWE>85{%7$i@i ziBQIC;eIRQ2scVZfm{DHBdE<+<}SzcwuVN9mHWf=6!P4M@$s|Rjq#|DMDAOMN0t(upKwAg4r&-Yw5;A#!E`3G%NNnI zmr{!y8aG+oMOjgUbN-57&2)ColpRHESS)!Z=AKS|F6twcp$BR%7{`X79Fql_x?k%y z$A#4f7774EeBB2fJ5}va{nMCFh`0h&jzOr96u2%r8~6N&UfnYI0CF6qkJJDqEjHz- zJ?Ymz0n6U(b@b|q6|G!3@pY$$fZHx<&tn8RPHY7X-`T?Cx(qC9*BI&y4yI^0acz+rob3lJ6dYP;Aw~^oPg%Hs=x~!t+UZM z%Z#i0h&@|Sv!hpAMaY5`f)zjv?qj_GU*ZHaPj+9&-2o}l*sDFD6`%J_du41%hXp8# z4Mk{}7!JI0V%NY=WYVHfhh_aC#7{^a!`-+EsM}{B@(kYqL6@jEMLmzbUzTt_%T9wF zud1w6UCcNXJ2mvsT7JJwyq)fP|K#3joV7E}ivgg0(f8}5%|TPjfR>=eh{?cyMHi#E z)?{W7Uy-$3f5Qj!T&n$>g;4W(YY=binZoOeCi(MDDnYw%FH+!}tzYGVR)qy%0Nn-w zNijjP@RY<2CMi{0T&(dj=P<%g_9YI2Kby@@{fI&6cEoMi(LNZ%d+du0eF9h&`n2zi zhc(Oyl5zVvSFQ`=7L^|1Qg{5hzDq_8I;yH=e`5Ih4jB13VK2YyY&{Ye#oj6f*n9AB zZ*s#e$M7F<*NfkXK=Qgnavp;M@h>32e8`6ayX@C4u*?3l({g-i2AjelJmm)sY$gQj zQ`FJRsR%bku=DgmEcTLIkkVZ1*1vbweBJ)=fKy5MfTMzqe z9EcuLi^fqxG#Dw+_Inw^NnMDofVILIqbN2v>tMhDIVcvcS)aiBd9ZLPq2^nbYai&B zW%lYO1+td<=S=U@PXsJ^FMYOPjr+lLHMIx*nL#gE5L(GPL?g=Xzf18rkIcw8`z8Tf zG4{D*b8_z%^HUCvB~Dij-3F5D01Tcl z_e|bEM(ngf8R&%$Ws}4(ejM0#^Rp6}-Lqxt;TFRLI}64awH22aFA3pkx6URIE1!Cl z09D7R`n|E!;pe(>W@cRl#i4LfD@y~tvc=Q!3)xGv&P#?OW?|1Z{@lmHQyiJH;_bc$JJYqS21I{XC_Wkp|2&oPj?5A46U?err+#9C_D za_-cTxep|N!L2?vK2Rp1hBuzI!s4u8*Fzo`WYL%a3AP2%LPPUW5pduo`#TlJG+G}< zX$@(AfDI%pl3M1Bsji!dYU)m@cEkReUPXX;SXnh@ zY4z|{U3fvNxZN@*rDFK7}^{B>$ zv60rSx^7wrw}A0FZg*NSbn_Cy?=GZuh#y~VB^?482i_&(7hZvpsl5z#gtuX8WV^ROye8yi>sZj^G&uyjy z7wcYeRHt2vk9uekIliGpki=Wk#hH1Q-WC8#6FBIKUp#gqYD!tz5|6bS44ray7Mh>D z#(D`Ax@=#tDgOG?=#c|sPG6Y)|VFd z!=o=Z3yURB_F?K)N{QsMS0>5TI!CSDgNe9nghh58O%q{gun8aLqCJW%ZD#4VR2rpz zunCMJZvaquOsf%Gc$DQkjz2F!O6fAfCkVedh?Dcc&<7P)eHtcY0V*Lul^!QAjcCLp zPijK=B)bFXeRHsdtS7A7kq>&o?6e4_4$1<0Yv2bT4eYd0t*7 z-dGhKi+9L&u%IIr@ieEAjYO|*mqIFDuNmL=zlj`T&&2Ztz1H(zr5p991gV8|Y|R?r zQnUD76b`0O+vX9!kxcIG{^T@FB4quSz#FL z+eBci;iM+VQx+PXG1$ID2luD(3^Qlaqe~PXC7{=Jt|IZ=&n|hp$tm()hePUnI8LyA zr3pyaGr5{N+m3`rd8U7TT~a9u+YX4IUf!i@I$!rAv%~)YhCNm05pW81$euCTwE^u~ zw;qld82fSgDib8FZ=NFcrRcz{?WaN`D?(9t=f}yIRa#|67L{&?S4ppGTrDlUWHiuw zzGyvub;9UC+9a_l^O6YOpht5LMZ3n)f&B!H6%do=@u+CQgkW(1Pu5!)Kd53dgX*)a z+zN9^FK(-Fo8rY_*e_gXlAt zuG!U-~lAK+F{ zNxHbE4RlVoXPG(;JYq!$o_UKm-QgfLskRNzsOAsg!JG(rf*nj6Nu#y&u7s^?1oJ6@ z>D9Zh+_4FQP8%cT52p}kk?R&z-# zds!FTKnu#-!M3fPt?AZePsE#_giY^nFF+yx_`{|kRQSivxYYhbZEkepXf)!~!U*>J z2X zm5*;Anigx&sqM@${hYJ5z{{FYxp{YkEj=2EfzqVB#(~crS7g)9^d-FH7#h+EXRtXQ zW11SX^=REkfA`&2;C84ZOjctrjN$J&ZBOsLJ-GY8 zx!#cEZAn)@bnYBp z;Ks8uTR$g17y8M%631?IK$l^#jXX_%Psc&i>8Rnm#bgzFyL0*0*dfCN!X+d(zQT$3 zl4s$A^v+b8@CSlrk015dWC%@#cExiFT9F#YM0=NCqdgQ?d`xH)M`fmGEZ}GV+g#*K|f?~fFE+3j#-$9!deDf4srqU>? z;_Jo{&PTy9cOM8P^>rw^31$Zl@P%mA+ox+GxU5jiIeySbp)5_Y83ElF-pl1mnc)+Y zk4-QWR9)~$Xb8I2rwAX`qm z9QjCTkDR7%#>A=AW$p|zalLd_JpLG(#B_bm`NdGALwA5)ytUYFF-4FGB^chon}izW z88*sMz*BtcX9}|iLdM$oh^=s(;+VLIiB00X?~0c_v1jCPsr9Zhy5YpIOYZm$#iQ2m zzO8i~@Oi$U)fCZ7?1r0t_2rhXWt}}tSDe{<2*oP05xvl|)}Dv7t#P3{R&=gufglT& z$3ysZeOj?sv-Xj@{j$GdY=upW34A8c^|B5RH!#aBpX$%05!s<3GRG?r)e~ zN5|Ng#$r>$A;U#ImkUjq-flRXN($-?wKAD<-Ar{=L`E4z&7H67ia2?&-6xqRw_Yr_ z@p}g%)mpLiKj0z3%JlkQmg1rUolF+CxMd#lVtk zeTDUQdByCrFY(WheKp;lr}t@A?z1&KOY+B-GXt#URE5*Zr&Y2x90{i|Wqn+BET2#H z_QZTvP1tCG-#y!xDy|;+J~|(a-!RJ`fb62c;~9QZiDtL3HNL2$8iErH(y!QHL{K#) zNk4nP)Y-=&><9^t5Zs&0%#o;p>$3eh`4}G2i^p;_NEEw|0hq7%l>P4F1A^`#Tm9a0 zgAU3dVc+Bi#y*$%^PACwEzi-ml7ZP}Lecr4MX#ps9vM1p zift`ezy5*5>C!K3N=g5;A+JA6?Dus#q8o{0zX&0|tl!i_^!L%Z1}=As+AO{HvQgdZ z0t=f9rx$8dd#BSo7cmG|Cp#>N+V0>)d;f@g4l(T!HGBs7HN%umLO^PWxgz1-+S2QaMza+VMaQKVCn3}QPMwUIHS)+iIQj0|10Q`$gFOSKG5fZS zHft&}rW$C9R+4s>K~}b$A0`rG@pXp-lo~{Tv@~MG zJiI6EG(jc!pmC9B1wHek2YzBI`{T`0YazX>O1_fBLN@+LBf4?(m|Km)mq#DAa0Z~M zWm&7?UEb`v)9kZIB$aRY&xXbqE{Eq21;kLy3)Z%a!020Pt>@YG7tcQzF4$+g-Mb$0 z6hYE)g1CWc9Ou_{1Gg^nnxwOR|9uU18ae_}*h7_j3u11k)6chddYrb|-(s{tMm+sD zY8$bT-lRc%0# zeCrEOk{@V>@r8GGo@gLxyV**66q@kH`ciNtIX$z6FW+le}RV@2lZ z9#dR0*Z}WSVDgNr^19Q8{{ul5vNHd5sw-mboavVS3b%!-kxobzVjKl|ZNJI)*5 zA4TajRk0ZDr;vk_+WoG$364scy8FE8{4pvnpIE=IHqUiRH*2t{%(T@- z`Dy%UydVZY=A5@iz4J6rQqtWJt(M#?YrzyYy7yy~^~#E)!GIODIZ)tOe6Q7V zfLdlD8(x(tS=TxtijgSkkxbJEMD?Q|Ng9zHHm<&&wh`=zMC+C=U8h~+URqUcNUu1k zh(by_G1XX6WE=B0?&#~G?i(jM@V$$P8x@A;MStFHENE+fxM{RlP_5u%qwN^#_*p>v z(R-hpXt6;6Xml1CPh~1e8P35kfif<@5Av27FDkrD%3Z}6kIBelcU9Q z5dOCYxVp8T9;Q@x%obZUM0B?ak`6|~??Xca?x*aeT2Y6LNLlL3S9*gYTAC01HWTvf zL#rOm`iYW&I`VVP$lAjhhBZQ+eim{Bf}G4HVl~LUDnQ-hBfK1s8cdOmsN*-> zu}4z57>LqvqIT>`7 zczG?&r+HCD(~)I2BZq%d+eR*dPd`MQxR^0Jbl8OikHGa)sH^v-a`COb$ba}zXHuQx zme5c*AK@jF09wTqD}++NLd4PeOFYzJ7u%;rc+?-1A@ZuM$mg6ijq(IF{eEfCA* z6g=~p#Z$e22zl8XD5QN-Rcp+MuIEx`5EO!Ww$e~osAP;T z>m3QT(Hsa4QAWaUE$<3AT~Ah8qmJsT($_x1piY?_Mny-odn9HcR<9}MCWR|!Q@aqN zsaw6QS$q5C_28L{`ds$K03rP2&B*zuUF3+sK&$2SWYiq-sb#!vc=}8CW2{nu1HQ+{ zLg=zv@62;_>^vAW8r~&8(Zx_L?%nty!z?t;py?urdV>5@a$Gwx ztu+#nCT1*Y6MnpV4WAxI$e0g3Np2GgjYCWM`L-q~gUKo_f?)nLGsXy75X)wWYpFgQ z%I2F}*6U+Z-iP%;QKf8b$0AeF4;00Ap0>p8e&Zo~{3(BxQ-9S$@#2N&hHsgV-vhUA zQ@ZwhBkI(*5dV;qSzW^Qz0oTbu?zW>Znj%XrlOWAH2{pOC?3gAF9St93d2|WmwH^b z0jYO_y*O~(XK7@cbBP5%KQD<6nu!85Hg+GT9fFVzf-h}YEA%zJjPpRlbL!_#rIf0~ zl|m^1D&~IGUt%I%>OA|xasT!7Ts0QPxk~Y?9umqQ_?&{gW7-uBem*yG1g0rac$pf= z>vm`2C5cEjWu6mnN_G)vTE~>S^+`paU_VYaiF;8ov$cY$pvikl97EH+hmz9njVfb23=9Iia_^H6AMeD<%-4Fu8rj}Va1aqF=h0QzwMnWz`ANU8;)uq42c!*8ra+7oh0{UXSUkU+fLVcvR{@L}5hF_nzM)5bxKT9Ih=@DB&*U#=3E zBFSLakZ*Eh8^uC>XM8fH$wrcHnuZ6>&Q|p4#77IXJKl3_tLX(}3SsexL^5^^q%b@$ z-gG-V)v4JfS!hNhzJQ|M~eh? z%Q$kNMl@^N28uD>o`JY1Eg72H+_6HA zMq;73J~B6;7hh(tpXB|r`^W1Y;30m8)W0}ZK#(+<;Hr+3yC(P@wBZmdGzo2<@hkYK zUs|0(A#|7{em@ZpyeWy>x2m8Y<#YPe<~1tza1*k7?e$WlNGlb3zm@Ilt-}7OyjRJ zh=kksuyQZ3Py8!9PHRcOY1Z|bJeywkJ#|xCz zw;L{=KDO0yJ1~c?3`LArfmD)rRkK1%z(+z%-k7IO$aX1?|4*+u5=2f^4s+d7Fu!_>Hy%+}Zg=`du-kb|Qa=|z* z0f%ZI4jzsTR8DD}p0(aGzEPp$KQ}Z|;rFwTvwB}x8pXgh1wvA>Xhs<8|2#Qafj z^;NsZRiX0>aqZ{C{}>01Is5nTvak_{ak1FJQwGV~Q^f5DQ~Y{IFZ_HkPO0vYoaJA0 zU&-IO^A@w6X&`a!oB}BX1a+1>nG+qc)rTU`$cS$ldY6e9Y4cIm3CRqCr|w-OPDi7a zg$L^giD|{cSC1aP86HhIxpJUF&Q1lC!r{0j!V35M?SAHCUuF{QW>f1VT{5x6s)>?INcE}YHef1uHy*Y)>{ z&rGxT8@;E%&8x1|JkU1qf&HdWuU?}`!41IPQh}R6Vs#A9-alC3WId%rF58{#B7ng* zDKnjmT{op{xqFHU6CH#^0i5~>e4GhJk2KbHMSq5yKU4JLgN|!O$dS|@QE;(BcI5D> z$EgHKnbURD8rF=^a0lND&c%3+P6NhT`9Y3OU?!h6*}`&gmwkN3*L zfIUhvUNqc(kb$w$^dcuZt_9M_7#f$hLFn%XqrL}om32!U7Gwi2C=CMsr^f{zau^L8 zcJiU}CTwxg5UO7%AKlRi@`Za??K$5X8jV?X1}o~Av`*D8YMMJQ8lPS=+O|w%5Z5;I zy_xEbF?lrYSOnpc-(Y{)Fa&J>Ez!=@WqZuN-^_}TBiRU!UCZNaG~5*y72FBR+t}y> z*=u?U?_BNTG^L z@h^WtW9mZ^6378oX31HQ8&1u(vAE9jOPezml>%n=8L#C#L4v83j($uQpNBsIZgRJ( z`Gk_clK{K@N}ck0{Z7te*8CT|H2z2i)tpPJi)A~*3kR}?W!>~EJ%sQdphN}t|q zsR_ZS#`bg{$rT$N>ejw|!JhM3xTkWjwEH>mZ=9~1(~Hg5K_#6A(Gh!G^SdS3FMs2a zSS|3kDt%)F8bIi{h86_kz=_jfxY>h*iUy~+lcQp{f`|XNy ze;p!4G!hyqLQwzI~&*if}Sfd%xSE7QW4 zJLoKjjfDg?-=MKai%J~DeJo>^xy8u zY*1YLzntXnTF0+nUMG1T-Y?_*L0^I^5Gzdf>euf^lB1mH)L1>lwVuD0TAG^-`@|yr zgGJ;xw(4l%snS{bC5~HjZbaj+T^4TX%wXHdSxCEJo@%8|w{ck)`@C+|t&IKV_a5emckj83yMrHP zcHD{8Y|ly7x_o@C2fVUq8gA64j4}T5pf0x*-HEzR|_L9WE3K zZN_0sSvapVzQmSl*s3Yk`5MP0tgt)L^5gtxPNlHE!>i%rnXkHDnR0n4^x{{nI`@P} zUp}c4ksMRi@|=-D@RgZNmauW_0x`|7u8@{p8$xyB@#lfgy?=Qi3YZ6?r9=Gb{`&Px zX~*0@p90+bE4KWC6?2%+)i!V!`j@yhB~WFpGN8x2l7msER46YaDLFaZ7LCiMYO{EIv`3hJiDY zgLPvX_(jv9>-Y8Tf}3Mr;va78J+cqZ*ZZbF0!Q^x?t7{9IsLn=={yN0=%_$52db4&WL9aDDa zMe=I>22g#kmQDLvAv|&nW}4F5@+E@YAl{t1Allq3rWzH399<;vNmU=LgxlsVjWQy$ zwRTNAeSN%ZuOGKjYEAn)GBBI{@+z}Yzr0H1f9q99AO3I92p3ThMWuxc7@~#Ja2VT5 zN`oX2Uu@A42S#%@I1xI~&#Ad5yP+q$l?Z$fbFT%iSe$n6#;ktZbD96B?PjjgX$Y8} zG=3TD)zbHA&heDOoPkomFXVK0WYHl;0U$)`mo8^H{kqG^b7`^@!cbi6#$cs( z=esPbT!HBzQgXVJ*TlMjeC2Bbzj;xK=kpwZeL9^fx@w|#ea!j7s#Kwvwh@?$@jKjq zy?Es8zn@U>|JM`p11D5EZQ~tCQSckVJYz=z{Q{;BRrW+|o-foVY>WqXtLD8O{v=yF z%&M9f%kO$vVeP6;bxYr^p1bfisN`{sFHyTQ_3Kcj|}&tEPKnG z!i+gmM7bF@@-KuO)`~cb^TzVdSIb{75g7`Pj+}54yD#OPcWg9(+X)7}TcdYD4gUel z$~)yJz4^;0$OW3?FuE=F;jfsE4ZtOc>8-=-@Be`+w7=kOQ(1j=pXp}cKR^H1x&I1g z;5%`i2Xyeh?L-WHlfEl7*}$<#E?6}klbM-9Z?olMqXHO>z z6hkP7m5QksA6n10GxK%B_2$s&W_OAD{r%%)*nXL!({EGM`|nIK2?gu_gebW0kb+08 zjz(;JFaE;4P*9B3+tIo8} zb1PBLDFV>~(HD6A(%#ONqwBGq?=e8htt4tC?j7i0zyoM40be`oWBt)XfVkhZjrZHd zm#SISk-M9S{Yix)2mT#?c>lL%_eiREx_FI_bxHjP@#kD(LF)1C?94&+}D`$r(IWCAi)4=RGN&R~)otXcB9E%wV zI;es4k{}J@`nmpU!=P^9gu{OXps+~boT8Yr$Wactc$PSlftsB-e~q}6eyj+BPW8Kgi%^I!N$dXA2hu7|54&5! z3FCZ~=W?_E8-kK)kpbTPWz<&S-Pm*zMv&ZTwKc9T<%CPmfqsziGNy6UK|Mpk^(Elw z2n7r6oT$)dNHX5xEm+T7Asdo1S8=C6#)tL3y^dB%jgID$dGj2MQBy@+Lt*Zo1CbL z%;DfVJXaqb`*%|FpTPXv_;4yJC~or=WRpa zd`j>;nM)PyD|f$QwbuAOp&P?NyTb;ypbV#g@WZp4SiBc%yV4^>pZL^n4o5qlXUC<1n&)l@}x z!PdkL9^@KSYr7syyySwbk;fl8COW>|pVR)<>k=AzR=Wc8<%*##Q*Xtxp zG&6Iu6B1;z%RLtl!W>EY%y)-U^JGbw;vRZv-R!z?I!@USWqk;EJzrS+(rG~^gvIb_ zK6hNlw>3N|4#+cqJevA*;Bg6pM9;&j28JctQQnbSTEv4gF62e3kKXf@jT{lPyWoo7 zr&uVM?kRR2exzHnF?rum1GrY^DTf`CFuKbGY562U=@ZXZKiPQ?4qi%;`x*}G%g->{ z%awj|v@8-~B{u9a+?hWV($CmHL?D!mgl1s#>>T}$V)e;~s(*0T?*KrnjxSz=6T zcBk6D&rEYv^YLJR?hlm)g`c0*G6NGHx)ptyU9C6&_dh98(olL{*Ya4tD_Dy-u-kfoeu&|i@lh8Hx|~e1{HKX?I#rWNL<$#PC)Mp~SH@Z! zi@e^9$jFN;KE*C=^ z4z1;KxA^ETq$=PW=*cXN44PbE(c1s--&>x zO*AvSuN~gIp|8j-iIEai%7G)OQF%%Aqu2!b8?(nIZ|3x)Un zHXlX9`i^-?Ee}7TD$-6&z!)VjwSsj&(p#~>ajSU>73Yp#Kdu#!s zThcqWYx_Dyf4HbVyC@6N+U)%P1gq6)LwssyL`j86R&cZ24VzGs9U{$1Iy<_=i^lL) zjB8)uLn1*jTc@diubAH5ixm+n_uuE9Rh%EJuRu;S9`TkqlFEj(tdE(o`w~#^CgDS2 z8tqkA5K+Kkq&SGgCe;aU-k%7>aT)dgzdM&V)KKjzEz=yT%+>A$8e)%LiG$yKX!Rk~g} zx|SRkINR_0_)vwF=gkx=qz<5mtOA^PmkEywpGo&cIlZ~;QXN2{h+8G95mtV%bTdz@ zmhq0fNGvg`ZnTt9vd1H=0L1?ly8S?tQt+A&R0nenUAAqM!5%O{r)<_?Bd zKbtn(q*;?L=kQ$OpqE`&nQdm$F(Gw2=M~xC9<}udZ-A=dlZEkM!}M9`DpM7*4T!Gw z8|xd{mjXcChPO{j!F|8nZVS8pUX>5itf1k=`4HvB*w=dOI5yN9)5q9zFlw1shVelo zhax`pUh(0wH6C$I?Pl^T{1L`^enQ7}T7(74g{!h-08l~A#eEy69zPX^5 z1;-0l+pS@n^KDe16R7AD4z2(+A=n;C7Li66%4bQi$Era)m%t@&zdfWJdvU5PLBMmx z`m`!d*c6=GSG9tE7Q=Y`CB`cI=h+soN|v_Uz70Qm+H7ADi`+h-sQUSZe<7&Dm|$h= zAe8mkYv|? z>9T{)sUGdM;^6+eXu4#BZ)4?7R3(nL`k864Jc_YDX{$_3X;T{uBlGplmG{0r7fCQT zpxReCJyRTTpXi*M92(VVZ;oZOAY0i5f80Bq7bYBgGip=bA%90BSlMY;`We%+w9j{v zK|iF6X^R$8?AXiBu!JUegTn9Q-?4<%*q*2uSuGoBbmDQ@KO^eT4i1*PY>-t=FgDgZh+| zvukYVIe9!+3;egtTQUq4l0H3q|156~npYY7#38dR15%YD=oK|`^UU^RQe2mAPPht?G{{PR1B-h7w??OMA= zYZ!xZ*VNpSV}%O+(z?jDQls`{xru&31@d2vJLtD^jmGiNaT&hqoY$598$J4;@PL~5k6&xszmRx> z9HwW#6b6gTfFtray<>+*uo34n|2{&bX2$*M;c-HM^x#H2!pLa_U)Lr*0E}I65&Oy! ziB-pYXy9*!MO>5#j}%Al*-tS3+O5xY;Ctih{S zjHjoP9$C6n^x|2%9j%-Wu*g&$3=-4>#L9D{L;rI>!5nX@!!XJEfz?8d+F?>o=(EQg z^wCbGQ1HAF)?n1&~S9UlmneryxG-sq@jE_YzMt8@_ zM|wlp1Ju$lB^%S#|3jw#yS2aym-YLy2>%aVZy8o~*R}mp5|V<_u>b``Y3Y_!y1PL@ zS{L07l1fWUNh2cNEiH|7$0DR*QF|`0>v{Ly&wJm8-~8es%>SHYoa1+%BdFnaL8q$I z0*5}zc9KeHr$MIoptV#+gT{ePe|Pk$qP>Q1!D5-{Lg?u|AGMcxIAGY zi@31=Ds&y;{`0%ocgPZ7-8ATCXD@NjR+x?46I`AQf1+0%;Yz|rw7TG}B%j_Qi?D0h zia1H@dtR%V*OdvuRS-?j<|6SO(ESlD>wN+ehGyQLpLeZ4D6)?w>N)Xi%VVBGx2sgw z`^pwAw0FOMZk7=i1{UyRPsZa|){`X?!&{fz)KF6})iyoMw=+FTb2t4RfZzFn%Ci$t zl2Xd#Ofdt)YliL@5=>;d&x;za+8=!bUJ)7UB~v(tT-O(Ht%3geaeO{=W+`=6C;+tx z)i#Dm)HYcjBEE;{ML1{n^?0S^VZ$GrR&4V{$BWwJI@`SCCZrDRNr#6cTFN3LZ2%lW zd|%;*T$bVPHavXJzT0hat+nFTs2yKZ5h?-zNCb{bXIzyjuP@#}qUEho1uKU#Y<>@% zdUHRuQaMS*$*Bju_0UOrN=3!#IDY}|%UO2op)1q5jP*+VWAGUC%?uF;2yC)_Bk>KO!NN!}R9U8*W%S2g6)UbQ%HT^Ch$^w*U&h zn&@h%g&NI6%|vi{umZqgHfc${}rs+3n+% z-Fb(IQKf`IwW3YR{6jxO{I6VF4wD}yS_a;4ut57FoG5mX?kWwJO-r8r+#c;plf^|9 zJ(@gL?ZIShzW5!7*ZsmnAUsm)#4ATc0zFa&0UeXY1SHe;L{{pXU=h^cetJp+{dPX; zY)Ku2is~mbK;oL#M7r}vH02xso$gT4T*pS4b55`E1F}W*-|=K}iGr)@#^{R!Ddqc~ z><_B#^^fsUt78=_k2fnSDeIi%p3m2hS-)p5Xcg^VA<36$gO$<@e&qLGWH#|5}U!|RHt?&BnbOSsj# zam0AGz4#FDAuycE3QYel>Q2F9=M~(B&n^N2c--FGY`PDBR}GS(<>a9JLJp+Xzz`fZ zAOsQ=VM4K{GqI1wHIqFL_l60^Z*gn|@pTyy@Wz{w<{BS*P3(K41fHrxV>x|slC=&N z*cLw5wCcPtYW7Z=_C74Cz1TBbbdcYnq$i#s=fUECk|^A zYY?GIN4|@USGM%XU|0NTqF_HL;4JKP@?v}w!K3CBG_&jgo}PCe%-95$hvvNr1a97~ z_mSj<3p1v$onfhDo>B;FoirFGg1O8-Y1vP{ZK%d|yY}lr?5mz1JCoo0bP8_2n_fri zMEfU@9{}@{Bxs(bz%)6^NiK<%#c=nk2#I0bP5d^l=0HID6{7tG2n2gRu0i5cHR%`j zw*lJCX0BT&6x`Nt6_mg(l0PZRt4pFT;FhgK%OvTOrscp~Q-Ra_KwT z_7GFS&zyVUD`Q{=!s|0?C~@!zDr%o9VyfY1_=H1ZL#n2BIEVEswrQ5R8AK10pu&|x zs9O1j)tq*glExLzc-xlWmb=5rT291RmDl}5w?+)61+smoR)1PX zE@A_7*zOmx{XhMSClqjff(i?ddTe1+ocnY|0z5BkcYd@lRwWMcV{~iQ&y6t|4#XTGF1oN;^>81E-=?j-yp*0Y8t4-M zWj`LRKnqhJkW$uyJe>M!Fk2)#KwsZ<{Xx6JC$83U(T2%)XUM=t|A!ZY@6-a@)g-cG zz~S5STU4|S&HNW@f{~|Sn9aZ`{_3WCl-u{LgP?-Lb`I@u_k9%Lk@)YB7CBu|Ks+3KK6u~%QQC8J-Nqkz zQRmvqC}R}{Q}!=gMC1p1wwY|EoD?HC$S$weP2enLKaq|U3-C^{tO1?z;ZLLk>SD7< zN}NZRxy+OTGcoM+#if2FiIjFrVX+Y*M72O}0bDc>VMI2t zcj*T8+Ql*TqMvZ2ou*07EX;3B<|^0w!d2oH?>{Mc+lsvU)IDnyF!Lpy7zQDmMof80!ZLn@|Q# zHD5(!9|tX~JRA+q6slfSzfOE+v@lc9(d@RF!4{lIB<)=L3(b8AYB2w2LA}Kdqk}&U zY7?i>9GX3yY<+;~l~i42dmz|6J;raKm2dHW^|2VzRCyHno?arg_tm5ACl652`mjcm z%91px1nO)VZQ*_Gv+c(iEk_^0upp?Q zLs>M}9E-pz*75YoXlH0arfL?i_7T~0Zg=KRFz!HAx{W;q^B33}y-wm=9jLE96~<98 zwTUB5Uf`5cYugvX(UJaaQOoyc_Vi+s23Di}I5%IoKGeHmR~r$G>1^DaIrXpZOwWvv zl9|O4<+Mws*ffXWQSA_^zVd73uAH!`Cpm_wi~(obt>cd+$GoR+Mq7X#t^J z`k?dwfQiv^b-xkZX-Y|;1n>7_&zF6Wg zd{9@#n4kE$v7`4yjpaAKOF=>oq?(T%QrbMKIh(Kdgnlgf^>KW!>K;uHLxHS&Zp6*l z(*w3Yy$oZCW%k^0;LaAGU z8yQ7%D~kd{{wN?mXOTD=7#B8-7|7b2JA~-A8afZ)*Ys4!mIio~ALeqiq*T{Eowpnp zkCxA5V#V8cFc7oy!U9R~5 zumBJOl5}r6RB@aggs9^AxrH^=3;p|`lJqsPR*!$9M+;AHj?7aV(i)c=IEwU&xJBPt z_nfp}Sp7)u4szrgfW;U~j4Dcd6jS$$^>C!)wjZnXm?-6bw1{}mNf3&s!s`9I!%egT|*jg?RsUO`#?`8KRk3nmNK0&+!a63CHT_T*&M-!($jW0$7k zwkX>A-4JsMX;A1UR`2aZ*VCiFqd={1!us9Ehec5P==DJk z1QqYQ6it|uTo1Kydh@Rr=rYsn)wb{pW&<=#0>;x@^kGtoAF$tpWF##d7N1+~6t^NQ zv?(bmpsAE$F>nQGPLa_bti3?#80YTItyTG(VjLPtzc8C26Ts@P-j8fDv>Ma&Lqd9o zyTO}$ZtO)nOFb=9Xm)?jo}vG#LA(}dG&b-!akl}*QN%=PZy$G<7jYPx5pCBD8Izyv zO4i*dZ>V+829q$pvz+7>vq+e0@3(NIj|2L-2eH}GGk+91HV9VP#vj>}i#5HvoX~5_ z^)Z%U>d9g7RE|wwJE)J~Xp)z46<_;!S;X2M{nep2oI+2&R{Vm!^UYe}u;?g%i$`dfKU6|!u(4{ZCv}uTO2pRq_arA| z&6v>5L@EIR>@V6-i5^tcw`zRQH87CxuCaA;rqq7O{d2m}nF8Un+H^r85DrmFetgo! zOQy6CvOHzA@zN}#D43xTV~Gg+ld4itgp{T{yW^8*0vyj*P}tz+;@w#FE6#Hb2V}=> zOVqWUVyLKi6`~fOi?H2WZxbr7>YNnOSH`nNXuEJJFYt0RvIONb{ume&p#+j&GdO(w zDDWLul2E54$$E5fuM2O|==xL!MeFMm!wl=($>p$UrC*6;DTVw{B4Po36h5 zMIhsT@D)B)js=-!Jv&321H{J8tLdTf(Qf`!|gbRuNlj3@7>>&7?K)0a)4P73{7 zCq1z(CH9V=ZV}0l@DQ&#X^p^_f5`H9`- zo$>zZNS+ChJ`4yMvdT7Q`d!ouM^<;2VN*V8TZE#fP2gh1Fg(T!*(lPsL%8N)R z`mox3HwKg-R?GN0%#EiWB9O-^%|_!Xk9h`e9Mj9Gowock_A3sFyjQo@l`}0;*e5fa z-BOU;#cmAX98l+Q8iI%Gs4Mv>q1)s%x z&0Mj`r$X#KRr6a&dauS?!h-@`3=`<}Zr}pRG~!vgcOV@WIN)gPm_eXq?x1#k`?R|; zE%I~bCXP?Tpdu!yoo^lgYAj}BI%B$Ie!sj~&b7yXjN*hyyCMrkI;D`PE2|T_t~BzK zqHZ*~z#|(g0!m0fDz*6nL|5easGMszqS32{fD7P_p1zb2P9wXOlv`RXifSLA9z5AY zx+V*cNyx&9%@%#8hzz^vufc~EYm_E1&Y1g-6Di%4W2`DUI#}dX@71|!lOc`QP*X7e zq>hlYG>W8<2SY}o<$wR20{&5<4dD->+#t!=Xnb&@;)J4yepiZC4OZDAinwG&R4Ic9G za9yNWUN8(SjL~zA5#sY7GnZvM_QPJ~35vUvbv-NM*5p?}!%SP+u`~~C99p=Uw8DJ9 z6*pYsURWu8n))X~_&b7QPtA;4LPMpGTmHgKfKni=jIB;vH& zM&EPoKN)@H=l6WN7(c@4Y21$V6ETQA=pu#SBeUeOV<%1OyPg;iIMrvi@Ts|!WyT+H z#5RzQ%*xKRYdq`Hqc% zl90f14KHJAtfOESu&fv8=l`fxWQ=0h%XilfD<^RZQg`QfJ4DNjjv_ZazJ*utF?lbs zLOQXf7Y`_MloGL}uRU@C(9sJ@TeoyVxay4O3Zoue^WnBV)bvi;k4DuZ+kUqUVqwtd zeXl2zx}Ry<6?}vEl)cyh!=ID5-j_rS4~vk6N84ICF`tc)I7U(Mp44LrWTR?z5-Vm} zTRbjy#q%e}0=c5DB%<1`+vS2_gO--N|i19Mg_c(!Hym z{ElvQ13A%NF8JU*h&~v(2_U0j9Qw=Bjvc>uA}?gM(Y}V~*}xTg*wz+2FFly}5jhS| z7@OnR(cMO#L{d(0wu=ouHu`d)%my#4nm)#lGpq+)bqhXyD2qHD8Yb!8HsjcepUm{V zUau3Ed#A?>M;eIg6WS4l`;~DgoD@((6*H+{Z*(eeAt;jS`X<+bw>k;MJ;gWPvuCwn zcS304JO5l`3awxk-pIC((Vtnb`HXpN$>GzzpdR-e0v1zAj7o+?ij{!DyyEH12HjYx60G*>H6I#s&eH+gW5Borii$0qtg^3Eqg zw$m4$*x@#ItiTpUh99jl$+R~AY39MU1?oPL#^r4nO753x&()k7xiz~SoXYjb?!&=%xOUaI)YFD##J zB?A60NdBJ=m-qh^8B_I!6-K|Blom%|hvB9!VAP(`^zmyaHjz83XBa~YC@E4u#y@4n zS#i#JK}wt2UUUGJShsCLHU(~{S5v{d_VYC0WTCE{2m>!U1KN)6;20De4ezH~hir?Y z-`34hy=P zO2fVAxLNKns&3 z{_HqW0P=nuqPcc@loo466qGOyu2&>42dl(Bbg}4>gLjoP8=M>{2)HU1k@t8F-qWW_ z&HWitxRX+6i&(dpMV4)@Wk<{QL|J0d^ejYJ4f-85L8mJ6+5nfSl+F z8$+RM8zlbqn#Y|iIByNwMB$~@-7h}TiY>8o3DZ<@6+JIJVhl9er7C_WO)CaCi?K%} zl3D8H^x~p?Ysv}ux9OX#_jWka(ZaISYC6VkzMx^|&O1zF#wY@q;Tf~$yUfI>gC{sT zk0Tp#I-KYbNc%&aAiWUy3H+p>+168oBCi2Fy{r>2Co(ZP_ z&wTEi%5TrCW);&Ky{EK9^qSoeX**gvCeUaJ@0*pamS8H1E@6bo@u^Gh6+{dX{HL*b z5nT_KoD>d?Dfl6ELyy?j(8MW18DXT6M`_mJq?PJ4L>J=);0a@1Ma`TLxZKVGi*=Iz z$R!xSeHyJ{9!roBy??_%u~ry@1q)zCW5?qu46c!+$;U$IkG7jUS-s(*rQ?2k_PYbRj2W- ze#Brj2>OW;1)X`fu78+X^L8&h)h4PAG=se_;|j}iDr79EjFAmiud` zmyS3QS&?e!N*a#&%g}tR!o?_32H`x7oxVKy}jA$q5KfP;zA3NYl z{fpMDBzcgEj(MWk(0Ou#RdbxI{D)mrlT8ow;JBF%E5FSUG#URPTShPC)@#1>P|w`NRivX zwaMqanZZaii~Crd6XPZW$0v?fEIIPRk-#{%5lEx*lmIO&0pWxkq*S_m;*Bqivq-Pb z8ceq*soKp6LeJllGx!Q%5ttPy;14W5j)Md9FWOnY%~bJbTT&<29N=~%fcxh$O93<2 zO$u42^1-+uN31U5e0}0j_O@9-QSwX+6Tbq9Y1ouvA4KrZq}hx1xvVNyG2F*q5DR*q z>)8k*Ix>KipkPcEc@tbu*h~_JPyeR6zQ|`RO=sE?E$HhT>+;QUA3-@ zL~}wVRmdM+Kusi`ks~m%gu89X@6rLYI_pZX@0AbypSXCopR%J}q1VaF+fy zJsUwpUYd&jSWPkx>zB23D{XHodB%HdW5@V+mo_AKOXqhNQ-_3*+o?NvCM$CD1-|9q zaK;I-;3wec4Aa_+_WA5vBoOV45mVpiA3}^RVnV^{ofRHzC~RNGy^$~Q+C2M}k@CG` zRu#=RrS@hIBQeVb#FO4YWmuNQCGvXVF)@S3} z2TgTc2&du|w(tG%aXMMdC{pdp+XP4{cem*Asdx54@K1Q#c6#ubC19fn1-G@z>C-Gp>N%mZ)ALZX2R%|>VcGV;_<7+0O))%``lU>D)n&#iKPWGmev*#t zDU7%Wk%;Bovzm@?k84< zNdE~`S)y8WY+0rcUUan{lLMa)0sv3pT_UeM&(XO(jaV@aPENKj(Kni(TLc zV!!D-ZTPrz)7Rqz0z%P`GS)`vY{yMCI2<9Bq7}=nUu_L1@i1Gs`XQc8-eZ=zc-YC! zqQ9YQW=|*fxN;;2Pi}&RI5Ee?kh8H_R%2w+E4Xr@(68wx&4oFZId0HFFq~oNCsN-h zEW~s`29FP61M4`bfRkbUhE5 z-?+^*d$y4CC*(5&7vNHU^-Kpf8gx(Z_V^QCfC7CV%w>aoR14~3f+c2*TS+FgpMp#L z@XbMZF+1n|h-chsiW^@6!p1>0Ps*`NT{=(g z)t6&lIx&kR9QXq0QF+;L{(2epOm{i5`IkIL`vxX5lW~=jH ze#W_wK`@Trw|K5!|7I^{<*`_nqKWH<%s}9;BM_QYa`ak15&-N44ynNC+3LpG4DE;n z_Bg~l=tz+mFZh5L4B1F2cBa2Y4c?p(f&1;qbrE}d_veAKs|s=KW0&+6!g@mm?au6< zKI^z}+)lUNLYQXK)EVWAOx)wB%b%ogZX4fi8pdQ8?OwfA_4sA+QqXoxoOuDkg6AFW z95G&jEZFT_KQ9lTlT7z|}VChf}EGS9_uXS$bK*4#Md#{6D7!Ql!cJJLd1!Tm&%4%vM$McaW zpIvp9oglKrt8_8C4$!2?HR)fUeS2S8%Nx`%GwL5X39-MyYa%S*sOf%!LntF1c>D~{ew!hvSol3?e_{^;`O zjpVntDQAfOOww(nAHL+u8&Qh^5xYKaxi$m8f2G?C*^dO7w}&eK#G5IDVQ6l{YAcem zgE@)a9N~19tJk*z-UXRd;lp>O97^|)SHNtadVWhlaf6I;E?M9yPJkhe+EyyBy@r+Q z$V+3fPznb5chi^zh$=cy!u#cC9Ap&d_~ z$2tLnpllK7rhprE0p~>I6{PU1QrrXiRK;|nK72;Yok}*~M2gcSrGMH|8O-0N8j~4; zhN%+*%!BtS(eq)N-uA!{gXCjQnM#p}1dJ#QNfF7)y^A-7EmQ+!FKQ zr5{3LwfbF|Aal?v4*~=_>rrKb3^5Q4sXVVQxG?0Jp3haxd>sbCFN#|Yf3DtKq~6tt z-6)H8itQVV)$odoK4e5T1+1pj#M=p>J>JN?D_n}@H1e3hcN+59_*B5p&Zt=Z00QCa zbqDrgHZd#pp5USu{mUafotG>*CoQ0wVq5@ODF*OZlbbnqvn%-letG#>>=O}(M0*@MKbQ5(>>hh*lDJ5qaRq3In%7@F0k=^H;6yyvkY5q!f*hX(LQ=2? zvo&~LAB6cBI92*1aR8AnNq%Jeg6z9~W%0UfXAH%yxxp(Eo=o89cnudN>0Sd$r{ewI zg3T-6(^sI4M+@`4oVt4;io7!EphSY@bQ6R3clKQD|C$7uE;`!mkl`Sq42;Jfl19#u zAAs`?^4+kio%Put2t=Ixzo<3w?FV%5?h=o%%oJ zvb^cva`_8sOjIiO`K}!T>aNBAR3uQMUHIvl((dx(PdsO8Ya+2wr{abT#Gw(6hNn4z z19Juxy$_%eIo;CUA!oca0&@YGMNW}9z^s%O47neX0rQc=@3$gFH0Z*r(zSfSIzU@~ z<;P@?k*lcAdmp)7Qo3E-5jYxocMLZIZv=moEinS4zSCMai%Q*FjTrl^Oiqjb50a5m zc|+Uq)eLyH4+wwi_Oo{gaN%M_>6`%h6&Tq&H@e4~rCkeh3x|atxaZ39diteNg5t@l zt=Vr&LDqqceL*?1n)LIT%6TqyQXcyNMj_im^Lmr{3bU))&A*pO3}By*$N8JbDx6t5 zECRq;5dro$|8HgXvy3e|1Obk#VL0UtKFOjnd#Tms| zKXYcs+Id@kX+~wE0JPSD-yCjYFh)BWUd3;6++Y2FnyQ7XejBMdR07EDqVLtz1r~wP z&1DxIZP{&O=D#(D0JsC3DM`^%iIa+_iV(R-yX28(51jh0up_m|W{6||xld528g{qx zQhSk@U-y{P<@q`D+qGe=^ySca3tHWL(4s)58~Q260LAo%5sj)pfS4QPn|?FQmzolE z&sO|Oga~FJz-Ol3`Zu}hKb#KW(fvCtV(O-k99TE}0Cjp->Z9w)3_G|axv%f8>9O;4 z(fgs^0()x`XGd3aq)!p+O1DXCc7Jj|uh^DFn@EYFrRo8~!>i{CutUBS_57y>b1$>| z2~WHLH7Ql7nx}6)bM_h7_U$p`J#gjxTDNQAuc}7&WMmZ4CP8}MfX zkPW}mNn(VtGo@bcwK>7>{4$*Y^$Et`@#qM+_W>MwQZ*0e$u>ev8a?_T@-+7vc)kgf zEtf;En_3Vim)2VOkl+ZX9BS5&M2j8Kd#8ss^@!hp@+{#^cPyZK-0hz#JDDC?enO&M z_ouRs(P~2TGOpLULuM`M=W|q(@H z01WJKB#PmDDTmaBFU<(28ms&l`}~1)hf)&m8}KFaF`}l7&_cf`$=XGX7TppaGJe<2 zl=X=;%h*z8d!ok%dYE1K`guS6|8>y*|5amu{eSprNe&-{5RB7)xuRl~zO29}cqo7Wuhskmj!d7>I`X zeipTX?GeeJKzZY0qp>Snh?s2M$&Y*S7-+kIPvS}ZDd|V5%C|tOxslxfA!_qcpP=7p z2S*hrL6P)jz-P;82l=QRc*hzB&ewH+n$Y0l?Z+_Qs8hR8RmM~;p6;n{pa1qMuD81{ zADl0>#|RSTvGW}gGKdMml`XHZSGoiI(KO^EZJ9#0&T8eJKa;&j|5~lDmpBYtvO%Dg9}v z!m^)elRY30Ut6Vgu*P-^lZB~;s+N0XY}1KBS|mwec_q-nIFg-UkB-#fxo7-?%eIz0_Xw?2Z-$-ZoVHzs^VA)yMClZ4*cd^`42*oLs>m5(GVG{Zhhy= z3szSag`i9DsujN8wk+~o6F9r1%2{~8cpv!-kmk#(o@o|6ykz*~O3dPv=YP}SbkJ-W z58MN;f>~yK&ym}qg!{`%4rI<{n;)4`BnckK3~PxLyfxCzXPlSBBA8XoB(dmAbT+9K zU+o^s$iHPlp0$#*$bjA)%KxoaeEwD|dSoQP-%7uH7Ftmo0k%rvPuu+}^9Ea*)QYeO zWXGUiCC5vnAA-XLLzC56? zq1i|mNZc&H>eXf-LjH2zYSn2&uzY%*r4?5uf6z`qIPPZB!oeNAgP&>yqWlfkQ9ha< ztew_-e4W_%dL>PT!pNDIJ)vVw6 zi4A7tvWVK_x$N^1ZZl*e7_e<^45Fp-v9J1hWE=j68a52$UzbT!3ox--W}mvvOn8;61ybE8RZp{vpFPx+=RcU+Q{oNw+Vuf=_c^!PQ-`?EODqWtaK_{-EqG$0Z zH{Is;ezDuDnjQuR6nIozJ5)~4oIT)l((S+lejG+S0&?>O@qG}1MTVdHeXjs`B<(Sv zH=ob2oWioG@uZWO863$=sk_h8n85KWo-7mccOGwHp_#o>-;;xF!xjybDIkuHsfyCi z4C<>8W?Z#0FmYvp25OOpv&>WqzpHb0zudiJQ5GG?=ZF>jE0TzIiTfdvinLmSyo{(X zJhsmGnUTMMki4?%FNDbA^2#7|Gp-I9Wf4=cWooR`PHN{ou)ft!-J_Q2OhcA!cUokh z9|IWWs@tKmE;rJ{Qordz5PDE}2_9kW2iNT$Ql*~8Tf5#09ui46;V7o}9Th=nDZb!B z37ML&xJ=pb1qrOy<2e~J)0T4&3t;x6Y3FL6Wwdox@Cv}%6E5VHV^Lv^PT|@^#vV=y zzl+to8}W|>mKnATf1BLZ__rvMb5xu#_e8GpB~}ud%Au$78?d z!L$IJnkoQjkw|CBJinjbbY<5k`0ba2!tq-0GnZ3NBu&Mud#2CII2`7` z#kEQccYA0*&)ZkMqbi-N)56JQ|4F6>Hsr($+%A-^0_7g-c?gdC`?S_tp^s5!E0d*a zJAv^3UGG$){_CspXhSxD!yD%^KMVM(tX*;`a+DvPjJ5NeH^VO&{nZ97s2xq%y}&df z`zV06!oJZk+f>TwWW&zvx)z6T{6JU-rSl`j0@1siw1>YzrdE5~j*sW5 z?_eGgDOJc%B9nGP$O#36S*w&>01=i^w_u>2J*~B6bM!~6o5zgW54O?* zV2*4zN6L>IF_wc&C0JZO(W_0uT-Hda}?N|`WBqwGZ+*52kcBJ`!j8WhDs>iKg zx7c3T|1ykv@{IETJb(@U{2AdFoZg3(BhDFiXqdZKa%plTlK2#F#8Hx#mk`cTq|E9+ zaL+OEg)w3;0%j3B3tQEZ_5{(59S`cA_y4|tVAIil){Uw&>K$+wd9AA*-#=Qduod<$ zp~@P({~;CDg6PiW{b~@95%Gv;l3j9y+}`PftJDO z2RlPU+rBI)8!K-!Mug9kxR{CnXP=VKKi6Q^?#`=6QK>BuX(eyHRxxa8Sw1Sh6mfS} z?u|lStAJmSGM3SA;avivwhTw9+vu3%ddXFe5~0n>uo@&P(13wk&|sTrln;|YsTA+Z^uod#)98adpJf*DO^$x{3jl`9aPnN&A6~sbe432-Q zH<_0MXl*H7D4re(PLD{y|26Sg`A1w1A_>&)VJD+mq6$0WtK*b!GRee1f24ijm)!## zI~1$SGf$T-kHIj?V`1bSSj^lPGbM{$zW zUC*C?0lTZR&o&flz9I%c%=q@)BkM-BCf~Um%dlggoYa{lJ5XcHn?&bqMp=4Ac!(VF z4_&?o77ov~4&JDa{yZTc);`RJX|S7vv_rx*zZsc#8zh$JaYSd($UcTx%kbmqDbW)R zBSv*Zkg{tJBTx!17#R-YAg>^%B~mZ_kPcH@JS7q2l@zWqC{CPQC`r>M>_#fSKKH?{ z3g-y{WI(~YY^~Phpjg@lz;Wg14<*B|6g%jMf{(9vvwCT+>7dgFgmg!tpKwSdTh3_)sofpv6#Pt_ zhYpsGH!TLJS6*(sz6LIx4IREXI0uXJ=Ic5p#w)u2OW%zBr}Jbt>oE6X-3;Y}zU`a4 zTmey0LN*T}{9pj8Sp@=9zHj=YQkx5J*^AGfW&B~QvVP{+5lBru43dbP?d6gdRKZ z#6@*mvOnjT4_o;9N-gKPY8jKXOjw}Avb^*mJ7>UhxV)BgHvY}HMSKCU3;{+C;aztT z+hGKK39yz?rVtJg?wXFG)$OQH<KyRGyPY09j!e`v>S}QdWq`Gy< zl5jOzR07@v_QoRJJu)qKvFDXDqDy+Vvw5k{g!*XKLr66=;WsU)JE3q|^mo{Q+ua_} z?jl0fty6FCmQm_R*HD^7Eq4wxk2R6po!Ks19oh%)%NX#b+kBP~{F*rp* z#5_iQpI3%&w%GL97@mI1a+(#}*r&2Vh&!-xcE3YtvPdT4eWeYgFw;odv7|B@0Nr&2K}_hp^D8Hi(_taTd7{3gSKuN+(X zii9`!a_|^rJZnN5?%5}I^64ZRIXgvsw(U3n?I_;ej_mJqgSJ7Hd`u_QOa8WgW*?AR zM+r!WyuKIDNDh{!?q-_?fVi@4bldi%H?E~w;-4>|!46r>!KyVwje_&y8&ghb$9sLM z9$+0e-~@|q223JN9^j)Q=}*;xvc(@6f-Ywz?}Rcm(vG!~E+tno1rp->61s&FuobqZ zp@~0A?i7VRFEh;F{|(%!#Tt5A%cs)A1As~uB@Y>$AG+L&V5b?_Z})zpDIS;c;4{OM zO2ySQoX$K69Uh?UG9lBY|1FfyequXI%p)PR7>vu`#KvFjV5=5JnPCyd;vM>ThJ+{4 zgDNe!qmq4LYB+Wt`0tDK>D)I|DaWFmRE>Pr=Jc8AEi76j|5x(I8t*@F*MM7V2GUvK zTH45lDLz_F3a|a7zMq#LkZh*=G>UccT`snIvCQ;4+eC)IR<^D$F+33fX5mLfMwkvT zZYdY>;qsa5#oY%5O{x)Tly?Q=y;YysM~<9_phiHEUVTfo1U0&eR|d!GO698(H|waw zWYLfJah>t!Bz&wmugBR(W13#;yosYoK=OYfUqDVTT2coRCR%5>41j&jY;6hzK@Kax zFe5mZ;?3gZk3by2zn>8bx`ds8>){eAX&Q(&GJA|3D3!KyAC>23{7v|i?Es|ryYJb4 zz3zKrFiXvD|Dub9iTxyqgIQL*HE{dkjQYNuT-_3#s19|lcB(q4z_t_}G6|^P^|OQJ zFNN%c8ppuV=lLS9%k_2<`R`<+F8D9Yo0Dl`qkJO`>TgK{BHHiP{hBBtzirNF2)FP} zDule+A6w#-)~xPu*-qN7DfLDjW|AAiosihNvujzfYS7zi^?8NLrz$RD4atTj{aX2y zZ&?jaL?L`RF&M8<&A4t{oPvTWLGB~_ndLNUiQ1ix(r>Uyjg7rJ`0#sG!ZG$gBtB>p zeLejT#3sM(C$eY_ad2W(i`92u;|D2ui{y06aU*{L`NG0S!dLochoD3o0thkJSTYGG zqBRP0p6Om{MOxBLpz-k%tU#7Z`L$q-GYdQpp~gH*(_0Ji^EbqhAZ9)989C z)1Wc%?&93{6Ua4hxf%9-kM-^^)&?T#RXXDFP$YrL3I{eJ&HX@hx`+agriN#w(qu5W zTWA7X!LqrT%{HQP>v8JCDo5gUU|27(a*V#`=?zf^uEm2+*@G9#F?@As>8oJpS0{iG z?%~k2QA#ov;=exeFlsid`605Jf%x{8)H7olUi!%bEa^I93l3f{nw?NIOj8KWEb`oa z3&A@10~nDvYnsTIfOM~Oy4f;`IT|VdE{LzoTkqt~;z?gcYtx@Hs64tFByy}YuiWMm zxkCHD-mcyk=qKD>gpl22G^{U+e?CsSSK0a4dBnsKo*UhayBhNQ&dX4nnW*VjyPDW* z#?1Pmx`F8s%66;cpr*^L=dP2Th>z}8&;#&UNz+wB0~SL0okW0r59iUkxRy9)vX9JV zlHK>r5awBW@Q>^vK_4a}`B(7O{Q!wmQr(1+Nn&fiU=O4fd2(Lq_+FL!tjy_t>G>h7 zl-|-iMx5tiq}xXfsxhDyXH@3Qf9#DzTN>G^Upx?$N5h;}yv(z>!VRt8t&C3sDisKb)7pgv{+FrL`DEjeDsL~c9 zn`(bBGIr=0VsGv-v%drSf!BT)U>)&fm*9oN-AN75Js?vsUucDF^6=fs!@rw5xIMNZ zVp$(Q?WU$d#@44DqA96;r|?~64d%zpn`$78X1U-H7-auJUHj4A_l(Q z8Xx$?@wF`5laW|^OSoaywBc%OIXu{3RqZ2G0`TyMYVhrqmWwZy85~Q(=9{m=<9}?1t20BOskns7W zzJbAN_LMZcWtRZXnO6JKQzCRqFu*Xr!@@9atrU}G4P6AOTC5cdMLpcY9ZV`pY*bgHy%M}xT=Pi&6t7QEFO6e^B~GFI zcEcWvA@5dS=%>B3kLWnRtu65RN@EJC`AZ2HM8+W@UoTbXRIKul0t08`fc1B$t{o!c-r zKQ^C|v7eH$y}kWv_>$(qz4P(Q%+<+` z=1=F}W8Pd{(hs*#o^DMDZV4+2p7?W(t||%eYcilAi8oB#ZYU#3PQ%63@x?gHb}#m0 zc75bKUHz{-KO$kaqF1d}e{}X8|0bNHF`I$^$<_SN=+ni+jGlVCZ%RKlv8TLzkzcwV z!}l+{yLGrM!hf%9&>wxCML$2i@X0rre6h=N;A!9_a zEUCMqLof2a<2KLcS~XCY-JRfI@r&Z6I7QJ*>lBJ1t= zE6OGm*`L)XJSDY$EGRHjyHyZVK=#QmdV>-$AH?s`-Gq;LT9@$TyzOgNB zwj9j)wLBmFp%kWb#d;=^WaJr0LV(FmHj?eV-+jB_qxEhN1u{U{${OBuj*LMa&tx|B z>ozO!we-&Pqm)Y8r>lV^9zr!&XZX7_@C=@;Jp3DUTvmT6q{u(`R)V=KN9xC^637J0 zuk_%BFPpv&>qo6V1Js-kcLNS!HH)wo8 z&U?8tE%!50ygW_`YsD;wbz?&HMas8M*x=IpVL7)Zj%%)`m?n)*0|xcaU%H$3S>_qJ zuhb1uyh});Hw%)VasIZwl+z(yS7}{yEIak%meeog?a{~$garc$Ich?EQf@VCxLwpd zUTd)9**&or!`iUMTh5hqyE6j&4;Y+h_U;#*BDieN&zf6HlN=M6sE)^H!`uy|%C-wi z!&pAppZ!04eRWin(Yp6LfS>{bqI3xof|PWlqyi!#NFzv>bPf!nbV^Ahjg&~&Ad=EO zbVxT03^7A|FP?Mm{mxzYp0)pgS**oc@b3LQzk2p-#pWtffOiVhP7}v8X02N;dre@R z6#Im_n6*_x1e-6O7A2O;uhtCb?Y)SH{Ey{7^&95BUjzi7H+B-!(sl~e^ge>}MK+!e zt9zk(Cx?nZh3U~q-hY6gkRkQQ$|e(kZ78;O9K1d-Hb{Q&sRQTMPfL6Y%L=kNdKI{* zmX&hoGCpdl-36TEAi?zw7c%v)L38f;YHCYB0zFg99uRf4N4U@3UwpTFpbd8t)ar2@ ztR6-XXEi_8uYo_5>LRwm!8H?&6%g4Uwg~45$!2SGrsDteCZGwO>VTXWAv4j#fC^lfrY|=VK?xsaJnm{bW9aMAG3EiWQQi%|?lDD1d+-az7uo%5VB zg8OPegsiuvN6M%1?&-5aTR9+D>XOK)niw1S6LqzUr$Y3>5(khSe`n3nEc7P~dr#0H zQuvAad%X8px`+EsoZPFDl3!HrrLf+6dtM=;@U_9(+rxw1=z@al1COkT!{%ykD$4OG zg~+qEXZX~lMi;|}U=z?x2~wx;@f`2!MmwRi%{H${@=S>Zac{$JF2#0hY^{+7?R8kr ztAyP4M`q19uJTY1+^}z2O%KNPJb|tZtCu)c;Ye#15$QT?Wps)LiU$6p%E$No+>jY~ z1R;P>A_rO`kX24_cB1&8fBdlhpF8xAN0HOFMor3B|6y6uP`*bQ_u+Vb$JFl}2I=wO z?OmLILSr#pu1Z~f`$Pc{OP%%*-2;XI5(byWZ+pLPVD(Y7B=Pen2Syq|!4dPab8Ya~ zTlPH31a8LfRX?8phQ7=DuPi{G13)fDH!M<4ZmKFTtR=4XrEw)sR@A0uK+=S|(s|_k z#{C*KE<3q64d7$xeYvif@vlyrM3fUprBy-KM6|EGV7%gJdC)mE~7 z;kj=@T#;@c%2C_!b!d)T_s^$82drr{w6hf!vN?KL1lZP{Rzs4Q9c{Glw%6#;&~xnm z;EtEc`p9bSHpwh?PwNEaZc7;!!)NC_op(<$g{EasGXKvtm|*sEEMPJdW?pw$F@MP) zDRdfkvV{*jExS5a<^3Re+0J!CnhnU>Aac98V@=QFZ1Az%K+kZY%Aww0?eDWHfD?c} zM~iETluAXh>bsko(3>BdX%E!qeuuI@m{w`BpDO7r|5T+xl%x*GUaZv8EtT4B*4Esh zWWdVMi5;L4`Sz!ZqV=^##`6$@2{MmdsAZ(c{1iZZOe5&L`!V+AkO(V9^cIbMuZTGE zkCN$L#H`yir`P)>viP?Ofi?mNG5R?HK{|7TThC8sY|7SqNtp0MUKAe+K;iXx&9`BS zYl+>l|Ewj~_2hqBnXcV1u=S7)2Fwm*oTJuw8(X-2G1=hO^1Z^$ci!~c%Afv=y9AvJ z_}n*;mSFQ=-i`8}X#d)6%DvZZ5Ct#RUF&(#snV%(U9!~7q#?xYDG}@`azm&YRwLQ8 zI})1wP9n93UrFe6@NKq6_7pl(2bFBYn&{OSL#>O(QEb37M5u00YIXh-?Kpy3-1ztp z_wNB;f9S;7ju+A0kS-uVC>{X=9~hL?+^w_zYMP7x-4Q|_wJ_LMh>CY$TR?WnC(=mXmIx|;|!pY?s=rFl>} z{U@s!I@}l74Fi|-)@R5K>B`cB;j?(Z#?`Vnw9^5U+4qO3cfS~&`r0nmqvnnS!2pe= zH_QpLX6T1$3|1tgK=pfjxE>AWl?+v6_^4Ux+1&@qeGaQFcZbb}z%CY&*Iy@*486i8 zF+DxyC|g^lH`_I6kgWG?`K1nZ=hD-`dTDx^=Pcy2%ZR|&DvL0G{6_Qh)|P!kHb2)% zu_wQ7^I=u}0kRM=ACe$m&YN8I-qB?&TqoBvXuEjkSif>9d+)|b)j@=NcCM-WC5>?igJF5SazC9^|42=Uoz8FI?w9Ng+l z5h4At)nY8$*wZ@=4u3GlN2j;UnuDgkHP-HJ$>U0Yap=ZpHT=4?E{kM)Avt>uf5Cjz z54NNsFHQOX^t5!d!Kd}z93nAsalW8xXx~EhmnoDrV;oR;(v63m1J%S;J7M?#KCmJw zf{BBJwV@%2s4&_$J5?uhL!OEHWPP<3YL$PIEc6Ka_8*?FD>X2NyLugM(sG#IQT+Dy zJ%WndF;_>3{vSme6%Rhb(ZnnEtFg5!N|~S#Z(ai9n)?(NEp$EoL9|@eb%?p0EQ`6T zhpt9G?@mk^VLx`8A^f(Og^~4cE50nIdU~enx5vqt-5Ng^^q_NA$|^S-M|XR)TDB=a z00_EHKcdq#(4FVZ`R$jIK! zlqcLh=-sQ|=UhTq(O3+~1EZCygVS6fxPzKBjn&RuxkF!)_xN(&?qpVJL4o$>0t~)Dru^8po@x!i{yqV-SDJd&1@uewoobYv(SY&?idC2q^qVA zp>b=c4dUhq;^q2f-8Hjvp?7;%Ll*sn-?;aVl+TXhz`>N#$D4_MvR*&;4cM2w$MdfW za|?(ieQO6)sou-Ky6_38HS4=@H=ifd42oK999S&3660XbqQkwCtQ)Y#Ow2*EJbScn z)L5)T#2<|HoqiG5o5$4R_(UV?20E0#jH>s?u|h%eF%(?B#7ICp`$Xpi&u#rpsOXzJ znQeI>BOqZQ*n=)5wDW;SvtQ!rc&*^b-fn~Ye%)G#&717~94+~wh+(7L?41(c?IqS( z9!`__VTXmJA!wAH<+_MAH)ZjdKHg8eV=NYxEk3om;L97YW|wP5Wa??O1Ph*&%$i^I zNrb5ZveSChDFz)?SL`GI{`mg=Q`dj>s5QUu)i;2HS*e*t$ zMJ9DiL$6yFYNff`&-E?w|=;c$3lQp?F?3e!~(S zM|yJ?Y*o)TGNn|;|e#-Hff)(hu@%Z zr63@CvZNZ!gXD9HOPDLSmBXoRTUDt;cx?6^M#O{M85oGTT+5E|tULac79uHyLQmJV z2&z-Jc7&^prgdmvaGn{)5U?)_#2BthG>QuO-3MZp%exJ>{)AvL=psBe&W8`I$ta`e z5LKZ7$uH9^JgkKHV;lDppNA*Dj5&Sg{Y!s)BI1{MI?z91fe3`5zO!~dW2$z-WwJGI!RQuGiQL$);Xa_rXA2V2?EK3jU ztIu{0hnvAV{Tk}vCVOIfH;|X2%SGf**Jw4UegwIQJZ5BU$y{X0%Jx1EKek7_v>l*W znXn2@yoAUE%7evV0=b7xv^{_MGeO+V7lWP>sqw~aQ@x#XnL^|fNp$K3aU!7T3>G9r z`iB8MVn5pV4wbLHi|wA|5CkuQeuq%lJc1`(}BTu+y@ntD;L)Vt+C#b~@wo-n?learM1Gc-Gde zs$H{dF{kLuG3tDfjr0exLI^xN?i(~WMJ=G0NANZ=@*u{=zR@F{?pf$rR3pgY5MT4} z1?&I+G#2k~4uX?|SPNYqTxux;nv1QyOFfd)paNo`?Zl5(!Q%Yf!Ed4xY(&oao%fdN zc{JVM76|xdV3xzye2P+IFp7CMh~tTV?jK~K%SYEX#LQN zaucO@^ROkdCwT33EKH z-nWYkg6bqeNIyjA-b>zj6tiX&i9V7V(%NYO9&8cR-!3LXv=iX8JLp38OEc+m5*FK!jW33naBaHKP3YR!f|TXq-gDGjmY&xs0M z1L~n<3nPNOpqpgHSI1IM*oV?ly`=$L`G$UCwdsuL&vNt^AB1F4NiMCG>-E#S!GP#s zHKDIA+*9usMeW`tCUKn5s3~spa?zsPPl&sDzG8J~y+dq|Jz{8#&prgy+bT!R$=;h! z2W7|+*-cT+HX6STF&xIwO~0ZlD*nMm`}IUA!$&mPaUjcbIATP}slC3ZVaiY&tVD40 ziAM8_TATLd^>36Fj4G(`)g^#nkg2LLLz@Q}X0nrFx!g;|cCk zq3K>1X)`W^sx><$drm_Pky9H9Q6L4J~PH)A;cK~I-3 zX7Uzd{tZ=%+!ozH)n)!z#+uLu)PV521_=8=uxmM4lmx{YYDFHsJ~S_D1reM)tZOx? zJ07X{zw*(4anwxIZ?NZAWHW(1=y|bj)JP` zRTS3OFqJJmTbEv!-hc52klBG}W2K(6yJ~}UZX`l2H0=&8^ywI(rjOzBSEjzMZUMNU z%U=0fI&*gUt86WTM&>0t4f-ANT1O=w`fs4JZfd4Z;71tYrh5;-GCd}470%+D*ik|> zscw)jAw441c@)Cr6cpr6i-Q~0bZfaBy-!uMY->{c%NsqmR5;N-A z#tZb?Ii3|#OTQ$3YTEHZF3I(ar18;qnAZo}k%ZqIxst%gK0ShuhlB5?S}0~qJK-G+ zlgo#>6pALWTEv`pB0(wi?8x&JqxYmhe0{-Vl<*xjCDEb{_)qTJ^PxD1-1k2U?&qPNLC~L(v_0)ZSmQKE!$#6<+V+V=W0-G=R#(eFEp?YWcY7(zfg5H~iGPU>l#gGOMSD{&dhYN+&!k?egY zC+&4#4P7IoLp1E9T4LR5uUz+IU? zX^`w%TN1!tZ#g=!@H;dkFxqc2Y8rY21p8r(uBe!z-`@{BHCGYEYvR| zC;(TbFC{27Y|+c41tBR+7A&auClDaSc;kwFzj1TQZVC}4e)6LRno+*os^{j>bNUX5 zDg|Hnb1>`(niVasAT-7aESEH_8;GG7ubWyjH==hpng2{usQ0qIQ~J2T)H~Fbxx^1Mb z)*DSHZ{1l2>2twMPt{W`OYHi~Jy zbSF$-lZ|EHO!l1``&}q-lOW3bcq3(@Xf_@5vW4^Xd>TjBy2buaXnqaS z{X4Fy?YOcVD&zdm7zKQR`*LJ}8XtfNlwA&uaLU?WndD+I@MC?X!}S@j#s3E1cCr0O zQA}3F1vO$H)49ioGy&GXJ%TI}Rg!d35*wo+xSLkx(>#PQJR?ZXDQ`~^r+dz9xB#IF z@G4Bj6jxz0;1Ws+6=b+Im!%5IEK{fd(YEcwQ>83?r!=A@&ytO*D*$4qPJ_GREO}8ZO{)naj4Bjf$>Pc5 z$Fm%inkJc;iGFP+#xE03L_FSAKk%pnf*)1b_u0L-wlppI;&b>|Es*EETZ9Pjw*l_o0@kZviCr%%?v?@m4_;$$qII7)EtqwBt*NRkxb%9{gMDoq}K#_ByA z{bYF()W<^<*#*l$byB?2s)&3csbd75PuP`{aZ^M=^humnK8Bj)fxY*_*Iu`0XX~r6 z%Y`HmVp&ob&(;UI)AUVcw#{qTlr8It?>BMwtA91N|NSeK2Clxu8$Jkw;l%-B;zL9R zSLEf+{FV0-gyC{uh`tJ7U_i3^U3hAI0Jny$DHlWi_pRFNl5@TI8?JlhnzUXTc2TuN z29GjtAiK75L)|7WyAb!Abvybc8~XV$T%7Cbuf*|P`1Th|?! zKz37HO&6R3?Xx#T*W{%D%gEeIkWR1ZKVAN7*!n|mTJ~=F;RFKQY}P6Fasz|EY z`FfAS3EZ6*TO1vW$Eo7qWjb#%Y+i%T4i$JkPOq7v?F1^X#;{NoZt8*PEtl9A)g(j%MoeP~LsiS~OP>^Jbp!_??d1l32<& z3e2*!_r0}n!az{WiX0K6`50@>K{D&qw`1r}fW=rxd;GlPnsKyxI?ZU(K z?E)S=x-#$vkoo2MSv~nmM z=Ay1!VwpQ@twtoGw z*b{_jCzF_FLbJ{hiwi3lWkR9T%0iB$sc%1~S3!&WKnHp_z&#Bx6yVFK>bddkzPrRs z{RaI8E}?p?9a^wmTP{)Wh3@b;cpYz0XNNtZD3m<;O&;!8~EbE-P@*s(HCr(^8S&-VYnhC(S3^g0zmhaFqf9Ld zvkQ6rg_lWAD~UthSBU%UWXgN*rg0p9P{GnQTjUX}nO>-e2Hi2NiyPPG3u05sDX^pW zCCet!d6&U8WYAyHpjG^QkbsB1h|8+XaMw2$#ahxtsv5DU3Zj9IpDR*7m8I*{FNka> z?p@2>g#_M$kB9~UZ}8ArXW6eayhtje!Q{RSqDy8YzianP+hWT3c{I?|*0CP@d5t=rSWzq65g0wSQlY`pM@@)=|2=M(37 z-6uAS7beZTm&ftH4{5Mp^VMwM<350U4FklU;c8G6{Zv(v;s~AhHsvh%f}%t&BPhD@ zhkMn#S60{zz@J*f@& z)5pFS+x=pz=n*y6v*^uU41qMBny7L^PVt5gsx}j+8`6KBuPHRsvDxmzk7Ei|)%CX5 zlLTV)jkNYsETNE{D{f(E>H%YCJ!>S1$}e8URQ$nC?%| zDzwHj9!Gk5juD*Ap2TA@z$_714Y!iXWQcgi3-i=D8CsO22fC4&zgB0_TyN?%;4`%%yhlhP5)}Ux9Q6| zjXWjZ7MO->28L4^)V4&53C<@$Q)({ogzOKhjW~gi%e07nrk=qt_#+_8325sIQF)_vDJoMmV{6z9wZCay?fQ>I$$8e>8CSHpe$SH>?#Frk{ zP}4X((6H<|{`h#IPY=n?9YHiVJ9~l^SaH__E88N)w^YYH$7{#JUK5bU`K)HkiFtN( zyMfzdg(xY-qo$_EQNkWMW=MAm5W^_!=w5G8rPl|JURy#{b{o)0<+pLPFIbHqr>KH9 z%)C*(xTNX&cM9%B8(o*jLQvalGsNYcp3MzZ&Ai(CDlTCPsAkAhRgj= z(Q?Zqv7I@?=ofQb3N$*QqQ=PAVzjOsr*AU8KCo+6xkpC+@EPUh>`8!913n9^`L4sZ zQ|V$O5%56n7NpG<5r2{_G3`$)+Hu-?5vVB$-dYNW&&iCV4w-|qs5!&0+ruc6{33*z8%=gjw59tpu zxM6#p|F9$3Wqa~5LDREHD;&;GMkep4q6B-cCib-D1=yhl(UeJ`a z=5YxbfGJJ$+1s!J8i3d99LJG>iUcSJ>5(LA{hHj{nI9n2IS>}Nn_TG{6<-+<*{`n)R&`j?HDc?{XRFV+Wt7|DNrn)_~{ zn~zU2hobY^^nS*I1Q>#KjS;`Ah~6wxb3D4;cGR$^GAMVJ4n=oNO}k%RFfl$q-Ru~g zM5RiirxU}@Y{tlc((X1yyZ%DpVa~qo40NK2n(+vw5PDiz(lnr(8oW;6)-=}W))~Ie zWVKTlIC{ie=3j}$5ITJ|UxkeM*bDh^7_oSMzliiq1`sl3Rf&vmrAS*BuovT~-VI)n zk@Rt%;wzF#XL0-naPHQ1L%?Rx5)U*yp~O7q&9kxi?S*nhPv+G*hVx|j|||6qYO zgk_%ZdAjut*!wd&Cn8lJ=+IhxS;ar?&cg0oSrxPn#U20Hs?fFD+7ALpmo-g(O7(K-mF9X|37m=8oLWDHB@`p3R0qB z)TH56%uDgDk=t4*RHwk*9~(cznjKONvQ;%o)d8HH9nd6Ylma!)QKhJ_8W3V5YKY08 z!|7*MJ5I1*G?PlSbfu@Q3jFva<-OBX^Cr>2L7?=+!7tN2)dvU$t(h&(Sc~G{J>q+g z&&qn?d$XkmzlGx!$vmeA&)@Fh|ISp$lK$RbZ;C7Y6IGmn2l$h_=)v8m?P}N_ZbnK} z!$!A7YdiR=(mM4A8c*P|b2|9sVV;iyVtyD1WfF;Jr=YhhwV zcg@;&NlmTS%FCER-Q$;Ay0uY;fRkppp)?0vFgI8T&sAKwhU5np!>{o>^THDYkg6$U z2P#gd#;cR~eP2r&QAGR(^o5jz?}%1Dmw|~H?wwesPx_7{M{gw8bt-ocdeJIkEN0vb z$2Q2Lq!6zhRFxvn*RQM`&|NU^!WHF%fl9yKCfUBMnBbL5joGCuAxDFOn~cwhcLoMatQ>8=^(mb! zXhVp{7AyLko3!Zu0eSz$<^Jc_QNwFusD~}4cySice9jZddOGAF$#u8%)wiNopmvIu zY7VRREC2Cn9rRYUAjE{m`vv$~JLHd7>X7>X+;*8m@2+D#u@Nk>a>D^ZuG6)@^-bUF zzY|k8_}pnf;+w3k^LstSNe*Dxx3sbRJ_1HuGJX?*p-&><59k09ujE){kY-yrd&#MW zwVCu73zUZNJm^zNKLdzC4{4Kgsfc4oBt1rzQdn_0f7*gzX`o^G$KCggB`+^Hue?Fc zGY+H^ZhaNp^4>eMT!Q9MRchk5`ZgZ)w_y{YuvhLy;XJOcp=!x4w@=CM^YP8VF_Bc* zOw}c5)`WUm%|~cnd($R!y2mSEgqPH(VLRDIuKpoieP$8J?{_#kAPl=YhXq2-qlV*r z<4+rr17PI!7c5ngN~T||*@dvyY&3U?^a6_BIgz8XPj+`_+&e8qgm{jugJBoA>qh|` zV#qmOxbtdo%n)cyWl`djU5os>p=73I8vxzNX_WZ%8H7#(*(fDC0TQs#mHcAv?vFN> z^Y$4~^=!(Vp$#m7z(_d55VsYyB(TMcDs8pKF}CdG{>CDw*j@esFtYNPejY#8J{()Y z2iA29F-yULzhDg#1(qou{-jY_awD9ZNF^IAQ%T$2i5X+oxm&wpoI7d8>+!=?+}q(O z+GG&PvsUb>8^A59KC{vfBGMCw1?H__YQyjqALz*1*|@>!%3pRSMf7?%&f>p&$N%A#?G^feSttuYhX1G66=zee(!A5fB$wG$yUs=+w%+n{`^+pkH1r^{F}L1{0+ z2rj$IzAS{e4+8sAwePDY&y#-W`AIc}FA9vV6b~dcTN_{+!8`Iw0OHCU9#-e0TLDaO zw;Sd!nOiNx$woYinm;u+g9a}>fCb08?YwfgY%_2Tw6K3iU*$k7Do0H>dtN|{YSjqq z>HR*`q$}n7u*ysA#e>Sd(sB^@u9(GT=vau)pmq=3_~tIs?^xw)O`L5_C+YdEiv!aW!{)h-+YdU zK0cGTG>3wl6w3pR;V+W|J^*to6Qifkq27GxSWlxsb3-BZ(@hvQ5t7QdX4-xJO;fKU zGVzdzXJA)*K=L=+^Wh1evKh(IKfa)s$?NqsEr6+J=X#tYAxhkb9Eh&QG;D8J+%Q^Krm?7CkEd&nR-V9k;s*ct(eBkH0@4~3x2=S6+kTzfPR*JIKiK5 zpoG+nsN;e#04%%+0G;aCzaL!A%ow$p^1LiL=3+K(T;YP#=W6xumPvJIx9H~h&!Xix z6S!p__u)2io*#!bUu9cvt@Y@A#}Nb5zQ4d8^~MtCCi{7jAKDCm2w(s^m)i|#%X`6@ zGK>b%dIKMdO><3i|EdLp=<8Bc;?V1o{wXSH`PMi^nIhfWus=K1M3O2L@yTwy1^-*LW2QEkWG=wi;p@`AEPZbz_baTv~hGD*djxoIL+F*=X95-+CMavWg214;Qjv2 zxFfZoG|7oz&7%7`0|NPX93fxU; zZsU{XjwUm76WeP+E(#id&RR+sUrZOb8a z$lasHzFd*q?V@TMe}P{7PfDFM6_v=+?rR&<6*lk5xWW*43j8?`+!$l8Y``*mwCX)n z%Tab4S7P#l9|1Bk)?pu?`PjP`dT`H_FNi^=Trli8uf(Vz@p3(Wp^7r2n4b`4(Sgka z4oW(oi#+JQJ0R+^d9O!obJ!uw6u#3sU~;yN4y$D`3I95uvr=4^XDcwwMDz3ZiJKTl zx~E_V(@!(iZLjP&i{5{ss4>%?FUBK-<)t9F{a!H#hj_}-2646v@~ zxery*q&CXv@#Olg0UpA;O`vS}Wr1Fr5`e4wLKEQCt1Ex)lVId&k2el%J%G9t$dEhLTTE|7ay1y<6;CA?T|8fDF-Zz+zuoVgXiu#aNA z@9j5M!jx}n?V-vd5kKlvTd#EC>l2R~UZ6ms!b*5<{4?v6mSc)aBN*uJdvn=@bRoSX@D8mDO?cYo{ZmjQ2_xAEM^>B3=SYiy1Q`S-G z@wQOHjn@Hg9zEc)B#0W?t^zY2>JM*a`N#1^b{_A>Mw1ilKwZ-$k5b=Ug0L>3YfJtH zx_^86uBY-v)vi*;Wq$j*#mkSfqQYlK{=c10I1i4CECC$RN^CI~f83XII9L-5ViOb)I33oeOhz6{)DPlI$*T@(H;s?LCjL zpX|}bhs(t=*}A?=$j~Nj+;`IaxH9wCL74b7?f;;-y`b|z# z1Z5;0;Wxre_#0L@n($~WPBmoNe``oUh>r?YuQW)-<9c?ig0pluxSD&X;?!JSvRtoq&h9WoC3SfI@TI=3Zu+MXu$vZ2B)IYh^O6zGyn5g*A zXTa?Ayxo+m6wy4t!|9xiXKo|AHZGaerRGKhxdOkBP_~W8pY>g}d>JCn4gJ$q<|nS0 zfIFdsJ#@~`%7WJmWLL2l^z0kpPQsK662HXS^BWvMQ;pwa*>kAZdoOI*r2;PaEZtcv zAo8YyD6JSRqo`i1$Q=yy)D6tAead)1K=GthRAT4bBIbHfIllod4Gfd6i1nVoI4mX=?Ua{oO*jq*zKk}Ac|qtbo8Vf7LexL>P0cWpThnRDZ9d>NZ! z4PoH4VfV2($sx)xi|E}Sm0Wdy_hj>u+Nv&Fc&!00rCf7-40GLxmA-B^7qO@e4wWh6_ z5v0J|b(4(nnvLRM;_X&tO7IM?#o0{YyqXmZl(QFExP3#qSGQL9!4(^C4`t_WCv8Rn zN1xg!*`F8OR17ZN@$9F#rw&~8bBWyx5Q-E_la}(1U9#QG=KnibB?mUG} zI8Q>|%68LAxE{wi962i|9W)ga)G-{W|r*?B)^V9drbq}LXSk~ax#SAi4 zc{0;I>GR!8Qc(|$4?tcwt{*uI6*E4urdV5zzrlFheaq3-Hr@11apdUvlla8WWFybQ zC$HcHifSj@(C6c>i0sJ7_v`9b{Ms)3iTVP}8mfE46>Emxa)~d`B2Og@OZ8{Kth~!$ zi_=5*8Ym|HwGHEVM=3>1vp_D{QlQ4 zXVjIT5fss=bY{OGVY5D5d0r*$nct{EdHTc&W&EIey+mL@^$LyQJ^#5SHK~4oA3NSR zn@Zs7!tbK!4W8lIkUYq=q%|SW+}`$XdVA(e<%S*VTYUY!HGiw=~3NBW6HqI z*TrLQ+1AwISe8ZaRH9e4rW$^p2RafNk^p?f5sXBHG}b9z%H0n%(?$6mJf9%E0OApo zCm-HsfXb)ooUKnRfqt(jljl@PoD|#cKCa2sca69}oh{QUfY`&W(yF|yLYnd#rP~Q% z;b1hf2dh^;*n~%Oq>+9`&}^DFt69yiBskyzAHSvrhrwv{=cZ2%6Ux3(ml33uh?KN_ zw>qlfRt+aiC*3(%q{`+^R8Y#8O6|g1K=hG2MdkA~sALhmi^s0DO>CK%kE48I?XoQd z=&lMqDseRuu5A;`Rgpr_09ffih<*bfRNjY}RbF#CID?WU69gUs@bS1!IE zg^~~5b?f|bKLlwHU4`ETJ{Dq25WQrd5%@VX;xH}~o1uvnJGqA?=D?&6;_V~-{EXp~ zx4Kue*oq!^7&x~YxULDXUg9Fs07ASW-r#yLY}t%`XTOxhyhKrHvL?<{crN?@Z#<%^*`gu@wykv8{)W$hvW~0>3M`?9Mk2yVilKVwH_oENGhV|@yM8T6Q zL?@n1p5+5G=f`+;XS$CrbR`WgxXt3*z=vda(BCU2%@lnmIzM&DZ-R3( zy4WN6kW%Lpd_m;==UZAvc45q^_HSo!j3eqKK0GCXkiOfNr#DX(iT8VJ`b&hkkZ;GfU3 zn4}jDN=c0m%jDi}7^qu#7NgpW&FJ`gYR#O> zDC8|E9Xe{i>wA;@b1>18v?H#+)GoI7#ul?*@sX8Xx>EFvUrX2+rKSq{*_Al&_***C4QdTt8skY;srFmIpe#cY|2-d;hb6Cu` z%23o$ZvzqoL9X|-RpH@O3(s^3-`3np66jlm-x2$v_n`*BRCxT}Tft%o&N5qW&(T<$ znHy#qD(ZDs7av|MoKzqc<#MP0-9+u#rVUSBi!Ux)sU%llP1aj&JH_2wpbl&jlwxLJ z5qBY4g{ar{YXl$v`9L^qS%DH51m1{p`b{~=mM|dmXUUzRCCpNz<(9KcAwCf_Ixqe@ zD*JRS$)SrC&lSMIk;$bmf*t5-?Rkm6i0oXH82)u~fO4|<;m*WHbZ{4IA7jvP{RmjQ zjzvE=PQZH2V{Yu^`$br}%qhnFc$S@W2o*PN$r`RPWA-9Hj`neAIDFJIB+co;A;Jgi z2lwZV5|mFxcoI(`PA@LMA%1dI#JCu}>$b}_vRhgW4D1L*G{b3wE(!sFU=S@?xe0gfYsC})>9bv zBwil&)3<%U`18G4?>gw9Q@!CgFj!H0ZDQ*-r1?-?aGx6+5Qyy$TrJV-(SxI`mzx!D zSS8P6(?Eq?<_Ngc%=7cx@+bRlSMpq3Qlbu#fFNU3x&`D=}O`%0H%Vz3MCRF%!3;T#_9n%=xRdqoF&^iUOcD&RU) zmZeYptA=gBp5~NFq*|kKB&b_%=!}XGczWeSw@f%t4L?zvJ$=o8Wn*BJ8>rGFBI(AVjMfy=oF68ZnXNOpBTfUfYg~igK)9Z6mN@S_^Vg)66j}b>KoC$ zD?#2w4B~C;4QxOgm?{iExaajO8@U1j3H#b{eCwabI`93!I||MX!k*UkAV&H{#lDn* z8<>JzNEebx$7cwRNkk0Y$MX5S8pfR!Y?c4Hau`+hxf*IFwC%+Q!GSEBMmhdw`x%m8 zyy*}l{TmOh6;%-v}0D~#W z(*H0Ewt@5ZK)wpx9iUDk`>VemxF=GIiT7n8-mk=Zi+{e$Y%|wd#1x+JUQ6~UnZrJr z4z)dkz)zMgOT7^(uv2rasp}5r8T`vt6V^(mtPVv6}C0(=FW;*xdgkZ_m=_Q~{&;dCtv7V(zhO$lMc>sicl)X*p% zo5##@k&-d*w!z@RA`K*MvoK&F^mxXGyPQU?TBaYcLyzzIaQ+GJuiVK?6*81?c59jS0tVM%(6&guXh%jzwzwPXjpL|oYWl~J>9#rkhv5C)c6VTmEB5hKRU zH22?Txm_#5ac{u*JTu$~B)c~iyg_YM>dDJb(U6GSg*F*6jw-LoLZiVZk$}r!+1Gpl za`g81*n5}fXW#tk3u>)N7%mT+FFW5T7@oFdgJ*^pz#@8W+uIv9qcUmCTYfX8=fMJq zjURvNy#$GE)^!L`ctU{AOt^rx(|iMR&~YL%=4E?sgSg}*0!+{b zCl5WM5yUCg_W=?ksTs>hUF40`osV|v@BSlo6}|!HPUEuh-|t)Zh~n*7x$LLlcr+dK zH$3Sv8{5J(1*68a-I)h4-~>m9SW1+>^ZT8mW*oX{i;Phu%|}eP(!h0!tfNC{?tX+6 zo!<(I!fu%EGG=Wg`%)2F&<>hlR5!rV!t3_l?3T1cx+O!^f~lTW>)&wX`E0xJq1`&1 zBU~3~WaW(adyVa}}3xKl(2;-(n$$z5gTO?^#>rmKG?Dt*? z=_NfX2dxHO(J~W1+Fz{U?{-eSz`$mI^FA9CoLOO(nU%+SE{Q^m1X0~tP6!H zI43-GorzBsF|W#R?)g#TqXw^Zy*^+*c&BI;7c5(UK<>1^fk*2kz9!=YoOYS;hPh+a zD-bMOb@p!=RuHi!S1fxF&c0J@bKP8?ZNYT<(kI!#2*1XVlS!auf7@r@B<90BlL>e( zGazUnnFNlNNGt9MqPuEUYcD&3*P{Z>jY3CMrB~O#K|PP^N@uU7_?5r2aD5Cx{8RJj zjYtang~a9y$1N~XfC3W*bXx@Lk(K>5pXSZ`BbaXWkQ`@q8`oM3a=3+>#3lMFirJ>~ z&~Q&JJj$`_%jU*s!u~v@WeCWY#H&XTz@h~&;xW&~Y5tW3V6W^}D^5BX;CP(*6hi!Vi8DewcL3ztQghm( zZn}~_+d1y3Izqe)`b|qW_Nd6a*I3<}7Eu&3dP}8^>;)0vISDlIQ2QhC7A*zJL{D87 z9}LHpj}%$V+|`tfivp$1#H}oVSXSOqqBX^_-TBqJ$EW31rE;Rj&ozHVi-z`(6o7E5 z2`WEFvrgU@WL{Wyvz3M5r#`k8pM@e62qqynNPQy);s1zC#}?X%W*hCIAJ`L2+ijr< zEdSbJhuXw9tht`5ET+#>^$_m}#x~_#b?tf@--lrYA9WO^m+}i2+J>~sEwFSv&wyDB zHR7e-h6OjTJ!nDNU<4`c9s#+*S>6Gtej9$<#I6 z2z_HTvZ_$mJPYFE4@807#niGPibd1;V)>DgK`wU;g;c0_F#)2z4)Hk_krYYm`S|_O zjE*D{S)bjCUTcBK2}_z--vg^oF@CN(Usb zK4f-P2S#S8)3BfRvpfUFB}E_3x)n(3ej~+`3e;vZ;nQ*E!7!S^~wK6WtBa>rvdh5{GB4oL~I^O0m<;S104(Wel;+n72w6g1+^_ zURxGo;HJuEBld`MA!_ujBfUeO%{ebSvQ~dnD2qT*e##RpthcV{)6p9NZ-)ZV%R<)>rU-nC2>a#5hNZnSL-HQHVkrLc!an z{vTCm9Tn9Zz578LX;Hc*1nF+1JCzQV1_|jJLXeV>?rtgR9zc}t8XAArmm+tIDf%EHR z)^zL)sMSF);vvw#H@9 znD^>AvIPx@HK5IiIjwU5sr0%0lfYus+wLS08^f){_ydh_wx%;ZM5;vFav!31F}%uJ%WZ=2zUtw1J?yUT@<>t{CTwhQ#hcI=^wnsY$Ujns~W zLp}&ArY(fNQ>-5|i(2yGoVq61`nB?B7jE0D)>@lt>WKBVJ3Up0)D} z#=IBCS?}G!Bj$QA1e*dZfK|i^V92sg@j9q^0bJ3LrbCyQ)k!DXyykOoFsyG3iUmy& ze=Y)5r$yo`dW6o5_1NSc-^_X2SS8P{O?SDOJhULalo4kHZYI}-yjsz?Z=VFc z$F0tG^ZQ6JjBw5Xquo5wkL#E82Ap4R@WTARKt=P?Hct{N63osgXW@3CoYaf0wws=9 zY*UPQR^6_B_|!f7vxekKp}Hy~i0&mOG00Y!rOs~l;Ny1FsrGdl?{{;g#Oo=I?NdbV z<9-#H+4_cght4~oLlan-!EuLJyNBAI*$_0j+b@x_7f9V6X)f_&6%a8Z}`w3&GSimcS#KYm#gxf3pkY`EP%wYj1~?)dy}hgqoyZ*RtfdPc9!$z?#Gu<}k~_YxMvyf@6%& z`_KIC(B9d(k8aV2X#g7$WwD7W%`I5i1@>6Ih+C$LFrv$@Q|-=9CB@I>vkb%M?{w**(ma)s227|UuOx05It`U#^`pNj*wDL zq7?O2drfNvvYk%J=V3=be(PA%^}o;k5#rn5+-nZ@KU#NJ5EiDZg?97D_h#0O`CWmH zHEvyoBp{+S_>(67Q->+Spj1r==v1Pmx?`c*oM(u0+TgX#He4FwF zKm-tb;M1g6J0yYzcI_*k_wZFXpVLaVbnqbZk&TB1rcHLy-2VA&*6H3 zOwi|EfC!vu0YSFzQ@x-d?7-`|KqGZ;nR3{VCv>)dd!@i4bLHa?hj{4HZ$)rI$LTHr z(Z$6dGpkjo#ph39f=rA@9es3-+ldN66Qeruya-^(=GRGl`etz>)Xb_1KD9iA8k85; zsUgX9!V?)BU-Jl@^R;Eb7j^Fq&m_3%@U`IGK8=iQ9ArIK(*FIGLLi^8!|vgWZSMW0 zYE}JXdPt{3F8^G$c0qnzQ_&s72CxP^lWohm!56(+x1G-Xp#91g6@FGynQ7*!{y9np zUAkyE5Xc3i#lgIuf7BN+79@S1`ow0n)LFo^^Wt)S!QXp+uFL@*1jcAAf<0FQq*pa$ zN2w9;YWVk1a_7adm#k2!Edi(}BA-y6#uevIja(Maz$n2_3AoDBAi@#j!Msnu=Rcdd zP-3(t2-PKylcgEI;5MKFr4F6mYpFXQ|M#_wrU5ZL4?mhEjWH~a zdGxl^dUx{eD)c|M{Z)o$(DP-)3)g{WGp5tf5H!YdW{DED6<&8_pDe=GI*1kYcsia# ze*CUjyQ3`EYXfkvL|AilbfGP7_z~MkH()FAgpy9RJ-eYP1m8;4OykVCwu?jQ{ZTBR zYMlUHSJhiH$cE3(-;p2*YrU>l@Fs^fS$#d~DR>9%JQvbCLDX#m30bK4Y{n9NRwR08 z6oD-NH%-3HrCZ*6{QcK_~i-i>e}sq1=Iab5oJlT_oxvneC6hJnUQPPeCKt* z&vW%~9yVU}NB<2+sPi<3>5|WpgYiRTko}yf4#TaAN4kxtgh~4y-?bWB47Tq)QapTV zK6aM}wj8P&uB5-b<2j!%kL$l|dnuozxO(V&=-_ws^MJ<(*O8O99>yd&-Bsy&a|^x2 z*!p@}5O0+S=>EWo?tFGZ9A5W3)ZLN=#FDivjccz=+yv>sw;jPn{xEdO8^+7qHLzEUk z%IjO#gXaPs6T2S7!=8CRU^)~&o&`R79bih|-2mo*gLz;9ZrT&NAD=?uzF+_S$=O*i zU5@-D>7>pEPIEPgDzE_15-LNr2hO>qpWjor?XeoQZeKRq7C*POOp+rbFGMTsV*R6q z)9y(6IgYpYU8uCIhzDP+lPUcWr?_yz#6MXKdGc3gu(FC}ylTrLfM@wViAh0FnW^|K zYc6XX&#d|xj1$b7@BK9g5LJCT`E7s(`hsfb9j+)tGDwE=Pe3S+sBkZ_D&mJ+zSTav zey#P;t)r+Pf#TLc9XqB@`>YO3#WDHz(_ztIEkP5K!LU+4=0=y$ z9AM`JjJBgQ{XM?C!1eHNK=vAFasTg4@2tlCUGkwQ@!3IQ)%*qpK~4whLSaTH3Y?*% z^;w%IKw2WgkaiM5(2TE8mFJpCO|wj0Qj5xwm2d}4QL&O|X{3>`Tcq~? zG-fLupW6BMSCc7By#!xO{&Af`vjl~Xb=a#*qGUUxw+LufCqX`g&VP1E0T9%WSnjwh z{(VP+U_hs)S)#6kn>j3CR3mTB9bLc2vD0Rg3t=i0j-=f-1lqU|Wu|VNAhdIdN|9Yz z;h;{Jf6ujn*}2LQZJTJWHco@Z=1X$Pj9PRO3*!7UsuatoNjZI?VnZyI zmvZzRAx*t=VVtMLHbt*5ZpSf6Yyf^Y-T|SRi%6c(wGz^&^Uj7PM!oE>t&$YmU@x$P zBp2B@dv8`CXLUA|=*KvA?BW4Q-!tEOmMu zQ~Qr{xXDRp?uo&@A=KB^$H7ZQXQ;Y4B%lzv8aR31Ni?S8(#1UVkZVBJ%v=KIcF9_T zf9|Xxq$mlom|ttVeUX^!#iDISZr;3VzfwPL19!G{(RKIr&*cuwirmgeMfKSRr!vN# z&uQkSdyRDQr#CNojI*I!rLSEB!>x~xmzcgwNG2eYOZcm22~OS@Rm9!X%`Cyr9h#qC zbPFXFQOY!LokBYi;DZ7;*R!zY`cn5>%z3t|%7(R#r4bH3K)Mpyw$ilh*R27QOzrF# z?4NHvnnyq)-biLwn$CHF0ZJOj5g&BL|9oX4m1WC#y6UM7me2k~hdG=+iFD|jLSit` zFW41Y_W0%L`vH+YKXzPN zN=-=5GD_b)ARdKoV6;vV9&K2u7gnT=F$qDjUfjOcu0F=@s!jnmge{wpLDCC^- zgb4j<6jzc|7_-=@Xxfhy*U|HOAUNWvb@<-gsID!53M@IGKYJ#eN~vy?F>Sq{)}4Jd zQOybRcm17zhjjf@k6cGz@A3_O-0Ze_y;Z2nJ2m!1I;k+}w9z@IaGv(_1yrX$(Thw6yrDkeImVuNJ1OMNCvNG#*28C7zL6hPYKw?8)|}BQ2Ph|ueAsO8K-wD z-Em9fmo)S@p1Ud_;Ot0!Ue+dg%WLrVsr#t}iO%X+{q_RspNBg0=CiM67C*O7qy2Dc zWe&>FK*7NkGXaz1hq9W@<|AFNEy#9zzN7R;*DJ)bp_udFAjtob-)LKINDMmaw$%uN zo`h%v-a+23^mcFe?c>x|UYGgf2#JpDaftOp(buDto6_-r@XOboaw2#C{C=6$0A_0c zY4V!Y%d0RmJ{C}5sw}$|H$RU9k0UWp{&JiBBq?r39mDIdr}&!P5XcMkpu7MGLe{SC z3`L`dY$%}bLWI-=Sk!t6dZ|P+u;MENlLcrijs9VdK_C6aIsdiths)k1r}PU%VYo0* zXOzzNIFsq9-ZE|qjYdpvJr%_^H{S9+?;BJ}i7%{Czx6S?oth7&h;0)u>+1v?z$rAt z8v1WOoH4`^{WJ|^1wE;0^Yrtn#*7o^a-%6w^t$NvS)}7?8z&^#@O+f5Ve%PL&COiP zKA6x!1ArTE2fM!l41hoZbN{aG)Bjq)zoB;t5T9v~7N_$xjK|(}hsgI|1Mgj58#mwv z@k8J^WnW6HuMwJ};Q!`6ZX6CXX$Bh4Q$od#(#|)GRbu&oB;*O5i~D5lG=1w$Y;Y^d zUw#K?LY$y(a#Fg`?>s-xj;V?NU5#N#Ypo8@gUI@3s;9kTP6Eude#FO2Bq4&`tN#{8 z?(C9&CMKT3INzc6JH5q~Iucyr<1J+0{6s-$X+%5X4C1C=F_l5>BXMqN>h=aF=@nD_lh%0+TecbdHd~H zi20N+XY#C#Ih^{x=#m_)fKIT%^cy=XXE})`N@QPIcV&%KjWzFhw{(lEk8R zGNwlyM*5U4o!8S!lR8RmWPt6IvORNrpV0jja=#7IkmC3ls@`sPaDxO`Xt5)M3ujQC zz}n-XGbB3a;gcOM<8ki87JLx{^u_G%PU?$0$VT6eJ90 zl}P{YwO#zcf$wP+%qUJ09EVUVw+R*Nvsnz72OhRB~a(KO(wZ5F-x2?YIRuT;PsGj`Dd8c8j(tC z{6Y&z&kz2K7d!yk0t%(Qr?k{080(or4E@5K>E>Lj3(**i8;5Ir@slEvHK ze76(26b_(j$?-qQO|&2HFx6+#q$^iXWIhtSRqh(XApVcsq40@v-EUOsH?mt&a@9rR zQ&fVEshKJYlO4HJ;)pg!qIVIA{8Ebp9#t@||Z=6{PZ|+ETJG z*f}a&JhKby`!9u1k_`8-HlIeY%ADcQ;Zsh zi-*DFGN9QIUMX6@c^LELqBS$C>CAG z{c_O(*4oJ|f=<+I?==GnRt^)N+z;0sGUfVd+LQ)Z zD5T$naoZkP{Siv>Pp*5L1$rn@%$j9rqYj95#vWaM{cR%mjicvxO=Q;R1bsnp`%O-C zHmR#pr18aseP1Kikz5TMpqn z{?HaT<{}u-h*Fwa%0MAJ{&F#PbPKe!m~YbiG!d`yv_Q83x+TkQM!6bu#rkbt9>F@B z107?)8QiVD7Y6a)&oo?Q{n<6xGq|>t7Oh_w>rPz*Lx5fpu>;$s4dko_D0W#+WkZae zMG!$RRxVBeJ`3|cvwdD>oFA=iA(hc-%I9Eu<~Aw~Pg9A@KZ&I;Z<1!s06D9$o!fQH z^up_m3op}VBo4x!1KCLzK&3HRT)W@cvA7C~3p`O#?8gxzYi>4e=R(6B?YLJtOm3#(IUQ8roe-$Ez_@IwRPsQXJ)4%hu zv&8xB+FAB%i2P(OkQKSO9Rl&2)qT*NSk2D>VZ91%jN7i#kMj4=a~JM zGDf%)+2(P!T7xnbaUSYAB~~HPuXKUL1N}kh3|uU=>b1Ovs+&fr`03dDPL5{kaz~_@aaklDVU}?qk3zSL8Q)=& zQMM*1bAF+p%YyhMsQKT<3;#b{47TmO;rKlsT2^Pg;};Fr$~FJwY>#Jq46~gzhZl!w zV$ZNaxLL&@GWVV&IY6j37QQNI67stJu>o(L&?nvhtWxKt-Q@>4&HA%R$PDIx70LqK zfAPl)(3jnLPxBE0{GSFP5v+rvqrwaKmp*)9=9Rj4XRAUN>HJSYJ*$b0vzyJjeVIyh z^)EO%gPnNZVzj*9;ep!47m%})g5HRTxiZ9~xdd_V_3aUfMtmSOBT@EyHI(gtBmMb~ zDShBfErY8e{O}AGE_nXF!CCSBN9TmCpHY(JW(%*x*Nr3YvDc!6SHW|3>Xdl*`ZiZ9MuTTS?CGF58ajVQWy$%%;W zNjuFs2W+v=Z)Qw)*x~Xe=hY;J;K!v8)5EtM4zwFn=9-|;2C1Y=QqED|8izt;qo>NM zyK%ww4O-R3!%pCBFVd^}=O;=aV!X@F7=-0}rWkl(2!yHo$wZtWR$&~p)$`&3RH}e? ze!o<3tMge+;9ELN5F)26)P z?wO~uR1^^B%#m@fi*-#+>WJhk^#SJHKW?&O8XO_xTIbW=+=kvGBQ~!i$a9a;wtr*P zH*)v>?jNZvz28vm<1I|E{1^J7**{UV(1@L=z=zhg@wAfz8y5 z+z5&Oj}`!gw$6r2?T>j!f4|}PBpe+Q5#bbgE(u^`J-2N!veudQBd{Vn5e-lOH=l0dm+YOO*Lfq)cq+ng#zVzc0L&tnf z1}>|Yod!nNItxq$DGaL1F8z1503w~py(szBj*wU#(``zFGu(CGIh1!v>aKFL{Dma1 zGf3pG0o{RV$SUy$?I{xL(&|k>_y??bd}RJo3WWBa|F@9TJud)B@K4?)Zy#tnct?6x zP8=8O{mv$P=icl<@;z%XsZyWKewCYQo6crb;^mnDm$q$z;PNF+2V0%MDxv;QedHd zGLb^{$_fDCf_Qdv?T&a}=xkzaE(nDsykYcT@AzhmfUuq(b{3z_YuR8+`WEd>iM+U5 z1C(o#0Vf(ZrW>!>+5chtX($URiI{gSkb+*iSbe>&2lSWNzPoYm3f4oYn-@p2`2>XF zgAO`_hBQYY1#Ta;q3djC{Ca%ybu}gT6>KOI_31URgh1F+tVA)o8n7O4oepv)dS+uD z`vOv#+9q=N1Y8jDDWeW>U$Q5A&KdRk>Cgh4&^5ps-#4U%Z~8TxEv?Y zw#HMr=S0()ig-Fix~1w6AFKi*JfvT_h-nza3lHG1*xbB&cB-qhmN zLoKV>!I%pdJDmz^@27iLQMkj)!_RbYy{ack)7E6C0Dakfpt9eO4tV`{NqZVoFC>VA zEg1!Bty-6AA2YuCc&*A~((NY|m~Xv~N%2D&4U6Iix^~}edrQi0k$vA|9x$;jO?VLv z3g-Q_lH_7O^G12`WeQ0|)2~xtkHWJL1`AX-(Wn0tSHAw5*pgDPh5Y<2*DoDB9PCQr zJbdj4ctWv_ux_90KuelezxmV^YDS0GRBDUXmcLXxMKX2Rth5W1^Pwk;^ug?hmoFI| z*A!z+#~@>cNxWO!A6@#B{3a$P<=HT!0HP#IiYlt~L`go;`UKKV6!RhNAVFq%=V5ug zt;#-3Gsno%fY9hG9cvWA^dt+8JP#cJF)6&Tdqs^MXewKL7{~6cJ`(;p-qT&RX?FqG zPOECI@e*}{Iu66N(v-u;x1tM+z85-1Kc!i2DYkq`S5?aiuDqu*aGfwAar6w#!_-6& z6HXR?^}FPe>;HN1y_zWmf5-tXqGmf(Q#(#g>25QfQb2_wmm&9q+Fqf&Z!7~v%@7r6 zDd%Cz_6gayQb%z}Dk^aqGw9cOd?&jft@x*#?ZzcV2r7?t&-?zFLOaJb%prJFk8}4s z*d5!xw64|Wa6&I;@0u1o@a3RpD<42Dey6v5(k2oHXzhcgSU5Ahg7Xj zM~5g+cTi*od^CXZB?J2y2xI=Ivr$&B)lU>05PBiM-J#dDj;|H7fiJ zQ9a9jScxmJfp`mtVP7H5yh~`(6BWqaG#|59E;iJG8-4dU8k@zDYJu>D1bOkzOZ0*T z%k@8cNFpWsmeHgNJCrc}!J-Uyz%ss|v@JhYGHVkcYq#md9siXOl@b>|I-kz(=oZl< zm2bMD-kJYLg9o31A+#J?WH^L7sMNj)!Xnu|5_4CYP?=vqV#+*Bw9QoRfts7{*87;? zit20W{O)}I3b)wM{HW;|w~wB$0YoDH zSa(7c9zZ7d6PkoCbaX0jDoYyP++mX!(#fTraXg^OYS>M0m@^PnAb(K4B3}NYW8>9GsbV+mEeahJ8tELs#4dKS~an%nyT2;fXkSx5hJ-Gb+G>?>c% zBjgVp?$0X8`@Va{UE}k-0{*=*JCdx+Sx_(p5@9{ai=y5?d6NU|uV@}CByx{woEI-p7a zjBVBCZ=>;WXVxr&o0z{u8c@dU)LR+GzD<%Zt;G(YjD@RF+LiN@PE-^pPp)lth9EzW z0baU=TB7`L1W^+~hwS{b=!eU#NdSwka)}8!hq}l*HK}zHr zl_pOVPnWakR{xK$HCvB%IKsg(!zqcrg_SnZliTT2g8uq$hL8e- z9u2A|SAEJlY}P1r{vOvkh5SwZQ4V_+e>luTWrnNx;y$VyRh+VxF!=~u>~d>|6@4xX zbA@gx5+TUaS~gVYUD}=I^bv$nF14OH4Gxj1Kw?SqeZ)9b5>{U@`ri~29cFC==%*>a zHTaZw35>V2;3(FYY_Et_jPS>e>>3;xAVDS#@5s9?EJgB4<4Mgku9$mdO^mm6Ic}{E zk|G2RV_0b!LzUrI%5k$y_zh5W7$gKwe>DiLZeJW%rc96 zRZtX5?9X0;>FO#$n!hj$o4q-m2&jNMdh?SgTW87`mn`1RiY-P+SZ?Mw!N~CHUY;Q4 zYE1Vr<2r`Y@KYuN&=a!-zvq1ba4dgPI8T{Z#*NXKa*+unm!Vzw%0`FOAWG5t%vgI5 zpdYD>q%P6=w;XzcC_Z%9ZIkRxO88;qN@N5O-S;MIQYELYsk3FrZ;4bSF*p+b{Waq} z1=P;b7kd=}&ut1PD1Zi&!av%+)-Y!s(f3Nrwn$oU$+nQkrbwxPRg@@~=bCY)T|)d1 zJ7|$a*7a=tc;p+fz?MKVf(V&a6%GcW1^rwL$%g`{{4AV+ytOm^N{x;sg*j~kpn>r}nznuJ z%jkP{uMSm4zFXhHAcy){3KRmt(XP8A%>wE*^XI)!kYo9|Ccs~foIX82ICltakOyQ? zK7?+`e>yg=m8$;~C6h!njEB4BTso8^52%3WzvRf6cb!@t$5d7V`5%u)X|%DY`Yf)u z9c%BBJcJJHwqyg{k`sbBr-oD%7J)|U6$8m@BZN0wwkIvyJGMoS>*~nezh9JrEhb6I z7TP!*nbqP^jlJ!E7=`Ilx-gA7st$_M6M!>uahv8MG>z0B z85E5Y-BeY1_mttNhN!>JFvuzUvpTyMWq_0g#`P1O#K#l zrwyW>w&_;%G;irs%2Z-w*35Z(s+KKu6Jj^+VGDJhSVvP&&WZo)K6=ze5@{y7hV+&K zP%g{e@x&%Q5E=-qkC`P{3Zg_wXz~fz$o4`%;T{*M`U}?H`IAMv$nQ2Pw%Wj0oYmN7 zh1^`#82vU*a{9h*NP1&f8qi!_63MY(q398%FPIvO(ylg6G;RTFe^?e>98FDvNco?) z#^ERXeUb!4EQ+5jM59!@ue}kL$9AkR14RJ)ZT{RSnv)l5wF#JS)XHLn%Qf~4`!&LUdy_x$WmCzw zntt}fpjUV`n}ro|7S^>9^s6eIz$lZsnw>gaYpZ(6sTkoc;@T-mbYt>EA1B;zL0~UR zUN?@vd7V89jX{+PaBDRHX6$Djo<8Fe2S|~y9EG}H5%Q2?MzyCqh00plJ(F^SHKdKK z0Nu)TSF7PPGpJ@?65`q$P7{#c_ztw^-aj@iw&*P8o&ii#0a6 zZaxe(Z!C=S005GbRKT}rHF5zkccEa5uNr#mKFFP~7Eie45&yQvxw0I@JFFCyt(gk@ zI+q&10gfSct0tNBSug2p-X9&hs{&t;XyKGzq(*LuwiYS^G{e4j@})@Js}%&C_cX=Q zSa^s(W`bYXwSy5cTjg)V`ZPN^^`sot0P4?&d;W9f|ElD)`l}u^uJwKZ$eZ;1)#!OP zfR>UG71}zSuIAb_ikfM%UpkBQWdp?3c}-SH2L+73v~v$W#d_lJd%GC=Sq**<1ay$k zIf!+V)XYF|L7w2;OoI$|00qjAxCqlA+yiL8%L5Kd2-x1>D9f*(^jjG?SXH^1^Ny6ouVg4 zys2E?2N=uKY62dSWMrZyKLiA8rUli;6dNR4l1c)x#mGa|4eatE$V3Ib;W9n%r&lXjM$)2dPbjFHOW-G>W70*fYo!#_XCKN z!l|7E2EVD8IwAoaN8B988-NGSh#-?W)&V>6VSh;($@r%uOm45m-SD_@p@988*F3Aaw^4oT52VX{x zn#!n@zIuU&H?>>`4VrM6Yn>pB`0u;;(w?pd=tuj0jl5CM^uq-x=*t^5XXgFp{{ha{ zhZ7VBDxL8ei1I32Q2sf!PKW0t-nQ%X(@7HW#P+^H@A$g&jRq{^V^jipv69JN2m?#t zL*8v~@YdXE1(e~=m;+pO`naBp=5f^yMWoF51AGfuys9)4N1rOeBAn>5W=d~E;7M%= zy~oH&w`Kg@qoLOcgHK&s6{67Pk&pLrj<+fzBoBXmW5AYPzkJs=jvBNJ>_9`q%c@nn zD3M5vo{bl4j&=a42Y$xi+CE!(CepLDFyuIno{E?~kn95J)N*1arnu-#J0?!l+h!Ct zm#bv^TlYfROSl~Vd?-{xj`4cF3e58MCq8>?0GAw_YdTEu24go8i(e3&4^2>Od;$9X zMc{z=v^TwG#*0)~0#KL!_SadMa5HNE6u7# z{&tq+-{-=S_zeJ*-D;`Gf3|f(Mg(54U@ln6XB?&A13$3g&<~T*%J89`QqrrC$eF zlcYW$No`k2K6M>=Rl1e^OuS3y)~Q{#L_>X^$U{n9{Mn59?ad>#N5HXnBQ9aa$e+=A z$^K-%H0Mj7z+WKT1}0Re5xuH3YX9p`M!XE;cigty;O!8CHD@Z+-;4VC+t_*U=&Wl# z{doFJPC!5Cc=WB=z8Z!dt*bfaKcfBzhIg{8-f>MZ6Ly=@UFErHlC1@31-0ETC!4j>WmNC3w&Nj_nHaU0j0u{Bz;Emj(RCdmrQec&y%hX<)Yt zn)htKvszE;ml4}iIeI%2_mV^3;X=86RxL)^LvIY9!>^`++5wiAGE}VLl&P^;RWtoC zud7K=tZOepGS!+X2v^?Oqs|{&f1iCI659^*Q@rDc`4`r1yR@7--tcNt9_`d<1rJh?n>R>5 zB`c%FScd$2ef|!8ZN(3K5cH#g%Rlk41>>tu4yyV4L@~F!S)nzWeP_<*zcbm(%8L#c zMLI*GG(dedrLc-~%`tLd6#1Wsd$?@oR=bcnXsZyl`usWd1aO!x#j zx;#{UplY)z$G}qmXFc7#q(VmbJGn1$Lu~2G+`LPET(%uCcb&^n86^{8MVTDl61b_s=nSkayr^@=5_1g#b^6@%T-aXO^J1 zqe%ZZ0g(bR_8Wp&akk$@FkrrMFB@$u)AoLKz9#pQ#zWck2AA-Ldc7{c>H95Y=JA<& z^?nZJ#dXi$LRmOz@m~s(f@)1sm|x(ldrs7_%`NR(SJ>mPkN|gsRS{(b+l61_-{sFr zjRG4}?>bWT!k%v5t1iL6+y5K2C#Umw1aCcV=MeO#2xwqJHagK!xwT$lET?hg*5)ST{MNAmGn@VXS{ z@V4kky5SnyR3!#=A9wXIT5vT9gm!M%=iZu_6>`r@&(xLKn7Z3#;*FV~A};eg%6f;l zp-wAXBLS|`|G&#u$PImo4`#8p^aw$-L6%V0)FaXS#fJZB`mLCZ9?R z0{HjB6-^ZFvto@urFUc*i-BN6X!hWj;{n1XYy8Yb;u?ti~1ru4!^mAeRd-4e6+ z8kg;s0#4f8P8YXx0PiS$KlYDovwfc@;_`a2ojUFkT+xJOwB_)XW)}sO8-#i>9Au6C z?q|yv*x}r{nHoPV96_+lYb^C#UeqvB!s`Xd!tRoz? z>lvj>^9sILXhSVDrEQk1z2dV#-@rK~JY4EFcmA_ROyO{M!rXw_0Y-!yXQz10>T?se zdZnL`hAGwW!65`<;_%z`R>*zBMnjLou!NcaCYR<2d&p|OghCuavTS`M<}lkvs9rn4 zb__U>62)|)_yxI=Ly*?O%s8pPl&v{@1fRfN^*&ZBIxDm9UAB`d7@XAyd`gm?lM4CI z)0Pogr@FA&nSZC{aDN{yW9B_kuP>%srio$9rurPHp^L;2Y+v@;I+Fwp|8X%2jQ4br zC_>i5q+IWw_V;m7C6OW?2hPPtm*Aa-9F#H_xP%U7rtvJHdckQO=O-CLZ{E70W0_lM z#l*u30R@&q0!?=jTy;+xw`655+u?F`Yqz1!&d$%F24daZiNF)648e0004)_v7Gvb9 zk@ontZ-=#G;^T?|2H}Ah(jY6l-kHMOh9outqOGcr-5YOQo4)&k|YJ zG%r=U!`gf}&g)bB8?2`ELU5IbdF@-}y|@+X?_c7PUE>mlQw4;!uGc`*`8Ye~ZMoH~ z1wG^(_B=Y-S2Px6hQool9TU*Z69fG9(B5_Hy}mHiC!^c1H}f$o*Cz`?A!Ch2LHDyO z2r;Y zX4$HE)*z=!Ho*Mf0WXLoT85Z4ezS~b#T*W&2CJEgsoD*rk*gVldwQDEE}sWciI>jY zb2JaqHtQUxEru4C9GIC8T@@P>BnwK3 z3`8Nv(ICqDcTcS`h2q@w)p;bCJx0FW0wKK0emnd}H7Gw*GtgHphwQ$@L+~4PtlSPr zL+}W1J|8|Unu;4$k@{KePKR+e2ORGnztly$=W4?+hw_hWKVJ0oLAl0-+y7m-O^I|3 zI~?0t<0V74r#&8F;Pqyyhq0WErPWD2pH9Q=$SdHu@H_LqRz&+8 z;#0Q!Wos?;cX8^r7%t)LEzw`W5+3QdHJnr8>{+^x7aI=E2Z4c$8YX1rfeK|7`(zmJ z^Ww=T;O3+D6@%mrPu?%4zo9hb8_LP{3Y%9KW9Pd_$@VSeEPG03>xaQDE$8qM;|!zT zKahYm@TtI>-{tn|EjdxD7$@?f=LSnP!^uQhMx%Or_!BO@mbVV_{g(M`ZOtSTrj*XW zuQpO=d8OxFSESr6$Fhj6LbV7Vvg2^0W-AF%L%9s@A@qzNr<;B7oW?uvqO?|W5UK34 zdou+nzfyE9vNLAavV+EAx!B0=xgOhIz1^iZa#PB23|D!+#Gf+Inf5DrbNCbqf64?TA8bAg1rneLT9<^ zymW54efTn*sYg2Y&B-ATZ?WMy>Q@RnexA*3V}JVdYT^64r@Ec&v5%wa`3_zyZZ&VA z%yy@pi~+?`O=K25%Z)hbqB>h}CCym7C7iy8|^ zPwR!VUOXvW%GIgnM+WT=ry%dM6};_9a<838Uh9BBT*Abtz`?68M%Ay)72#y>5`pQjaPF6YL zW#kuD?k)l%hr79y_rg)_2$XPtDR>)jjvIai8IOIdc~tyF4&EZ=auS6sq~ergu7MX9 zLHS<6#?@|*%bX|SWdW6Ks=I8|qb}?0sS-dsef8L^*K4%c7GsA?81wG2@wa{9=5tiE z@%M#4HAFs8BU9@C`*in%Fd}R@{qKM8-*U~8_ztcuh2P}P#`)Vk-qGCv=?jZ{4s+AV ztVM1A<>I4pzMl#78de8TCE2a+>J~AuDysUv<3F4b(RaS}!ueglbKL}_3$c>dNfSV# zw4*8nn?JG1dalwhR1RE~bf2ypahg}HAOR3ZNJI9d{r07aqX0^_7{+Xe zKuX_$sQARF{}JVN&xzi*HPZn3N{oy5LEl@~QlL&3{y$}L+(bv`W8v#SvR;0{4Vi4IJg_#h7ha<0vo>e#S7VFl0@R}4q9MU6B z((b%5TyVO@C*+`$S$38f+s^Z8sClFZazNs|$*ylquHo+)?%24~P8nXbUa7_RbQ48c z9G2=K;tq}5Ho;L`FGE3TB{#3V#pS8tSNzy>`t;dRu3y`Y0&XX0L-qWzN}Lf6qab>> z7-PM3hEG0IPBpEKZmikQ#za|?H0UqZ+r5k_=o*ZooCQ(!Yh)x3Rtji0Aa#3WKxJm{ z-u}OjmNpzERzD7Pt-EaXq!OgvDf-t(+7Eg4|G$r|*nh#V3dCV9^;6H9^{e)11FYo0 z*w7F>1oJU=s#jM=c%Ff;YP+yjHW2zIrgMI~Imi?h11qM!bt~f5e@;F%Y^ZEue4{$@ zb_{I&Rx$T(lO;wkCAO^^2!GBA#q7>)OuR>Beh=#dg)&<(-uFtZ*}mM;26+6|#kF#X z*6ZHnz)^Mt5e=;IW0-pB@=|3?yxrlwakxKMQKDW+B)eZLE+Oyx-zzM8Vlh>i2i^x< z0p)q;%L|nkG#&SUAAIZr9-bOgsL!PVsh^(^YqJ5WT!u37iXWzw7p1^l3w&%t<9@V% zYr!d;`gG`katW`bKfv7>#c`rUkBqeslwWr}QfG&YMq!coS@;Sv_n^)4u)pD@&9iuo zn?vc?P&*m*9CEH9y5p5E&Ptn%Kcp`vX@564Tl9TgnVk(lbz_DOEmd!fnmPLWqQ_lO zh|xp)@U}G_SIbUx|HwMk?Um%;vTTWXYhL=4BAW^5$ip{b^8Mo8>cCk2ahucU^Mh_m z%#XI~{C#$51N1)5-CUNj?+d0p(j=`oq0V|Q1aR0oapYc6NA!>?8GBWu!>Jo{o2J?J zeGx4t)x0=pln#r~1PfT}*4-U~6S2L*M@lAPTXy}R89O4DBS;2*3?Ue7*RY!4EwMYz z@<0t0n+_X#K`IAhcU#nuAAP7>*by9`c0F+HvYjbI6d%yAr=k?h;8y`%gywVHaTjFM zq?pa&=ixrTXKwz}2VYax?1l?MHL;ep6b!7~@&OJDp4^SqM>0B!3L-f2TIScg$6Rwf zv?+uYiqaK|9+x$LnxVXqmgolI{(q0O51C6yYyE`&^TWWE1K>s8WG>agz}zR3l66AJ5{6{oDZ3f_ZY+^~8B7_B;df7+ z&T+m^=ef@Rf6mi2SJ#cX=Kd`2<@I{K-=BL{Yi)yeKWgjG2Wgk2DZkGfjU&EfU-?=m zd5cyw%~T(vo<}URs+v-vZr}PAyv;r_ZihiW1II5Kf-`s6E5r4laJPr4FTU}?3diCm zc(#hBJJuM*#qW4~$QX{#e{t!0CN7nKs>J3MOl^_bBi!+WRfdN3C&l~8+YwkEiu!;K z06fOH^~v)2&(NM~e}?uq+fB0gG*&ROevsoJr7=)-Fo_(hs})sa;fdsjF3t#A2W4-O zQ+YkC-5f}&4i8kyKcb;TX0rakak;Z(s%B=Z&sDF<0PW`?8;6r|dwaPXg=xo+7`U&* z8>QF?je5>RVm1?0gai{4SdqTtotz1xz4x?}9?P z1kXoyQ9JH%n^)mg#X?;RXB&xn?wxcf<4+2`F>4$=vSx%@3#y*ipHuC)I@WAbIlLut1j&1Pgo&FC~`2cQ@==83oEWeT}gW-6W~=x8jgM_Ky30 zz3w;(bDUkeLqT`#1cT12cNg!;`D&-sdOL8YpqWL%Xr{`^NPj=O9PgFF$$jV$4TJdV ziAFAS(qoGc4XbiDH{WhrQ9zW^0ajBhEs-E?W)r3aJn!&?GYVQZUNbZVBbMQIItm@! zpCI!SD_9}l_rM+fcHg7C&UONtpWo!yxkQ&BCX!OzI}E)m@=Q>ArE=a7>XufBkY`s7 zuU6~FuWsA{h}yPX^c1Pc@mjK&I+-h9ilDc}RBgM4ww7RyT^-Lhsj-sB4bPYP;|+GA z!Cd3q4%JOom&1%lw4|IC*BMt8=&~t6KK3N|Qwo}OSCa8#)!0W9ta{@&4%BAy>q>Mc z?^lUzclP)d67MA598|fTQc$tlIqc&DBrVT^s+>Oi!l9;^RY1jJD_9kF%IR6U>0lTM z;K~YY)x?JNflncK7JlPnt2fT1-b~NacsRS&Hm!Y8pGQegE~#Kf*ln4btIW0gOBtn< z29kT2c zRPAku7`3@4{f>H;MV_m#6CpRu8i<_cZpC>X6f%2^(%-^s4w0N63hTuJwpQ#muQwW} zk*JzmY(0WOC7A9{W=Yxivy@Egn0QYZ!GW5n7u=1SXXFF#akbU#9HY=m8 zWOS@w$nFx-Bd;T%MTW7_%g?9dL?#@7i>`Taz$84L`&DP*i5bKl$5u;E@KX;!BZ$)q z8DvZPB@rV5pruL5|mhLaL2EvY`7ETyk~*_4(c zFuRu?DF$1^kPoN^@pg{W{VHDByi%U3{k7Vk+)2h`wBLckFa@Km<^q`~8VRNoam}aPAk_cT%;6793$|* zxZXy?fK^rjTCbbVY}Cin?fJ@M;A>WUrJ>t{MNAi4ya&^?9 z$EjIP?S6jnt^l7Bt$J#fHNS7DtZ}3;D>-@Bk4uv^=?-|>YL0D;rF2Xn+$PrufCiJ~ zRF+1Y^LNerh{DDa@+=4DSZ(y5oPx`U4*J~I&k~%>R+f_5=~o}WfX_AZ?no+SN-MVE zCTZl)dQEe!uPw{7<6Ml6H%j>I$EeeD?30wO(VdcI*|<^M6?-fSt)Kc~$zP$@&Bw^o zyM6#+uWTB?VW6pFDw)ptXO!?0G`uw>BDwiNHBr1FLhWc-;`_xdN&H#dU2pM?w;QDX zoNz{uiOWtF{*!qnw6JJ%8t4y~N-$B6Tn;A;qP>v~C&!Y4=X_w%S{>yz=^- zSnXUydiGvoxHu;s5Q6*^4$zDneT~aze%&^w8$^q6wS|00CGUFdDHZBt^ZHuTiTYyl zbMMqi09PL0;NNh^)~7~c--{+coEu36+YTDwYO3JWB#lvZ;yoOm5NpsBfgon@wWK&{ zXYYAPf?LZ?ZKh=}U=>AV3xhTVo&f~(g1v~`Ai$dC9t8tpe@Od$&ao{pZVrJhuklJXh=88K|dn+yp}PM=7v=63H$o^kNCcbL^V@b(6D9%z!v{72h- z2+a4|eaoB{hxBH4!-C_Qn4l94`jkMwS?#+!@}{i)O5#vRrH1ix|i(8I57az7Vcjb?C^tZ^UnW-cg| zthp^R2Vu_k8?e??sI*}jZB8o%yIyiD=Jd5bSKYaGP~qFsipxzOOSUW{2zoad`9j^5 zk{%9iv|<5-C{yyIU4O&dA0SQ)tW0^L4BJQM)JE^(eBRhUmI5)_nx=rX8)SrJ>>K~ zFMM_|Wgxj}I^d7;4n`XjA5si{2RCov^z}qh5fvOH!OaQ;b!WoZR3*r@9eqHT7}gO{ zU{~DJ{O$;}n4yS~t$1j3Rn2ds<6iW~lLl)z&m&o@9;2LK&%Jn~$5+IAC5n5UUiZk% zJS4xSqw885)Rj)Rg#=XrqG0@O#|0{Ac<;-$Mn+us^<3@#7uF3mDM!k?Di`iJPQ?x& zEd#o@k;kOd>i+3M6Y8@xtu7DP%oDh^=5M8vvn3fq0+t{9^Ue9#8mY}^-(O}=d z)L*H_L&tJ1&w;+1qFuw{tb_}gjI<*k&w+{5Hgf73u$18Ta<{`*=v%{`v^R1wUDXRO zTV34j^&_Gf-KGnip}mlIiglF{7tXfBnuUDj=;=S8K7gcfL5msC^$U}=T{koNs%VrPz+ zOwQ1Im(;(#irurO${&h5UsL$9*Pt#XLJas4$_;@vH=D6sIQ$@G(8^?a>6y{~(?xzS zp9KctlaiQ;P+~d-llt%xXCz1$S8eB;yEuuu%$w}L+h>|CbCByU4k0kp|{;g|Uw~a<5ht%(|)Z*6P-SB8IDu7Jx4HBm=mk7M_u9d_c*`=0V z6B9-jmM+}Sy_pr`7U)nopj~mfTtK!?-;fl8_U`tO9ksEb#G;gZY5_(+0WwM)aR}Pc zXsPUoVR+Wy5`+VfXY;QZno6a(s_sR;hL_<@7W8;|;h8b{97j{Vb2hz0`Nc=)}# zQn)0wmekPH#F8gNMRhH(DJ%D;T(qzuE$rORMxha6`8|SMqZw;^>7oYYA077 z>=cwuoF+f=0jjPiwz?aRGE*T}A6)vF2ptqoc7Z-VUxU57vo$JJZS%gSC05@t`h@6U z{5-vXWup~oNCCP+$13eoIPEQdAA|X-ni-SI$Lv^9fM;DS2v5AL?7J-`zGRh7KPOmJ z&>W89zicE`(?#?d2G_aaE49BFYXtGd|J=?u4BEpH8C)=u0l>yptAkK(lIP6XQ}2smV0ep`rEYm=xN zZJ&BjN9o}2Jz``ca%~VeQ;#~1U-2!`tJu8M_cFNX0Ki`x_wCWn3ZYdReTPNgE1<3+ zB??8XYh4^?cM^+0eC8H485?BwS`|79=fBA9xXyr&jNwO4+_rx?g&mF5f6`${TUG;T z4l>s57gixh#$0_ej|&@tFDg(@UP@i7AiJ=MAC8$=@eS68OV8sbX_URARfLg?S8KkF zH4ViU&38~mxu>CwC5Pw7DM|*SwwQ((QE?Jw24^n0@Dr9t_mwN*#lEbn=q z9m|echp`-&p&Ccl6yIR647yfVG@-H?W`Mu$iU}ofDb#N{vkte1N!We-XBqT|B$~}m z;*jD`vzrry?;`Y}sQcTLeC=(#&ES7*t{~o*)RXhYyKZNz*YYz4O{hM@qUB`oTN65G z?_5q0w-a?5yKXAK^45v}>>2Cc>yzb%_a(n31q}&`z4uNAir?#%VztwTXTRw-d`WcW z$(MY_FU=t_s~NbjfmIc)oxDNT()qT)yFZ9n#&llM{F`sxhNa|8lEL+RIt*jI@hRwC znFz%eXy3NiU^Rie=Iv>4XYYHyi?$w;KMGfck@0T}ky0K!QX>_U(vGs3fciIE)0<>FyH@-(k(52WR3mUB#;dS& zd6=`HLAUjceS^65&U=Abm#&`Pj;hrf#|1sN_ec9E*K$*@V&Sk@eBP{E@O%}n$yKS1 zA3h?rBB3Vdy_ud=^15p<8#|)nlEOGreRu95AtzK)L5k}?+ z-N+wtyqf>caq0Xou$)aaF$GoV0IV5zEO#^Nm2`OQAW=2rQ5B`6HQoARne<^>z})Z)J0Df>@=!`ML8(Pf@3xH|U< zZqqc<`hv_%h7*Kjtg;KJM+Sz1oi8C->^dCEz!7`1M#7f|!v}7>K4;2zM><*HIczE) z-rOoMc=!2(xi`#Q0ho6;;Y$3{3YG(pc?0?ebsu^+7S@F!)c8%2rOD&)Bal_!+eznC ztZ5;twwSk1IO}{DD5W|hkvjd_POMv_<*NWl#bnacQc}e+O;Qg!Nb`PeCno_koovR6 zu?bwr1h-xiSAMv)Tlrk67@H3Ksn_Jl%u~(YB?%$8N!e4VC_YGvKH;VPXsDfFTdqk2 zYSYkZh9~vwSN|K)qckub@A1g}`T5l160Zcjq)o2Y7l9~y*4d(YKWIw z>VR;WSAt5}3;3wN9(=iTKUk?#ess^732jf8?N6v^8dcu~8m@f&G8ctcBdWLYPAABY zN{}UtcD*H*A(yD&@IM~z*Cz%GwY4yxI2t8L65=b8J!`p71~c!xsjDdRxL#qn>vs4;aR1lIWq&BZ&U@{?9O>R3U<%tsrKFLujvE|%%~cN za-1L9O;7M57w-}x+~$(bN1_Lq4cLimT-gpKdJO=+ywH28lPL96t&D}2#(JG-#4C9o z|K+8E5s2M>dg<&+H&>~t%Iu($V5mDwZl8z>nZCZ;nw<4(SAYdPt7mR&>R-SIq3}>zVAD#6_Q8R}iO-ra_ zxB^D!Zs@HPqWz%OSLj(>;YSAj@KsVbK^nGKwQ}ppt_Ulc2E5<7qdrb(#B(Bj7%p`= zLD4R8G}a{G{o?(t$Wu?;@^`iO`w$=P`jC~xALld!9b1yzAMNbXmLg`@TTR!XW6m9@ z;Wr4OtF2savw#T(`ewnh)Hd0kY*n>Cw^nkYY!PtF$_QCdRCg|MbKnPm!{DdEmX69pK z3$Sf~=S8bDuaS* zYt}(bc{(gk)4@UxZx}2+w4BF{3Wu>MYtwzcBoIj~Z z2}}duGRCICeWARl%LpikztC1>G)!#!LeL(-L`To>#|TI(i~%iNNI}<`SkVcf?&X{W zTRMhbmo9tVAUj8e%Nh}XxunQAv}AlDmZ!X+)1DrTViqPSVb#lKLW-4f_}UAMdTW$O znOJQt$$nk;^~gv*u*1=g^Qa*gwi#L0+lUhL`TPOMsz>-7Sy+@gOl?^|5Tg(0ZOctfeP&_Z8Z6uMt8M#u;e%F z{Cu;q+4Ju0hR`8HM^V&d$x4G>gQZqUEK2gwIc}|^H zJZsoDCKphwpZAI%EZK&$3-;2z)ArSV;ZwL6J0nU8F>0Xm42`MPRXIq4rOWD5DT9{~S*{4>y6CS5n0D2&Sh#_K@UU5sB2$QO3X0oNY%N|KpF0NQCJ^o5P9mFKAS2-POyHG-#mV{{eFupgJs@o8?_r3-~_nau1XrNmL=4tTj1X8QDGv2=^|FCmEf?{oNdL zOxGtGKAECZRXLG!>D7uIGC+SOz?^|1q>jVd0T1vf8b;evlAX~pbdFb+6<^9qUp@R5 zh|o2D?0WvKh&BicsC)mZ@C*DX?aLQHoF=&xH6P^_@*RzbnHU2dmu(Q~3kNXB35L1| zrMMYBvO}c}bz6#Ze*FO;Q>Rvcq^l2|0ou6juX5*S z=~)E&po18deb3TA+H;6NTn#{Nb(VoDX9v15O4C=jlV5!u|K#?g3d3M!zs_o6nH&{8 zQE@etJgh3d$#&kX_h=w-5UufL!+^KPb$+M>8Q>{G$-MsVJ7p&cir)tN=jA%rK?FKB z%o)p=AIwOI5Ur9VdaIw$rffI1_yZtLZ0@n*NP%!N&(g6!&?DC;Ld&4ar(kb%l#BO# z(>$g9qRj*p4OeDhLMab~5KoU|Cxt%Exptk^O{=1g3hkm};ldo5YI>Ugn|h(nK=Pe3 zS$lnC+x_LZ>ZLaTfrGmCPH-!LJNtqX@b}Mxj=d|}|2D5&(3Z5>m|Sk=Ij2lT$FgA8 zYGX;V6Qn}8kCokb;|gn@3&awCqda6Gzwf2G3J^8xjRbdQCf2`i_N?ht>gjZq7P2bX z*{*%~h|e?L5Cmn_N?{h%Y`Xu^N%!EA&B8~qR>yySntCq5*mU`%5r!jXm1;}zw9$2* zt9gh-Mj!fIdXf+@p-(7z80f_m$O*YxZ;S~b4vMpb*P68nuMo^#+86SDWBWaPG2)ta zzb)$T1N?rWYe7VE)W;%0Z4;D2c*Bc`Ks=@7B{R?Wxsp~mpoY%R$h;J|6F8E57)>z{ z$Wli$Ovkp$bzB@`+$;gz*w&1T+=5boee*IYsO~rey4~hYpw4e#vA;Bjh-cxGev4yO zeoQR-(;3EoSY0uEe?4O2mt*5wHv*P$Pv=BAa6*HSiURe_jS0QuzyTDXlLi5B4guFU z`tU*Sow=l=KUa;2WY!$e5p!ZU8YVm%QOQuJ?Z~cWd&#}^U}YGiPeQH;NuxZoua#Vh zeK|Y|caG{Ce3w{WvOx%J~Jahaa{U1I7crLq&umd7i@Zw!lvC0x7!#&?g>oQoJ zP#$LI1lT`s4p_UdF~Wv?cv#gJt&eXKunz*J%-cH7{QL}-AYy{-7Zmt1@8qi&%<;dC z_VCaGfer(bn=}1_U4m{W3F88e5C}@!mF~>VEqkw-cUCW)>2v!+*SvJGdC8Mz39I|Y z;hp}^2?kyVr~}-Fj@h+q;{@4k)3}Gdjbk$O!GpQ*QyTPniXU__b)!Ijv^X zBBs2`<3ZFco>5ITt=p$0e*@V~0b}vaM8wYqOrmffnGX5hA7KS_jBZNehcT+-C{Pj) zvjH_&{1F)i<)4g!>U$J9Nz&MO`4eV()!gr1wY&SPvN!AzLjWUOx~4BBe3w;Lzfx;} zu!CFvZ~J;=7=Hx&ezx!7Bp@rU zbjV&B_b-=#;t~+;FY2;gmtp(4{D=3Em@eCwuokZYYf>X69+ zAhau~8Ax*7y^%gAai99^QBc^Z|HwLJu;>qy$d>;t{}sr0a-O~a>5rBFITmSqLjDt4 zdNTjSE9lQR{sH^~0(%Md;?Z{CDNrNpM@Up|KN@)6z{;8K2Czcb7M=@K;2Yu<4vQF*IFzI%A@OS*srGC%_g z+v(~$*3?gFyBPb0Gy5HSxtWM{Kubg~nQdFxd?Z^)@P=_fHa_m;0blkH_!{VCR!=DA z24K9tyaqQ2{+#fkCFlnMCkJfOlRcBOul#Co!107|AjakPg2FD_&VOm@;m)kZzJejE z&~=)cpvP|!gE7Q1p}s&LQ|eP##pXL92rvka)f@A-p7{MX2X*=%Iih`mqHclwkMMMO zifsgWe(+dC_o2LbIJ?`V{5FWGi$~o3fsU!mJI8I-aFq~gpY_kUOnuGAFOH`{o3@4c z|A%XE2NVWq1feGL<^i78pDGg}!f)FijsvFz77nWMIb~D2E0-KmdrxU;GB?ij ze-UxB4p3Lg^Y<+&17G1`)YbSOT7Ns>`}<$-Iad306sZVW+bO^nD+Q$$0)!`^#9{Y@h_CCEi^<$-% zqQ0kzBc01pF6~E${`lD6)4%$8!1l7ky{4gQ$%jqukLx!Agy;h_c{KCTQ9TVukM>XG z`9Yz`L!JRczJ9L` zf4_K1s1WC!zL0wQ7cL6G^?pf0r>Y1AmFXOovZ)dK+9w)n{mJXRkP&w55x;acdzO?0 z``yo<=D+fF43@sJJ|rm#kBt z`r8c#Tl6H3m=j#_e-#PNku zsRE!?n*;MtQWQ&6-`D*O6aDv8G*!(clBN9cJ0|!)7E#gw$YP_}SCX$R9sl)SDVYMO z3OEQ=NI-l*^N{)qF6375`R4U0nqt_kVJ^H1Nz0r=g$D{v^2aog&`3@6+RM{&TgK>O))~Ci(yn8 zKt<0gG4{CvDeUB)Cf{e~YobFJ_VB^mvLru~Wgvooy)QkIPZ;HCe`EFhSf}+f9(&Hw z7sctn4D}3;1JA07OrZQ6vk+gk#=mvj%W=QjJY*VtFJc2vAe&YX-Ga~&FqKc{2#KDT zOcVm>T~rmB#>CIiw9u zLy3eCUknTs=~5*p&d9hahgdb&(-AfesV@OecmJLF{FnEkz)r zNzhz=qRFGK#m|xQDbNC4{O0C4jn&sd#A(tXi#$4XsH$8TAeX=f2at5E_i91E4#t0f zlE(E{fg|_LJQu701z{mvmbvcXo00WSTT;0a;jKmBRE{xT>R^c+Vq?h68&JdU0X|D} z^0RqU2l+p}F+)6IbqPGybEXqWnk`oigtO`u+*RX_0NV2x;|3RGCc0RxTKd#$rvhs~ ziwnGYAioENU(|MD_io%S{spf+OdkI0bvE_yiyRIiz!m{1$RHtS-;yhIp$CPXq4UJA z>L9*ku(5r3$Voa${W=f*^&S5-Ht8L@ zd!>H0)_UNNUme$`1trD7c-0~+Bm#UB9u3e#FnB#`rxl?u*aT$hXSDa}S(_1PM?D?2 zmScgZkNng9wuukCygZkfMMEhFzV2#ogT})?*u5f{n)!3RE1cQ^91xO%>Wv_%%?1^3 z{Sp1!iB>x=D{?b8KjwUo@(&5?kiKMTFd!3p?%Nm8i>| zG94Q8nN}Nqy}k9y+FwXazu)1%UvMy!z;m-;{1_Z8Ia=&ia|mT3G{xFLVxSs70kfw{ zofs}NCJhtHIj}U+GXc(bF(0paPW4HzGJ&2ux$)oF{+!l&l$Iu9VX!t6_ckJme+tlK z5}Ir+6DTEp>cZ1{D^7yKge;7aK)%#`#{A6Zm{|zjb&MgVe>&A-9|Q5U*4oGj#lU?! zg$W1y|NCVB+g}6oAn(n_??cQ-IM_^srz_L{85RkFwoWeAQtY}L=i~;k6oc1QICi@i^vAn0^6^DQH2sL``lnX8@iQo zS?j6vd?_6ZxW1m-vDP>-h2C;kxkhm70n~HJ-on*Z3Sv8Z)9{|T-vje;MY;WlV*e~4 zKCpaZY|fDC*pKiKEc$iX`@mmqyk3>-qK$3e4vPGLsO_|nhe0{)k*$XN4 z%Q8<{Od-6H!=#akbC%5s0BGUAX&m<7Z1Hal)ap8DPF!q6yu{PW;lqw$v{+N~1A^k( ze09MwHqRDlwX0(N)H4foWCCRU^r;Cyv`UdH{`KpI8x~{|R!;r|@juv7!Wek$h?$o0$+t@*2 z4CYhc$_#}7!s8&d8ce+#{ zGc>38DAj6szI__A1ib9t?K0HUGtOd2psGSsVE?X-mTnEmK9m12`+WFV-|L1!5Q1Rw ztXe!Ep3}oey8*t^&)+wG#Z4expIHbXfC620o66zx5z)ScP!w@}dm)_?nW&@lg{fNu zvm4J8?VyZ*I5u$6OSQI*BHqbkZT3xEh#`%a^}=ja3@!c6R0`LxwUR$Ufxku!{bVE^ z2Q~G@`N?u-jcWyp6bUUBQdW;jT_J39UlBFNa%Ec`@Jp0cPv7~2O8yNu`A;v)mIYblzkUJXc&0dv_Lvfbg%~!fN8T#>koLw2~|KPzXwN+m{!W>5HZne}+l z;EOYVbv8F9O-|=8wDiBXgjSb8012>Sg5lpJyx-=BSPon&+RSL08xS_KTW@uI8cBQv zbdmbSc^e>0BR>j4kgv=mVE`FPc$_ufOiq^f@W0Twzw;+`8qjyM{t+H*=HSUT+BMaP z>it3PDE>~Lz$1A?#3ZDg>j1${#7cS&5g@x@Xl|2m_C?5$YK1f^Zw& zkB30=pl+eM2fH?y=|?3M)ED+KTe)*^58-%^N&gl=iYFs&;&%a)D*$r#!+;|k|NQj= zO3Ei~R{OM-h5QZCKYszmHfiE>|NPZj4X_xn(JeD7Qgxz#{sPMK|Hkad%?yEsPbjzu z4*NIOJ^*loe`9u}-~vEYMd+NSzxi*heLdhD|AJ)&97)gtBF$WG7)9E@U|9ez3HUc= qCmo3328y8=EueeyU$89FeJL}|h{MbJRpCa&B*?bw}p#KNO{hiAI literal 0 HcmV?d00001 diff --git a/docs/images/cam.png b/docs/images/cam.png new file mode 100644 index 0000000000000000000000000000000000000000..3a8dcfed1de51b706d9b80b760264d372f90b52f GIT binary patch literal 55587 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 NibabelReader), (png, jpg, bmp -> PILReader), (npz, npy -> NumpyReader), (others -> ITKReader). + +The `ImageReader` API is quite straight-forward, users can easily extend for their own customized image readers. With these pre-defined image readers, MONAI can load images in formats: `NIfTI`, `DICOM`, `PNG`, `JPG`, `BMP`, `NPY/NPZ`, etc. @@ -127,17 +133,17 @@ With these pre-defined image readers, MONAI can load images in formats: `NIfTI`, ### 1. Cache IO and transforms data to accelerate training Users often need to train the model with many (potentially thousands of) epochs over the data to achieve the desired model quality. A native PyTorch implementation may repeatedly load data and run the same preprocessing steps for every epoch during training, which can be time-consuming and unnecessary, especially when the medical image volumes are large. -MONAI provides a multi-threads `CacheDataset` to accelerate these transformation steps during training by storing the intermediate outcomes before the first randomized transform in the transform chain. Enabling this feature could potentially give 10x training speedups in the [Datasets experiment](https://github.com/Project-MONAI/tutorials/blob/master/acceleration/dataset_type_performance.ipynb). +MONAI provides a multi-threads `CacheDataset` and `LMDBDataset` to accelerate these transformation steps during training by storing the intermediate outcomes before the first randomized transform in the transform chain. Enabling this feature could potentially give 10x training speedups in the [Datasets experiment](https://github.com/Project-MONAI/tutorials/blob/master/acceleration/dataset_type_performance.ipynb). ![image](../images/cache_dataset.png) ### 2. Cache intermediate outcomes into persistent storage -The `PersistentDataset` is similar to the CacheDataset, where the intermediate cache values are persisted to disk storage for rapid retrieval between experimental runs (as is the case when tuning hyperparameters), or when the entire data set size exceeds available memory. The `PersistentDataset` could achieve similar performance when comparing to `CacheDataset` in [Datasets experiment](https://github.com/Project-MONAI/tutorials/blob/master/acceleration/dataset_type_performance.ipynb). +The `PersistentDataset` is similar to the CacheDataset, where the intermediate cache values are persisted to disk storage or LMDB for rapid retrieval between experimental runs (as is the case when tuning hyperparameters), or when the entire data set size exceeds available memory. The `PersistentDataset` could achieve similar performance when comparing to `CacheDataset` in [Datasets experiment](https://github.com/Project-MONAI/tutorials/blob/master/acceleration/dataset_type_performance.ipynb). ![image](../images/datasets_speed.png) ### 3. SmartCache mechanism for big datasets During training with very big volume dataset, an efficient approach is to only train with a subset of the dataset in an epoch and dynamically replace part of the subset in every epoch. It's the `SmartCache` mechanism in [NVIDIA Clara-train SDK](https://docs.nvidia.com/clara/tlt-mi/clara-train-sdk-v3.0/nvmidl/additional_features/smart_cache.html#smart-cache). -MONAI provides a PyTorch version `SmartCache` as `SmartCacheDataset`. In each epoch, only the items in the cache are used for training, at the same time, another thread is preparing replacement items by applying the transform sequence to items not in cache. Once one epoch is completed, `SmartCache` replaces the same number of items with replacement items. +MONAI provides a PyTorch version `SmartCache` as `SmartCacheDataset`. In each epoch, only the items in the cache are used for training, at the same time, another thread is preparing replacement items by applying the transform sequence to items not in the cache. Once one epoch is completed, `SmartCache` replaces the same number of items with replacement items. For example, if we have 5 images: `[image1, image2, image3, image4, image5]`, and `cache_num=4`, `replace_rate=0.25`. So the actual training images cached and replaced for every epoch are as below: ``` @@ -165,7 +171,18 @@ class DatasetB(Dataset): dataset = ZipDataset([DatasetA(), DatasetB()], transform) ``` -### 5. Predefined Datasets for public medical data +### 5. PatchDataset +`monai.data.PatchDataset` provides a flexible API to combine both image- and patch-level preprocessing: +```python +image_dataset = Dataset(input_images, transforms=image_transforms) +patch_dataset = PatchDataset( + dataset=image_dataset, patch_func=sampler, + samples_per_image=n_samples, transform=patch_transforms) +``` +It supports user-specified `image_transforms` and `patch_transforms` with customisable patch sampling strategies, +which decouples the two-level computations in a multiprocess context. + +### 6. Predefined Datasets for public medical data To quickly get started with popular training data in the medical domain, MONAI provides several data-specific Datasets(like: `MedNISTDataset`, `DecathlonDataset`, etc.), which include downloading from our AWS storage, extracting data files and support generation of training/evaluation items with transforms. And they are flexible that users can easily modify the JSON config file to change the default behaviors. MONAI always welcome new contributions of public datasets, please refer to existing Datasets and leverage the download and extracting APIs, etc. [Public datasets tutorial](https://github.com/Project-MONAI/tutorials/blob/master/modules/public_datasets.ipynb) indicates how to quickly set up training workflows with `MedNISTDataset` and `DecathlonDataset` and how to create a new `Dataset` for public data. @@ -173,9 +190,15 @@ MONAI always welcome new contributions of public datasets, please refer to exist The common workflow of predefined datasets: ![image](../images/dataset_progress.png) +### 7. Partition dataset for cross validation +The `partition_dataset` utility in MONAI can perform several kinds of mechanism to partition dataset for training and validation or cross-validation. It supports shuffling based on a specified random seed, and will return a set of datasets, each dataset contains one partition. And it can split the dataset based on specified ratios or evenly split into `num_partitions`. For given class labels, it can also make sure the same ratio of classes in every partition. + ## Losses There are domain-specific loss functions in the medical imaging research which are not typically used in the generic computer vision tasks. As an important module of MONAI, these loss functions are implemented in PyTorch, such as `DiceLoss`, `GeneralizedDiceLoss`, `MaskedDiceLoss`, `TverskyLoss` and `FocalLoss`, etc. +## Optimizers +MONAI provides several advanced features in optimizers to help accelerate the training or fine-tuning progress. For example, `Novograd` optimizer can be used to converge obviously faster than traditional optimizers. And users can easily define different learning rates for the model layers based [on the `generate_param_groups` utility API](https://github.com/Project-MONAI/tutorials/blob/master/modules/layer_wise_learning_rate.ipynb). + ## Network architectures Some deep neural network architectures have shown to be particularly effective for medical imaging analysis tasks. MONAI implements reference networks with the aims of both flexibility and code readability. @@ -192,7 +215,7 @@ name, dimension = Conv.CONVTRANS, 3 conv_type = Conv[name, dimension] add_module('conv1', conv_type(in_channels, out_channels, kernel_size=1, bias=False)) ``` -And there are several 1D/2D/3D-compatible implementations of intermediate blocks and generic networks, such as UNet, DynUNet, DenseNet, GAN, AHNet, VNet, SENet(and SEResNet, SEResNeXt), SegResNet, etc. +And there are several 1D/2D/3D-compatible implementations of intermediate blocks and generic networks, such as UNet, DynUNet, DenseNet, GAN, AHNet, VNet, SENet(and SEResNet, SEResNeXt), SegResNet, etc. All the networks can support PyTorch serialization pipeline based on `torch.jit.script`. ## Evaluation To run model inferences and evaluate the model quality, MONAI provides reference implementations for the relevant widely-used approaches. Currently, several popular evaluation metrics and inference patterns are included: @@ -210,13 +233,19 @@ A typical process is: The [Spleen 3D segmentation tutorial](https://github.com/Project-MONAI/tutorials/blob/master/3d_segmentation/spleen_segmentation_3d.ipynb) leverages `SlidingWindow` inference for validation. ### 2. Metrics for medical tasks -Various useful evaluation metrics have been used to measure the quality of medical image specific models. MONAI already implemented many medical domain-specific metrics, such as: `Mean Dice`, `ROCAUC`, `Confusion Matrices`, `Hausdorff Distance`, `Surface Distance`, etc. +Various useful evaluation metrics have been used to measure the quality of medical image specific models. MONAI already implemented many medical domain-specific metrics, such as: `Mean Dice`, `ROCAUC`, `Confusion Matrices`, `Hausdorff Distance`, `Surface Distance`, `Occlusion Sensitivity`. -For example, `Mean Dice` score can be used for segmentation tasks and the area under the ROC curve(`ROCAUC`) for classification tasks. We continue to integrate more options. +For example, `Mean Dice` score can be used for segmentation tasks, and the area under the ROC curve(`ROCAUC`) for classification tasks. We continue to integrate more options. ## Visualization Beyond the simple point and curve plotting, MONAI provides intuitive interfaces to visualize multidimensional data as GIF animations in TensorBoard. This could provide a quick qualitative assessment of the model by visualizing, for example, the volumetric inputs, segmentation maps, and intermediate feature maps. A runnable example with visualization is available at [UNet training example](https://github.com/Project-MONAI/tutorials/blob/master/3d_segmentation/torch/unet_training_dict.py). +And to visualize the class activation mapping for a trained classification model, MONAI provides CAM, GradCAM, GradCAM++ APIs for both 2D and 3D models: + +![image](../images/cam.png) + +The above example is generated by computing [GradCAM/GradCAM++ from a lung CT lesion classification model](https://github.com/Project-MONAI/tutorials/tree/master/modules/interpretability). + ## Result writing Currently MONAI supports writing the model outputs as NIfTI files or PNG files for segmentation tasks, and as CSV files for classification tasks. And the writers can restore the data spacing, orientation or shape according to the `original_shape` or `original_affine` information from the input image. @@ -280,7 +309,8 @@ We also tried to combine AMP with `CacheDataset` and `Novograd` optimizer to ach More details is available at [Fast training tutorial](https://github.com/Project-MONAI/tutorials/blob/master/acceleration/fast_training_tutorial.ipynb). ### 2. Distributed data parallel -Distributed data parallel is an important feature of PyTorch to connect multiple GPU devices on 1 node or several nodes to train or evaluate models. MONAI provides many demos for reference: train/evaluate with PyTorch DDP, train/evaluate with Horovod, train/evaluate with Ignite DDP, partition dataset and train with SmartCacheDataset, etc. And also provides a real world training example based on Decathlon challenge Task01 - Brain Tumor segmentation, it contains distributed caching, training, and validation. We tried to train this example on NVIDIA NGC server, got some performance benchmarks for reference(PyTorch 1.6, CUDA 11, Tesla V100 GPUs): +Distributed data parallel is an important feature of PyTorch to connect multiple GPU devices on single or multiple nodes to train or evaluate models. MONAI provides demos for reference: train/evaluate with PyTorch DDP, train/evaluate with Horovod, train/evaluate with Ignite DDP, partition dataset and train with SmartCacheDataset, as well as a real world training example based on Decathlon challenge Task01 - Brain Tumor segmentation. +The demo contains distributed caching, training, and validation. We tried to train this example on NVIDIA NGC server, got some performance benchmarks for reference(PyTorch 1.6, CUDA 11, Tesla V100 GPUs): ![image](../images/distributed_training.png) ### 3. C++/CUDA optimized modules diff --git a/monai/config/type_definitions.py b/monai/config/type_definitions.py index 9dd75a7e90..ecf08af107 100644 --- a/monai/config/type_definitions.py +++ b/monai/config/type_definitions.py @@ -17,7 +17,7 @@ that should be used consistently throughout the entire MONAI package. A type would be named as type_definitions.KeysCollection -which includes a meaningful name for the concent in the name itself. The +which includes a meaningful name for the consent in the name itself. The definitions in this file map context meaningful names to the underlying object properties that define the expected API. diff --git a/monai/data/thread_buffer.py b/monai/data/thread_buffer.py index b76e8c7444..9832a7c164 100644 --- a/monai/data/thread_buffer.py +++ b/monai/data/thread_buffer.py @@ -22,7 +22,7 @@ class ThreadBuffer: One issue raised by using a thread in this way is that during the lifetime of the thread the source object is being iterated over, so if the thread hasn't finished another attempt to iterate over it will raise an exception or yield - inexpected results. To ensure the thread releases the iteration and proper cleanup is done the stop() method must + unexpected results. To ensure the thread releases the iteration and proper cleanup is done the stop() method must be called which will join with the thread. Args: diff --git a/monai/data/utils.py b/monai/data/utils.py index eaeeee543b..b63ff6e66b 100644 --- a/monai/data/utils.py +++ b/monai/data/utils.py @@ -567,7 +567,7 @@ def partition_dataset( ): """ Split the dataset into N partitions. It can support shuffle based on specified random seed. - Will return a set of datasets, every dataset contains 1 partion of original dataset. + Will return a set of datasets, every dataset contains 1 partition of original dataset. And it can split the dataset based on specified ratios or evenly split into `num_partitions`. Refer to: https://github.com/pytorch/pytorch/blob/master/torch/utils/data/distributed.py. diff --git a/monai/transforms/utility/dictionary.py b/monai/transforms/utility/dictionary.py index e6a9da8076..b7be05bea6 100644 --- a/monai/transforms/utility/dictionary.py +++ b/monai/transforms/utility/dictionary.py @@ -158,7 +158,7 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda class SplitChanneld(MapTransform): """ Dictionary-based wrapper of :py:class:`monai.transforms.SplitChannel`. - All the input specified by `keys` should be splitted into same count of data. + All the input specified by `keys` should be split into same count of data. """ From bff4d3a51a477028448ccd3ebfa13196d133770f Mon Sep 17 00:00:00 2001 From: Isaac Yang Date: Mon, 14 Dec 2020 01:17:43 -0800 Subject: [PATCH 18/40] Add ConvertToMultiChannelBasedOnBratsClassesd to handle BraTS18 dataset label (#1347) Signed-off-by: Isaac Yang Signed-off-by: Sachidanand Alle --- monai/transforms/utility/dictionary.py | 27 ++++++++++++++++++++ tests/test_convert_to_multi_channeld.py | 34 +++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tests/test_convert_to_multi_channeld.py diff --git a/monai/transforms/utility/dictionary.py b/monai/transforms/utility/dictionary.py index b7be05bea6..5ae33626a5 100644 --- a/monai/transforms/utility/dictionary.py +++ b/monai/transforms/utility/dictionary.py @@ -636,6 +636,30 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda return d +class ConvertToMultiChannelBasedOnBratsClassesd(MapTransform): + """ + Convert labels to multi channels based on brats18 classes: + label 1 is the necrotic and non-enhancing tumor core + label 2 is the the peritumoral edema + label 4 is the GD-enhancing tumor + The possible classes are TC (Tumor core), WT (Whole tumor) + and ET (Enhancing tumor). + """ + + def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.ndarray]: + d = dict(data) + for key in self.keys: + result = list() + # merge labels 1 (tumor non-enh) and 4 (tumor enh) to TC + result.append(np.logical_or(d[key] == 1, d[key] == 4)) + # merge labels 1 (tumor non-enh) and 4 (tumor enh) and 2 (large edema) to WT + result.append(np.logical_or(np.logical_or(d[key] == 1, d[key] == 4), d[key] == 2)) + # label 4 is ET + result.append(d[key] == 4) + d[key] = np.stack(result, axis=0).astype(np.float32) + return d + + IdentityD = IdentityDict = Identityd AsChannelFirstD = AsChannelFirstDict = AsChannelFirstd AsChannelLastD = AsChannelLastDict = AsChannelLastd @@ -653,3 +677,6 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda LambdaD = LambdaDict = Lambdad LabelToMaskD = LabelToMaskDict = LabelToMaskd FgBgToIndicesD = FgBgToIndicesDict = FgBgToIndicesd +ConvertToMultiChannelBasedOnBratsClassesD = ( + ConvertToMultiChannelBasedOnBratsClassesDict +) = ConvertToMultiChannelBasedOnBratsClassesd diff --git a/tests/test_convert_to_multi_channeld.py b/tests/test_convert_to_multi_channeld.py new file mode 100644 index 0000000000..2de3ee7394 --- /dev/null +++ b/tests/test_convert_to_multi_channeld.py @@ -0,0 +1,34 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +from monai.transforms import ConvertToMultiChannelBasedOnBratsClassesd + +TEST_CASE = [ + {"keys": "label"}, + {"label": np.array([[0, 1, 2], [1, 2, 4], [0, 1, 4]])}, + np.array([[[0, 1, 0], [1, 0, 1], [0, 1, 1]], [[0, 1, 1], [1, 1, 1], [0, 1, 1]], [[0, 0, 0], [0, 0, 1], [0, 0, 1]]]), +] + + +class TestConvertToMultiChanneld(unittest.TestCase): + @parameterized.expand([TEST_CASE]) + def test_type_shape(self, keys, data, expected_result): + result = ConvertToMultiChannelBasedOnBratsClassesd(**keys)(data) + np.testing.assert_equal(result["label"], expected_result) + + +if __name__ == "__main__": + unittest.main() From 806024ca9fcb92b580e4f34cb3cf9827c0275bae Mon Sep 17 00:00:00 2001 From: Mohammad Adil Date: Mon, 14 Dec 2020 09:34:54 -0800 Subject: [PATCH 19/40] Add extreme points channel (#1361) * Add AddExtremePointsChannel transform Signed-off-by: Mohammad Adil * permutation -> perturbation Signed-off-by: Wenqi Li * [MONAI] python code formatting Signed-off-by: monai-bot Co-authored-by: YuanTingHsieh Co-authored-by: Wenqi Li Co-authored-by: monai-bot Signed-off-by: Sachidanand Alle --- monai/transforms/utility/array.py | 79 ++++++++++++++++++++++- monai/transforms/utility/dictionary.py | 50 ++++++++++++++ monai/transforms/utils.py | 53 +++++++++++++++ tests/test_add_extreme_points_channel.py | 67 +++++++++++++++++++ tests/test_add_extreme_points_channeld.py | 57 ++++++++++++++++ tests/test_get_extreme_points.py | 48 ++++++++++++++ 6 files changed, 352 insertions(+), 2 deletions(-) create mode 100644 tests/test_add_extreme_points_channel.py create mode 100644 tests/test_add_extreme_points_channeld.py create mode 100644 tests/test_get_extreme_points.py diff --git a/monai/transforms/utility/array.py b/monai/transforms/utility/array.py index f417fabffa..3ab10652e2 100644 --- a/monai/transforms/utility/array.py +++ b/monai/transforms/utility/array.py @@ -20,8 +20,9 @@ import numpy as np import torch -from monai.transforms.compose import Transform -from monai.transforms.utils import map_binary_to_indices +from monai.networks.layers import GaussianFilter +from monai.transforms.compose import Randomizable, Transform +from monai.transforms.utils import get_extreme_points, map_binary_to_indices from monai.utils import ensure_tuple # Generic type which can represent either a numpy.ndarray or a torch.Tensor @@ -535,3 +536,77 @@ def __call__( bg_indices = np.stack([np.unravel_index(i, output_shape) for i in bg_indices]) return fg_indices, bg_indices + + +class AddExtremePointsChannel(Transform, Randomizable): + """ + Add extreme points of label to the image as a new channel. This transform generates extreme + point from label and applies a gaussian filter. The pixel values in points image are rescaled + to range [rescale_min, rescale_max] and added as a new channel to input image. The algorithm is + described in Roth et al., Going to Extremes: Weakly Supervised Medical Image Segmentation + https://arxiv.org/abs/2009.11988. + + This transform only supports single channel labels (1, spatial_dim1, [spatial_dim2, ...]). The + background ``index`` is ignored when calculating extreme points. + + Args: + background: Class index of background label, defaults to 0. + pert: Random perturbation amount to add to the points, defaults to 0.0. + + Raises: + ValueError: When no label image provided. + ValueError: When label image is not single channel. + """ + + def __init__(self, background: int = 0, pert: float = 0.0) -> None: + self._background = background + self._pert = pert + self._points: List[Tuple[int, ...]] = [] + + def randomize(self, label: np.ndarray) -> None: + self._points = get_extreme_points(label, rand_state=self.R, background=self._background, pert=self._pert) + + def __call__( + self, + img: np.ndarray, + label: Optional[np.ndarray] = None, + sigma: Union[Sequence[float], float, Sequence[torch.Tensor], torch.Tensor] = 3.0, + rescale_min: float = -1.0, + rescale_max: float = 1.0, + ) -> np.ndarray: + """ + Args: + img: the image that we want to add new channel to. + label: label image to get extreme points from. Shape must be + (1, spatial_dim1, [, spatial_dim2, ...]). Doesn't support one-hot labels. + sigma: if a list of values, must match the count of spatial dimensions of input data, + and apply every value in the list to 1 spatial dimension. if only 1 value provided, + use it for all spatial dimensions. + rescale_min: minimum value of output data. + rescale_max: maximum value of output data. + """ + if label is None: + raise ValueError("This transform requires a label array!") + if label.shape[0] != 1: + raise ValueError("Only supports single channel labels!") + + # Generate extreme points + self.randomize(label[0, :]) + + # points to image + points_image = torch.zeros(label.shape[1:], dtype=torch.float) + for p in self._points: + points_image[p] = 1.0 + + # add channel and add batch + points_image = points_image.unsqueeze(0).unsqueeze(0) + gaussian_filter = GaussianFilter(img.ndim - 1, sigma=sigma) + points_image = gaussian_filter(points_image).squeeze(0).detach().numpy() + + # rescale the points image to [rescale_min, rescale_max] + min_intensity = np.min(points_image) + max_intensity = np.max(points_image) + points_image = (points_image - min_intensity) / (max_intensity - min_intensity) + points_image = points_image * (rescale_max - rescale_min) + rescale_min + + return np.concatenate([img, points_image], axis=0) diff --git a/monai/transforms/utility/dictionary.py b/monai/transforms/utility/dictionary.py index 5ae33626a5..fad98fdb62 100644 --- a/monai/transforms/utility/dictionary.py +++ b/monai/transforms/utility/dictionary.py @@ -26,6 +26,7 @@ from monai.transforms.compose import MapTransform from monai.transforms.utility.array import ( AddChannel, + AddExtremePointsChannel, AsChannelFirst, AsChannelLast, CastToType, @@ -660,6 +661,54 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda return d +class AddExtremePointsChanneld(MapTransform): + """ + Dictionary-based wrapper of :py:class:`monai.transforms.AddExtremePointsChannel`. + + Args: + keys: keys of the corresponding items to be transformed. + See also: :py:class:`monai.transforms.compose.MapTransform` + label_key: key to label source to get the extreme points. + background: Class index of background label, defaults to 0. + pert: Random perturbation amount to add to the points, defaults to 0.0. + sigma: if a list of values, must match the count of spatial dimensions of input data, + and apply every value in the list to 1 spatial dimension. if only 1 value provided, + use it for all spatial dimensions. + rescale_min: minimum value of output data. + rescale_max: maximum value of output data. + + """ + + def __init__( + self, + keys: KeysCollection, + label_key: str, + background: int = 0, + pert: float = 0.0, + sigma: Union[Sequence[float], float, Sequence[torch.Tensor], torch.Tensor] = 3.0, + rescale_min: float = -1.0, + rescale_max: float = 1.0, + ): + super().__init__(keys) + self.label_key = label_key + self.add_extreme_points_channel = AddExtremePointsChannel(background=background, pert=pert) + self.sigma = sigma + self.rescale_min = rescale_min + self.rescale_max = rescale_max + + def __call__(self, data): + d = dict(data) + label = d[self.label_key] + + for key in data.keys(): + if key in self.keys: + img = d[key] + d[key] = self.add_extreme_points_channel( + img, label=label, sigma=self.sigma, rescale_min=self.rescale_min, rescale_max=self.rescale_max + ) + return d + + IdentityD = IdentityDict = Identityd AsChannelFirstD = AsChannelFirstDict = AsChannelFirstd AsChannelLastD = AsChannelLastDict = AsChannelLastd @@ -680,3 +729,4 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda ConvertToMultiChannelBasedOnBratsClassesD = ( ConvertToMultiChannelBasedOnBratsClassesDict ) = ConvertToMultiChannelBasedOnBratsClassesd +AddExtremePointsChannelD = AddExtremePointsChannelDict = AddExtremePointsChanneld diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 44205e4e09..4a4b79cdf5 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -571,3 +571,56 @@ def get_largest_connected_component_mask(img: torch.Tensor, connectivity: Option if item.max() != 0: largest_cc[i, ...] = item == (np.argmax(np.bincount(item.flat)[1:]) + 1) return torch.as_tensor(largest_cc, device=img.device) + + +def get_extreme_points( + img: np.ndarray, rand_state: np.random.RandomState = np.random, background: int = 0, pert: float = 0.0 +) -> List[Tuple[int, ...]]: + """ + Generate extreme points from an image. These are used to generate initial segmentation + for annotation models. An optional perturbation can be passed to simulate user clicks. + + Args: + img: + Image to generate extreme points from. Expected Shape is ``(spatial_dim1, [, spatial_dim2, ...])``. + rand_state: `np.random.RandomState` object used to select random indices. + background: Value to be consider as background, defaults to 0. + pert: Random perturbation amount to add to the points, defaults to 0.0. + + Returns: + A list of extreme points, its length is equal to 2 * spatial dimension of input image. + The output format of the coordinates is: + + [1st_spatial_dim_min, 1st_spatial_dim_max, 2nd_spatial_dim_min, ..., Nth_spatial_dim_max] + + Raises: + ValueError: When the input image does not have any foreground pixel. + """ + indices = np.where(img != background) + if np.size(indices[0]) == 0: + raise ValueError("get_extreme_points: no foreground object in mask!") + + def _get_point(val, dim): + """ + Select one of the indices within slice containing val. + + Args: + val : value for comparison + dim : dimension in which to look for value + """ + idx = rand_state.choice(np.where(indices[dim] == val)[0]) + pt = [] + for j in range(img.ndim): + # add +- pert to each dimension + val = int(indices[j][idx] + 2.0 * pert * (rand_state.rand() - 0.5)) + val = max(val, 0) + val = min(val, img.shape[j] - 1) + pt.append(val) + return pt + + points = [] + for i in range(img.ndim): + points.append(tuple(_get_point(np.min(indices[i][...]), i))) + points.append(tuple(_get_point(np.max(indices[i][...]), i))) + + return points diff --git a/tests/test_add_extreme_points_channel.py b/tests/test_add_extreme_points_channel.py new file mode 100644 index 0000000000..01277bfa19 --- /dev/null +++ b/tests/test_add_extreme_points_channel.py @@ -0,0 +1,67 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +from monai.transforms import AddExtremePointsChannel + +IMG_CHANNEL = 3 + +TEST_CASE_1 = [ + { + "img": np.zeros((IMG_CHANNEL, 4, 3)), + "label": np.array([[[0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]]), + "sigma": 1.0, + "rescale_min": 0.0, + "rescale_max": 1.0, + }, + np.array( + [ + [0.38318458, 0.98615628, 0.85551184], + [0.35422316, 0.94430935, 1.0], + [0.46000731, 0.57319659, 0.46000722], + [0.64577687, 0.38318464, 0.0], + ] + ), +] + +TEST_CASE_2 = [ + { + "img": np.zeros((IMG_CHANNEL, 4, 3)), + "label": np.array([[[0, 1, 0], [1, 1, 1], [0, 1, 0], [0, 1, 0]]]), + "sigma": 1.0, + "rescale_min": 0.0, + "rescale_max": 1.0, + }, + np.array( + [ + [0.44628328, 0.80495411, 0.44628328], + [0.6779086, 1.0, 0.67790854], + [0.33002687, 0.62079221, 0.33002687], + [0.0, 0.31848389, 0.0], + ] + ), +] + + +class TestAddExtremePointsChannel(unittest.TestCase): + @parameterized.expand([TEST_CASE_1, TEST_CASE_2]) + def test_type_shape(self, input_data, expected): + add_extreme_points_channel = AddExtremePointsChannel() + result = add_extreme_points_channel(**input_data) + np.testing.assert_allclose(result[IMG_CHANNEL], expected, rtol=1e-4) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_add_extreme_points_channeld.py b/tests/test_add_extreme_points_channeld.py new file mode 100644 index 0000000000..6cf4e7be87 --- /dev/null +++ b/tests/test_add_extreme_points_channeld.py @@ -0,0 +1,57 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +from monai.transforms import AddExtremePointsChanneld + +IMG_CHANNEL = 3 + +TEST_CASE_1 = [ + {"img": np.zeros((IMG_CHANNEL, 4, 3)), "label": np.array([[[0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]])}, + np.array( + [ + [0.38318458, 0.98615628, 0.85551184], + [0.35422316, 0.94430935, 1.0], + [0.46000731, 0.57319659, 0.46000722], + [0.64577687, 0.38318464, 0.0], + ] + ), +] + +TEST_CASE_2 = [ + {"img": np.zeros((IMG_CHANNEL, 4, 3)), "label": np.array([[[0, 1, 0], [1, 1, 1], [0, 1, 0], [0, 1, 0]]])}, + np.array( + [ + [0.44628328, 0.80495411, 0.44628328], + [0.6779086, 1.0, 0.67790854], + [0.33002687, 0.62079221, 0.33002687], + [0.0, 0.31848389, 0.0], + ] + ), +] + + +class TestAddExtremePointsChanneld(unittest.TestCase): + @parameterized.expand([TEST_CASE_1, TEST_CASE_2]) + def test_type_shape(self, input_data, expected): + add_extreme_points_channel = AddExtremePointsChanneld( + keys="img", label_key="label", sigma=1.0, rescale_min=0.0, rescale_max=1.0 + ) + result = add_extreme_points_channel(input_data) + np.testing.assert_allclose(result["img"][IMG_CHANNEL], expected, rtol=1e-4) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_get_extreme_points.py b/tests/test_get_extreme_points.py new file mode 100644 index 0000000000..dd38af573e --- /dev/null +++ b/tests/test_get_extreme_points.py @@ -0,0 +1,48 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +from parameterized import parameterized + +from monai.transforms import get_extreme_points + +TEST_CASE_1 = [ + { + "img": np.array([[0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]), + "rand_state": np.random, + "background": 0, + "pert": 0.0, + }, + [(0, 1), (3, 0), (3, 0), (1, 2)], +] + +TEST_CASE_2 = [ + { + "img": np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0], [0, 1, 0]]), + "rand_state": np.random, + "background": 0, + "pert": 0.0, + }, + [(0, 1), (3, 1), (1, 0), (1, 2)], +] + + +class TestGetExtremePoints(unittest.TestCase): + @parameterized.expand([TEST_CASE_1, TEST_CASE_2]) + def test_type_shape(self, input_data, expected): + result = get_extreme_points(**input_data) + self.assertEqual(result, expected) + + +if __name__ == "__main__": + unittest.main() From e83a69f664c5aec15bbe6fdefb88c3c97ddac498 Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Mon, 14 Dec 2020 09:45:00 -0800 Subject: [PATCH 20/40] Clean up not required items Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/dataset.py | 15 ++- monai/apps/deepgrow/handler.py | 235 --------------------------------- monai/handlers/utils.py | 111 ---------------- 3 files changed, 13 insertions(+), 348 deletions(-) delete mode 100644 monai/apps/deepgrow/handler.py diff --git a/monai/apps/deepgrow/dataset.py b/monai/apps/deepgrow/dataset.py index 9815eebd33..4183958837 100644 --- a/monai/apps/deepgrow/dataset.py +++ b/monai/apps/deepgrow/dataset.py @@ -10,6 +10,7 @@ # limitations under the License. import json +import logging import os import sys from typing import Callable, Dict, List, Sequence, Union @@ -101,6 +102,11 @@ def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): vol_label = data.get(keys[1]) data_list = [] + if len(vol_image.shape) == 4: + logging.info('4D-Image, pick only first series; Image: {}; Label: {}'.format(vol_image.shape, vol_label.shape)) + vol_image = vol_image[0] + vol_image = np.moveaxis(vol_image, -1, 0) + image_count = 0 label_count = 0 unique_labels_count = 0 @@ -163,6 +169,11 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): vol_label = data.get(keys[1]) data_list = [] + if len(vol_image.shape) == 4: + logging.info('4D-Image, pick only first series; Image: {}; Label: {}'.format(vol_image.shape, vol_label.shape)) + vol_image = vol_image[0] + vol_image = np.moveaxis(vol_image, -1, 0) + image_count = 0 label_count = 0 unique_labels_count = 0 @@ -216,10 +227,10 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): def create_dataset( datalist, output_dir, + dimension, + pixdim, keys=('image', 'label'), base_dir=None, - dimension=2, - pixdim=(1.0, 1.0), limit=0, relative_path=False) -> List[Dict]: if not isinstance(keys, list) and not isinstance(keys, tuple): diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py deleted file mode 100644 index 82ab4e48b9..0000000000 --- a/monai/apps/deepgrow/handler.py +++ /dev/null @@ -1,235 +0,0 @@ -# Copyright 2020 MONAI Consortium -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import os -import statistics - -import numpy as np -import torch -import torch.distributed -import torchvision -from torch.utils.tensorboard import SummaryWriter - -from monai.engines import Engine -from monai.engines.workflow import Events -from monai.handlers.utils import make_grid_with_titles -from monai.metrics import compute_meandice -from monai.transforms import rescale_array - - -# TODO:: Unit Test - -class MeanDice: - def __init__(self): - self.data = [] - - def reset(self): - self.data = [] - - def update(self, y_pred, y, batched=True): - if not batched: - y_pred = y_pred[None] - y = y[None] - score = compute_meandice(y_pred=y_pred, y=y, include_background=False).mean() - self.data.append(score.item()) - - def mean(self) -> float: - return statistics.mean(self.data) - - def stdev(self) -> float: - return statistics.stdev(self.data) if len(self.data) > 1 else 0 - - -class DeepgrowStatsHandler(object): - def __init__( - self, - summary_writer=None, - interval=1, - log_dir="./runs", - tag_name='val_dice', - compute_metric=True, - add_scalar=True, - add_stdev=False, - merge_scalar=False, - fold_size=0, - ): - self.writer = SummaryWriter(log_dir=log_dir) if summary_writer is None else summary_writer - self.interval = interval - self.tag_name = tag_name - self.compute_metric = compute_metric - self.add_scalar = add_scalar - self.add_stdev = add_stdev - self.merge_scalar = merge_scalar - self.fold_size = fold_size - - if torch.distributed.is_initialized(): - self.tag_name = 'r{}-{}'.format(torch.distributed.get_rank(), self.tag_name) - - self.plot_data = {} - self.metric_data = {} - - def attach(self, engine: Engine) -> None: - engine.add_event_handler(Events.ITERATION_COMPLETED(every=self.interval), self, 'iteration') - engine.add_event_handler(Events.EPOCH_COMPLETED(every=1), self, 'epoch') - - def write_images(self, epoch): - if not self.plot_data or not len(self.plot_data): - return - - all_imgs = [] - titles = [] - for region in sorted(self.plot_data.keys()): - all_imgs.extend(self.plot_data[region]) - metric = self.metric_data.get(region) - dice = '{:.4f}'.format(metric.mean()) if self.compute_metric and metric else '' - stdev = '{:.4f}'.format(metric.stdev()) if self.compute_metric and metric else '' - titles.extend([ - 'img({})'.format(region), - 'lab({})'.format(region), - 'out({}, dice => mean:{}, stdev:{})'.format( - region, dice, stdev) if self.compute_metric else 'out({})'.format(region) - ]) - - colors = [(0, 0, 255), (0, 0, 255), (255, 0, 0)] - img_tensor = make_grid_with_titles( - tensor=torch.from_numpy(np.array(all_imgs)), - titles=titles, - colors=colors, - nrow=3, - normalize=True, - pad_value=2) - self.writer.add_image(tag='Deepgrow Regions', img_tensor=img_tensor, global_step=epoch) - - logging.info("Saved {} Regions {} into Tensorboard at epoch: {}".format( - len(self.plot_data), sorted([*self.plot_data]), epoch)) - self.writer.flush() - - def write_region_metrics(self, epoch): - metric_sum = 0 - means = {} - stdevs = {} - for region in self.metric_data: - metric = self.metric_data[region].mean() - stdev = self.metric_data[region].stdev() - if self.merge_scalar: - means['{:0>2d}'.format(region)] = metric - stdevs['{:0>2d}'.format(region)] = stdev - else: - if self.add_stdev: - self.writer.add_scalar("{}_{:0>2d}_mean".format(self.tag_name, region), metric, epoch) - self.writer.add_scalar("{}_{:0>2d}_mean+".format(self.tag_name, region), metric + stdev, epoch) - self.writer.add_scalar("{}_{:0>2d}_mean-".format(self.tag_name, region), metric - stdev, epoch) - else: - self.writer.add_scalar("{}_{:0>2d}".format(self.tag_name, region), metric, epoch) - metric_sum += metric - if self.merge_scalar: - self.writer.add_scalars("{}_region".format(self.tag_name), means, epoch) - - if len(self.metric_data) > 1: - metric_avg = metric_sum / len(self.metric_data) - self.writer.add_scalar("{}_regions_avg".format(self.tag_name), metric_avg, epoch) - self.writer.flush() - - def __call__(self, engine: Engine, action) -> None: - total_steps = engine.state.iteration - if total_steps < engine.state.epoch_length: - total_steps = engine.state.epoch_length * (engine.state.epoch - 1) + total_steps - - if action == 'epoch' and not self.fold_size: - epoch = engine.state.epoch - elif self.fold_size and total_steps % self.fold_size == 0: - epoch = int(total_steps / self.fold_size) - else: - epoch = None - - if epoch: - self.write_images(epoch) - if self.add_scalar: - self.write_region_metrics(epoch) - - if action == 'epoch' or epoch: - self.plot_data = {} - self.metric_data = {} - return - - device = engine.state.device - batch_data = engine.state.batch - output_data = engine.state.output - - for bidx in range(len(batch_data.get('region', []))): - region = batch_data.get('region')[bidx] - region = region.item() if torch.is_tensor(region) else region - - if self.plot_data.get(region) is None: - self.plot_data[region] = [ - rescale_array(batch_data["image"][bidx][0].detach().cpu().numpy()[np.newaxis], 0, 1), - rescale_array(batch_data["label"][bidx].detach().cpu().numpy(), 0, 1), - rescale_array(output_data['pred'][bidx].detach().cpu().numpy(), 0, 1) - ] - - if self.compute_metric: - if self.metric_data.get(region) is None: - self.metric_data[region] = MeanDice() - self.metric_data[region].update( - y_pred=output_data['pred'][bidx].to(device), - y=batch_data['label'][bidx].to(device), - batched=False) - - -class SegmentationSaver: - def __init__( - self, - output_dir: str = "./runs", - images=True - ): - self.output_dir = output_dir - self.images = images - os.makedirs(self.output_dir, exist_ok=True) - - def attach(self, engine: Engine) -> None: - if not engine.has_event_handler(self, Events.ITERATION_COMPLETED): - engine.add_event_handler(Events.ITERATION_COMPLETED, self) - - def __call__(self, engine: Engine): - batch_data = engine.state.batch - output_data = engine.state.output - device = engine.state.device - tag = '' - if torch.distributed.is_initialized(): - tag = 'r{}-'.format(torch.distributed.get_rank()) - - for bidx in range(len(batch_data.get('image'))): - step = engine.state.iteration - - image = batch_data['image'][bidx][0].detach().cpu().numpy()[np.newaxis] - label = batch_data['label'][bidx].detach().cpu().numpy() - pred = output_data['pred'][bidx].detach().cpu().numpy() - dice = compute_meandice( - y_pred=output_data['pred'][bidx][None].to(device), - y=batch_data['label'][bidx][None].to(device), - include_background=False).mean() - - np.savez(os.path.join(self.output_dir, "{}img_label_pred_{:0>4d}_{:0>2d}_{:.4f}".format( - tag, step, bidx, dice)), image, label, pred) - - if self.images: - torchvision.utils.save_image( - tensor=torch.from_numpy(np.array([ - rescale_array(image, 0, 1), - rescale_array(label, 0, 1), - rescale_array(pred, 0, 1) - ])), - nrow=3, - pad_value=2, - fp=os.path.join(self.output_dir, "{}img_label_pred_{:0>4d}_{:0>2d}_{:.4f}.png".format( - tag, step, bidx, dice)) - ) diff --git a/monai/handlers/utils.py b/monai/handlers/utils.py index bb2da0e3f7..e401e18b0c 100644 --- a/monai/handlers/utils.py +++ b/monai/handlers/utils.py @@ -9,19 +9,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -import math from typing import TYPE_CHECKING, Any, Callable -import cv2 -import numpy as np import torch import torch.distributed as dist -from torchvision.transforms import transforms from monai.utils import exact_version, optional_import -irange = range - if TYPE_CHECKING: from ignite.engine import Engine else: @@ -60,108 +54,3 @@ def all_gather(tensor): output = [torch.zeros_like(tensor) for _ in range(dist.get_world_size())] dist.all_gather(output, tensor) return torch.cat(output, dim=0) - - -def make_grid_with_titles(tensor, titles, colors=None, title_pos=None, nrow=8, padding=2, normalize=False, range=None, - scale_each=False, pad_value=0): - """Make a grid of images. - - Args: - tensor (Tensor or list): 4D mini-batch Tensor of shape (B x C x H x W) - or a list of images all of the same size. - titles (list): ( [title_1,title_2,title_3,...title_n]) where labels is Bx1 vector of some titles - colors (list): ( [color_1,color_2,color_3,...title_n]) where color is [R,G,B] - title_pos(x,y): Title position on the image - nrow (int, optional): Number of images displayed in each row of the grid. - The final grid size is ``(B / nrow, nrow)``. Default: ``8``. - padding (int, optional): amount of padding. Default: ``2``. - normalize (bool, optional): If True, shift the image to the range (0, 1), - by the min and max values specified by :attr:`range`. Default: ``False``. - range (tuple, optional): tuple (min, max) where min and max are numbers, - then these numbers are used to normalize the image. By default, min and max - are computed from the tensor. - scale_each (bool, optional): If ``True``, scale each image in the batch of - images separately rather than the (min, max) over all images. Default: ``False``. - pad_value (float, optional): Value for the padded pixels. Default: ``0``. - - Example: - See this notebook `here `_ - - """ - if not (torch.is_tensor(tensor) or - (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): - raise TypeError('tensor or list of tensors expected, got {}'.format(type(tensor))) - - # if list of tensors, convert to a 4D mini-batch Tensor - if isinstance(tensor, list): - tensor = torch.stack(tensor, dim=0) - - if tensor.dim() == 2: # single image H x W - tensor = tensor.unsqueeze(0) - if tensor.dim() == 3: # single image - if tensor.size(0) == 1: # if single-channel, convert to 3-channel - tensor = torch.cat((tensor, tensor, tensor), 0) - tensor = tensor.unsqueeze(0) - - if tensor.dim() == 4 and tensor.size(1) == 1: # single-channel images - tensor = torch.cat((tensor, tensor, tensor), 1) - - if normalize is True: - tensor = tensor.clone() # avoid modifying tensor in-place - if range is not None: - assert isinstance(range, tuple), \ - "range has to be a tuple (min, max) if specified. min and max are numbers" - - def norm_ip(img, min, max): - img.clamp_(min=min, max=max) - img.add_(-min).div_(max - min + 1e-5) - - def norm_range(t, range): - if range is not None: - norm_ip(t, range[0], range[1]) - else: - norm_ip(t, float(t.min()), float(t.max())) - - if scale_each is True: - for t in tensor: # loop over mini-batch dimension - norm_range(t, range) - else: - norm_range(tensor, range) - - if tensor.size(0) == 1: - return tensor.squeeze(0) - - # Title - font = 1 - fontScale = 1 - thickness = 1 - colors = colors if colors else [(255, 0, 0)] - org = title_pos if title_pos else (10, 40) - - # make the mini-batch of images into a grid - nmaps = tensor.size(0) - xmaps = min(nrow, nmaps) - ymaps = int(math.ceil(float(nmaps) / xmaps)) - height, width = int(tensor.size(2) + padding), int(tensor.size(3) + padding) - num_channels = tensor.size(1) - grid = tensor.new_full((num_channels, height * ymaps + padding, width * xmaps + padding), pad_value) - k = 0 - for y in irange(ymaps): - for x in irange(xmaps): - if k >= nmaps: - break - - working_tensor = tensor[k] - color = colors[k % len(colors)] - if titles is not None: - working_image = cv2.UMat( - np.asarray(np.transpose(working_tensor.numpy(), (1, 2, 0)) * 255).astype('uint8')) - image = cv2.putText(working_image, f'{str(titles[k])}', org, font, - fontScale, color, thickness, cv2.LINE_AA) - working_tensor = transforms.ToTensor()(image.get()) - - grid.narrow(1, y * height + padding, height - padding) \ - .narrow(2, x * width + padding, width - padding) \ - .copy_(working_tensor) - k = k + 1 - return grid From 0bbf956b8dc4d01a6eeaf3e80f7ce249e992d6da Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Mon, 14 Dec 2020 10:18:19 -0800 Subject: [PATCH 21/40] remove not-used args for dataset creation Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/dataset.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/monai/apps/deepgrow/dataset.py b/monai/apps/deepgrow/dataset.py index 4183958837..d031e83500 100644 --- a/monai/apps/deepgrow/dataset.py +++ b/monai/apps/deepgrow/dataset.py @@ -35,7 +35,6 @@ def __init__( self, dimension: int, pixdim: Sequence[float], - spatial_size: Union[Sequence[int], int], root_dir: str, task: str, section: str, @@ -50,7 +49,6 @@ def __init__( ) -> None: self.dimension = dimension self.pixdim = pixdim - self.spatial_size = spatial_size self.limit = limit super().__init__( From 42ebb8475944882ef685320025f5aa2dd6ea5eea Mon Sep 17 00:00:00 2001 From: Yiheng Wang <68361391+yiheng-wang-nv@users.noreply.github.com> Date: Tue, 15 Dec 2020 04:34:05 +0800 Subject: [PATCH 22/40] Update hausdorff metric and surface distance (#1351) * Update hausdorff metric Signed-off-by: yiheng-wang-nv * Update surface distance Signed-off-by: yiheng-wang-nv * fix reduction type error Signed-off-by: yiheng-wang-nv * Add handlers for new metrics Signed-off-by: yiheng-wang-nv * Simplify distance code Signed-off-by: yiheng-wang-nv * autofixes and typo fixes Signed-off-by: Wenqi Li * fixes lgtm typos Signed-off-by: Wenqi Li Co-authored-by: Wenqi Li Signed-off-by: Sachidanand Alle --- docs/source/handlers.rst | 14 +- docs/source/metrics.rst | 12 +- monai/apps/datasets.py | 23 +-- monai/apps/utils.py | 7 + monai/config/deviceconfig.py | 4 +- monai/data/image_reader.py | 2 + monai/data/utils.py | 14 +- monai/engines/evaluator.py | 2 + monai/engines/multi_gpu_supervised_trainer.py | 5 + monai/engines/trainer.py | 2 + monai/handlers/__init__.py | 2 + monai/handlers/hausdorff_distance.py | 99 ++++++++++++ monai/handlers/surface_distance.py | 95 +++++++++++ monai/handlers/utils.py | 2 + monai/inferers/inferer.py | 2 + monai/inferers/utils.py | 2 + monai/metrics/__init__.py | 4 +- monai/metrics/confusion_matrix.py | 7 +- monai/metrics/hausdorff_distance.py | 151 ++++++++++++++---- monai/metrics/meandice.py | 3 +- monai/metrics/rocauc.py | 25 ++- monai/metrics/surface_distance.py | 136 +++++++++++++--- monai/metrics/utils.py | 55 +++---- monai/networks/utils.py | 23 ++- monai/optimizers/utils.py | 2 + monai/transforms/compose.py | 2 + monai/transforms/utils.py | 12 +- monai/utils/module.py | 5 +- monai/visualize/img2tensorboard.py | 10 +- tests/min_tests.py | 2 + tests/test_handler_hausdorff_distance.py | 88 ++++++++++ tests/test_handler_surface_distance.py | 88 ++++++++++ tests/test_hausdorff_distance.py | 72 +++++---- tests/test_surface_distance.py | 67 ++++---- 34 files changed, 822 insertions(+), 217 deletions(-) create mode 100644 monai/handlers/hausdorff_distance.py create mode 100644 monai/handlers/surface_distance.py create mode 100644 tests/test_handler_hausdorff_distance.py create mode 100644 tests/test_handler_surface_distance.py diff --git a/docs/source/handlers.rst b/docs/source/handlers.rst index 475a44de64..2962f725d8 100644 --- a/docs/source/handlers.rst +++ b/docs/source/handlers.rst @@ -34,12 +34,24 @@ ROC AUC metrics handler :members: -Confusion Matrix metrics handler +Confusion matrix metrics handler -------------------------------- .. autoclass:: ConfusionMatrix :members: +Hausdorff distance metrics handler +---------------------------------- +.. autoclass:: HausdorffDistance + :members: + + +Surface distance metrics handler +-------------------------------- +.. autoclass:: SurfaceDistance + :members: + + Metric logger ------------- .. autoclass:: MetricLogger diff --git a/docs/source/metrics.rst b/docs/source/metrics.rst index d3f5a347c7..0bcfbd4240 100644 --- a/docs/source/metrics.rst +++ b/docs/source/metrics.rst @@ -17,21 +17,27 @@ Metrics -------------------------- .. autofunction:: compute_roc_auc -`Confusion Matrix` +`Confusion matrix` ------------------ .. autofunction:: get_confusion_matrix .. autoclass:: ConfusionMatrixMetric :members: -`Hausdorff Distance` +`Hausdorff distance` -------------------- .. autofunction:: compute_hausdorff_distance -`Average Surface Distance` +.. autoclass:: HausdorffDistanceMetric + :members: + +`Average surface distance` -------------------------- .. autofunction:: compute_average_surface_distance +.. autoclass:: SurfaceDistanceMetric + :members: + `Occlusion sensitivity` ----------------------- .. autofunction:: compute_occlusion_sensitivity \ No newline at end of file diff --git a/monai/apps/datasets.py b/monai/apps/datasets.py index 99643fd4db..6272b50b4c 100644 --- a/monai/apps/datasets.py +++ b/monai/apps/datasets.py @@ -26,6 +26,8 @@ from monai.transforms import LoadImaged, Randomizable from monai.utils import ensure_tuple +__all__ = ["MedNISTDataset", "DecathlonDataset", "CrossValidation"] + class MedNISTDataset(Randomizable, CacheDataset): """ @@ -121,7 +123,7 @@ def _generate_data_list(self, dataset_dir: str) -> List[Dict]: image_class.extend([i] * num_each[i]) num_total = len(image_class) - data = list() + data = [] for i in range(num_total): self.randomize() @@ -302,18 +304,17 @@ def _generate_data_list(self, dataset_dir: str) -> List[Dict]: def _split_datalist(self, datalist: List[Dict]) -> List[Dict]: if self.section == "test": return datalist - else: - length = len(datalist) - indices = np.arange(length) - self.randomize(indices) + length = len(datalist) + indices = np.arange(length) + self.randomize(indices) - val_length = int(length * self.val_frac) - if self.section == "training": - self.indices = indices[val_length:] - else: - self.indices = indices[:val_length] + val_length = int(length * self.val_frac) + if self.section == "training": + self.indices = indices[val_length:] + else: + self.indices = indices[:val_length] - return [datalist[i] for i in self.indices] + return [datalist[i] for i in self.indices] class CrossValidation: diff --git a/monai/apps/utils.py b/monai/apps/utils.py index 8461bf4a29..e48dfb63f2 100644 --- a/monai/apps/utils.py +++ b/monai/apps/utils.py @@ -31,6 +31,13 @@ else: tqdm, has_tqdm = optional_import("tqdm", "4.47.0", min_version, "tqdm") +__all__ = [ + "check_hash", + "download_url", + "extractall", + "download_and_extract", +] + def check_hash(filepath: str, val: Optional[str] = None, hash_type: str = "md5") -> bool: """ diff --git a/monai/config/deviceconfig.py b/monai/config/deviceconfig.py index 355069f941..c70d495555 100644 --- a/monai/config/deviceconfig.py +++ b/monai/config/deviceconfig.py @@ -102,7 +102,7 @@ def set_visible_devices(*dev_inds): def _dict_append(in_dict, key, fn): try: - in_dict[key] = fn() + in_dict[key] = fn() if callable(fn) else fn except BaseException: in_dict[key] = "UNKNOWN for given OS" @@ -197,7 +197,7 @@ def get_gpu_info() -> OrderedDict: _dict_append(output, "Current device", lambda: torch.cuda.current_device()) _dict_append(output, "Library compiled for CUDA architectures", lambda: torch.cuda.get_arch_list()) for gpu in range(num_gpus): - _dict_append(output, "Info for GPU", lambda: gpu) + _dict_append(output, "Info for GPU", gpu) gpu_info = torch.cuda.get_device_properties(gpu) _dict_append(output, "\tName", lambda: gpu_info.name) _dict_append(output, "\tIs integrated", lambda: bool(gpu_info.is_integrated)) diff --git a/monai/data/image_reader.py b/monai/data/image_reader.py index 5b0450ab8a..32d03115ed 100644 --- a/monai/data/image_reader.py +++ b/monai/data/image_reader.py @@ -37,6 +37,8 @@ Nifti1Image, _ = optional_import("nibabel.nifti1", name="Nifti1Image") PILImage, has_pil = optional_import("PIL.Image") +__all__ = ["ImageReader", "ITKReader", "NibabelReader", "NumpyReader", "PILReader"] + class ImageReader(ABC): """Abstract class to define interface APIs to load image files. diff --git a/monai/data/utils.py b/monai/data/utils.py index b63ff6e66b..c5fcbf3c86 100644 --- a/monai/data/utils.py +++ b/monai/data/utils.py @@ -134,8 +134,7 @@ def dense_patch_slices( dim_starts.append(start_idx) starts.append(dim_starts) out = np.asarray([x.flatten() for x in np.meshgrid(*starts, indexing="ij")]).T - slices = [tuple(slice(s, s + patch_size[d]) for d, s in enumerate(x)) for x in out] - return slices + return [tuple(slice(s, s + patch_size[d]) for d, s in enumerate(x)) for x in out] def iter_patch( @@ -550,7 +549,7 @@ def is_supported_format(filename: Union[Sequence[str], str], suffixes: Sequence[ filenames: Sequence[str] = ensure_tuple(filename) for name in filenames: tokens: Sequence[str] = PurePath(name).suffixes - if len(tokens) == 0 or not any(("." + s.lower()) in "".join(tokens) for s in suffixes): + if len(tokens) == 0 or all("." + s.lower() not in "".join(tokens) for s in suffixes): return False return True @@ -598,7 +597,7 @@ def partition_dataset( """ data_len = len(data) - datasets = list() + datasets = [] indices = list(range(data_len)) if shuffle: @@ -682,7 +681,7 @@ def partition_dataset_classes( """ if not classes or len(classes) != len(data): raise ValueError(f"length of classes {classes} must match the dataset length {len(data)}.") - datasets = list() + datasets = [] class_indices = defaultdict(list) for i, c in enumerate(classes): class_indices[c].append(i) @@ -698,7 +697,7 @@ def partition_dataset_classes( drop_last=drop_last, even_divisible=even_divisible, ) - if len(class_partition_indices) == 0: + if not class_partition_indices: class_partition_indices = per_class_partition_indices else: for part, data_indices in zip(class_partition_indices, per_class_partition_indices): @@ -735,8 +734,7 @@ def select_cross_validation_folds(partitions: Sequence[Iterable], folds: Union[S >>> select_cross_validation_folds(partitions, [-1, 2]) [9, 10, 5, 6] """ - data_list = [data_item for fold_id in ensure_tuple(folds) for data_item in partitions[fold_id]] - return data_list + return [data_item for fold_id in ensure_tuple(folds) for data_item in partitions[fold_id]] class DistributedSampler(_TorchDistributedSampler): diff --git a/monai/engines/evaluator.py b/monai/engines/evaluator.py index 930747edfb..306be5f2db 100644 --- a/monai/engines/evaluator.py +++ b/monai/engines/evaluator.py @@ -28,6 +28,8 @@ Engine, _ = optional_import("ignite.engine", "0.4.2", exact_version, "Engine") Metric, _ = optional_import("ignite.metrics", "0.4.2", exact_version, "Metric") +__all__ = ["Evaluator", "SupervisedEvaluator", "EnsembleEvaluator"] + class Evaluator(Workflow): """ diff --git a/monai/engines/multi_gpu_supervised_trainer.py b/monai/engines/multi_gpu_supervised_trainer.py index 7110a09c0f..33268308e5 100644 --- a/monai/engines/multi_gpu_supervised_trainer.py +++ b/monai/engines/multi_gpu_supervised_trainer.py @@ -29,6 +29,11 @@ Engine, _ = optional_import("ignite.engine", "0.4.2", exact_version, "Engine") Metric, _ = optional_import("ignite.metrics", "0.4.2", exact_version, "Metric") +__all__ = [ + "create_multigpu_supervised_trainer", + "create_multigpu_supervised_evaluator", +] + def _default_transform(_x: torch.Tensor, _y: torch.Tensor, _y_pred: torch.Tensor, loss: torch.Tensor) -> float: return loss.item() diff --git a/monai/engines/trainer.py b/monai/engines/trainer.py index c625d1b669..64b38e2646 100644 --- a/monai/engines/trainer.py +++ b/monai/engines/trainer.py @@ -29,6 +29,8 @@ Engine, _ = optional_import("ignite.engine", "0.4.2", exact_version, "Engine") Metric, _ = optional_import("ignite.metrics", "0.4.2", exact_version, "Metric") +__all__ = ["Trainer", "SupervisedTrainer", "GanTrainer"] + class Trainer(Workflow): """ diff --git a/monai/handlers/__init__.py b/monai/handlers/__init__.py index 9becd5c5f6..37715cad52 100644 --- a/monai/handlers/__init__.py +++ b/monai/handlers/__init__.py @@ -13,6 +13,7 @@ from .checkpoint_saver import CheckpointSaver from .classification_saver import ClassificationSaver from .confusion_matrix import ConfusionMatrix +from .hausdorff_distance import HausdorffDistance from .lr_schedule_handler import LrScheduleHandler from .mean_dice import MeanDice from .metric_logger import MetricLogger @@ -20,6 +21,7 @@ from .segmentation_saver import SegmentationSaver from .smartcache_handler import SmartCacheHandler from .stats_handler import StatsHandler +from .surface_distance import SurfaceDistance from .tensorboard_handlers import TensorBoardImageHandler, TensorBoardStatsHandler from .utils import * from .validation_handler import ValidationHandler diff --git a/monai/handlers/hausdorff_distance.py b/monai/handlers/hausdorff_distance.py new file mode 100644 index 0000000000..56b8b341ff --- /dev/null +++ b/monai/handlers/hausdorff_distance.py @@ -0,0 +1,99 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import Callable, Optional, Sequence + +import torch + +from monai.metrics import HausdorffDistanceMetric +from monai.utils import MetricReduction, exact_version, optional_import + +NotComputableError, _ = optional_import("ignite.exceptions", "0.4.2", exact_version, "NotComputableError") +Metric, _ = optional_import("ignite.metrics", "0.4.2", exact_version, "Metric") +reinit__is_reduced, _ = optional_import("ignite.metrics.metric", "0.4.2", exact_version, "reinit__is_reduced") +sync_all_reduce, _ = optional_import("ignite.metrics.metric", "0.4.2", exact_version, "sync_all_reduce") + + +class HausdorffDistance(Metric): # type: ignore[valid-type, misc] # due to optional_import + """ + Computes Hausdorff distance from full size Tensor and collects average over batch, class-channels, iterations. + """ + + def __init__( + self, + include_background: bool = False, + distance_metric: str = "euclidean", + percentile: Optional[float] = None, + directed: bool = False, + output_transform: Callable = lambda x: x, + device: Optional[torch.device] = None, + ) -> None: + """ + + Args: + include_background: whether to include distance computation on the first channel of the predicted output. + Defaults to ``False``. + distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] + the metric used to compute surface distance. Defaults to ``"euclidean"``. + percentile: an optional float number between 0 and 100. If specified, the corresponding + percentile of the Hausdorff Distance rather than the maximum result will be achieved. + Defaults to ``None``. + directed: whether to calculate directed Hausdorff distance. Defaults to ``False``. + output_transform: transform the ignite.engine.state.output into [y_pred, y] pair. + device: device specification in case of distributed computation usage. + + """ + super().__init__(output_transform, device=device) + self.hd = HausdorffDistanceMetric( + include_background=include_background, + distance_metric=distance_metric, + percentile=percentile, + directed=directed, + reduction=MetricReduction.MEAN, + ) + self._sum = 0.0 + self._num_examples = 0 + + @reinit__is_reduced + def reset(self) -> None: + self._sum = 0.0 + self._num_examples = 0 + + @reinit__is_reduced + def update(self, output: Sequence[torch.Tensor]) -> None: + """ + Args: + output: sequence with contents [y_pred, y]. + + Raises: + ValueError: When ``output`` length is not 2. The metric can only support y_pred and y. + + """ + if len(output) != 2: + raise ValueError(f"output must have length 2, got {len(output)}.") + y_pred, y = output + score, not_nans = self.hd(y_pred, y) + not_nans = int(not_nans.item()) + + # add all items in current batch + self._sum += score.item() * not_nans + self._num_examples += not_nans + + @sync_all_reduce("_sum", "_num_examples") + def compute(self) -> float: + """ + Raises: + NotComputableError: When ``compute`` is called before an ``update`` occurs. + + """ + if self._num_examples == 0: + raise NotComputableError("HausdorffDistance must have at least one example before it can be computed.") + return self._sum / self._num_examples diff --git a/monai/handlers/surface_distance.py b/monai/handlers/surface_distance.py new file mode 100644 index 0000000000..b35089423c --- /dev/null +++ b/monai/handlers/surface_distance.py @@ -0,0 +1,95 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import Callable, Optional, Sequence + +import torch + +from monai.metrics import SurfaceDistanceMetric +from monai.utils import MetricReduction, exact_version, optional_import + +NotComputableError, _ = optional_import("ignite.exceptions", "0.4.2", exact_version, "NotComputableError") +Metric, _ = optional_import("ignite.metrics", "0.4.2", exact_version, "Metric") +reinit__is_reduced, _ = optional_import("ignite.metrics.metric", "0.4.2", exact_version, "reinit__is_reduced") +sync_all_reduce, _ = optional_import("ignite.metrics.metric", "0.4.2", exact_version, "sync_all_reduce") + + +class SurfaceDistance(Metric): # type: ignore[valid-type, misc] # due to optional_import + """ + Computes surface distance from full size Tensor and collects average over batch, class-channels, iterations. + """ + + def __init__( + self, + include_background: bool = False, + symmetric: bool = False, + distance_metric: str = "euclidean", + output_transform: Callable = lambda x: x, + device: Optional[torch.device] = None, + ) -> None: + """ + + Args: + include_background: whether to include distance computation on the first channel of the predicted output. + Defaults to ``False``. + symmetric: whether to calculate the symmetric average surface distance between + `seg_pred` and `seg_gt`. Defaults to ``False``. + distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] + the metric used to compute surface distance. Defaults to ``"euclidean"``. + output_transform: transform the ignite.engine.state.output into [y_pred, y] pair. + device: device specification in case of distributed computation usage. + + """ + super().__init__(output_transform, device=device) + self.hd = SurfaceDistanceMetric( + include_background=include_background, + symmetric=symmetric, + distance_metric=distance_metric, + reduction=MetricReduction.MEAN, + ) + self._sum = 0.0 + self._num_examples = 0 + + @reinit__is_reduced + def reset(self) -> None: + self._sum = 0.0 + self._num_examples = 0 + + @reinit__is_reduced + def update(self, output: Sequence[torch.Tensor]) -> None: + """ + Args: + output: sequence with contents [y_pred, y]. + + Raises: + ValueError: When ``output`` length is not 2. The metric can only support y_pred and y. + + """ + if len(output) != 2: + raise ValueError(f"output must have length 2, got {len(output)}.") + y_pred, y = output + score, not_nans = self.hd(y_pred, y) + not_nans = int(not_nans.item()) + + # add all items in current batch + self._sum += score.item() * not_nans + self._num_examples += not_nans + + @sync_all_reduce("_sum", "_num_examples") + def compute(self) -> float: + """ + Raises: + NotComputableError: When ``compute`` is called before an ``update`` occurs. + + """ + if self._num_examples == 0: + raise NotComputableError("SurfaceDistance must have at least one example before it can be computed.") + return self._sum / self._num_examples diff --git a/monai/handlers/utils.py b/monai/handlers/utils.py index e401e18b0c..e96521f47e 100644 --- a/monai/handlers/utils.py +++ b/monai/handlers/utils.py @@ -21,6 +21,8 @@ else: Engine, _ = optional_import("ignite.engine", "0.4.2", exact_version, "Engine") +__all__ = ["stopping_fn_from_metric", "stopping_fn_from_loss", "all_gather"] + def stopping_fn_from_metric(metric_name: str) -> Callable[[Engine], Any]: """ diff --git a/monai/inferers/inferer.py b/monai/inferers/inferer.py index eea56d3d45..36cc3de478 100644 --- a/monai/inferers/inferer.py +++ b/monai/inferers/inferer.py @@ -17,6 +17,8 @@ from monai.inferers.utils import sliding_window_inference from monai.utils import BlendMode, PytorchPadMode +__all__ = ["Inferer", "SimpleInferer", "SlidingWindowInferer"] + class Inferer(ABC): """ diff --git a/monai/inferers/utils.py b/monai/inferers/utils.py index 48bd334061..c7db520cb2 100644 --- a/monai/inferers/utils.py +++ b/monai/inferers/utils.py @@ -17,6 +17,8 @@ from monai.data.utils import compute_importance_map, dense_patch_slices, get_valid_patch_size from monai.utils import BlendMode, PytorchPadMode, fall_back_tuple +__all__ = ["sliding_window_inference"] + def sliding_window_inference( inputs: torch.Tensor, diff --git a/monai/metrics/__init__.py b/monai/metrics/__init__.py index 61e288cf0c..a0d626f45b 100644 --- a/monai/metrics/__init__.py +++ b/monai/metrics/__init__.py @@ -10,9 +10,9 @@ # limitations under the License. from .confusion_matrix import ConfusionMatrixMetric, compute_confusion_matrix_metric, get_confusion_matrix -from .hausdorff_distance import compute_hausdorff_distance +from .hausdorff_distance import * from .meandice import DiceMetric, compute_meandice from .occlusion_sensitivity import compute_occlusion_sensitivity from .rocauc import compute_roc_auc -from .surface_distance import compute_average_surface_distance +from .surface_distance import SurfaceDistanceMetric, compute_average_surface_distance from .utils import * diff --git a/monai/metrics/confusion_matrix.py b/monai/metrics/confusion_matrix.py index 8d2304cea3..916a07439f 100644 --- a/monai/metrics/confusion_matrix.py +++ b/monai/metrics/confusion_matrix.py @@ -15,6 +15,7 @@ import torch from monai.metrics.utils import * +from monai.utils import MetricReduction class ConfusionMatrixMetric: @@ -256,17 +257,15 @@ def compute_confusion_matrix_metric(metric_name: str, confusion_matrix: torch.Te elif metric == "mk": ppv = torch.where((tp + fp) > 0, tp / (tp + fp), nan_tensor) npv = torch.where((tn + fn) > 0, tn / (tn + fn), nan_tensor) - npv = tn / (tn + fn) numerator = ppv + npv - 1.0 denominator = 1.0 else: raise NotImplementedError("the metric is not implemented.") if isinstance(denominator, torch.Tensor): - result = torch.where(denominator != 0, numerator / denominator, nan_tensor) + return torch.where(denominator != 0, numerator / denominator, nan_tensor) else: - result = numerator / denominator - return result + return numerator / denominator def check_confusion_matrix_metric_name(metric_name: str): diff --git a/monai/metrics/hausdorff_distance.py b/monai/metrics/hausdorff_distance.py index 1cfaea2449..c649cd3a04 100644 --- a/monai/metrics/hausdorff_distance.py +++ b/monai/metrics/hausdorff_distance.py @@ -9,80 +9,163 @@ # See the License for the specific language governing permissions and # limitations under the License. +import warnings from typing import Optional, Union import numpy as np import torch -from .utils import get_mask_edges, get_surface_distance +from monai.metrics.utils import * +from monai.utils import MetricReduction + +__all__ = ["HausdorffDistanceMetric", "compute_hausdorff_distance", "compute_percent_hausdorff_distance"] + + +class HausdorffDistanceMetric: + """ + Compute Hausdorff Distance between two tensors. It can support both multi-classes and multi-labels tasks. + It supports both directed and non-directed Hausdorff distance calculation. In addition, specify the `percentile` + parameter can get the percentile of the distance. + Input `y_pred` (BNHW[D] where N is number of classes) is compared with ground truth `y` (BNHW[D]). + `y_preds` is expected to have binarized predictions and `y` should be in one-hot format. + You can use suitable transforms in ``monai.transforms.post`` first to achieve binarized values. + + Args: + include_background: whether to include distance computation on the first channel of + the predicted output. Defaults to ``False``. + distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] + the metric used to compute surface distance. Defaults to ``"euclidean"``. + percentile: an optional float number between 0 and 100. If specified, the corresponding + percentile of the Hausdorff Distance rather than the maximum result will be achieved. + Defaults to ``None``. + directed: whether to calculate directed Hausdorff distance. Defaults to ``False``. + reduction: {``"none"``, ``"mean"``, ``"sum"``, ``"mean_batch"``, ``"sum_batch"``, + ``"mean_channel"``, ``"sum_channel"``} + Define the mode to reduce computation result of 1 batch data. Defaults to ``"mean"``. + + """ + + def __init__( + self, + include_background: bool = False, + distance_metric: str = "euclidean", + percentile: Optional[float] = None, + directed: bool = False, + reduction: Union[MetricReduction, str] = MetricReduction.MEAN, + ) -> None: + super().__init__() + self.include_background = include_background + self.distance_metric = distance_metric + self.percentile = percentile + self.directed = directed + self.reduction = reduction + + def __call__(self, y_pred: torch.Tensor, y: torch.Tensor): + """ + Args: + y_pred: input data to compute, typical segmentation model output. + It must be one-hot format and first dim is batch, example shape: [16, 3, 32, 32]. The values + should be binarized. + y: ground truth to compute the distance. It must be one-hot format and first dim is batch. + The values should be binarized. + + Raises: + ValueError: when `y` is not a binarized tensor. + ValueError: when `y_pred` has less than three dimensions. + """ + if not torch.all(y_pred.byte() == y_pred): + warnings.warn("y_pred is not a binarized tensor here!") + if not torch.all(y.byte() == y): + raise ValueError("y should be a binarized tensor.") + dims = y_pred.ndimension() + if dims < 3: + raise ValueError("y_pred should have at least three dimensions.") + # compute (BxC) for each channel for each batch + f = compute_hausdorff_distance( + y_pred=y_pred, + y=y, + include_background=self.include_background, + distance_metric=self.distance_metric, + percentile=self.percentile, + directed=self.directed, + ) + + # do metric reduction + f, not_nans = do_metric_reduction(f, self.reduction) + return f, not_nans def compute_hausdorff_distance( - seg_pred: Union[np.ndarray, torch.Tensor], - seg_gt: Union[np.ndarray, torch.Tensor], - label_idx: int, + y_pred: Union[np.ndarray, torch.Tensor], + y: Union[np.ndarray, torch.Tensor], + include_background: bool = False, distance_metric: str = "euclidean", percentile: Optional[float] = None, directed: bool = False, ): """ - Compute the Hausdorff distance. The user has the option to calculate the - directed or non-directed Hausdorff distance. By default, the non-directed - Hausdorff distance is calculated. In addition, specify the `percentile` - parameter can get the percentile of the distance. + Compute the Hausdorff distance. Args: - seg_pred: the predicted binary or labelfield image. - seg_gt: the actual binary or labelfield image. - label_idx: for labelfield images, convert to binary with - `seg_pred = seg_pred == label_idx`. + y_pred: input data to compute, typical segmentation model output. + It must be one-hot format and first dim is batch, example shape: [16, 3, 32, 32]. The values + should be binarized. + y: ground truth to compute mean the distance. It must be one-hot format and first dim is batch. + The values should be binarized. + include_background: whether to skip distance computation on the first channel of + the predicted output. Defaults to ``False``. distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] the metric used to compute surface distance. Defaults to ``"euclidean"``. percentile: an optional float number between 0 and 100. If specified, the corresponding percentile of the Hausdorff Distance rather than the maximum result will be achieved. Defaults to ``None``. - directed: calculate directed Hausdorff distance. Defaults to ``False``. + directed: whether to calculate directed Hausdorff distance. Defaults to ``False``. """ - (edges_pred, edges_gt) = get_mask_edges(seg_pred, seg_gt, label_idx) - hd = compute_percent_hausdorff_distance(edges_pred, edges_gt, label_idx, distance_metric, percentile) - if directed: - return hd + if not include_background: + y_pred, y = ignore_background( + y_pred=y_pred, + y=y, + ) - hd2 = compute_percent_hausdorff_distance(edges_gt, edges_pred, label_idx, distance_metric, percentile) - return max(hd, hd2) + y = y.float() + y_pred = y_pred.float() + + if y.shape != y_pred.shape: + raise ValueError("y_pred and y should have same shapes.") + + batch_size, n_class = y_pred.shape[:2] + hd = np.empty((batch_size, n_class)) + for b, c in np.ndindex(batch_size, n_class): + (edges_pred, edges_gt) = get_mask_edges(y_pred[b, c], y[b, c]) + distance_1 = compute_percent_hausdorff_distance(edges_pred, edges_gt, distance_metric, percentile) + if directed: + hd[b, c] = distance_1 + else: + distance_2 = compute_percent_hausdorff_distance(edges_gt, edges_pred, distance_metric, percentile) + hd[b, c] = max(distance_1, distance_2) + return torch.from_numpy(hd) def compute_percent_hausdorff_distance( edges_pred: np.ndarray, edges_gt: np.ndarray, - label_idx: int, distance_metric: str = "euclidean", percentile: Optional[float] = None, ): """ This function is used to compute the directed Hausdorff distance. - - Args: - edges_pred: the edge of the predictions. - edges_gt: the edge of the ground truth. - label_idx: for labelfield images, convert to binary with - `seg_pred = seg_pred == label_idx`. - distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] - the metric used to compute surface distance. Defaults to ``"euclidean"``. - percentile: an optional float number between 0 and 100. If specified, the corresponding - percentile of the Hausdorff Distance rather than the maximum result will be achieved. - Defaults to ``None``. """ - surface_distance = get_surface_distance(edges_pred, edges_gt, label_idx, distance_metric=distance_metric) + surface_distance = get_surface_distance(edges_pred, edges_gt, distance_metric=distance_metric) - # for input without foreground + # for both pred and gt do not have foreground if surface_distance.shape == (0,): - return np.inf + return np.nan if not percentile: return surface_distance.max() + elif 0 <= percentile <= 100: return np.percentile(surface_distance, percentile) else: diff --git a/monai/metrics/meandice.py b/monai/metrics/meandice.py index 18382e7849..53716909fe 100644 --- a/monai/metrics/meandice.py +++ b/monai/metrics/meandice.py @@ -15,6 +15,7 @@ import torch from monai.metrics.utils import * +from monai.utils import MetricReduction class DiceMetric: @@ -30,7 +31,7 @@ class DiceMetric: Args: include_background: whether to skip Dice computation on the first channel of - the predicted output. Defaults to True. + the predicted output. Defaults to ``True``. reduction: {``"none"``, ``"mean"``, ``"sum"``, ``"mean_batch"``, ``"sum_batch"``, ``"mean_channel"``, ``"sum_channel"``} Define the mode to reduce computation result of 1 batch data. Defaults to ``"mean"``. diff --git a/monai/metrics/rocauc.py b/monai/metrics/rocauc.py index d5c1cf20d2..7b26560d57 100644 --- a/monai/metrics/rocauc.py +++ b/monai/metrics/rocauc.py @@ -132,16 +132,15 @@ def compute_roc_auc( average = Average(average) if average == Average.MICRO: return _calculate(y.flatten(), y_pred.flatten()) - else: - y, y_pred = y.transpose(0, 1), y_pred.transpose(0, 1) - auc_values = [_calculate(y_, y_pred_) for y_, y_pred_ in zip(y, y_pred)] - if average == Average.NONE: - return auc_values - if average == Average.MACRO: - return np.mean(auc_values) - if average == Average.WEIGHTED: - weights = [sum(y_) for y_ in y] - return np.average(auc_values, weights=weights) - raise ValueError( - f'Unsupported average: {average}, available options are ["macro", "weighted", "micro", "none"].' - ) + y, y_pred = y.transpose(0, 1), y_pred.transpose(0, 1) + auc_values = [_calculate(y_, y_pred_) for y_, y_pred_ in zip(y, y_pred)] + if average == Average.NONE: + return auc_values + if average == Average.MACRO: + return np.mean(auc_values) + if average == Average.WEIGHTED: + weights = [sum(y_) for y_ in y] + return np.average(auc_values, weights=weights) + raise ValueError( + f'Unsupported average: {average}, available options are ["macro", "weighted", "micro", "none"].' + ) diff --git a/monai/metrics/surface_distance.py b/monai/metrics/surface_distance.py index 7914364b9c..8dcbe4d9f6 100644 --- a/monai/metrics/surface_distance.py +++ b/monai/metrics/surface_distance.py @@ -9,49 +9,141 @@ # See the License for the specific language governing permissions and # limitations under the License. +import warnings from typing import Union import numpy as np import torch -from .utils import get_mask_edges, get_surface_distance +from monai.metrics.utils import * +from monai.utils import MetricReduction + + +class SurfaceDistanceMetric: + """ + Compute Surface Distance between two tensors. It can support both multi-classes and multi-labels tasks. + It supports both symmetric and asymmetric surface distance calculation. + Input `y_pred` (BNHW[D] where N is number of classes) is compared with ground truth `y` (BNHW[D]). + `y_preds` is expected to have binarized predictions and `y` should be in one-hot format. + You can use suitable transforms in ``monai.transforms.post`` first to achieve binarized values. + + Args: + include_background: whether to skip distance computation on the first channel of + the predicted output. Defaults to ``False``. + symmetric: whether to calculate the symmetric average surface distance between + `seg_pred` and `seg_gt`. Defaults to ``False``. + distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] + the metric used to compute surface distance. Defaults to ``"euclidean"``. + reduction: {``"none"``, ``"mean"``, ``"sum"``, ``"mean_batch"``, ``"sum_batch"``, + ``"mean_channel"``, ``"sum_channel"``} + Define the mode to reduce computation result of 1 batch data. Defaults to ``"mean"``. + + """ + + def __init__( + self, + include_background: bool = False, + symmetric: bool = False, + distance_metric: str = "euclidean", + reduction: Union[MetricReduction, str] = MetricReduction.MEAN, + ) -> None: + super().__init__() + self.include_background = include_background + self.distance_metric = distance_metric + self.symmetric = symmetric + self.reduction = reduction + + def __call__(self, y_pred: torch.Tensor, y: torch.Tensor): + """ + Args: + y_pred: input data to compute, typical segmentation model output. + It must be one-hot format and first dim is batch, example shape: [16, 3, 32, 32]. The values + should be binarized. + y: ground truth to compute the distance. It must be one-hot format and first dim is batch. + The values should be binarized. + + Raises: + ValueError: when `y` is not a binarized tensor. + ValueError: when `y_pred` has less than three dimensions. + """ + if not torch.all(y_pred.byte() == y_pred): + warnings.warn("y_pred is not a binarized tensor here!") + if not torch.all(y.byte() == y): + raise ValueError("y should be a binarized tensor.") + dims = y_pred.ndimension() + if dims < 3: + raise ValueError("y_pred should have at least three dimensions.") + # compute (BxC) for each channel for each batch + f = compute_average_surface_distance( + y_pred=y_pred, + y=y, + include_background=self.include_background, + symmetric=self.symmetric, + distance_metric=self.distance_metric, + ) + + # do metric reduction + f, not_nans = do_metric_reduction(f, self.reduction) + return f, not_nans def compute_average_surface_distance( - seg_pred: Union[np.ndarray, torch.Tensor], - seg_gt: Union[np.ndarray, torch.Tensor], - label_idx: int, + y_pred: Union[np.ndarray, torch.Tensor], + y: Union[np.ndarray, torch.Tensor], + include_background: bool = False, symmetric: bool = False, distance_metric: str = "euclidean", ): """ - This function is used to compute the Average Surface Distance from `seg_pred` to `seg_gt` + This function is used to compute the Average Surface Distance from `y_pred` to `y` under the default setting. In addition, if sets ``symmetric = True``, the average symmetric surface distance between these two inputs will be returned. Args: - seg_pred: first binary or labelfield image. - seg_gt: second binary or labelfield image. - label_idx: for labelfield images, convert to binary with - `seg_pred = seg_pred == label_idx`. - symmetric: if calculate the symmetric average surface distance between + y_pred: input data to compute, typical segmentation model output. + It must be one-hot format and first dim is batch, example shape: [16, 3, 32, 32]. The values + should be binarized. + y: ground truth to compute mean the distance. It must be one-hot format and first dim is batch. + The values should be binarized. + include_background: whether to skip distance computation on the first channel of + the predicted output. Defaults to ``False``. + symmetric: whether to calculate the symmetric average surface distance between `seg_pred` and `seg_gt`. Defaults to ``False``. distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] the metric used to compute surface distance. Defaults to ``"euclidean"``. """ - (edges_pred, edges_gt) = get_mask_edges(seg_pred, seg_gt, label_idx) - surface_distance = get_surface_distance(edges_pred, edges_gt, label_idx, distance_metric=distance_metric) - if surface_distance.shape == (0,): - return np.inf - avg_surface_distance = surface_distance.mean() - if not symmetric: - return avg_surface_distance + if not include_background: + y_pred, y = ignore_background( + y_pred=y_pred, + y=y, + ) + + y = y.float() + y_pred = y_pred.float() + + if y.shape != y_pred.shape: + raise ValueError("y_pred and y should have same shapes.") + + batch_size, n_class = y_pred.shape[:2] + asd = np.empty((batch_size, n_class)) - surface_distance_2 = get_surface_distance(edges_gt, edges_pred, label_idx, distance_metric=distance_metric) - if surface_distance_2.shape == (0,): - return np.inf + for b, c in np.ndindex(batch_size, n_class): + (edges_pred, edges_gt) = get_mask_edges(y_pred[b, c], y[b, c]) + surface_distance = get_surface_distance(edges_pred, edges_gt, distance_metric=distance_metric) + if surface_distance.shape == (0,): + avg_surface_distance = np.nan + else: + avg_surface_distance = surface_distance.mean() + if not symmetric: + asd[b, c] = avg_surface_distance + else: + surface_distance_2 = get_surface_distance(edges_gt, edges_pred, distance_metric=distance_metric) + if surface_distance_2.shape == (0,): + avg_surface_distance_2 = np.nan + else: + avg_surface_distance_2 = surface_distance_2.mean() + asd[b, c] = np.mean((avg_surface_distance, avg_surface_distance_2)) - avg_surface_distance_2 = surface_distance_2.mean() - return np.mean((avg_surface_distance, avg_surface_distance_2)) + return torch.from_numpy(asd) diff --git a/monai/metrics/utils.py b/monai/metrics/utils.py index 08450fa355..ffe6093621 100644 --- a/monai/metrics/utils.py +++ b/monai/metrics/utils.py @@ -22,6 +22,8 @@ distance_transform_edt, _ = optional_import("scipy.ndimage.morphology", name="distance_transform_edt") distance_transform_cdt, _ = optional_import("scipy.ndimage.morphology", name="distance_transform_cdt") +__all__ = ["ignore_background", "do_metric_reduction", "get_mask_edges", "get_surface_distance"] + def ignore_background( y_pred: torch.Tensor, @@ -65,7 +67,7 @@ def do_metric_reduction( not_nans = (~nans).float() f[nans] = 0 - t_zero = torch.zeros(1, device=f.device, dtype=torch.float) + t_zero = torch.zeros(1, device=f.device, dtype=f.dtype) reduction = MetricReduction(reduction) if reduction == MetricReduction.MEAN: @@ -91,9 +93,7 @@ def do_metric_reduction( elif reduction == MetricReduction.SUM_CHANNEL: not_nans = not_nans.sum(dim=1) f = f.sum(dim=1) # the channel sum - elif reduction == MetricReduction.NONE: - pass - else: + elif reduction != MetricReduction.NONE: raise ValueError( f"Unsupported reduction: {reduction}, available options are " '["mean", "sum", "mean_batch", "sum_batch", "mean_channel", "sum_channel" "none"].' @@ -104,7 +104,7 @@ def do_metric_reduction( def get_mask_edges( seg_pred: Union[np.ndarray, torch.Tensor], seg_gt: Union[np.ndarray, torch.Tensor], - label_idx: int, + label_idx: int = 1, crop: bool = True, ) -> Tuple[np.ndarray, np.ndarray]: """ @@ -141,9 +141,8 @@ def get_mask_edges( if torch.is_tensor(seg_gt): seg_gt = seg_gt.detach().cpu().numpy() - # Check non-zero number of elements and same shape - if seg_pred.size == 0 or seg_pred.shape != seg_gt.shape: - raise ValueError("Labelfields should have same shape (and non-zero number of elements)") + if seg_pred.shape != seg_gt.shape: + raise ValueError("seg_pred and seg_gt should have same shapes.") # If not binary images, convert them if seg_pred.dtype != bool: @@ -168,28 +167,16 @@ def get_mask_edges( def get_surface_distance( - edges_pred: np.ndarray, - edges_gt: np.ndarray, - label_idx: int, - crop: bool = True, + seg_pred: np.ndarray, + seg_gt: np.ndarray, distance_metric: str = "euclidean", ) -> np.ndarray: """ This function is used to compute the surface distances from `seg_pred` to `seg_gt`. - In order to improve the computing efficiency, before getting the edges, - the images can be cropped and only keep the foreground if not specifies - ``crop = False``. - Args: - edges_pred: the edge of the predictions. - edges_gt: the edge of the ground truth. - label_idx: for labelfield images, convert to binary with - `seg_pred = seg_pred == label_idx`. - crop: crop input images and only keep the foregrounds. In order to - maintain two inputs' shapes, here the bounding box is achieved - by ``(seg_pred | seg_gt)`` which represents the union set of two - images. Defaults to ``True``. + seg_pred: the edge of the predictions. + seg_gt: the edge of the ground truth. distance_metric: : [``"euclidean"``, ``"chessboard"``, ``"taxicab"``] the metric used to compute surface distance. Defaults to ``"euclidean"``. @@ -198,17 +185,17 @@ def get_surface_distance( - ``"taxicab"``, uses `taxicab` metric in chamfer type of transform. """ - if not np.any(edges_pred): - return np.array([]) - - if not np.any(edges_gt): - dis = np.inf * np.ones_like(edges_gt) + if not np.any(seg_gt): + dis = np.inf * np.ones_like(seg_gt) else: + if not np.any(seg_pred): + dis = np.inf * np.ones_like(seg_gt) + return dis[seg_gt] if distance_metric == "euclidean": - dis = distance_transform_edt(~edges_gt) - elif distance_metric == "chessboard" or distance_metric == "taxicab": - dis = distance_transform_cdt(~edges_gt, metric=distance_metric) + dis = distance_transform_edt(~seg_gt) + elif distance_metric in ["chessboard", "taxicab"]: + dis = distance_transform_cdt(~seg_gt, metric=distance_metric) else: raise ValueError(f"distance_metric {distance_metric} is not implemented.") - surface_distance = dis[edges_pred] - return surface_distance + + return dis[seg_pred] diff --git a/monai/networks/utils.py b/monai/networks/utils.py index a46e8e66d7..1bcccd084c 100644 --- a/monai/networks/utils.py +++ b/monai/networks/utils.py @@ -20,6 +20,17 @@ from monai.utils import ensure_tuple_size +__all__ = [ + "one_hot", + "slice_channels", + "predict_segmentation", + "normalize_transform", + "to_norm_affine", + "normal_init", + "icnr_init", + "pixelshuffle", +] + def one_hot(labels: torch.Tensor, num_classes: int, dtype: torch.dtype = torch.float, dim: int = 1) -> torch.Tensor: """ @@ -72,11 +83,10 @@ def predict_segmentation( """ if not mutually_exclusive: return (cast(torch.Tensor, logits >= threshold)).int() - else: - if logits.shape[1] == 1: - warnings.warn("single channel prediction, `mutually_exclusive=True` ignored, use threshold instead.") - return (cast(torch.Tensor, logits >= threshold)).int() - return logits.argmax(1, keepdim=True) + if logits.shape[1] == 1: + warnings.warn("single channel prediction, `mutually_exclusive=True` ignored, use threshold instead.") + return (cast(torch.Tensor, logits >= threshold)).int() + return logits.argmax(1, keepdim=True) def normalize_transform( @@ -145,8 +155,7 @@ def to_norm_affine( src_xform = normalize_transform(src_size, affine.device, affine.dtype, align_corners) dst_xform = normalize_transform(dst_size, affine.device, affine.dtype, align_corners) - new_affine = src_xform @ affine @ torch.inverse(dst_xform) - return new_affine + return src_xform @ affine @ torch.inverse(dst_xform) def normal_init( diff --git a/monai/optimizers/utils.py b/monai/optimizers/utils.py index 57c7528ba4..4cafa45749 100644 --- a/monai/optimizers/utils.py +++ b/monai/optimizers/utils.py @@ -15,6 +15,8 @@ from monai.utils import ensure_tuple, ensure_tuple_rep +__all__ = ["generate_param_groups"] + def generate_param_groups( network: torch.nn.Module, diff --git a/monai/transforms/compose.py b/monai/transforms/compose.py index d5cae18a53..20e72f1df0 100644 --- a/monai/transforms/compose.py +++ b/monai/transforms/compose.py @@ -22,6 +22,8 @@ from monai.transforms.utils import apply_transform from monai.utils import MAX_SEED, ensure_tuple, get_seed +__all__ = ["Transform", "Randomizable", "Compose", "MapTransform"] + class Transform(ABC): """ diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 4a4b79cdf5..1523ce1e22 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -60,10 +60,7 @@ def zero_margins(img: np.ndarray, margin: int) -> bool: if np.any(img[:, :, :margin]) or np.any(img[:, :, -margin:]): return False - if np.any(img[:, :margin, :]) or np.any(img[:, -margin:, :]): - return False - - return True + return not np.any(img[:, :margin, :]) and not np.any(img[:, -margin:, :]) def rescale_array( @@ -262,8 +259,7 @@ def weighted_patch_samples( idx = v.searchsorted(r_state.random(n_samples) * v[-1], side="right") # compensate 'valid' mode diff = np.minimum(win_size, img_size) // 2 - centers = [np.unravel_index(i, v_size) + diff for i in np.asarray(idx, dtype=np.int)] - return centers + return [np.unravel_index(i, v_size) + diff for i in np.asarray(idx, dtype=np.int)] def generate_pos_neg_label_crop_centers( @@ -427,7 +423,7 @@ def create_rotate(spatial_dims: int, radians: Union[Sequence[float], float]) -> return np.array([[cos_, -sin_, 0.0], [sin_, cos_, 0.0], [0.0, 0.0, 1.0]]) raise ValueError("radians must be non empty.") - if spatial_dims == 3: + elif spatial_dims == 3: affine = None if len(radians) >= 1: sin_, cos_ = np.sin(radians[0]), np.cos(radians[0]) @@ -466,7 +462,7 @@ def create_shear(spatial_dims: int, coefs: Union[Sequence[float], float]) -> np. if spatial_dims == 2: coefs = ensure_tuple_size(coefs, dim=2, pad_val=0.0) return np.array([[1, coefs[0], 0.0], [coefs[1], 1.0, 0.0], [0.0, 0.0, 1.0]]) - if spatial_dims == 3: + elif spatial_dims == 3: coefs = ensure_tuple_size(coefs, dim=6, pad_val=0.0) return np.array( [ diff --git a/monai/utils/module.py b/monai/utils/module.py index 4bc9a6d63b..dfd5fb7d7b 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -244,10 +244,7 @@ def has_option(obj, keywords: Union[str, Sequence[str]]) -> bool: if not callable(obj): return False sig = inspect.signature(obj) - for key in ensure_tuple(keywords): - if key not in sig.parameters: - return False - return True + return all(key in sig.parameters for key in ensure_tuple(keywords)) def get_package_version(dep_name, default="NOT INSTALLED or UNKNOWN VERSION."): diff --git a/monai/visualize/img2tensorboard.py b/monai/visualize/img2tensorboard.py index 9b22cbdba1..c11bfcfc99 100644 --- a/monai/visualize/img2tensorboard.py +++ b/monai/visualize/img2tensorboard.py @@ -28,6 +28,9 @@ SummaryWriter, _ = optional_import("torch.utils.tensorboard", name="SummaryWriter") +__all__ = ["make_animated_gif_summary", "add_animated_gif", "add_animated_gif_no_channels", "plot_2d_or_3d_image"] + + def _image3_animated_gif(tag: str, image: Union[np.ndarray, torch.Tensor], scale_factor: float = 1.0) -> Summary: """Function to actually create the animated gif. @@ -76,10 +79,7 @@ def make_animated_gif_summary( if the image data is between 0 and 1, using 255 for this value will scale it to displayable range """ - if max_out == 1: - suffix = "/image" - else: - suffix = "/image/{}" + suffix = "/image" if max_out == 1 else "/image/{}" if other_indices is None: other_indices = {} axis_order = [0] + list(animation_axes) + list(image_axes) @@ -194,9 +194,9 @@ def plot_2d_or_3d_image( dataformats = "CHW" writer.add_image(f"{tag}_{dataformats}", d, step, dataformats=dataformats) return + dataformats = "HW" for j, d2 in enumerate(d[:max_channels]): d2 = rescale_array(d2, 0, 1) - dataformats = "HW" writer.add_image(f"{tag}_{dataformats}_{j}", d2, step, dataformats=dataformats) return diff --git a/tests/min_tests.py b/tests/min_tests.py index cd855aa543..ccfc789992 100644 --- a/tests/min_tests.py +++ b/tests/min_tests.py @@ -41,12 +41,14 @@ def run_testsuit(): "test_handler_lr_scheduler", "test_handler_confusion_matrix", "test_handler_confusion_matrix_dist", + "test_handler_hausdorff_distance", "test_handler_mean_dice", "test_handler_rocauc", "test_handler_rocauc_dist", "test_handler_segmentation_saver", "test_handler_smartcache", "test_handler_stats", + "test_handler_surface_distance", "test_handler_tb_image", "test_handler_tb_stats", "test_handler_validation", diff --git a/tests/test_handler_hausdorff_distance.py b/tests/test_handler_hausdorff_distance.py new file mode 100644 index 0000000000..67322718b1 --- /dev/null +++ b/tests/test_handler_hausdorff_distance.py @@ -0,0 +1,88 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from typing import Tuple + +import numpy as np +import torch + +from monai.handlers import HausdorffDistance + + +def create_spherical_seg_3d( + radius: float = 20.0, + centre: Tuple[int, int, int] = (49, 49, 49), + im_shape: Tuple[int, int, int] = (99, 99, 99), +) -> np.ndarray: + """ + Return a 3D image with a sphere inside. Voxel values will be + 1 inside the sphere, and 0 elsewhere. + + Args: + radius: radius of sphere (in terms of number of voxels, can be partial) + centre: location of sphere centre. + im_shape: shape of image to create + + See also: + :py:meth:`~create_test_image_3d` + """ + # Create image + image = np.zeros(im_shape, dtype=np.int32) + spy, spx, spz = np.ogrid[ + -centre[0] : im_shape[0] - centre[0], -centre[1] : im_shape[1] - centre[1], -centre[2] : im_shape[2] - centre[2] + ] + circle = (spx * spx + spy * spy + spz * spz) <= radius * radius + + image[circle] = 1 + image[~circle] = 0 + return image + + +sampler_sphere = torch.Tensor(create_spherical_seg_3d(radius=20, centre=(20, 20, 20))).unsqueeze(0).unsqueeze(0) +sampler_sphere_gt = torch.Tensor(create_spherical_seg_3d(radius=20, centre=(10, 20, 20))).unsqueeze(0).unsqueeze(0) +sampler_sphere_zeros = torch.zeros_like(sampler_sphere) + +TEST_SAMPLE_1 = [sampler_sphere, sampler_sphere_gt] +TEST_SAMPLE_2 = [sampler_sphere_gt, sampler_sphere_gt] +TEST_SAMPLE_3 = [sampler_sphere_zeros, sampler_sphere_gt] +TEST_SAMPLE_4 = [sampler_sphere_zeros, sampler_sphere_zeros] + + +class TestHandlerHausdorffDistance(unittest.TestCase): + # TODO test multi node Hausdorff Distance + + def test_compute(self): + hd_metric = HausdorffDistance(include_background=True) + y_pred, y = TEST_SAMPLE_1 + hd_metric.update([y_pred, y]) + self.assertEqual(hd_metric.compute(), 10) + y_pred, y = TEST_SAMPLE_2 + hd_metric.update([y_pred, y]) + self.assertEqual(hd_metric.compute(), 5) + y_pred, y = TEST_SAMPLE_3 + hd_metric.update([y_pred, y]) + self.assertEqual(hd_metric.compute(), float("inf")) + self.assertEqual(hd_metric._num_examples, 3) + y_pred, y = TEST_SAMPLE_4 + hd_metric.update([y_pred, y]) + self.assertEqual(hd_metric._num_examples, 3) + + def test_shape_mismatch(self): + hd_metric = HausdorffDistance(include_background=True) + with self.assertRaises((AssertionError, ValueError)): + y_pred = TEST_SAMPLE_1[0] + y = torch.ones((1, 1, 10, 10, 10)) + hd_metric.update([y_pred, y]) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_handler_surface_distance.py b/tests/test_handler_surface_distance.py new file mode 100644 index 0000000000..02898769f6 --- /dev/null +++ b/tests/test_handler_surface_distance.py @@ -0,0 +1,88 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from typing import Tuple + +import numpy as np +import torch + +from monai.handlers import SurfaceDistance + + +def create_spherical_seg_3d( + radius: float = 20.0, + centre: Tuple[int, int, int] = (49, 49, 49), + im_shape: Tuple[int, int, int] = (99, 99, 99), +) -> np.ndarray: + """ + Return a 3D image with a sphere inside. Voxel values will be + 1 inside the sphere, and 0 elsewhere. + + Args: + radius: radius of sphere (in terms of number of voxels, can be partial) + centre: location of sphere centre. + im_shape: shape of image to create + + See also: + :py:meth:`~create_test_image_3d` + """ + # Create image + image = np.zeros(im_shape, dtype=np.int32) + spy, spx, spz = np.ogrid[ + -centre[0] : im_shape[0] - centre[0], -centre[1] : im_shape[1] - centre[1], -centre[2] : im_shape[2] - centre[2] + ] + circle = (spx * spx + spy * spy + spz * spz) <= radius * radius + + image[circle] = 1 + image[~circle] = 0 + return image + + +sampler_sphere = torch.Tensor(create_spherical_seg_3d(radius=20, centre=(20, 20, 20))).unsqueeze(0).unsqueeze(0) +sampler_sphere_gt = torch.Tensor(create_spherical_seg_3d(radius=20, centre=(10, 20, 20))).unsqueeze(0).unsqueeze(0) +sampler_sphere_zeros = torch.zeros_like(sampler_sphere) + +TEST_SAMPLE_1 = [sampler_sphere, sampler_sphere_gt] +TEST_SAMPLE_2 = [sampler_sphere_gt, sampler_sphere_gt] +TEST_SAMPLE_3 = [sampler_sphere_zeros, sampler_sphere_gt] +TEST_SAMPLE_4 = [sampler_sphere_zeros, sampler_sphere_zeros] + + +class TestHandlerSurfaceDistance(unittest.TestCase): + # TODO test multi node Surface Distance + + def test_compute(self): + sur_metric = SurfaceDistance(include_background=True) + y_pred, y = TEST_SAMPLE_1 + sur_metric.update([y_pred, y]) + self.assertAlmostEqual(sur_metric.compute(), 4.17133, places=4) + y_pred, y = TEST_SAMPLE_2 + sur_metric.update([y_pred, y]) + self.assertAlmostEqual(sur_metric.compute(), 2.08566, places=4) + y_pred, y = TEST_SAMPLE_3 + sur_metric.update([y_pred, y]) + self.assertAlmostEqual(sur_metric.compute(), float("inf")) + self.assertAlmostEqual(sur_metric._num_examples, 3) + y_pred, y = TEST_SAMPLE_4 + sur_metric.update([y_pred, y]) + self.assertAlmostEqual(sur_metric._num_examples, 3) + + def test_shape_mismatch(self): + sur_metric = SurfaceDistance(include_background=True) + with self.assertRaises((AssertionError, ValueError)): + y_pred = TEST_SAMPLE_1[0] + y = torch.ones((1, 1, 10, 10, 10)) + sur_metric.update([y_pred, y]) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_hausdorff_distance.py b/tests/test_hausdorff_distance.py index dda1186612..96c52cbb68 100644 --- a/tests/test_hausdorff_distance.py +++ b/tests/test_hausdorff_distance.py @@ -13,27 +13,24 @@ from typing import Tuple import numpy as np +import torch from parameterized import parameterized -from monai.metrics import compute_hausdorff_distance +from monai.metrics import HausdorffDistanceMetric def create_spherical_seg_3d( radius: float = 20.0, centre: Tuple[int, int, int] = (49, 49, 49), - labelfield_value: int = 1, - background_value: int = 0, im_shape: Tuple[int, int, int] = (99, 99, 99), ) -> np.ndarray: """ Return a 3D image with a sphere inside. Voxel values will be - `labelfield_value` inside the sphere, and `background_value` elsewhere. + 1 inside the sphere, and 0 elsewhere. Args: radius: radius of sphere (in terms of number of voxels, can be partial) centre: location of sphere centre. - labelfield_value: index of labelfield. - background_value: index of background. im_shape: shape of image to create See also: @@ -46,8 +43,8 @@ def create_spherical_seg_3d( ] circle = (spx * spx + spy * spy + spz * spz) <= radius * radius - image[circle] = labelfield_value - image[~circle] = background_value + image[circle] = 1 + image[~circle] = 0 return image @@ -60,15 +57,13 @@ def create_spherical_seg_3d( [ create_spherical_seg_3d(radius=20, centre=(20, 20, 20)), create_spherical_seg_3d(radius=20, centre=(19, 19, 19)), - 1, ], [1.7320508075688772, 1.7320508075688772, 1, 1, 3, 3], ], [ [ - create_spherical_seg_3d(radius=33, labelfield_value=2, centre=(19, 33, 22)), - create_spherical_seg_3d(radius=33, labelfield_value=2, centre=(20, 33, 22)), - 2, + create_spherical_seg_3d(radius=33, centre=(19, 33, 22)), + create_spherical_seg_3d(radius=33, centre=(20, 33, 22)), ], [1, 1, 1, 1, 1, 1], ], @@ -76,31 +71,22 @@ def create_spherical_seg_3d( [ create_spherical_seg_3d(radius=20, centre=(20, 33, 22)), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, ], [20.09975124224178, 20.223748416156685, 15, 20, 24, 35], ], [ [ + # pred does not have foreground (but gt has), the metric should be inf np.zeros([99, 99, 99]), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, - ], - [np.inf, np.inf, np.inf, np.inf, np.inf, np.inf], - ], - [ - [ - np.zeros([99, 99, 99]), - np.zeros([99, 99, 99]), - 1, ], [np.inf, np.inf, np.inf, np.inf, np.inf, np.inf], ], [ [ + # gt does not have foreground (but pred has), the metric should be inf create_spherical_seg_3d(), np.zeros([99, 99, 99]), - 1, ], [np.inf, np.inf, np.inf, np.inf, np.inf, np.inf], ], @@ -108,32 +94,60 @@ def create_spherical_seg_3d( [ create_spherical_seg_3d(radius=20, centre=(20, 33, 22)), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, 95, ], [19.924858845171276, 20.09975124224178, 14, 18, 22, 33], ], ] +TEST_CASES_NANS = [ + [ + [ + # both pred and gt do not have foreground, metric and not_nans should be 0 + np.zeros([99, 99, 99]), + np.zeros([99, 99, 99]), + ], + ], +] + class TestHausdorffDistance(unittest.TestCase): @parameterized.expand(TEST_CASES) def test_value(self, input_data, expected_value): percentile = None - if len(input_data) == 4: - [seg_1, seg_2, label_idx, percentile] = input_data + if len(input_data) == 3: + [seg_1, seg_2, percentile] = input_data else: - [seg_1, seg_2, label_idx] = input_data + [seg_1, seg_2] = input_data ct = 0 + seg_1 = torch.tensor(seg_1) + seg_2 = torch.tensor(seg_2) for metric in ["euclidean", "chessboard", "taxicab"]: for directed in [True, False]: - result = compute_hausdorff_distance( - seg_1, seg_2, label_idx, distance_metric=metric, percentile=percentile, directed=directed + hd_metric = HausdorffDistanceMetric( + include_background=False, distance_metric=metric, percentile=percentile, directed=directed ) + # shape of seg_1, seg_2 are: HWD, converts to BNHWD + batch, n_class = 2, 3 + batch_seg_1 = seg_1.unsqueeze(0).unsqueeze(0).repeat([batch, n_class, 1, 1, 1]) + batch_seg_2 = seg_2.unsqueeze(0).unsqueeze(0).repeat([batch, n_class, 1, 1, 1]) + result, _ = hd_metric(batch_seg_1, batch_seg_2) expected_value_curr = expected_value[ct] np.testing.assert_allclose(expected_value_curr, result, rtol=1e-7) ct += 1 + @parameterized.expand(TEST_CASES_NANS) + def test_nans(self, input_data): + [seg_1, seg_2] = input_data + seg_1 = torch.tensor(seg_1) + seg_2 = torch.tensor(seg_2) + hd_metric = HausdorffDistanceMetric(include_background=False) + batch_seg_1 = seg_1.unsqueeze(0).unsqueeze(0) + batch_seg_2 = seg_2.unsqueeze(0).unsqueeze(0) + result, not_nans = hd_metric(batch_seg_1, batch_seg_2) + np.testing.assert_allclose(0, result, rtol=1e-7) + np.testing.assert_allclose(0, not_nans, rtol=1e-7) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_surface_distance.py b/tests/test_surface_distance.py index 8b16dc4f35..dca3aaec12 100644 --- a/tests/test_surface_distance.py +++ b/tests/test_surface_distance.py @@ -13,27 +13,24 @@ from typing import Tuple import numpy as np +import torch from parameterized import parameterized -from monai.metrics import compute_average_surface_distance +from monai.metrics import SurfaceDistanceMetric def create_spherical_seg_3d( radius: float = 20.0, centre: Tuple[int, int, int] = (49, 49, 49), - labelfield_value: int = 1, - background_value: int = 0, im_shape: Tuple[int, int, int] = (99, 99, 99), ) -> np.ndarray: """ Return a 3D image with a sphere inside. Voxel values will be - `labelfield_value` inside the sphere, and `background_value` elsewhere. + 1 inside the sphere, and 0 elsewhere. Args: radius: radius of sphere (in terms of number of voxels, can be partial) centre: location of sphere centre. - labelfield_value: index of labelfield. - background_value: index of background. im_shape: shape of image to create See also: @@ -46,30 +43,28 @@ def create_spherical_seg_3d( ] circle = (spx * spx + spy * spy + spz * spz) <= radius * radius - image[circle] = labelfield_value - image[~circle] = background_value + image[circle] = 1 + image[~circle] = 0 return image TEST_CASES = [ [ - [create_spherical_seg_3d(), create_spherical_seg_3d(), 1], + [create_spherical_seg_3d(), create_spherical_seg_3d()], [0, 0], ], [ [ create_spherical_seg_3d(radius=20, centre=(20, 20, 20)), create_spherical_seg_3d(radius=20, centre=(19, 19, 19)), - 1, "taxicab", ], [1.0380029806259314, 1.0380029806259314], ], [ [ - create_spherical_seg_3d(radius=33, labelfield_value=2, centre=(19, 33, 22)), - create_spherical_seg_3d(radius=33, labelfield_value=2, centre=(20, 33, 22)), - 2, + create_spherical_seg_3d(radius=33, centre=(19, 33, 22)), + create_spherical_seg_3d(radius=33, centre=(20, 33, 22)), ], [0.35021200688332677, 0.3483278807706289], ], @@ -77,7 +72,6 @@ def create_spherical_seg_3d( [ create_spherical_seg_3d(radius=20, centre=(20, 33, 22)), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, ], [13.975673696300824, 12.040033513150455], ], @@ -85,7 +79,6 @@ def create_spherical_seg_3d( [ create_spherical_seg_3d(radius=20, centre=(20, 33, 22)), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, "chessboard", ], [10.792254295459173, 9.605067064083457], @@ -94,7 +87,6 @@ def create_spherical_seg_3d( [ create_spherical_seg_3d(radius=20, centre=(20, 33, 22)), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, "taxicab", ], [17.32691760951026, 12.432687531048186], @@ -103,26 +95,26 @@ def create_spherical_seg_3d( [ np.zeros([99, 99, 99]), create_spherical_seg_3d(radius=40, centre=(20, 33, 22)), - 1, ], [np.inf, np.inf], ], [ [ + create_spherical_seg_3d(), np.zeros([99, 99, 99]), - np.zeros([99, 99, 99]), - 1, + "taxicab", ], [np.inf, np.inf], ], +] + +TEST_CASES_NANS = [ [ [ - create_spherical_seg_3d(), + # both pred and gt do not have foreground, metric and not_nans should be 0 + np.zeros([99, 99, 99]), np.zeros([99, 99, 99]), - 1, - "taxicab", ], - [np.inf, np.inf], ], ] @@ -130,20 +122,37 @@ def create_spherical_seg_3d( class TestAllSurfaceMetrics(unittest.TestCase): @parameterized.expand(TEST_CASES) def test_value(self, input_data, expected_value): - if len(input_data) == 4: - [seg_1, seg_2, label_idx, metric] = input_data + if len(input_data) == 3: + [seg_1, seg_2, metric] = input_data else: - [seg_1, seg_2, label_idx] = input_data + [seg_1, seg_2] = input_data metric = "euclidean" ct = 0 + seg_1 = torch.tensor(seg_1) + seg_2 = torch.tensor(seg_2) for symmetric in [True, False]: + sur_metric = SurfaceDistanceMetric(include_background=False, symmetric=symmetric, distance_metric=metric) + # shape of seg_1, seg_2 are: HWD, converts to BNHWD + batch, n_class = 2, 3 + batch_seg_1 = seg_1.unsqueeze(0).unsqueeze(0).repeat([batch, n_class, 1, 1, 1]) + batch_seg_2 = seg_2.unsqueeze(0).unsqueeze(0).repeat([batch, n_class, 1, 1, 1]) + result, _ = sur_metric(batch_seg_1, batch_seg_2) expected_value_curr = expected_value[ct] - result = compute_average_surface_distance( - seg_1, seg_2, label_idx, symmetric=symmetric, distance_metric=metric - ) np.testing.assert_allclose(expected_value_curr, result, rtol=1e-7) ct += 1 + @parameterized.expand(TEST_CASES_NANS) + def test_nans(self, input_data): + [seg_1, seg_2] = input_data + seg_1 = torch.tensor(seg_1) + seg_2 = torch.tensor(seg_2) + sur_metric = SurfaceDistanceMetric(include_background=False) + batch_seg_1 = seg_1.unsqueeze(0).unsqueeze(0) + batch_seg_2 = seg_2.unsqueeze(0).unsqueeze(0) + result, not_nans = sur_metric(batch_seg_1, batch_seg_2) + np.testing.assert_allclose(0, result, rtol=1e-7) + np.testing.assert_allclose(0, not_nans, rtol=1e-7) + if __name__ == "__main__": unittest.main() From c0a7ec19ef45603d5b87254af9cda3a48a08764a Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 14 Dec 2020 23:38:56 +0000 Subject: [PATCH 23/40] Update changelog for 0.4.0 (#1355) Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- CHANGELOG.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fe6627a36..56e65a7d92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,77 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [0.4.0] - 2020-12-15 +### Added +* Overview document for [feature highlights in v0.4.0](https://github.com/Project-MONAI/MONAI/blob/master/docs/source/highlights.md) +* Torchscript support for the net modules +* New networks and layers: + * Discrete Gaussian kernels + * Hilbert transform and envelope detection + * Swish and mish activation + * Acti-norm-dropout block + * Upsampling layer + * Autoencoder, Variational autoencoder + * FCNet +* Support of initialisation from pretrained weights for densenet, senet, multichannel AHNet +* Layer-wise learning rate API +* New model metrics and event handlers based on occlusion sensitivity, confusion matrix, surface distance +* CAM/GradCAM/GradCAM++ +* File format-agnostic image loader APIs with Nibabel, ITK readers +* Enhancements for dataset partition, cross-validation APIs +* New data APIs: + * LMDB-based caching dataset + * Cache-N-transforms dataset + * Iterable dataset + * Patch dataset +* Weekly PyPI release +* Fully compatible with PyTorch 1.7 +* CI/CD enhancements: + * Skipping, speed up, fail fast, timed, quick tests + * Distributed training tests + * Performance profiling utilities +* New tutorials and demos: + * Autoencoder, VAE tutorial + * Cross-validation demo + * Model interpretability tutorial + * COVID-19 Lung CT segmentation challenge open-source baseline + * Threadbuffer demo + * Dataset partitioning tutorial + * Layer-wise learning rate demo + * [MONAI Bootcamp 2020](https://github.com/Project-MONAI/MONAIBootcamp2020) + +### Changed +* Base Docker image upgraded to `nvcr.io/nvidia/pytorch:20.10-py3` from `nvcr.io/nvidia/pytorch:20.08-py3` + +#### Backwards Incompatible Changes +* `monai.apps.CVDecathlonDataset` is extended to a generic `monai.apps.CrossValidation` with an `dataset_cls` option +* Cache dataset now requires a `monai.transforms.Compose` instance as the transform argument +* Model checkpoint file name extensions changed from `.pth` to `.pt` +* Readers' `get_spatial_shape` returns a numpy array instead of list +* Decoupled postprocessing steps such as `sigmoid`, `to_onehot_y`, `mutually_exclusive`, `logit_thresh` from metrics and event handlers, +the postprocessing steps should be used before calling the metrics methods +* `ConfusionMatrixMetric` and `DiceMetric` computation now returns an additional `not_nans` flag to indicate valid results +* `UpSample` optional `mode` now supports `"deconv"`, `"nontrainable"`, `"pixelshuffle"`; `interp_mode` is only used when `mode` is `"nontrainable"` +* `SegResNet` optional `upsample_mode` now supports `"deconv"`, `"nontrainable"`, `"pixelshuffle"` +* `monai.transforms.Compose` class inherits `monai.transforms.Transform` +* In `Rotate`, `Rotated`, `RandRotate`, `RandRotated` transforms, the `angle` related parameters are interpreted as angles in radians instead of degrees. +* `SplitChannel` and `SplitChanneld` moved from `transforms.post` to `transforms.utility` + +### Removed +* Support of PyTorch 1.4 + +### Fixed +* Enhanced loss functions for stability and flexibility +* Sliding window inference memory and device issues +* Revised transforms: + * Normalize intensity datatype and normalizer types + * Padding modes for zoom + * Crop returns coordinates + * Select items transform + * Weighted patch sampling + * Option to keep aspect ratio for zoom +* Various CI/CD issues + ## [0.3.0] - 2020-10-02 ### Added * Overview document for [feature highlights in v0.3.0](https://github.com/Project-MONAI/MONAI/blob/master/docs/source/highlights.md) @@ -102,7 +173,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. [highlights]: https://github.com/Project-MONAI/MONAI/blob/master/docs/source/highlights.md -[Unreleased]: https://github.com/Project-MONAI/MONAI/compare/0.3.0...HEAD +[Unreleased]: https://github.com/Project-MONAI/MONAI/compare/0.4.0...HEAD +[0.4.0]: https://github.com/Project-MONAI/MONAI/compare/0.3.0...0.4.0 [0.3.0]: https://github.com/Project-MONAI/MONAI/compare/0.2.0...0.3.0 [0.2.0]: https://github.com/Project-MONAI/MONAI/compare/0.1.0...0.2.0 [0.1.0]: https://github.com/Project-MONAI/MONAI/commits/0.1.0 From 10508a2f3e2b31b720b9d85a7b9d1bcf928bb178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuan-Ting=20Hsieh=20=28=E8=AC=9D=E6=B2=85=E5=BB=B7=29?= Date: Mon, 14 Dec 2020 18:21:39 -0800 Subject: [PATCH 24/40] Fix randomness in AddExtremePointsChanneld transform (#1363) * Fix randomness in dictionary transform Signed-off-by: YuanTingHsieh * Fix optional Signed-off-by: YuanTingHsieh Signed-off-by: Sachidanand Alle --- monai/transforms/utility/array.py | 21 +++--------- monai/transforms/utility/dictionary.py | 29 ++++++++++++---- monai/transforms/utils.py | 42 +++++++++++++++++++++++ tests/test_add_extreme_points_channel.py | 2 +- tests/test_add_extreme_points_channeld.py | 2 +- 5 files changed, 70 insertions(+), 26 deletions(-) diff --git a/monai/transforms/utility/array.py b/monai/transforms/utility/array.py index 3ab10652e2..8daad86dd2 100644 --- a/monai/transforms/utility/array.py +++ b/monai/transforms/utility/array.py @@ -20,9 +20,8 @@ import numpy as np import torch -from monai.networks.layers import GaussianFilter from monai.transforms.compose import Randomizable, Transform -from monai.transforms.utils import get_extreme_points, map_binary_to_indices +from monai.transforms.utils import extreme_points_to_image, get_extreme_points, map_binary_to_indices from monai.utils import ensure_tuple # Generic type which can represent either a numpy.ndarray or a torch.Tensor @@ -593,20 +592,8 @@ def __call__( # Generate extreme points self.randomize(label[0, :]) - # points to image - points_image = torch.zeros(label.shape[1:], dtype=torch.float) - for p in self._points: - points_image[p] = 1.0 - - # add channel and add batch - points_image = points_image.unsqueeze(0).unsqueeze(0) - gaussian_filter = GaussianFilter(img.ndim - 1, sigma=sigma) - points_image = gaussian_filter(points_image).squeeze(0).detach().numpy() - - # rescale the points image to [rescale_min, rescale_max] - min_intensity = np.min(points_image) - max_intensity = np.max(points_image) - points_image = (points_image - min_intensity) / (max_intensity - min_intensity) - points_image = points_image * (rescale_max - rescale_min) + rescale_min + points_image = extreme_points_to_image( + points=self._points, label=label, sigma=sigma, rescale_min=rescale_min, rescale_max=rescale_max + ) return np.concatenate([img, points_image], axis=0) diff --git a/monai/transforms/utility/dictionary.py b/monai/transforms/utility/dictionary.py index fad98fdb62..28d7452e77 100644 --- a/monai/transforms/utility/dictionary.py +++ b/monai/transforms/utility/dictionary.py @@ -17,16 +17,16 @@ import copy import logging -from typing import Callable, Dict, Hashable, Mapping, Optional, Sequence, Union +from typing import Callable, Dict, Hashable, List, Mapping, Optional, Sequence, Tuple, Union import numpy as np import torch from monai.config import KeysCollection -from monai.transforms.compose import MapTransform +from monai.transforms import extreme_points_to_image, get_extreme_points +from monai.transforms.compose import MapTransform, Randomizable from monai.transforms.utility.array import ( AddChannel, - AddExtremePointsChannel, AsChannelFirst, AsChannelLast, CastToType, @@ -661,7 +661,7 @@ def __call__(self, data: Mapping[Hashable, np.ndarray]) -> Dict[Hashable, np.nda return d -class AddExtremePointsChanneld(MapTransform): +class AddExtremePointsChanneld(Randomizable, MapTransform): """ Dictionary-based wrapper of :py:class:`monai.transforms.AddExtremePointsChannel`. @@ -690,22 +690,37 @@ def __init__( rescale_max: float = 1.0, ): super().__init__(keys) + self.background = background + self.pert = pert + self.points: List[Tuple[int, ...]] = [] self.label_key = label_key - self.add_extreme_points_channel = AddExtremePointsChannel(background=background, pert=pert) self.sigma = sigma self.rescale_min = rescale_min self.rescale_max = rescale_max + def randomize(self, label: np.ndarray) -> None: + self.points = get_extreme_points(label, rand_state=self.R, background=self.background, pert=self.pert) + def __call__(self, data): d = dict(data) label = d[self.label_key] + if label.shape[0] != 1: + raise ValueError("Only supports single channel labels!") + + # Generate extreme points + self.randomize(label[0, :]) for key in data.keys(): if key in self.keys: img = d[key] - d[key] = self.add_extreme_points_channel( - img, label=label, sigma=self.sigma, rescale_min=self.rescale_min, rescale_max=self.rescale_max + points_image = extreme_points_to_image( + points=self.points, + label=label, + sigma=self.sigma, + rescale_min=self.rescale_min, + rescale_max=self.rescale_max, ) + d[key] = np.concatenate([img, points_image], axis=0) return d diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 1523ce1e22..3b552f543c 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -18,6 +18,7 @@ import torch from monai.config import IndexSelection +from monai.networks.layers import GaussianFilter from monai.utils import ensure_tuple, ensure_tuple_rep, ensure_tuple_size, fall_back_tuple, min_version, optional_import measure, _ = optional_import("skimage.measure", "0.14.2", min_version) @@ -620,3 +621,44 @@ def _get_point(val, dim): points.append(tuple(_get_point(np.max(indices[i][...]), i))) return points + + +def extreme_points_to_image( + points: List[Tuple[int, ...]], + label: np.ndarray, + sigma: Union[Sequence[float], float, Sequence[torch.Tensor], torch.Tensor] = 0.0, + rescale_min: float = -1.0, + rescale_max: float = 1.0, +): + """ + Please refer to :py:class:`monai.transforms.AddExtremePointsChannel` for the usage. + + Applies a gaussian filter to the extreme points image. Then the pixel values in points image are rescaled + to range [rescale_min, rescale_max]. + + Args: + points: Extreme points of the object/organ. + label: label image to get extreme points from. Shape must be + (1, spatial_dim1, [, spatial_dim2, ...]). Doesn't support one-hot labels. + sigma: if a list of values, must match the count of spatial dimensions of input data, + and apply every value in the list to 1 spatial dimension. if only 1 value provided, + use it for all spatial dimensions. + rescale_min: minimum value of output data. + rescale_max: maximum value of output data. + """ + # points to image + points_image = torch.zeros(label.shape[1:], dtype=torch.float) + for p in points: + points_image[p] = 1.0 + + # add channel and add batch + points_image = points_image.unsqueeze(0).unsqueeze(0) + gaussian_filter = GaussianFilter(label.ndim - 1, sigma=sigma) + points_image = gaussian_filter(points_image).squeeze(0).detach().numpy() + + # rescale the points image to [rescale_min, rescale_max] + min_intensity = np.min(points_image) + max_intensity = np.max(points_image) + points_image = (points_image - min_intensity) / (max_intensity - min_intensity) + points_image = points_image * (rescale_max - rescale_min) + rescale_min + return points_image diff --git a/tests/test_add_extreme_points_channel.py b/tests/test_add_extreme_points_channel.py index 01277bfa19..f4f3fa6d02 100644 --- a/tests/test_add_extreme_points_channel.py +++ b/tests/test_add_extreme_points_channel.py @@ -57,7 +57,7 @@ class TestAddExtremePointsChannel(unittest.TestCase): @parameterized.expand([TEST_CASE_1, TEST_CASE_2]) - def test_type_shape(self, input_data, expected): + def test_correct_results(self, input_data, expected): add_extreme_points_channel = AddExtremePointsChannel() result = add_extreme_points_channel(**input_data) np.testing.assert_allclose(result[IMG_CHANNEL], expected, rtol=1e-4) diff --git a/tests/test_add_extreme_points_channeld.py b/tests/test_add_extreme_points_channeld.py index 6cf4e7be87..4fee176b20 100644 --- a/tests/test_add_extreme_points_channeld.py +++ b/tests/test_add_extreme_points_channeld.py @@ -45,7 +45,7 @@ class TestAddExtremePointsChanneld(unittest.TestCase): @parameterized.expand([TEST_CASE_1, TEST_CASE_2]) - def test_type_shape(self, input_data, expected): + def test_correct_results(self, input_data, expected): add_extreme_points_channel = AddExtremePointsChanneld( keys="img", label_key="label", sigma=1.0, rescale_min=0.0, rescale_max=1.0 ) From 3c13daefacf78633050de3fb7b21a2769610ab44 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Tue, 15 Dec 2020 12:53:40 +0000 Subject: [PATCH 25/40] Update docs for GitHub Discussion tab (#1364) * Update docs for GitHub Discussion tab Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> * discussion -> discussions Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> Signed-off-by: Sachidanand Alle --- .github/ISSUE_TEMPLATE/question.md | 12 ++++++++++++ README.md | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/question.md diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000000..9c2dd97bb2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,12 @@ +--- +name: Question +about: Question relating to MONAI +title: '' +labels: '' +assignees: '' +--- + +**Please use MONAI's Discussions tab** +For questions relating to MONAI usage, please do not create an issue. + +Instead, use [MONAI's GitHub Discussions tab](https://github.com/Project-MONAI/MONAI/discussions). This can be found next to Issues and Pull Requests along the top of our repository. \ No newline at end of file diff --git a/README.md b/README.md index bda37a31b7..1741f2c518 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ For guidance on making a contribution to MONAI, see the [contributing guidelines ## Community Join the conversation on Twitter [@ProjectMONAI](https://twitter.com/ProjectMONAI) or join our [Slack channel](https://forms.gle/QTxJq3hFictp31UM9). -Ask and answer questions over on the [PyTorch Forums](https://discuss.pytorch.org/) or [StackOverflow](https://stackoverflow.com/tags/monai). Make sure to tag @monai. +Ask and answer questions over on [MONAI's GitHub Discussions tab](https://github.com/Project-MONAI/MONAI/discussions). ## Links - Website: https://monai.io/ From ea6d4e351bb805fff9bfae7e70c6b6b11725797f Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Tue, 15 Dec 2020 14:11:31 +0000 Subject: [PATCH 26/40] 1346-enhance-highresnet-acti-norm (#1365) * fixes #1346 Signed-off-by: Wenqi Li * [MONAI] python code formatting Signed-off-by: monai-bot Signed-off-by: Sachidanand Alle --- docs/source/networks.rst | 5 + monai/networks/layers/simplelayers.py | 73 +++++++++- monai/networks/nets/highresnet.py | 200 ++++++++------------------ tests/test_channel_pad.py | 48 +++++++ tests/test_highresnet.py | 2 +- 5 files changed, 188 insertions(+), 140 deletions(-) create mode 100644 tests/test_channel_pad.py diff --git a/docs/source/networks.rst b/docs/source/networks.rst index 2224b42a74..fc16e8c86e 100644 --- a/docs/source/networks.rst +++ b/docs/source/networks.rst @@ -164,6 +164,11 @@ Layers .. currentmodule:: monai.networks.layers +`ChannelPad` +~~~~~~~~~~~~ +.. autoclass:: ChannelPad + :members: + `SkipConnection` ~~~~~~~~~~~~~~~~ .. autoclass:: SkipConnection diff --git a/monai/networks/layers/simplelayers.py b/monai/networks/layers/simplelayers.py index 4860b2862c..48012dfb1c 100644 --- a/monai/networks/layers/simplelayers.py +++ b/monai/networks/layers/simplelayers.py @@ -18,13 +18,82 @@ from torch.autograd import Function from monai.networks.layers.convutils import gaussian_1d, same_padding -from monai.utils import PT_BEFORE_1_7, InvalidPyTorchVersionError, SkipMode, ensure_tuple_rep, optional_import +from monai.networks.layers.factories import Conv +from monai.utils import ( + PT_BEFORE_1_7, + ChannelMatching, + InvalidPyTorchVersionError, + SkipMode, + ensure_tuple_rep, + optional_import, +) _C, _ = optional_import("monai._C") if not PT_BEFORE_1_7: fft, _ = optional_import("torch.fft") -__all__ = ["SkipConnection", "Flatten", "GaussianFilter", "LLTM", "Reshape", "separable_filtering", "HilbertTransform"] +__all__ = [ + "SkipConnection", + "Flatten", + "GaussianFilter", + "LLTM", + "Reshape", + "separable_filtering", + "HilbertTransform", + "ChannelPad", +] + + +class ChannelPad(nn.Module): + """ + Expand the input tensor's channel dimension from length `in_channels` to `out_channels`, + by padding or a projection. + """ + + def __init__( + self, + spatial_dims: int, + in_channels: int, + out_channels: int, + mode: Union[ChannelMatching, str] = ChannelMatching.PAD, + ): + """ + + Args: + spatial_dims: number of spatial dimensions of the input image. + in_channels: number of input channels. + out_channels: number of output channels. + mode: {``"pad"``, ``"project"``} + Specifies handling residual branch and conv branch channel mismatches. Defaults to ``"pad"``. + + - ``"pad"``: with zero padding. + - ``"project"``: with a trainable conv with kernel size one. + """ + super().__init__() + self.project = None + self.pad = None + if in_channels == out_channels: + return + mode = ChannelMatching(mode) + if mode == ChannelMatching.PROJECT: + conv_type = Conv[Conv.CONV, spatial_dims] + self.project = conv_type(in_channels, out_channels, kernel_size=1) + return + if mode == ChannelMatching.PAD: + if in_channels > out_channels: + raise ValueError('Incompatible values: channel_matching="pad" and in_channels > out_channels.') + pad_1 = (out_channels - in_channels) // 2 + pad_2 = out_channels - in_channels - pad_1 + pad = [0, 0] * spatial_dims + [pad_1, pad_2] + [0, 0] + self.pad = tuple(pad) + return + + def forward(self, x: torch.Tensor) -> torch.Tensor: + if self.project is not None: + return torch.as_tensor(self.project(x)) # as_tensor used to get around mypy typing bug + if self.pad is not None: + return F.pad(x, self.pad) + return x class SkipConnection(nn.Module): diff --git a/monai/networks/nets/highresnet.py b/monai/networks/nets/highresnet.py index c2adfd237a..918b5b5349 100644 --- a/monai/networks/nets/highresnet.py +++ b/monai/networks/nets/highresnet.py @@ -9,21 +9,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Optional, Sequence, Union +from typing import Dict, Optional, Sequence, Tuple, Union import torch import torch.nn as nn -import torch.nn.functional as F -from monai.networks.layers.convutils import same_padding -from monai.networks.layers.factories import Conv, Dropout, Norm -from monai.utils import Activation, ChannelMatching, Normalisation +from monai.networks.blocks import ADN, Convolution +from monai.networks.layers.simplelayers import ChannelPad +from monai.utils import ChannelMatching -SUPPORTED_NORM = { - Normalisation.BATCH: lambda spatial_dims: Norm[Norm.BATCH, spatial_dims], - Normalisation.INSTANCE: lambda spatial_dims: Norm[Norm.INSTANCE, spatial_dims], -} -SUPPORTED_ACTI = {Activation.RELU: nn.ReLU, Activation.PRELU: nn.PReLU, Activation.RELU6: nn.ReLU6} DEFAULT_LAYER_PARAMS_3D = ( # initial conv layer {"name": "conv_0", "n_features": 16, "kernel_size": 3}, @@ -37,64 +31,6 @@ ) -class ConvNormActi(nn.Module): - def __init__( - self, - spatial_dims: int, - in_channels: int, - out_channels: int, - kernel_size: int, - norm_type: Optional[Union[Normalisation, str]] = None, - acti_type: Optional[Union[Activation, str]] = None, - dropout_prob: Optional[float] = None, - ) -> None: - """ - Args: - spatial_dims: number of spatial dimensions of the input image. - in_channels: number of input channels. - out_channels: number of output channels. - kernel_size: size of the convolving kernel. - norm_type: {``"batch"``, ``"instance"``} - Feature normalisation with batchnorm or instancenorm. Defaults to ``"batch"``. - acti_type: {``"relu"``, ``"prelu"``, ``"relu6"``} - Non-linear activation using ReLU or PReLU. Defaults to ``"relu"``. - dropout_prob: probability of the feature map to be zeroed - (only applies to the penultimate conv layer). - """ - - super(ConvNormActi, self).__init__() - - layers = nn.ModuleList() - - conv_type = Conv[Conv.CONV, spatial_dims] - padding_size = same_padding(kernel_size) - conv = conv_type(in_channels, out_channels, kernel_size, padding=padding_size) - layers.append(conv) - - if norm_type is not None: - norm_type = Normalisation(norm_type) - layers.append(SUPPORTED_NORM[norm_type](spatial_dims)(out_channels)) - if acti_type is not None: - acti_type = Activation(acti_type) - layers.append(SUPPORTED_ACTI[acti_type](inplace=True)) - if dropout_prob is not None: - dropout_type = Dropout[Dropout.DROPOUT, spatial_dims] - layers.append(dropout_type(p=dropout_prob)) - self.layers = nn.Sequential(*layers) - - def forward(self, x: torch.Tensor) -> torch.Tensor: - return torch.as_tensor(self.layers(x)) - - -class ChannelPad(nn.Module): - def __init__(self, pad): - super().__init__() - self.pad = tuple(pad) - - def forward(self, x): - return F.pad(x, self.pad) - - class HighResBlock(nn.Module): def __init__( self, @@ -103,8 +39,8 @@ def __init__( out_channels: int, kernels: Sequence[int] = (3, 3), dilation: Union[Sequence[int], int] = 1, - norm_type: Union[Normalisation, str] = Normalisation.INSTANCE, - acti_type: Union[Activation, str] = Activation.RELU, + norm_type: Union[Tuple, str] = ("batch", {"affine": True}), + acti_type: Union[Tuple, str] = ("relu", {"inplace": True}), channel_matching: Union[ChannelMatching, str] = ChannelMatching.PAD, ) -> None: """ @@ -114,51 +50,39 @@ def __init__( out_channels: number of output channels. kernels: each integer k in `kernels` corresponds to a convolution layer with kernel size k. dilation: spacing between kernel elements. - norm_type: {``"batch"``, ``"instance"``} - Feature normalisation with batchnorm or instancenorm. Defaults to ``"instance"``. + norm_type: feature normalization type and arguments. + Defaults to ``("batch", {"affine": True})``. acti_type: {``"relu"``, ``"prelu"``, ``"relu6"``} Non-linear activation using ReLU or PReLU. Defaults to ``"relu"``. channel_matching: {``"pad"``, ``"project"``} Specifies handling residual branch and conv branch channel mismatches. Defaults to ``"pad"``. - ``"pad"``: with zero padding. - - ``"project"``: with a trainable conv with kernel size. + - ``"project"``: with a trainable conv with kernel size one. Raises: ValueError: When ``channel_matching=pad`` and ``in_channels > out_channels``. Incompatible values. """ super(HighResBlock, self).__init__() - conv_type = Conv[Conv.CONV, spatial_dims] - norm_type = Normalisation(norm_type) - acti_type = Activation(acti_type) - - self.project = None - self.pad = None - - if in_channels != out_channels: - channel_matching = ChannelMatching(channel_matching) - - if channel_matching == ChannelMatching.PROJECT: - self.project = conv_type(in_channels, out_channels, kernel_size=1) - - if channel_matching == ChannelMatching.PAD: - if in_channels > out_channels: - raise ValueError('Incompatible values: channel_matching="pad" and in_channels > out_channels.') - pad_1 = (out_channels - in_channels) // 2 - pad_2 = out_channels - in_channels - pad_1 - pad = [0, 0] * spatial_dims + [pad_1, pad_2] + [0, 0] - self.pad = ChannelPad(pad) + self.chn_pad = ChannelPad( + spatial_dims=spatial_dims, in_channels=in_channels, out_channels=out_channels, mode=channel_matching + ) layers = nn.ModuleList() _in_chns, _out_chns = in_channels, out_channels for kernel_size in kernels: - layers.append(SUPPORTED_NORM[norm_type](spatial_dims)(_in_chns)) - layers.append(SUPPORTED_ACTI[acti_type](inplace=True)) layers.append( - conv_type( - _in_chns, _out_chns, kernel_size, padding=same_padding(kernel_size, dilation), dilation=dilation + ADN(ordering="NA", in_channels=_in_chns, act=acti_type, norm=norm_type, norm_dim=spatial_dims) + ) + layers.append( + Convolution( + dimensions=spatial_dims, + in_channels=_in_chns, + out_channels=_out_chns, + kernel_size=kernel_size, + dilation=dilation, ) ) _in_chns = _out_chns @@ -167,14 +91,7 @@ def __init__( def forward(self, x: torch.Tensor) -> torch.Tensor: x_conv: torch.Tensor = self.layers(x) - - if self.project is not None: - return x_conv + torch.as_tensor(self.project(x)) # as_tensor used to get around mypy typing bug - - if self.pad is not None: - return x_conv + torch.as_tensor(self.pad(x)) - - return x_conv + x + return x_conv + torch.as_tensor(self.chn_pad(x)) class HighResNet(nn.Module): @@ -191,13 +108,18 @@ class HighResNet(nn.Module): spatial_dims: number of spatial dimensions of the input image. in_channels: number of input channels. out_channels: number of output channels. - norm_type: {``"batch"``, ``"instance"``} - Feature normalisation with batchnorm or instancenorm. Defaults to ``"batch"``. - acti_type: {``"relu"``, ``"prelu"``, ``"relu6"``} - Non-linear activation using ReLU or PReLU. Defaults to ``"relu"``. + norm_type: feature normalization type and arguments. + Defaults to ``("batch", {"affine": True})``. + acti_type: activation type and arguments. + Defaults to ``("relu", {"inplace": True})``. dropout_prob: probability of the feature map to be zeroed (only applies to the penultimate conv layer). layer_params: specifying key parameters of each layer/block. + channel_matching: {``"pad"``, ``"project"``} + Specifies handling residual branch and conv branch channel mismatches. Defaults to ``"pad"``. + + - ``"pad"``: with zero padding. + - ``"project"``: with a trainable conv with kernel size one. """ def __init__( @@ -205,10 +127,11 @@ def __init__( spatial_dims: int = 3, in_channels: int = 1, out_channels: int = 1, - norm_type: Union[Normalisation, str] = Normalisation.BATCH, - acti_type: Union[Activation, str] = Activation.RELU, - dropout_prob: Optional[float] = None, + norm_type: Union[str, tuple] = ("batch", {"affine": True}), + acti_type: Union[str, tuple] = ("relu", {"inplace": True}), + dropout_prob: Optional[Union[Tuple, str, float]] = 0.0, layer_params: Sequence[Dict] = DEFAULT_LAYER_PARAMS_3D, + channel_matching: Union[ChannelMatching, str] = ChannelMatching.PAD, ) -> None: super(HighResNet, self).__init__() @@ -218,14 +141,14 @@ def __init__( params = layer_params[0] _in_chns, _out_chns = in_channels, params["n_features"] blocks.append( - ConvNormActi( - spatial_dims, - _in_chns, - _out_chns, + Convolution( + dimensions=spatial_dims, + in_channels=_in_chns, + out_channels=_out_chns, kernel_size=params["kernel_size"], - norm_type=norm_type, - acti_type=acti_type, - dropout_prob=None, + adn_ordering="NA", + act=acti_type, + norm=norm_type, ) ) @@ -236,13 +159,14 @@ def __init__( for _ in range(params["repeat"]): blocks.append( HighResBlock( - spatial_dims, - _in_chns, - _out_chns, - params["kernels"], + spatial_dims=spatial_dims, + in_channels=_in_chns, + out_channels=_out_chns, + kernels=params["kernels"], dilation=_dilation, norm_type=norm_type, acti_type=acti_type, + channel_matching=channel_matching, ) ) _in_chns = _out_chns @@ -251,28 +175,30 @@ def __init__( params = layer_params[-2] _in_chns, _out_chns = _out_chns, params["n_features"] blocks.append( - ConvNormActi( - spatial_dims, - _in_chns, - _out_chns, + Convolution( + dimensions=spatial_dims, + in_channels=_in_chns, + out_channels=_out_chns, kernel_size=params["kernel_size"], - norm_type=norm_type, - acti_type=acti_type, - dropout_prob=dropout_prob, + adn_ordering="NAD", + act=acti_type, + norm=norm_type, + dropout=dropout_prob, ) ) params = layer_params[-1] _in_chns = _out_chns blocks.append( - ConvNormActi( - spatial_dims, - _in_chns, - out_channels, + Convolution( + dimensions=spatial_dims, + in_channels=_in_chns, + out_channels=out_channels, kernel_size=params["kernel_size"], - norm_type=norm_type, - acti_type=None, - dropout_prob=None, + adn_ordering="NAD", + act=acti_type, + norm=norm_type, + dropout=dropout_prob, ) ) diff --git a/tests/test_channel_pad.py b/tests/test_channel_pad.py new file mode 100644 index 0000000000..00d0eab65a --- /dev/null +++ b/tests/test_channel_pad.py @@ -0,0 +1,48 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import torch +from parameterized import parameterized + +from monai.networks.layers import ChannelPad + +TEST_CASES_3D = [] +for type_1 in ("pad", "project"): + input_shape = (16, 10, 32, 24, 48) + out_chns = 13 + result_shape = list(input_shape) + result_shape[1] = out_chns + test_case = [ + {"spatial_dims": 3, "in_channels": 10, "out_channels": out_chns, "mode": type_1}, + input_shape, + result_shape, + ] + TEST_CASES_3D.append(test_case) + + +class TestChannelPad(unittest.TestCase): + @parameterized.expand(TEST_CASES_3D) + def test_shape(self, input_param, input_shape, expected_shape): + net = ChannelPad(**input_param) + net.eval() + with torch.no_grad(): + result = net(torch.randn(input_shape)) + self.assertEqual(list(result.shape), list(expected_shape)) + + def test_wrong_mode(self): + with self.assertRaises(ValueError): + ChannelPad(3, 10, 20, mode="test")(torch.randn(10, 10)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_highresnet.py b/tests/test_highresnet.py index 0afa4b1a9b..10f4f41fea 100644 --- a/tests/test_highresnet.py +++ b/tests/test_highresnet.py @@ -53,7 +53,7 @@ def test_shape(self, input_param, input_shape, expected_shape): result = net.forward(torch.randn(input_shape).to(device)) self.assertEqual(result.shape, expected_shape) - @TimedCall(seconds=200, force_quit=True) + @TimedCall(seconds=400, force_quit=True) def test_script(self): input_param, input_shape, expected_shape = TEST_CASE_1 net = HighResNet(**input_param) From 8458cd587fad58941374689225607a5128b7b93a Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Tue, 15 Dec 2020 23:53:58 +0000 Subject: [PATCH 27/40] update weekly preview (#1366) Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- .github/workflows/weekly-preview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/weekly-preview.yml b/.github/workflows/weekly-preview.yml index b6dd43dbe0..54e43d6968 100644 --- a/.github/workflows/weekly-preview.yml +++ b/.github/workflows/weekly-preview.yml @@ -29,7 +29,7 @@ jobs: git config user.email "monai.miccai2019@gmail.com" git add setup.cfg monai/__init__.py git commit -m "Weekly build at $HEAD_COMMIT_ID" - git tag 0.4.dev$(date +'%y%U') + git tag 0.5.dev$(date +'%y%U') python setup.py sdist bdist_wheel - name: Publish to PyPI From 00db833428251f1c7b3dfd8543d09cd538755cba Mon Sep 17 00:00:00 2001 From: charliebudd Date: Wed, 16 Dec 2020 17:10:39 +0000 Subject: [PATCH 28/40] adding .venv directory to ignores for flake8 and isort (#1371) Signed-off-by: charliebudd Signed-off-by: Sachidanand Alle --- setup.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.cfg b/setup.cfg index 2c11b789c7..78cf8db6ca 100644 --- a/setup.cfg +++ b/setup.cfg @@ -65,13 +65,13 @@ ignore = # N812 lowercase 'torch.nn.functional' imported as non lowercase 'F' N812 per-file-ignores = __init__.py: F401 -exclude = *.pyi,.git,.eggs,monai/_version.py,versioneer.py,venv,_version.py +exclude = *.pyi,.git,.eggs,monai/_version.py,versioneer.py,venv,.venv,_version.py [isort] known_first_party = monai profile = black line_length = 120 -skip = .git, .eggs, venv, versioneer.py, _version.py, conf.py, monai/__init__.py +skip = .git, .eggs, venv, .venv, versioneer.py, _version.py, conf.py, monai/__init__.py skip_glob = *.pyi [versioneer] From 7401804c6db91f1cdf01c24173cb2b353a9e94d9 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Wed, 16 Dec 2020 18:53:35 +0000 Subject: [PATCH 29/40] AE: check lens of stride and channel match (#1372) * AE: check lens of stride and channel match Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> * [MONAI] python code formatting Signed-off-by: monai-bot Co-authored-by: monai-bot Signed-off-by: Sachidanand Alle --- monai/networks/nets/autoencoder.py | 4 ++++ tests/test_autoencoder.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/monai/networks/nets/autoencoder.py b/monai/networks/nets/autoencoder.py index c2239450f2..8d0aadafd6 100644 --- a/monai/networks/nets/autoencoder.py +++ b/monai/networks/nets/autoencoder.py @@ -53,6 +53,10 @@ def __init__( self.inter_channels = inter_channels if inter_channels is not None else list() self.inter_dilations = list(inter_dilations or [1] * len(self.inter_channels)) + # The number of channels and strides should match + if len(channels) != len(strides): + raise ValueError("Autoencoder expects matching number of channels and strides") + self.encoded_channels = in_channels decode_channel_list = list(channels[-2::-1]) + [out_channels] diff --git a/tests/test_autoencoder.py b/tests/test_autoencoder.py index a7749d7f3a..86b31e0361 100644 --- a/tests/test_autoencoder.py +++ b/tests/test_autoencoder.py @@ -62,6 +62,15 @@ CASES = [TEST_CASE_0, TEST_CASE_1, TEST_CASE_2, TEST_CASE_3] +TEST_CASE_FAIL = { # 2-channel 2D, should fail because of stride/channel mismatch. + "dimensions": 2, + "in_channels": 2, + "out_channels": 2, + "channels": (4, 8, 16), + "strides": (2, 2), +} + + class TestAutoEncoder(unittest.TestCase): @parameterized.expand(CASES) def test_shape(self, input_param, input_shape, expected_shape): @@ -76,6 +85,10 @@ def test_script(self): test_data = torch.randn(2, 1, 32, 32) test_script_save(net, test_data) + def test_channel_stride_difference(self): + with self.assertRaises(ValueError): + net = AutoEncoder(**TEST_CASE_FAIL) + if __name__ == "__main__": unittest.main() From 7414dd3b64f3fb77319d05439c6f29e801efc2de Mon Sep 17 00:00:00 2001 From: charliebudd Date: Wed, 16 Dec 2020 19:58:24 +0000 Subject: [PATCH 30/40] adding modules to requirments-dev.txt that are needed to build the docs (#1374) Signed-off-by: charliebudd Signed-off-by: Sachidanand Alle --- requirements-dev.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/requirements-dev.txt b/requirements-dev.txt index fb0c24c859..3de7365d16 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -26,3 +26,7 @@ mypy>=0.790 ninja torchvision psutil +Sphinx==3.3.0 +recommonmark==0.6.0 +sphinx-autodoc-typehints==1.11.1 +sphinx-rtd-theme==0.5.0 From e7f491a1a4870bf4b8510c4d76bae8f511cdffc3 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Thu, 17 Dec 2020 19:59:00 +0800 Subject: [PATCH 31/40] [DLMED] add missing import (#1376) Signed-off-by: Nic Ma Signed-off-by: Sachidanand Alle --- monai/engines/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/monai/engines/__init__.py b/monai/engines/__init__.py index 13835f915b..a519210466 100644 --- a/monai/engines/__init__.py +++ b/monai/engines/__init__.py @@ -12,3 +12,4 @@ from .evaluator import * from .multi_gpu_supervised_trainer import * from .trainer import * +from .utils import * From 4ae95213bb2ff72fca982d90573b7ad953356d40 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Thu, 17 Dec 2020 13:56:33 +0000 Subject: [PATCH 32/40] adds jpeg (#1379) Signed-off-by: Wenqi Li Signed-off-by: Sachidanand Alle --- monai/data/image_reader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/data/image_reader.py b/monai/data/image_reader.py index 32d03115ed..925772433b 100644 --- a/monai/data/image_reader.py +++ b/monai/data/image_reader.py @@ -525,7 +525,7 @@ def verify_suffix(self, filename: Union[Sequence[str], str]) -> bool: filename: file name or a list of file names to read. if a list of files, verify all the suffixes. """ - suffixes: Sequence[str] = ["png", "jpg", "bmp"] + suffixes: Sequence[str] = ["png", "jpg", "jpeg", "bmp"] return has_pil and is_supported_format(filename, suffixes) def read(self, data: Union[Sequence[str], str, np.ndarray], **kwargs): From 27d4885ad0dc7977d90b3fead429691f2d3ab409 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Fri, 18 Dec 2020 07:26:40 +0800 Subject: [PATCH 33/40] [DLMED] add missing arg in GANTrainer (#1383) Signed-off-by: Nic Ma Signed-off-by: Sachidanand Alle --- monai/engines/trainer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/engines/trainer.py b/monai/engines/trainer.py index 64b38e2646..7ab3a47eba 100644 --- a/monai/engines/trainer.py +++ b/monai/engines/trainer.py @@ -282,7 +282,7 @@ def _iteration( if batchdata is None: raise ValueError("must provide batch data for current iteration.") - d_input = self.prepare_batch(batchdata, engine.state.device) + d_input = self.prepare_batch(batchdata, engine.state.device, engine.non_blocking) batch_size = self.data_loader.batch_size g_input = self.g_prepare_batch(batch_size, self.latent_shape, engine.state.device, engine.non_blocking) g_output = self.g_inferer(g_input, self.g_network) From 71e79e213f88ea725d688c6a10da927cd8b1bc59 Mon Sep 17 00:00:00 2001 From: charliebudd Date: Fri, 18 Dec 2020 14:21:56 +0000 Subject: [PATCH 34/40] 1198 efficient differentiable bilateral filter (#1375) * Initial cpu implementation Signed-off-by: charliebudd * hue speed increase moving away from torch tensors Signed-off-by: charliebudd * allowing generic channel dimension size Signed-off-by: charliebudd * allowing generic dimensionality Signed-off-by: charliebudd * manual testing script for bilateral filter Signed-off-by: charliebudd * Initial commit of CRF using permutohedral lattice to optimise message passing, implementation from https://github.com/SamuelJoutard/Permutohedral_attention_module Signed-off-by: charliebudd * temporary example scripts demonstrating the usage of crf and phl, and some data to process Signed-off-by: charliebudd * alternate phl implementation using a more efficient cuda hashtable, code currently untested due to windows build issues, implementation from https://github.com/SamuelJoutard/Permutohedral_attention_module Signed-off-by: charliebudd * c++ cpu permutohedral lattice implementation Signed-off-by: charliebudd * comparison script Signed-off-by: charliebudd * cleaning Signed-off-by: charliebudd * backwards pass Signed-off-by: charliebudd * initial cuda brute force kernel Signed-off-by: charliebudd * reverting setup.py Signed-off-by: charliebudd * working cuda kernel for brute force 2d kernel Signed-off-by: charliebudd * fixing unresolved symbols when compiling without cuda Signed-off-by: charliebudd * removing macros file Signed-off-by: charliebudd * placeholder cuda phl implementation Signed-off-by: charliebudd * changing test case color sigma Signed-off-by: charliebudd * Initial import of reference cuda phl implementation Signed-off-by: charliebudd * fixing cuda kernel color weight error Signed-off-by: charliebudd * initial edits to cuda phl code Signed-off-by: charliebudd * fixing errors in cuda phl implementation Signed-off-by: charliebudd * removing logging from cuda phl Signed-off-by: charliebudd * using template data_ptr function Signed-off-by: charliebudd * fixed cpu phl implementation Signed-off-by: charliebudd * updating cpu phl to run on arbitrary input dimensions and channles Signed-off-by: charliebudd * 2d and 3d testing scripts Signed-off-by: charliebudd * Generalising permutohedral implementation to remove independance on width and height Signed-off-by: charliebudd * removing width and height from permutohedral filter function and implementing templated feature creation Signed-off-by: charliebudd * fixed typo Signed-off-by: charliebudd * exteneding 3d testing script Signed-off-by: charliebudd * generalising bruteforce cuda implementation Signed-off-by: charliebudd * updating testing scripts Signed-off-by: charliebudd * file organisiation Signed-off-by: charliebudd * fixing weight error in cpu bruteforce implementation, also inlineing functions Signed-off-by: charliebudd * some refactoring and introducing proper batch handling Signed-off-by: charliebudd * fixing indexing error at border Signed-off-by: charliebudd * fixing some artifacts in cuda phl for high color sigmas Signed-off-by: charliebudd * fixing gaussian kernel function for cpu and cuda bruteforce Signed-off-by: charliebudd * ensuring kernel is an odd numbered size Signed-off-by: charliebudd * adding tests for precised implementation Signed-off-by: charliebudd * adding approximate imlpementation test Signed-off-by: charliebudd * templating implementations based on scalar_type Signed-off-by: charliebudd * cleaning up Signed-off-by: charliebudd * code formatting Signed-off-by: charliebudd * removing half precision implementation for permutohedral due to errors caused on windows Signed-off-by: charliebudd * skipping cuda tests if cuda missing Signed-off-by: charliebudd * reformating Signed-off-by: charliebudd * adding unit test skip based on cpp extention availablility Signed-off-by: charliebudd * removing unused import Signed-off-by: charliebudd * changing to use of THCatomic add Signed-off-by: charliebudd * adding missing licenses Signed-off-by: charliebudd * clang reformat Signed-off-by: charliebudd Signed-off-by: Sachidanand Alle --- docs/source/networks.rst | 5 + monai/csrc/ext.cpp | 5 + monai/csrc/filtering/bilateral/bilateral.h | 42 ++ .../bilateral/bilateralfilter_cpu.cpp | 167 ++++++ .../bilateral/bilateralfilter_cpu_phl.cpp | 89 +++ .../bilateral/bilateralfilter_cuda.cu | 245 ++++++++ .../bilateral/bilateralfilter_cuda_phl.cu | 130 +++++ monai/csrc/filtering/filtering.h | 16 + .../filtering/permutohedral/hash_table.cu | 255 +++++++++ .../filtering/permutohedral/permutohedral.h | 20 + .../permutohedral/permutohedral_cpu.cpp | 516 +++++++++++++++++ .../permutohedral/permutohedral_cuda.cu | 537 ++++++++++++++++++ monai/csrc/utils/meta_macros.h | 131 +++++ monai/csrc/utils/tensor_description.h | 40 ++ monai/networks/layers/__init__.py | 1 + monai/networks/layers/filtering.py | 58 ++ tests/test_bilateral_approx_cpu.py | 381 +++++++++++++ tests/test_bilateral_approx_cuda.py | 386 +++++++++++++ tests/test_bilateral_precise.py | 403 +++++++++++++ tests/utils.py | 8 + 20 files changed, 3435 insertions(+) create mode 100644 monai/csrc/filtering/bilateral/bilateral.h create mode 100644 monai/csrc/filtering/bilateral/bilateralfilter_cpu.cpp create mode 100644 monai/csrc/filtering/bilateral/bilateralfilter_cpu_phl.cpp create mode 100644 monai/csrc/filtering/bilateral/bilateralfilter_cuda.cu create mode 100644 monai/csrc/filtering/bilateral/bilateralfilter_cuda_phl.cu create mode 100644 monai/csrc/filtering/filtering.h create mode 100644 monai/csrc/filtering/permutohedral/hash_table.cu create mode 100644 monai/csrc/filtering/permutohedral/permutohedral.h create mode 100644 monai/csrc/filtering/permutohedral/permutohedral_cpu.cpp create mode 100644 monai/csrc/filtering/permutohedral/permutohedral_cuda.cu create mode 100644 monai/csrc/utils/meta_macros.h create mode 100644 monai/csrc/utils/tensor_description.h create mode 100644 monai/networks/layers/filtering.py create mode 100644 tests/test_bilateral_approx_cpu.py create mode 100644 tests/test_bilateral_approx_cuda.py create mode 100644 tests/test_bilateral_precise.py diff --git a/docs/source/networks.rst b/docs/source/networks.rst index fc16e8c86e..ed17d815b4 100644 --- a/docs/source/networks.rst +++ b/docs/source/networks.rst @@ -183,6 +183,11 @@ Layers ~~~~~~~~~~~~~~~~ .. autoclass:: GaussianFilter :members: + +`BilateralFilter` +~~~~~~~~~~~~~~~~~ +.. autoclass:: BilateralFilter + :members: `HilbertTransform` ~~~~~~~~~~~~~~~~~~ diff --git a/monai/csrc/ext.cpp b/monai/csrc/ext.cpp index 5aaa2e70c9..6740d1b5b4 100644 --- a/monai/csrc/ext.cpp +++ b/monai/csrc/ext.cpp @@ -12,11 +12,16 @@ limitations under the License. */ #include + +#include "filtering/filtering.h" #include "lltm/lltm.h" #include "resample/pushpull.h" #include "utils/resample_utils.h" PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + // filtering + m.def("bilateral_filter", &BilateralFilter, "Bilateral Filter"); + // lltm m.def("lltm_forward", &lltm_forward, "LLTM forward"); m.def("lltm_backward", &lltm_backward, "LLTM backward"); diff --git a/monai/csrc/filtering/bilateral/bilateral.h b/monai/csrc/filtering/bilateral/bilateral.h new file mode 100644 index 0000000000..68f8a3093c --- /dev/null +++ b/monai/csrc/filtering/bilateral/bilateral.h @@ -0,0 +1,42 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#pragma once + +#include +#include "utils/common_utils.h" + +torch::Tensor BilateralFilterCpu(torch::Tensor input, float spatial_sigma, float color_sigma); +torch::Tensor BilateralFilterPHLCpu(torch::Tensor input, float spatial_sigma, float color_sigma); + +#ifdef WITH_CUDA +torch::Tensor BilateralFilterCuda(torch::Tensor input, float spatial_sigma, float color_sigma); +torch::Tensor BilateralFilterPHLCuda(torch::Tensor input, float spatial_sigma, float color_sigma); +#endif + +torch::Tensor BilateralFilter(torch::Tensor input, float spatial_sigma, float color_sigma, bool usePHL) { + torch::Tensor (*filterFunction)(torch::Tensor, float, float); + +#ifdef WITH_CUDA + if (torch::cuda::is_available() && input.is_cuda()) { + CHECK_CONTIGUOUS_CUDA(input); + filterFunction = usePHL ? &BilateralFilterPHLCuda : &BilateralFilterCuda; + } else { + filterFunction = usePHL ? &BilateralFilterPHLCpu : &BilateralFilterCpu; + } +#else + filterFunction = usePHL ? &BilateralFilterPHLCpu : &BilateralFilterCpu; +#endif + + return filterFunction(input, spatial_sigma, color_sigma); +} diff --git a/monai/csrc/filtering/bilateral/bilateralfilter_cpu.cpp b/monai/csrc/filtering/bilateral/bilateralfilter_cpu.cpp new file mode 100644 index 0000000000..cdce729f17 --- /dev/null +++ b/monai/csrc/filtering/bilateral/bilateralfilter_cpu.cpp @@ -0,0 +1,167 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include +#include + +#include "utils/tensor_description.h" + +struct Indexer { + public: + Indexer(int dimensions, int* sizes) { + m_dimensions = dimensions; + m_sizes = sizes; + m_index = new int[dimensions]{0}; + } + + bool operator++(int) { + for (int i = 0; i < m_dimensions; i++) { + m_index[i] += 1; + + if (m_index[i] < m_sizes[i]) { + return true; + } else { + m_index[i] = 0; + } + } + + return false; + } + + int& operator[](int dimensionIndex) { + return m_index[dimensionIndex]; + } + + private: + int m_dimensions; + int* m_sizes; + int* m_index; +}; + +template +void BilateralFilterCpu(torch::Tensor inputTensor, torch::Tensor outputTensor, float spatialSigma, float colorSigma) { + // Getting tensor description. + TensorDescription desc = TensorDescription(inputTensor); + + // Raw tensor data pointers. + scalar_t* inputTensorData = inputTensor.data_ptr(); + scalar_t* outputTensorData = outputTensor.data_ptr(); + + // Pre-calculate common values + int windowSize = (int)ceil(5.0f * spatialSigma) | 1; // ORing last bit to ensure odd window size + int halfWindowSize = floor(0.5f * windowSize); + scalar_t spatialExpConstant = -1.0f / (2 * spatialSigma * spatialSigma); + scalar_t colorExpConstant = -1.0f / (2 * colorSigma * colorSigma); + + // Kernel sizes. + int* kernelSizes = new int[desc.dimensions]; + + for (int i = 0; i < desc.dimensions; i++) { + kernelSizes[i] = windowSize; + } + + // Pre-calculate gaussian kernel in 1D. + scalar_t* gaussianKernel = new scalar_t[windowSize]; + + for (int i = 0; i < windowSize; i++) { + int distance = i - halfWindowSize; + gaussianKernel[i] = exp(distance * distance * spatialExpConstant); + } + + // Kernel aggregates used to calculate + // the output value. + scalar_t* valueSum = new scalar_t[desc.channelCount]; + scalar_t weightSum = 0; + + // Looping over the batches + for (int b = 0; b < desc.batchCount; b++) { + int batchOffset = b * desc.batchStride; + + // Looping over all dimensions for the home element + Indexer homeIndex = Indexer(desc.dimensions, desc.sizes); + do // while(homeIndex++) + { + // Calculating indexing offset for the home element + int homeOffset = batchOffset; + + for (int i = 0; i < desc.dimensions; i++) { + homeOffset += homeIndex[i] * desc.strides[i]; + } + + // Zero kernel aggregates. + for (int i = 0; i < desc.channelCount; i++) { + valueSum[i] = 0; + } + + weightSum = 0.0f; + + // Looping over all dimensions for the neighbour element + Indexer kernelIndex = Indexer(desc.dimensions, kernelSizes); + do // while(kernelIndex++) + { + // Calculating buffer offset for the neighbour element + // Index is clamped to the border in each dimension. + int neighbourOffset = batchOffset; + + for (int i = 0; i < desc.dimensions; i++) { + int neighbourIndex = homeIndex[i] + kernelIndex[i] - halfWindowSize; + int neighbourIndexClamped = std::min(desc.sizes[i] - 1, std::max(0, neighbourIndex)); + neighbourOffset += neighbourIndexClamped * desc.strides[i]; + } + + // Euclidean color distance. + scalar_t colorDistanceSquared = 0; + + for (int i = 0; i < desc.channelCount; i++) { + scalar_t diff = inputTensorData[homeOffset + i * desc.channelStride] - + inputTensorData[neighbourOffset + i * desc.channelStride]; + colorDistanceSquared += diff * diff; + } + + // Calculating and combining the spatial + // and color weights. + scalar_t spatialWeight = 1; + + for (int i = 0; i < desc.dimensions; i++) { + spatialWeight *= gaussianKernel[kernelIndex[i]]; + } + + scalar_t colorWeight = exp(colorDistanceSquared * colorExpConstant); + scalar_t totalWeight = spatialWeight * colorWeight; + + // Aggregating values. + for (int i = 0; i < desc.channelCount; i++) { + valueSum[i] += inputTensorData[neighbourOffset + i * desc.channelStride] * totalWeight; + } + + weightSum += totalWeight; + } while (kernelIndex++); + + for (int i = 0; i < desc.channelCount; i++) { + outputTensorData[homeOffset + i * desc.channelStride] = valueSum[i] / weightSum; + } + } while (homeIndex++); + } +} + +torch::Tensor BilateralFilterCpu(torch::Tensor inputTensor, float spatialSigma, float colorSigma) { + // Preparing output tensor. + torch::Tensor outputTensor = torch::zeros_like(inputTensor); + + AT_DISPATCH_FLOATING_TYPES_AND_HALF(inputTensor.type(), "BilateralFilterCpu", ([&] { + BilateralFilterCpu( + inputTensor, outputTensor, spatialSigma, colorSigma); + })); + + return outputTensor; +} \ No newline at end of file diff --git a/monai/csrc/filtering/bilateral/bilateralfilter_cpu_phl.cpp b/monai/csrc/filtering/bilateral/bilateralfilter_cpu_phl.cpp new file mode 100644 index 0000000000..eb94749ea5 --- /dev/null +++ b/monai/csrc/filtering/bilateral/bilateralfilter_cpu_phl.cpp @@ -0,0 +1,89 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include + +#include "filtering/permutohedral/permutohedral.h" +#include "utils/tensor_description.h" + +template +void BilateralFilterPHLCpu( + torch::Tensor inputTensor, + torch::Tensor outputTensor, + float spatialSigma, + float colorSigma) { + // Getting tensor description. + TensorDescription desc = TensorDescription(inputTensor); + + int featureChannels = desc.channelCount + desc.dimensions; + + // Preparing memory + scalar_t* inputTensorData = inputTensor.data_ptr(); + scalar_t* outputTensorData = outputTensor.data_ptr(); + scalar_t* data = new scalar_t[desc.channelStride * desc.channelCount]; + scalar_t* features = new scalar_t[desc.channelStride * featureChannels]; + + // Precalculating inverse sigmas + float invSpatialSigma = 1.0f / spatialSigma; + float invColorSigma = 1.0f / colorSigma; + + // Looping over batches + for (int b = 0; b < desc.batchCount; b++) { + int batchOffset = b * desc.batchStride; + + // Creating features (also permuting input data to be channel last. Permutohedral + // implementation should be changed to channel first to avoid this) + for (int i = 0; i < desc.channelStride; i++) { + // Color features (and permutation) + for (int c = 0; c < desc.channelCount; c++) { + features[i * featureChannels + c] = invColorSigma * inputTensorData[batchOffset + i + c * desc.channelStride]; + data[i * desc.channelCount + c] = inputTensorData[batchOffset + i + c * desc.channelStride]; + } + + // Spatial features + int offsetRemanider = i; + + for (int d = 0; d < desc.dimensions; d++) { + int coord = offsetRemanider / desc.strides[d]; + offsetRemanider -= coord * desc.strides[d]; + + features[i * featureChannels + desc.channelCount + d] = invSpatialSigma * coord; + } + } + + // Filtering data with respect to the features. + scalar_t* output = + PermutohedralCPU(data, features, desc.channelCount, featureChannels, desc.channelStride); + + // Writing output tensor. + for (int i = 0; i < desc.channelStride; i++) { + for (int c = 0; c < desc.channelCount; c++) { + outputTensorData[batchOffset + i + c * desc.channelStride] = output[i * desc.channelCount + c]; + } + } + } + + delete[] data; + delete[] features; +} + +// Function to choose template implementation based on dynamic, channels and dimensions +torch::Tensor BilateralFilterPHLCpu(torch::Tensor inputTensor, float spatialSigma, float colorSigma) { + torch::Tensor outputTensor = torch::zeros_like(inputTensor); + + AT_DISPATCH_FLOATING_TYPES(inputTensor.type(), "BilateralFilterPhlCpu", ([&] { + BilateralFilterPHLCpu(inputTensor, outputTensor, spatialSigma, colorSigma); + })); + + return outputTensor; +} diff --git a/monai/csrc/filtering/bilateral/bilateralfilter_cuda.cu b/monai/csrc/filtering/bilateral/bilateralfilter_cuda.cu new file mode 100644 index 0000000000..872ff652cb --- /dev/null +++ b/monai/csrc/filtering/bilateral/bilateralfilter_cuda.cu @@ -0,0 +1,245 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include +#include +#include + +#include "utils/meta_macros.h" +#include "utils/tensor_description.h" + +__constant__ int cBatchStride; +__constant__ int cColorStride; + +__constant__ int cSizes[3]; +__constant__ int cStrides[3]; + +__constant__ int cKernelSize; +__constant__ float cKernel[256]; + +__constant__ float cColorExponentFactor; + +template +__global__ void BilateralFilterCudaKernel1D(scalar_t* input, scalar_t* output) { + int kernelHalfSize = cKernelSize / 2; + + int homeOffset = blockIdx.x * blockDim.x + threadIdx.x; + int batchOffset = blockIdx.y * cBatchStride; + + scalar_t weightSum = 0; + + for (int kernelOffset = 0; kernelOffset < cKernelSize; kernelOffset++) { + int neighbourOffset = max(0, min(homeOffset + (kernelOffset - kernelHalfSize), cSizes[0] - 1)); + scalar_t gaussian = cKernel[kernelOffset]; + + scalar_t distanceSquared = 0; + +#pragma unroll + for (int c = 0; c < C; c++) { + scalar_t a = input[batchOffset + homeOffset + c * cColorStride]; + scalar_t b = input[batchOffset + neighbourOffset + c * cColorStride]; + scalar_t diff = a - b; + distanceSquared += diff * diff; + } + + scalar_t spatialWeight = gaussian; + scalar_t colorWeight = exp(cColorExponentFactor * distanceSquared); + scalar_t totalWeight = spatialWeight * colorWeight; + +#pragma unroll + for (int c = 0; c < C; c++) { + scalar_t a = input[batchOffset + neighbourOffset + c * cColorStride]; + + output[batchOffset + homeOffset + c * cColorStride] += a * totalWeight; + } + + weightSum += totalWeight; + } + +#pragma unroll + for (int c = 0; c < C; c++) { + output[batchOffset + homeOffset + c * cColorStride] /= weightSum; + } +} + +template +__global__ void BilateralFilterCudaKernel2D(scalar_t* input, scalar_t* output) { + int kernelHalfSize = cKernelSize / 2; + + int homeOffset = blockIdx.x * blockDim.x + threadIdx.x; + int batchOffset = blockIdx.y * cBatchStride; + + int homeX = homeOffset / cStrides[0]; + int homeY = (homeOffset - homeX * cStrides[0]) / cStrides[1]; + + scalar_t weightSum = 0; + + for (int kernelX = 0; kernelX < cKernelSize; kernelX++) { + int neighbourX = max(0, min(homeX + (kernelX - kernelHalfSize), cSizes[0] - 1)); + scalar_t gaussianX = cKernel[kernelX]; + + for (int kernelY = 0; kernelY < cKernelSize; kernelY++) { + int neighbourY = max(0, min(homeY + (kernelY - kernelHalfSize), cSizes[1] - 1)); + scalar_t gaussianY = cKernel[kernelY]; + + int neighbourOffset = neighbourX * cStrides[0] + neighbourY; + + scalar_t distanceSquared = 0; + +#pragma unroll + for (int c = 0; c < C; c++) { + scalar_t a = input[batchOffset + homeOffset + c * cColorStride]; + scalar_t b = input[batchOffset + neighbourOffset + c * cColorStride]; + scalar_t diff = a - b; + distanceSquared += diff * diff; + } + + scalar_t spatialWeight = gaussianX * gaussianY; + scalar_t colorWeight = exp(cColorExponentFactor * distanceSquared); + scalar_t totalWeight = spatialWeight * colorWeight; + +#pragma unroll + for (int c = 0; c < C; c++) { + scalar_t a = input[batchOffset + neighbourOffset + c * cColorStride]; + + output[batchOffset + homeOffset + c * cColorStride] += a * totalWeight; + } + + weightSum += totalWeight; + } + } + +#pragma unroll + for (int c = 0; c < C; c++) { + output[batchOffset + homeOffset + c * cColorStride] /= weightSum; + } +} + +template +__global__ void BilateralFilterCudaKernel3D(scalar_t* input, scalar_t* output) { + int kernelHalfSize = cKernelSize / 2; + + int homeOffset = blockIdx.x * blockDim.x + threadIdx.x; + int batchOffset = blockIdx.y * cBatchStride; + + int homeX = homeOffset / cStrides[0]; + int homeY = (homeOffset - homeX * cStrides[0]) / cStrides[1]; + int homeZ = (homeOffset - homeX * cStrides[0] - homeY * cStrides[1]) / cStrides[2]; + + scalar_t weightSum = 0; + + for (int kernelX = 0; kernelX < cKernelSize; kernelX++) { + int neighbourX = max(0, min(homeX + (kernelX - kernelHalfSize), cSizes[0] - 1)); + scalar_t gaussianX = cKernel[kernelX]; + + for (int kernelY = 0; kernelY < cKernelSize; kernelY++) { + int neighbourY = max(0, min(homeY + (kernelY - kernelHalfSize), cSizes[1] - 1)); + scalar_t gaussianY = cKernel[kernelY]; + + for (int kernelZ = 0; kernelZ < cKernelSize; kernelZ++) { + int neighbourZ = max(0, min(homeZ + (kernelZ - kernelHalfSize), cSizes[2] - 1)); + scalar_t gaussianZ = cKernel[kernelZ]; + + int neighbourOffset = neighbourX * cStrides[0] + neighbourY * cStrides[1] + neighbourZ; + + scalar_t distanceSquared = 0; + +#pragma unroll + for (int c = 0; c < C; c++) { + scalar_t a = input[batchOffset + homeOffset + c * cColorStride]; + scalar_t b = input[batchOffset + neighbourOffset + c * cColorStride]; + scalar_t diff = a - b; + distanceSquared += diff * diff; + } + + scalar_t spatialWeight = gaussianX * gaussianY * gaussianZ; + scalar_t colorWeight = exp(cColorExponentFactor * distanceSquared); + scalar_t totalWeight = spatialWeight * colorWeight; + +#pragma unroll + for (int c = 0; c < C; c++) { + scalar_t a = input[batchOffset + neighbourOffset + c * cColorStride]; + output[batchOffset + homeOffset + c * cColorStride] += a * totalWeight; + } + + weightSum += totalWeight; + } + } + } + +#pragma unroll + for (int c = 0; c < C; c++) { + output[batchOffset + homeOffset + c * cColorStride] /= weightSum; + } +} + +template +void BilateralFilterCuda(torch::Tensor inputTensor, torch::Tensor outputTensor, float spatialSigma, float colorSigma) { + // Getting tensor description. + TensorDescription desc = TensorDescription(inputTensor); + + // Pre-calculating exponent factors. + float spatialExponentFactor = -1.0f / (2 * spatialSigma * spatialSigma); + float colorExponentFactor = -1.0f / (2 * colorSigma * colorSigma); + + // Pre-calculating gaussian kernel. + int kernelSize = (int)ceil(5.0f * spatialSigma) | 1; // ORing last bit to ensure odd window size + int kernelHalfSize = floor(0.5f * kernelSize); + float* kernel = new float[kernelSize]; + + for (int i = 0; i < kernelSize; i++) { + int distance = i - kernelHalfSize; + kernel[i] = exp(distance * distance * spatialExponentFactor); + } + + // Writing constant memory. + cudaMemcpyToSymbol(cBatchStride, &desc.batchStride, sizeof(int)); + cudaMemcpyToSymbol(cColorStride, &desc.channelStride, sizeof(int)); + cudaMemcpyToSymbol(cSizes, desc.sizes, sizeof(int) * D); + cudaMemcpyToSymbol(cStrides, desc.strides, sizeof(int) * D); + cudaMemcpyToSymbol(cKernelSize, &kernelSize, sizeof(int)); + cudaMemcpyToSymbol(cKernel, kernel, sizeof(float) * kernelSize); + cudaMemcpyToSymbol(cColorExponentFactor, &colorExponentFactor, sizeof(float)); + + AT_DISPATCH_FLOATING_TYPES_AND_HALF( + inputTensor.type(), "BilateralFilterCudaKernel", ([&] { + // Dispatch kernel. (Partial template function specialisation not supported at present so using this switch + // instead) + switch (D) { + case (1): + BilateralFilterCudaKernel1D<<>>( + inputTensor.data_ptr(), outputTensor.data_ptr()); + break; + case (2): + BilateralFilterCudaKernel2D<<>>( + inputTensor.data_ptr(), outputTensor.data_ptr()); + break; + case (3): + BilateralFilterCudaKernel3D<<>>( + inputTensor.data_ptr(), outputTensor.data_ptr()); + break; + } + })); + + delete[] kernel; +} + +// Function to choose template implementation based on dynamic, channels and dimensions +torch::Tensor BilateralFilterCuda(torch::Tensor inputTensor, float spatialSigma, float colorSigma) { + torch::Tensor outputTensor = torch::zeros_like(inputTensor); + +#define CASE(c, d) BilateralFilterCuda(inputTensor, outputTensor, spatialSigma, colorSigma); + SWITCH_AB(CASE, 16, 3, inputTensor.size(1), inputTensor.dim() - 2); + + return outputTensor; +} diff --git a/monai/csrc/filtering/bilateral/bilateralfilter_cuda_phl.cu b/monai/csrc/filtering/bilateral/bilateralfilter_cuda_phl.cu new file mode 100644 index 0000000000..df4ed8771b --- /dev/null +++ b/monai/csrc/filtering/bilateral/bilateralfilter_cuda_phl.cu @@ -0,0 +1,130 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include +#include +#include + +#include "filtering/permutohedral/permutohedral.h" +#include "utils/meta_macros.h" +#include "utils/tensor_description.h" + +__constant__ int cBatchStride; +__constant__ int cChannelStride; +__constant__ int cSpatialStrides[3]; +__constant__ float cInvSpatialSigma; +__constant__ float cInvColorSigma; + +template +__global__ void FeatureCreation(const scalar_t* inputTensor, scalar_t* outputData, scalar_t* outputFeatures) { + int elementIndex = blockIdx.x * blockDim.x + threadIdx.x; + int batchIndex = blockIdx.y; + + int dataBatchOffset = batchIndex * cBatchStride; + int featureBatchOffset = batchIndex * (D + C) * cChannelStride; + +#pragma unroll + for (int i = 0; i < C; i++) { + outputData[dataBatchOffset + elementIndex * C + i] = + inputTensor[dataBatchOffset + elementIndex + i * cChannelStride]; + outputFeatures[featureBatchOffset + elementIndex * (C + D) + i] = + inputTensor[dataBatchOffset + elementIndex + i * cChannelStride] * cInvColorSigma; + } + + int remainder = elementIndex; + +#pragma unroll + for (int i = 0; i < D; i++) { + int coord = remainder / cSpatialStrides[i]; + remainder -= coord * cSpatialStrides[i]; + + outputFeatures[featureBatchOffset + elementIndex * (C + D) + C + i] = coord * cInvSpatialSigma; + } +} + +template +__global__ void WriteOutput(const scalar_t* data, scalar_t* outputTensor) { + int elementIndex = blockIdx.x * blockDim.x + threadIdx.x; + int batchIndex = blockIdx.y; + int batchOffset = batchIndex * cBatchStride; + +#pragma unroll + for (int i = 0; i < C; i++) { + outputTensor[batchOffset + elementIndex + i * cChannelStride] = data[batchOffset + elementIndex * C + i]; + } +} + +template +void BilateralFilterPHLCuda( + torch::Tensor inputTensor, + torch::Tensor outputTensor, + float spatialSigma, + float colorSigma) { + // Getting tensor description. + TensorDescription desc = TensorDescription(inputTensor); + + int featureChannelCount = desc.channelCount + desc.dimensions; + + // Pre calculating inverse sigmas. + float invSpatialSigma = 1.0f / spatialSigma; + float invColorSigma = 1.0f / colorSigma; + + // Preparing global memory + scalar_t* inputTensorData = inputTensor.data_ptr(); + scalar_t* outputTensorData = outputTensor.data_ptr(); + + scalar_t* data; + scalar_t* features; + cudaMalloc(&data, desc.batchCount * desc.channelStride * desc.channelCount * sizeof(scalar_t)); + cudaMalloc(&features, desc.batchCount * desc.channelStride * featureChannelCount * sizeof(scalar_t)); + + // Prparing constant memory + cudaMemcpyToSymbol(cBatchStride, &desc.batchStride, sizeof(int)); + cudaMemcpyToSymbol(cChannelStride, &desc.channelStride, sizeof(int)); + cudaMemcpyToSymbol(cSpatialStrides, desc.strides, sizeof(int) * desc.dimensions); + cudaMemcpyToSymbol(cInvSpatialSigma, &invSpatialSigma, sizeof(float)); + cudaMemcpyToSymbol(cInvColorSigma, &invColorSigma, sizeof(float)); + + // Creating features + FeatureCreation + <<>>(inputTensorData, data, features); + + // Filtering data with respect to the features for each sample in batch + for (int batchIndex = 0; batchIndex < desc.batchCount; batchIndex++) { + scalar_t* offsetData = data + batchIndex * desc.batchStride; + scalar_t* offsetFeatures = features + batchIndex * featureChannelCount * desc.channelStride; + + PermutohedralCuda(offsetData, offsetFeatures, desc.channelStride, true); + } + + // Writing output + WriteOutput<<>>(data, outputTensorData); + + cudaFree(data); + cudaFree(features); +} + +// Function to choose template implementation based on dynamic, channels and dimensions +torch::Tensor BilateralFilterPHLCuda(torch::Tensor inputTensor, float spatialSigma, float colorSigma) { + torch::Tensor outputTensor = torch::zeros_like(inputTensor); + +#define CASE(c, d) \ + AT_DISPATCH_FLOATING_TYPES(inputTensor.type(), "BilateralFilterCudaPHL", ([&] { \ + BilateralFilterPHLCuda( \ + inputTensor, outputTensor, spatialSigma, colorSigma); \ + })); + + SWITCH_AB(CASE, 16, 3, inputTensor.size(1), inputTensor.dim() - 2); + + return outputTensor; +} diff --git a/monai/csrc/filtering/filtering.h b/monai/csrc/filtering/filtering.h new file mode 100644 index 0000000000..18cf2ae6f4 --- /dev/null +++ b/monai/csrc/filtering/filtering.h @@ -0,0 +1,16 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#pragma once + +#include "bilateral/bilateral.h" \ No newline at end of file diff --git a/monai/csrc/filtering/permutohedral/hash_table.cu b/monai/csrc/filtering/permutohedral/hash_table.cu new file mode 100644 index 0000000000..cdda0b4fed --- /dev/null +++ b/monai/csrc/filtering/permutohedral/hash_table.cu @@ -0,0 +1,255 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include + +//#define USE_ADDITIVE_HASH + +// turn this on if you want to get slighly less memory consumption and slightly longer run times. +//#define LINEAR_D_MEMORY + +#define USE_CUSTOM_MODULO + +__device__ __constant__ signed short* table_keys; +__device__ __constant__ int* table_entries; +__device__ __constant__ unsigned int table_capacity; +__device__ __constant__ signed short* table_zeros; +__device__ __constant__ char* table_rank; + +/*************************************************************/ +/* Fast computation of modulo operator with constant divisor */ +/*************************************************************/ +__device__ __constant__ unsigned int __div_m; +__device__ __constant__ unsigned int __div_l; +__device__ __constant__ unsigned int __div_c; + +#ifdef USE_CUSTOM_MODULO +__device__ inline unsigned int modHash(unsigned int n) { + unsigned int t1 = __umulhi(__div_m, n); + return n - ((t1 + ((n - t1) >> 1)) >> (__div_l - 1)) * __div_c; +} + +#else +#define modHash(n) ((n) % (2 * table_capacity)); +#endif + +/*************************************************************/ +/* End modulo */ +/*************************************************************/ + +__device__ __constant__ static unsigned int hOffset[64]; + +template +static scalar_t* createHashTable(int capacity) { + scalar_t* values; + cudaMalloc(&values, capacity * vd * sizeof(scalar_t)); + cudaMemset(values, 0, capacity * vd * sizeof(scalar_t)); + + int* entries; + cudaMalloc(&entries, capacity * 2 * sizeof(int)); + cudaMemset(entries, -1, capacity * 2 * sizeof(int)); + + cudaMemcpyToSymbol(table_capacity, &capacity, sizeof(int)); + + cudaMemcpyToSymbol(table_entries, &entries, sizeof(int*)); + +#ifdef LINEAR_D_MEMORY + + char* ranks; + cudaMalloc(&ranks, capacity * sizeof(char)); + + signed short* zeros; + cudaMalloc(&zeros, capacity * sizeof(signed short)); + + cudaMemcpyToSymbol(table_rank, &ranks, sizeof(char*)); + cudaMemcpyToSymbol(table_zeros, &zeros, sizeof(char*)); + +#else + + signed short* keys; + cudaMalloc(&keys, capacity * kd * sizeof(signed short)); + cudaMemset(keys, 0, capacity * kd * sizeof(signed short)); + + cudaMemcpyToSymbol(table_keys, &keys, sizeof(unsigned int*)); + +#endif + + return values; +} + +template +static void destroyHashTable() { +#ifndef LINEAR_D_MEMORY + cudaFree(table_keys); +#endif + cudaFree(table_entries); +} + +template +__device__ __host__ static unsigned int hash(signed short* key) { + unsigned int k = 0; + for (int i = 0; i < kd; i++) { + k += key[i]; + k = k * 2531011; + } + return k; +} + +template +__device__ __host__ static unsigned int hash(int* key) { + unsigned int k = 0; + for (int i = 0; i < kd; i++) { + k += key[i]; + k = k * 2531011; + } + return k; +} + +template +__device__ static bool matchKey(int idx, signed short* key) { + bool match = true; + int slot = idx / (d + 1), color = idx - slot * (d + 1); + char* rank = table_rank + slot * (d + 1); + signed short* zero = table_zeros + slot * (d + 1); + + for (int i = 0; i < d && match; i++) { + match = (key[i] == zero[i] + color - (rank[i] > d - color ? (d + 1) : 0)); + } + + return match; +} + +template +__device__ static void generateKey(int idx, signed short* key) { + int slot = idx / (d + 1), color = idx - slot * (d + 1); + char* rank = table_rank + slot * (d + 1); + signed short* zero = table_zeros + slot * (d + 1); + + for (int i = 0; i < d; i++) { + key[i] = zero[i] + color - (rank[i] > d - color ? (d + 1) : 0); + } +} + +template +__device__ static int hashTableInsert(unsigned int fh, signed short* key, unsigned int slot) { + int h = modHash(fh); + while (1) { + int* e = &table_entries[h]; + + // If the cell is empty (-1), lock it (-2) + int contents = atomicCAS(e, -1, -2); + + if (contents == -2) { + // If it was locked already, move on to the next cell + } else if (contents == -1) { + // If it was empty, we successfully locked it. Write our key. + +#ifndef LINEAR_D_MEMORY + for (int i = 0; i < kd; i++) { + table_keys[slot * kd + i] = key[i]; + } +#endif + + // Unlock + atomicExch(e, slot); + + return h; + } else { +// The cell is unlocked and has a key in it, check if it matches +#ifdef LINEAR_D_MEMORY + if (matchKey(contents, key)) + return h; +#else + bool match = true; + + for (int i = 0; i < kd && match; i++) { + match = (table_keys[contents * kd + i] == key[i]); + } + + if (match) + return h; +#endif + } + // increment the bucket with wraparound + h++; + + if (h == table_capacity * 2) + h = 0; + } +} + +template +__device__ static int hashTableInsert(signed short* key, unsigned int slot) { + unsigned int myHash = hash(key); + return hashTableInsert(myHash, key, slot); +} + +template +__device__ static int hashTableRetrieveWithHash(unsigned int fh, signed short* key) { + int h = modHash(fh); + while (1) { + int* e = table_entries + h; + + if (*e == -1) + return -1; + +#ifdef LINEAR_D_MEMORY + if (matchKey((*e), key)) + return *e; +#else + bool match = true; + + for (int i = 0; i < kd && match; i++) { + match = (table_keys[(*e) * kd + i] == key[i]); + } + + if (match) + return *e; +#endif + + h++; + + if (h == table_capacity * 2) + h = 0; + } +} + +template +__device__ static int hashTableRetrieve(signed short* key) { + int h = modHash(hash(key)); + while (1) { + int* e = table_entries + h; + + if (*e == -1) + return -1; + +#ifdef LINEAR_D_MEMORY + if (matchKey((*e), key)) + return *e; +#else + bool match = true; + + for (int i = 0; i < kd && match; i++) { + match = (table_keys[(*e) * kd + i] == key[i]); + } + + if (match) + return *e; +#endif + + h++; + + if (h == table_capacity * 2) + h = 0; + } +} \ No newline at end of file diff --git a/monai/csrc/filtering/permutohedral/permutohedral.h b/monai/csrc/filtering/permutohedral/permutohedral.h new file mode 100644 index 0000000000..7f57c91a78 --- /dev/null +++ b/monai/csrc/filtering/permutohedral/permutohedral.h @@ -0,0 +1,20 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#pragma once +template +scalar_t* PermutohedralCPU(scalar_t* data, scalar_t* features, int dataChannels, int featureChannels, int elementCount); +#ifdef WITH_CUDA +template +void PermutohedralCuda(scalar_t* data, scalar_t* features, int elementCount, bool accurate); +#endif diff --git a/monai/csrc/filtering/permutohedral/permutohedral_cpu.cpp b/monai/csrc/filtering/permutohedral/permutohedral_cpu.cpp new file mode 100644 index 0000000000..597bf263c1 --- /dev/null +++ b/monai/csrc/filtering/permutohedral/permutohedral_cpu.cpp @@ -0,0 +1,516 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Adapted from https://github.com/abadams/permutohedral +which has the following license... + +MIT License + +Copyright (c) 2020 Andrew Adams + +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. +*/ + +#include +#include + +#include + +using namespace std; + +/***************************************************************/ +/* Hash table implementation for permutohedral lattice + * + * The lattice points are stored sparsely using a hash table. + * The key for each point is its spatial location in the (d+1)- + * dimensional space. + */ +/***************************************************************/ +template +class HashTablePermutohedral { + public: + /* Constructor + * kd_: the dimensionality of the position vectors on the hyperplane. + * vd_: the dimensionality of the value vectors + */ + HashTablePermutohedral(int kd_, int vd_) : kd(kd_), vd(vd_) { + capacity = 1 << 15; + filled = 0; + entries = new Entry[capacity]; + keys = new short[kd * capacity / 2]; + values = new scalar_t[vd * capacity / 2]; + memset(values, 0, sizeof(scalar_t) * vd * capacity / 2); + } + + // Returns the number of vectors stored. + int size() { + return filled; + } + + // Returns a pointer to the keys array. + short* getKeys() { + return keys; + } + + // Returns a pointer to the values array. + scalar_t* getValues() { + return values; + } + + /* Returns the index into the hash table for a given key. + * key: a pointer to the position vector. + * h: hash of the position vector. + * create: a flag specifying whether an entry should be created, + * should an entry with the given key not found. + */ + int lookupOffset(short* key, size_t h, bool create = true) { + // Double hash table size if necessary + if (filled >= (capacity / 2) - 1) { + grow(); + } + + // Find the entry with the given key + while (1) { + Entry e = entries[h]; + // check if the cell is empty + if (e.keyIdx == -1) { + if (!create) + return -1; // Return not found. + // need to create an entry. Store the given key. + for (int i = 0; i < kd; i++) + keys[filled * kd + i] = key[i]; + e.keyIdx = filled * kd; + e.valueIdx = filled * vd; + entries[h] = e; + filled++; + return e.valueIdx; + } + + // check if the cell has a matching key + bool match = true; + for (int i = 0; i < kd && match; i++) + match = keys[e.keyIdx + i] == key[i]; + if (match) + return e.valueIdx; + + // increment the bucket with wraparound + h++; + if (h == capacity) + h = 0; + } + } + + /* Looks up the value vector associated with a given key vector. + * k : pointer to the key vector to be looked up. + * create : true if a non-existing key should be created. + */ + scalar_t* lookup(short* k, bool create = true) { + size_t h = hash(k) % capacity; + int offset = lookupOffset(k, h, create); + if (offset < 0) + return NULL; + else + return values + offset; + }; + + /* Hash function used in this implementation. A simple base conversion. */ + size_t hash(const short* key) { + size_t k = 0; + for (int i = 0; i < kd; i++) { + k += key[i]; + k *= 2531011; + } + return k; + } + + private: + /* Grows the size of the hash table */ + void grow() { + size_t oldCapacity = capacity; + capacity *= 2; + + // Migrate the value vectors. + scalar_t* newValues = new scalar_t[vd * capacity / 2]; + memset(newValues, 0, sizeof(scalar_t) * vd * capacity / 2); + memcpy(newValues, values, sizeof(scalar_t) * vd * filled); + delete[] values; + values = newValues; + + // Migrate the key vectors. + short* newKeys = new short[kd * capacity / 2]; + memcpy(newKeys, keys, sizeof(short) * kd * filled); + delete[] keys; + keys = newKeys; + + Entry* newEntries = new Entry[capacity]; + + // Migrate the table of indices. + for (size_t i = 0; i < oldCapacity; i++) { + if (entries[i].keyIdx == -1) + continue; + size_t h = hash(keys + entries[i].keyIdx) % capacity; + while (newEntries[h].keyIdx != -1) { + h++; + if (h == capacity) + h = 0; + } + newEntries[h] = entries[i]; + } + delete[] entries; + entries = newEntries; + } + + // Private struct for the hash table entries. + struct Entry { + Entry() : keyIdx(-1), valueIdx(-1) {} + int keyIdx; + int valueIdx; + }; + + short* keys; + scalar_t* values; + Entry* entries; + size_t capacity, filled; + int kd, vd; +}; + +/***************************************************************/ +/* The algorithm class that performs the filter + * + * PermutohedralLattice::filter(...) does all the work. + * + */ +/***************************************************************/ +template +class PermutohedralLattice { + public: + /* Filters given image against a reference image. + * im : image to be bilateral-filtered. + * ref : reference image whose edges are to be respected. + */ + static scalar_t* filter(scalar_t* data, scalar_t* features, int dataChannels, int featureChannels, int elementCount) { + // Create lattice + PermutohedralLattice lattice(featureChannels, dataChannels + 1, elementCount); + + // Splat into the lattice + scalar_t* col = new scalar_t[dataChannels + 1]; + col[dataChannels] = 1; // homogeneous coordinate + + for (int i = 0, e = 0; e < elementCount; e++) { + for (int c = 0; c < dataChannels; c++, i++) { + col[c] = data[i]; + } + + scalar_t* featureVec = features + e * featureChannels; + lattice.splat(featureVec, col); + } + + // Blur the lattice + lattice.blur(); + + // Slice from the lattice + scalar_t* outputData = new scalar_t[elementCount * dataChannels]; + + lattice.beginSlice(); + + for (int i = 0, e = 0; e < elementCount; e++) { + lattice.slice(col); + + scalar_t scale = 1.0f / col[dataChannels]; + for (int c = 0; c < dataChannels; c++, i++) { + outputData[i] = col[c] * scale; + } + } + + return outputData; + } + + /* Constructor + * d_ : dimensionality of key vectors + * vd_ : dimensionality of value vectors + * nData_ : number of points in the input + */ + PermutohedralLattice(int d_, int vd_, int nData_) : d(d_), vd(vd_), nData(nData_), hashTable(d_, vd_) { + // Allocate storage for various arrays + elevated = new scalar_t[d + 1]; + scaleFactor = new scalar_t[d]; + + greedy = new short[d + 1]; + rank = new char[d + 1]; + barycentric = new scalar_t[d + 2]; + replay = new ReplayEntry[nData * (d + 1)]; + nReplay = 0; + canonical = new short[(d + 1) * (d + 1)]; + key = new short[d + 1]; + + // compute the coordinates of the canonical simplex, in which + // the difference between a contained point and the zero + // remainder vertex is always in ascending order. (See pg.4 of paper.) + for (int i = 0; i <= d; i++) { + for (int j = 0; j <= d - i; j++) + canonical[i * (d + 1) + j] = i; + for (int j = d - i + 1; j <= d; j++) + canonical[i * (d + 1) + j] = i - (d + 1); + } + + // Compute parts of the rotation matrix E. (See pg.4-5 of paper.) + for (int i = 0; i < d; i++) { + // the diagonal entries for normalization + scaleFactor[i] = 1.0f / (sqrtf((scalar_t)(i + 1) * (i + 2))); + + /* We presume that the user would like to do a Gaussian blur of standard deviation + * 1 in each dimension (or a total variance of d, summed over dimensions.) + * Because the total variance of the blur performed by this algorithm is not d, + * we must scale the space to offset this. + * + * The total variance of the algorithm is (See pg.6 and 10 of paper): + * [variance of splatting] + [variance of blurring] + [variance of splatting] + * = d(d+1)(d+1)/12 + d(d+1)(d+1)/2 + d(d+1)(d+1)/12 + * = 2d(d+1)(d+1)/3. + * + * So we need to scale the space by (d+1)sqrt(2/3). + */ + scaleFactor[i] *= (d + 1) * sqrtf(2.0 / 3); + } + } + + /* Performs splatting with given position and value vectors */ + void splat(scalar_t* position, scalar_t* value) { + // first rotate position into the (d+1)-dimensional hyperplane + elevated[d] = -d * position[d - 1] * scaleFactor[d - 1]; + for (int i = d - 1; i > 0; i--) + elevated[i] = + (elevated[i + 1] - i * position[i - 1] * scaleFactor[i - 1] + (i + 2) * position[i] * scaleFactor[i]); + elevated[0] = elevated[1] + 2 * position[0] * scaleFactor[0]; + + // prepare to find the closest lattice points + scalar_t scale = 1.0f / (d + 1); + char* myrank = rank; + short* mygreedy = greedy; + + // greedily search for the closest zero-colored lattice point + int sum = 0; + for (int i = 0; i <= d; i++) { + scalar_t v = elevated[i] * scale; + scalar_t up = ceilf(v) * (d + 1); + scalar_t down = floorf(v) * (d + 1); + + if (up - elevated[i] < elevated[i] - down) + mygreedy[i] = (short)up; + else + mygreedy[i] = (short)down; + + sum += mygreedy[i]; + } + sum /= d + 1; + + // rank differential to find the permutation between this simplex and the canonical one. + // (See pg. 3-4 in paper.) + memset(myrank, 0, sizeof(char) * (d + 1)); + for (int i = 0; i < d; i++) + for (int j = i + 1; j <= d; j++) + if (elevated[i] - mygreedy[i] < elevated[j] - mygreedy[j]) + myrank[i]++; + else + myrank[j]++; + + if (sum > 0) { + // sum too large - the point is off the hyperplane. + // need to bring down the ones with the smallest differential + for (int i = 0; i <= d; i++) { + if (myrank[i] >= d + 1 - sum) { + mygreedy[i] -= d + 1; + myrank[i] += sum - (d + 1); + } else + myrank[i] += sum; + } + } else if (sum < 0) { + // sum too small - the point is off the hyperplane + // need to bring up the ones with largest differential + for (int i = 0; i <= d; i++) { + if (myrank[i] < -sum) { + mygreedy[i] += d + 1; + myrank[i] += (d + 1) + sum; + } else + myrank[i] += sum; + } + } + + // Compute barycentric coordinates (See pg.10 of paper.) + memset(barycentric, 0, sizeof(scalar_t) * (d + 2)); + for (int i = 0; i <= d; i++) { + barycentric[d - myrank[i]] += (elevated[i] - mygreedy[i]) * scale; + barycentric[d + 1 - myrank[i]] -= (elevated[i] - mygreedy[i]) * scale; + } + barycentric[0] += 1.0f + barycentric[d + 1]; + + // Splat the value into each vertex of the simplex, with barycentric weights. + for (int remainder = 0; remainder <= d; remainder++) { + // Compute the location of the lattice point explicitly (all but the last coordinate - it's redundant because they + // sum to zero) + for (int i = 0; i < d; i++) + key[i] = mygreedy[i] + canonical[remainder * (d + 1) + myrank[i]]; + + // Retrieve pointer to the value at this vertex. + scalar_t* val = hashTable.lookup(key, true); + + // Accumulate values with barycentric weight. + for (int i = 0; i < vd; i++) + val[i] += barycentric[remainder] * value[i]; + + // Record this interaction to use later when slicing + replay[nReplay].offset = val - hashTable.getValues(); + replay[nReplay].weight = barycentric[remainder]; + nReplay++; + } + } + + // Prepare for slicing + void beginSlice() { + nReplay = 0; + } + + /* Performs slicing out of position vectors. Note that the barycentric weights and the simplex + * containing each position vector were calculated and stored in the splatting step. + * We may reuse this to accelerate the algorithm. (See pg. 6 in paper.) + */ + void slice(scalar_t* col) { + scalar_t* base = hashTable.getValues(); + for (int j = 0; j < vd; j++) + col[j] = 0; + for (int i = 0; i <= d; i++) { + ReplayEntry r = replay[nReplay++]; + for (int j = 0; j < vd; j++) { + col[j] += r.weight * base[r.offset + j]; + } + } + } + + /* Performs a Gaussian blur along each projected axis in the hyperplane. */ + void blur() { + // Prepare arrays + short* neighbor1 = new short[d + 1]; + short* neighbor2 = new short[d + 1]; + scalar_t* newValue = new scalar_t[vd * hashTable.size()]; + scalar_t* oldValue = hashTable.getValues(); + scalar_t* hashTableBase = oldValue; + + scalar_t* zero = new scalar_t[vd]; + for (int k = 0; k < vd; k++) + zero[k] = 0; + + // For each of d+1 axes, + for (int j = 0; j <= d; j++) { + // For each vertex in the lattice, + for (int i = 0; i < hashTable.size(); i++) { // blur point i in dimension j + short* key = hashTable.getKeys() + i * (d); // keys to current vertex + for (int k = 0; k < d; k++) { + neighbor1[k] = key[k] + 1; + neighbor2[k] = key[k] - 1; + } + neighbor1[j] = key[j] - d; + neighbor2[j] = key[j] + d; // keys to the neighbors along the given axis. + + scalar_t* oldVal = oldValue + i * vd; + scalar_t* newVal = newValue + i * vd; + + scalar_t *vm1, *vp1; + + vm1 = hashTable.lookup(neighbor1, false); // look up first neighbor + if (vm1) + vm1 = vm1 - hashTableBase + oldValue; + else + vm1 = zero; + + vp1 = hashTable.lookup(neighbor2, false); // look up second neighbor + if (vp1) + vp1 = vp1 - hashTableBase + oldValue; + else + vp1 = zero; + + // Mix values of the three vertices + for (int k = 0; k < vd; k++) + newVal[k] = (0.25f * vm1[k] + 0.5f * oldVal[k] + 0.25f * vp1[k]); + } + scalar_t* tmp = newValue; + newValue = oldValue; + oldValue = tmp; + // the freshest data is now in oldValue, and newValue is ready to be written over + } + + // depending where we ended up, we may have to copy data + if (oldValue != hashTableBase) { + memcpy(hashTableBase, oldValue, hashTable.size() * vd * sizeof(scalar_t)); + delete oldValue; + } else { + delete newValue; + } + + delete zero; + delete neighbor1; + delete neighbor2; + } + + private: + int d, vd, nData; + scalar_t *elevated, *scaleFactor, *barycentric; + short* canonical; + short* key; + + // slicing is done by replaying splatting (ie storing the sparse matrix) + struct ReplayEntry { + int offset; + scalar_t weight; + } * replay; + int nReplay, nReplaySub; + + public: + char* rank; + short* greedy; + HashTablePermutohedral hashTable; +}; + +template +scalar_t* PermutohedralCPU( + scalar_t* data, + scalar_t* features, + int dataChannels, + int featureChannels, + int elementCount) { + return PermutohedralLattice::filter(data, features, dataChannels, featureChannels, elementCount); +} + +template float* PermutohedralCPU(float* data, float* features, int dataChannels, int featureChannels, int elementCount); +template double* PermutohedralCPU( + double* data, + double* features, + int dataChannels, + int featureChannels, + int elementCount); \ No newline at end of file diff --git a/monai/csrc/filtering/permutohedral/permutohedral_cuda.cu b/monai/csrc/filtering/permutohedral/permutohedral_cuda.cu new file mode 100644 index 0000000000..c60d0d8c31 --- /dev/null +++ b/monai/csrc/filtering/permutohedral/permutohedral_cuda.cu @@ -0,0 +1,537 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +Adapted from https://github.com/abadams/permutohedral +which has the following license... + +MIT License + +Copyright (c) 2020 Andrew Adams + +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. +*/ + +#define BLOCK_SIZE 64 + +#include +#include +#include +#include +#include + +#include "hash_table.cu" +#include "utils/meta_macros.h" + +template +struct MatrixEntry { + int index; + scalar_t weight; +}; + +template +__global__ static void createMatrix( + const int elementCount, + const scalar_t* positions, + const scalar_t* values, + const scalar_t* scaleFactor, + MatrixEntry* matrix) { + const int threadId = threadIdx.x; + const int idx = threadIdx.x + blockIdx.x * BLOCK_SIZE; + const bool outOfBounds = idx >= elementCount; + + scalar_t myElevated[pd + 1]; + const scalar_t* myPosition = positions + idx * pd; + + int myGreedy[pd + 1]; + int myRank[pd + 1]; + + scalar_t myBarycentric[pd + 2]; + __shared__ short keys[pd * BLOCK_SIZE]; + short* myKey = keys + threadId * pd; + + if (!outOfBounds) { + myElevated[pd] = -pd * myPosition[pd - 1] * scaleFactor[pd - 1]; + + for (int i = pd - 1; i > 0; i--) { + myElevated[i] = + myElevated[i + 1] - i * (myPosition[i - 1]) * scaleFactor[i - 1] + (i + 2) * myPosition[i] * scaleFactor[i]; + } + + myElevated[0] = myElevated[1] + 2 * myPosition[0] * scaleFactor[0]; + + // find the closest zero-colored lattice point + + // greedily search for the closest zero-colored lattice point + signed short sum = 0; + + for (int i = 0; i <= pd; i++) { + scalar_t v = myElevated[i] * (1.0f / (pd + 1)); + scalar_t up = ceilf(v) * (pd + 1); + scalar_t down = floorf(v) * (pd + 1); + + myGreedy[i] = (signed short)(up - myElevated[i] < myElevated[i] - down ? up : down); + sum += myGreedy[i]; + } + + sum /= pd + 1; + + // sort differential to find the permutation between this simplex and the canonical one + for (int i = 0; i <= pd; i++) { + myRank[i] = 0; + + for (int j = 0; j <= pd; j++) { + scalar_t iDiff = myElevated[i] - myGreedy[i]; + scalar_t jDiff = myElevated[j] - myGreedy[j]; + + if (iDiff < jDiff || (iDiff == jDiff && i > j)) { + myRank[i]++; + } + } + } + + if (sum > 0) // sum too large, need to bring down the ones with the smallest differential + { + for (int i = 0; i <= pd; i++) { + if (myRank[i] >= pd + 1 - sum) { + myGreedy[i] -= (pd + 1); + myRank[i] += sum - (pd + 1); + } else { + myRank[i] += sum; + } + } + } else if (sum < 0) // sum too small, need to bring up the ones with largest differential + { + for (int i = 0; i <= pd; i++) { + if (myRank[i] < -sum) { + myGreedy[i] += (pd + 1); + myRank[i] += sum + (pd + 1); + } else { + myRank[i] += sum; + } + } + } + +#ifdef LINEAR_D_MEMORY + for (int i = 0; i <= pd; i++) { + table_zeros[idx * (pd + 1) + i] = myGreedy[i]; + table_rank[idx * (pd + 1) + i] = myRank[i]; + } +#endif + + // turn delta into barycentric coords + for (int i = 0; i <= pd + 1; i++) { + myBarycentric[i] = 0; + } + + for (int i = 0; i <= pd; i++) { + scalar_t delta = (myElevated[i] - myGreedy[i]) * (1.0f / (pd + 1)); + myBarycentric[pd - myRank[i]] += delta; + myBarycentric[pd + 1 - myRank[i]] -= delta; + } + + myBarycentric[0] += 1.0f + myBarycentric[pd + 1]; + } + +#ifdef USE_ADDITIVE_HASH + unsigned int cumulative_hash = hash(myGreedy); +#endif + + for (int color = 0; color <= pd; color++) { + // Compute the location of the lattice point explicitly (all but + // the last coordinate - it's redundant because they sum to zero) + if (!outOfBounds) { + for (int i = 0; i < pd; i++) { + myKey[i] = myGreedy[i] + color; + + if (myRank[i] > pd - color) { + myKey[i] -= (pd + 1); + } + } + } + +#ifdef USE_ADDITIVE_HASH + for (int i = 0; i < pd; i++) { + if (myRank[i] == pd - color) { + cumulative_hash += hOffset[i]; + } + } +#endif + + if (!outOfBounds) { + MatrixEntry r; + +#ifdef USE_ADDITIVE_HASH + r.index = hashTableInsert(cumulative_hash, myKey, idx * (pd + 1) + color); +#else + r.index = hashTableInsert(myKey, idx * (pd + 1) + color); +#endif + + r.weight = myBarycentric[color]; + matrix[idx * (pd + 1) + color] = r; + } + } +} + +template +__global__ static void cleanHashTable(const int elementCount, MatrixEntry* matrix) { + const int idx = threadIdx.x + blockIdx.x * blockDim.x; + + if (idx >= elementCount) + return; + + // find my hash table entry + int* e = table_entries + idx; + + // Check if I created my own key in the previous phase + if (*e >= 0) { + // Rehash my key and reset the pointer in order to merge with + // any other pixel that created a different entry under the + // same key. If the computation was serial this would never + // happen, but sometimes race conditions can make the same key + // be inserted twice. hashTableRetrieve always returns the + // earlier, so it's no problem as long as we rehash now. + +#ifdef LINEAR_D_MEMORY + // Get my key + short myKey[kd]; + generateKey(*e, myKey); + *e = hashTableRetrieve(myKey); +#else + *e = hashTableRetrieve(table_keys + *e * kd); +#endif + } +} + +template +__global__ static void splat( + const int elementCount, + scalar_t* values, + MatrixEntry* matrix, + scalar_t* table_values) { + const int color = threadIdx.y; + const int idx = threadIdx.x + blockIdx.x * blockDim.x; + + const bool outOfBounds = idx >= elementCount; + + if (outOfBounds) { + return; + } + + scalar_t* myValue = values + idx * vd; + + MatrixEntry r = matrix[idx * (pd + 1) + color]; + + matrix[idx * (pd + 1) + color].index = r.index = table_entries[r.index]; + scalar_t* val = table_values + r.index * (vd + 1); + + for (int j = 0; j < vd; j++) { + gpuAtomicAdd(val + j, myValue[j] * r.weight); + } + + gpuAtomicAdd(val + vd, r.weight); +} + +// splat splits by color, so extend the y coordinate to our blocks to represent that +// dim3 oldblocks((w-1)/8+1, (h-1)/8+1, 1); +// dim3 oldblockSize(8, 8, 1); +// oldblocks.y *= pd+1; +// splatCache<<>>(w, h, values, matrix); + +// int blockCount = (elementCount + 1) / BLOCK_SIZE + 1; +// int blockSize = BLOCK_SIZE; + +// splatCache<<>>(elementCount, values, matrix); + +template +__global__ static void splatCache( + const int elementCount, + scalar_t* values, + MatrixEntry* matrix, + scalar_t* table_values) { + // const int x = threadIdx.x + blockIdx.x * blockDim.x; + // const int y = threadIdx.y + (blockIdx.y/(pd+1)) * blockDim.y; + + // const int threadId = threadIdx.y*blockDim.x + threadIdx.x; + // const int color = blockIdx.y % (pd+1); + // const int idx = y*w + x; + + const int threadId = threadIdx.x; + const int color = threadIdx.y; + const int idx = threadIdx.x + blockIdx.x * BLOCK_SIZE; + + const bool outOfBounds = idx >= elementCount; + + __shared__ int sharedOffsets[BLOCK_SIZE]; + __shared__ scalar_t sharedValues[BLOCK_SIZE * (vd + 1)]; + + int myOffset = -1; + scalar_t* myValue = sharedValues + threadId * (vd + 1); + + if (!outOfBounds) { + scalar_t* value = values + idx * vd; + + MatrixEntry r = matrix[idx * (pd + 1) + color]; + + // convert the matrix entry from a pointer into the entries array to a pointer into the keys/values array + matrix[idx * (pd + 1) + color].index = r.index = table_entries[r.index]; + // record the offset into the keys/values array in shared space + myOffset = sharedOffsets[threadId] = r.index * (vd + 1); + + for (int j = 0; j < vd; j++) { + myValue[j] = value[j] * r.weight; + } + myValue[vd] = r.weight; + + } else { + sharedOffsets[threadId] = -1; + } + + __syncthreads(); + + // am I the first thread in this block to care about this key? + + if (outOfBounds) + return; + + for (int i = 0; i < BLOCK_SIZE; i++) { + if (i < threadId) { + if (myOffset == sharedOffsets[i]) { + // somebody else with higher priority cares about this key + return; + } + } else if (i > threadId) { + if (myOffset == sharedOffsets[i]) { + // someone else with lower priority cares about this key, accumulate it into mine + for (int j = 0; j <= vd; j++) { + sharedValues[threadId * (vd + 1) + j] += sharedValues[i * (vd + 1) + j]; + } + } + } + } + + // only the threads with something to write to main memory are still going + scalar_t* val = table_values + myOffset; + for (int j = 0; j <= vd; j++) { + gpuAtomicAdd(val + j, myValue[j]); + } +} + +template +__global__ static void blur( + int n, + scalar_t* newValues, + MatrixEntry* matrix, + int color, + scalar_t* table_values) { + const int idx = (blockIdx.y * gridDim.x + blockIdx.x) * blockDim.x * blockDim.y + threadIdx.x; + + if (idx >= n) + return; + + // Check if I'm valid + if (matrix[idx].index != idx) + return; + + // find my key and the keys of my neighbours + short myKey[pd + 1]; + short np[pd + 1]; + short nm[pd + 1]; + +#ifdef LINEAR_D_MEMORY + generateKey(idx, myKey); + for (int i = 0; i < pd; i++) { + np[i] = myKey[i] + 1; + nm[i] = myKey[i] - 1; + } +#else + for (int i = 0; i < pd; i++) { + myKey[i] = table_keys[idx * pd + i]; + np[i] = myKey[i] + 1; + nm[i] = myKey[i] - 1; + } +#endif + + np[color] -= pd + 1; + nm[color] += pd + 1; + +#ifdef USE_ADDITIVE_HASH + unsigned int hCurrent = hash(myKey); + int offNp = hashTableRetrieveWithHash(hCurrent + hOffset[color], np); + int offNm = hashTableRetrieveWithHash(hCurrent - hOffset[color], nm); +#else + int offNp = hashTableRetrieve(np); + int offNm = hashTableRetrieve(nm); +#endif + + scalar_t* valMe = table_values + (vd + 1) * idx; + scalar_t* valNp = table_values + (vd + 1) * offNp; + scalar_t* valNm = table_values + (vd + 1) * offNm; + scalar_t* valOut = newValues + (vd + 1) * idx; + + if (offNp >= 0 && offNm >= 0) { + for (int i = 0; i <= vd; i++) { + valOut[i] = (valNp[i] + (valMe[i] * 2) + valNm[i]) / 4; + } + } else if (offNp >= 0) { + for (int i = 0; i <= vd; i++) { + valOut[i] = (valNp[i] + (valMe[i] * 2)) / 4; + } + } else if (offNm >= 0) { + for (int i = 0; i <= vd; i++) { + valOut[i] = (valNm[i] + (valMe[i] * 2)) / 4; + } + } else { + for (int i = 0; i <= vd; i++) { + valOut[i] = valMe[i] * 2; + } + } +} + +template +__global__ static void slice( + const int elementCount, + scalar_t* values, + MatrixEntry* matrix, + scalar_t* table_values) { + const int threadId = threadIdx.x; + const int idx = threadIdx.x + blockIdx.x * BLOCK_SIZE; + const bool outOfBounds = idx >= elementCount; + + if (outOfBounds) + return; + + __shared__ scalar_t localValue[BLOCK_SIZE * vd]; + + scalar_t* myValue = localValue + threadId * vd; + scalar_t myWeight = 0; + + for (int i = 0; i < vd; i++) { + myValue[i] = 0; + } + + for (int i = 0; i <= pd; i++) { + MatrixEntry r = matrix[idx * (pd + 1) + i]; + scalar_t* val = table_values + r.index * (vd + 1); + + for (int j = 0; j < vd; j++) { + myValue[j] += r.weight * val[j]; + } + + myWeight += r.weight * val[vd]; + } + + myWeight = 1.0f / myWeight; + + for (int j = 0; j < vd; j++) { + values[idx * vd + j] = myValue[j] * myWeight; + } +} + +template +void PermutohedralCuda(scalar_t* values, scalar_t* positions, int elementCount, bool accurate) { + scalar_t blurVariance = accurate ? 0.5 : 0; + + scalar_t* scaleFactor; + cudaMalloc(&scaleFactor, pd * sizeof(scalar_t)); + + scalar_t scaleFactorHost[pd]; + for (int i = 0; i < pd; i++) { + scaleFactorHost[i] = (pd + 1) * sqrtf((1.0 / 6 + blurVariance) / ((i + 1) * (i + 2))); + } + + cudaMemcpy(scaleFactor, scaleFactorHost, pd * sizeof(scalar_t), cudaMemcpyHostToDevice); + + MatrixEntry* matrix; + cudaMalloc(&matrix, elementCount * (pd + 1) * sizeof(MatrixEntry)); + + scalar_t* table_values = createHashTable(elementCount * (pd + 1)); + + // Populate constant memory for hash helpers + unsigned long long int __host_two32 = ((unsigned long long int)1) << 32; + unsigned int __host_div_c = 2 * (elementCount * (pd + 1)); + unsigned int __host_div_l = ceilf(logf((float)__host_div_c) / logf(2.0f)); + unsigned int __host_div_m = (__host_two32 << __host_div_l) / __host_div_c - __host_two32 + 1; + cudaMemcpyToSymbol(__div_c, &__host_div_c, sizeof(unsigned int)); + cudaMemcpyToSymbol(__div_l, &__host_div_l, sizeof(unsigned int)); + cudaMemcpyToSymbol(__div_m, &__host_div_m, sizeof(unsigned int)); + + // Populate constant memory with hash of offset vectors + unsigned int hOffset_host[pd + 1]; + signed short offset[pd + 1]; + for (int i = 0; i < pd; offset[i] = 1, i++) + ; + for (int i = 0; i <= pd; i++) { + offset[i] -= pd + 1; + hOffset_host[i] = hash(offset); + offset[i] += pd + 1; + } + cudaMemcpyToSymbol(hOffset, &hOffset_host, sizeof(unsigned int) * (pd + 1)); + + int blockCount = (elementCount + 1) / BLOCK_SIZE + 1; + int blockSize = BLOCK_SIZE; + + createMatrix<<>>(elementCount, positions, values, scaleFactor, matrix); + + // fix duplicate hash table entries + int tableSize = elementCount * 2 * (pd + 1); + int cleanBlockSize = 32; + int cleanBlocks = (tableSize - 1) / cleanBlockSize + 1; + + cleanHashTable<<>>(tableSize, matrix); + + splat<<>>(elementCount, values, matrix, table_values); + + if (accurate) { + scalar_t* newValues; + cudaMalloc(&newValues, elementCount * (pd + 1) * (vd + 1) * sizeof(scalar_t)); + cudaMemset(newValues, 0, elementCount * (pd + 1) * (vd + 1) * sizeof(scalar_t)); + + for (int color = 0; color <= pd; color++) { + blur + <<>>(elementCount * (pd + 1), newValues, matrix, color, table_values); + + scalar_t* swap = newValues; + newValues = table_values; + table_values = swap; + } + + cudaFree(newValues); + } + + slice<<>>(elementCount, values, matrix, table_values); + + destroyHashTable(); + cudaFree(table_values); +} + +#define DECLARATION(dc, fc) \ + template void PermutohedralCuda(float* values, float* positions, int elementCount, bool accurate); \ + template void PermutohedralCuda(double* values, double* positions, int elementCount, bool accurate); +DO_FOR_AB(DECLARATION, 16, 19) diff --git a/monai/csrc/utils/meta_macros.h b/monai/csrc/utils/meta_macros.h new file mode 100644 index 0000000000..73d1851198 --- /dev/null +++ b/monai/csrc/utils/meta_macros.h @@ -0,0 +1,131 @@ +/* +Copyright 2020 MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#pragma once + +// Helper Macros: for internal use (see below) +#define _DO_1(TARGET) TARGET(1) +#define _DO_2(TARGET) TARGET(2) _DO_1(TARGET) +#define _DO_3(TARGET) TARGET(3) _DO_2(TARGET) +#define _DO_4(TARGET) TARGET(4) _DO_3(TARGET) +#define _DO_5(TARGET) TARGET(5) _DO_4(TARGET) +#define _DO_6(TARGET) TARGET(6) _DO_5(TARGET) +#define _DO_7(TARGET) TARGET(7) _DO_6(TARGET) +#define _DO_8(TARGET) TARGET(8) _DO_7(TARGET) +#define _DO_9(TARGET) TARGET(9) _DO_8(TARGET) +#define _DO_10(TARGET) TARGET(10) _DO_9(TARGET) +#define _DO_11(TARGET) TARGET(11) _DO_10(TARGET) +#define _DO_12(TARGET) TARGET(12) _DO_11(TARGET) +#define _DO_13(TARGET) TARGET(13) _DO_12(TARGET) +#define _DO_14(TARGET) TARGET(14) _DO_13(TARGET) +#define _DO_15(TARGET) TARGET(15) _DO_14(TARGET) +#define _DO_16(TARGET) TARGET(16) _DO_15(TARGET) +#define _DO_17(TARGET) TARGET(17) _DO_16(TARGET) +#define _DO_18(TARGET) TARGET(18) _DO_17(TARGET) +#define _DO_19(TARGET) TARGET(19) _DO_18(TARGET) +#define _DO_20(TARGET) TARGET(20) _DO_19(TARGET) +#define _DO_21(TARGET) TARGET(21) _DO_20(TARGET) +#define _DO_22(TARGET) TARGET(22) _DO_21(TARGET) +#define _DO_23(TARGET) TARGET(23) _DO_22(TARGET) +#define _DO_24(TARGET) TARGET(24) _DO_23(TARGET) +#define _DO_25(TARGET) TARGET(25) _DO_24(TARGET) +#define _DO_26(TARGET) TARGET(26) _DO_25(TARGET) +#define _DO_27(TARGET) TARGET(27) _DO_26(TARGET) +#define _DO_28(TARGET) TARGET(28) _DO_27(TARGET) +#define _DO_29(TARGET) TARGET(29) _DO_28(TARGET) +#define _DO_30(TARGET) TARGET(30) _DO_29(TARGET) +#define _DO_31(TARGET) TARGET(31) _DO_30(TARGET) +#define _DO_32(TARGET) TARGET(32) _DO_31(TARGET) + +#define _DO_A_1(TARGET, A) TARGET(A, 1) +#define _DO_A_2(TARGET, A) TARGET(A, 2) _DO_A_1(TARGET, A) +#define _DO_A_3(TARGET, A) TARGET(A, 3) _DO_A_2(TARGET, A) +#define _DO_A_4(TARGET, A) TARGET(A, 4) _DO_A_3(TARGET, A) +#define _DO_A_5(TARGET, A) TARGET(A, 5) _DO_A_4(TARGET, A) +#define _DO_A_6(TARGET, A) TARGET(A, 6) _DO_A_5(TARGET, A) +#define _DO_A_7(TARGET, A) TARGET(A, 7) _DO_A_6(TARGET, A) +#define _DO_A_8(TARGET, A) TARGET(A, 8) _DO_A_7(TARGET, A) +#define _DO_A_9(TARGET, A) TARGET(A, 9) _DO_A_8(TARGET, A) +#define _DO_A_10(TARGET, A) TARGET(A, 10) _DO_A_9(TARGET, A) +#define _DO_A_11(TARGET, A) TARGET(A, 11) _DO_A_10(TARGET, A) +#define _DO_A_12(TARGET, A) TARGET(A, 12) _DO_A_11(TARGET, A) +#define _DO_A_13(TARGET, A) TARGET(A, 13) _DO_A_12(TARGET, A) +#define _DO_A_14(TARGET, A) TARGET(A, 14) _DO_A_13(TARGET, A) +#define _DO_A_15(TARGET, A) TARGET(A, 15) _DO_A_14(TARGET, A) +#define _DO_A_16(TARGET, A) TARGET(A, 16) _DO_A_15(TARGET, A) +#define _DO_A_17(TARGET, A) TARGET(A, 17) _DO_A_16(TARGET, A) +#define _DO_A_18(TARGET, A) TARGET(A, 18) _DO_A_17(TARGET, A) +#define _DO_A_19(TARGET, A) TARGET(A, 19) _DO_A_18(TARGET, A) +#define _DO_A_20(TARGET, A) TARGET(A, 20) _DO_A_19(TARGET, A) +#define _DO_A_21(TARGET, A) TARGET(A, 21) _DO_A_20(TARGET, A) +#define _DO_A_22(TARGET, A) TARGET(A, 22) _DO_A_21(TARGET, A) +#define _DO_A_23(TARGET, A) TARGET(A, 23) _DO_A_22(TARGET, A) +#define _DO_A_24(TARGET, A) TARGET(A, 24) _DO_A_23(TARGET, A) +#define _DO_A_25(TARGET, A) TARGET(A, 25) _DO_A_24(TARGET, A) +#define _DO_A_26(TARGET, A) TARGET(A, 26) _DO_A_25(TARGET, A) +#define _DO_A_27(TARGET, A) TARGET(A, 27) _DO_A_26(TARGET, A) +#define _DO_A_28(TARGET, A) TARGET(A, 28) _DO_A_27(TARGET, A) +#define _DO_A_29(TARGET, A) TARGET(A, 29) _DO_A_28(TARGET, A) +#define _DO_A_30(TARGET, A) TARGET(A, 30) _DO_A_29(TARGET, A) +#define _DO_A_31(TARGET, A) TARGET(A, 31) _DO_A_30(TARGET, A) +#define _DO_A_32(TARGET, A) TARGET(A, 32) _DO_A_31(TARGET, A) + +#define _DO_1_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 1) +#define _DO_2_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 2) _DO_1_B(TARGET, B_RANGE) +#define _DO_3_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 3) _DO_2_B(TARGET, B_RANGE) +#define _DO_4_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 4) _DO_3_B(TARGET, B_RANGE) +#define _DO_5_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 5) _DO_4_B(TARGET, B_RANGE) +#define _DO_6_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 6) _DO_5_B(TARGET, B_RANGE) +#define _DO_7_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 7) _DO_6_B(TARGET, B_RANGE) +#define _DO_8_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 8) _DO_7_B(TARGET, B_RANGE) +#define _DO_9_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 9) _DO_8_B(TARGET, B_RANGE) +#define _DO_10_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 10) _DO_9_B(TARGET, B_RANGE) +#define _DO_11_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 11) _DO_10_B(TARGET, B_RANGE) +#define _DO_12_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 12) _DO_11_B(TARGET, B_RANGE) +#define _DO_13_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 13) _DO_12_B(TARGET, B_RANGE) +#define _DO_14_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 14) _DO_13_B(TARGET, B_RANGE) +#define _DO_15_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 15) _DO_14_B(TARGET, B_RANGE) +#define _DO_16_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 16) _DO_15_B(TARGET, B_RANGE) +#define _DO_17_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 17) _DO_16_B(TARGET, B_RANGE) +#define _DO_18_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 18) _DO_17_B(TARGET, B_RANGE) +#define _DO_19_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 19) _DO_18_B(TARGET, B_RANGE) +#define _DO_20_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 20) _DO_19_B(TARGET, B_RANGE) +#define _DO_21_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 21) _DO_20_B(TARGET, B_RANGE) +#define _DO_22_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 22) _DO_21_B(TARGET, B_RANGE) +#define _DO_23_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 23) _DO_22_B(TARGET, B_RANGE) +#define _DO_24_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 24) _DO_23_B(TARGET, B_RANGE) +#define _DO_25_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 25) _DO_24_B(TARGET, B_RANGE) +#define _DO_26_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 26) _DO_25_B(TARGET, B_RANGE) +#define _DO_27_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 27) _DO_26_B(TARGET, B_RANGE) +#define _DO_28_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 28) _DO_27_B(TARGET, B_RANGE) +#define _DO_29_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 29) _DO_28_B(TARGET, B_RANGE) +#define _DO_30_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 30) _DO_29_B(TARGET, B_RANGE) +#define _DO_31_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 31) _DO_30_B(TARGET, B_RANGE) +#define _DO_32_B(TARGET, B_RANGE) _DO_A_##B_RANGE(TARGET, 32) _DO_31_B(TARGET, B_RANGE) + +#define _CASE_A(A) \ + case (A): \ + CASE(A) break; +#define _CASE_AB(A, B) \ + case (A * 100 + B): \ + CASE(A, B) break; + +// Preproccessor For Loops +#define DO_FOR_A(TARGET, A_RANGE) _DO_##A_RANGE(TARGET) +#define DO_FOR_AB(TARGET, A_RANGE, B_RANGE) _DO_##A_RANGE##_B(TARGET, B_RANGE) + +// Preproccessor Switch Statement Generators +#define SWITCH_A(CASE, A_RANGE, A) \ + switch (A) { DO_FOR_A(_CASE_A, A_RANGE) } +#define SWITCH_AB(CALL, A_RANGE, B_RANGE, A, B) \ + switch (A * 100 + B) { DO_FOR_AB(_CASE_AB, A_RANGE, B_RANGE) } diff --git a/monai/csrc/utils/tensor_description.h b/monai/csrc/utils/tensor_description.h new file mode 100644 index 0000000000..6072037f72 --- /dev/null +++ b/monai/csrc/utils/tensor_description.h @@ -0,0 +1,40 @@ + +#include + +// Struct to easily cache descriptive information about a tensor. +// This is helpful as regular calls to the size and stride member +// functions of tensors appear to cause memory issues. +struct TensorDescription { + public: + TensorDescription(torch::Tensor tensor) { + batchCount = tensor.size(0); + batchStride = tensor.stride(0); + + channelCount = tensor.size(1); + channelStride = tensor.stride(1); + + dimensions = tensor.dim() - 2; + sizes = new int[dimensions]; + strides = new int[dimensions]; + + for (int i = 0; i < dimensions; i++) { + sizes[i] = tensor.size(i + 2); + strides[i] = tensor.stride(i + 2); + } + } + + ~TensorDescription() { + delete[] sizes; + delete[] strides; + } + + int batchCount; + int batchStride; + + int channelCount; + int channelStride; + + int dimensions; + int* sizes; + int* strides; +}; diff --git a/monai/networks/layers/__init__.py b/monai/networks/layers/__init__.py index 9125dc38cf..f400eaf3a3 100644 --- a/monai/networks/layers/__init__.py +++ b/monai/networks/layers/__init__.py @@ -11,5 +11,6 @@ from .convutils import * from .factories import * +from .filtering import * from .simplelayers import * from .spatial_transforms import * diff --git a/monai/networks/layers/filtering.py b/monai/networks/layers/filtering.py new file mode 100644 index 0000000000..dcb172d892 --- /dev/null +++ b/monai/networks/layers/filtering.py @@ -0,0 +1,58 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import torch + +from monai.utils.module import optional_import + +_C, _ = optional_import("monai._C") + +__all__ = ["BilateralFilter"] + + +class BilateralFilter(torch.autograd.Function): + """ + Blurs the input tensor spatially whilst preserving edges. Can run on 1D, 2D, or 3D, + tensors (on top of Batch and Channel dimensions). Two implementations are provided, + an exact solution and a much faster approximation which uses a permutohedral lattice. + + See: + https://en.wikipedia.org/wiki/Bilateral_filter + https://graphics.stanford.edu/papers/permutohedral/ + + Args: + input: input tensor. + + spatial sigma: the standard deviation of the spatial blur. Higher values can + hurt performace when not using the approximate method (see fast approx). + + color sigma: the standard deviation of the color blur. Lower values preserve + edges better whilst higher values tend to a simple gaussian spatial blur. + + fast approx: This flag chooses between two implementations. The approximate method may + produce artifacts in some scenarios whereas the exact solution may be intolerably + slow for high spatial standard deviations. + + Returns: + output (torch.Tensor): output tensor. + """ + + @staticmethod + def forward(ctx, input, spatial_sigma=5, color_sigma=0.5, fast_approx=True): + ctx.save_for_backward(spatial_sigma, color_sigma, fast_approx) + output_data = _C.bilateral_filter(input, spatial_sigma, color_sigma, fast_approx) + return output_data + + @staticmethod + def backward(ctx, grad_output): + spatial_sigma, color_sigma, fast_approx = ctx.saved_variables + grad_input = _C.bilateral_filter(grad_output, spatial_sigma, color_sigma, fast_approx) + return grad_input diff --git a/tests/test_bilateral_approx_cpu.py b/tests/test_bilateral_approx_cpu.py new file mode 100644 index 0000000000..13aaaeb34e --- /dev/null +++ b/tests/test_bilateral_approx_cpu.py @@ -0,0 +1,381 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +import torch +from parameterized import parameterized + +from monai.networks.layers.filtering import BilateralFilter +from tests.utils import skip_if_no_cpp_extention + +TEST_CASES = [ + [ + # Case Descirption + "1 dimension, 1 channel, low spatial sigma, low color sigma", + # Spatial and Color Sigmas + (1, 0.2), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [1.000000, 0.000000, 0.000000, 0.000000, 1.000000] + ], + # Batch 1 + [ + # Channel 0 + [0.000000, 0.000000, 1.000000, 0.000000, 0.000000] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, low spatial sigma, high color sigma", + # Spatial and Color Sigmas + (1, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.631360, 0.099349, 0.070177, 0.164534, 0.649869] + ], + # Batch 1 + [ + # Channel 0 + [0.052271, 0.173599, 0.481337, 0.183721, 0.045619] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, high spatial sigma, low color sigma", + # Spatial and Color Sigmas + (4, 0.2), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [1.000000, 0.000000, 0.000000, 0.000000, 1.000000] + ], + # Batch 1 + [ + # Channel 0 + [0.000000, 0.000000, 1.000000, 0.000000, 0.000000] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.497667, 0.268683, 0.265026, 0.261467, 0.495981] + ], + # Batch 1 + [ + # Channel 0 + [0.145959, 0.142282, 0.315710, 0.135609, 0.132572] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 4 channel, low spatial sigma, high color sigma", + # Spatial and Color Sigmas + (1, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 0], + # Channel 1 + [1, 0, 1, 0, 0], + # Channel 2 + [0, 0, 1, 0, 1], + # Channel 3 + [0, 0, 0, 0, 1], + ] + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.960843, 0.073540, 0.027689, 0.002676, 0.000000], + # Channel 1 + [0.960843, 0.073540, 0.951248, 0.003033, 0.000750], + # Channel 2 + [0.000000, 0.000000, 0.923559, 0.000357, 0.981324], + # Channel 3 + [0.000000, 0.000000, 0.000000, 0.000000, 0.980574], + ] + ], + ], + [ + # Case Descirption + "2 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]] + ], + # Batch 1 + [ + # Channel 0 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + [0.213684, 0.094356, 0.092973, 0.091650, 0.216281], + [0.094085, 0.092654, 0.091395, 0.090186, 0.089302], + [0.092436, 0.091150, 0.090008, 0.088896, 0.088897], + [0.090849, 0.089717, 0.088759, 0.087751, 0.088501], + [0.211458, 0.088334, 0.087495, 0.087049, 0.212173], + ] + ], + # Batch 1 + [ + # Channel 0 + [ + [0.033341, 0.031314, 0.029367, 0.027494, 0.025692], + [0.031869, 0.030632, 0.028820, 0.027074, 0.025454], + [0.030455, 0.029628, 0.084257, 0.026704, 0.025372], + [0.029095, 0.028391, 0.027790, 0.026375, 0.025292], + [0.027786, 0.027197, 0.026692, 0.026181, 0.025213], + ] + ], + ], + ], + [ + # Case Descirption + "2 dimension, 4 channel, high spatial sigma, high color sigma", + # Spatial and Color Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1]], + # Channel 1 + [[1, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 1]], + # Channel 2 + [[0, 0, 1, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 1, 0, 0]], + # Channel 3 + [[0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 0]], + ] + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + [0.244373, 0.014488, 0.036589, 0.014226, 0.024329], + [0.014108, 0.014228, 0.014096, 0.013961, 0.013823], + [0.013574, 0.013757, 0.013836, 0.013699, 0.013558], + [0.013008, 0.013211, 0.013404, 0.013438, 0.013295], + [0.025179, 0.012634, 0.034555, 0.013050, 0.237582], + ], + # Channel 1 + [ + [0.271496, 0.015547, 0.439432, 0.015700, 0.089579], + [0.015252, 0.015702, 0.015779, 0.015859, 0.015940], + [0.015020, 0.015556, 0.015935, 0.016015, 0.016098], + [0.014774, 0.015331, 0.015860, 0.016171, 0.016255], + [0.107384, 0.015094, 0.462471, 0.016166, 0.263480], + ], + # Channel 2 + [ + [0.027123, 0.003527, 0.467273, 0.004912, 0.645776], + [0.003810, 0.004908, 0.005605, 0.006319, 0.007050], + [0.004816, 0.005991, 0.006989, 0.007716, 0.008459], + [0.005880, 0.007060, 0.008179, 0.009101, 0.009858], + [0.633398, 0.008191, 0.496893, 0.010376, 0.025898], + ], + # Channel 3 + [ + [0.000000, 0.002468, 0.064430, 0.003437, 0.580526], + [0.002666, 0.003434, 0.003922, 0.004422, 0.004933], + [0.003370, 0.004192, 0.004890, 0.005399, 0.005919], + [0.004115, 0.004940, 0.005723, 0.006368, 0.006898], + [0.551194, 0.005731, 0.068977, 0.007260, 0.000000], + ], + ] + ], + ], + [ + # Case Descirption + "3 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [ + # Frame 0 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]], + # Frame 1 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 2 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 3 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 4 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]], + ] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + # Frame 0 + [ + [0.086801, 0.036670, 0.035971, 0.035304, 0.088456], + [0.036639, 0.035652, 0.035009, 0.034394, 0.033803], + [0.035899, 0.034897, 0.034136, 0.033566, 0.033129], + [0.035180, 0.034238, 0.033413, 0.032811, 0.032577], + [0.088290, 0.033597, 0.032821, 0.032134, 0.088786], + ], + # Frame 1 + [ + [0.036286, 0.035269, 0.034632, 0.034021, 0.033435], + [0.035398, 0.034485, 0.033922, 0.033381, 0.033177], + [0.034688, 0.033822, 0.033169, 0.032664, 0.032780], + [0.034024, 0.033234, 0.032533, 0.032005, 0.032388], + [0.033564, 0.032797, 0.032118, 0.031525, 0.032105], + ], + # Frame 2 + [ + [0.035225, 0.034169, 0.033404, 0.032843, 0.032766], + [0.034383, 0.033487, 0.032908, 0.032415, 0.032650], + [0.033691, 0.032921, 0.032353, 0.031900, 0.032384], + [0.033080, 0.032390, 0.031786, 0.031432, 0.032008], + [0.033099, 0.032373, 0.031737, 0.031479, 0.032054], + ], + # Frame 3 + [ + [0.034216, 0.033231, 0.032337, 0.031758, 0.032101], + [0.033456, 0.032669, 0.031913, 0.031455, 0.032034], + [0.032788, 0.032140, 0.031618, 0.031413, 0.031977], + [0.032221, 0.031650, 0.031145, 0.031130, 0.031652], + [0.032642, 0.031968, 0.031378, 0.031433, 0.032003], + ], + # Frame 4 + [ + [0.086207, 0.032335, 0.031499, 0.030832, 0.087498], + [0.032570, 0.031884, 0.031155, 0.030858, 0.031401], + [0.031967, 0.031417, 0.030876, 0.030881, 0.031388], + [0.031602, 0.031103, 0.030696, 0.030960, 0.031455], + [0.090599, 0.031546, 0.031127, 0.031386, 0.083483], + ], + ] + ] + ], + ], +] + + +@skip_if_no_cpp_extention +class BilateralFilterTestCaseCpuApprox(unittest.TestCase): + @parameterized.expand(TEST_CASES) + def test_cpu_approx(self, test_case_description, sigmas, input, expected): + + # Params to determine the implementation to test + device = torch.device("cpu") + fast_approx = True + + # Create input tensor and apply filter + input_tensor = torch.from_numpy(np.array(input)).to(dtype=torch.float, device=device) + output = BilateralFilter.apply(input_tensor, *sigmas, fast_approx).cpu().numpy() + + # Ensure result are as expected + np.testing.assert_allclose(output, expected, atol=1e-5) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_bilateral_approx_cuda.py b/tests/test_bilateral_approx_cuda.py new file mode 100644 index 0000000000..5ea0d997d1 --- /dev/null +++ b/tests/test_bilateral_approx_cuda.py @@ -0,0 +1,386 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +import torch +from parameterized import parameterized + +from monai.networks.layers.filtering import BilateralFilter +from tests.utils import skip_if_no_cpp_extention, skip_if_no_cuda + +TEST_CASES = [ + [ + # Case Descirption + "1 dimension, 1 channel, low spatial sigma, low color sigma", + # Spatial and Color Sigmas + (1, 0.2), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [1.000000, 0.000000, 0.000000, 0.000000, 1.000000] + ], + # Batch 1 + [ + # Channel 0 + [0.000000, 0.000000, 1.000000, 0.000000, 0.000000] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, low spatial sigma, high color sigma", + # Spatial and Color Sigmas + (1, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.880626, 0.306148, 0.158734, 0.164534, 0.754386] + ], + # Batch 1 + [ + # Channel 0 + [0.019010, 0.104507, 0.605634, 0.183721, 0.045619] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, high spatial sigma, low color sigma", + # Spatial and Color Sigmas + (4, 0.2), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [1.000000, 0.000000, 0.000000, 0.000000, 1.000000] + ], + # Batch 1 + [ + # Channel 0 + [0.000000, 0.000000, 1.000000, 0.000000, 0.000000] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.497667, 0.268683, 0.265026, 0.261467, 0.495981] + ], + # Batch 1 + [ + # Channel 0 + [0.149889, 0.148226, 0.367978, 0.144023, 0.141317] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 4 channel, low spatial sigma, high color sigma", + # Spatial and Color Sigmas + (1, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 0], + # Channel 1 + [1, 0, 1, 0, 0], + # Channel 2 + [0, 0, 1, 0, 1], + # Channel 3 + [0, 0, 0, 0, 1], + ] + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.988107, 0.061340, 0.001565, 0.000011, 0.000000], + # Channel 1 + [0.988107, 0.061340, 0.998000, 0.000016, 0.000123], + # Channel 2 + [0.000000, 0.000000, 0.996435, 0.000006, 0.999236], + # Channel 3 + [0.000000, 0.000000, 0.000000, 0.000000, 0.999113], + ] + ], + ], + [ + # Case Descirption + "2 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]] + ], + # Batch 1 + [ + # Channel 0 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + [0.211469, 0.094356, 0.092973, 0.091650, 0.211894], + [0.093755, 0.091753, 0.090524, 0.089343, 0.088384], + [0.091803, 0.089783, 0.088409, 0.087346, 0.086927], + [0.089938, 0.088126, 0.086613, 0.085601, 0.085535], + [0.208359, 0.086535, 0.085179, 0.084210, 0.205858], + ] + ], + # Batch 1 + [ + # Channel 0 + [ + [0.032760, 0.030146, 0.027442, 0.024643, 0.021744], + [0.030955, 0.029416, 0.026574, 0.023629, 0.020841], + [0.028915, 0.027834, 0.115442, 0.022515, 0.020442], + [0.026589, 0.025447, 0.024319, 0.021286, 0.019964], + [0.023913, 0.022704, 0.021510, 0.020388, 0.019379], + ] + ], + ], + ], + [ + # Case Descirption + "2 dimension, 4 channel, high spatial sigma, high color sigma", + # Spatial and Color Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1]], + # Channel 1 + [[1, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 1]], + # Channel 2 + [[0, 0, 1, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 1, 0, 0]], + # Channel 3 + [[0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 0]], + ] + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + [0.557349, 0.011031, 0.001800, 0.011265, 0.000631], + [0.009824, 0.010361, 0.010429, 0.010506, 0.010595], + [0.008709, 0.009252, 0.009688, 0.009714, 0.009744], + [0.007589, 0.008042, 0.008576, 0.008887, 0.008852], + [0.000420, 0.006827, 0.001048, 0.007763, 0.190722], + ], + # Channel 1 + [ + [0.614072, 0.011045, 0.925766, 0.011287, 0.007548], + [0.009838, 0.010382, 0.010454, 0.010536, 0.010630], + [0.008727, 0.009277, 0.009720, 0.009751, 0.009787], + [0.007611, 0.008071, 0.008613, 0.008932, 0.008904], + [0.027088, 0.006859, 0.950749, 0.007815, 0.230270], + ], + # Channel 2 + [ + [0.056723, 0.000150, 0.973790, 0.000233, 0.990814], + [0.000151, 0.000214, 0.000257, 0.000307, 0.000364], + [0.000186, 0.000257, 0.000328, 0.000384, 0.000449], + [0.000221, 0.000295, 0.000382, 0.000465, 0.000538], + [0.993884, 0.000333, 0.984743, 0.000532, 0.039548], + ], + # Channel 3 + [ + [0.000000, 0.000136, 0.049824, 0.000210, 0.983897], + [0.000136, 0.000193, 0.000232, 0.000277, 0.000329], + [0.000168, 0.000232, 0.000297, 0.000347, 0.000405], + [0.000200, 0.000266, 0.000345, 0.000420, 0.000485], + [0.967217, 0.000301, 0.035041, 0.000481, 0.000000], + ], + ] + ], + ], + [ + # Case Descirption + "3 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [ + # Frame 0 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]], + # Frame 1 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 2 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 3 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 4 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]], + ] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + # Frame 0 + [ + [0.085451, 0.037820, 0.036880, 0.035978, 0.084296], + [0.037939, 0.036953, 0.036155, 0.035385, 0.034640], + [0.037167, 0.036302, 0.035603, 0.034931, 0.034465], + [0.036469, 0.035724, 0.035137, 0.034572, 0.034480], + [0.088942, 0.035193, 0.034682, 0.034266, 0.090568], + ], + # Frame 1 + [ + [0.037125, 0.035944, 0.035103, 0.033429, 0.033498], + [0.033380, 0.032653, 0.033748, 0.033073, 0.032549], + [0.034834, 0.034001, 0.033500, 0.032902, 0.032560], + [0.033972, 0.033554, 0.033220, 0.032765, 0.032570], + [0.033590, 0.033222, 0.032927, 0.032689, 0.032629], + ], + # Frame 2 + [ + [0.035635, 0.034468, 0.033551, 0.032818, 0.032302], + [0.034523, 0.032830, 0.032146, 0.031536, 0.031149], + [0.033612, 0.032011, 0.031664, 0.031128, 0.030839], + [0.032801, 0.031668, 0.031529, 0.031198, 0.030978], + [0.032337, 0.031550, 0.031419, 0.031383, 0.031211], + ], + # Frame 3 + [ + [0.034300, 0.033236, 0.032239, 0.031517, 0.031133], + [0.033357, 0.031842, 0.031035, 0.030471, 0.030126], + [0.032563, 0.031094, 0.030156, 0.029703, 0.029324], + [0.031850, 0.030505, 0.030027, 0.029802, 0.029461], + [0.031555, 0.030121, 0.029943, 0.030000, 0.029700], + ], + # Frame 4 + [ + [0.083156, 0.032122, 0.031204, 0.030380, 0.080582], + [0.032296, 0.030936, 0.030170, 0.029557, 0.029124], + [0.031617, 0.030293, 0.029377, 0.028886, 0.028431], + [0.031084, 0.029859, 0.028839, 0.028439, 0.027973], + [0.164616, 0.029457, 0.028484, 0.028532, 0.211082], + ], + ] + ] + ], + ], +] + + +@skip_if_no_cuda +@skip_if_no_cpp_extention +class BilateralFilterTestCaseCudaApprox(unittest.TestCase): + @parameterized.expand(TEST_CASES) + def test_cuda_approx(self, test_case_description, sigmas, input, expected): + + # Skip this test + if not torch.cuda.is_available(): + return + + # Params to determine the implementation to test + device = torch.device("cuda") + fast_approx = True + + # Create input tensor and apply filter + input_tensor = torch.from_numpy(np.array(input)).to(dtype=torch.float, device=device) + output = BilateralFilter.apply(input_tensor, *sigmas, fast_approx).cpu().numpy() + + # Ensure result are as expected + np.testing.assert_allclose(output, expected, atol=1e-2) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_bilateral_precise.py b/tests/test_bilateral_precise.py new file mode 100644 index 0000000000..f2a265b106 --- /dev/null +++ b/tests/test_bilateral_precise.py @@ -0,0 +1,403 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import numpy as np +import torch +from parameterized import parameterized + +from monai.networks.layers.filtering import BilateralFilter +from tests.utils import skip_if_no_cpp_extention, skip_if_no_cuda + +TEST_CASES = [ + [ + # Case Descirption + "1 dimension, 1 channel, low spatial sigma, low color sigma", + # Spatial and Color Sigmas + (1, 0.2), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.999998, 0.000002, 0.000000, 0.000002, 0.999998] + ], + # Batch 1 + [ + # Channel 0 + [0.000000, 0.000001, 0.999995, 0.000001, 0.000000] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, low spatial sigma, high color sigma", + # Spatial and Color Sigmas + (1, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.813183, 0.186817, 0.061890, 0.186817, 0.813183] + ], + # Batch 1 + [ + # Channel 0 + [0.030148, 0.148418, 0.555452, 0.148418, 0.030148] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, high spatial sigma, low color sigma", + # Spatial and Color Sigmas + (4, 0.2), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.999999, 0.000009, 0.000009, 0.000009, 0.999999] + ], + # Batch 1 + [ + # Channel 0 + [0.000000, 0.000000, 0.999967, 0.000000, 0.000000] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 1] + ], + # Batch 1 + [ + # Channel 0 + [0, 0, 1, 0, 0] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.839145, 0.572834, 0.562460, 0.572834, 0.839145] + ], + # Batch 1 + [ + # Channel 0 + [0.049925, 0.055062, 0.171732, 0.055062, 0.049925] + ], + ], + ], + [ + # Case Descirption + "1 dimension, 4 channel, low spatial sigma, high color sigma", + # Spatial and Color Sigmas + (1, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [1, 0, 0, 0, 0], + # Channel 1 + [1, 0, 1, 0, 0], + # Channel 2 + [0, 0, 1, 0, 1], + # Channel 3 + [0, 0, 0, 0, 1], + ] + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [0.889742, 0.141296, 0.027504, 0.000000, 0.000000], + # Channel 1 + [0.909856, 0.256817, 0.725970, 0.115520, 0.020114], + # Channel 2 + [0.020114, 0.115520, 0.725970, 0.256817, 0.909856], + # Channel 3 + [0.000000, 0.000000, 0.027504, 0.141296, 0.889742], + ] + ], + ], + [ + # Case Descirption + "2 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]] + ], + # Batch 1 + [ + # Channel 0 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + [0.688943, 0.374599, 0.368574, 0.374599, 0.688943], + [0.374599, 0.358248, 0.352546, 0.358248, 0.374599], + [0.368574, 0.352546, 0.346955, 0.352546, 0.368574], + [0.374599, 0.358248, 0.352546, 0.358248, 0.374599], + [0.688943, 0.374599, 0.368574, 0.374599, 0.688943], + ] + ], + # Batch 1 + [ + # Channel 0 + [ + [0.004266, 0.004687, 0.004836, 0.004687, 0.004266], + [0.004687, 0.005150, 0.005314, 0.005150, 0.004687], + [0.004836, 0.005314, 0.018598, 0.005314, 0.004836], + [0.004687, 0.005150, 0.005314, 0.005150, 0.004687], + [0.004266, 0.004687, 0.004836, 0.004687, 0.004266], + ] + ], + ], + ], + [ + # Case Descirption + "2 dimension, 4 channel, high spatial sigma, high color sigma", + # Spatial and Color Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1]], + # Channel 1 + [[1, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 1]], + # Channel 2 + [[0, 0, 1, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 1, 0, 0]], + # Channel 3 + [[0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 0]], + ] + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + [0.692549, 0.149979, 0.220063, 0.115840, 0.035799], + [0.148403, 0.133935, 0.123253, 0.116828, 0.114623], + [0.128773, 0.122804, 0.120731, 0.122804, 0.128773], + [0.114623, 0.116828, 0.123253, 0.133935, 0.148403], + [0.035799, 0.115840, 0.220063, 0.149979, 0.692549], + ], + # Channel 1 + [ + [0.731597, 0.186319, 0.436069, 0.152181, 0.074847], + [0.180049, 0.168217, 0.158453, 0.151110, 0.146269], + [0.159760, 0.156381, 0.155211, 0.156381, 0.159760], + [0.146269, 0.151110, 0.158453, 0.168217, 0.180049], + [0.074847, 0.152181, 0.436068, 0.186319, 0.731597], + ], + # Channel 2 + [ + [0.074847, 0.152181, 0.436068, 0.186319, 0.731597], + [0.146269, 0.151110, 0.158453, 0.168217, 0.180049], + [0.159760, 0.156381, 0.155211, 0.156381, 0.159760], + [0.180049, 0.168217, 0.158453, 0.151110, 0.146269], + [0.731597, 0.186319, 0.436069, 0.152181, 0.074847], + ], + # Channel 3 + [ + [0.035799, 0.115840, 0.220063, 0.149979, 0.692549], + [0.114623, 0.116828, 0.123253, 0.133935, 0.148403], + [0.128773, 0.122804, 0.120731, 0.122804, 0.128773], + [0.148403, 0.133935, 0.123253, 0.116828, 0.114623], + [0.692549, 0.149979, 0.220063, 0.115840, 0.035799], + ], + ] + ], + ], + [ + # Case Descirption + "3 dimension, 1 channel, high spatial sigma, high color sigma", + # Sigmas + (4, 0.9), + # Input + [ + # Batch 0 + [ + # Channel 0 + [ + # Frame 0 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]], + # Frame 1 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 2 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 3 + [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + # Frame 4 + [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1]], + ] + ], + ], + # Expected + [ + # Batch 0 + [ + # Channel 0 + [ + # Frame 0 + [ + [0.554430, 0.254995, 0.251207, 0.254996, 0.554430], + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + [0.251207, 0.241082, 0.237534, 0.241082, 0.251207], + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + [0.554430, 0.254995, 0.251207, 0.254996, 0.554430], + ], + # Frame 1 + [ + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + [0.244692, 0.234873, 0.231432, 0.234873, 0.244692], + [0.241082, 0.231431, 0.228049, 0.231432, 0.241082], + [0.244692, 0.234873, 0.231432, 0.234873, 0.244692], + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + ], + # Frame 2 + [ + [0.251207, 0.241081, 0.237534, 0.241082, 0.251207], + [0.241082, 0.231431, 0.228049, 0.231432, 0.241082], + [0.237534, 0.228048, 0.224724, 0.228049, 0.237534], + [0.241082, 0.231431, 0.228049, 0.231432, 0.241082], + [0.251207, 0.241081, 0.237534, 0.241082, 0.251207], + ], + # Frame 3 + [ + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + [0.244692, 0.234873, 0.231432, 0.234873, 0.244692], + [0.241082, 0.231431, 0.228049, 0.231432, 0.241082], + [0.244692, 0.234873, 0.231432, 0.234873, 0.244692], + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + ], + # Frame 4 + [ + [0.554430, 0.254995, 0.251207, 0.254996, 0.554430], + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + [0.251207, 0.241082, 0.237534, 0.241082, 0.251207], + [0.254996, 0.244691, 0.241082, 0.244692, 0.254996], + [0.554430, 0.254995, 0.251207, 0.254996, 0.554430], + ], + ] + ] + ], + ], +] + + +@skip_if_no_cpp_extention +class BilateralFilterTestCaseCpuPrecised(unittest.TestCase): + @parameterized.expand(TEST_CASES) + def test_cpu_precised(self, test_case_description, sigmas, input, expected): + + # Params to determine the implementation to test + device = torch.device("cpu") + fast_approx = False + + # Create input tensor and apply filter + input_tensor = torch.from_numpy(np.array(input)).to(dtype=torch.float, device=device) + output = BilateralFilter.apply(input_tensor, *sigmas, fast_approx).cpu().numpy() + + # Ensure result are as expected + np.testing.assert_allclose(output, expected, atol=1e-5) + + +@skip_if_no_cuda +@skip_if_no_cpp_extention +class BilateralFilterTestCaseCudaPrecised(unittest.TestCase): + @parameterized.expand(TEST_CASES) + def test_cuda_precised(self, test_case_description, sigmas, input, expected): + + # Skip this test + if not torch.cuda.is_available(): + return + + # Params to determine the implementation to test + device = torch.device("cuda") + fast_approx = False + + # Create input tensor and apply filter + input_tensor = torch.from_numpy(np.array(input)).to(dtype=torch.float, device=device) + output = BilateralFilter.apply(input_tensor, *sigmas, fast_approx).cpu().numpy() + + # Ensure result are as expected + np.testing.assert_allclose(output, expected, atol=1e-5) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/utils.py b/tests/utils.py index 50c159053e..0b6c4e7318 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -28,6 +28,7 @@ import torch import torch.distributed as dist +from monai.config.deviceconfig import USE_COMPILED from monai.data import create_test_image_2d, create_test_image_3d from monai.utils import ensure_tuple, optional_import, set_determinism from monai.utils.module import get_torch_version_tuple @@ -80,6 +81,13 @@ def __call__(self, obj): return unittest.skipIf(self.module_avail, f"Skipping because optional module present: {self.module_name}")(obj) +def skip_if_no_cpp_extention(obj): + """ + Skip the unit tests if the cpp extention isnt available + """ + return unittest.skipIf(not USE_COMPILED, "Skipping cpp extention tests")(obj) + + def skip_if_no_cuda(obj): """ Skip the unit tests if torch.cuda.is_available is False From 80a364198682a693fe43800bd5a4ca646c0ee750 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Fri, 18 Dec 2020 16:21:31 +0000 Subject: [PATCH 35/40] update contributing and normalis* -> normaliz* (#1388) Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> Signed-off-by: Sachidanand Alle --- CONTRIBUTING.md | 2 ++ monai/networks/blocks/acti_norm.py | 2 +- monai/networks/layers/factories.py | 2 +- monai/networks/layers/spatial_transforms.py | 2 +- monai/transforms/compose.py | 2 +- monai/utils/enums.py | 2 +- tests/test_unet.py | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9b610ee64..81c5b32174 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,6 +32,8 @@ _Pull request early_ We encourage you to create pull requests early. It helps us track the contributions under development, whether they are ready to be merged or not. Change your pull request's title to begin with `[WIP]` until it is ready for formal review. +Please note that, as per PyTorch, MONAI uses American English spelling. This means classes and variables should be: normali**z**e, visuali**z**e, colo~~u~~r, etc. + ### Preparing pull requests To ensure the code quality, MONAI relies on several linting tools ([flake8 and its plugins](https://gitlab.com/pycqa/flake8), [black](https://github.com/psf/black), [isort](https://github.com/timothycrosley/isort)), static type analysis tools ([mypy](https://github.com/python/mypy), [pytype](https://github.com/google/pytype)), as well as a set of unit/integration tests. diff --git a/monai/networks/blocks/acti_norm.py b/monai/networks/blocks/acti_norm.py index 585726edf2..ab399d4957 100644 --- a/monai/networks/blocks/acti_norm.py +++ b/monai/networks/blocks/acti_norm.py @@ -80,7 +80,7 @@ def __init__( super().__init__() op_dict = {"A": None, "D": None, "N": None} - # define the normalisation type and the arguments to the constructor + # define the normalization type and the arguments to the constructor if norm is not None: if norm_dim is None and dropout_dim is None: raise ValueError("norm_dim or dropout_dim needs to be specified.") diff --git a/monai/networks/layers/factories.py b/monai/networks/layers/factories.py index 1bb33ed9d7..41b63c55fb 100644 --- a/monai/networks/layers/factories.py +++ b/monai/networks/layers/factories.py @@ -16,7 +16,7 @@ is typically a type but can be any callable producing a layer object. The factory objects contain functions keyed to names converted to upper case, these names can be referred to as members -of the factory so that they can function as constant identifiers. eg. instance normalisation is named `Norm.INSTANCE`. +of the factory so that they can function as constant identifiers. eg. instance normalization is named `Norm.INSTANCE`. For example, to get a transpose convolution layer the name is needed and then a dimension argument is provided which is passed to the factory function: diff --git a/monai/networks/layers/spatial_transforms.py b/monai/networks/layers/spatial_transforms.py index a64b6d2d0a..a6b730278d 100644 --- a/monai/networks/layers/spatial_transforms.py +++ b/monai/networks/layers/spatial_transforms.py @@ -518,7 +518,7 @@ def forward( if spatial_size is not None: dst_size = src_size[:2] + ensure_tuple(spatial_size) - # reverse and normalise theta if needed + # reverse and normalize theta if needed if not self.normalized: theta = to_norm_affine( affine=theta, src_size=src_size[2:], dst_size=dst_size[2:], align_corners=self.align_corners diff --git a/monai/transforms/compose.py b/monai/transforms/compose.py index 20e72f1df0..13d2e640bc 100644 --- a/monai/transforms/compose.py +++ b/monai/transforms/compose.py @@ -194,7 +194,7 @@ class Compose(Randomizable, Transform): set of functions must be called as if it were a sequence. Example: images and labels - Images typically require some kind of normalisation that labels do not. + Images typically require some kind of normalization that labels do not. Both are then typically augmented through the use of random rotations, flips, and deformations. Compose can be used with a series of transforms that take a dictionary diff --git a/monai/utils/enums.py b/monai/utils/enums.py index dbebbe364f..dfb51d18c5 100644 --- a/monai/utils/enums.py +++ b/monai/utils/enums.py @@ -144,7 +144,7 @@ class Weight(Enum): UNIFORM = "uniform" -class Normalisation(Enum): +class Normalization(Enum): """ See also: - :py:class:`monai.networks.nets.ConvNormActi` diff --git a/tests/test_unet.py b/tests/test_unet.py index 5d95e66ba4..ed05fce552 100644 --- a/tests/test_unet.py +++ b/tests/test_unet.py @@ -72,7 +72,7 @@ (16, 3, 32, 64, 48), ] -TEST_CASE_4 = [ # 4-channel 3D, batch 16, batch normalisation +TEST_CASE_4 = [ # 4-channel 3D, batch 16, batch normalization { "dimensions": 3, "in_channels": 4, From 99d52623ecd27e08b61d7d1e90ebbf2cff6a1a22 Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Wed, 23 Dec 2020 10:22:26 -0800 Subject: [PATCH 36/40] Support deepgrow stats handler for detailed metrics + transforms for inference Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/handler.py | 275 +++++++++++++++++++++++ monai/apps/deepgrow/transforms.py | 358 ++++++++++++++++++++++++++++-- monai/apps/deepgrow/utils.py | 113 ++++++++++ 3 files changed, 730 insertions(+), 16 deletions(-) create mode 100644 monai/apps/deepgrow/handler.py create mode 100644 monai/apps/deepgrow/utils.py diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py new file mode 100644 index 0000000000..37d169917b --- /dev/null +++ b/monai/apps/deepgrow/handler.py @@ -0,0 +1,275 @@ +# Copyright 2020 MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +import statistics + +import nibabel as nib +import numpy as np +import torch +import torch.distributed +import torchvision +from monai.visualize import plot_2d_or_3d_image +from torch.utils.tensorboard import SummaryWriter +from torchvision.utils import make_grid + +from monai.engines import Engine +from monai.engines.workflow import Events +from monai.metrics import compute_meandice +from monai.transforms import rescale_array +from .utils import make_grid_with_titles + + +# TODO:: Unit Test + +class MeanDice: + def __init__(self): + self.data = [] + + def reset(self): + self.data = [] + + def update(self, y_pred, y, batched=True): + if not batched: + y_pred = y_pred[None] + y = y[None] + score = compute_meandice(y_pred=y_pred, y=y, include_background=False).mean() + self.data.append(score.item()) + + def mean(self) -> float: + return statistics.mean(self.data) + + def stdev(self) -> float: + return statistics.stdev(self.data) if len(self.data) > 1 else 0 + + +class DeepgrowStatsHandler(object): + def __init__( + self, + summary_writer=None, + interval=1, + log_dir="./runs", + tag_name='val_dice', + compute_metric=True, + images=True, + image_interval=1, + max_channels=1, + max_frames=64, + add_scalar=True, + add_stdev=False, + merge_scalar=False, + fold_size=0, + ): + self.writer = SummaryWriter(log_dir=log_dir) if summary_writer is None else summary_writer + self.interval = interval + self.tag_name = tag_name + self.compute_metric = compute_metric + self.images = images + self.image_interval = image_interval + self.max_channels = max_channels + self.max_frames = max_frames + self.add_scalar = add_scalar + self.add_stdev = add_stdev + self.merge_scalar = merge_scalar + self.fold_size = fold_size + + if torch.distributed.is_initialized(): + self.tag_name = '{}-r{}'.format(self.tag_name, torch.distributed.get_rank()) + + self.plot_data = {} + self.metric_data = {} + + def attach(self, engine: Engine) -> None: + engine.add_event_handler(Events.ITERATION_COMPLETED(every=self.interval), self, 'iteration') + engine.add_event_handler(Events.EPOCH_COMPLETED(every=1), self, 'epoch') + + def write_images(self, epoch): + if not self.plot_data or not len(self.plot_data): + return + + all_imgs = [] + titles = [] + for region in sorted(self.plot_data.keys()): + all_imgs.extend(self.plot_data[region]) + metric = self.metric_data.get(region) + dice = '{:.4f}'.format(metric.mean()) if self.compute_metric and metric else '' + stdev = '{:.4f}'.format(metric.stdev()) if self.compute_metric and metric else '' + titles.extend([ + 'x({})'.format(region), + 'y({})'.format(region), + 'dice: {} +/- {}'.format(dice, stdev) if self.compute_metric else 'yh({})'.format(region) + ]) + + if len(all_imgs[0].shape) == 3: + colors = [(0, 0, 255), (0, 0, 255), (255, 0, 0)] + img_tensor = make_grid_with_titles( + tensor=torch.from_numpy(np.array(all_imgs)), + titles=titles, + colors=colors, + nrow=3, + normalize=True, + pad_value=2) + self.writer.add_image(tag=f'Deepgrow Regions ({self.tag_name})', img_tensor=img_tensor, global_step=epoch) + + if len(all_imgs[0].shape) == 4: + for region in sorted(self.plot_data.keys()): + tags = [f"region_{region}_image", f"region_{region}_label", f"region_{region}_output"] + for i in range(3): + img = self.plot_data[region][i] + plot_2d_or_3d_image( + img[np.newaxis], epoch, self.writer, 0, self.max_channels, self.max_frames, tags[i] + ) + + logging.info("Saved {} Regions {} into Tensorboard at epoch: {}".format( + len(self.plot_data), sorted([*self.plot_data]), epoch)) + self.writer.flush() + + def write_region_metrics(self, epoch): + metric_sum = 0 + means = {} + stdevs = {} + for region in self.metric_data: + metric = self.metric_data[region].mean() + stdev = self.metric_data[region].stdev() + if self.merge_scalar: + means['{:0>2d}'.format(region)] = metric + stdevs['{:0>2d}'.format(region)] = stdev + else: + if self.add_stdev: + self.writer.add_scalar("{}_{:0>2d}_mean".format(self.tag_name, region), metric, epoch) + self.writer.add_scalar("{}_{:0>2d}_mean+".format(self.tag_name, region), metric + stdev, epoch) + self.writer.add_scalar("{}_{:0>2d}_mean-".format(self.tag_name, region), metric - stdev, epoch) + else: + self.writer.add_scalar("{}_{:0>2d}".format(self.tag_name, region), metric, epoch) + metric_sum += metric + if self.merge_scalar: + self.writer.add_scalars("{}_region".format(self.tag_name), means, epoch) + + if len(self.metric_data) > 1: + metric_avg = metric_sum / len(self.metric_data) + self.writer.add_scalar("{}_regions_avg".format(self.tag_name), metric_avg, epoch) + self.writer.flush() + + def __call__(self, engine: Engine, action) -> None: + total_steps = engine.state.iteration + if total_steps < engine.state.epoch_length: + total_steps = engine.state.epoch_length * (engine.state.epoch - 1) + total_steps + + if action == 'epoch' and not self.fold_size: + epoch = engine.state.epoch + elif self.fold_size and total_steps % self.fold_size == 0: + epoch = int(total_steps / self.fold_size) + else: + epoch = None + + if epoch: + if self.images and epoch % self.image_interval == 0: + self.write_images(epoch) + if self.add_scalar: + self.write_region_metrics(epoch) + + if action == 'epoch' or epoch: + self.plot_data = {} + self.metric_data = {} + return + + device = engine.state.device + batch_data = engine.state.batch + output_data = engine.state.output + + for bidx in range(len(batch_data.get('region', []))): + region = batch_data.get('region')[bidx] + region = region.item() if torch.is_tensor(region) else region + + if self.images and self.plot_data.get(region) is None: + self.plot_data[region] = [ + rescale_array(batch_data["image"][bidx][0].detach().cpu().numpy()[np.newaxis], 0, 1), + rescale_array(batch_data["label"][bidx].detach().cpu().numpy(), 0, 1), + rescale_array(output_data['pred'][bidx].detach().cpu().numpy(), 0, 1) + ] + + if self.compute_metric: + if self.metric_data.get(region) is None: + self.metric_data[region] = MeanDice() + self.metric_data[region].update( + y_pred=output_data['pred'][bidx].to(device), + y=batch_data['label'][bidx].to(device), + batched=False) + + +class SegmentationSaver: + def __init__( + self, + output_dir: str = "./runs", + save_np=False, + images=True, + ): + self.output_dir = output_dir + self.save_np = save_np + self.images = images + os.makedirs(self.output_dir, exist_ok=True) + + def attach(self, engine: Engine) -> None: + if not engine.has_event_handler(self, Events.ITERATION_COMPLETED): + engine.add_event_handler(Events.ITERATION_COMPLETED, self) + + def __call__(self, engine: Engine): + batch_data = engine.state.batch + output_data = engine.state.output + device = engine.state.device + tag = '' + if torch.distributed.is_initialized(): + tag = 'r{}-'.format(torch.distributed.get_rank()) + + for bidx in range(len(batch_data.get('image'))): + step = engine.state.iteration + region = batch_data.get('region')[bidx] + region = region.item() if torch.is_tensor(region) else region + + image = batch_data['image'][bidx][0].detach().cpu().numpy()[np.newaxis] + label = batch_data['label'][bidx].detach().cpu().numpy() + pred = output_data['pred'][bidx].detach().cpu().numpy() + dice = compute_meandice( + y_pred=output_data['pred'][bidx][None].to(device), + y=batch_data['label'][bidx][None].to(device), + include_background=False).mean() + + if self.save_np: + np.savez(os.path.join(self.output_dir, "{}img_label_pred_{}_{:0>4d}_{:0>2d}_{:.4f}".format( + tag, region, step, bidx, dice)), image, label, pred) + + if self.images and len(image.shape) == 3: + img = make_grid(torch.from_numpy(rescale_array(image, 0, 1)[0])) + lab = make_grid(torch.from_numpy(rescale_array(label, 0, 1)[0])) + + pos = rescale_array(output_data["image"][bidx][1].detach().cpu().numpy()[np.newaxis], 0, 1)[0] + neg = rescale_array(output_data["image"][bidx][2].detach().cpu().numpy()[np.newaxis], 0, 1)[0] + pre = make_grid(torch.from_numpy(np.array([rescale_array(pred, 0, 1)[0], pos, neg]))) + + torchvision.utils.save_image( + tensor=[ + img, + lab, + pre + ], + nrow=3, + pad_value=2, + fp=os.path.join(self.output_dir, "{}img_label_pred_{}_{:0>4d}_{:0>2d}_{:.4f}.png".format( + tag, region, step, bidx, dice)) + ) + + if self.images and len(image.shape) == 4: + samples = {'image': image[0], 'label': label[0], 'pred': pred[0]} + for sample in samples: + img = nib.Nifti1Image(samples[sample], np.eye(4)) + nib.save(img, os.path.join(self.output_dir, "{}{}_{:0>4d}_{:0>2d}_{:.4f}.nii.gz".format( + tag, sample, step, bidx, dice))) diff --git a/monai/apps/deepgrow/transforms.py b/monai/apps/deepgrow/transforms.py index 8d70856f65..764b4fbdfc 100644 --- a/monai/apps/deepgrow/transforms.py +++ b/monai/apps/deepgrow/transforms.py @@ -12,11 +12,23 @@ A collection of "vanilla" transforms for spatial operations https://github.com/Project-MONAI/MONAI/wiki/MONAI_Design """ +import json +from typing import Optional, Union import numpy as np -from monai.transforms.compose import Randomizable, Transform -from monai.utils import min_version, optional_import +from monai.config import KeysCollection +from monai.transforms import ( + SpatialCrop, + Resize, + InterpolateModeSequence, + InterpolateMode +) +from monai.transforms.compose import Randomizable, Transform, MapTransform +from monai.transforms.utils import generate_spatial_bounding_box +from monai.utils import ( + min_version, optional_import, ensure_tuple_rep, Sequence +) measure, _ = optional_import("skimage.measure", "0.14.2", min_version) distance_transform_cdt, _ = optional_import("scipy.ndimage.morphology", name="distance_transform_cdt") @@ -24,10 +36,10 @@ class AddInitialSeedPointd(Randomizable, Transform): - def __init__(self, label='label', guidance='guidance', dim=2, connected_regions=6): + def __init__(self, label='label', guidance='guidance', dimensions=2, connected_regions=6): self.label = label self.guidance = guidance - self.dim = dim + self.dimensions = dimensions self.connected_regions = connected_regions def randomize(self, data=None): @@ -36,13 +48,13 @@ def randomize(self, data=None): def _apply(self, label): label = (label > 0.5).astype(np.float32) - blobs_labels = measure.label(label.astype(int), background=0) if self.dim == 2 else label + blobs_labels = measure.label(label.astype(int), background=0) if self.dimensions == 2 else label assert np.max(blobs_labels) > 0, "Not a valid Label" - default_guidance = [-1] * (self.dim + 1) + default_guidance = [-1] * (self.dimensions + 1) pos_guidance = [] - for ridx in range(1, 2 if self.dim == 3 else self.connected_regions): - if self.dim == 2: + for ridx in range(1, 2 if self.dimensions == 3 else self.connected_regions): + if self.dimensions == 2: label = (blobs_labels == ridx).astype(np.float32) if np.sum(label) == 0: pos_guidance.append(default_guidance) @@ -67,17 +79,17 @@ def __call__(self, data): class AddGuidanceSignald(Transform): - def __init__(self, image='image', guidance='guidance', sigma=2, dim=2, number_intensity_ch=1, batched=False): + def __init__(self, image='image', guidance='guidance', sigma=2, dimensions=2, number_intensity_ch=1, batched=False): self.image = image self.guidance = guidance self.sigma = sigma - self.dim = dim + self.dimensions = dimensions self.number_intensity_ch = number_intensity_ch self.batched = batched def _get_signal(self, image, guidance): guidance = guidance.tolist() if isinstance(guidance, np.ndarray) else guidance - if self.dim == 3: + if self.dimensions == 3: signal = np.zeros((len(guidance), image.shape[-3], image.shape[-2], image.shape[-1]), dtype=np.float32) else: signal = np.zeros((len(guidance), image.shape[-2], image.shape[-1]), dtype=np.float32) @@ -87,8 +99,7 @@ def _get_signal(self, image, guidance): if np.any(np.asarray(point) < 0): continue - # print('{}:: Point: {}'.format('-VE' if i else '+VE', np.asarray(point))) - if self.dim == 3: + if self.dimensions == 3: signal[i, int(point[-3]), int(point[-2]), int(point[-1])] = 1.0 else: signal[i, int(point[-2]), int(point[-1])] = 1.0 @@ -153,11 +164,12 @@ def __call__(self, data): class AddRandomGuidanced(Randomizable, Transform): - def __init__(self, guidance='guidance', discrepancy='discrepancy', probability='probability', dim=2, batched=True): + def __init__(self, guidance='guidance', discrepancy='discrepancy', probability='probability', dimensions=2, + batched=True): self.guidance = guidance self.discrepancy = discrepancy self.probability = probability - self.dim = dim + self.dimensions = dimensions self.batched = batched def randomize(self, data=None): @@ -200,7 +212,7 @@ def add_guidance(discrepancy, probability): def _apply(self, guidance, discrepancy, probability): guidance = guidance.tolist() if isinstance(guidance, np.ndarray) else guidance - default_guidance = [-1] * (self.dim + 1) + default_guidance = [-1] * (self.dimensions + 1) if not self.batched: pos, neg = self.add_guidance(discrepancy, probability) @@ -228,3 +240,317 @@ def __call__(self, data): data[self.guidance] = self._apply(guidance, discrepancy, probability) return data + + +class SpatialCropForegroundd(MapTransform): + def __init__( + self, + keys, + source_key: str, + spatial_size, + select_fn=lambda x: x > 0, + channel_indices=None, + margin: int = 0, + meta_key_postfix="meta_dict", + start_coord_key: str = "foreground_start_coord", + end_coord_key: str = "foreground_end_coord", + original_shape_key: str = "foreground_original_shape", + cropped_shape_key: str = "foreground_cropped_shape", + ) -> None: + super().__init__(keys) + + self.source_key = source_key + self.spatial_size = spatial_size + self.select_fn = select_fn + self.channel_indices = channel_indices + self.margin = margin + self.meta_key_postfix = meta_key_postfix + self.start_coord_key = start_coord_key + self.end_coord_key = end_coord_key + self.original_shape_key = original_shape_key + self.cropped_shape_key = cropped_shape_key + + def __call__(self, data): + box_start, box_end = generate_spatial_bounding_box( + data[self.source_key], self.select_fn, self.channel_indices, self.margin + ) + + center = np.mean([box_start, box_end], axis=0).astype(int).tolist() + current_size = np.subtract(box_end, box_start).astype(int).tolist() + + if np.all(np.less(current_size, self.spatial_size)): + cropper = SpatialCrop(roi_center=center, roi_size=self.spatial_size) + box_start = cropper.roi_start + box_end = cropper.roi_end + else: + cropper = SpatialCrop(roi_start=box_start, roi_end=box_end) + + for key in self.keys: + meta_key = f"{key}_{self.meta_key_postfix}" + data[meta_key][self.start_coord_key] = box_start + data[meta_key][self.end_coord_key] = box_end + data[meta_key][self.original_shape_key] = data[key].shape + + image = cropper(data[key]) + data[meta_key][self.cropped_shape_key] = image.shape + data[key] = image + return data + + +# Transforms to support Inference +class SpatialCropGuidanced(MapTransform): + def __init__( + self, + keys, + guidance: str, + spatial_size, + spatial_size_key: str = "spatial_size", + meta_key_postfix="meta_dict", + start_coord_key: str = "foreground_start_coord", + end_coord_key: str = "foreground_end_coord", + original_shape_key: str = "foreground_original_shape", + cropped_shape_key: str = "foreground_cropped_shape", + ) -> None: + super().__init__(keys) + + self.guidance = guidance + self.spatial_size = spatial_size + self.spatial_size_key = spatial_size_key + self.meta_key_postfix = meta_key_postfix + self.start_coord_key = start_coord_key + self.end_coord_key = end_coord_key + self.original_shape_key = original_shape_key + self.cropped_shape_key = cropped_shape_key + + def __call__(self, data): + guidance = data[self.guidance] + center = np.mean(guidance[0] + guidance[1], axis=0).astype(int).tolist() + spatial_size = data.get(self.spatial_size_key, self.spatial_size) + + cropper = SpatialCrop(roi_center=center, roi_size=spatial_size) + box_start, box_end = cropper.roi_start, cropper.roi_end + + for key in self.keys: + meta_key = f"{key}_{self.meta_key_postfix}" + data[meta_key][self.start_coord_key] = box_start + data[meta_key][self.end_coord_key] = box_end + data[meta_key][self.original_shape_key] = data[key].shape + + image = cropper(data[key]) + data[meta_key][self.cropped_shape_key] = image.shape + data[key] = image + + pos_clicks, neg_clicks = guidance[0], guidance[1] + pos = np.subtract(pos_clicks, box_start).tolist() if len(pos_clicks) else [] + neg = np.subtract(neg_clicks, box_start).tolist() if len(neg_clicks) else [] + + data[self.guidance] = [pos, neg] + return data + + +class ResizeGuidanced(Transform): + def __init__( + self, + guidance: str, + ref_image, + meta_key_postfix="meta_dict", + cropped_shape_key: str = "foreground_cropped_shape", + ) -> None: + self.guidance = guidance + self.ref_image = ref_image + self.meta_key_postfix = meta_key_postfix + self.cropped_shape_key = cropped_shape_key + + def __call__(self, data): + guidance = data[self.guidance] + meta_dict = data[f"{self.ref_image}_{self.meta_key_postfix}"] + current_shape = data[self.ref_image].shape[1:] + cropped_shape = meta_dict[self.cropped_shape_key][1:] + factor = np.divide(current_shape, cropped_shape) + + pos_clicks, neg_clicks = guidance[0], guidance[1] + pos = np.multiply(pos_clicks, factor).astype(int).tolist() if len(pos_clicks) else [] + neg = np.multiply(neg_clicks, factor).astype(int).tolist() if len(neg_clicks) else [] + + data[self.guidance] = [pos, neg] + return data + + +class RestoreCroppedLabeld(MapTransform): + def __init__( + self, + keys: KeysCollection, + ref_image: str, + slice_only=False, + channel_first=True, + mode: InterpolateModeSequence = InterpolateMode.NEAREST, + align_corners: Union[Sequence[Optional[bool]], Optional[bool]] = None, + meta_key_postfix: str = "meta_dict", + start_coord_key: str = "foreground_start_coord", + end_coord_key: str = "foreground_end_coord", + original_shape_key: str = "foreground_original_shape", + cropped_shape_key: str = "foreground_cropped_shape", + ) -> None: + super().__init__(keys) + self.ref_image = ref_image + self.slice_only = slice_only + self.channel_first = channel_first + self.mode = ensure_tuple_rep(mode, len(self.keys)) + self.align_corners = ensure_tuple_rep(align_corners, len(self.keys)) + self.meta_key_postfix = meta_key_postfix + self.start_coord_key = start_coord_key + self.end_coord_key = end_coord_key + self.original_shape_key = original_shape_key + self.cropped_shape_key = cropped_shape_key + + def __call__(self, data): + meta_dict = data[f"{self.ref_image}_{self.meta_key_postfix}"] + + for idx, key in enumerate(self.keys): + image = data[key] + + # Undo Resize + current_size = image.shape + cropped_size = meta_dict[self.cropped_shape_key] + if np.any(np.not_equal(current_size, cropped_size)): + resizer = Resize(spatial_size=cropped_size[1:], mode=self.mode[idx]) + image = resizer(image, mode=self.mode[idx], align_corners=self.align_corners[idx]) + + # Undo Crop + original_shape = meta_dict[self.original_shape_key] + result = np.zeros(original_shape, dtype=np.float32) + box_start = meta_dict[self.start_coord_key] + box_end = meta_dict[self.end_coord_key] + + sd = min(len(box_start), len(box_end), len(image.shape[1:])) # spatial dims + slices = [slice(None)] + [slice(s, e) for s, e in zip(box_start[:sd], box_end[:sd])] + slices = tuple(slices) + result[slices] = image + + # Undo Spacing + current_size = result.shape[1:] + spatial_shape = np.roll(meta_dict['spatial_shape'], 1).tolist() + spatial_size = spatial_shape[-len(current_size):] + + if np.any(np.not_equal(current_size, spatial_size)): + resizer = Resize(spatial_size=spatial_size, mode=self.mode[idx]) + result = resizer(result, mode=self.mode[idx], align_corners=self.align_corners[idx]) + + # Undo Slicing + slice_idx = meta_dict.get('slice_idx') + if slice_idx is None or self.slice_only: + final_result = result if len(result.shape) <= 3 else result[0] + else: + slice_idx = meta_dict['slice_idx'][0] + final_result = np.zeros(spatial_shape) + if self.channel_first: + final_result[slice_idx] = result + else: + final_result[..., slice_idx] = result + data[key] = final_result + + meta = data.get(f"{key}_{self.meta_key_postfix}") + if meta is None: + meta = dict() + data[f"{key}_{self.meta_key_postfix}"] = meta + meta['slice_idx'] = slice_idx + meta['affine'] = meta_dict['original_affine'] + return data + + +class AddGuidanceFromPointsd(Randomizable, Transform): + def __init__( + self, + ref_image, + guidance='guidance', + foreground='foreground', + background='background', + axis=0, + channel_first=True, + dimensions=2, + slice_key='slice', + meta_key_postfix: str = "meta_dict" + ): + self.ref_image = ref_image + self.guidance = guidance + self.foreground = foreground + self.background = background + self.axis = axis + self.channel_first = channel_first + self.dimensions = dimensions + self.slice_key = slice_key + self.meta_key_postfix = meta_key_postfix + + def randomize(self, data=None): + pass + + def _apply(self, pos_clicks, neg_clicks, factor, slice_num=None): + points = pos_clicks + points.extend(neg_clicks) + points = np.array(points) + + if self.dimensions == 2: + slices = np.unique(points[:, self.axis]).tolist() + slice_idx = slices[0] if slice_num is None else next(x for x in slices if x == slice_num) + + pos = neg = [] + if len(pos_clicks): + pos_clicks = np.array(pos_clicks) + pos = (pos_clicks[np.where(pos_clicks[:, self.axis] == slice_idx)] * factor)[:, 1:].astype(int).tolist() + if len(neg_clicks): + neg_clicks = np.array(neg_clicks) + neg = (neg_clicks[np.where(neg_clicks[:, self.axis] == slice_idx)] * factor)[:, 1:].astype(int).tolist() + + guidance = [pos, neg, slice_idx, factor] + else: + pos = neg = [] + if len(pos_clicks): + pos = np.multiply(pos_clicks, factor).astype(int).tolist() + if len(neg_clicks): + neg = np.multiply(neg_clicks, factor).astype(int).tolist() + guidance = [pos, neg] + return guidance + + def __call__(self, data): + meta_dict = data[f"{self.ref_image}_{self.meta_key_postfix}"] + original_shape = meta_dict['spatial_shape'] + current_shape = list(data[self.ref_image].shape) + + clicks = [data[self.foreground], data[self.background]] + if self.channel_first: + original_shape = np.roll(original_shape, 1).tolist() + for i in range(len(clicks)): + clicks[i] = json.loads(clicks[i]) if isinstance(clicks[i], str) else clicks[i] + clicks[i] = np.array(clicks[i]).astype(int).tolist() + for j in range(len(clicks[i])): + clicks[i][j] = np.roll(clicks[i][j], 1).tolist() + + factor = np.array(current_shape) / original_shape + + data[self.guidance] = self._apply(clicks[0], clicks[1], factor, data.get(self.slice_key)) + return data + + +class Fetch2DSliced(MapTransform): + def __init__(self, keys, guidance='guidance', axis=0, meta_key_postfix: str = "meta_dict"): + super().__init__(keys) + self.guidance = guidance + self.axis = axis + self.meta_key_postfix = meta_key_postfix + + def _apply(self, image, guidance): + slice_idx = guidance[2] + idx = [] + for i in range(len(image.shape)): + idx.append(slice_idx) if i == self.axis else idx.append(slice(0, image.shape[i])) + + idx = tuple(idx) + return image[idx], idx + + def __call__(self, data): + guidance = data[self.guidance] + for key in self.keys: + img, idx = self._apply(data[key], guidance) + data[key] = img + data[f'{key}_{self.meta_key_postfix}']['slice_idx'] = idx + return data diff --git a/monai/apps/deepgrow/utils.py b/monai/apps/deepgrow/utils.py new file mode 100644 index 0000000000..2618f20603 --- /dev/null +++ b/monai/apps/deepgrow/utils.py @@ -0,0 +1,113 @@ +import math + +import cv2 +import numpy as np +import torch +from torchvision.transforms import transforms + +irange = range + + +def make_grid_with_titles(tensor, titles, colors=None, title_pos=None, nrow=8, padding=2, normalize=False, range=None, + scale_each=False, pad_value=0): + """Make a grid of images. + + Args: + tensor (Tensor or list): 4D mini-batch Tensor of shape (B x C x H x W) + or a list of images all of the same size. + titles (list): ( [title_1,title_2,title_3,...title_n]) where labels is Bx1 vector of some titles + colors (list): ( [color_1,color_2,color_3,...title_n]) where color is [R,G,B] + title_pos(x,y): Title position on the image + nrow (int, optional): Number of images displayed in each row of the grid. + The final grid size is ``(B / nrow, nrow)``. Default: ``8``. + padding (int, optional): amount of padding. Default: ``2``. + normalize (bool, optional): If True, shift the image to the range (0, 1), + by the min and max values specified by :attr:`range`. Default: ``False``. + range (tuple, optional): tuple (min, max) where min and max are numbers, + then these numbers are used to normalize the image. By default, min and max + are computed from the tensor. + scale_each (bool, optional): If ``True``, scale each image in the batch of + images separately rather than the (min, max) over all images. Default: ``False``. + pad_value (float, optional): Value for the padded pixels. Default: ``0``. + + Example: + See this notebook `here `_ + + """ + if not (torch.is_tensor(tensor) or + (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): + raise TypeError('tensor or list of tensors expected, got {}'.format(type(tensor))) + + # if list of tensors, convert to a 4D mini-batch Tensor + if isinstance(tensor, list): + tensor = torch.stack(tensor, dim=0) + + if tensor.dim() == 2: # single image H x W + tensor = tensor.unsqueeze(0) + if tensor.dim() == 3: # single image + if tensor.size(0) == 1: # if single-channel, convert to 3-channel + tensor = torch.cat((tensor, tensor, tensor), 0) + tensor = tensor.unsqueeze(0) + + if tensor.dim() == 4 and tensor.size(1) == 1: # single-channel images + tensor = torch.cat((tensor, tensor, tensor), 1) + + if normalize is True: + tensor = tensor.clone() # avoid modifying tensor in-place + if range is not None: + assert isinstance(range, tuple), \ + "range has to be a tuple (min, max) if specified. min and max are numbers" + + def norm_ip(img, min, max): + img.clamp_(min=min, max=max) + img.add_(-min).div_(max - min + 1e-5) + + def norm_range(t, range): + if range is not None: + norm_ip(t, range[0], range[1]) + else: + norm_ip(t, float(t.min()), float(t.max())) + + if scale_each is True: + for t in tensor: # loop over mini-batch dimension + norm_range(t, range) + else: + norm_range(tensor, range) + + if tensor.size(0) == 1: + return tensor.squeeze(0) + + # Title + font = 1 + fontScale = 1 + thickness = 1 + colors = colors if colors else [(255, 0, 0)] + org = title_pos if title_pos else (10, 20) + + # make the mini-batch of images into a grid + nmaps = tensor.size(0) + xmaps = min(nrow, nmaps) + ymaps = int(math.ceil(float(nmaps) / xmaps)) + height, width = int(tensor.size(2) + padding), int(tensor.size(3) + padding) + num_channels = tensor.size(1) + grid = tensor.new_full((num_channels, height * ymaps + padding, width * xmaps + padding), pad_value) + k = 0 + for y in irange(ymaps): + for x in irange(xmaps): + if k >= nmaps: + break + + working_tensor = tensor[k] + color = colors[k % len(colors)] + if titles is not None and k < len(titles): + working_image = cv2.UMat( + np.asarray(np.transpose(working_tensor.numpy(), (1, 2, 0)) * 255).astype('uint8')) + image = cv2.putText(working_image, f'{str(titles[k])}', org, font, + fontScale, color, thickness, cv2.LINE_AA) + working_tensor = transforms.ToTensor()(image.get()) + + grid.narrow(1, y * height + padding, height - padding) \ + .narrow(2, x * width + padding, width - padding) \ + .copy_(working_tensor) + k = k + 1 + return grid From e0b32b5adca9b5b7a5c4b0d54309a835434a0311 Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Wed, 23 Dec 2020 11:08:24 -0800 Subject: [PATCH 37/40] Fix build Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/__init__.py | 5 - monai/apps/deepgrow/dataset.py | 182 ++++++++++++++--------------- monai/apps/deepgrow/handler.py | 151 +++++++++++++----------- monai/apps/deepgrow/interaction.py | 11 +- monai/apps/deepgrow/transforms.py | 142 +++++++++++----------- monai/apps/deepgrow/utils.py | 36 +++--- 6 files changed, 269 insertions(+), 258 deletions(-) diff --git a/monai/apps/deepgrow/__init__.py b/monai/apps/deepgrow/__init__.py index 13e1b66a98..d0044e3563 100644 --- a/monai/apps/deepgrow/__init__.py +++ b/monai/apps/deepgrow/__init__.py @@ -8,8 +8,3 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -from .dataset import * -from .handler import * -from .interaction import * -from .transforms import * diff --git a/monai/apps/deepgrow/dataset.py b/monai/apps/deepgrow/dataset.py index d031e83500..dc4c1a059d 100644 --- a/monai/apps/deepgrow/dataset.py +++ b/monai/apps/deepgrow/dataset.py @@ -18,34 +18,27 @@ import numpy as np from monai.apps.datasets import DecathlonDataset -from monai.transforms import ( - AsChannelFirstd, - Spacingd, - LoadNiftid, - Orientationd, - Compose, - GridSampleMode -) +from monai.transforms import AsChannelFirstd, Compose, GridSampleMode, LoadNiftid, Orientationd, Spacingd # TODO:: Test basic functionality # TODO:: Unit Test class DeepgrowDataset(DecathlonDataset): def __init__( - self, - dimension: int, - pixdim: Sequence[float], - root_dir: str, - task: str, - section: str, - transform: Union[Sequence[Callable], Callable] = (), - download: bool = False, - seed: int = 0, - val_frac: float = 0.2, - cache_num: int = sys.maxsize, - cache_rate: float = 1.0, - num_workers: int = 0, - limit: int = 0 + self, + dimension: int, + pixdim: Sequence[float], + root_dir: str, + task: str, + section: str, + transform: Union[Sequence[Callable], Callable] = (), + download: bool = False, + seed: int = 0, + val_frac: float = 0.2, + cache_num: int = sys.maxsize, + cache_rate: float = 1.0, + num_workers: int = 0, + limit: int = 0, ) -> None: self.dimension = dimension self.pixdim = pixdim @@ -61,7 +54,7 @@ def __init__( val_frac=val_frac, cache_num=cache_num, cache_rate=cache_rate, - num_workers=num_workers + num_workers=num_workers, ) def _generate_data_list(self, dataset_dir: str) -> List[Dict]: @@ -70,15 +63,16 @@ def _generate_data_list(self, dataset_dir: str) -> List[Dict]: tmp_dataset_dir = dataset_dir + "_{}.deep".format(self.section) new_datalist = create_dataset( datalist=dataset, - keys=['image', 'label'], + keys=["image", "label"], output_dir=tmp_dataset_dir, dimension=self.dimension, pixdim=self.pixdim, limit=self.limit, - relative_path=False) + relative_path=False, + ) dataset_json = os.path.join(tmp_dataset_dir, "dataset.json") - with open(dataset_json, 'w') as fp: + with open(dataset_json, "w") as fp: json.dump({self.section: new_datalist}, fp, indent=2) return new_datalist @@ -101,7 +95,7 @@ def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): data_list = [] if len(vol_image.shape) == 4: - logging.info('4D-Image, pick only first series; Image: {}; Label: {}'.format(vol_image.shape, vol_label.shape)) + logging.info("4D-Image, pick only first series; Image: {}; Label: {}".format(vol_image.shape, vol_label.shape)) vol_image = vol_image[0] vol_image = np.moveaxis(vol_image, -1, 0) @@ -115,19 +109,21 @@ def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): if vol_label is not None and np.sum(label) == 0: continue - image_file_prefix = 'vol_idx_{:0>4d}_slice_{:0>3d}'.format(vol_idx, sid) - image_file = os.path.join(dataset_dir, 'images', image_file_prefix) - image_file += '.npy' + image_file_prefix = "vol_idx_{:0>4d}_slice_{:0>3d}".format(vol_idx, sid) + image_file = os.path.join(dataset_dir, "images", image_file_prefix) + image_file += ".npy" - os.makedirs(os.path.join(dataset_dir, 'images'), exist_ok=True) + os.makedirs(os.path.join(dataset_dir, "images"), exist_ok=True) np.save(image_file, image) image_count += 1 # Test Data if vol_label is None: - data_list.append({ - 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, - }) + data_list.append( + { + "image": image_file.replace(dataset_dir + "/", "") if relative_path else image_file, + } + ) continue # For all Labels @@ -136,28 +132,32 @@ def _save_data_2d(vol_idx, data, keys, dataset_dir, relative_path): unique_labels_count = max(unique_labels_count, len(unique_labels)) for idx in unique_labels: - label_file_prefix = '{}_region_{:0>2d}'.format(image_file_prefix, int(idx)) - label_file = os.path.join(dataset_dir, 'labels', label_file_prefix) - label_file += '.npy' + label_file_prefix = "{}_region_{:0>2d}".format(image_file_prefix, int(idx)) + label_file = os.path.join(dataset_dir, "labels", label_file_prefix) + label_file += ".npy" - os.makedirs(os.path.join(dataset_dir, 'labels'), exist_ok=True) + os.makedirs(os.path.join(dataset_dir, "labels"), exist_ok=True) curr_label = (label == idx).astype(np.float32) np.save(label_file, curr_label) label_count += 1 - data_list.append({ - 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, - 'label': label_file.replace(dataset_dir + '/', '') if relative_path else label_file, - 'region': int(idx) - }) - - print('{} => Image: {} => {}; Label: {} => {}; Unique Labels: {}'.format( - vol_idx, - vol_image.shape, - image_count, - vol_label.shape if vol_label is not None else None, - label_count, - unique_labels_count) + data_list.append( + { + "image": image_file.replace(dataset_dir + "/", "") if relative_path else image_file, + "label": label_file.replace(dataset_dir + "/", "") if relative_path else label_file, + "region": int(idx), + } + ) + + print( + "{} => Image: {} => {}; Label: {} => {}; Unique Labels: {}".format( + vol_idx, + vol_image.shape, + image_count, + vol_label.shape if vol_label is not None else None, + label_count, + unique_labels_count, + ) ) return data_list @@ -168,7 +168,7 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): data_list = [] if len(vol_image.shape) == 4: - logging.info('4D-Image, pick only first series; Image: {}; Label: {}'.format(vol_image.shape, vol_label.shape)) + logging.info("4D-Image, pick only first series; Image: {}; Label: {}".format(vol_image.shape, vol_label.shape)) vol_image = vol_image[0] vol_image = np.moveaxis(vol_image, -1, 0) @@ -176,19 +176,21 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): label_count = 0 unique_labels_count = 0 - image_file_prefix = 'vol_idx_{:0>4d}'.format(vol_idx) - image_file = os.path.join(dataset_dir, 'images', image_file_prefix) - image_file += '.npy' + image_file_prefix = "vol_idx_{:0>4d}".format(vol_idx) + image_file = os.path.join(dataset_dir, "images", image_file_prefix) + image_file += ".npy" - os.makedirs(os.path.join(dataset_dir, 'images'), exist_ok=True) + os.makedirs(os.path.join(dataset_dir, "images"), exist_ok=True) np.save(image_file, vol_image) image_count += 1 # Test Data if vol_label is None: - data_list.append({ - 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, - }) + data_list.append( + { + "image": image_file.replace(dataset_dir + "/", "") if relative_path else image_file, + } + ) else: # For all Labels unique_labels = np.unique(vol_label.flatten()) @@ -196,41 +198,39 @@ def _save_data_3d(vol_idx, data, keys, dataset_dir, relative_path): unique_labels_count = max(unique_labels_count, len(unique_labels)) for idx in unique_labels: - label_file_prefix = '{}_region_{:0>2d}'.format(image_file_prefix, int(idx)) - label_file = os.path.join(dataset_dir, 'labels', label_file_prefix) - label_file += '.npy' + label_file_prefix = "{}_region_{:0>2d}".format(image_file_prefix, int(idx)) + label_file = os.path.join(dataset_dir, "labels", label_file_prefix) + label_file += ".npy" curr_label = (vol_label == idx).astype(np.float32) - os.makedirs(os.path.join(dataset_dir, 'labels'), exist_ok=True) + os.makedirs(os.path.join(dataset_dir, "labels"), exist_ok=True) np.save(label_file, curr_label) label_count += 1 - data_list.append({ - 'image': image_file.replace(dataset_dir + '/', '') if relative_path else image_file, - 'label': label_file.replace(dataset_dir + '/', '') if relative_path else label_file, - 'region': int(idx) - }) - - print('{} => Image: {} => {}; Label: {} => {}; Unique Labels: {}'.format( - vol_idx, - vol_image.shape, - image_count, - vol_label.shape if vol_label is not None else None, - label_count, - unique_labels_count) + data_list.append( + { + "image": image_file.replace(dataset_dir + "/", "") if relative_path else image_file, + "label": label_file.replace(dataset_dir + "/", "") if relative_path else label_file, + "region": int(idx), + } + ) + + print( + "{} => Image: {} => {}; Label: {} => {}; Unique Labels: {}".format( + vol_idx, + vol_image.shape, + image_count, + vol_label.shape if vol_label is not None else None, + label_count, + unique_labels_count, + ) ) return data_list def create_dataset( - datalist, - output_dir, - dimension, - pixdim, - keys=('image', 'label'), - base_dir=None, - limit=0, - relative_path=False) -> List[Dict]: + datalist, output_dir, dimension, pixdim, keys=("image", "label"), base_dir=None, limit=0, relative_path=False +) -> List[Dict]: if not isinstance(keys, list) and not isinstance(keys, tuple): keys = [keys] @@ -246,22 +246,22 @@ def create_dataset( image = os.path.join(base_dir, image) label = os.path.join(base_dir, label) if label else None - print('{} => {}'.format(image, label if label else None)) + print("{} => {}".format(image, label if label else None)) if dimension == 2: data = _save_data_2d( vol_idx=idx, - data=transforms({'image': image, 'label': label}), - keys=('image', 'label'), + data=transforms({"image": image, "label": label}), + keys=("image", "label"), dataset_dir=output_dir, - relative_path=relative_path + relative_path=relative_path, ) else: data = _save_data_3d( vol_idx=idx, - data=transforms({'image': image, 'label': label}), - keys=('image', 'label'), + data=transforms({"image": image, "label": label}), + keys=("image", "label"), dataset_dir=output_dir, - relative_path=relative_path + relative_path=relative_path, ) new_datalist.extend(data) return new_datalist diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py index 37d169917b..5e21229640 100644 --- a/monai/apps/deepgrow/handler.py +++ b/monai/apps/deepgrow/handler.py @@ -18,19 +18,19 @@ import torch import torch.distributed import torchvision -from monai.visualize import plot_2d_or_3d_image from torch.utils.tensorboard import SummaryWriter from torchvision.utils import make_grid -from monai.engines import Engine -from monai.engines.workflow import Events +from monai.engines.workflow import Engine, Events from monai.metrics import compute_meandice from monai.transforms import rescale_array -from .utils import make_grid_with_titles +from monai.visualize import plot_2d_or_3d_image +from .utils import make_grid_with_titles # TODO:: Unit Test + class MeanDice: def __init__(self): self.data = [] @@ -54,20 +54,20 @@ def stdev(self) -> float: class DeepgrowStatsHandler(object): def __init__( - self, - summary_writer=None, - interval=1, - log_dir="./runs", - tag_name='val_dice', - compute_metric=True, - images=True, - image_interval=1, - max_channels=1, - max_frames=64, - add_scalar=True, - add_stdev=False, - merge_scalar=False, - fold_size=0, + self, + summary_writer=None, + interval=1, + log_dir="./runs", + tag_name="val_dice", + compute_metric=True, + images=True, + image_interval=1, + max_channels=1, + max_frames=64, + add_scalar=True, + add_stdev=False, + merge_scalar=False, + fold_size=0, ): self.writer = SummaryWriter(log_dir=log_dir) if summary_writer is None else summary_writer self.interval = interval @@ -83,14 +83,14 @@ def __init__( self.fold_size = fold_size if torch.distributed.is_initialized(): - self.tag_name = '{}-r{}'.format(self.tag_name, torch.distributed.get_rank()) + self.tag_name = "{}-r{}".format(self.tag_name, torch.distributed.get_rank()) self.plot_data = {} self.metric_data = {} def attach(self, engine: Engine) -> None: - engine.add_event_handler(Events.ITERATION_COMPLETED(every=self.interval), self, 'iteration') - engine.add_event_handler(Events.EPOCH_COMPLETED(every=1), self, 'epoch') + engine.add_event_handler(Events.ITERATION_COMPLETED(every=self.interval), self, "iteration") + engine.add_event_handler(Events.EPOCH_COMPLETED(every=1), self, "epoch") def write_images(self, epoch): if not self.plot_data or not len(self.plot_data): @@ -101,13 +101,15 @@ def write_images(self, epoch): for region in sorted(self.plot_data.keys()): all_imgs.extend(self.plot_data[region]) metric = self.metric_data.get(region) - dice = '{:.4f}'.format(metric.mean()) if self.compute_metric and metric else '' - stdev = '{:.4f}'.format(metric.stdev()) if self.compute_metric and metric else '' - titles.extend([ - 'x({})'.format(region), - 'y({})'.format(region), - 'dice: {} +/- {}'.format(dice, stdev) if self.compute_metric else 'yh({})'.format(region) - ]) + dice = "{:.4f}".format(metric.mean()) if self.compute_metric and metric else "" + stdev = "{:.4f}".format(metric.stdev()) if self.compute_metric and metric else "" + titles.extend( + [ + "x({})".format(region), + "y({})".format(region), + "dice: {} +/- {}".format(dice, stdev) if self.compute_metric else "yh({})".format(region), + ] + ) if len(all_imgs[0].shape) == 3: colors = [(0, 0, 255), (0, 0, 255), (255, 0, 0)] @@ -117,8 +119,9 @@ def write_images(self, epoch): colors=colors, nrow=3, normalize=True, - pad_value=2) - self.writer.add_image(tag=f'Deepgrow Regions ({self.tag_name})', img_tensor=img_tensor, global_step=epoch) + pad_value=2, + ) + self.writer.add_image(tag=f"Deepgrow Regions ({self.tag_name})", img_tensor=img_tensor, global_step=epoch) if len(all_imgs[0].shape) == 4: for region in sorted(self.plot_data.keys()): @@ -129,8 +132,11 @@ def write_images(self, epoch): img[np.newaxis], epoch, self.writer, 0, self.max_channels, self.max_frames, tags[i] ) - logging.info("Saved {} Regions {} into Tensorboard at epoch: {}".format( - len(self.plot_data), sorted([*self.plot_data]), epoch)) + logging.info( + "Saved {} Regions {} into Tensorboard at epoch: {}".format( + len(self.plot_data), sorted([*self.plot_data]), epoch + ) + ) self.writer.flush() def write_region_metrics(self, epoch): @@ -141,8 +147,8 @@ def write_region_metrics(self, epoch): metric = self.metric_data[region].mean() stdev = self.metric_data[region].stdev() if self.merge_scalar: - means['{:0>2d}'.format(region)] = metric - stdevs['{:0>2d}'.format(region)] = stdev + means["{:0>2d}".format(region)] = metric + stdevs["{:0>2d}".format(region)] = stdev else: if self.add_stdev: self.writer.add_scalar("{}_{:0>2d}_mean".format(self.tag_name, region), metric, epoch) @@ -164,7 +170,7 @@ def __call__(self, engine: Engine, action) -> None: if total_steps < engine.state.epoch_length: total_steps = engine.state.epoch_length * (engine.state.epoch - 1) + total_steps - if action == 'epoch' and not self.fold_size: + if action == "epoch" and not self.fold_size: epoch = engine.state.epoch elif self.fold_size and total_steps % self.fold_size == 0: epoch = int(total_steps / self.fold_size) @@ -177,7 +183,7 @@ def __call__(self, engine: Engine, action) -> None: if self.add_scalar: self.write_region_metrics(epoch) - if action == 'epoch' or epoch: + if action == "epoch" or epoch: self.plot_data = {} self.metric_data = {} return @@ -186,32 +192,31 @@ def __call__(self, engine: Engine, action) -> None: batch_data = engine.state.batch output_data = engine.state.output - for bidx in range(len(batch_data.get('region', []))): - region = batch_data.get('region')[bidx] + for bidx in range(len(batch_data.get("region", []))): + region = batch_data.get("region")[bidx] region = region.item() if torch.is_tensor(region) else region if self.images and self.plot_data.get(region) is None: self.plot_data[region] = [ rescale_array(batch_data["image"][bidx][0].detach().cpu().numpy()[np.newaxis], 0, 1), rescale_array(batch_data["label"][bidx].detach().cpu().numpy(), 0, 1), - rescale_array(output_data['pred'][bidx].detach().cpu().numpy(), 0, 1) + rescale_array(output_data["pred"][bidx].detach().cpu().numpy(), 0, 1), ] if self.compute_metric: if self.metric_data.get(region) is None: self.metric_data[region] = MeanDice() self.metric_data[region].update( - y_pred=output_data['pred'][bidx].to(device), - y=batch_data['label'][bidx].to(device), - batched=False) + y_pred=output_data["pred"][bidx].to(device), y=batch_data["label"][bidx].to(device), batched=False + ) class SegmentationSaver: def __init__( - self, - output_dir: str = "./runs", - save_np=False, - images=True, + self, + output_dir: str = "./runs", + save_np=False, + images=True, ): self.output_dir = output_dir self.save_np = save_np @@ -226,26 +231,34 @@ def __call__(self, engine: Engine): batch_data = engine.state.batch output_data = engine.state.output device = engine.state.device - tag = '' + tag = "" if torch.distributed.is_initialized(): - tag = 'r{}-'.format(torch.distributed.get_rank()) + tag = "r{}-".format(torch.distributed.get_rank()) - for bidx in range(len(batch_data.get('image'))): + for bidx in range(len(batch_data.get("image"))): step = engine.state.iteration - region = batch_data.get('region')[bidx] + region = batch_data.get("region")[bidx] region = region.item() if torch.is_tensor(region) else region - image = batch_data['image'][bidx][0].detach().cpu().numpy()[np.newaxis] - label = batch_data['label'][bidx].detach().cpu().numpy() - pred = output_data['pred'][bidx].detach().cpu().numpy() + image = batch_data["image"][bidx][0].detach().cpu().numpy()[np.newaxis] + label = batch_data["label"][bidx].detach().cpu().numpy() + pred = output_data["pred"][bidx].detach().cpu().numpy() dice = compute_meandice( - y_pred=output_data['pred'][bidx][None].to(device), - y=batch_data['label'][bidx][None].to(device), - include_background=False).mean() + y_pred=output_data["pred"][bidx][None].to(device), + y=batch_data["label"][bidx][None].to(device), + include_background=False, + ).mean() if self.save_np: - np.savez(os.path.join(self.output_dir, "{}img_label_pred_{}_{:0>4d}_{:0>2d}_{:.4f}".format( - tag, region, step, bidx, dice)), image, label, pred) + np.savez( + os.path.join( + self.output_dir, + "{}img_label_pred_{}_{:0>4d}_{:0>2d}_{:.4f}".format(tag, region, step, bidx, dice), + ), + image, + label, + pred, + ) if self.images and len(image.shape) == 3: img = make_grid(torch.from_numpy(rescale_array(image, 0, 1)[0])) @@ -256,20 +269,22 @@ def __call__(self, engine: Engine): pre = make_grid(torch.from_numpy(np.array([rescale_array(pred, 0, 1)[0], pos, neg]))) torchvision.utils.save_image( - tensor=[ - img, - lab, - pre - ], + tensor=[img, lab, pre], nrow=3, pad_value=2, - fp=os.path.join(self.output_dir, "{}img_label_pred_{}_{:0>4d}_{:0>2d}_{:.4f}.png".format( - tag, region, step, bidx, dice)) + fp=os.path.join( + self.output_dir, + "{}img_label_pred_{}_{:0>4d}_{:0>2d}_{:.4f}.png".format(tag, region, step, bidx, dice), + ), ) if self.images and len(image.shape) == 4: - samples = {'image': image[0], 'label': label[0], 'pred': pred[0]} + samples = {"image": image[0], "label": label[0], "pred": pred[0]} for sample in samples: img = nib.Nifti1Image(samples[sample], np.eye(4)) - nib.save(img, os.path.join(self.output_dir, "{}{}_{:0>4d}_{:0>2d}_{:.4f}.nii.gz".format( - tag, sample, step, bidx, dice))) + nib.save( + img, + os.path.join( + self.output_dir, "{}{}_{:0>4d}_{:0>2d}_{:.4f}.nii.gz".format(tag, sample, step, bidx, dice) + ), + ) diff --git a/monai/apps/deepgrow/interaction.py b/monai/apps/deepgrow/interaction.py index 4253f1d86f..ae49d46bea 100644 --- a/monai/apps/deepgrow/interaction.py +++ b/monai/apps/deepgrow/interaction.py @@ -18,9 +18,9 @@ from monai.engines.utils import CommonKeys from monai.transforms import Transform - # TODO:: Unit Test + class Interaction: """ Deepgrow Training/Evaluation iteration method with interactions (simulation of clicks) support for image and label. @@ -34,11 +34,7 @@ class Interaction: """ def __init__( - self, - transforms: Optional[Transform], - max_interactions: int, - train: bool, - key_probability: str = "probability" + self, transforms: Optional[Transform], max_interactions: int, train: bool, key_probability: str = "probability" ) -> None: self.transforms = transforms self.max_interactions = max_interactions @@ -66,7 +62,8 @@ def __call__(self, engine: Engine, batchdata: Dict[str, torch.Tensor]): batchdata.update({CommonKeys.PRED: predictions}) batchdata[self.key_probability] = torch.as_tensor( - ([1.0 - ((1.0 / self.max_interactions) * j)] if self.train else [1.0]) * len(inputs)) + ([1.0 - ((1.0 / self.max_interactions) * j)] if self.train else [1.0]) * len(inputs) + ) batchdata = self.transforms(batchdata) return engine._iteration(engine, batchdata) diff --git a/monai/apps/deepgrow/transforms.py b/monai/apps/deepgrow/transforms.py index 764b4fbdfc..f5dcfdd253 100644 --- a/monai/apps/deepgrow/transforms.py +++ b/monai/apps/deepgrow/transforms.py @@ -18,17 +18,10 @@ import numpy as np from monai.config import KeysCollection -from monai.transforms import ( - SpatialCrop, - Resize, - InterpolateModeSequence, - InterpolateMode -) -from monai.transforms.compose import Randomizable, Transform, MapTransform +from monai.transforms import InterpolateMode, InterpolateModeSequence, Resize, SpatialCrop +from monai.transforms.compose import MapTransform, Randomizable, Transform from monai.transforms.utils import generate_spatial_bounding_box -from monai.utils import ( - min_version, optional_import, ensure_tuple_rep, Sequence -) +from monai.utils import Sequence, ensure_tuple_rep, min_version, optional_import measure, _ = optional_import("skimage.measure", "0.14.2", min_version) distance_transform_cdt, _ = optional_import("scipy.ndimage.morphology", name="distance_transform_cdt") @@ -36,7 +29,7 @@ class AddInitialSeedPointd(Randomizable, Transform): - def __init__(self, label='label', guidance='guidance', dimensions=2, connected_regions=6): + def __init__(self, label="label", guidance="guidance", dimensions=2, connected_regions=6): self.label = label self.guidance = guidance self.dimensions = dimensions @@ -79,7 +72,7 @@ def __call__(self, data): class AddGuidanceSignald(Transform): - def __init__(self, image='image', guidance='guidance', sigma=2, dimensions=2, number_intensity_ch=1, batched=False): + def __init__(self, image="image", guidance="guidance", sigma=2, dimensions=2, number_intensity_ch=1, batched=False): self.image = image self.guidance = guidance self.sigma = sigma @@ -116,7 +109,7 @@ def _apply(self, image, guidance): images = [] for i, g in zip(image, guidance): - i = i[0:0 + self.number_intensity_ch, ...] + i = i[0 : 0 + self.number_intensity_ch, ...] signal = self._get_signal(i, g) images.append(np.concatenate([i, signal], axis=0)) return images @@ -130,7 +123,7 @@ def __call__(self, data): class FindDiscrepancyRegionsd(Transform): - def __init__(self, label='label', pred='pred', discrepancy='discrepancy', batched=True): + def __init__(self, label="label", pred="pred", discrepancy="discrepancy", batched=True): self.label = label self.pred = pred self.discrepancy = discrepancy @@ -164,8 +157,9 @@ def __call__(self, data): class AddRandomGuidanced(Randomizable, Transform): - def __init__(self, guidance='guidance', discrepancy='discrepancy', probability='probability', dimensions=2, - batched=True): + def __init__( + self, guidance="guidance", discrepancy="discrepancy", probability="probability", dimensions=2, batched=True + ): self.guidance = guidance self.discrepancy = discrepancy self.probability = probability @@ -244,18 +238,18 @@ def __call__(self, data): class SpatialCropForegroundd(MapTransform): def __init__( - self, - keys, - source_key: str, - spatial_size, - select_fn=lambda x: x > 0, - channel_indices=None, - margin: int = 0, - meta_key_postfix="meta_dict", - start_coord_key: str = "foreground_start_coord", - end_coord_key: str = "foreground_end_coord", - original_shape_key: str = "foreground_original_shape", - cropped_shape_key: str = "foreground_cropped_shape", + self, + keys, + source_key: str, + spatial_size, + select_fn=lambda x: x > 0, + channel_indices=None, + margin: int = 0, + meta_key_postfix="meta_dict", + start_coord_key: str = "foreground_start_coord", + end_coord_key: str = "foreground_end_coord", + original_shape_key: str = "foreground_original_shape", + cropped_shape_key: str = "foreground_cropped_shape", ) -> None: super().__init__(keys) @@ -300,16 +294,16 @@ def __call__(self, data): # Transforms to support Inference class SpatialCropGuidanced(MapTransform): def __init__( - self, - keys, - guidance: str, - spatial_size, - spatial_size_key: str = "spatial_size", - meta_key_postfix="meta_dict", - start_coord_key: str = "foreground_start_coord", - end_coord_key: str = "foreground_end_coord", - original_shape_key: str = "foreground_original_shape", - cropped_shape_key: str = "foreground_cropped_shape", + self, + keys, + guidance: str, + spatial_size, + spatial_size_key: str = "spatial_size", + meta_key_postfix="meta_dict", + start_coord_key: str = "foreground_start_coord", + end_coord_key: str = "foreground_end_coord", + original_shape_key: str = "foreground_original_shape", + cropped_shape_key: str = "foreground_cropped_shape", ) -> None: super().__init__(keys) @@ -350,11 +344,11 @@ def __call__(self, data): class ResizeGuidanced(Transform): def __init__( - self, - guidance: str, - ref_image, - meta_key_postfix="meta_dict", - cropped_shape_key: str = "foreground_cropped_shape", + self, + guidance: str, + ref_image, + meta_key_postfix="meta_dict", + cropped_shape_key: str = "foreground_cropped_shape", ) -> None: self.guidance = guidance self.ref_image = ref_image @@ -378,18 +372,18 @@ def __call__(self, data): class RestoreCroppedLabeld(MapTransform): def __init__( - self, - keys: KeysCollection, - ref_image: str, - slice_only=False, - channel_first=True, - mode: InterpolateModeSequence = InterpolateMode.NEAREST, - align_corners: Union[Sequence[Optional[bool]], Optional[bool]] = None, - meta_key_postfix: str = "meta_dict", - start_coord_key: str = "foreground_start_coord", - end_coord_key: str = "foreground_end_coord", - original_shape_key: str = "foreground_original_shape", - cropped_shape_key: str = "foreground_cropped_shape", + self, + keys: KeysCollection, + ref_image: str, + slice_only=False, + channel_first=True, + mode: InterpolateModeSequence = InterpolateMode.NEAREST, + align_corners: Union[Sequence[Optional[bool]], Optional[bool]] = None, + meta_key_postfix: str = "meta_dict", + start_coord_key: str = "foreground_start_coord", + end_coord_key: str = "foreground_end_coord", + original_shape_key: str = "foreground_original_shape", + cropped_shape_key: str = "foreground_cropped_shape", ) -> None: super().__init__(keys) self.ref_image = ref_image @@ -429,19 +423,19 @@ def __call__(self, data): # Undo Spacing current_size = result.shape[1:] - spatial_shape = np.roll(meta_dict['spatial_shape'], 1).tolist() - spatial_size = spatial_shape[-len(current_size):] + spatial_shape = np.roll(meta_dict["spatial_shape"], 1).tolist() + spatial_size = spatial_shape[-len(current_size) :] if np.any(np.not_equal(current_size, spatial_size)): resizer = Resize(spatial_size=spatial_size, mode=self.mode[idx]) result = resizer(result, mode=self.mode[idx], align_corners=self.align_corners[idx]) # Undo Slicing - slice_idx = meta_dict.get('slice_idx') + slice_idx = meta_dict.get("slice_idx") if slice_idx is None or self.slice_only: final_result = result if len(result.shape) <= 3 else result[0] else: - slice_idx = meta_dict['slice_idx'][0] + slice_idx = meta_dict["slice_idx"][0] final_result = np.zeros(spatial_shape) if self.channel_first: final_result[slice_idx] = result @@ -453,23 +447,23 @@ def __call__(self, data): if meta is None: meta = dict() data[f"{key}_{self.meta_key_postfix}"] = meta - meta['slice_idx'] = slice_idx - meta['affine'] = meta_dict['original_affine'] + meta["slice_idx"] = slice_idx + meta["affine"] = meta_dict["original_affine"] return data class AddGuidanceFromPointsd(Randomizable, Transform): def __init__( - self, - ref_image, - guidance='guidance', - foreground='foreground', - background='background', - axis=0, - channel_first=True, - dimensions=2, - slice_key='slice', - meta_key_postfix: str = "meta_dict" + self, + ref_image, + guidance="guidance", + foreground="foreground", + background="background", + axis=0, + channel_first=True, + dimensions=2, + slice_key="slice", + meta_key_postfix: str = "meta_dict", ): self.ref_image = ref_image self.guidance = guidance @@ -513,7 +507,7 @@ def _apply(self, pos_clicks, neg_clicks, factor, slice_num=None): def __call__(self, data): meta_dict = data[f"{self.ref_image}_{self.meta_key_postfix}"] - original_shape = meta_dict['spatial_shape'] + original_shape = meta_dict["spatial_shape"] current_shape = list(data[self.ref_image].shape) clicks = [data[self.foreground], data[self.background]] @@ -532,7 +526,7 @@ def __call__(self, data): class Fetch2DSliced(MapTransform): - def __init__(self, keys, guidance='guidance', axis=0, meta_key_postfix: str = "meta_dict"): + def __init__(self, keys, guidance="guidance", axis=0, meta_key_postfix: str = "meta_dict"): super().__init__(keys) self.guidance = guidance self.axis = axis @@ -552,5 +546,5 @@ def __call__(self, data): for key in self.keys: img, idx = self._apply(data[key], guidance) data[key] = img - data[f'{key}_{self.meta_key_postfix}']['slice_idx'] = idx + data[f"{key}_{self.meta_key_postfix}"]["slice_idx"] = idx return data diff --git a/monai/apps/deepgrow/utils.py b/monai/apps/deepgrow/utils.py index 2618f20603..5c5d2c3268 100644 --- a/monai/apps/deepgrow/utils.py +++ b/monai/apps/deepgrow/utils.py @@ -8,8 +8,18 @@ irange = range -def make_grid_with_titles(tensor, titles, colors=None, title_pos=None, nrow=8, padding=2, normalize=False, range=None, - scale_each=False, pad_value=0): +def make_grid_with_titles( + tensor, + titles, + colors=None, + title_pos=None, + nrow=8, + padding=2, + normalize=False, + range=None, + scale_each=False, + pad_value=0, +): """Make a grid of images. Args: @@ -34,9 +44,8 @@ def make_grid_with_titles(tensor, titles, colors=None, title_pos=None, nrow=8, p See this notebook `here `_ """ - if not (torch.is_tensor(tensor) or - (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): - raise TypeError('tensor or list of tensors expected, got {}'.format(type(tensor))) + if not (torch.is_tensor(tensor) or (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): + raise TypeError("tensor or list of tensors expected, got {}".format(type(tensor))) # if list of tensors, convert to a 4D mini-batch Tensor if isinstance(tensor, list): @@ -55,8 +64,7 @@ def make_grid_with_titles(tensor, titles, colors=None, title_pos=None, nrow=8, p if normalize is True: tensor = tensor.clone() # avoid modifying tensor in-place if range is not None: - assert isinstance(range, tuple), \ - "range has to be a tuple (min, max) if specified. min and max are numbers" + assert isinstance(range, tuple), "range has to be a tuple (min, max) if specified. min and max are numbers" def norm_ip(img, min, max): img.clamp_(min=min, max=max) @@ -101,13 +109,15 @@ def norm_range(t, range): color = colors[k % len(colors)] if titles is not None and k < len(titles): working_image = cv2.UMat( - np.asarray(np.transpose(working_tensor.numpy(), (1, 2, 0)) * 255).astype('uint8')) - image = cv2.putText(working_image, f'{str(titles[k])}', org, font, - fontScale, color, thickness, cv2.LINE_AA) + np.asarray(np.transpose(working_tensor.numpy(), (1, 2, 0)) * 255).astype("uint8") + ) + image = cv2.putText( + working_image, f"{str(titles[k])}", org, font, fontScale, color, thickness, cv2.LINE_AA + ) working_tensor = transforms.ToTensor()(image.get()) - grid.narrow(1, y * height + padding, height - padding) \ - .narrow(2, x * width + padding, width - padding) \ - .copy_(working_tensor) + grid.narrow(1, y * height + padding, height - padding).narrow( + 2, x * width + padding, width - padding + ).copy_(working_tensor) k = k + 1 return grid From bda97fdd1103e0862096a876b40519c1057ae03b Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Wed, 23 Dec 2020 11:45:09 -0800 Subject: [PATCH 38/40] Fix coverage Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/handler.py | 11 +-- monai/apps/deepgrow/interaction.py | 7 +- monai/apps/deepgrow/utils.py | 123 ----------------------------- 3 files changed, 5 insertions(+), 136 deletions(-) delete mode 100644 monai/apps/deepgrow/utils.py diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py index 5e21229640..024a76d381 100644 --- a/monai/apps/deepgrow/handler.py +++ b/monai/apps/deepgrow/handler.py @@ -26,8 +26,6 @@ from monai.transforms import rescale_array from monai.visualize import plot_2d_or_3d_image -from .utils import make_grid_with_titles - # TODO:: Unit Test @@ -45,10 +43,10 @@ def update(self, y_pred, y, batched=True): score = compute_meandice(y_pred=y_pred, y=y, include_background=False).mean() self.data.append(score.item()) - def mean(self) -> float: + def mean(self): return statistics.mean(self.data) - def stdev(self) -> float: + def stdev(self): return statistics.stdev(self.data) if len(self.data) > 1 else 0 @@ -112,11 +110,8 @@ def write_images(self, epoch): ) if len(all_imgs[0].shape) == 3: - colors = [(0, 0, 255), (0, 0, 255), (255, 0, 0)] - img_tensor = make_grid_with_titles( + img_tensor = make_grid( tensor=torch.from_numpy(np.array(all_imgs)), - titles=titles, - colors=colors, nrow=3, normalize=True, pad_value=2, diff --git a/monai/apps/deepgrow/interaction.py b/monai/apps/deepgrow/interaction.py index ae49d46bea..d29399e2da 100644 --- a/monai/apps/deepgrow/interaction.py +++ b/monai/apps/deepgrow/interaction.py @@ -9,14 +9,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Optional +from typing import Dict import torch from ignite.engine import Engine, Events from torch.cuda.amp import autocast from monai.engines.utils import CommonKeys -from monai.transforms import Transform # TODO:: Unit Test @@ -33,9 +32,7 @@ class Interaction: key_probability: field name to fill probability for every interaction """ - def __init__( - self, transforms: Optional[Transform], max_interactions: int, train: bool, key_probability: str = "probability" - ) -> None: + def __init__(self, transforms, max_interactions: int, train: bool, key_probability: str = "probability") -> None: self.transforms = transforms self.max_interactions = max_interactions self.train = train diff --git a/monai/apps/deepgrow/utils.py b/monai/apps/deepgrow/utils.py deleted file mode 100644 index 5c5d2c3268..0000000000 --- a/monai/apps/deepgrow/utils.py +++ /dev/null @@ -1,123 +0,0 @@ -import math - -import cv2 -import numpy as np -import torch -from torchvision.transforms import transforms - -irange = range - - -def make_grid_with_titles( - tensor, - titles, - colors=None, - title_pos=None, - nrow=8, - padding=2, - normalize=False, - range=None, - scale_each=False, - pad_value=0, -): - """Make a grid of images. - - Args: - tensor (Tensor or list): 4D mini-batch Tensor of shape (B x C x H x W) - or a list of images all of the same size. - titles (list): ( [title_1,title_2,title_3,...title_n]) where labels is Bx1 vector of some titles - colors (list): ( [color_1,color_2,color_3,...title_n]) where color is [R,G,B] - title_pos(x,y): Title position on the image - nrow (int, optional): Number of images displayed in each row of the grid. - The final grid size is ``(B / nrow, nrow)``. Default: ``8``. - padding (int, optional): amount of padding. Default: ``2``. - normalize (bool, optional): If True, shift the image to the range (0, 1), - by the min and max values specified by :attr:`range`. Default: ``False``. - range (tuple, optional): tuple (min, max) where min and max are numbers, - then these numbers are used to normalize the image. By default, min and max - are computed from the tensor. - scale_each (bool, optional): If ``True``, scale each image in the batch of - images separately rather than the (min, max) over all images. Default: ``False``. - pad_value (float, optional): Value for the padded pixels. Default: ``0``. - - Example: - See this notebook `here `_ - - """ - if not (torch.is_tensor(tensor) or (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): - raise TypeError("tensor or list of tensors expected, got {}".format(type(tensor))) - - # if list of tensors, convert to a 4D mini-batch Tensor - if isinstance(tensor, list): - tensor = torch.stack(tensor, dim=0) - - if tensor.dim() == 2: # single image H x W - tensor = tensor.unsqueeze(0) - if tensor.dim() == 3: # single image - if tensor.size(0) == 1: # if single-channel, convert to 3-channel - tensor = torch.cat((tensor, tensor, tensor), 0) - tensor = tensor.unsqueeze(0) - - if tensor.dim() == 4 and tensor.size(1) == 1: # single-channel images - tensor = torch.cat((tensor, tensor, tensor), 1) - - if normalize is True: - tensor = tensor.clone() # avoid modifying tensor in-place - if range is not None: - assert isinstance(range, tuple), "range has to be a tuple (min, max) if specified. min and max are numbers" - - def norm_ip(img, min, max): - img.clamp_(min=min, max=max) - img.add_(-min).div_(max - min + 1e-5) - - def norm_range(t, range): - if range is not None: - norm_ip(t, range[0], range[1]) - else: - norm_ip(t, float(t.min()), float(t.max())) - - if scale_each is True: - for t in tensor: # loop over mini-batch dimension - norm_range(t, range) - else: - norm_range(tensor, range) - - if tensor.size(0) == 1: - return tensor.squeeze(0) - - # Title - font = 1 - fontScale = 1 - thickness = 1 - colors = colors if colors else [(255, 0, 0)] - org = title_pos if title_pos else (10, 20) - - # make the mini-batch of images into a grid - nmaps = tensor.size(0) - xmaps = min(nrow, nmaps) - ymaps = int(math.ceil(float(nmaps) / xmaps)) - height, width = int(tensor.size(2) + padding), int(tensor.size(3) + padding) - num_channels = tensor.size(1) - grid = tensor.new_full((num_channels, height * ymaps + padding, width * xmaps + padding), pad_value) - k = 0 - for y in irange(ymaps): - for x in irange(xmaps): - if k >= nmaps: - break - - working_tensor = tensor[k] - color = colors[k % len(colors)] - if titles is not None and k < len(titles): - working_image = cv2.UMat( - np.asarray(np.transpose(working_tensor.numpy(), (1, 2, 0)) * 255).astype("uint8") - ) - image = cv2.putText( - working_image, f"{str(titles[k])}", org, font, fontScale, color, thickness, cv2.LINE_AA - ) - working_tensor = transforms.ToTensor()(image.get()) - - grid.narrow(1, y * height + padding, height - padding).narrow( - 2, x * width + padding, width - padding - ).copy_(working_tensor) - k = k + 1 - return grid From cf66ac763287c9ccc1cb5fe20392f9d452c30450 Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Wed, 23 Dec 2020 12:16:21 -0800 Subject: [PATCH 39/40] Fix optional import Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/handler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py index 024a76d381..2bd6592b1a 100644 --- a/monai/apps/deepgrow/handler.py +++ b/monai/apps/deepgrow/handler.py @@ -13,7 +13,6 @@ import os import statistics -import nibabel as nib import numpy as np import torch import torch.distributed @@ -24,9 +23,11 @@ from monai.engines.workflow import Engine, Events from monai.metrics import compute_meandice from monai.transforms import rescale_array +from monai.utils import optional_import from monai.visualize import plot_2d_or_3d_image # TODO:: Unit Test +nib, _ = optional_import("nibabel") class MeanDice: From 8a5049a10c0630464800edc5af388758dc6d431c Mon Sep 17 00:00:00 2001 From: Sachidanand Alle Date: Wed, 23 Dec 2020 12:23:36 -0800 Subject: [PATCH 40/40] Fix optional import Signed-off-by: Sachidanand Alle --- monai/apps/deepgrow/handler.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/monai/apps/deepgrow/handler.py b/monai/apps/deepgrow/handler.py index 2bd6592b1a..dbdbbf4289 100644 --- a/monai/apps/deepgrow/handler.py +++ b/monai/apps/deepgrow/handler.py @@ -16,9 +16,7 @@ import numpy as np import torch import torch.distributed -import torchvision from torch.utils.tensorboard import SummaryWriter -from torchvision.utils import make_grid from monai.engines.workflow import Engine, Events from monai.metrics import compute_meandice @@ -26,8 +24,11 @@ from monai.utils import optional_import from monai.visualize import plot_2d_or_3d_image -# TODO:: Unit Test nib, _ = optional_import("nibabel") +torchvision, _ = optional_import("torchvision") +make_grid, _ = optional_import("torchvision.utils", name="make_grid") + +# TODO:: Unit Test class MeanDice:

NiP*Jm-k|_Et+TSWrX+whfgcYk+7oJb;}{9?L{fSc7dsz{9oA|4 znjwDTnF6!KBw*u-5eAw!XTxgNA_RXg76m5@8jf$5EH&YJy-QM_cl{0_q1iD6z_HS4 z?+e?ivYUX^`*TmHM@;s6BIk_ERmtTa``xdsW@$IDZ>^-+(cjtUo>)t6LJU{*+i+z@ zf^;|DQ5b7x73xb9w@piy7FF1Y>P>{!ASZu!$shnZKHM<;+P{wI9NtNuQs51xeNi+1E_Zj}CNI)BBx zt_S2h9OZJWSl6hQJz*nlSS`?fwwQ1-t|}e1(8G~rUo%yX44GB=I%_KCqRb^5H=7zF zF!YSeR`0{!&x+u#V8hrg&GW_&1@2^LrTua@)#=sOP2;Zbs;M5V<9<~xONX5Z|Bxo_ zfD&5Mh_6saAjJak)(YZ|>tP|%8!*0CUXXv6y zknZ55Qg2TQ0=r_rD#psklo{`!*%_05%%dPk9Ajt4dxJv#L47LzZ`E!K*0LoboVTW0 zaI=ZvE$kLz+RTh#DvjghNWKW5`pxFI2Hy}>e9voz=JCUl`HlGlB_sB`xOX92jC`w4 zchF2qx`bw#yc#SWkVLjd0BL772{T{C(ew2V*87x6eDT}tS|2{ZsO_ONA*sYU%;_miLH(a?-@;bPoi3J#G(BNWj$s#sG z_`=>se;T(lj3na#)!zr+CKa8mnyb4RE9cid~czOvM+UUsHC$*WC z-e69G6Vp`pD}DJ{fhtPKo%b*R%(f*D>?S^)dsuFV_FGS1`(j(uiygO)Pyj%OT9(|b zF!tA5;%>e?`_w*!eQA<|hK1)q9!^YSxtKXsZ*$oB^LVPtS#EUIA>q_IzppS7^s!VA z24>n9mW+2;*AjG(iMr*)FY-V&KZI)Fr+uI<&d9=V3k#?b@Nbgbf9Un1Y4fIYCaM&- zzl@?1)L#EJ1%F3$20j){uGT-&{T>lgBp61gWD+rYX5;t|+cWdJ({&^1eSFdMjd}D{ z78jvCR2}BBeBmbJc7CU@kOAyV9+BP#j zzc43FgQLw9!9Rf45zE+y*s2nch`!^bi6L7QW;rEBjy_uxyphZtjcSgAn;cp+6V36< zg$7l5YcG=2w};g^773x#MCLwIL^WpM^t`l7cf8)QO7p-T=yO{(RD-hYn?78ci|K6C zaqn}N{3t=uQ@19%INIdG2z~>ArtDWe4V$8fGTS>*3p2Dzwz<%|LrOa;-!Wgna$)JW zE5HwG|MGqbCLFIZ?J^oMKX#T^VZT*7HOzgP|*E5^HOKJ17!?~AXe zyF?5JxDLxTqA;cu@rB*UVF<~T*moiV_O(V%g0uC?fz4;wvnV%1=!0U8dpx9#{Ck&G zL`Csoopp5pzBB2f4$5$)(4>8X?{|j7ptQ8c@ru2pN9I^*zf(EYPcwhhxfnk`ZP10+A6k-67jd|D-S zU$$jI+{Yp(D4R#_ROht@XDKD~5xYd&3DrS+3Hj{=WJDYG&4}maf0n@|KD) zZQy9h&JZY$R<8dCH7h$6_LMq8d$-O^n&8dqSy{Ea!|U(Yi@`D9tKAM&^Z~Pz(C#g< zq*5y3(=O#W@N+7@`TLdTnM=2n?H%QY zZ1!-pTpvt{o5MRBXUXvp6@pCk{JYuRrmxhpixkf|(q5MG=hb^n)~E?le)MNHMLpPA ztcWiqc8|Zt@qiXYD+>Amys)?Vq{)kQtc_gy`GEJPo-w;J_4i`xij^+;_)h`0`T}~P zT(A3n_Mq7cLmI3o@NGr;u*enJ9^R~$BRk+7j0c?bfMk95I2kh$z_lHaRrc+a6Sdvk6&s`Qys;lj4Sr58DS8l zYW1?&c(+v)R3Q+H2Ni|O=SPdLDMh#OIIOl>Sj^Vrw-aLXUlh!;-@21lKoFctleN)~ z*Ifj1d{4z);g06E8Z5!yJhd#w7W>d~xeEWcEG1KU-R~YiLwoc{szS_T_>vXvZfJ7+ zDtCeYB}16x&ZB*5uGN4y|MX}Y0a#8^E(Wg~tiXgzvUJ*@f)Sy8TXc4*SxyfvG(ppW z-~AQ@t8G$G==*=q=`=Zye(7n{P_Q|?Oa~=l^-6mg&wY}maLK-@zH+(z_D&mwqde+! zfJZy`1nFpGV+jFP2A84qlc_#K^*^VGCcdh`t>0w#mT*dJxj^Pl0ICq5%+LP24apKq z*ZcVz`|(Zy@)-X@TZL?hWR8`^Cj^{N4-4d6SjJ+C#_wwT_<%JC#bUwuYI7+EYw&yK zQzo@hf0}R#ESI1!7JiZHNJ@j@I^@m3@!QcukR{8dF0dT=d7>(qCTlko;Qc|J>i#H^ z(UpOB+kx3alwrYvW;~VV_@U`l`GrbAi0rUT@04J!9O~V;u}#YEY%O`O7r@9b{GBP@ z=!*UQ&5U?8@0bWS-<#Mj)3yFYdo~DIB#^bJxo}s~1Wn&dTdcE=k&DIB3pMylJK{s3 zar}!t8CsN~K+qi@cp#3s+zs+2gxOC>^+;)vmE=&t|{O2ONJfH)834BqD!=6Fyao)y*Dby??44MJQ3%)DiFjV zy(>7*4zkXASx*mpfS+aaeh|?T%^7iJ<3u@DecQF_>sE90$k_TokIdyD|5Z*m5=H5Vn=njITV;H2E9*(8`U zfS0%&_r3-pM0dS(XXVd$QhR9CTMlyZ)1tasKhCD-Y4zC%Y;3&XxHAvE+qMV|_!9$a zgiW~J!g-0KQ-N(GV0fZ_x;w3?MGOBxUj>wQ$my?5P2rq6A)5aL@i#aKUcHbn;W#+6 ziAHbJV#5>UFI0}p){Zr>e-Va0cH-`ktB(*EZk~VdFZp`*JTv}_{}=lTgWH=D1zpB@ zAv#w*esztHJwl_8p97Et@LJ=zEgB9m!N+f9m_<{U-79k3!)KRNl)90^foAn&8^RAr zbrP9AOUz&gHE`VIY(BT_`RK9pD=}a-#i=_De3+@?*e$NK3gZQTee?7t-Pg#3vI5T# z;MWuWk|tjt*EjZ|h!xKinTUU*E8xB+m$C1{Tr27b8F1{bjhxhtXS5thp}`EZ`^Fj4 z(V2E~@?w+EJ-0*d{g+xifj!o#ET>S$sglJ8wvTwhMSBVORK8VBX6D93G+7bYTuo9< z@9lM452kZ-3&3qsuZo-JB8RIEmwUC1BIBu3NI1LDO!ds5V10tmtNdk_5F6;5gJ&$3 z@;$bC*NvdnS?f34ki8~;9B6Z4u6YJ{`Xa1dkMXzf%q;E)AF#;7S5L17CqS$tmk*9e zgl_7<^Ak1&&h5d4a%w-uEA8l%EJmdRdl)#2Vpo|&s%)H$pFY#(%CLddDP#xo_DEi< z0_N?GMQ#Z7V}gi5W+df6djfPc8|wo||Beb}C!p-Qrce2$NFw+7oHBXBc=_xc&& za(PCc77S1lRHV-IQ&r-hX4nY>>+HPKUm=d>fc}eCNL0W`P%*#`gGzS1$bPcTu!R2EKsrH%zG`!7mC@L;;ee7DYwvT1b!VL)KP!_e}$0Q^^EdIyrijbaQ0kofPmo&+;hNw$Gr`Jh|kG;(_Gqz?#5Lq z1I}Y@n$ZK;8zroPVzq+{HmONWyywbwWw9S>(y^n9uEozk#@wAIv5*96LEqXQH>@G+&NBBgm zzV;dUn$@e1e(v_Z(b&~-w7lKssuSwnUsGCT!Li=1Qg=&&YPf+~<^{uzj=*qC`QB{b&T5pz7GJ$Ene2di)&=@;!L z?DeP!>$8quvF^NgMfrge_#68+JMXRIet^YF-hGZm$NkmXY<|JGu`rb3OO4fs%0wK@ z95}cJxgQMlj%vf%?UCMimg4*p>t2e;;#Z<6&A&jVC{WrMZ>8%q- zX}WCE8Nj)%?JQIV8rp$R@|tTaq{fNNk*u>tV_tt}J4*x#$-dP1@$BewQ!~0JX&iFl zrx`8cGwwFQ@sOnADl1=c+WXVM7L?C+jhQcc7SonoU7SBHFJ$)olc#iwY3GA{up)k= zU30?}Cqa9dp`$A;LZ41)2}O}VY-=OVT*!ydYj;_922iMMdJe}s9&wR-=x^Ldj&IBp z>*L!|IfGijFz|W-k~IJiyjq)n;zq8)JcJkv z38z<5=%nwd27HoVp6Wykb%`({AbNPj}v0c8hTN zLZdH;25M^Ovt;{=jd*1;;`#A*X)aGTAeqxbfB_R!@P*`JCc+2MA59_`D(DSE2pFD< zqYUV&9c|c*XUEK6T7XpTf0A7V5irm@Vw!)q+R6r}oA2JU|I)(kGItCx!R@H&HO)## zEtxeRT<-$IG8oaw$*pA5^!vXWKEuRmm5pz1ECVHUi!R3vd`Xt!1%E^LL6Fy>KmAvE zf<8XYlfn64g>LhoRGc9AvVwFU1~hl0Fh?Z{?tBXrFNP~X?SDesJ9-bP0`Eyd&2}1Ok!0dNwAM2s^nME13_Sit)TVh!^8Z_@twX<(!>`=17+pok1wBS&AMd`AKCHZ zQgT%ks~p@Eu1ng%q#Y9`1&uu8sYGc!4dNL!fL}&|j?KgluE>G;>I7!mkS4xTt5WW&z`g#;9kYwoZ&Fr!>d?Ys_xv$TaWDZvgtmwwgO0 zR9h`LOp+|G690s1&E%QYxC*iVg6~K>WOf_J2sGx+0&icLgVp1X8n1hur2~S3KzjXd z9Nlh@JJIlCX_`K!-_lK0z^zN4m=w8Z` zIfaVQJdl66f3=R!=NscTe`Ml3fn-;kb%6gm-L74HyQ=yVyMQ2W5xIkOLVGGW__A}|S;P^#jy2*r}nF9DPa{B}_o zUfn$}?`G-8APewZ{UcL=#!r5qcK1)MR#@lB8)v4D_Pr}Ea*7ZT$bdLCc{ zg~o`N7m&Q>zbJWUFSb%AH{D}){?GnVg%6EQUz6ghwl}d}@;AIQwM>Bo z4}Tg=HPv48do1HW5fDrt>;L%z+)c)!cayQpw;<;GwBJNtU@b1dZ-3V+_{NaB0{b;! zG)7Twj1x}PWE{|~hBbDJdfiB=vyMFbXveGZLn+BK%SF7=)wF97&7`yuLI@m!V zF~xWn8;bADaB=$Db*DDDI|GS4p{?vQRGPU1awM z{;sW#q)|WtIXM)E~WZxmmzWuTsGkodcpy3$Wv(K(iLzrCIxPW>UM*JfJHwdzF!HlKji_BCxUb*$hSEFumSJind%GdK`98AgVlE0obc* zP%2)Xv*inw^K#hsg1zrN4?hsPvB!c60ieqydL=Vy+CjHHVW1~}-HzZoy=c)Ueuo5koj;+cv}77ccG55j2>HD_K+pYRo#pThaQmM4|fbjs%A6iK#TvJ-*g6Z$ z=*WuL65UiBP8V&C8~sD?Z5 zXMy@t=5Euun}=D_{bmGjx;(c4r$}1JeNQ;6kP&D;tfF1GL?6FysIWDGX{*a)bG*+Q zapSMd!NYkJd!g)14NUp+Z&UJc%a_v_DUp=gGoVNKW?fPK{3%o1 zEZp)O=_}Lwnt$IixF2TszA&!J%UyQ800?rh*u8@G!BYBPxm*n&TSLmLmDwfd%vzk` z?bZC+67nEN^lTd7;y86P_FqOBa#5WqP|q`VRv zQx`W^ua7MS?yjeJ4Um<*7sYa+Z%Q?Ydw=Qd?-=&fv9lBc`N z^BmV7#*Er}2$8WHP`O4tI?{Me#T(rZQnR9?LcH2MpKSyx{18y#wFTQ1gqFGlEpNH( zyI!F=pu}6qTo+Emu7~o#(qLPRM?*JMBpvS%k0m>5J)*JsHc7eD0F`9l%TjxlIM=b? zC^bOKc9z}u_T61wkD1KDy%)OB!fn%Fe!{Ru(`Bau%?M%6>V;cw16(8Ncd2h=<401l zFKq8^=VT<*Ekh=1e*E}%>JIDsnj!l_n}ox#Oy1#F;M+G$ip2O)r|}OqO+%;`M@8C% zdjWPjCbh@!4X+a5Te1X|w!SjHmGh}YnoAKuERhE0V2FSlf^t+*_-&JfpDsO` zt-1hX3(f6-ry0gCYk^s-+Q{mOfNJ|V3xC{sWj1_ZEuuz7a`9f^XlH?{tD!$>jyR&_RM(^|XoiIHFGA(LIx4WuOWVaH#SBC9yb0ZGSzno^M=rChuwLHS5Z}M^FAKLK&(yDPk zpap2NYvzEd-Ey~`n*q^|B;rm$}sB`9>l!&bQadj7K`d7jaL%*P+^kQh(N+xdTqfv2ISuxfg0P z)vNdJ;~ZjW?Mq(z8ov_((pU_;sVA)B&n>)h{h{B2y!ejfPubtOEhBY+>>X&y^+I-t zY&7dzwR{HpPE8Ryx%yeZ2*Q}PnTkox*TobMa8^fZ9hhe1OyAZutehReluCxbcvO4#)RT@#*KbNR+c%6uL_b#+K$&=OnajDpaw??Jg!jr~iG~>Uz_}h2dh;>#i^IRW?leL5)%$i`3@(5UoA6E(AAd?N0Vb_$ zNNPM$x>Fyx%xyUFSc3>+cG6IDAPVzu+-wvLsDIb^{?)5)Z~tIZ=J7tC?D;ALq{V*g zh7q1<|60>yzC0B;S8_)^Ue+fF+S;Ugmx215upEk#ysm)DZZa6qf14BC1 zj;i5x>caz}t(pTw)*1KAh)jhspRXmz^P|OV23+~soUdcBZe#tWMGFXU~kDwQ4 zk1?WJ-SDnMPH|e<=5(n{3q4@)ZB8W1Salt8GV71Tj1ES#c!rG!t_iW&{P7Xcpo&Nux7^AB>m{eayB5x`r&&f)dq=@HPep+X1U9IiL+v|A3$ z$^n~9JgXyQY*j}eQ^%!f{S-fR-E7}5Bi-Tp;t6tWj`qP+VM_kS=o07!b0r=iSxJUnp!yML3lFyW8a54%y3v-$Od-Y7$03rdm$gjY$|t9n)!1RX!x5ziMQw4&-*8gm#xn zQtEcUo&!cygn(5bvETz{$h$~Hxi^-*nhzzkAfGH^uN+m5sCT@q(q}<0>5JgB6;LHt zs>AVZE>rfGMEM$Ma0Fz5SYL_lXt*nchAXj?_{VJ@UZ1DB(Ee43|KR}(# z8(m;T^_zj%rvZK|YxMjpGjs$_&Ng#g*yuYoz+GC|ulJvm)onR^0-2Ey)OYf1ziN-Y z6xy$uo(|B@d8qCul{ve5*T0GT(eji6T*PA!66QcCn~ncSHxyVo z11o)FDy(uik#-T#l5BsMuCx!2u?VxGVt-5xhkW=@zn=(u*3FR484Koo`ZJP>Z#n=N z`oO7pnsKwaY##M##E1snaiNlo08AFD?Bg~G8G5%Z`q5&~f+r5UXC;cC`8_wR zZ5c2+{y6Qp=WOM75SYj5{M=l8{^GSn5^b3hZO!W(-8_-1{Y=h|x5cTtTNmY&Mh+e1 z=XY1Mr}^xtZq(sTz(XjJ)(D9I)QF~gcxBng@URN;1e784#%;Os|8B&|-R$euovHv7 zA~L?Nd{mWX2lns%HF-#I=n61?>lO5CZ3{@NBw3OhsX98pG22rqWtcr~rlnM?QFW;Z zP%T|QwQKU|0Aho+H&bRjMiG1uHkf~3*kSIO}Hj`EXSIWyldh|v!M?kE2_ zkVhc&CAf43=4*HZGC-LJ^384qt2<82SpErbNC)J0pL4`vqd^U+w2 z*m?*ohemYzTOl07gy#-^#IK3sWjoBW?sTJ+`cLd*FX9ws&uvxEiXo&8GQyy6$@~-YR)*Migrv#FZs7*!%o;1 z>)G&43(Gbb(!D21so(NC7?6fkfwH+PwCqTNta9zOZH*KWB3lCT?3gzoTTrTzAze&J z(y7fsYL`aSKe!6@cB^QDAO-c4(g?QRz}L+$R(7m(_s}&i6pj2RUIuIbw{0b}NmhiH z+3V`6%Z+#zDB@=vF%tH69VVa{rW3)Y48rt%D_M`+CoF7pXG_q=TK^%dD6R+^+x| z{43ZppvWcEdiizc02XdM=p5inbxsWquhg%j{RbYZ%&9Tf38V-|gRG!!yyPEl`mG-kgFOx?&~0wgT?X`TW-q^II}Gr)KOy`nzfO%Pk> zp4t+z*sP$ZI4wsz5dOVq&2u1NKPcJe(>9dgliz!S6tJe!I9qBvjsK~uRsd4i zly9Yg)Etfc?)2+P-^@B9gmwU11s1H>0ALQAVRyYat|(DS$$NZU4z!ErzL+^P>EE-p z#eL=4z}!-el#^b3C(f$eMI)`DsDt-(qXbJ4LVliG(w<)Skv;?Lj>nH!hR! zSq>L49T^M+HpQr?K4qI;PZV`wv1dKG^zr=Ivm$`_J<4jA(yO(-G{y@czL)z1)IStQ--m4;Fk&pm_bbyxGLj2zpGX=V)` zb4?9l7L07?d0fpf7tC^@4M+S_=O!efWF>^txf!l!6=h!|*iN!`_3En}w^u8-O|G{5 zF6o-E{p7OO*T+WJczx&7nMENXYc1Dn(!l~sL4KzvL%0=fRml5Ih)*9*7M_U5_p2o2 zDO-mr!nGlN>4BV?)VH9AUdbOTnzTM*7scp$7rQLC$odW0e?Rf7v^3v)FTad6c^?=-Ao>u8HsAVYzj&Svxu; zE=`&OsF;;vA!IogX0NIl?p7nd+e$C(97ONmVD@oF5fjt=Vj)=x%3zAbOof$0ywJsh7gnhD)I^0HT}>=(vO%TE z-t0Ta)?&?HTjnjM@XQB!Iz4s!PYV93&b)vKs-&h;akX&STqY~zJv&&Kmo-Lmz8-s} z=`pLGU9ctGr{gOLDx+M2cWZ)$Ova^kjrb&whZ z*R=c4kOK8M74Nx4{r+I1tQnYkgS9KOm&D_k4J;OCEld4Fmj9%r#)x69=$>7l)~e{y zY!^pImP_C&Ki!wQH{G);&7>BNfLZ#ba$Xdbp427A7Hk33ygJwYI9?vDU5b)k?ed=Z z{M9p9vH&cV1dW8$Yi?jb}xP zNz1?Z7ick|WK}AY=ezkeHETz`Z=8#5iauek}~u!?~)fIZcA9aN~uMiFobw zr%cU;&q-S_x>W+*j0Tk?Y=T1rqn2q&o_9`0BO7@ehT(~v{A(C)*>J$zOMxjN!2}_}eqas7OaW!qCK5D`&rICzw#MP?FW*%UAc=P1?QkplW zAk$k(zNJR#a)cv8p(Z-K(V7zk!q6~18VL3=%Gk4n&3eIrApob8$J$bW(B+VI{-6se zLjZnI?oU7kKSeZ`{9CYe7`?DxOb2fP5as!y$+sF;cT75hgQHXtri-eX5*N@qz!BD` zf}7XL_4tf3_k64?RtQd8CJ(np15f2ypNUcfraPN6n=JUD8q>l28Vzc5)UhRr)(S?# zX2+B7%fl(ABNlNa%L!tN;3Q2fHWvr|2;Mu0ea#!2^8(pMS>qGuMR$161|z@GIe;r3 zo$s%5@PPu2dUJ)LuiKCh82TI+?9y*vzeTTJ_!ftCaQyldRwB|LrJg9g;}b83kC}iY zLaVA(bt80YFE{vZBdZYvvMtSi9R~%|4Frv=!kc^goJn0JI*BtW- zW`KRnABefQJgq+WF?RudL;4vR(lWRyN-!ym>BgU^_Ifod!#`YHs$@z9NG6U2y(X;F zWqCz&&~017#$+8)NQHs+Tx|lU zrrX7%9V?H$j6WsGbR0X#OOY@Vw#|Q7lUE$dzZ30;)i3HQwpOs^`CU zLrLRAhH)lEAgkYZo}1>rd0pdX}Tm%ET7I*IqL)zz2mqYv$w9Rp|J< za+;xm;f&*J;BH37CisIk#mjkd5u+{m=bz>h1MA6QX`GsRmP`^=by;5LjIJXY0#7wg zRRTvB=YoMAZv>08^@h}Gdw-_LlEn93k-`Z(*2peyG%-qrfuB3U?9c5K0)c3Yc}Cwu zez1p`)~ji29&vCuU(22a4CD^8y1`shrguAS;ya4^vpmWWGC*>4mgqH&;cQX$ioRUi zoD9SWX0xx5NMBRQ_p)^Q=qA>aq5ociG{-q#PE5F3u-$X>kj#JmV_6!wp8-$C`K9vu+n(fFho84aoR{MDBAP0@A_S?$MT8S5i z(ts$;AY;lIZtx{GLE6>XXK6#rCGxWX;|%DZVZJw60q?Cy7^^V0L%(SizxjI_9es3F z-}k+o>UE@|zCfGT^NJ&QAdPM*?8<^a9H&lwC%#gw(Z!4v&E^U!s_Dsqz<@UEei)I(_e_u!B`~u}A zomnh<&SiDQqDH%2W_#ZDdEwG~elTxZQHj17op8Lwn5S_IeycB*!|&_8l0JaX8(tOQ z0_K(qbmH~gMAC??@zj^gwV{5qt5SnA(l&?dnVyTRkC3v`*Q$oLtZSk=210P@u}^VL zg=u1>Iym-ev>fEr3>{u(&?Eh0$A3Zedo?LvYayJ*$rh{4VrJygp(<+@Me8L>FZk>| zhAPZ#dUeFvgtS==Sh$%*{rzYQ&3p5s_#_Lh1XiI4uG5*-ycm@cz>@RI$`djPU*lSyF$h6D6 zoE0&@yA_`l!D%8F`lMgpF=gKVuBPcU@wEnsnwnKp%94I&k6FyLv{|Oxw84EPl*~@P zem<`KvAPs}@)MGtY=pQEvOe>K|2Ja)7etZ>t@&DG(7jesx9FW-N-L{5`Z(}tl2AFmmlvF4ZX(xARS2QKk$*Wg{?Dr+gZe_ z{05!o$b*6`_tnsO#o*dZ;v^+_D;0h8c1a1IsK-n0#$!9wxm6|ST5$SS12E4?&CdWL9y!5-Gn z`9w>;B^Mr98THG{ziN1pb#M7|k-y0D3{TKgxXEHF>;oY#7ci7d3=QOcgYu?Ebnll*<8tBRoR2q)V1#s5a8T+wv2i$b+AbOZ%rln}(J&zVS7x-&fW#%t}?bM}v6{bAbR`FhVVJ-l-i zayi>;K2SI0jFSFBlIisA@cBGkobox!`%6~_>or>tn0<_a%pqH)o#+mw_)7T z562y59-TWNUnd33O?w?8+Rkg|2%ERM(MH+U`q(#~#8KnV@c9-BnX#v5Ra?$$L_deF zN``XbvAU5LtQ+t^8SRN**&5@R_NH8F@Zkf^to0_YE!OZ?%=0pFU3eKRfffdsbi$Ve z#j_IY!BYlP0dz}ix>|P{C9=OB&8s#bWus?i*mzf_sth|~cAm4Uu!Q##eqd3q%HX^m z^kK`|mS-Se&Xg$Id`I6YXeJ{!xhy;rmEvzU>&*j@5-mzPqJ2=(ays%&I0A|heaStQZ z5KtzuFZp85L;PY4z;$MQ8pgK?i&VRt)w`;GO+^c`zopxO3XCCq=^^uWa=+eL`|%vY z68y;_>{_Md8>2q1HY(G>ha7b{9c!zan>iq4CcOhLcIf*+oT&oGyf~BG3?TOhAuidq zy-Xy6B;d#wR=|xAXnGhv4Qp!+>0#@wrXZ$Cd`^>!h^@;qp^Q>Y^ zuJq{+iO>~`O3%qDLon3hvND+Zug;W>+`xyO42Liiil7)xRQ`Fruq)e+iabim)^SSO z20hTlg7Vr_0Ay&mD#6`&wa>*aCEt0HQ-@u%?j1$&tej{a8#3kRu_^b&`s7AP zMZHi6Ca12cj*cJNaA`Qn{5c~XdlYw^J}P_Zy5>26q!d4jqz}1_jCUGA4tV_!=sY_y z$Fl&nB22;tSPapp3ax#)<&~auZi*Ni%T1+WIilv}g|w!PnQ+niRN~s zZmIsKh3)YTlKhZ(uBrmhZ+G~G(xRELVpIN85IsCbj0MP2A#7C#Jg{r!DT^|dW_t)3 z8#x;lyed+e!`P&*)@c%)Mu;Q&shlg)q`#a)6(8R`b^Xb_mC4o;jER;Iilc9LYhk~q z86C{2U`}(@T%&|M;j~#6F3~Kh5M91UE$n#dJ_`fT4p5{4`jFPO&83`zQB#oL{MoT% zTBK$a?`uU>fiL6t9z?A1)!7(+GQQ0qV!0V4o`jn;X!Kh*q}NOnJcoB8?c^PUj89y( zxTrWA{|Qs4eYs?EcTl~*1#!Nr&)fpDSM<1atg}3jEQ~TdXZ05RF7fK_9Tht0Csonn zp*n9luEHn2b#AR{e`KhM6Y+|6!IVqiIufP>c^nj?>1jQa&>Pawuzl5O=`9ja2;+V8 z5%x3{a#@@t4$7>(&iFE~Zemdf9$v<)Mpy8go{ICza~G;Ia<=vlJ=q#=M_jTPSv;E+>neYjXTiWcJuinqJ>v-E@*jMBj8Id-o5hE10 zsycfF8sk0GRD9`sHTkm5>G3xhrZ+ENge^)WD%IGuZB_{57CSo2+_b(nOGb(tp7x zIgpj~JH%DQ%gIm{E4)b4Av?hGoc0IK+c8L)nsYEFw}tlO zdI~uyr}M9W9LjD7dT`)q*!-ISSt594MS z0_|U^zum`G!O-sVH$nIN%79W~B_aqky0?f6rs_idId|T@Ry+_uH@nW?GzKa_d-Ggv zFdP@j4WZJ$5AZzDig2SfV9#%T>GunJ)o`9CEf)4^wKKX1+n=ODF0n=&R92Q;I+JLd zi#TAt)3}w7c6?il9i=PYMxbDF<+lD9TgPO4-eNlr8+@DtO#7^WY??DsI#Q!*j}x2` zK$|^#tARPf8++dM`|(|kYh5@4*0`&c!r;u~=TbwlPpYK8AMqWIB&dMpV^}=<;A3@( z*}sS?A^BwE_kG(?4llVM7Va}lM^`@Y=*P~Q0P+ZEtE`??_w%M9J{jDH+%aXy6FOf$ z0nCDbGv(UW&>zzG9BS^Mw$o?a`)FvyQ;YrZ#am!dCsR52ob7DxfQ?>+qyu<;#I%%a zFt&>&#b|57vHk>0LdzP_4oWyU$}z@Q^T2AOx2?2E*$T^OU10if&Q}t!4YR&>e2?8ga<(_p zX}(5(7V8;h{;MvJN!Uorgw&1H%AA>GwgWn%*Xb;zY%+Xg9%!5}Ebhg!`0Gfck4HN1 z7-;1``Q`G43Mr6!?{=t3+lcs`M^AiHG06kk61{SS4t5lZ>g2w3bPC<_B66f^vc_f< zf#DKNPiz*!0Qvh+^NT=*hRNMoKL1Afb<=qIXb;ZWC-`L{%;*XU_n0uPAnQAUDjc>U z%rAOX!fmCa@csz55KC^Z6Y=}sr#$@>aO>4w0wfB!8`yXB{1`77mG&z|c4Te+sT|y} zOE!DrKHOw`_v=0hUJZ6Hn)g?xMj~y+Oa{N1Wvdc5PwvFTTF!$ex1Qq|i|=;646{eQ zR%*lvCm>w)b@v{YXexIbZ1`z!c(_6k)z|Yr0cmMYHhxzLG=^K;C*b~zvjseTC1j8D z4CK)UZj;8iy9bk06I0pOC>G&f%mmi>LCDxHs-}^Yt^MemP9{U3Y6Q*YzOaqIf-m3W zh+h{N`ki#GoBZg@jH0A+V5(PejAzKy6I7t?+O|8CFL5|ejm6S36%zFRl%qO8NImcAa zMW@dFX5SQBdA40JHLus+;%{UyV^SlIj`41cQarQzcNcWS-ew9#!9;EO6A6W0*Vq$S z-w0J>d;PjWNcpF^Iiobb0@09lkP>> z7UlU2HJ8{y8I)7DJ9zy(I#AIPq%{3&^PXPgP0LHjd@{+gBNa5k>2Adq1&#uPn|E1% zNn_BQ!f`l;wGXF(#k---gVBfa9Ouw4K=ZtMe%8fECmpC!CRQZvVuz~hbVAu)Yk|Ur z>BIbe2$hUT=hUSoE*HrF9o1k>>bLBNgH*1cbR%Y%zOHiF0{x3#*1a=0sLpKy#; zO{Z9Ny3PG@Hlxmvz%SGMB}5=+_Qp4eRYW^qI;ds2>b@B>Qa1wE;;McPM43l1W^t+P z7k9R7Znet0ndn_sn@KI8X^9xe%&QDdaT=Z3k8sQ3BUPp64YIj=!|zATnR^#umzKD* zWWRcB%xHKD_}HuV`+l7nT9E49<1L|s_yL8gnw6Y&APv%=aw2JOBtQ%V4nyoq+R8Y& z9Je_t9JkFLq=jA($-b#?=~gn_J;^Tvw22?+5SXv1i1r_By3ijr*YFq5pJmauW+rDi z?uaQzmxwNh2&@d~;X={1z%Eeb!4_XXgM)!b|5YUPLm%IS-^;g{gCU_B7Tr;h1dV3< zxX)`aNEN=2qZ;bw7EOpN_fd(?xur1%mZ4r4;}agHiPmYH+Z)8qY*?-$+?lPj;=!A|96$FL4C{QUNz;w&+POyFA-P||Q|mXh@{|z& zQe?zHHfjk@eACveQN=zCtP>QW0X^mQlB$!*toDJ~I|5wZEQMyig2~?`^(w3h7U7fr=vIgZLO~QuRWHM;!1(5ED2VMPCUP#-G2}lh< zb#EAfCW8;)UDxs~%4G#x62@m}AUZ_E{_p6}>oLll_$p}cNleOR!&<}ksre<=*Qgqy zwD}&QWgaMaRA`@QhL@lAa;aNq)e}#FX~aoqNnnEkTa_X00eAcY)HKdnU+IA% zlX4j`C*e0vg+J%q_%B4H54JvUv9962{)l&|lq%9Ih`q=cDt?pXm_C0DMPX&PS~T+* z*#5fdwk#`6N~6N#ZITTeAwd5SLZ;~jgG}prwpuXu_u>FlV$MUaUnWXkj#au~m%xr- z*DT3Ai@N#BfJ0G8YoAYQd_z{l?T8Opsb{6xhwFL`BHVp%=OoZI<6*(7n%Frt=xZ=1pf-Zi?CImvyJ2Y9L1_svw!i$ zHIik3l{S*cm0FKxms)KiZcOnP>Fy)#6L2!g9my5^Gv2|b57S*H4^whDgQ*0hcA;Ns z9vh9_@Oy#z+x^fA?;dVVi=UhI21Zq(oSIe_J-+YnYi8L1E};O+SwwWhB&_RX1#IMP zB`6fqa36Hq%HabyTVEH^9rhD2cakfhTZ+j&o-dmWp#*Vh{HUMzi8i6<+fxc-ikee1 zm25mDDKtKF=An_7n9_81AC3O`5Z>bczR#@He;;IcSl#6|9LZk)EjaIQopas1hH1qH z$9**&D=5>$2-d)_>>8b28`n6l8t1Pxpl1U#OQbRfRO@-mCH(SEVI>Mi9;cDNq3H<^Pk+W8kZvlMUe=kNXHWtzK15;&>9 zMtfk;^pFrE8d_HB*FBd<=gk20$TYv4pQtN_3p@?A%^OFY7P36-A2{HgRP&1J?gk{t zSy5d!-epD}b0Y$x>>EWbX zEv%^qvaCPyVr(=Ocb)-5ZvtB1wGi2?IH=jE5f+cJ_s42lS zqMt>GWB~;W5<*7R7o+xGHwF>r`<(asGV!lQS2X%ZwDeFBI>&+E^Udd_m|s40VQfjQNdT2pAV!bbD#_SHP%mk@zoAE0<7;9M zsPl;To6(0s=N+HKRGVM}k9qm5Qm1{KIX%*9t)YcY4I&1Leh204LTckPXuS{bKxIdK z^KNPlu^SB+oRSTlLg+l0Ku!Y7PNnei{*BT%o(}Trg7lAedL>g@jnDB0+=6pB26fYu zr755a#tRXUe*k&g0|Vc%3S4Cf#@3OnDfEv?!SmI#ngM5vyvLSIJC*Y78}|n#Myjq= zGQ1h+JpT-5in10;q@D-!yqw`k=NCEz{N&)fNa7kdwe)DwA|sGudWOKS)Ik~{`Y1Nl_=c(_Y0Cl&?UJ%~0F0W;n z6`;b1CdSh#%LmU@#{?4feNWf|u{s=**0O7y?pO56q*CoNx-2QRiBcNU&0MwmzlzP) z2Y)lb>ky2B5Sic%J=aHEy68-st-uxnLcvGnSH*6Pb5Kan-eQtb`0UqvlytK693&<) zpHApo5SO-_5oQm6xUHuo&QBlFBku_K&A5>D=(_OY(WAHW+JrW8_^W=8v_5>~^F};< zLOnR%OygE=vC*?B_dpc*Q$E?Y#gJf2%ehAn_~dsQc?E ztJ_#w%y==~y;Uiazl^TjA`S$0i%tM7O_z`?ma()RRZ}85%9rF9Df6I%iJ-1Bu^6ZT zC{j_nEZ&1MErQ1Ruz(wuIQTM!71w3tF>OmrU)x4V>FY?kF!)cxd7EX~Qc|{jg`UO3 zOwQ~$LD&F}7?MLt#Kk8;h>>CU2_l>1O*{^I;sZ%~-pDu@b`uH!u(uq_IbD{tha|cv zvSPaviK}Q&{_8|$jZeKAKW1^9OZs>;mieRbhDNG7GR3)byq zhH|TZtdt|Qc;;XtKCLDu$U(q2qBZ`I#-e*|4Hi?<{|5wp%SGg6?zNQ4p_2CHm1=Yn zvaTuOD5jqq=ZwlED>~5vgQnL1J#Mz0FM0&sKQjS3X<(9Dg?Ra{VsSEQjS&$Y&iA2i z>X-{*-d|?<%*!rjGBc;YCL-p9!e4w9i!|b=L;V34TpVvD+K#nT@h8-$!;dCAeYApH zXxjcr9&90iEW-*TEuxQyN;#^NyHv+JmFTa(>k?KbiU{cMG%&SXVYl*yo?Vz-c^SlC z7pl7%8^AZjIP@yiwi=|*er9da?F#-bnyMsvXJc-!P?$8wu z`XsDIjQg%vg2Ug4Q1YUNXhGo-~!=M3{f zCC-r31yj8VqP7!ADFnc2gLe|gqL^(b`@Q{UUg5f-CLLW$n3UF(hW6?@VwRB-M>;1U zKzmaqV>6&PvkpJ_uA2V)Djk$tSnbxrSo{KF3_!@u*YN*ABl2Uq$MMgqbcaFqXf z2~-0T;fP%yQy;6!)jnE>2df59?Ux~M(+P*N9=NGxwCWS4yt*Xkh!^v3${_YoZAkU~ z+?^z$ETM>lH=8Q|X=J@5m~ktopIr;C!E^9C(JMe~lYoLr+4@Qphk=bgys&2Fg}PKL zBW(dElw!WNVbpS{Imufh-_{5bYaW*4y|6*FjPpo|C|cL4E$9wyjXU3Med9+(?9?`2 z#3>AOln~39-o_Pj774|tE01rxU{lcdsMI=rQjS6A?6kjXOLZw1z!&3JXYP9o5Bc08 zs7H|TtCE-|%jIzTZC>z!MxKHDZfroDAaqjPpX-TUW771lDi_PFyvvkE`e2t#CS`eR zUGSm~-)fo!Wg6%JPCFS~@49oqcRyTbj?nQ5~v(IB-12pXpK*`L5Q#eg0{`R6pYv zxXj6#zE|(Qg`^12l)60+XOKAU!?3?b2GTo^b^DU)lchA7OQgK^YX?2g&yvI%s1K=0 zNQUiyqvO;}RQ2b4w>n6)hetJa+-GH^Ow`(GZKlMA=Q^gDIP9}n^gp8eq8#qh6E^&) z;)puiPo&RaJo#=gUf@`mt=4ZyoOyu!ngk=Npca$)ctG`cwatzm_Wehj-h*iG^%-j1 zVQm+h=VD`70^bvX2ob80EHtb1%EL9Gb<N19(; zy9#11E!$0k^BjJ%+F7^M7DvY`5PSklzNFx?>Ca4P+_r+=6CqG%ida<|-K&$e8e&zS z71~$T!WaVWT?s<8m>7%a`Ecwh&*4#!q zSMN0w*#6F&_br82({7Qkvg4@_Muk?Zj6h=k1nM`&f^-xhGI-<@>L&B;Q#5HB-^A+c zB>sR6S4a=Zwqwo4J9=rLXS9d&n+_R;Ta84G3lzT3C| z%2{3nj8|f@y*XQc*ys%ZT0ald_3QboEyh>6e&X=Qr2CgA*OzM=?7e%$*H>pRg};t{ zAE_%1BQk>$4K7&Q1AnNV6Hwt0+_f-iRf9k0NeE;M?=Ca{?~DE+pL2y>g=V#;tmNTk z2(b{KzkPOfpnv{Bv;Svcf^QHnp$sU_B;UM=n@i{#(d7!=UwJmn@tY{kT8q-AK5oO~ z$q6g_fD5>r=whnY1Mn4?>NR{J#ln{HL9@DOh5KCKr_f>W)c#$^V_rvII_dqGUmWf^ zs(c%gsg`x#B!-RdN}Cm|UEq}y2|&5`X#E~fK7|#iw^e*XrEEDsId47TyiaC$IBom3 zTOSxo!N{kT+~(&b+y_iqygPd|nw`(z#>am zKi7ev>IPMsUZI?~$N17(zW2wB@%3wRq)v$LpY1qaiJ5I5Ij|8i?fpO0<(M-Xo^X@NEf?8^3t+HNI@w=i*N-Vh~ zNtPjmr1u3>-bsZ?ov0grAJ}_oAUG(17!M)yik<`2EfjjRC4lB;MDK@;y6njj`l?I# z*o^m5Nd?uW9#xzM();ddnjQs3J{{!hn7B){o|=2Oxn|^Ajny~u z8{d~FT!2%`Gl8~?|*VOL`Am5HEI4PDSyc=}$D8Cy$H@-RHs5F--X@8$vysUJlO8npVBB`vEsi`gMD34}B$j1Dp zCj5BRgH--`0mf9;*-S=o2~;|*X1kNES<-*+lnQ4m;vWp0CYAxu$Q_>H-pTs+$zQ&4 zsf#Flb~<0VvI~ZWZr^KgMBAuwKCt2c&D@*m7l;S?f2{d-3N-r9;GfsW)$-AiG78lYSOFZ89f@pmqZoELvoXm2p1FMSB& z_FtU%7jBF=Q`S96tVYzDS=Ub1X5rNZ{{td94#35VvZ%EivM7Iw1g_doseqyrqgiNF zA~-I-Q>Eq9)qWU+1ytvntFsH^`SJ_G1eQ>Mb==R1hPo$Xx|$D8Z5?x`N-y`ijhK6> z^)B<$VQPi$mB-K!Mqkfxv_4o#O!uJc!h(cNe!E)7X=jP;_E8!KF(!o*b4z|7Gh26& z8$xz7`{@tdr?zceTCkM{8ScnG3s|(Dvi5ET;b_4$*Jv(r0t?|k^G|rWL!y4`DLfXy zY=O!xTNTEnpm!wlOJ$Qa^HrmwPc9$z<}L2~g_23tV7CfaQzdr(dziETzlRA&qxI@< zPK@|t9_;+}k+d(-+!ZP`^V;vC)bE}Jc1PpAT<5|3^+AU0H`Wg6%Zs(Ulg7Tw^|p{1 z9oSm=sr@J6f9ur^oSqQglr%AFE_+T3E{X?`J}dMG>3v^by|o=X zyp6jwF9n9@Y?pLNvpWANLATnKxGYwE04kGyJF=_GC@o~^b>h^O$y%O7r4dPtv^IcAJ!}TIiks|F*7!OS4ebwl5dC&r^ ze$t+cEN5`vT?ANdt+n~Tx}%GS2MzeVuTQ)QqI&^jQQ)0?u(5F*2_dU_-|Me)fpjwa z?|{`dYYicD&61lZd6ok;`kU6hRC{~szYjm~A^$9RQ?p8!h z{VxD+4xN~Q&%!hqB~j(Mo7$8XV0$t9-1NU6u4?)n;8h$WrhdxdkLT)NV|<+Uo6gz* z6|OPD4lB^GmF6}l`qjNN$N1>QWJDfV4`32PZWMSoOgccTVk-Bs(RT=3PU!fVYql>U zsL4}(t^(Woj%Wp_)f+$J&0k-k+qV08iA4fC{^k+%;vO|h`hTv;kpCl;XLJgw?)4Y( zP-9l!ZkTqsZSS;~8GOGx)%~s0U?3%Kt@NJp9tPc#|BK`@%VXU2FZGealqQVss0jiH zFn83$0om#0Q)mt|Bk`3`OZ4RRr-hrD0Y>a0K!557nuuAnu4i~#GAZxP0_VvzHRJKD zj1MK6&0%WN9WbX@0}IUse_ zecc=JswE<*+j5nz1+ZNJRf8aa5z3l*TS2p}JO6*5)rSA))NtCQapIxxNdB*w5HR0B zK-s@J2Ve?5T+?-4K`ex4Xm4K6=VP<)kwM-{&IzP!Q_)FqKwsU|b4oj_z?mP7ZB#$7K z#rU}?nDi4l&&d}#-H!fQP1|Kl$jhs9jiU+0%VNI`mv$TT!o$E5M2h_a1WO{0!AMA3 zOk62%x6yVdQovMn)akH>N=`v4!~Ae;3E!6lCbE12W;I;ugBq#mnWP+;$oFk4!hGyoF-BS53TwIrJJSIm~Gk?gi_2oS6$`Hs^WlCO((B zF$^!+=c2L-bwRP@th<>jAi`Dfkj!B7W}|b5V6)_m1G*pv6`0nuvLd01>VLjN)CK!D z7X{Uxk+8hsi&MUep_ThM_fH^YU%{&XTf_ehda@-6!z|Kh?4GrYf@o7@D&0BHWNX6RF$+H-3MPGCq3Tcsysy zhYn#nBr5s+u&)0BLC03aWv@?mdDIH_@ z{q>%=*nj*Efb#iS;`xP~*d~{ECG^ghkT{Fgq-iU>AmdZ0YV&+rB? zMsrbUGVk}lFn8_02jzP9<1i1~+vxYN|IvWDf8bHiTjPUhhs#;rcbp5sw2+R3pPG`0 z33~tQR8+=Fg8ryQRMj=y3#`$&7_MnL;h7;lF-dyj3}2wQd>d@orDXqkzR@eATWCMV z;p6bjgIR0*-_47~*FUW4^d<1#&Eu^&#CdZ0%arL+A(|A# zbkRij#{L{UE2V}rT{f4EQI;^2C%-9tvYPxoYtVw|Pag1*FYO zcz$n#b_%>*VR?;VNrwqs;y~$Z58}kD;ay0@Uv- z$Vekk{qIY_*@9EQ3{5;KADDS_HLPDHc>l3reG&%$|Ar+!qQiqagZ9f?k<%hdw)ogY z0xE&o42vACsLX90NiC?wmkArSfm3)@VckWa@Hi))2*|Q#{l=!t-1Zgr73PY0?RQfD z?L>xkpRg-;cIfw~VdMTi!5EHjM9=@7EF1Oepvoo%SX0D!EyDqoJ(q(wg@O z{$z*hs5_>?y3hW<&!hZv^$dT3q*3Xj%$Z2V@U%tzJ;1F;DJ4F--Uds13q&;IU&Y@A zx5qUcoXp1E)_iv>lE0bFqrcJOTLeKy%;jHyS07^kvDR;Q6V#Y^nH8HOFCU4h6;=PG zk<%go3|GnO@A}_&@H>v<(_-(c8BWjTW9S7l6z%p1U>L!JuriVzVZT1=6dfQ z4YysM=8u4X-VJlzyl!;l-{-OMUV4(IrsN>5vx#AZ$A#)IQ0M)5fmT`84NWJ?7YEel zTILfRmo5$)4w)OB;}HC7YX5B1!2g!&%m3$@=tzHc%z!fq_+ETB_HKwl$K@^R1h?ql zfw_PFF05}un)KI`Tl{glA7*PU613dB887`6iSgfKarBx*dij~aiIS>yG{l)Z85G5Q+;K=JhVo(Uk!h+hsqa&G#u^=fl&<|4V}vX+4$KIRc>*P z%2fk{-|u_6nflVQx&HV4eZ%w5pi-t{iiNE<|0cLz!GFAEA&hV3tiRLB{SO>Mf)3u_ zANwJX_A?6T`t{f0037Pl;o#GL52(B}57aZt)sHcMFH+tO-%qa84wM+$#Th45h*-a65qfIzJSNRWVbrM^uQD6;yy?wh)vO*L&*^ z4GI^#L@Rg!fSl(OVH>I&;R@%I?l?NRk;Rc9vdXsLyd%Pb3 z0(NMGO5fftWK}dAo738fiFBHsY0#0)kMp!?#%si*e!bfN(#br%mi+)J?uOy?T~Unp zJ#1TK$Zj?W$s1zyo*4F$Tq@RDqpE#_f&D|GKh7*gXFj1@V3_iscU*z~u>-&9wxE4i za}jWvuVB}1FY+{1b@3B$f#0L1)KDz_cpjj zG&Qp}+;uw*xd=DSV-kPqb;OS>?h?P~wQv^!olQ39)zceaD(3@NIvG@7=x$U6CH{4n z;MD)5s56`@hU5P*pqFX`=&qcqm?CCGy=xWscQf8sB*Lgp$>7j1p|nKiF; z6NRN0zG=<*j{JW10Rwvm;*q^`{yuj}Q_o`61p%~5Z)Wr)45jbxjI3!JEsrZ5RTS@y zj8cvy{mn;X+_qqQ9r}P3X-JRD_X(SdodZ?FSa4*27MeqE;`cxTd<0Z9cQI-<>s{$A z-bD&Y1>StE%g^JqzsriGqyg;o82i=9?@%SAcqzYe|EH!+^I@D*KN|Z3O*wPx>vK61 z)t3&(3JijEC7%-{@VN%dvPBk$*HXDQqM>;kp->dUrCYP@E%o~+dO^8M4L+87qwM)>~Djdpp7RYM0oHsgd3xn}8 zMC06iqSeLS9K11)&RP^z=9<(eZrzYP9I_3Yo{ zIiN0c05KDdfoC}23`3H3Jhv}A3F(&F&|{ih5AG*0=}Y)g7}{`befIJ~F^^T>(@&F@ zU!1ZEMK0?SUljo<^n;*m*E);3m7l>uN^i8KR6=!Fs_R(d@ zv-mT59@av$h0Wrwg)-Ywrm9g9FC$SkkMM@tSg_MK&(@`8sh@+mL#=e(xe94FrA8$I?R z=x{|oKHj~oRJqv65$JfrIuRxnkWpy+q&6fTzI{*SK@uRy+5r1+f-}=m{p_=y3Sh+m zG7Sw+4(bj^l4Vzw6bws<`=^hZ4nU`{0PERiiBjQ7>~da@T*7=nsmEm zty9@@L+%#wR1L@7LvYqs9=jvBu_{YYfSwmQ%Y2JiVs-+vc;YrMRWj0Q#}FBzml&HT z|NkneVX3(jUwqmVVk%IW%#=sEzp|uEy$C~;o=q!8kdW7!X;=WfZCx#pfqnF7kj=ao zoA6&WX#agn!5*EjiH&8O2$O=6lzGpkE2N2vaZb5~jB??Ykq8o%6d3l)u_WiYB!0V> z?JwuE2oa)&$@4zZVVsfE zhWzb{K~qje;hXI1?EgVKyEEKCi-^xmvmR-QmsZWm}amVNr_3X}%C zissww7iWA4hHjNHDC3GOjpp<7q)3$6CqcBKm&J~iKZDIw7({1uAI?`xz(!>#e*n^N zFBHR-8f~h2%~K!D^frwx>+y2-Zj~dq(EJm!%Cn!pG$KFT?cU$xJH~;8Vj8<8Jm3EE z>xVKVHf60ZslvpfsJyTo^5;!@<(Vg%0VSt0BhTXLjrf}ZcBl@M-R^sU?oO% zKSG#7yjA}?!Y6+q5Q!6*0TQ{op0iQ!jg#DP{?nz;U(Js{>XAifCyQ3nQQ@LYZttAX zOn%SMJau@mJOz9qTuCNxU2w6`YG*$?v)lq_-^Y%%p7Ur0abdAJ7&_fon1I(Mv;X=} zrzIur=_Y99iW6carSVcS=hIl8?H;1Znqr^NO_$8%kX}D?S!Cd%Z^6GyD{FDS7xJlX zE7W-UbZw%A8$+av$~na@P9k0j@7H?K%0Ae$a(_T#Xv|#C?M|NidHT;4LdCUj86g9x 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 z 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