diff --git a/.github/ISSUE_TEMPLATE/epic.yaml b/.github/ISSUE_TEMPLATE/epic.yaml new file mode 100644 index 0000000000..e6bdd31e8a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic.yaml @@ -0,0 +1,39 @@ +name: ๐ŸŽฏ Epic +description: A large body of work that can be broken down into smaller stories +title: "๐ŸŽฏ [EPIC] " +labels: ["epic"] +assignees: [] +body: + - type: markdown + attributes: + value: "## ๐ŸŽฏ Epic Description" + - type: textarea + id: description + attributes: + label: Describe the epic + description: Provide a clear and concise description of what this epic encompasses + validations: + required: true + - type: textarea + id: goals + attributes: + label: Goals + description: What are the main goals of this epic? + validations: + required: true + - type: textarea + id: tasks + attributes: + label: Tasks + description: Break down the epic into smaller tasks. Add or remove tasks as needed. + value: | + - [ ] Task 1: + - [ ] Task 2: + - [ ] Task 3: + - [ ] Task 4: + - [ ] Task 5: + validations: + required: true + - type: markdown + attributes: + value: "Remember to create separate issues for each task and link them to this epic." diff --git a/.github/ISSUE_TEMPLATE/task.yaml b/.github/ISSUE_TEMPLATE/task.yaml index 9369e33c96..065712d1dc 100644 --- a/.github/ISSUE_TEMPLATE/task.yaml +++ b/.github/ISSUE_TEMPLATE/task.yaml @@ -1,35 +1,65 @@ -name: Tasks -description: This is used to capture tasks being implemented/to implement such as features, maintenance, refactor, etc. -title: "[Task]: " -labels: ["Task"] +name: ๐Ÿ“‹ Task +description: A specific piece of work to be completed +title: "๐Ÿ“‹ [TASK] " +labels: ["task"] +assignees: [] body: - type: markdown attributes: - value: | - We encourage our users to submit feature requests in our [Discussion forum](https://github.com/openvinotoolkit/anomalib/discussions/categories/ideas-feature-requests). You can use this template for consistency. - + value: "## ๐Ÿ“‹ Task Description" - type: textarea - id: motivation + id: description attributes: - label: What is the motivation for this task? - description: A clear and concise description of what the problem is. - placeholder: | - 1. I'm always frustrated when [...]. It would be better if we could [...] - 2. I would like to have [...] model/dataset to be supported in Anomalib. + label: Describe the task + description: Provide a clear and concise description of the task to be completed validations: required: true - type: textarea - id: solution + id: acceptance-criteria attributes: - label: Describe the solution you'd like - description: A clear and concise description of what you want to happen. Add screenshots or code-blocks if necessary. - placeholder: | - I would like to have [...] to do this we would need to [...] - Here is what I would like to see [...] + label: Acceptance Criteria + description: List the specific criteria that must be met for this task to be considered complete + validations: + required: true + - type: dropdown + id: priority + attributes: + label: Priority + options: + - Low + - Medium + - High + validations: + required: true + - type: input + id: epic-link + attributes: + label: Related Epic + description: If this task is part of an epic, provide the epic's issue number (e.g., #123) + validations: + required: false + - type: input + id: estimated-time + attributes: + label: Estimated Time + description: Provide an estimate of how long this task will take (e.g., 2h, 1d) + validations: + required: false + - type: dropdown + id: status + attributes: + label: Current Status + options: + - Not Started + - In Progress + - Blocked + - Ready for Review validations: required: true - type: textarea - id: additional-context + id: additional-info attributes: - label: Additional context - description: Add any other context or screenshots about the feature request here. + label: Additional Information + description: Any other relevant details or context for this task + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/user_story.yaml b/.github/ISSUE_TEMPLATE/user_story.yaml new file mode 100644 index 0000000000..c32d1e45ea --- /dev/null +++ b/.github/ISSUE_TEMPLATE/user_story.yaml @@ -0,0 +1,69 @@ +name: ๐Ÿ“– User Story +description: A small, self-contained unit of development work describing a feature from an end-user perspective +title: "๐Ÿ“– [STORY] " +labels: ["user-story"] +assignees: [] +body: + - type: markdown + attributes: + value: "## ๐Ÿ“– User Story Description" + - type: textarea + id: user-story + attributes: + label: User Story + description: As a [type of user], I want [an action] so that [a benefit/a value] + placeholder: As a computer vision researcher, I want to implement a new anomaly detection algorithm so that I can improve detection accuracy for industrial defect scenarios. + validations: + required: true + - type: textarea + id: acceptance-criteria + attributes: + label: Acceptance Criteria + description: List the acceptance criteria for this user story + placeholder: | + 1. The new algorithm is implemented and integrated into the anomalib framework + 2. Unit tests are written and pass for the new implementation + 3. Performance benchmarks show improvement over existing methods on specified datasets + 4. Documentation is updated to include usage instructions and theory behind the new algorithm + 5. An example notebook is provided demonstrating the algorithm's application + validations: + required: true + - type: input + id: story-points + attributes: + label: Story Points + description: Estimate the complexity of this story (e.g., 1, 2, 3, 5, 8, 13) + validations: + required: true + - type: input + id: epic-link + attributes: + label: Related Epic + description: If this story is part of an epic, provide the epic's issue number (e.g., #123) + validations: + required: false + - type: dropdown + id: model-category + attributes: + label: Category + description: Select the category this story primarily relates to + options: + - Data + - Anomaly Detection Algorithms + - Pre-processing + - Post-processing + - Evaluation Metrics + - Visualization + - Performance Optimization + - API/Interface + - Documentation + - Others + validations: + required: true + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Add any other context, background, or relevant research papers about the user story here + validations: + required: false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e430544a18..cbed44683d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: # Ruff version. - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: "v0.5.1" + rev: "v0.6.2" hooks: # Run the linter. - id: ruff @@ -27,7 +27,7 @@ repos: # python static type checking - repo: https://github.com/pre-commit/mirrors-mypy - rev: "v1.10.1" + rev: "v1.11.2" hooks: - id: mypy additional_dependencies: [types-PyYAML, types-setuptools] @@ -43,7 +43,7 @@ repos: # notebooks. - repo: https://github.com/nbQA-dev/nbQA - rev: 1.8.5 + rev: 1.8.7 hooks: - id: nbqa-ruff # Ignore unsorted imports. This is because jupyter notebooks can import diff --git a/CHANGELOG.md b/CHANGELOG.md index fc80fa3e7e..340641fb7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added +- Add `AUPIMO` tutorials notebooks in https://github.com/openvinotoolkit/anomalib/pull/2330 and https://github.com/openvinotoolkit/anomalib/pull/2336 +- Add `AUPIMO` metric by [jpcbertoldo](https://github.com/jpcbertoldo) in https://github.com/openvinotoolkit/anomalib/pull/1726 and refactored by [ashwinvaidya17](https://github.com/ashwinvaidya17) in https://github.com/openvinotoolkit/anomalib/pull/2329 + ### Changed ### Deprecated diff --git a/configs/data/shanghaitec.yaml b/configs/data/shanghaitech.yaml similarity index 100% rename from configs/data/shanghaitec.yaml rename to configs/data/shanghaitech.yaml diff --git a/docs/requirements.txt b/docs/requirements.txt index 2d7c4e9726..02603dc810 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,7 +1,7 @@ myst-parser nbsphinx pandoc -sphinx<8.0 # 7.0 breaks readthedocs builds. +sphinx sphinx_autodoc_typehints sphinx_book_theme sphinx-copybutton diff --git a/docs/source/conf.py b/docs/source/conf.py index 4f3932351e..16e79a59af 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -7,6 +7,9 @@ https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information """ +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + from __future__ import annotations import sys diff --git a/notebooks/000_getting_started/001_getting_started.ipynb b/notebooks/000_getting_started/001_getting_started.ipynb index a0fcd2d0c9..cfc4620eb8 100644 --- a/notebooks/000_getting_started/001_getting_started.ipynb +++ b/notebooks/000_getting_started/001_getting_started.ipynb @@ -168,7 +168,7 @@ "from anomalib import TaskType\n", "from anomalib.data import MVTec\n", "from anomalib.data.utils import read_image\n", - "from anomalib.deploy import OpenVINOInferencer, ExportType\n", + "from anomalib.deploy import ExportType, OpenVINOInferencer\n", "from anomalib.engine import Engine\n", "from anomalib.models import Padim" ] diff --git a/notebooks/200_models/201_fastflow.ipynb b/notebooks/200_models/201_fastflow.ipynb index e501844491..0826e3c51c 100644 --- a/notebooks/200_models/201_fastflow.ipynb +++ b/notebooks/200_models/201_fastflow.ipynb @@ -1,835 +1,835 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Train a Model via API\n", - "\n", - "This notebook demonstrates how to train, test and infer the FastFlow model via Anomalib API. Compared to the CLI entrypoints such as \\`tools/\\.py, the API offers more flexibility such as modifying the existing model or designing custom approaches.\n", - "\n", - "# Installing Anomalib\n", - "\n", - "The easiest way to install anomalib is to use pip. You can install it from the command line using the following command:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install anomalib" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setting up the Dataset Directory\n", - "\n", - "This cell is to ensure we change the directory to have access to the datasets.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "# NOTE: Provide the path to the dataset root directory.\n", - "# If the datasets is not downloaded, it will be downloaded\n", - "# to this directory.\n", - "dataset_root = Path.cwd().parent / \"datasets\" / \"MVTec\"" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Imports\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from lightning.pytorch.callbacks import EarlyStopping, ModelCheckpoint\n", - "from matplotlib import pyplot as plt\n", - "from PIL import Image\n", - "from torch.utils.data import DataLoader\n", - "\n", - "from anomalib.data import PredictDataset, MVTec\n", - "from anomalib.engine import Engine\n", - "from anomalib.models import Fastflow\n", - "from anomalib.utils.post_processing import superimpose_anomaly_map\n", - "from anomalib import TaskType" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Data Module\n", - "\n", - "To train the model end-to-end, we do need to have a dataset. In our [previous notebooks](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/100_datamodules), we demonstrate how to initialize benchmark- and custom datasets. In this tutorial, we will use MVTec AD DataModule. We assume that `datasets` directory is created in the `anomalib` root directory and `MVTec` dataset is located in `datasets` directory.\n", - "\n", - "Before creating the dataset, let's define the task type that we will be working on. In this notebook, we will be working on a segmentation task. Therefore the `task` variable would be:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "task = TaskType.SEGMENTATION" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "datamodule = MVTec(\n", - " root=dataset_root,\n", - " category=\"bottle\",\n", - " image_size=256,\n", - " train_batch_size=32,\n", - " eval_batch_size=32,\n", - " num_workers=0,\n", - " task=task,\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## FastFlow Model\n", - "\n", - "Now that we have created the MVTec datamodule, we could create the FastFlow model. We could start with printing its docstring.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[0;31mInit signature:\u001b[0m\n", - "\u001b[0mFastflow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'resnet18'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mSource:\u001b[0m \n", - "\u001b[0;32mclass\u001b[0m \u001b[0mFastflow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mAnomalyModule\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"PL Lightning Module for the FastFlow algorithm.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Args:\u001b[0m\n", - "\u001b[0;34m input_size (tuple[int, int]): Model input size.\u001b[0m\n", - "\u001b[0;34m Defaults to ``(256, 256)``.\u001b[0m\n", - "\u001b[0;34m backbone (str): Backbone CNN network\u001b[0m\n", - "\u001b[0;34m Defaults to ``resnet18``.\u001b[0m\n", - "\u001b[0;34m pre_trained (bool, optional): Boolean to check whether to use a pre_trained backbone.\u001b[0m\n", - "\u001b[0;34m Defaults to ``True``.\u001b[0m\n", - "\u001b[0;34m flow_steps (int, optional): Flow steps.\u001b[0m\n", - "\u001b[0;34m Defaults to ``8``.\u001b[0m\n", - "\u001b[0;34m conv3x3_only (bool, optinoal): Use only conv3x3 in fast_flow model.\u001b[0m\n", - "\u001b[0;34m Defaults to ``False``.\u001b[0m\n", - "\u001b[0;34m hidden_ratio (float, optional): Ratio to calculate hidden var channels.\u001b[0m\n", - "\u001b[0;34m Defaults to ``1.0`.\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"resnet18\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackbone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpre_trained\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflow_steps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconv3x3_only\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhidden_ratio\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFastflowLoss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mFastflowModel\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_setup\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput_size\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Fastflow needs input size to build torch model.\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFastflowModel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minput_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackbone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpre_trained\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflow_steps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconv3x3_only\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhidden_ratio\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtraining_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mSTEP_OUTPUT\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Perform the training step input and return the loss.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Args:\u001b[0m\n", - "\u001b[0;34m batch (batch: dict[str, str | torch.Tensor]): Input batch\u001b[0m\n", - "\u001b[0;34m args: Additional arguments.\u001b[0m\n", - "\u001b[0;34m kwargs: Additional keyword arguments.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Returns:\u001b[0m\n", - "\u001b[0;34m STEP_OUTPUT: Dictionary containing the loss value.\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;31m# These variables are not used.\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mhidden_variables\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjacobians\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"image\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_variables\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjacobians\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"train_loss\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mon_epoch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprog_bar\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlogger\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"loss\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvalidation_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mSTEP_OUTPUT\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Perform the validation step and return the anomaly map.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Args:\u001b[0m\n", - "\u001b[0;34m batch (dict[str, str | torch.Tensor]): Input batch\u001b[0m\n", - "\u001b[0;34m args: Additional arguments.\u001b[0m\n", - "\u001b[0;34m kwargs: Additional keyword arguments.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Returns:\u001b[0m\n", - "\u001b[0;34m STEP_OUTPUT | None: batch dictionary containing anomaly-maps.\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;31m# These variables are not used.\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0manomaly_maps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"image\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"anomaly_maps\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0manomaly_maps\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtrainer_arguments\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAny\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Return FastFlow trainer arguments.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"gradient_clip_val\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"num_sanity_val_steps\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mconfigure_optimizers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptim\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOptimizer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Configure optimizers for each decoder.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Returns:\u001b[0m\n", - "\u001b[0;34m Optimizer: Adam optimizer for each decoder\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moptim\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAdam\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mlr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.001\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mweight_decay\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.00001\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mlearning_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mLearningType\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Return the learning type of the model.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Returns:\u001b[0m\n", - "\u001b[0;34m LearningType: Learning type of the model.\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mLearningType\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mONE_CLASS\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mFile:\u001b[0m ~/anomalib/src/anomalib/models/image/fastflow/lightning_model.py\n", - "\u001b[0;31mType:\u001b[0m ABCMeta\n", - "\u001b[0;31mSubclasses:\u001b[0m " - ] - } - ], - "source": [ - "Fastflow??" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "model = Fastflow(backbone=\"resnet18\", flow_steps=8)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Callbacks\n", - "\n", - "To train the model properly, we will to add some other \"non-essential\" logic such as saving the weights, early-stopping, normalizing the anomaly scores and visualizing the input/output images. To achieve these we use `Callbacks`. Anomalib has its own callbacks and also supports PyTorch Lightning's native callbacks. So, let's create the list of callbacks we want to execute during the training.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "callbacks = [\n", - " ModelCheckpoint(\n", - " mode=\"max\",\n", - " monitor=\"pixel_AUROC\",\n", - " ),\n", - " EarlyStopping(\n", - " monitor=\"pixel_AUROC\",\n", - " mode=\"max\",\n", - " patience=3,\n", - " ),\n", - "]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Training\n", - "\n", - "Now that we set up the datamodule, model, optimizer and the callbacks, we could now train the model.\n", - "\n", - "The final component to train the model is `Engine` object, which handles train/test/predict pipeline. Let's create the engine object to train the model.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "engine = Engine(\n", - " callbacks=callbacks,\n", - " pixel_metrics=\"AUROC\",\n", - " accelerator=\"auto\", # \\<\"cpu\", \"gpu\", \"tpu\", \"ipu\", \"hpu\", \"auto\">,\n", - " devices=1,\n", - " logger=False,\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "`Trainer` object has number of options that suit all specific needs. For more details, refer to [Lightning Documentation](https://pytorch-lightning.readthedocs.io/en/stable/common/engine.html) to see how it could be tweaked to your needs.\n", - "\n", - "Let's train the model now.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "engine.fit(datamodule=datamodule, model=model)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "The training has finished after 12 epochs. This is because, we set the `EarlyStopping` criteria with a patience of 3, which terminated the training after `pixel_AUROC` stopped improving. If we increased the `patience`, the training would continue further.\n", - "\n", - "## Testing\n", - "\n", - "Now that we trained the model, we could test the model to check the overall performance on the test set. We will also be writing the output of the test images to a file since we set `VisualizerCallback` in `callbacks`.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0,1]\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4b40cd5a1e094248b521f07ef14291de", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Testing: | | 0/? [00:00โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n", - "โ”ƒ Test metric โ”ƒ DataLoader 0 โ”ƒ\n", - "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n", - "โ”‚ image_AUROC โ”‚ 1.0 โ”‚\n", - "โ”‚ image_F1Score โ”‚ 1.0 โ”‚\n", - "โ”‚ pixel_AUROC โ”‚ 0.9769068956375122 โ”‚\n", - "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n", - "\n" - ], - "text/plain": [ - "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n", - "โ”ƒ\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0mโ”ƒ\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0mโ”ƒ\n", - "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n", - "โ”‚\u001b[36m \u001b[0m\u001b[36m image_AUROC \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 1.0 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", - "โ”‚\u001b[36m \u001b[0m\u001b[36m image_F1Score \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 1.0 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", - "โ”‚\u001b[36m \u001b[0m\u001b[36m pixel_AUROC \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 0.9769068956375122 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", - "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "[{'pixel_AUROC': 0.9769068956375122, 'image_AUROC': 1.0, 'image_F1Score': 1.0}]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "engine.test(datamodule=datamodule, model=model)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Inference\n", - "\n", - "Since we have a trained model, we could infer the model on an individual image or folder of images. Anomalib has an `PredictDataset` to let you create an inference dataset. So let's try it.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "inference_dataset = PredictDataset(path=dataset_root / \"bottle/test/broken_large/000.png\")\n", - "inference_dataloader = DataLoader(dataset=inference_dataset)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "We could utilize `Trainer`'s `predict` method to infer, and get the outputs to visualize\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "predictions = engine.predict(model=model, dataloaders=inference_dataloader)[0]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "`predictions` contain image, anomaly maps, predicted scores, labels and masks. These are all stored in a dictionary. We could check this by printing the `prediction` keys.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Image Shape: torch.Size([1, 3, 256, 256]),\n", - "Anomaly Map Shape: {predictions[\"anomaly_maps\"].shape}, \n", - "Predicted Mask Shape: {predictions[\"pred_masks\"].shape}\n" - ] - } - ], - "source": [ - "print(\n", - " f'Image Shape: {predictions[\"image\"].shape},\\n'\n", - " 'Anomaly Map Shape: {predictions[\"anomaly_maps\"].shape}, \\n'\n", - " 'Predicted Mask Shape: {predictions[\"pred_masks\"].shape}',\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Visualization\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "To properly visualize the predictions, we will need to perform some post-processing operations." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's first show the input image. To do so, we will use `image_path` key from the `predictions` dictionary, and read the image from path. Note that `predictions` dictionary already contains `image`. However, this is the normalized image with pixel values between 0 and 1. We will use the original image to visualize the input image." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "image_path = predictions[\"image_path\"][0]\n", - "image_size = predictions[\"image\"].shape[-2:]\n", - "image = np.array(Image.open(image_path).resize(image_size))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "The first output of the predictions is the anomaly map. As can be seen above, it's also a torch tensor and of size `torch.Size([1, 1, 256, 256])`. We therefore need to convert it to numpy and squeeze the dimensions to make it `256x256` output to visualize.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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pjXtKNqRwPXhD38YP/MzP4Ndu3bhqquu6h1MebbQ+9//fjg+dkQ+z3/+8/X+5uYmDh06hKc//el42tOehle/+tV6aOdTlb7yla/g13/913HxxRfDOYd/+Id/yO4TEd773vfiwIED2L17N6699lp873vfy9L85Cc/wetf/3rs3bsX559/Pn7v934Pjz/++JPYiieOlvXP7/zO7/TG1A033JClear2zy233IIXv/jFOPfcc7Fv3z688pWvxJEjR7I0q8ypBx98EDfeeCP27NmDffv24V3vehfatn0ym/KE0Sp99LKXvaw3ht7ylrdkaU61j3YccH3iE5/AO97xDrzvfe/Dv/3bv+GFL3whrr/++uxgyrOJfv7nfx4PPfSQfr761a/qvbe//e347Gc/i09+8pO488478T//8z941atedQZr+8TTsWPH8MIXvhAf/vCHq/c/9KEP4S//8i/x13/917jrrrtwzjnn4Prrr8fm5qamef3rX4/vfve7uO222/Sk7ze/+c1PVhOeUFrWPwBwww03ZGPq4x//eHb/qdo/d955Jw4dOoSvf/3ruO2227BYLHDdddfh2LFjmmbZnOq6DjfeeCPm8zm+9rWv4W//9m9x66234r3vfe+ZaNJpp1X6CADe9KY3ZWPoQx/6kN47LX1EO4xe8pKX0KFDh/R313V08cUX0y233HIGa3Vm6H3vex+98IUvrN57+OGHaTqd0ic/+Um99u///u8EgA4fPvwk1fDMEgD69Kc/rb9DCLR//3768z//c7328MMP08bGBn384x8nIqJ7772XANC//uu/app//Md/JOcc/fd///eTVvcng8r+ISJ64xvfSK94xSsGnzmb+udHP/oRAaA777yTiFabU5///OfJe09Hjx7VNB/5yEdo7969tLW19eQ24Emgso+IiH71V3+V/uAP/mDwmdPRRzuK45rP57j77rtx7bXX6jXvPa699locPnz4DNbszNH3vvc9XHzxxXjOc56D17/+9XjwwQcBAHfffTcWi0XWV89//vPx7Gc/+6ztqwceeABHjx7N+uS8887DVVddpX1y+PBhnH/++fjlX/5lTXPttdfCe4+77rrrSa/zmaA77rgD+/btw/Oe9zy89a1vxY9//GO9dzb1zyOPPAIAuOCCCwCsNqcOHz6MK6+8EhdddJGmuf766/Hoo4/iu9/97pNY+yeHyj4S+uhHP4oLL7wQV1xxBW6++WYcP35c752OPtpRQXb/93//F13XZQ0GgIsuugj/8R//cYZqdeboqquuwq233ornPe95eOihh/CBD3wAv/Irv4LvfOc7OHr0KGazGc4///zsmYsuughHjx49MxU+wyTtro0fuXf06FHs27cvuz+ZTHDBBRecFf12ww034FWvehUuvfRS3H///XjPe96Dl7/85Th8+DCapjlr+ieEgLe97W146UtfiiuuuAIAVppTR48erY4vufdUolofAcDrXvc6XHLJJbj44otxzz334N3vfjeOHDmCT33qUwBOTx/tKOBaU04vf/nL9fsLXvACXHXVVbjkkkvw93//99i9e/cZrNmadir95m/+pn6/8sor8YIXvACXXXYZ7rjjDlxzzTVnsGZPLh06dAjf+c53Mp3xmnIa6iOr77zyyitx4MABXHPNNbj//vtx2WWXnZayd5So8MILL0TTND0rnh/+8IfYv3//GarV/x86//zz8XM/93O47777sH//fsznczz88MNZmrO5r6TdY+Nn//79PUOftm3xk5/85Kzst+c85zm48MILcd999wE4O/rnpptuwuc+9zl8+ctfzg44XGVO7d+/vzq+5N5ThYb6qEZXXXUVAGRj6FT7aEcB12w2w4te9CJ86Utf0mshBHzpS1/CwYMHz2DN/n/Q448/jvvvvx8HDhzAi170Ikyn06yvjhw5ggcffPCs7atLL70U+/fvz/rk0UcfxV133aV9cvDgQTz88MO4++67Nc3tt9+OEIJOwLOJfvCDH+DHP/4xDhw4AOCp3T9EhJtuugmf/vSncfvtt+PSSy/N7q8ypw4ePIhvf/vbGbjfdttt2Lt3Ly6//PInpyFPIC3roxp961vfAoBsDJ1yH52kMckZo7/7u7+jjY0NuvXWW+nee++lN7/5zXT++ednFipnC73zne+kO+64gx544AH653/+Z7r22mvpwgsvpB/96EdERPSWt7yFnv3sZ9Ptt99O3/jGN+jgwYN08ODBM1zrJ5Yee+wx+uY3v0nf/OY3CQD9xV/8BX3zm9+k//qv/yIioj/7sz+j888/nz7zmc/QPffcQ694xSvo0ksvpRMnTmgeN9xwA/3iL/4i3XXXXfTVr36Vnvvc59JrX/vaM9Wk00pj/fPYY4/RH/7hH9Lhw4fpgQceoC9+8Yv0S7/0S/Tc5z6XNjc3NY+nav+89a1vpfPOO4/uuOMOeuihh/Rz/PhxTbNsTrVtS1dccQVdd9119K1vfYu+8IUv0DOe8Qy6+eabz0STTjst66P77ruPPvjBD9I3vvENeuCBB+gzn/kMPec5z6Grr75a8zgdfbTjgIuI6K/+6q/o2c9+Ns1mM3rJS15CX//61890lc4IveY1r6EDBw7QbDajZz7zmfSa17yG7rvvPr1/4sQJ+v3f/336qZ/6KdqzZw/9xm/8Bj300ENnsMZPPH35y18mAL3PG9/4RiKKJvF//Md/TBdddBFtbGzQNddcQ0eOHMny+PGPf0yvfe1r6WlPexrt3buXfvd3f5cee+yxM9Ca009j/XP8+HG67rrr6BnPeAZNp1O65JJL6E1velNvU/hU7Z9avwCgv/mbv9E0q8yp//zP/6SXv/zltHv3brrwwgvpne98Jy0Wiye5NU8MLeujBx98kK6++mq64IILaGNjg372Z3+W3vWud9EjjzyS5XOqfbQ+1mRNa1rTmta0o2hH6bjWtKY1rWlNa1oD15rWtKY1rWlH0Rq41rSmNa1pTTuK1sC1pjWtaU1r2lG0Bq41rWlNa1rTjqI1cK1pTWta05p2FK2Ba01rWtOa1rSjaA1ca1rTmta0ph1Fa+Ba05rWtKY17ShaA9ea1rSmNa1pR9EauNa0pjWtaU07itbAtaY1rWlNa9pR9H85GdKMb+44lQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "anomaly_map = predictions[\"anomaly_maps\"][0]\n", - "anomaly_map = anomaly_map.cpu().numpy().squeeze()\n", - "plt.imshow(anomaly_map)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "We could superimpose (overlay) the anomaly map on top of the original image to get a heat map. Anomalib has a built-in function to achieve this. Let's try it.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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DvT0pANwHehABzrQgW4pOgDXgQ50oAMd6JaiA3Ad6EAHOtCBbim6JYHrF3/xF/lzf+7PsVqtuP/++08lpny60M/93M9hjNnanv/850/nT05OeOihh3jGM57BpUuX+KEf+qEpaedTlX7v936P7/u+7+O+++7DGMO///f/fuu8iPCzP/uz3HvvvazXa175ylfyx3/8x1tl/vRP/5TXve51XLlyhatXr/J3/+7f5etf//o38S2+cXRW+/ztv/23T/WpV7/61Vtlnqrt8853vpOXvvSlXL58mbvuuosf+IEf4JFHHtkqc54x9YUvfIHXvva1HB0dcdddd/HWt76VcRx5KtB52ujlL3/5qT70xje+cavMzbbRLQdcv/Zrv8ZP/dRP8Y53vIP/+l//Ky95yUt41atetZWY8ulEf/Ev/kW++MUvTttHPvKR6dxP/uRP8pu/+Zv8+q//Oh/+8If5v//3//KDP/iDT2Jtv/H0+OOP85KXvIRf/MVfXDz/rne9i3/+z/85//Jf/ks++tGPcnx8zKte9SpOTk6mMq973ev49Kc/zfvf//4p0/cb3vCGb9YrfEPprPYBePWrX73Vp371V3916/xTtX0+/OEP89BDD/EHf/AHvP/972cYBh588EEef/zxqcxZYyqEwGtf+1r6vuf3f//3+df/+l/z7ne/m5/92Z99Ml7pCafztBHA61//+q0+9K53vWs694S0kdxi9D3f8z3y0EMPTb9DCHLffffJO9/5ziexVk8OveMd75CXvOQli+e+8pWvSNM08uu//uvTsf/23/6bAPLwww9/k2r45BIg73nPe6bfMUa555575J/+0386HfvKV74iXdfJr/7qr4qIyGc+8xkB5L/8l/8ylfkP/+E/iDFG/s//+T/ftLp/M6huHxGRH//xH5fv//7v33nN06l9vvSlLwkgH/7wh0XkfGPqt37rt8RaK48++uhU5pd+6ZfkypUrstlsvrkv8E2guo1ERP7qX/2r8vf//t/fec0T0Ua3FMfV9z0f+9jHeOUrXzkds9byyle+kocffvhJrNmTR3/8x3/Mfffdx3Of+1xe97rX8YUvfAGAj33sYwzDsNVWz3/+83nWs571tG2rz3/+8zz66KNbbXLbbbdx//33T23y8MMPc/XqVf7yX/7LU5lXvvKVWGv56Ec/+k2v85NBH/rQh7jrrrv4ju/4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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "heat_map = superimpose_anomaly_map(anomaly_map=anomaly_map, image=image, normalize=True)\n", - "plt.imshow(heat_map)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "`predictions` also contains prediction scores and labels.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor(0.6486) tensor(True)\n" - ] - } - ], - "source": [ - "pred_score = predictions[\"pred_scores\"][0]\n", - "pred_labels = predictions[\"pred_labels\"][0]\n", - "print(pred_score, pred_labels)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "The last part of the predictions is the mask that is predicted by the model. This is a boolean mask containing True/False for the abnormal/normal pixels, respectively.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pred_masks = predictions[\"pred_masks\"][0].squeeze().cpu().numpy()\n", - "plt.imshow(pred_masks)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "That wraps it! In this notebook, we show how we could train, test and finally infer a FastFlow model using Anomalib API.\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "anomalib", - "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.10.13" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "f26beec5b578f06009232863ae217b956681fd13da2e828fa5a0ecf8cf2ccd29" - } - } + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Train a Model via API\n", + "\n", + "This notebook demonstrates how to train, test and infer the FastFlow model via Anomalib API. Compared to the CLI entrypoints such as \\`tools/\\.py, the API offers more flexibility such as modifying the existing model or designing custom approaches.\n", + "\n", + "# Installing Anomalib\n", + "\n", + "The easiest way to install anomalib is to use pip. You can install it from the command line using the following command:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install anomalib" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the Dataset Directory\n", + "\n", + "This cell is to ensure we change the directory to have access to the datasets.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "# NOTE: Provide the path to the dataset root directory.\n", + "# If the datasets is not downloaded, it will be downloaded\n", + "# to this directory.\n", + "dataset_root = Path.cwd().parent / \"datasets\" / \"MVTec\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Imports\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from lightning.pytorch.callbacks import EarlyStopping, ModelCheckpoint\n", + "from matplotlib import pyplot as plt\n", + "from PIL import Image\n", + "from torch.utils.data import DataLoader\n", + "\n", + "from anomalib import TaskType\n", + "from anomalib.data import MVTec, PredictDataset\n", + "from anomalib.engine import Engine\n", + "from anomalib.models import Fastflow\n", + "from anomalib.utils.post_processing import superimpose_anomaly_map" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Data Module\n", + "\n", + "To train the model end-to-end, we do need to have a dataset. In our [previous notebooks](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/100_datamodules), we demonstrate how to initialize benchmark- and custom datasets. In this tutorial, we will use MVTec AD DataModule. We assume that `datasets` directory is created in the `anomalib` root directory and `MVTec` dataset is located in `datasets` directory.\n", + "\n", + "Before creating the dataset, let's define the task type that we will be working on. In this notebook, we will be working on a segmentation task. Therefore the `task` variable would be:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "task = TaskType.SEGMENTATION" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "datamodule = MVTec(\n", + " root=dataset_root,\n", + " category=\"bottle\",\n", + " image_size=256,\n", + " train_batch_size=32,\n", + " eval_batch_size=32,\n", + " num_workers=0,\n", + " task=task,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## FastFlow Model\n", + "\n", + "Now that we have created the MVTec datamodule, we could create the FastFlow model. We could start with printing its docstring.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mInit signature:\u001b[0m\n", + "\u001b[0mFastflow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'resnet18'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mSource:\u001b[0m \n", + "\u001b[0;32mclass\u001b[0m \u001b[0mFastflow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mAnomalyModule\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"PL Lightning Module for the FastFlow algorithm.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Args:\u001b[0m\n", + "\u001b[0;34m input_size (tuple[int, int]): Model input size.\u001b[0m\n", + "\u001b[0;34m Defaults to ``(256, 256)``.\u001b[0m\n", + "\u001b[0;34m backbone (str): Backbone CNN network\u001b[0m\n", + "\u001b[0;34m Defaults to ``resnet18``.\u001b[0m\n", + "\u001b[0;34m pre_trained (bool, optional): Boolean to check whether to use a pre_trained backbone.\u001b[0m\n", + "\u001b[0;34m Defaults to ``True``.\u001b[0m\n", + "\u001b[0;34m flow_steps (int, optional): Flow steps.\u001b[0m\n", + "\u001b[0;34m Defaults to ``8``.\u001b[0m\n", + "\u001b[0;34m conv3x3_only (bool, optinoal): Use only conv3x3 in fast_flow model.\u001b[0m\n", + "\u001b[0;34m Defaults to ``False``.\u001b[0m\n", + "\u001b[0;34m hidden_ratio (float, optional): Ratio to calculate hidden var channels.\u001b[0m\n", + "\u001b[0;34m Defaults to ``1.0`.\u001b[0m\n", + "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"resnet18\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m8\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfloat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackbone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpre_trained\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflow_steps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconv3x3_only\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhidden_ratio\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFastflowLoss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mFastflowModel\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_setup\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput_size\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"Fastflow needs input size to build torch model.\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFastflowModel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0minput_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mbackbone\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackbone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpre_trained\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpre_trained\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mflow_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflow_steps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mconv3x3_only\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconv3x3_only\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mhidden_ratio\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhidden_ratio\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtraining_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mSTEP_OUTPUT\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Perform the training step input and return the loss.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Args:\u001b[0m\n", + "\u001b[0;34m batch (batch: dict[str, str | torch.Tensor]): Input batch\u001b[0m\n", + "\u001b[0;34m args: Additional arguments.\u001b[0m\n", + "\u001b[0;34m kwargs: Additional keyword arguments.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Returns:\u001b[0m\n", + "\u001b[0;34m STEP_OUTPUT: Dictionary containing the loss value.\u001b[0m\n", + "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;31m# These variables are not used.\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mhidden_variables\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjacobians\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"image\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhidden_variables\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjacobians\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"train_loss\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mon_epoch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprog_bar\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlogger\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"loss\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mvalidation_step\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mSTEP_OUTPUT\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Perform the validation step and return the anomaly map.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Args:\u001b[0m\n", + "\u001b[0;34m batch (dict[str, str | torch.Tensor]): Input batch\u001b[0m\n", + "\u001b[0;34m args: Additional arguments.\u001b[0m\n", + "\u001b[0;34m kwargs: Additional keyword arguments.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Returns:\u001b[0m\n", + "\u001b[0;34m STEP_OUTPUT | None: batch dictionary containing anomaly-maps.\u001b[0m\n", + "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;31m# These variables are not used.\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0manomaly_maps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"image\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"anomaly_maps\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0manomaly_maps\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtrainer_arguments\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAny\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Return FastFlow trainer arguments.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m\"gradient_clip_val\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"num_sanity_val_steps\"\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mconfigure_optimizers\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptim\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOptimizer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Configure optimizers for each decoder.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Returns:\u001b[0m\n", + "\u001b[0;34m Optimizer: Adam optimizer for each decoder\u001b[0m\n", + "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moptim\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAdam\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mlr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.001\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mweight_decay\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.00001\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mlearning_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mLearningType\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Return the learning type of the model.\u001b[0m\n", + "\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m Returns:\u001b[0m\n", + "\u001b[0;34m LearningType: Learning type of the model.\u001b[0m\n", + "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mLearningType\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mONE_CLASS\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFile:\u001b[0m ~/anomalib/src/anomalib/models/image/fastflow/lightning_model.py\n", + "\u001b[0;31mType:\u001b[0m ABCMeta\n", + "\u001b[0;31mSubclasses:\u001b[0m " + ] + } + ], + "source": [ + "Fastflow??" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "model = Fastflow(backbone=\"resnet18\", flow_steps=8)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Callbacks\n", + "\n", + "To train the model properly, we will to add some other \"non-essential\" logic such as saving the weights, early-stopping, normalizing the anomaly scores and visualizing the input/output images. To achieve these we use `Callbacks`. Anomalib has its own callbacks and also supports PyTorch Lightning's native callbacks. So, let's create the list of callbacks we want to execute during the training.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "callbacks = [\n", + " ModelCheckpoint(\n", + " mode=\"max\",\n", + " monitor=\"pixel_AUROC\",\n", + " ),\n", + " EarlyStopping(\n", + " monitor=\"pixel_AUROC\",\n", + " mode=\"max\",\n", + " patience=3,\n", + " ),\n", + "]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Training\n", + "\n", + "Now that we set up the datamodule, model, optimizer and the callbacks, we could now train the model.\n", + "\n", + "The final component to train the model is `Engine` object, which handles train/test/predict pipeline. Let's create the engine object to train the model.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "engine = Engine(\n", + " callbacks=callbacks,\n", + " pixel_metrics=\"AUROC\",\n", + " accelerator=\"auto\", # \\<\"cpu\", \"gpu\", \"tpu\", \"ipu\", \"hpu\", \"auto\">,\n", + " devices=1,\n", + " logger=False,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "`Trainer` object has number of options that suit all specific needs. For more details, refer to [Lightning Documentation](https://pytorch-lightning.readthedocs.io/en/stable/common/engine.html) to see how it could be tweaked to your needs.\n", + "\n", + "Let's train the model now.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "engine.fit(datamodule=datamodule, model=model)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The training has finished after 12 epochs. This is because, we set the `EarlyStopping` criteria with a patience of 3, which terminated the training after `pixel_AUROC` stopped improving. If we increased the `patience`, the training would continue further.\n", + "\n", + "## Testing\n", + "\n", + "Now that we trained the model, we could test the model to check the overall performance on the test set. We will also be writing the output of the test images to a file since we set `VisualizerCallback` in `callbacks`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0,1]\n" + ] }, - "nbformat": 4, - "nbformat_minor": 2 + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4b40cd5a1e094248b521f07ef14291de", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Testing: | | 0/? [00:00โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n", + "โ”ƒ Test metric โ”ƒ DataLoader 0 โ”ƒ\n", + "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n", + "โ”‚ image_AUROC โ”‚ 1.0 โ”‚\n", + "โ”‚ image_F1Score โ”‚ 1.0 โ”‚\n", + "โ”‚ pixel_AUROC โ”‚ 0.9769068956375122 โ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n", + "\n" + ], + "text/plain": [ + "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n", + "โ”ƒ\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0mโ”ƒ\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0mโ”ƒ\n", + "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n", + "โ”‚\u001b[36m \u001b[0m\u001b[36m image_AUROC \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 1.0 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", + "โ”‚\u001b[36m \u001b[0m\u001b[36m image_F1Score \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 1.0 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", + "โ”‚\u001b[36m \u001b[0m\u001b[36m pixel_AUROC \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 0.9769068956375122 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[{'pixel_AUROC': 0.9769068956375122, 'image_AUROC': 1.0, 'image_F1Score': 1.0}]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "engine.test(datamodule=datamodule, model=model)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Inference\n", + "\n", + "Since we have a trained model, we could infer the model on an individual image or folder of images. Anomalib has an `PredictDataset` to let you create an inference dataset. So let's try it.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "inference_dataset = PredictDataset(path=dataset_root / \"bottle/test/broken_large/000.png\")\n", + "inference_dataloader = DataLoader(dataset=inference_dataset)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We could utilize `Trainer`'s `predict` method to infer, and get the outputs to visualize\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "predictions = engine.predict(model=model, dataloaders=inference_dataloader)[0]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "`predictions` contain image, anomaly maps, predicted scores, labels and masks. These are all stored in a dictionary. We could check this by printing the `prediction` keys.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image Shape: torch.Size([1, 3, 256, 256]),\n", + "Anomaly Map Shape: {predictions[\"anomaly_maps\"].shape}, \n", + "Predicted Mask Shape: {predictions[\"pred_masks\"].shape}\n" + ] + } + ], + "source": [ + "print(\n", + " f'Image Shape: {predictions[\"image\"].shape},\\n'\n", + " 'Anomaly Map Shape: {predictions[\"anomaly_maps\"].shape}, \\n'\n", + " 'Predicted Mask Shape: {predictions[\"pred_masks\"].shape}',\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Visualization\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "To properly visualize the predictions, we will need to perform some post-processing operations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's first show the input image. To do so, we will use `image_path` key from the `predictions` dictionary, and read the image from path. Note that `predictions` dictionary already contains `image`. However, this is the normalized image with pixel values between 0 and 1. We will use the original image to visualize the input image." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "image_path = predictions[\"image_path\"][0]\n", + "image_size = predictions[\"image\"].shape[-2:]\n", + "image = np.array(Image.open(image_path).resize(image_size))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The first output of the predictions is the anomaly map. As can be seen above, it's also a torch tensor and of size `torch.Size([1, 1, 256, 256])`. We therefore need to convert it to numpy and squeeze the dimensions to make it `256x256` output to visualize.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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pjXtKNqRwPXhD38YP/MzP4Ndu3bhqquu6h1MebbQ+9//fjg+dkQ+z3/+8/X+5uYmDh06hKc//el42tOehle/+tV6aOdTlb7yla/g13/913HxxRfDOYd/+Id/yO4TEd773vfiwIED2L17N6699lp873vfy9L85Cc/wetf/3rs3bsX559/Pn7v934Pjz/++JPYiieOlvXP7/zO7/TG1A033JClear2zy233IIXv/jFOPfcc7Fv3z688pWvxJEjR7I0q8ypBx98EDfeeCP27NmDffv24V3vehfatn0ym/KE0Sp99LKXvaw3ht7ylrdkaU61j3YccH3iE5/AO97xDrzvfe/Dv/3bv+GFL3whrr/++uxgyrOJfv7nfx4PPfSQfr761a/qvbe//e347Gc/i09+8pO488478T//8z941atedQZr+8TTsWPH8MIXvhAf/vCHq/c/9KEP4S//8i/x13/917jrrrtwzjnn4Prrr8fm5qamef3rX4/vfve7uO222/Sk7ze/+c1PVhOeUFrWPwBwww03ZGPq4x//eHb/qdo/d955Jw4dOoSvf/3ruO2227BYLHDdddfh2LFjmmbZnOq6DjfeeCPm8zm+9rWv4W//9m9x66234r3vfe+ZaNJpp1X6CADe9KY3ZWPoQx/6kN47LX1EO4xe8pKX0KFDh/R313V08cUX0y233HIGa3Vm6H3vex+98IUvrN57+OGHaTqd0ic/+Um99u///u8EgA4fPvwk1fDMEgD69Kc/rb9DCLR//3768z//c7328MMP08bGBn384x8nIqJ7772XANC//uu/app//Md/JOcc/fd///eTVvcng8r+ISJ64xvfSK94xSsGnzmb+udHP/oRAaA777yTiFabU5///OfJe09Hjx7VNB/5yEdo7969tLW19eQ24Emgso+IiH71V3+V/uAP/mDwmdPRRzuK45rP57j77rtx7bXX6jXvPa699locPnz4DNbszNH3vvc9XHzxxXjOc56D17/+9XjwwQcBAHfffTcWi0XWV89//vPx7Gc/+6ztqwceeABHjx7N+uS8887DVVddpX1y+PBhnH/++fjlX/5lTXPttdfCe4+77rrrSa/zmaA77rgD+/btw/Oe9zy89a1vxY9//GO9dzb1zyOPPAIAuOCCCwCsNqcOHz6MK6+8EhdddJGmuf766/Hoo4/iu9/97pNY+yeHyj4S+uhHP4oLL7wQV1xxBW6++WYcP35c752OPtpRQXb/93//F13XZQ0GgIsuugj/8R//cYZqdeboqquuwq233ornPe95eOihh/CBD3wAv/Irv4LvfOc7OHr0KGazGc4///zsmYsuughHjx49MxU+wyTtro0fuXf06FHs27cvuz+ZTHDBBRecFf12ww034FWvehUuvfRS3H///XjPe96Dl7/85Th8+DCapjlr+ieEgLe97W146UtfiiuuuAIAVppTR48erY4vufdUolofAcDrXvc6XHLJJbj44otxzz334N3vfjeOHDmCT33qUwBOTx/tKOBaU04vf/nL9fsLXvACXHXVVbjkkkvw93//99i9e/cZrNmadir95m/+pn6/8sor8YIXvACXXXYZ7rjjDlxzzTVnsGZPLh06dAjf+c53Mp3xmnIa6iOr77zyyitx4MABXHPNNbj//vtx2WWXnZayd5So8MILL0TTND0rnh/+8IfYv3//GarV/x86//zz8XM/93O47777sH//fsznczz88MNZmrO5r6TdY+Nn//79PUOftm3xk5/85Kzst+c85zm48MILcd999wE4O/rnpptuwuc+9zl8+ctfzg44XGVO7d+/vzq+5N5ThYb6qEZXXXUVAGRj6FT7aEcB12w2w4te9CJ86Utf0mshBHzpS1/CwYMHz2DN/n/Q448/jvvvvx8HDhzAi170Ikyn06yvjhw5ggcffPCs7atLL70U+/fvz/rk0UcfxV133aV9cvDgQTz88MO4++67Nc3tt9+OEIJOwLOJfvCDH+DHP/4xDhw4AOCp3T9EhJtuugmf/vSncfvtt+PSSy/N7q8ypw4ePIhvf/vbGbjfdttt2Lt3Ly6//PInpyFPIC3roxp961vfAoBsDJ1yH52kMckZo7/7u7+jjY0NuvXWW+nee++lN7/5zXT++ednFipnC73zne+kO+64gx544AH653/+Z7r22mvpwgsvpB/96EdERPSWt7yFnv3sZ9Ptt99O3/jGN+jgwYN08ODBM1zrJ5Yee+wx+uY3v0nf/OY3CQD9xV/8BX3zm9+k//qv/yIioj/7sz+j888/nz7zmc/QPffcQ694xSvo0ksvpRMnTmgeN9xwA/3iL/4i3XXXXfTVr36Vnvvc59JrX/vaM9Wk00pj/fPYY4/RH/7hH9Lhw4fpgQceoC9+8Yv0S7/0S/Tc5z6XNjc3NY+nav+89a1vpfPOO4/uuOMOeuihh/Rz/PhxTbNsTrVtS1dccQVdd9119K1vfYu+8IUv0DOe8Qy6+eabz0STTjst66P77ruPPvjBD9I3vvENeuCBB+gzn/kMPec5z6Grr75a8zgdfbTjgIuI6K/+6q/o2c9+Ns1mM3rJS15CX//61890lc4IveY1r6EDBw7QbDajZz7zmfSa17yG7rvvPr1/4sQJ+v3f/336qZ/6KdqzZw/9xm/8Bj300ENnsMZPPH35y18mAL3PG9/4RiKKJvF//Md/TBdddBFtbGzQNddcQ0eOHMny+PGPf0yvfe1r6WlPexrt3buXfvd3f5cee+yxM9Ca009j/XP8+HG67rrr6BnPeAZNp1O65JJL6E1velNvU/hU7Z9avwCgv/mbv9E0q8yp//zP/6SXv/zltHv3brrwwgvpne98Jy0Wiye5NU8MLeujBx98kK6++mq64IILaGNjg372Z3+W3vWud9EjjzyS5XOqfbQ+1mRNa1rTmta0o2hH6bjWtKY1rWlNa1oD15rWtKY1rWlH0Rq41rSmNa1pTTuK1sC1pjWtaU1r2lG0Bq41rWlNa1rTjqI1cK1pTWta05p2FK2Ba01rWtOa1rSjaA1ca1rTmta0ph1Fa+Ba05rWtKY17ShaA9ea1rSmNa1pR9EauNa0pjWtaU07itbAtaY1rWlNa9pR9H85GdKMb+44lQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "anomaly_map = predictions[\"anomaly_maps\"][0]\n", + "anomaly_map = anomaly_map.cpu().numpy().squeeze()\n", + "plt.imshow(anomaly_map)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "We could superimpose (overlay) the anomaly map on top of the original image to get a heat map. Anomalib has a built-in function to achieve this. Let's try it.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAGiCAYAAAC/NyLhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9T6wsy5bfhX9WRGTWPufe91637VZblt1mhI2QAMlA0xJMkJHFAAnhAfIAIcS0/ZP8YEBPMD3qIQxozxCMkIExEgN6iGwhmZEHRsAEW7jbxt397jm7qjIzItZvsFZkRcXJ2nuf+153c987cW+dnZWVfyIjI9Z3/V+iqsqX9qV9aV/al/alfUda+KPuwJf2pX1pX9qX9qV9TvsCXF/al/alfWlf2neqfQGuL+1L+9K+tC/tO9W+ANeX9qV9aV/al/adal+A60v70r60L+1L+061L8D1pX1pX9qX9qV9p9oX4PrSvrQv7Uv70r5T7QtwfWlf2pf2pX1p36n2Bbi+tC/tS/vSvrTvVPsCXF/al/alfWlf2neq/ZEB12/+5m/yT/1T/xRPT0/88i//Mv/r//q//lF15Uv70r60L+1L+w61PxLg+u/+u/+OH/7wh/z1v/7X+d/+t/+Nf/6f/+f5S3/pL/GP/tE/+qPozpf2pX1pX9qX9h1q8keRZPeXf/mX+Zf+pX+J//K//C8BqLXyZ/7Mn+Gv/tW/yn/yn/wnf9jd+dK+tC/tS/vSvkMt/WHfcF1X/s7f+Tv82q/92r4vhMBf/It/kb/1t/7W4TnLsrAsy/691srv/u7v8sf/+B9HRP7A+/ylfWlf2pf2pf1km6ry4cMH/tSf+lOE8HnKvz904Pp//9//l1IKv/iLv3i3/xd/8Rf5e3/v7x2e8xu/8Rv8+q//+h9G9760L+1L+9K+tD/E9vf//t/nT//pP/1Z5/yhA9e3ab/2a7/GD3/4w/37j370I37pl36Jv/H3/y5P3/8+C09s10S9RvgR8HvABXgGFmDzzwpU/yiwa0nVP7X7tP1l2Bcx02AApPv8JFrrB93fvtXh+7fV8vb3GZu88gndcUdc0kvXbs3Hbr+sPB7SR0P7kxjycbjbFFCgqA93mwOlO6ifE/2JhU/n0nhhhv3weLzG/W95348G8WjAjo5p77X/22/Dp9c66mf/rG/p81E/x+cYn+21ufha6/umw+fomEfPMp73lmd+rV/js45j/9L7Hccr3baDf45aG8bxtccHXQF75ARMwB8HfgB8z7ZP4UqUgqDI3ZjYnss3H/j//Zk/z/e+9723DMpd+0MHrj/xJ/4EMUZ+53d+527/7/zO7/An/+SfPDzndDpxOp0+3f/9H/D0/R8gnIhTQqdg73zjNo8jN9AK3NOTuwnXiM5IcAr3RKefDPDtF81RGxcSw/e3gNlb2msE8Ig4wDGx6GfyW/vSE0ZuwHWEkeMaO/re73utC/3jjLTqbho04GrzoQerfo70gNXvH/fB/bx6RBxfam9lVMb30vYdbR8BV/s0Jm2cB0eD+Gjufg5w9f1p+19ioN7KOD465gi4+rWuB7+PrX+f9cExP0579LwvLYxxjTb08fcp8njI+sPHaTCux/bICTj5Z/bPBPL0NZKUQPVL3Y9NYrZefgtzzx86cM3zzF/4C3+B3/qt3+Lf/rf/bcBsVr/1W7/Fr/7qr37WtTITm05kElrlxhj3bSRMtb4iaT0CrjbJ2xtU/mAlrn7fo98etR+XEL4mdR19XpMe2m9tJXTnqkARkA7IPneN9rcYu9DT5pdoz45FI2jdcTvcg9ZIuB6B2xFovUXqeq299LD9Pj3Y7n/vqVI/x+twTeFeI/FImoTj53z0Mh9JWiNgjn3sj3/Uju7R9+uIHoz97/+O7Wgu/KTaKAa1fUfP1MajdN/7d6m2rb7mjpoK1HBbqu2S41To97XHvWCIIsAEugmaBA1yyJts128PP38kqsIf/vCH/Pv//r/Pv/gv/ov8y//yv8x/8V/8Fzw/P/Mf/Af/wWddJxPJRGp1wjdqYKCjG40YHXFII0A9IkLj+Uec7Y/TjhbIS1LY51znpePG9ogLf8QBf869XuDw1fer3nOF+99unB/d9qgbPba+pN28mzuP5slI5F76fA5wvdSO5lcPFH1raoVH81IP9o/nvJUAPxqfI1Vo//6P+jUS4xEk23a//3NVha8BV9s3Sk4vradH7/4n1fr38Rpw6YPz+v438enBvTSA+jgL9wA3LveebCqm1br65U8YTZ4w4Ip80mW9fntN1R8JcP27/+6/yz/+x/+Y//Q//U/57d/+bf6Ff+Ff4H/6n/6nTxw2XmuZiawJNoGMfY7w5g572mj3f/GT2z74VD3UE4qek3nronlr+0lx5K9JXW8lmO3ZRuL2SBx6SxvZubZdbtvqn/H6j7RK/aXHR2h/R2GjXWsUErTtfIvq5wisCp/On/5Gr73TUfp4dN+jNkpIj5C6f3f9OZH7Z4kP7jP2o3/OXk360vgdgVX/W79/ZJ7648Jwzlvu9+g9PAKfR4DUnhP+4FSFPc1p+47GahSJemmtXaPn3o4Wix9fA0iTzvznfiq16d2WbAbOfslGSk+Y7aszsd19Prx1DD5tf2TOGb/6q7/62arBselVYJZ7B4zMbUD7wc1wjG4jh/iS/QI+JQSB10HixafgZbFhvPZbFsZrXN9bwLDNtJ4wHYFNTwjeAmL9MT3XfMRNHxCrCnezf1xMj5Br1DLBbdH92AzzKF2Nc2mU2F+aL424DP3/pL0k6R69i3Ff/6DhwTmjk8bR+x7POVo7o8Q1/j3a1/6OKrJHxPlRewSG7Rlek6xeelcvSVs/Ccmrn/9tTMcxf2R7bN/HPmQez53+fsmZx3hjIHuSUDEHJvXxqcDHAFlM8soYcEW71J11oHXz4+sj8Kh9J7wKH7bmdNGDVgOuQ/PEo4k2EpyRW3yJ+3orwX5rO1pIR314dM5Lx36O9PYWjn4kIhx8f3TtkQAejeeRVNd9f3TrkUYOpx3u7+kCGKf5Cac6HvhIWug78dq+R+01qbb1peee+wd/7fzX7tdTmd5if9TeIkWOYDy+93Hf0ct8y7VfauM9x/Pfuo7G3x5Jbm/t00vtpeeGT1W87ZyxX68BcDtvHH+5SV1V7peAtvtjx/ROcU2B0kDrCLguL3TplfbdBq4FE0VX3175FMg+sXs9WsRH7PYD7v3F6/xRtZ/UQjk6/jWu/7V2xCEendsvoF4a6/c/8ERsrXZfHtHvcbu99oZTVUxVUul29iu2J+Aj0T5y3BlvdgQ2cD82o25l5KZH2+ePA1xHYBW580S78zDs+3vkvNFvN6nriLAeMSVH+3+cdjS+rx3X96fNxaPfflyJ6sdtj5i/EbjaWurthSPYtmu0Mcr399Fuzt89dnd+iUZ/26UKx16K7RbPb3rIw/bdBq6mI22S14qh+JUbgLV3FYE8+UblXmXYXlJb/G3E+9FX7onJ+Db69on+6pU2LoD6YPuRGuK1hX4kgrylteOP9GxHRPGRAWokwi/18agPHSHvBYBRd3506uiQ9dItD311BGq0RVkV80jN3FjK/mbKza2qJ3qjZPrasw7P/PABe8LUfz96V4/OHe/bA1Zjl3vg6gf0k8HiXu3RdPS9qvRRezSPjp6nbT86pz7YP7bW/9fWT3+NftzahJHhr/JYOh3H4aX79u/k0Rg8uta4Zo+eUYfPEbjp7dC+S+1StYOQcWr0rgQ9DrZ2Ptj3xvbdBq7mxZK5AVXTr7a10wa8ebZo8PeRuDdywKcv8iVO9lFwA8P3txCsz5WWRuB663lvPWbs/1uA69F2O+cRMR0Xf3/f4SMCUe5pa1vTR2u4B66R9jwSsNunhVc0mtuYoOJAtt+kv0DsLnT0HEdc7njMS1LX2F4DrqNzH3HaPTN2JGkNg70HsTrBqz3Bjtyo1S7G8njejlL90fOOL/lgfuztEQPVP/e4/Vobx61de58wHE+qsY1z5qXj2t+j9TNu9+f0vz0ap/79tdarxcc++jv65BLdPXuh/GhYxtutfOv23QauK7c10gNX2+61FO39NzVQ7l9sP6rjBBxfYHszj4IzH7XXJnTfh16V1BPDPyjgOnrG1o4I6NECeIskNl4Lbi5IcM+NHoBWYz6aINALBEcMeM9j9AzwkV9OPxSjINGE7uw3qE2qOvI87MGj3x4JwvisowPEa8B1xPmPQDhuw+N51Ot0xk8v3vrnSKCoTeJsi6+9pN5bauw7fCqFvCa597+9df09utdb2yNi3ibR0TEvMaqvrcmRmflcgO6PHdffS314pV9tPQGfxIKNLu/98BzxLj+zwHXGBihzn9Zp4SZx9Vx34jaQC5AT6DjR2iQ5UvHA3eK9W71vUUkc7W/tNfXguH/87VE7eoa3tJe425cW0hFnOAQc3zF7/VjDMUEPt+Fu6WVSt90LA31XjlSKcJOejhbTI+DauusBlOD2tAZivdqwndQ/20vvrkdYeeH7UTtia/tBOGojczaifM8ZtMGL99N+5n48dk1hhC12HmcNxMa0WS/N67G9xDS9NDZHzz2OST8Gbzm/P6/XFvSMyWsM6lvW7ZGqr22Px7X2Enj1Y9Xfv0nErwGW3PNW7baNpo7TqAeu3pm7519+Zp0zVoxwNcIyrg04nvMiN1NXBXP3bPErL3HQI2d8EFX3yfZLUtJIvF46/6X9Y/s25xz14SWw6rm3A87uLljYpaV9Hflvqkb8m8ttc63tiUFbMEludHT89IJB3/2e0PaM5hHt6rfbp+EO3NP61D1Dr+O/myvt71skph40RonrNanrCLiO5uTYv5eAa5C+emm3fWbu6aly8zrDf8uhk05Hatb3/5HK6+hvPw7j/Bufc9yWg33t+2sA2PrZ930cx7cC11Ef+jYCztHae3T8S9dpf9ukDt32o7H2udB/7fmpRzxTz/w1rbEq1J6J244e/k3tuw1cfeLcXhtxRBPGd3vHJI1qnHHi9wulJyaPnDMegcUR1z0Sm0fn9/146+J4dK9H7UjKOmKzBnWf9Mf7Z2QSj5zSWqqniqmZWqqZvguNYPaSVTrY7nmP/VzuX1c/hH17bd8oZO/3Erd3vcScHE2+R8eMVKHv/CeD53+P7BKPCHCPyCNwtfOGh5Vw/A6moUufSK/i24lP0wuN43VEPHvGiGH/CFyPnrO/Vzv/NcB4qY1MwiPg+jYOWUd9OJoHR/18C3Ad3ePoeuM9/b59IuxRuzFqgPth2KUsNeDadzRR7Nu17zZwrXwa6N9L7nfcIJ86D+5zp0exft8Rp3egKnyJWbvDwNGNurXXPAePOLm3xGWM7dE5I7q/QDjHNXTEDD4arlG7OtqaRuLXrjGaXB5JXEeLqWfw2nVfc3TrMaGnqa3/E/fvvMSOODcudnRMGFUBnyD08CDtwUeGoZ3bI0bb91aC+YhNHgc73I93k7J6FW3jusf3dzc+TfJ6TS01Mkv9M/vvR7g1Lh/9HCnoCCSPFnN7h71mpu1/q7T12vt5BNRHevCj9hrw9seNtKSXwgYP0v59t7/9aUdrqXds2tXG/Tr48dp3G7gWjo3E/Tx8JOTcmVKkk7rGC/Xb3QvdVV/yunp8nNPaER7l9hCf2NsYT+z+Ht30pYVzdE7PoT8ArJ3TEv/wKV15C3D1kkp/+x245J4GjIAxaK8e3rddV/prD9ftMeRorR/xDH3rsWQHuQC16a2bvWsbBqLevXtFsf+tY/ttNCAEFEWa+nTvp3i3q19B7aedx6oI4hm3R1VQu3fs9r8kIXZAceSzcTT2bWyU23xRH5+7frzhnk3dfPez3H//RNhRVz/7jwo3CnqkURgeoL/v0Xr9ZEL0Ew3uTxwn12sEezx+BHIZ9r907tj6e/fzYjy/LbJOldGvu5He9narcWgaE1H7g0r345gR/e3tuw1czSFjVHX3k7p/n0dM0ThJb6uO+0XfUVAJ94zQ0Tx6dE/16430pH1RPfihXzTjhcebjce174+4yCOq48/abBu9Q9kRaMD9+mI4ZvSuHrswgtXRnO61syN4jo86SnBHn3bcI6bjSAhuTYCg+/ka/KBuTWp3smqHoFr8R0XVgEc1YBWLigNVQDRSUQOhYVBVGnw14BKbxgJIQRCC+DyW6l2Wjja3jXv0vpWX6Ab2BZ7mRVreH1vH6z4i0MInTgDjvY/WW8+gIAfL4GiBHlysB8V22t21eprQM7oj0/tovY3ttWPaQ/fP8IjYvOV+Rwxwz+XBJyrCnlkdVcP9Oit6cPl2/UeOOd9e8vruA9fKPYj03PC4sMZxG9fRnlCyn4iNujXQ6l7ktwWul/DmjlP0C3/yfl+62HjM0XEj1e4RxgexPeOojhuBqz/96DOqCvv307cRKPqsJ6316/jovEZo2oLK3d/c7e/bCIBvcLCye6mdW0ClolSUAkVRLahmqBulZkrNft/svxUoxZhRoGhAVaja3regGoBpqFXkDxhsW3xuCA46EaCQRIjOXIVQbcqGCCEgIkQREEWCIMEGQKQf2Hq7VwO8fpyOmMFHat47ABtVhd0L7afgSCgfAWdrfbLX/hHqyAj249jd28fzITNU/Pc7IOxbT2iO9h+1l4jG0TE/Lmj1rb3fdm7/vRv8Zts8WrdtjfYeg4f6wgZco/qj/f7t2ncfuBpRhWNucOToH4JXm+T9yW2hdZPmpUX1Oa1h48icCdx5Z921HtDa35eA6yWJbWwddeqlrDFWapR4Hn3otkdJDT4ds171VofvfbfrsN2uP9qxevAbcyv3Yz4C4X6/JtFUqJWq6mp6RYuiuaC5klel5kItlZIruhowVc3UuqFa0VooJVO1Umv1/U3iElQbWAl1l6oEUaElOBXRfRiqQNDggGUSF9IEhkoQNbCKQgjqcdsRkYgEIYiSYiCEgIRAiMlALAopzASJSEggShBjZkIAHORsrXTjdWfP4FMQ29/ZA/WUPchjJqcHzn5OtWsfMTT7/BKX+HoC7Z9236N50M8FFW4er3eThPs1eARojyb80fGP2qjiPGhvKsY40o82iC/0c+R3P5G04Ga/Grm+Oh7I/di9xSZ73L7bwKXKzrY2Mf9oPsGn4PXJtR7d5A2T7XNB6+ieb5KajwBovPmj315TX7TFLPec7SOAau2IsIy3P7rtI+Z0FCZfemftvB4Q+/P68KFe4toZTHVGWvdzVc0OpbWp8Sq1FgOcUqlV0VzRrVBzZVvrHXDVnNFaKbpRa7kBV83UqlRValn3qQviIAZooBJutKVl5Vbp6JL6mxR/VYqI91+UgAGViBJi2IErSCCEiEggBJgcuIIDl4FcIMXNvodECJVQJkIOBAUhISlAFSSG23hXMY1ks1P2NKpwW6cvTfIjwaIHqUfz72hujecinTZjBK7h3H7+NUKv/Y8j8X2tPers5xKNR8e/kR7pox+OTvLnG9dSU9LszEo7ZlysrT2qKn/XqW/VvtvA1REcWxwPXkw/drWfjOPL6v+2398wwR4xXEfzfHy/4/7xmnfbb33R4zO8BlqwqwaET7P99MMwqsJ7ierRcD0Cpf73/piRcx8d8o6ufwRcgxSgjcm5A0IFrQYwCrWu1FooW6WoGiCVQvZPyQVds/2elS1nKEqtlZIzlUrVYtu1XbdSqqsGFbRuZtdSTILTiqpatzR0zxKc5gpowEqgW8c12rZ9KogBbcKZ72BgJQH7iBBj3AEshUgIBn4xRWII9okzIU2EkEhhYopP9vtTZHo/I1NEpkicTEpDAlKDVSBX3d+V9JKYKvcxet3Y30ldwzs9sq30p76VmWkSosZPj2vLY7+eX3Snv0cc1FuAa5z0LyFs3x5d+xVO7xHte3T6iwe4dKrBbFeb/3znbEOnIrwjsN212vaoKmztZ1VV2KiSxsfzqR/Tbx3v1k2wdr1RonujpH4oPTzq94/V3srddYRjtGs90m33a3HMCNTaIzo1zt2+NZVfA5u7WmrdtY5AfSRAI43ZOUfdpSItlZwzpUlMW2ErmwFUqfbX1XzbZhJXqRXNG6UUA7Ra0OJSVc5kNSmrqpp0VnWXtHaVYK0dPb85b5idDFBTE1bEQQdqdWnKP0pxsKqIFBeWlcklDPVzg4gBVKiEBlwkBzHstxiJIRFDJIXJjouBFGdSPBHiREwz82kmpkBKkfiUDNBiIIVpV0WGkFzFKcPLGB2dXpiTPbP0yO40vv/+0n3rMzu8hAefHHNEgPvneKm9BlqvMcSPxMBHv79y+Ge1foE6F5LjTX3fmzhqO2a0X43v/RH3+bOqKuwHqTlWPAKF2v/YOL23vuEBuI5OfbQojj4Mfx8ycJ87A49EmVea+D+P7Asj4Rj720tcR/aicazGsRi7OM71o2woo7mhP3dXu9mPqkCpZl8qlVoKZd3sby5s20op2YBqK2w5k0uhlsKWC7W6tLWZ1GQqQzu/NuCqZrsqDnQmPSm1cNNmq4FJ61dVdelLfV+TzmxAREcNeHONb1JXQaWCVER8nygpsL+IJmkFAYlmrwohIBKJLnEFEUJM/j0SYyIEOy6liRRPxDAR4sS0nIgxklIiXSf7GyMpbcRg14wpEds9/foiTZ3p4t8nut2OeWrtkWqwf+eP1o0Mf4/W3NHffeMok8GLC/WgA0eT+6iTY0dfA62jfd+Gi36p9dx52+XSV1826BMV4Qj24+cLcHnrkT4+nlMdIft0tn6G7rjf/VCPzD3339/2Eai+dT282l66yEGHQ/fTkfNFL20d9b3nise0SkdAPc7v3gljPKaXtvLBNe+urbegfPci02rSi6rZoHLeXHLa2K6rSVols21XsktZeatsLm2VnMmu7iu5spVm6yqUuqHFJK3stitVpdRKzRV36aAW2e1YVdJtCIN2Epmr1fwaWm+TR9VjtFCTqLTTn0oBKYgUmms8osRm08FtYP4JUQiY96DEtINWlGgSVnDAiuEGYikxxdl+i4mUTsQ4kdLENJ2YQiKFRJyjSWExME2JOUGMQoqBODlABgFJWFWG27QzIOvm5ueqmx/xao+W9XheHY89IsL9iW9p48Tu2/CAd+E4RxzxIwb7Nfr1ltYP1hGH2XGM6ozHXVdGSVS5B6jRY+cLcHnrqd8rHI72x8OxG9JRO1hUb/EobPv77h2pz/rjf2zw6p7pUb8eeV81td/o9n7k3fcI4Nqxzkc8dDTqXd3HfvZq3ZYoefQIHNeFd1DrhpZMrZk1b2xbpuRK3jLX1VR5ZdtYyoVcNkre2LYrW97IuZCLkrOpA2spbKW4lOaSWpOsqqkGay0OQMVBR6mVXSWIx2cVFZorOiKoFFTU4rEq7GFeKiaBAdLyOO4PnW8gRkakz1pqAyeU7v3awAZXIVqcl4AEJERExB01AjEkl8SEkAJB0i49JZfAYkjEaBJXTIkpzaRoUlaaZ1IMpBiYJpPIpijMSZimmTgF4hSY0+zXOLnXoucx7NdG63r/95HUf9RGWnwk0ff0tafZ/g4+dXHtL9z2v7WN+s6uU0fOgp9IgUf3/gywelWA6z2nxwN6ZG8DNhKEUVXYL/iREx05jZ/VlE/9wLQ6W6MN8MimtLd+ZssL86GbaC952x11r4FWO/8lJuMT8Dq46OdoH8a+HTFW/f7RtjDatxh+G8Ht6JqtHTFgn3C73XF9LcL9ePXxqw4UBh5azYli267UbDapZVtZt0zOhW3LrGsml0zeVta8UMpKKRvbutr+UthypRSzJ5n96wZWtdZdJVibe/zu1OFeiM2OhYEWVFMRaoCgu3Choh603D2z3gBMwBxJTGTcpcgWMCzaVG/jhK8Gdu5laOTGpDbzT7CMGhKKSV6YAS3E6kAmpt4LkSDRQCpOO3CFmH1fZE4zwbfTmpiiOXdMU2SaTPqaY2SaTsQUSXPkNBViKqSUmdLs1zZpDtw2hjiNkxsD1GNJe7Cj+TZuj+f1493TYvw++NjV9qK6l9O/qEMudOzUIz9+P+5hxh0Z6Lt2fTl62Pb1M2mFHg3OaLx/SXx9JF0dcZZHv7X7fbv2HQeug9bG5VWmZOCEjsDnaC4+cg8/ItSPbvtat15qjzQQ47kvubEfqVd6QDoCLjk47ihx7qM2zuG+vEHfegat6A5ct1CRiqoF8ta6uQrQ7FXL5eKSU2FZVhaXpNa8kR24tryxbQulbNSysa0buWRKLWxZKS4BacZjr5RS1VSP7tpuNivz4sO9EdVBxmEC2XHHvQeDeiyUAdeOXC0+a1cV7V/sr7JLYY23UmWv46h3BMTPaQD3yQA7OElFpInEArFl3xAPSjZgMzViIUiyv6EQYyDGyBazO3FE0hSZQiBGYUqRaTZ14xQT81TMiWNKbHMhpUKcMk9TZppOpJhI80QIoMHB1Am19FJRe+BxXvfDBvdr/yXgGiWbnVZLQ/kOn/Tgw3Di/Tg/5hy5gdZLDO/O1MnQxwPQeo1ujb/pPnk4HqS3ANfY2aMxOgKtRwbqz2s/BcB18OaOpIyj88bfHi2G/reeuL/FBfyI0Rjf30ivxv2vPdPR/UcAOpJsxtZzt49UgSOojXb2o3700m9T/fUp/cZ+3UlcJmVpbhLPRl4/suWFbVtYloUtZ7atcL1upurLhetqdqycM8u2ULabM8WyLgZKpZDzeqcCbHYnrcHVfg5KNaPtZd7ltRSqS0RBfFvbkDQbl5oNqxGhBHcBrfv7NIKmClLV6Yn/eOdS3rJsqPPHrT/DgDag28fWgVBM3NhTP1W/rghIRDC1YZZsNjTZLFBZ5ptzR1r3OLBpcpVjNI/DNCXfTszpYuCUEqfpiTSfiGniNM9M6cKUEqfTiVM6EafEdJqIc0JChOh26z62sGkxXspROs77fn72QyXcawKPhKndo1WskkEvBR3qwh8hSccgH6nX22W1O4ahL+MxL9Gdt7TiN1K4r5BxdJOxo0cEqS32bw9Ib23fceAaZqYMu0bu645j6c4ZObRHoDByey9xTXC/UHrT2hG316vNjgBqnD+vTdAxBVa/GI6YRuEYuEZ711h1o7XXFlG751FQMONxCtlio7S5qS+Zks2ZYl3ObHlh3S4sy8W8AbfKsqxsuZKzsmwLeTNpbNsMoJqH4JazqRlL3jNaaK3u5QeWxcL6YqmYYCdSd4Sr9Vn8z83WqlpRp6473dwdR9r4eWBxI8KeV5DqUlmrvCzsalJtKh6vIacdoWnTW5rOUW89bUHWO3g6Flhws3JzEvBrtd/FJDipIJTdQzCUukto2yY7iMUUicmksjRFZreTpTixTJWYMjHNnOaNeZpIMTGfNk7TYl6Kp5nTk3ssTomYZiQGD3ju8jYeCQrjuhzXa48zwn2h2R4g+k/A1K/9OTuh7yft2D4DVT6hUV0Lw74RI9/SHjGtAntarJZdRPXBuQNR3FWNw1q4Xbi70efYS97WvuPA1c3KnisbweTue/fDYfbp4fiXgOsI6Fo7moB1+N4DyHifcfuobwePdHfeI7Xf0UIYjz0CrqOs4EfOQkf3GDUHvZs7N6LuX9Bc9lipbVlZLht521jXC9frxYHr7MBVDbjWhZyVnJV1W02aKoWyKbmu+/VKLaby221klUrzTGwEXLq+jQvRHr75/LVEuNp+U27bDSHC7bL9T3fVmXcmR++TaO/oY5RNNN6kP/eCafk00AY6Zm+TDtpuomAwcPaOBL11qD0p6iDR9XcPeBalagUx4K0FpOVBzMVixGIh5UBJlRgrKSjbpLadPBRhKqQUWfPGejKwmnOm1IlpmpjLzHSCoJGIeT4quq/13eGEWx/v1uWRWrEf05Fh7NvovNEDWwOyT1BvbAcXfglsjtZ2u+eP0166ZgOvfd8wnkd928eu57p6pO+34dMxOiKun9d+CoDLZ+cRmHxC7BtLM4DckTqtIzb79xGojtQV/fFje2mOj9c66v8RSB59f7SAj/T9j8B4/DzyNGxtVF2P0mQPWM3FfSTO3Bwu8nJlWcyp4ny9slwW8rqxXq9ctitbvrKuZ5bF1IPbVthKpmzF3Ne3TG7xVrlYYLCrBHGHChN9iklce38b6thD7umUhgfTTl+127U6SicidkwAgu7jtlfQ8RqNMsm+v2ltqIIUd7QomIt8EVQU8W1RyyovrZ+YDc5Eo54qN0DjmHkDKrF7bvyawfIlkvx79Gdu0ugN1AqKiAFZCEoMlsA3pMASlRALMWZiNMeMlFaetgspzSZZzYnTdlMnXtaJeU7M88zpaWE+TUxPiVM8EVKyxMAh3OxeL7V+3o/ajh53HqntxgS++zHCrVTLyIUe3Zzj9dcf+lZ6/jlA9hZs6DV8b2Gm29QC7itctx+PxqGvY9bo8EsD8nL7jgOXU9I+QefIYd2BUjdz+0nyCOhG7rjffqRD7xfGURtVh4+O6ft21L/+Ho/63o/BEQCOoPYIBONwXGs9KI314fqFkLmVoGmAVfHgW3d8qJl1XdhyIa+Z82VhXTa2beOyPHNdNrY1ky8rl/XClle29eqSldm1LCWTUoqSS3NZr1ChuAcgqtywyJLZmkfquGrtgfQWINY9XLSl58zQzQkiGC0VQQhoS5ETBUnaZdmXu4z7Eg0EWp5nqQolUHPLAYgVY8z2LJKBknz80v5cBqFN+lKQW42vHn8No7r8h9qrHA1wLfN8QB3ARu1E2NWLskvLgtkHa63mal8qJWyIZEIQ4pSJyRw6lhKJaSHFyGmeuKyROEXm+cJTOTHlxFQm3umJqSSmnDjV98x5Ypoj01PytFMR0cCeh7Cni6+txdaOtBpt3BtRH4HL3/OdWPaSSq9phPr7HNGrozXbt7eA1pG25+iYfpx67O2l/CMw1fY8zuzcqU3bwPWtrxLeD+jPLHB1I3tUS6c/ZMye/BKxfwtwHR33uV1/6ZFGgDyayD1wvaQa6a/bX2+ss9Vfs5/8RxLpqG45KvDbfuslLHdrV3c5L8VtTXnjer2yrpl13Xg+L2zrxpZXzuuZ5ZrJW2a7bCzL1b0DN8984emYys2dvXQ5AKlQ756rf5DArV7WCF4OBu7eZtkrbuNpU8oWpezHNjtMcClK9sqxMgFJ7krFaMLd5M0TUWhSFQZ4LkRp9mtVP35zSaxi7vYtESK4lGhgticQFmjVD1RkL4RgcqLsz4cEH50dobDYs7ZLXWoUH4vmdKL7kBldsywg6mooqQbvpRZCChSJxGLu9EUzSSOxJjYt1FCZNJHYqGLbU43kAFknJk2cJDFzMld9SYjrsFupF3+4G43smb1HUsXR2tNX9vcXGOd+3z6HTrxEW167xlvvezQeLwHXYR+kk9ZGIOrRcLzQ3QB+q/YdB66D1hPnNnb9hNuBjnti/BpoPQKUceK3ifOa/bFXGx4tnnbtI2mnv09/vUcgVIdjmtpv4sb5J+6lpN5BbRyT/pjGYB3Vz2rfM5AV3SWuguZC3jaWq8VSbcvC+bywbhvLtnG+XlnXlS1vnNeFzYFrXVa2xQOG8+ZOFxbH1XL/1eZD0ajoDlaNQDfiXLkZnfosFZ1BQyrBB1BRI9hkblWGG6FU11y1+6R9XCUBJ4FZYMY+QSGqbbcp6YHL4uqpUNm9Kk1q9d+iQFC0AMWdR0qToIxai7/ABlxCoGrxb6GJXS5RYc4g+zvW++++vQ9jsOO1nxTuftmHA+xxWV6ypWyVUAUpglQhJPM+XEsg1UQs0QBKMlOJTJrIFFKJTDnyxMa1zExb4pQj7/N75jgzx5kUJ0SiOci4k8ydI0ffRsno0fpujFdPS8bz++uPzNxL7UgteST5PWJAW/s04uG4jeeNEtcjW/XRNfsxa6B1J3WNrV18vMlLtpaX208fcB21Hgh6TmsEqKPzjib0HRB2bZRSXpvAvc79qK+9VDQuqJFr7KWn9lYbuIzP3UDrhBHOBl5HjhNHADmqAZsq8Ehw2SUuNfC6ZtbrlXXZWC6rqQTXhev1yuW8sK6ZZdu4ekaLLWeueWPdNkoulGVj81pYmutNsqp6I7DRqWy1wTLi3dD6fsWKNLfwAPu2eLqlah+xIpH7dAnJgUFsoESxhEpxBzMFJA1gdQKdFZ4w21YUSAqtREhzyiji70GhBsvutPp7yiCrmI3HJbPYlZfQaiCFhjtpQ0UIdxlnu9ekgeY9SHCloYOZujpI3emjzSGVTprbLyb7O1e13IpaTZWvCKHLIyk5IlrJBTYNRBKhBFIJXCUzlcBUInNdmPJE2hJPdWVeElOKPF0nlnllijNzesf7NDO5231MM5Lcnb73zHzUHjGpR44bI83obWM9fX7kxv6W9ggYx214DKZjO3qO9ncEsaM137c6nBNw23WPvK1TPcr13PpRp97efjaA66V2BF5HgHUEYP05L13/c/oCn9qejlzQe1BsYNRLXe2Yfu701250vK9w3BuhH4FuD0jjpy+/0wipgm6VuhbqWsjnhcvlyrqsXM8b58uFZV1Z1oXL84V1K6xbduDK5JpZiwFYLVbvqmSXsGoL/vVO7c+pbpe5DU/jv/eKwl0c1J6FQtoKNOi5qf/soZpEY6rDgHQi5k0Ca9/wsh/QbLAa1exZ+9grTGLqOPTmbe9Es0kMgiANc6MVfBT166K0gFn1c3wI7spPya5tuHExN5ra91OpobnWi8O+eSjeKmfozS+htSq3fJHuH6IVkyz9RsZc+H3EcnpY122ehCrUEs1OKYEskZyVSTOpTBQqmyf2taDzyhQ3TrGiU2aKE1OamE9qEtw0IZPZv27LsL3/7msvVfWt/z4yum1fv956sOu3+3u9FbzG9hKD/Tnnj/uOQOs14GrH9+O2Z4MO3Q+9Lav/3hOjb9e+ABfcv9QjR4geNF4Drva9V8+9JHUdnR8OPkdZKkp3Ti+ZNQl85PrgU/f2/h49dygH57ZrPvp40cA7k1FVylbIl5V83bh8OPN8ubAsG9fnzOX6bOrBdeVyPrNuHky8eSomLZbItrhXYClosZx+VQt3dYhanFSHWD1Yichtqagf2QBMzHhU/dzgXhFW66qVdzSQEJoqSjG1YnLgumevzafB3c6DST0agCBorA5ebcE7cW0q28JenNFSDDrAactu4fY2B0dL1iv7M6u0702SauNhE7jBbZNS9xOTUkN1D2m5ZQjhJlDdVId+rlom/P2dt0wnLW1Ti+LewVPRoBBuz6KqFlStlVgyOVgsmCU+jsSwsWk2qSpGcq6sm31/CpkyraQ0M6UTX5XC6WlmphLjjEjgptb02dFcwHssb9LDEfPWr/nWRnPBI1CqbzjmLe2oD0fXHAG3/T0Cr/753gpc7R4NnPuxq8JNbdjrWI8u8gW4Pq99DtdyBFqPGIb2It963/H7aNfqJaN++1H/+372k69/y1N3jYeS0gsfGPIHduft51doeQLXzMcfXVmer6zXlevHM+fLwrJklsvK5Xph3TbWdeV6XdiKZbvYStkLMZaaqX0nOvtbz8y2L7sDnB6vW+mJldz/FhFuwpoDk3Rqwl3X1d3X1YU9+y6iSDV1nVTQoqYC3KBOmOoUNXVh7F5Wex9ZzSEjgxYh7hlHFC3qdjD59N35X+kBXQSNpl1sc0Sa84g49jcPyFA8SwaoKDE40InRJDu0sjkgt2TBoeD2xWqZRxyEqts+Q7F9ukvG7mkZsfqOwaTRkFzjpAXxeRCDpZ+6ritJrAjmZb5ymmbmmHiKJy7ziXmaOE0TS37HKZ+Yt5mnOnGaJ8/m8a6bx3Kf4/VoffetMYdH+/vtxqjGbrsHBbq/j9o4aUca1Dcdzjm6/gh4PYj2ZqZ+HvXHHo1HO2Y8f6crvbG9j/R+1OnPaz97wPXaWI2TBY4n0tH1jjgd5W3v50jKOgKuMWziqP9HfenBtv9+Sy5+m7i9nWsEs/F3L+FtHLZluqgls16urEtmuW48f3Pler6yXlauzxfOl5V13ViuC5d1YduyJ8JdLYN7yWz15hWnO9ffr/6GLrpjRmgSgbbcezcJY5cxhA6YWuRVwFId3RZY6NR+5mm3yyj7eXdoCXgxE8wlvUKtBi4Bk0g2zyy4sodaaVCTqsBUnl1GfHFnFilQs8KmkAVycPAyD0Qp3XN7JeX7V28Apxrci9kHweeY9HOkBfe6ZHgDNkzKA89jGNyBw0Ohowc8F+mSDgc0ajdX/AWpnafRziMKIRqjXkM1UAPP0eiB4lg8XpVIkUjJlZoqOSbyVMilMuWNtUxkray6caoTRZ7IeWaeJuZJrGSLBCOhe7YIPtVijXRgBI5Hax069Vm3v18/I2PZX+PoeuNaH2nO+P1I7fmW67x0zEhz+vHqx8eZEnvG/odehdgP1LdrP3vA1dojrupzz3uJezo69tE9jtIt9e/86POoHYn7R4B8xGG5qufOS3AEtd6TsLh3W7XyHiVnsqv9rteNy2Xj/PHC9bwYcJ2vBlzbxrosXLbVamG5l6GpBF3auuuWPdROZP1v+y5qxHY3V8ktcSw0m5A6wMndEODSh+xFDs3ZolF1aUeq0sSUmxu57P1sxR5VCqi72ddgoJEdBHApozkqiEtdjZgVB68sN/Aq7pHZvDIzaMGyxFcIpdmiIKA3xwkxSxy1FbHUHd3N/qZ3c3KXVPssNEFuns7xZueL4QZc4t6Eewxataz4VRXN1Z6/jUFV9gz2LTA7Yg417gwihD1pMf6neqB4lUqhUjZFo5KTzZ1SYMqJrWxUKlvd2OpEpVLmQt4yOsM8zcSQDJhr7IXnbkJxv/bG9Gnw2P7b1ldbg6HbHp09HtGOEfTG/UfnvSbFvQS0/TEDb/jJOUd/R+Da+zkCF9wPwlsI7nH72QKu3t40EnE4Jvhtf5swR8bXo8n0iOMZJ8VrADU6Zoz2qSOubuTw+uft+9YAqrUeoI7K7IzfHeQ0F8q2cfl4Yb1uXC8Lz88fWC4ry3Xj4zdn385cLqunZsoePJy9mnAl10Z+6ycL7SYz3cYteMohFETlBlp7VeEmRMiNUKOWnqhdWu1iVqSxF2nb3W6Gwtv0sJdhmd9j66ClP1IXf9weRY5QzJtPM6YWK5hTRlIDo1j3YGYKiKsUdffGFFh826vQBq/orVIpJm75lKxdQLCHRgsg0SS7GggSPSN8B/wNrGK4ccwOqhJMMozRgFxFTIXYntnHyADGFouqUqhojmiBmkE30FLRYgUzNek+z2/e1JY9xW4v1FotLKDao5u3ZyHrxhZWy06fJk5PK9NkWTjWslrKqGli2TZTKaaJ9/PCKb3jlCbeTxOTvLMs+eHALVu4ed+KT4sWPtKr1/vPS3S4X/dH2yNY9X4N/cQ/8nQc7/Ha/keANf72qM99O6Kj/cS6cwboVYWvIe3L7acPuD5nTN4K+G0ijUAxAsFbpK8R5I64un67B7WRgen3jZJRf32G43pQe6QKHH8bpC9VRUshLxt5yyzXC88frizXlevlyvPzszlgXFfOlwvrxdI3LevKuq6e5cKS4KrXt3Ly53O+T8PUiKQB1Q5YsdFXzzDhzgAS1P/e7Diy6wjrHvDb3plWD5RtUbkUl7gsK0Ud9UiK22tsnxIcPFscE6Ym1IJ55hV0jVAVicpeMLJAU5nt86NiKsAMrC6lZOx7Czmorop09z3Z7W7dy5cWICz7+Nm34I4bkebYIhFzuffchk0Sa8kR7HLhBnIRWoJg0zgmmvehuN7WRqKpCu0Za4SaxYCrKBotjVUNJvbsy0LZPRSlQHXJEvcitfctaFAv8qmgJu3HklAqU8qs00bZKuu8MaeJfKq8S5k1TuTpiXdTJbknYogTxsDIbd302oh+vR8xq0dMMN06eklSG68xgsERaLzEZD9qrwHbeM0jkOq3exte4N6Upe2vOLfWX7w/6du1n07geqkdSUefA2BHnNURl/LS9fvvjySto0n8iLM5WkSvPUMvVT1SCfYg6GDVvMS0VnJeDYgWUw1+vFwcuBbOlwvXxQKML4tlxMhbYc0ra8mdSrDcPNdaHaSD59pxJzi3H8QM+rVzPW8Ewr0IgjRp4Xa+5bjbabY/o5inYklGsHePgYJSqVqNCLfhdYFOHRj20GUHKv8CVNuHUHOgJbzd8xViEteOl/iFm9OFq9gojXDr/t5EOuBqL8l0dfvA7cDFbVwN6KsDeWD3WnTgFVenNnd7jZ4NZGCAGhPR7IjmcSgQmszl6thQLaOWF9KUoGg2NZ+KUsWkxh65WhFNbR6J+1w0RFM1cNcKEswZZMMS/0aX+fJkhUC1qiX0TdmcRlImp9nArsI8meiUREwSvcvoL58ydUdr69G+nXj7vlF6GmnJS2u9b6/RmyP69hZp7BFwHdG8o9b3eQet9qVHuZ4D+Hbtpw+43tK+PdBbeyQ2j7+PbeTYGtPRS12tb710NzpUtHv0ts6XgGvk/vqyIo8krP5D/12teGNeuVw+8vG8siwrz89nzh9dylo2zh8tyHhdDMi2LZtBPVvRxuocOuHGXe/PqoAEz1puLYrboYJabE4w4ui029RJ7RlFIEJwTzl177Xdc85BYk+K3Wpw5QDbTAvsNcmmG4Qub+HIOBuIuZS1xwPU7jS5xZZFbfl9TZJyArdjV71dYq+EjEFkE4iq3hxBDEjcab0TW+7pn/1gIFEMWNq1S3ApqgGbq1bVQUsdnt2GGBS0hr2iM3SMQTuo7agmUdWkhGSgZRKSPUNVC0lQH6hSHAi7kRe6cai347UqVEWDGf1KCUiJbLmQYiTFyHZdWKaZKU1s68o6z8zTzHLKbDVzKhNPdeW9rEzTE1M8GePS5xZsa6atl7e2I/rc5vdo6hkBjOG3I2nupfYW5nxc30e/v4YtR74Wo2DVM1D7AlR+HEL8HQcup7YtS0A/cCN3NE6iEQyOxvCllzmCBbw8EUaw6kFLuLdZjcf254/t0XMe9W0ErY2b1PUoU8ZeQ8qS1l63heV6ZVlWPp7PnC+2fb6cLQ5r3bgsK9eWa3DLbNtGKZbdolJMNdQyMahLTY058z4ENQIa/Jl2Ghk7Tn+Xyqykxi54gNtNHBhbYtsIRFdN0RjC6q7bNgY6i3vE6W4ra3i1Z0X3YFtFbva0JilVeyG3siNGiKsWS3UkJt1J60Pv1YkDVpVbvsKmL63quQmlA1BXGe7BwZ1o4KrX5h2pXWyN4YsNnmiAWExFFk3qogQIZkcL0u6Juclr4w0KVfHUTQ52iB3f4hCi2HWaJBkrNWEpumol1IiqEmvYmYeW5d6ELXf8aaCLswyqhGbTBGop9hxVkVrRUqghUkKgTpktFlLayKWwPmXmaWOrhawrU5k5lZVcM6cpc5pXTnEmJkshhUbPACZt+B7TkKM1WrnPSrMzZvtj3a/zvj2iPy/RnUfnviSZHZ3fg/Zr+NL6PzLSO6j16FaHk75d+44D19Dewon07SVOp7/mCAYvcSJHfXgEWkd2rdc+/X3GBTDes7XRVlUefD65jnO9ngg3l8zleuFyubIsC8/nC+erZb44X6yo47KaxLW440Uphaz5pg70YNOmAhKXFkTC3kcBQpHd+6+po3a7lqv+bN6HXepq6r/mM6geeKtyAy2i0icTV7lx8xoxgGhgpdACqnWQTPeqKHshPu9DNRHSslFUkx32zB5yL4yFdo73BX0g/Trh3reberAzwug9eW+7q/qAauGWve/m8Sgtaa7/qi1ZbxN3o0+yIKaewwRXCdUDoIHqcV+hm6p3c9bfXbUB3xMH+zgGt3lV18HWwD5ubZ9b0Pbna7auNkdrVVoNMtQCnDXYu6gRSq0+F5RCMU/GUJm0UKgEEYpWihZkViaUmCZCEJMu1SdYv059+r24Rl8CtX7/59CTo/0vAdOj9hbg6n8f+zjSzhGMu/d/D1SPLvj29tMFXH8Y7S0T5qgdSVi9h+AR5/boe3vnIzf0SPK6MeifglUXN9SO3zMiAFAp68J1WbkuKx8uz1yuF5blysfzmee8sm4r1/OFZb14PFZmW7MXbvQijaK7J1sDitAFEosaMQtueLfhuklcRvyEMPmDCxA9I0LGiK1wkzwULKu5eqyQO0F4vJB6aiOiE8UGIN2Y6b6tNy1gS3rrIQAmgdm+ugEl+oktyW31VxfdqVEcb7ymloM37bcm4vXAdTcJqntA2gEmUNUH01BuTEJzmlA7niI2XgF3DZd9DCWYA0upaqVZ3B9eooGVKuYaH8TUdgohht1JJHqGfFF2r0RxriN4H0IJNyahgi6mQox47bQmsyYsfkvtfroDMTcGA1DPRi+CqSIDpqKsSoqVUgKlFrIUT95bKWSmurHqRtXCkk+cthmthXdTYa6FKQSXF4KXm8HWXNq5pPvXcz/899uPmOQj4aMeHDe2I8D5HPpUH2yPtKXNz95ENT73zsQM+90Wvevl76SvL0l239YeSSevtTZBjibXyGk8um/PdJjD2r1d69E7HCduu8/uiMDxoumY8f28I1VhD1wdt6RYxoptWzlfPnJZrpyXhecPZ87Lleu2cl7OXFaLyVqWlTVfTcLKhbpLWX7Z6PaenahZzr2AqX3CzokHA67scViYPSPsnoCyZ4Bw5nrPZK7SOHMbgJa0Wt3JwCQuPPCVnXnoih3b30YY2w4F8dgpirhbugGtAZj4uKpLUYIQUTKOBKaga+mfpBFyfzp3JlG5BVNbrJfbmrA+SsReegucvUO3fiLuMuc+L5T9xuwFLtt8FOxhxK6vVNf2CdXtSCjmpg/sabGq2b00igMLBsYiu51MLBfJLXMHxpDsYKmKbgKpSUMQS3QlqKefih7Srfa9l8Qao+Ua2l0Sl1rdFmbSZVClhEq9WgqpTTNZM3NOzMWKkZ7SyinN5Kq8T5mnNPM+V6Z5JqWJNE23BfIWFVrf2lj3zFG/f2RMR0e8/pX35x+1t4DZKG319+mPk+4vwzbdOQ2PRlXhJweMCPnt2s8GcB0N9GtjdvSyHr1geDyRerAanTCOEuMeXUse7O/7Nf5+NDFHR4xPHDNuWSrWsrBtG8u68Hw534DrfOa8LFy3lct6ZdlW1mxZL3LeqLVSaqXWWybwEbiDc+MShOigFVxCkvapIBpcQuuGW6FlM6/obo9qNieTFnWXvEyQ0R0wdu/clm4oQcuI3o+39u9bjfC2gOtdDbarV2VXe95AqcmL4pc0O1SfkYIGxl0hybvixZ7lfrffNSRt+eCkf/ltougOis0Jgx2YWwfpgOs2VgK0ki4K996YFMu8oU2d2C4lWP6pm1pXiwFXaODVGSXtHto9rzndqMjNozEoodrbKwiVYIHHHlReqWioLiG6+nWXstv7a5OmRZlZaRVqoWZFV7P/7e70WahTpSZFNKJTodQMQXmSSqUgAcIU/N3G2/q6c0LYX/lxO6JF3au52/eIDowVH8Z1f7Sf4Zjx73iNI6evsfW8Ut8/uvN3zGqT8Mib4/PbTz9wPZoobftokr00AfuX3X5/5Gl0BFpHn15V+BaJ8CUOamxHANUHF/fqL3dzLzVzvVy4rguX68Lz9ZnLYumZPj4/c1lXrtvKsl5Z8mYpmraNWrMb3rXrZnOLxt2hveSfG/N34KouVYjsDgHSnBSciO2FijEyWwzFHLxwNZLbN3z8W3YHleBJbqtx94lbPaxgRLoBQ/MU1zZ+RbBcelhNLDXyqdKNqZ8uLnFZ9eDmXu/gs79z6ZgXvcU8407kCnt2CcXGoKF3k8BMJHMi44ClTeKQW4eC3JjfhiyCSaCOkntC76ZSdCageWGak4u/za50CcEYDJVGSU1VF7PZzrTZIxGqChFLpdW0jyaH9km5LNQhdOVUhGAu8yiBSqGYwOn92jPO7+vRJ4i4i36oXgHG3hvVoEyXilTIsZBjoZ7chX6qVl2mbmw6oVIoUjlxIkSYppkgyexn+BC2JI5tjB/Rj36NH4HSI3rUWg8oo036kdrv0XXG40a61jO8R33qx1wOjuuly327gZd0P3y79tMPXG9pI5h97jmPfu9tWu177z04pnZq540T73PATA8+o12rVxnu5ynbalLW+Xrlw+Uj1+XKdbnwzfWZ62o2rvP1mWVdTRrbNnLJVDVPMN0LFbZHkf3ZY4iE6Nw07G7VsdHj0DzpPC6qlz60xVkZYa1SdwcLdTsRVd0T3dPxSouacklC6764tL2HCQOu9h60kzBcMmxFEFnV0i/tRF46qcPPNXHhlrmdid1aF5Jly5hAnsTqcSW7f7DYVzRAEHM2MdVtNU/CAuKpkxqo1dJSRnF7LqAXBCDc1KdSDUy9szuNVPu9CSz2bOEGdNEYAdtu3jRhZwp0T7rYbJPmIdik5kAhJEGS54V04JJg7z+oGvMSoznjbBZYbLhczSaWTbjKsRIlUGokFiXHjIZKrRZrp52kjWeft35aeqqAOWmIClojmldiCOSwUXJlnVaWKZHryppn5jyR68ZSK6cts+XK17WY6vAEIcTbwN+w+3V6fCSpjJ/xGv1aftRek5D64x6d9xa6drTvaH+vHex/f0sfX2k/ncA1DuQRN/NokrzlxY3H9NxFO6YHpP7z0j3bZO6db8Z7P5pgPVCNXmm9lNVLW4BieQHzlrku5iH48XLh4+WZ67pwXa48Xy5cVws2viwGbjlnt2W5+3KjogLNULM/qpevsLjhG4cdJRCq7Hy37BKBg4XWPctCdQeEVheqZVwwIck9/zwoFdhd7pvXXv+6dxORyA5iLSVUi00SgRACgUDUwFYtgJXcJJBgNhtXhUnACHRxNaeRXMs4IQFJEZ1AJ5CTEE5iBv5ZkcmlueRj2JLsemC0MRlhB3FLhXSbHE0Vqr3XGy5pgkss5rzQnDOqmqqtgT4eT0XFs4j081eG+etA1jEm0OVD9HclBQiB3WMRAy5tUml7n2qSt6jZLyXYs0oI9l6iEsTGvFaIVSge0Fy1ehC7UJv6uLNvWgB6NcmzrSuXusRVjFUA3TyDS0GSeE7EYl6FBAM8KhKUWTMzhSd5QiRZf/cZz83+1Ushr4FZTxtGRrZfx+16R4zqW1tPb0ZQ6Y/p+3IEri/RI4bze6lr//01Yvu4/XQCF3w6kCPgjAbRRwN/dI1HIDhe+0gteHT+S/ccRfCj3+EYqHourQetegtWrbVQSna14NnUgdcrz9ez7VuulgVj21jz6m7uxqGW0lIPNe5fbuoqkX0IoqdeMn6cPW1TUFMdmdd6s380AshOVKsTFPNAiy5tuYHeF4+qqyjdxVqhk9j6obu3s3hnIImlPmpOCkEIMZAITBqpm3m9qZffMFUmXk8qEKIR1OD5/ESU4MAVJMApUCd14ArISZAEzNWAKylhMieEm7dnMKCs4on6Wv87nalgEigGABotRkw8FKC6RFWl7u7nVKF42iktapnnexDrsrhrvL3PXVRGb+EIw1zeUz9590rxedAS6AZXG5p3hgGaBlRLg3pCCLsN1EBBkaAkj2WrqrvnY61CqXal4nNxD27HpWvvt4ozA2qSuZTbMNqU8/ReU7gDrrZOAgUCbDpTqKQYiRECk3k8cgs4uFu3r615eB0cHgHMCFov3WMEmUFiv7vGo0//+wjMRyrKRzTztb6+0n56gQteB5m3TKjxnL4F7l9cf+xow+rB7K33bdd7qfUTt0/hdARc9f7EUl3Kulz58PGZ8/nKdV34eO0lroXr9cqaN9ZtcweMshvoh0uaik2c+PSP7zWebKiav2D0YXDXaSfYmqFkzIiejZwYSLpksfmjhdsAtLVtqOH7O+CSWxZXN9fYcRogpkicA9M83TJIRCWKJ4hdKyEpYba+B7EyHBJBsOeSTQhFzAUbV18ZxaNg2R32/stNLRdECUGJAaYKixNWQc0d3dWnHmLm2CUEd8e2YXO7XBRialKLIDuIQgzu36eCaKTWYF6fValLpXpGi7yZSlI92z+ukoVqY3PEhcfWE+v3Hb8gmWZvMq/EAMHsk+a+Yv6XzZkjakS03gS96OOrQoymhgxqdcJqDNSq5BrJWghaCRal5cm69MbggMfj6W6Xyrn6OYGcoGQlhEpdlKyRrSRqgTVl5mlizRa4fNpObFuGCqf5xDyfmJ5OdGVKH7cRkHTY9xpY9NeBe3XcSwB2JJH11+7d2D+HRo0Mex2+92DZH/tjqgt/uoGrb+PAHUlcbwWSo5c7TqojoHprP+FTjq3to9vuJazm1v6ojhbQciPVap+Py5nL5cJyvfLh+pHz9cp1WXhevErxurEsi0lZpVgm91zdi6/uEkAz+IeI2TCCkHYpC5KrbKwCcSBU9kSpeLFFqiVM1Qx1g7rihSQH13rNe6YLvUUc72NkSWLlzsbRkvI2dVUbkyCBp/lEOgXCFMimXSOKMKdoRFErtcJJ0v4MVRUp1ZLH5sLmJUdkhbJahpGqjXMQRCLV45Q0u0NBESTbAowiJBHep8AvnII5PCp8FCXOwaKfat3NKKconLWyVOValGkKntDD1Kdfz4F3EyyhsqhHPVQsRyHmJNHUqrUGk74ilhM4mq3QAKGShT1NVJV6s2v16sNmA+vmZpPATf2q1Kju2q/7nKnaFKqVIIGqYfcPaSESyd01g78/S0Flcn4Malnyi3k7Vq1EFTa1MIuKkqkgjelpTI4BZfNmrLgaUBUtwpZd3ViqeRumQtmKZbavwrZVSrHnKe1dT0pKiSAJQrg5sTQa8NJ6P/q8dE5vStBu3wga3fvY76UP9r3VLtcz6yMQtd97CbFXEx7RyG/ZfrqA6zWAGH/7NsDVX+c17uho/1vbEXcF95O1TZDRW/Agp9quOqFQamHLmfNy4bJezI61XrmsF5Z14bJcuKwL67aybSvbZudUT9u015JqXRN24hKCSSSxzx4ecFuPEKurgarZgywzO27Lgpq5qeXU3JBNwpPdc9CA69NBbX1pajKEveT97iiyHxuIRJ7STEomBdQtW39LINVoEo9CLpXQnDEqkJsLtVJztSKRGQOlUgzUyZiNy6TK/f2IFYAMQQlBOKnwHniH8L0g/Ik5WJHqCt8gTCGQPE1UEWMA3iX40aacK1wyfP0UqEFZETaUn38Svp6Fb1CeFVbF1GnFgD2JS7JFqBU2wUqnFFOXlgK1KEsJhGD+fAhkD+i2+Co6cdpd6HcpQvZExKZSVJoXoB14C8u2PWF3mjQaaipDxT0BW/zeroozFaLVPhOSg11tzylYwuBmaxNcfVi6aaNdKRUD5zYva3GFhYMi1YAcBSG5Pdck9eZlFDaBcCIFCMw3danez7v7ydrWDveEvP9tlEz6445s60fbPRN8BGKP6OIjetaf3/8dr390jSOG/Fu07zhw+VvsOYG3ANDRi/q2tx8nXD+pPgcMX+rP+H0ErAZWfTBxP6HN/xylsmwL1+vC9XzlR+ePPJ+vXK8Lz5dnLtcz67JwPl+5LGbLyttGWQGtn+SO2z3EBIJXsd2lrWiSVwitJGPw3IMGAFqATZzrV0pWk7Ja7SbNVM9oUKu6E4gPRgPNJj6p3JUwaRJBaJ2L4oHPeOYHYWLiFGZOwaKRtULKmZpNybStMCUxrnvbWK4FvSp6VcpzQVfrPyuk5pDhFXunUDhFqyll0p7V+crRsnjMM8QZ5ln4uafIH/9a+OokfH0Sfv6rRFVYi/Knn4TZnVquGnaVcw3wdRaKKjEov/B+oohy0coz8INZeErwD9bCgj37FANrMSNXVFivkIupI7cNwmZekx+ysK7C5qVU1LPpkyJVlCJKkcqKBwNLtXIluPem27RU2bNGIbLnh2wTePdkdMmkqBXhjBoIFCImpmcULcHViqbWC66eDZarihohaKRWIUj1I+2/SCWHYt9UKFJu2Tc8BEBFDHx9zRZVag2IBtNOlELekqlTa2XLM7lsNg51ZdWVIpV3WjjNM6fJ2KKdGDxS4Y2g9RYJpD8mca9dOQK6do4ebI99a33qaddb7fKvqf76a/yYakL4zgOXU3AN91JIPzCPjIafa2vqb9l/jriRt4JW62fl08wZ/bmdN9Tds/WSVu+A0QGXeZwVCpmtLjw/P3O+XLmczeX9uVMPXlaTsJay7KVHzCeg3oKJvXMBI8gxqElUBMupGoSYAjHFPaegBRyHPdOEVvbCgiW7g0BR6qYm2dWClu3msVhuju17OUm3W8geiAstPkpaReGOGIi744dknHIKiaSCXAphM8msZtjUBlZT5qpqKtI1U6/ZMjxsrt4Lllw2EJirEKP18L0Kc4icpkCulYiQMJtMjIEQhTJbfUlJ8LUI14tyWZXfuyrXzWSDpVQ+FOV7U+B7s/DVFJmjSbIqwBRZtXKulX+SC3MS5inyJ5JSUD5W5RllnvyeIqyilGJqypiqS5fC0/5ule8Fq6FVK1wqXLUiMTDNiXOp5rcRAmUKbEHJomwxU1QptVJyRbOp3cxrz8rBmI9Di7cDS3Vhr87Uiu5ggmVSKbUSaiBVpXgMWNJAxW1ce7Cdx465XTWq26nEGJDsasiCOVtIMY/MGl06bgsxGkU16ay6w5BSSt2BVytUClvNZAqalCK+He23shX0JJzSTIjJXOZbYsxHUpZwo8S95DICXgOdUTJrNK6nD6PEpQe/NfVd++2Rg8hPun2RuIZ29LLb36OX8G1fzNEkeCRaP7rPIw5JD47l4Li2r5+w9X6fYmxvyQZaS7lyvl44X69clsVsWqu5ul+3hSWv5JLZ6mbZL5qU1W7uf0JL2+TBwibYePBoEHfECHu8Drg9C9zl2LzBanUHjAZcxW1atXhcmKkmjTm38+89aGWXskzS4mZ78eDXEM1JISYHrmglUiIQipKvldDcpfGkuCiUQtFKLRVyJVYr2BgkMEUh+vPGIEzZuf8a+JrKHGCOsNTgdhphCpCihQVcMecBVViK8iErJajlbhQb861WflQqS1GWKiwVTiKkapJtCQayVxU+bJVZhXcCkcqqsKiSBSYxiWJF94QbqjBFk4yi2phm1NPwafOf4F2CCYWoTJNrBANICpQ5cBFYUNZoz2PSW7MH6V14wq47bAxVe5dq87QxJC3Hr3gWF6mgDn6m/vNzPWJc4DYPfU8KeD5fl7hpYc4maYlNQKoEWrXolvLqtsyUPeJATXcoCpI9ri0LcbtJwXEzqVAr+9yfaFlMWsXtbvIegVcPWiPw9OfBDcRGmncEXEeM+yM60/dtvOf/h9pPD3CNL3Bsnzv4RyL0o+9h2H4LcMGN4xFusR/jdjuu79ORqrD/4KClSi2ZJV+4blfO64UPTeK6LHx4fua6XlnWjfP14vFZhZw3cy/HVTk+yy1eSdyzDvNSE/Nii1GIAeN6Q7xlwOiQRnEbRIWqxs1a4loDiNoKS9aMqvkqG13ZneW7YQzsBMHVgRazI6YmnHHJLzCdEmm2mlNBjGNnM8ngfMm06mDzHEnTZJkWyroH1yatTNHih+cAT3MgViEWMdvGqmbjUuFUA4linD/m6p1d2ixqgdO/n2GbIAdl3eBZKhqUqQrfuCRSVVlQPpbKaRVCypyWwDQJp9mkPUPmwO+WgooSL2pSVRBCFP7U18EAhcKHojyJkKK9kzkKMdt4bBmuqlyzAVmp5k7/NAnfm+z9aix8hZIm4XQKrE/K7xflmwLLbFxCrcKSK8vViobmXNhWf4/2UPYOFXNzb8jQHH20SWXOGFXL9mhvWrvlZcxF9AKfIUQI1b1ZIUikBkG9NphItvRTCBKKxWRVIQcxB6BqC0dbKIZLdTiYq7b1ZB6XNZsTjCziCknzstFayTX7AxbqdOIpBoJMt2TG/Sw+ohNHrUlUvYZn1LwEjoOT2zmfeBV39zuinW/p1x9h++kBrs9pb/VmOeJeeg6pB5eXxOzXXnwPTL0XznjuCFi9irDvWwSVTNmyubpfvuG8LnxcFr55fuZyvXK9XHk+f/T4rMx6taDi6t5rrTwEWLyMcbQGVBGXONTilswhI/gQmN9axAiTBQ+zZ7jYkz9QKaHs6XxqVffaqs4Ft4exB7PS8XLLw7dLWDhoCTIFgoPV/C4xT4GUhBQDWTNlK+SaKZhENEcHUC+D8dUkzO5uLQDBVFNZ/fWKayOzpaiiKstqn7opcRM+rEItwSXWQBVzqkA2y0gfYU2WRFYjlKnujg4CfOPSqyBk8XS2/q5l82wURZBozh1pimy17mVjNCgaDbi+IfCUTAreRHg/ez2tDO8KzFWZK4QtU6vZJk/ARaGoxXrVEKgBNlWyKqEo102JPn4/f1LkyWBFVVhy4Hc1sYRITpAdKEotLJt5h7bEveKBzruHaieBKFAnl9Ar5jSxLzOzdllt0ECQikokhoA6aBuY2aIRhCDuLi9CKdVKmVCoTY2omb38DBbMbN1xOVwAl16LVmousCmZzKaWo3MrmeW02fXCxjtWaqw8Te8IYSKG+W304EgTM57XwGgsPtu39jhlOKcHs/Ha/x8EqaP2swlcL0lmenDMEYAdnfeSlPWa9NWrDo/u3f72wNWO7dQx5nBX2MrKmjcuy5Xny8JlvXK+XjmfL1yv5pCxXBfWnNmyq3dq2b0G27VN+xZ24IohEBHHR9nVhlG8QGFzcwf3BLSs3u1vaZKcG/kbcKk/m+5oZIMlYlLUXvgwQCucKAKSxBxBUiBNkcnBap6EecJKxWtprnJEtcSzkwgnYArC5n19X2QvP1XsH+uFq5BUMU+8zVRGZAy4FgviDe7GX4pSqqUu8hJUaKodHam7FFKbB+Se+Le57rOPi/q7vSWqVY9sUELmFiogukvxIgpFuarZIDVEJJmDzLIWLlmYKkxVkWthqoFZYQph99xs0nEMMMU27ubGbjes7jComI0qQKh8FZUJU2cuGshVKDWAGki0RMz70+1ZNLo14hUrW77BFutn0pjS8l3ZFWwOKrjtq3m0tryIFrTdAtL3OEKFYnmpPAjaPFnbeLdAeENLs4sRyq7NkFL2LC4xCKyBKpbeLHoar5AjoQSmACFaOQLZSwActJuC4/a9IfYIND3AHV2yZ3RHl/Qj9eN47Uefsa9H/X7p+j+B9tMHXK8N0hEoHB3zGsfz6JyjCXQklb3Ut1Gk1+G3h+pBQCpVzGZ1uS58vJ75cLlyuV54vjzz/PzMdVlY1pXr2eKzSqmUYuq5PfN3dbZXjWOPDlxTuqVGTWoSVvP0Ava6WrUYQa3qXlp4XE2rbiuV4l5pRgcdmHa5zQdOBHEisGdVdxpOEMIUSP45zYk5CVOEWZQYTXpbSqFuhYCSghIRThWexOxGi9F4TtmUUM1eY5mWjGCZe7SYmmhVc9vPynpVtua+nxVdXBUKBkSefV2EvRYYoexZ4jWqJfxNisygqYH27aWbrdLscxj9vzHMzcHAiTVObKXCpVSuvp2iMNeIVuXjUpAtEIpJUPVa+J7A90RIqbI1AagaCMcA72YhSWCTQEZ2FRqeOspcCCsJ+DqpOXGI8JFAroFShagTm9fbWutmkoujlWq9LQt3hDCmpd1IKE6IRUNTFhKoRP890EIlwi4hx6gevC0EsRIrNQQvhOk5FcWyiNQ2N+nqm6ngSRUpHq+mUlGiARfqJV2UGsWcQUJAJmNKJAgyhz3QvaWQ2p2MjojBkfQzgo90+/s20rc2Udp5vUrxNZB5BFov3f/oOcbrvSQ4vLF9x4HL30SnYrgb1F4i6T1umvis3Tnw4w/oS8B1BFiPVJb6wqcHq5U7NWElk+vG+fLMh8uZ8/nKh48f+eabZ5brwuVy4eP5zLJsbNvGet2opZg6xtMZoQ4+zX4ggdklrhjMrdqgypwOZM92K3tKoaKVUpv6z6SsEtwaIHX3FlTPIG739MFXv2bQvfQ7k9hrFjwNEMQYmKbEuznxNAmnSTilwrIVtlJ51sJXVZiAn5uEd152/iSRJ0/1UyucVoEsLEUp58paK1tVzrmSxYjVGrH+OwOeVyx7hwlx5jJfDdgsghkQQSffji1xrNxUwf7RgCf7tfyFX//8ey+3ofzowzOtSCUYI+DJ7n2XAzmt+i9m1+Emi5jUKqgWfvf8ESrUrVoWiwJsoEVZS+H3S+UfarNhCnNS5mvg3Snyx5j4uXeBhEkla47UFMxbcVkNIESYCaCVhJIIPMVqmauK8HshsoZADpF36cQWMlupbLqxebJmk8DaUtFu7XgohpjVDjV1a6iBTKCwmeoaqFIdpAIphD1XpqBIiFSthALhNFFqJWfzIrQKyJUi5VaxG7+3KJKgSrH5WYWsG7UIRQO6mTPMqgWdKnXNrHJii5XtrLzLmVwLXz99TQwJy/c1EIT+60gbmjPGCBRHNKQd9wgbZTh2bMMc3WnrEX0dJcG2v6fJfwDtpwC4Pt28ayMH0gZ1BIR+33jN1yStxg3193tt0owurWN/e6AagetuYjY1XGbNC0te+Hi58Hw5c75eeb5euFwuXK8ry3Vhuaxs60beMnV11eB+zZuaqsFT9E+QJnXFXT0YMNBqPmG1stfhanWOWgaGGtRrKrmU1R7IJSdcFbXnQwqmApSASSNux4opckqRKQVOc+RdUqaozKGSohn8giiTCu8QnkT4Xgps2WwlFDiJOYnkqqwZlk25ZiXXwlKUrSrXUskBK/s+WcCt0SsjoHsQtg+YBlexBpcXW4aJhi3CjRC2c93uRzXpRpt0qibB4cf0E2WPfwr49cVVdTZe3/v6xFYLq1q1X4m6Z0yv7T2bz4JtR9Bodryi5qjRJOq1QsyVa1DKEljc1VylUmuk1ZhEcFueOWfUrEhVYi1e9kxIBL6OJs3lKmw1sCJMRFaFqIFSKrlkC/zG8y228doXhY1DlYpUi020wbD4t1jNASMqVjxSLYB6937FcmQiYsnuq9tNm/v+jlWeskt1L6Oyh6yopfVqeTUVzHDoVaSXHAhbMGYlmaSnriWYQmRKMykpEqeblNw/3pGEM9Kml1o7rpfOHml6Xtvfg9YRcI1qTO3OGWnpT0DSau07Dlyf0Xri339vA/6Ic3kNtF7bPrrOo8lyBLIjcA3clO1Scl1Z1ovbtM5W/PFytc/1ynJdWa4r27KS1+ayXG6ZwNWlGRdyopj6L0kDL8+IcbMQ0MQlxdWCDbiqZZQo1QhwqVZDqQYPWg0mNgiw16mKN7uD7MDlfYp6c7qYI19NE6cUeJrhFApJKkEqMZg7+2xsN08I70T4QTL11laUtVSSGoHJG5wX5bJVrlm55sI1G3BtFYoXmtSq5jXWJKTm493eYcSlTX/RjaHgBhDBBZzdxdv3a8WyqHt827aaHkdz3aUto233bLI66EuEVm04psDXX82cy0bZlK0UJzi3CsG41Npfier5DrFnbc7bK1bgcymwrZnnAikqKVSCKcUA4ZTEAEwxBiGDVFNDzhVmEZ4CvAv2bkoQlmAS2YaQYiJqZPPsFeag06QvvfGVDchb5QBk31eqg4jgxS4hdudDcKmrhXKo1e8Mlgh5t+v6erCcjpbc2ScqreCoxS/fvBB1f9cCFULekNyk7EDQaO89wBx8W4Q0pYE0DIz4jwtcPc8zXu+lNoLdKHm1/rTrHNnQxuv11/0JANjPBnD1HEj73nviCTe975FnTjuuB47x5fWtl8Dad+duXwXCvq/tXr3Y35pzgLUUctn4+PHCx8uFy/XCjz584PnDM9fLwvnjlecPZ9Z1ZVs21qtnh8jFM4/fHiJ4efUYIWFu7UkiSaMXe7T8cRD27OCN6y4K2T0Cq1a24jkRi9kxLIN5N+QexLNLVS14GCf23DwW5znybrKg3q9OkXcJghREMu+E3U3/6zlyCkawtk2bPwbntVKuSs7KusJ5qSybfb7ZYC2VXEzqKrXehlvoGBs1X/Fmp2oAay6TdkIBViznX6XllyVEeBeERZTNgVqy04FoxE4KsCrr7y8+Rpa/sIpnvkgTYTab2FayBT8niLNwOs0+dSoXWSmpEpKQqlMTfz8oexC4qPWTbOAXivUhb7JLdaiBdw2FlcI3xUA3BEgxEN2T70kDUsxRIwLv5oQW4bplfrQqM8J7ga8FZoUnhPfB4tC2IJyrMIdAIVGYuUhmLZl1y5Sa3SNV2aOXd7tYe1GVyoYSqFbtkyLm6TpJ2mmqEomxEkWYJKAlOMNVCDp5mq/KWrPnqKyUyl5Ch9Be+i0+TcU8RwnCFrKFPGRLXLzVQi6gJ7FA9loJVcjFbL/v5kiUZJlV3KEJ4T4ZQU/sX2OkW+vpnHIv/RS/vs+DT1oPTiN4tb/tuP6cXl3Yey72n1Eae8uzPGg/ceD6z/6z/4xf//Vfv9v35/7cn+Pv/b2/B8D1euU/+o/+I/7m3/ybLMvCX/pLf4m/8Tf+Br/4i7/4k+7KfRs5ll7M7dsIaEfX6SfSOKH6CfJoErRjQ3d+D04jaI36ajFOueLqweXKx+szH5/PnC8XPn44c36+sFxWzucry2Vh27KpB3NBu/x6TToIEszFXSwTeZJIlGgSl5jEJdVzx7l6pAZ14FLPTFC9PlKlqNfqou7u8JSb9CBw8xR0dZs0c2UQUpiYYmAKgfdTsGDYALMUJlUiJmU9SdhraE2YkX1TuG4GUuumXK6KLqYGOy/K81LJWclFudTeJsddHsaOfts9zCnMBM32CsUkAKlQN2xbxIpOdu8vhwBRieL59oJ0wcleZDMqOdzUhTEEd3c2Fen0NKMRruWKJGU6Bd5/NRFOgbUWriVTQwHNpFoIcouFyxI4zTOqwrqpJQN2pLFkx/ZJVfbg35KrV0pu3qNWgywmqEkgCTrBNdwCxWcRpuBxUKESxZmHauN9qsKsBmRQmLDsIZOYxLVi8VdJJlKKbCUY0ad4vsDavRS5LTnB1LWhUoJ5BHqmQqfTzXvVMh7izI5lBzOHiX0MCogWzw0ZvBxLq/+mt7WLMWRWY0z24qZZs9kQVQkVFjG7XwDOfr0aFLkK83wipYkgk62NILe13q33V6Wufn8PDD1Q6PDbkZbpkZQ1AlffGh0dweql9pZjXmh/IBLXP/vP/rP8z//z/3y7Sbrd5q/9tb/G//g//o/8D//D/8APfvADfvVXf5V/59/5d/hf/pf/5dvf8CURuAcXur/9YPfXOZoYbx3g/h79tfrJc9TnEVBH0Krdj/u8VkpdWbNlv7CMGJebevC8sF7NAWNbLYap5HrLZlBwtYipiEIwNWB0YhrFYrGiqwdbtm4t7OqRGnQvH9FAq+yF/VqBycotsyld1mzZQQyMQATUa1sJp5R4CoFZhK+DcIqVKJYgNmEAEIBJbm4IxT0ZS1WWDJdVuS7Kx3NFF2XNyvOqnJfiQdDG9ZtnWEMp/ZQ5ATQYQKpLXW3hpSkawBUsUWv1ci5V0HwroaHV8+vFlgPEVK5WBDntlwzYmGZVUkPyCEECKUQkClUiMsM8B55OCX2yNEYhmwNCKBWRQnAv0arCFgLvnxJKQGJl0W13jEkSCTXc1GSYJF6WDZq7vvmVE7x0SjEjEhrcU9QBUkls1A4sTI1YslK2SinBciyKeXgG0b1OdHJbFEQ2MdtQCAaslqu2WUbblbnlsG1q3BZiIQFxsUJpakN73haYHAPmWdhyaMptfYkHYaOWwBipaLCc820tNhsmgm9XEM9A4gxAUFiCcTpRhEuKTRfPvCb3aoQQE1plf5adNvQE/hF9egRmR1LTwAC/6Zwj5ru/dy9NPbreT7j9gQBXSok/+Sf/5Cf7f/SjH/Ff/Vf/Ff/tf/vf8q//6/86AP/1f/1f88/8M/8Mf/tv/23+lX/lX/mWd5TjAerF1yPgGrmYnqPo97Xv7fhHktoRZ6TdsSN4je0IsMqn56gUChvP12fOVytB8s3zR54/Xrg8X7l8OHP+eGVdNtbnlbxte2b36sl4xYsFBm01kQIz0aQrMbcMK7fh7u9ZzA6TPfsFVkrdvO2UzT2xai039U4DATrnzSq7ShDE1GYeNBrnyJQS8zTxgxB5h3LSypQLsRSiWDzRV5NJNcVq3ZMV1qz8bi434Mnw8QKXq/LhY2G5VLasrLXuWd+1vZtmP1L2FECCmJZtnwcmYcjJij4SlBgD3//Be3KBvBb0RwtJEhKt6jFr9jRRRowbkdo9Jg3z2FYhV1PXtQwgKQghu6SnUHNlu1yRBOkUTE0LfNw21+8qT3PgHTeNVvB4rEpgJXB6SiCR96nwMVbPpB74+a+/MnCocNkKKZijxPX3vgE8+DbYApAoxCkwCZSyUMqK5EzEAPWK8KNifVev7xWzMJfAKUPZqknDRZlDZAqBJ4F3s3IKla9C5FkKi8AFmELiNEVynLmGjbWsHl/mDhyohxjIHgtnaj3TaVpZHCVrMIkcT/WEUjunI8EC6qMEQqjkwp5tg1A8WbJSiFSqZ1WhA8ziIB1MA1eUqsUZO9iqqT2rCJtWMsU8IjM8Zfj6KRHjzI6cPf1pEv6RDemITo2S1Sgple738fwRKMOwHbi/V08vx/scSXc9Tf7/msT1f/wf/wd/6k/9KZ6enviVX/kVfuM3foNf+qVf4u/8nb/Dtm38xb/4F/dj//yf//P80i/9En/rb/2tbwFcb4Dz/uWMtqJRF9v2HV32aML00tEjUOpf+Et960GrDL/1h9TMVjau25UPz888ny88ny+mJny+cD17xeJlJa+ZXIrV0GrGqJaAV82Ty6SqQCQ5aAkzlqki4vFZpVWNVUou5Oou7phkVYNSpHjqpHrLGQggagl2nQiEzjEAAUlWC2s6Rb5+N/GUAqcYeM9GykoqlUnVmVTh5HkCN1XOWfnmmi0RsEJ0aatU2ErieSlcr8qHcyFvesu/6HYfBahp5+DR6lx6M7YnpATYAmEDEnu2h+ZxWddqRQ4R5jkhWXbnBwnNmGBIX5tqVgGtt6KZyaQa9STAGkGDWp7FTcwxROx4i+y1fsiMVSsuAUkgkzJPQpwiKQh6LQagEkmSKLl4bS3lKQWTvkJkkkIJ5toeQmCeJlSVd/qesl4t2XJRUwZrZduEmYx4RFf0spAmrW1cFczbVEEsFVhVZdVKqkJSS+y7EtlUOOfKU1HmJLyfI0+TFdV8iso5b2wqbBKIYeJUA5sWlmxzW6nu8MNeBLRGIKildxJzkghS2YJQg+V1qS7tGuCaE1ILE4wlWgyYz3/B4rMkuqci4kWi/b15xWlVK7VSq5iEBlQthJrt3YkQ0sXCQKqS6uSqgsqkkdN7IcaENI6m/zDQkB48WuvpWQ9evc2sl4xGOteDlKvFd2/K2O0/unfrZ6N3PUCNTYa/36L9xIHrl3/5l/lv/pv/hj/35/4c//Af/kN+/dd/nX/tX/vX+Lt/9+/y27/928zzzM/93M/dnfOLv/iL/PZv//bDay7LwrIs+/dvvvnm23dwjxeCw5E7AqzxRY+icgMdGc6DYzF7BKxHn/06TbNe2fJmNbOuV84X+1yuC9eLZ8JYVlZ3d8+5UIvbBpqKsLpGpElazYblQJVUnFn1JVu9JHzVXQ1XaiXTCp3XBlc3N/dGuAVzsVfZgavZswgg0VIWTXPk9JT4+hQ4ReEUKietRKkGWGoJaAOmGloqrBXORXnerCR9kzC2rGwFllK5XpV1VbPpuKea7npSHLz6F2LufQ28LENFghxM+tlc6grsqtNydeJV3Z264kwCHmbg1y7VpTyB5mwQ/ed6Ay6p9reNDwUrLxJNpdWqEwv+WxGoFZkthmlx6UMxVVv1DBiWHaSyJ511T0QRPNja7JXiIl4IwtPTTJZCKYHcvBRp/E/d6druEi5NArI5U4IamDiXoMECuou4V52oJ2IWLmpSDqXwPpiKMKE8JTUGSxWtnsBZAQmIbBT3+mtps3RPsqy+9mxeVgkm0oZmSBV/8546yu2tQWxsgqcYMzWyUX6VaEyPZ76wTPmYypQGXnbVCnihOYrbQKUIS3b1oApzWPbQkjnNhBIhNpxpmT7kXsMz0p82fRutGRnpBiKj+u9IehuPGbf7fUfn9PTtiFb+BNtPHLj+zX/z39y3/7l/7p/jl3/5l/mzf/bP8t//9/897969+1bX/I3f+I1PHD5ebSMw1G4bbt417ZhRInr08o5eSH3hnMaxjFJX79HTaGbviNHdQwG0UnXjsj5zuVw4ny98+NBKlFw4f7xwOV9YryvLulK2Qt0qpZSd2FFM936Xc9CzYsxiZSNCddVJbVksgtmuPBHuplgQsZi6o5VGL1F3wiieI0mq7MRcqoctD6D1/mni3VPkq3eR9ykzSSZJJmE0Jni5EPFURBcq5xJYinLZCmu2eB6pcNmUy6Ism7CuG3Wr5pafG4q4tOVFHnsuIohiyZ/MqyLFBnAnQk5wjTvYS2mekJYoV72Puikslj2D1SQstUR7du9GXDMmRRXcU9HVXU1AC9yCrwOIF2KUKZpDxFYhK0yKzAILxHem5v1RhXmDOQlfn05cr5vFqtVqHpwuVaWABZkrLLUVaQQR934LwtdzoqT35FpZN7ieLx7ugKdsKoRukqqaKvE0T5QqXOqKopRsjjyardsCbKG4DROeYmJZKtdaOa+VP5Eik5h36/uTx5dVk5pDtQKg82nisgXWklnKhkqxMUwGutpJC+run2aXi2gwVZ8UsymqmMuGBntBMSXXElhuDnU7sKXyyL501W1pN6JSBU81pQSq5xCueH4NtChhDWi19STEPRVaSNHmTDjxbj4hTCYRN9rFAW3ZiUNHh2r3+ygF9e0IUMZr99uBT2lYf874GenlT7j9gbvD/9zP/Rz/9D/9T/N//p//J//Gv/FvsK4rv//7v38ndf3O7/zOoU2stV/7tV/jhz/84f79m2++4c/8mT/z+s170Lpzcuj2P3qp7RMPtl+6X8ULNvln6s57ScraHSb8mI7LUcnkvHFdLny8PHM+X/n4fOGbDx6rdb7yfL6wXBbymtm24m7odef6G4AEbRJWZJLgbs2BSaJlwvDZKdlVZtqSpFaXtLIBV3BVIeoxw+p59vwDOzhIFSSHnctPp8Rpjnz9LvHVBKdYeWIhko2A7pNd9oV31cpWYPXUPFuGbYWPq7BtypYrqye7bVWUDauc20dv0s/+Di3NUAxY1vhocTtCIYamZgMVCwXQJcEW0dmyQairidQ5bq0VXYMX9bSsIVSXllMbD3+n4zzrGZ1OCGxBsSJAttLxNk8UNgfLSfbsHSVVlknYJuGyKLlEi6XbqgkbIVhKougunsES0O4laWKysRAlrJvZ6xBOIZDevcd1xqw10fz0dL0YQLuTRikbIQTevxeuEUuTtakl/82YvXQLrFoparF1crLUTDEI/4Srud2r8lWIlhklBf5YgbVW1qJ8XJTTbAVBn5h41oUshRzyrjZUZwja+5EARZrN0Z2SNJqKj0hQByNaoUolNWcbsczzlEiLA9PmSYupGw1lCkjwKswmXedacD8YZDN1f8mZqMElsmLZ/oOS64aGwjt5R4gJdGI/mWGOjHaqfk71zHhP93pJq7+udH/7uTgy3qONqwfHI4nuuyJxje3jx4/8X//X/8W/9+/9e/yFv/AXmKaJ3/qt3+Iv/+W/DMD//r//7/zf//f/za/8yq88vMbpdOJ0Or1+M33w9/BAuf/at0ccRM+J9H+PJk574VO3r5f66vC93wdO3BREyZpZy8plXTgvC5dl4bp4JWNXD26LZXcvxTK8172Wld6pBy2Y2LjzFCIpWCxOIhLdRctDiq3gXrV8dVndxV0so3vFY7MCu/FeUgOuxnnK/twyWcaCKUXezYnTFPj6JLwPVjE4haaiA/TmidakxK0YcG3FVYGbeQheFlMPlmyOALphtqOmGu1T99CpK9vrEyEEdULFTpAMMbK9Gg3UGu2aYpJSs0Phf5vdQr3PqN6kS4DUJCj1Ypc+RxK3VFCN4Wl9jQKie393tRGgWXbC2Lw2S1V0xrKqJ8jJcVuxop0uvWkoyKQ3p4tQjYGJ7h5O9QDdQCjBq0ubLrOpr+Y4gaffKu7zrrVwWRaiFKJYvFSWbO7pyUQoce/F4vFuWg1UpUJU8ZAIc/kUtdI0IQXiJIRoGVFChUJhrULx93mSZGq3IGQpqFc01p3x1P2vaWfVYq5MnWEMjDv2iLRYFnPYMMeNANXST7ZCYkZFzOaljRDI7RfEHJTq/u6EbHmrPJP+aoxBEOYtEVOCAGGz8jqJYN6QbS31INPo0Qhco9pwZMyPwGxfDMNfGX4/kqCOaOUR3f0JS18/ceD6j//j/5h/69/6t/izf/bP8v/8P/8Pf/2v/3VijPyVv/JX+MEPfsB/+B/+h/zwhz/kj/2xP8b3v/99/upf/av8yq/8yrf0KOzemnYv9uhFfiLuvDCC4yD3nMY4+O1S9eD4iI1wmyx97FQPXHXYBzRbXKWwZEuae14uPC8XLtdlt28tl6vZttbV4rRKK8Kofk25gZZ2oCWBKSZSvAGX+CKuZKpm556VXIIBl7htS93l2JOOSsBSr02+7QRtl5xaBdsQeT+d+N4kvAvwVarMapnmRG5ZCVQteHjNpm5LGdbNSs1vG3zcKuet8nEtbIsXpKzc6mJloHaJUn1QW40waXWaMNuGiHpAc7N42Ri0LA4VByV1539Ne6okcbDR/R0rLSV8PwYyx11V2EBKoprKMIZ9vkjo2NemJhXAE8uKzzltXqENnLNSrwrvjFhLy/rRpLtioGl2pkKsFndUfZ9O5jYvFAcuyAEC0WpnxUiqlZbqa54tziqkQDklAkrNlnMwBWWSyhRgYTFP+hSQGCy7PIGyWIaNUMD1z267Uk6ePqsWuE5KcNCbKJxEmBRCKHxYYXWvyac5GRMmlYuuzmBVQjIpak/N5ctfa/Wijy1tlKLqqZnapObmVGReprsOwelEVwBTKlVa7Bi0Ct2Wq7rueTybp2pVCNvi/VKmNRJjNGZijUzTCTyJcJuvN4enbh41GtTToUaD2v7eJNI7ajxyoHjJLNJ/P5K0erAcwbBtPxQo3t5+4sD1D/7BP+Cv/JW/wj/5J/+EX/iFX+Bf/Vf/Vf723/7b/MIv/AIA//l//p8TQuAv/+W/fBeA/BNrR6Cljw54Qxtf4pGBEu7VjhM2sj0H3felAVTu9vdAFrCFVArX5cyH60fOy4WPzx/55sMHLs9Xzh+vnJ+fLffgcp8wl2r6e4vGF7NdYSVJZnyBx8Dk0lZ0g7dK2LMFlFzIxQzmaykUqRRRcqzGzTbjt+cLlclSDhHdqyuaxBBCYEoT71LiKUa+Pwnv2Ji0MtdKdK63Kua9WD2ouUBwe8plUX50rVw25Xk1lWApBm7qsWl45gm1tPTQalkJVstLGogEIrmTCm+Db16S2aQHrahu/ldQErA5bVBTGWm8ZftoACUOWtUy17c5Ed7FXeWiYvamxti0IF8LpJa9383m1QjeJ5NbsWDhNRooRWdWfP5pURAPeG0q0qCQXDKMu/BgCYM9hEH92BjsR3GRPeayT/11WYhTJEyB+TQTkxBC4ue+9z3ezQlqZrl+YIoODlqoerV0TBLMVpcSlYhuhigZZa3KNVjWkEkEogHRta5Iga9i5EmEpznw89Uk8A/bxjdaIQXenRJzDCx1Y6mZTc2VXT2XWGOOxOPualHPPQm13uIRJ7W+mfehOyqJWsybB+RbfuZICBY3Vyi77ReaHOfLW5skb4yRquVtFC9MGdZoNlM2NFYiSjm9Q94p8/TkBt8DutPakdTT6NHWHZO77ZE+jiaT/tqjinJ/sIN7j+e9Jo19i/YTB66/+Tf/5ou/Pz098Zu/+Zv85m/+5k/gbk7pu3x7LwtUw5tqmS+PDjv6wLFoPHIaDbBkuF4dPuO1u4NLyWTduC6L2bEWq6d1uSyWMHdZdu9ByztoqWa02kKUlnZITcIIzWtQLGN2DB6v5ao9Bc94YemPSg7kisWceGZ3qx2le4omSWpedkmQSXaPuxgFktnPUgq8PyXeT4GnCO/ixuwVgqVYNouWZT3QCIupBtfNMl88L4XnVVmysmzVAo0d4FrOKfXYLKO5LqWg3p/qXLTNGdklvBZrVoywsnXSqq1U1WgpeboVGDAJRGIgJHNLt0PCTS1bMXbb54Q4mBNAktwcB/ZL6z6f9spdO0ds3m17zlm6aeuUWP046QiEh4+hbX+AFjTc7qV+v92JBsVc2W1ZBfdQtMwnuossNQshF8IaqcVUejFa1v5S/fIhMZ+eXHWtrOvmIFyJmJJNMSZI/CkFyyzfwh+I0RgPIoSTxUERKGvlyR6Hd7MVh9wEsmRCtHhACGg1z8PqBmTZ1YFQJZrKt4jZdIU9d6TsslRXydsZoCDmQZgc+WWXtOzawV3hVXQnMa08i6pJZlAtCbIU0I1rWUiepDeWyFQsFGOqiSiREJIVx2xEqJeWjoChl6wSt0w+Pa1pzkAjmHxCk7r7jJLUS5/x3CNg+5btpyBXoSPGCAKHf8cD5Bjkjq7Ttx6wmkqw39fUg22i9KB1BFY6bio5byzFQOt6vbr7+3LL8r6slsYpW5xWdWcAyz8nzo1jbtvSxWuF7qNxJ/CVm6t7KUquQlYhw16SRPcsCkaIxaUqA65gzy1egTZZUcd5MieM90k5pcocNiNMChTYFn/myp5goyosWTmvJm19s9RdVVjdLrLHNvu4aj+mRmOQRgBD07JYUChe0N5UOE26qi4VWBCd3PR5iCSEhDqACQlJEVIgziAncWAyxwzZ1XcOXB0o4WrV3fbSMlC0999y4bU6V42kq7vAt5nrY3XLl4hJej6npfq1fSyqNI9Oc1ff+2Qj3pI+2JJocdxSIXpmEi9PQ0sHhRK2QIg2X9JkSZCnp7SHMSCJeTavvFqVUopVDMBMfqoZVJFgGf0jyhQqYrmzQIQYJyREQpzgNKNYsPZaLdWSFQQVyMq1Fp5LoUggpoikSCmugajVQxbag+Ju+8GzSFnftA2Lmi9gIFKCe8tGS3llzEE09bQPYty5V6jmU7ivZRWQ4Ml41VZbFSGHCmJ21FiDAxfEGkllIlRhKpFZk79Hm0DS2TUfgkjPaNNtH9Gz0WntLcy6cqxSfARaR99/toHrhXZkO/rcNoJMD1AzN+/BxPFLO5K0+n6NTSBvq5UmWS786PKBj5ePJnGdzzx/vLBeVpbLynpdzeW71M62I1A8Fsu5xSSRSSKzBOaQbupBIuYrb4BXiqkHN62swZwxCsX09IJx6jOEFByssCDYScy+NXli3BR593TiXRLeReHrqXKaMlMsBC8KWRXKZl6CokpSWBerdbVtyj95rnxcKtfVsrhrl0GkVlw9qHtAtbSSLMElzGjVjc3JpHitJ09OVVeqtrpO2y1DfmPFxV6oSDKiGSbEHhRIBHmC2Z6fd2oVKRMganW6cutXV01X6v3CdgZA3cZijxZ8ytgE2YUqR2Xp2F1tWV4r6Fp25JaW3zAJkpVwMqBkjmhsNptOYgO/rkkZc3hHyZmSLdlsDV12dJdIzF7TpLJK3ja2ZGCRq3CJhRjhlITTNHkdN7HqymIMQywbZVmoeSPUjTksPIXKD6Jy2a7UWmz8thMlBGpJBFmYTu8p04nfe4rkHJgJfBWEr+bISSunUvhH22JSmQbev5+oGiklcr1mYikGXlqpslk5lhDZmGEVRKtlvahKVfMu1Ao1VhKJ6F6WYKEklvTT3lp2Oc3wzCZmk8RUTDvRVIZNiFMv92MOieqMqCJFLBH2prDBu/jEU3oiyhN7Ql7lXrMzqhIbrfFl/olar1cbjgl3R5rXX7u3rbXfdPjePrW7xo8BVGP7jgNXhyqNC2mA0A/u0fFvuXR/HbjX8fY2rMk/YTj3yGvwiKNpnJoWSi08Xy48n8+33INX8yS8PF9ZL1fzIFw3NzC3/INq1y9YrItCK0sy784YsVMRGuemngUj50LOlVyVrMWK6YXqH/XyD9Jouql3YnBbjRHxdIqkKTJPie9P0QKJJXMKlegVfpktALWqUgJMxRKc1qJ8yAZUy7XyzVL3DO/N7tJi0fYsIMVWYhAvWaF192QM0gh+RTWjtArPhaqbSVxaESyvkriOLQQHLEmITPtfwoRHvlk5C1fzSVQ01psazj0OqU6YaNKWu827hCXuxtgAbe93kyQVQgju2anmiq32vIpJu4Bz4hacSzWAN6FNCdNNsFI1OQCMsdlTFuGZPtxj0eL/jCkIBHPycNubirKLurURZLtXC71QUYhmw8uzFcRMAaYozEGYgpBcfZtrRlmZ6pmv0sbMypQvnMqZWwaTiawTW525Lplav6bGd7zXryjxHZsKz1rdlV45BeEHAS4UFrHEtjEEppBIOlHXDCVD2bxqTLAE0SGhSTyhSSD6/VcNTN4TQucaL+I1Q6VxdT6a1fIkhkhxHXytLvn6eKmYOrHi6CWFVTYjH1WJOXLJCaIQcmDapr0e3bvZ4muERovkRpt6O9RIh6SjP3THNPCCx9niB2brjs71NvzeQY3hvN4H4Ega/Mz2UwBc7a/cg8GhKu6NwNU4h7EdvcQ+Xqv3HmzXGT0Hx/41QkWl1MK2rXsmjOti2TBu214EcvUs767+0JbIVrmVHyF4rsG427WSmMtz4xlxolhr9bILri70AOMGXM2pQEJTieEecHKnLkyzqQbfz5H3CWaUmUoKhTAZuOnUgAsQUzeVzbzDnrNyWSvXtXDd8ABedxjY/7LbY3AbXsBsMW1MDQNu6j/VQtGM1XBqIGYXECcouLehhGSZuqVJWe6i5xV1jeqwA1GTpna7UVuYd7aAFk9Ud9f5lrfBPAVtUt1pUBpN05t0JP0E8iz9VjHa3qV68UkVkKqQg9lrIrstcF8nd9x5ALVj65Z3p6EAJsHtPKGBlxHfG/floV0ma2x1fzcVy3hRo/2eJrMPzVhNrylm0I13uvH9tJLqlbp9Q9SPBEx9WDWxcWLlRM2VRSuEzNMUuYTJKjAX4YoVCJ2D8D64xygVlWwipwhxSpRqodaqxvAZfJi6Uj3foQbzVBWF4k4+bY0KBhuCMztiHrNNxyhgpWg8Q4fi0ra2eeCSq7S6CeK8hLB5arS1bixlJRQhlchTXglZiDEwx2x1xGQIKpXh0+xXvaQzgtdIDo+Abbz2CFzjfR99+mu9UXZ4qf0UAJfLoho/wbFPwWt8S70F84U2vrgxh9cjZwzl3nOw73KvJqxQdGO5LlyuCx+fzzx/PHO5XjhfLInudTV713bZLNP76h5R1QlFEUIx0EpqlWWjRGYic0wGXDHuwcFg4LHVwpaLBfSqBVRuslFciujLeeB2rT4OydRykXSKfPWUeD8LX8/wThYilSRqoP6k6KwsQTFXCWESWIPyXJXfWyq/dy3kphrs1apZzfmk2HNS8dpgsXstRmnUdVmqmyf7tYvU3XPDlXIiSIik6C9VIsKEhAnTAZ7Yg/Bc0KjaJkD2QNUGItUBxj2/tJpbu8e1WYFepbpHZkE9o4m509/qUrr3p1gtNA3F02WZRCxtqgPFU0hRIG6gGZppyEUBUk2kavNCNLBVhWju5cHtfiJKLV69d8/iHxANJMEmQPMUlWDT1214u6NG85ij7s+CE/01WijFRkG3QkmWZeX7U+Z9yDzNhZ9L8P1YkG3hunxDkm+ImolUlMjGiYUnlI1LySx1ZZFATiByoqQTH8XKh8yifHUKfB2Fr/3Zvlkz1wIpBJ6eJrQo62WjspndrsJEZgtQklj8BYFagjE5MVBDM+5acl5M9t4D7lNIBDX5TaMxewEfp+BKw72ml41lq/ymPu5ZxeZEFiRDiVZ+aMqCbiZKzyEyT0+E2FTXL7SRbo0OHf125lMt1ehJ2NGBOwmrv8dIYkc7GN1xP7sSV8ciNFXhASh8qpZzllM7DrRXC74kWfWg1XOt/Us6smWNKZ38HFVT9y3Xjct54Xy58PzhI8/nZy5Xy4hxuV5Z1o3tWsirew8WpW7VE67ax2xaFquVQiAFsyskMVd4W2TRa2ZZGp2tVjZVNpQs1aUt9Yti6pHmiBHEM59b94MIU0xMKfF+SnxvMgeMp5hJyZKS1qDUWZBZ0QQEz0JR4LrBPz4Xni/K81VZys07sBY6T0mzO7R8b7F2kogaZ6Bad/Vf3SUtH+xdhegeajLtMVYhBpOkJKCu/1USWicsdkr22DIJiqRq9jxP1STiRMklFIsztaTDkmygrPpzdmkLNDZu2+aMYCeqhyJkKkHLXlEXxUC7mtQlYE4OLmXlTT35r0tgPo+380apQlgFXYJVcUwQJmEioBMWiLyrHf0hQhNrXT0WBJkFiXXPO2klOGztSDU3BqsIfJNE0cparM8RMZWmZjRnUllIYWOOGZUVzc+c6pnvPxUKCTZBNiXNkS1UVrlQvNhjUgg1IQVWeeJSNqbTe4KjcSVYBWYKX0clTsJS4MNawFOcvX96x2UNVjVhw71vjclgsncmQQlafD2A+ZV7xhBVYw49PrJJXyqWgxEE2WO7CohQfKGahG8ZNtQ8N6yqwh5Qzl4TjSpMJVGLUAskDbx31fk0WXC4u0h+Kk0dAUXhZo9vrd/uVYsjzRsd0doxjaSWbj/cA9+R5NWbYT6zfceBC/ZR66WcUSWnen/svs0N8LjfDdwGdxR7e3G5v2wDzNER48je5RNUa6XkzNK8BS+uGrysLMtq6sFlo2wb1fMPalVqi12qgBOR4J/eczBI+3vLGGGezUqmekYMi9EqVM+G0dRecgsmDmIZFPZ9QozCnCKnFHgfhHctC4ZUJJqKqCTQSYizmMammjt7zvC8VD4slcsCS2aPI8KdL7S4erAxqmpBqlZuopUK9GKVXs639sl0dxWJ971l9QjtL3R+4kBANXmmDFMLKo4Hai7QwcMBNPRqMhuv4iqhihcKDK4qQvcM5hox1aKr3My05uqBRreqWobx7G7qKlDNo0U8I4cJljYPdLP9FmsUbqq7zWxjlmGjmgPLBKqy27+0mjQoJn65JOrP5dmLJXhy2+ihuNWDuH1BhBp2pWdtC6Hxg7UFTQtZLBemoCxaWGNhroVNNworwsZTqNQQUS898j7NXHVF68aTrOSwAStZr2xl8hyTihSzPwpiIQzV5kWI8BSsmOQm1RMJi1X3niZzjKjVXeAt1VVN7iQTTDVtqaMty3NLF4WaJ6Etk5YxxgtthrgzKRFzYGmgZq+5VbTDGSaTWHdmBshVrLZbTVzrumtTriURYyLUQJIZxCX9LqvKTrva3/ZpzPUjctir/uAeeF4CoJ4uPtrfS3O9RPct23ccuPTTr72UQ/f9E0TrRKRmcO4BbBz4e/r26T1H0CrDp+1rOOv9KjmzrBfOXk/rfL7y8cNiru/LyuWysG2WzqkBV/VYLRoR12bTCu5BmJjEa2vFaZe2wAHL6wFtVLJUcrAA41qzLeQIMlnhxLBLmy2DglpNpmjZE76eJ94l+EoyMxuRSnTnlS3AVexa70+RlKBeN4vNulT+0TeF83OhLFZoUdUlyVw9A0UnSdKBc8u7hKVeUK8BBtkCkNs7lggSiCEZ4XWnFNeRwe567lOgmDrQgEu4+YhjUkl05wph57rrZqiqouR6s5lJtBIa6kRPE9QolsVcoLnAq6v2xEFHwNMgFVjYbXrSbFTq9pvoAOUqQsHm5TS5s7+PZV6duVfj1lu2/hoVNlMB1lD38jKnp+Ru12bvJNRbHJODZohm6wqSaB6JLVYrmDHPSLFWQi6+RIQlze4QUYkbpFwRycxx4/1UyNHUvE9YOqk6CX/s3Vf83uUD53XjNC9oeiLKzDkvUKwkjUglqxJjJKVEkEiLbVtFeJoiT9HKmHyzZrYKhIl3cyJES+wVF0+RFpQ8Y+PTGEQaU9DM1/bM2Stx7jQ9GdMYou1vUthuS5WmSqiNQ6GGdAN8jyFUlLUImgVK4JyDcW4B5ngb83lKxPAEeNRZdsLV06qR6RZbNrt0RPeXYX984TqN9rV79Rqrdm6zxqSOTva0+Y2WmqP2HQcuuAejblf/MvbUA2U4tpW3CDeHip4raYc+Emt7DqfHwzYxjoCrk7y2bBkvzh9XPn5z4fn5zPl84fJ8tppa68pytTQ6pRSr5+SqQVX1arvB3I1JJK+vNQXPQyimMpQQPTNAZdVKroVNCxubgVaoVAo1OoWL4CkPLGg2GYhJrIRJSFNiTokfnBJfp8IpVqaSibnuXPlaFZIwzRBjgawsK/zuh8KPvlEuz5XzN5V6Bl0qdSmU1R0MUBDPUu8crPgYK4Yw5h1Yqaxu1yqors6BWsJYk7KiewrOnQu4eY9VrQZUrcim29DNiH57uYISJnEHEwOw6oS5tMDVbE4n6mBn3obB8xm2nI5iqtLY4nluwElxCSsLbOw5FymO0Zt7j6oBeQ31xmdV47mKOkiK82C+DhQDr5JbiiLz9iMJTILM/gwBtmUjTVZpmSS71ygY4d0D1hVPSFxvAmO7qSemFcQYgKbxUNjiRIkRwfJSqFZOdeLjFpAipBj4SguTx2g9LxdKrUwxslCYY4WofE+EdcnUKlSEoorUSKkRDTNTNFW5bkomIjHyx07C95Nl5/iYN851Zg6RH7wLBNlYc2XLVgaopkDVQE7i3udGnXNoTE5GNOyq6VOIllcxgMRIChDEFr0Gi1usWixUolaPhQsWRwgQgteKs/EqBMvJmCtrCUg2JiLlaBEvKCFNvA+BFCEx32jYKDH1qsEGTM1FPvApiLWp3ycL78FrtGW180Y1YgPJRo9HJj/zrdtPAXDBvTQln4rAnxzbn9NZGA8w8PAF9b91xuj9eyvWOAKXf0wdVsnrxuqeg8tiqsHrslrS3HVjWzdKLqb+cu9BdfGgiwW2Kq6hy0XYqQlD82LSVk/L1IMmddW74OLmkr2rBpure9sXrUjh0xx5SsL7pMxSiRQzTPvzV2coLUWOQFEua2HJ8M3HyvlZWc5KWRRdjUg3F+wmVUTiXhtJPEFpc4evanav2nIHYklhpVPZxGgegubObiuvucdbEl9PINzG1j3uTApSVM0estvkG+qpOUbkWixJa/Ouc/VhbQb4AK12Uwvc7tM8tXmj1QADr7HVcky2roo7pGjRZs4zwHPt0E4QnLEqvYZAcbd7fx8uVZo01Ep1YIHKmzmN4LaeiDllNCm4jYtNEeuPW7lcVeXj596tZjPC1IjtmZwrrAhbnFk4kSissrAwk2pmqgtRtj0tlohQk0lTMcxsYaJ6AkbxDBYGgNnCIaqDQ5PTFauFJpWggadYmVwq1pzZ1JfnZBLZKtW0GzVQxZLsFnOhted2D1OVyWqB+Xsq3XoJCbO3Ic77qRWYLLLnjmzrsakNa0fdG5NZK9SsbHkzZkwCS1iJ7sRz2hZSMvVojBaf0ZOnvfW2+J4Z7783qagHriPQGm9wJIm1/T0z3+7V08wfA31+SoCra72TBrygKtxP4E5Ee/Rza+NL6jmInqNon67icA9atWbW65Xr5crlcuZy9YKQV8uOsS4reVvJmxcPcc6uca+7rdQlkz6lUwzRJncIlvmg9pkxLKi4iOcfdLuWZa9xdZXIfgOJTpyCqafmedrd3d+zEaWBlgU912oZLjw7FEJl3ZQPl8o318qPvoH8UamLUq/AqtTViXJx7zzF0tw4kOJpobSIOWtoA3ELIrYUVKYSbP1PKe7u7BYnZphYHRjVwwCqc7+qRmxaNu+aMyGZrSW4t4NpdypryeRiSYiNc/VOJ6g9d9uBlqXIgpBAUvCcityS4GIgtbNVzpxQgzleFDVUatJL0wy0pLwN0HxuSgPboHgai1093eKKCGpJeotLAwV0au71kXAKlM3riOVKbtRCIVbZiyASAoEGTkJohF5v4KFaLT29E+YtPrFoIQoskrmwgla0XIlpNfVlhOpSfwgTUb6i5hNrTWy+zCVYLa1kqeYtDi5nLGotMDeXyBLQHEgTzFGY3BZ4rZVVk2kRBNasXDVbXpVqSWiqixKitp3DTI7iEpMxHzFUc8ZJ0b3vLXg5ubq41mrOK9Ui1IqDVnBG1HJJml2selxc8bWkqwXJaxUmVjcPwJxOTNEsbUkso6LSJN+OXjWCMQLLkaqwSWL9OaMjWt96KWy8Zy+dNXViD1yvOEW+1H5KgMvRZRC8boDTj1bf2siGe11uf0rvqdPbuEaOogzn9C+ps22hlZI3rpcLH7858/z8zIfnj5w/nDmfr57i6cKyraYiVKv4s1dedWO7qOw1tSYJzEwGWgRmSZ7twTqXxTwGt1BYsRyI2cGrxroPw82BwT3I9u3ANCXmOfHHp4l3sjFrJrKR5Oa8sWDgUAqcipAvynJV/tFV+bAq1xXyM9RzpS4VLtVcuLPCBpIDUa1ceshhV49RxFNaVUuC6ytLJBLDyZwHRAgRj8UKhGgvqlbYNsue0d55LdnshOopoZyzL1Up67Y7FEgxSaJkT1ckdU+kqh0XqlVvxQliV3Qwiq2wSeGEZRqZsIwrLkFKwaoYb+zcrt6pq6sB1qbcXNZ9HoDFBeG7A3vCY0mea8/zC+4Jo4Sbw03TMnhZec1K2ZSyZCQWwsmzg3gQcnNuCSJsHjMmKoQQmSY8o0qkloq4JkPECGuQgDbq5lJcie+4ivD7NVNq4YnEewJrPnGSjScpnCYhykwIMzl+zVlmLiXxMcMWJkJIfJUmzqsFmAfNxKrMJE4kEuuuQg8k8uqxWBL4hWlCJVBIfMiJNVnS3o+SWddM9uKp5gdolqiqiVwnNr2whK8o6Ykcngga0AQpKWFKHrDvWtYqLsFNps7NGdFM0IK6o1Ege00ve5G1VLJC0cCkmzv2KM/FVNulKilY6ROq7gkGQsucPHoDHoEJ3Gf86U0ko2TWbx8x862F7m8DQeHeTPJFVdijCrbduI1eLNXxbfTNufrG3R95v3SH3v1tx/X2q/7lKB1oKVRLnrutG9fryvVy2SUsS5y7eg7CjVKKq6/8Qvu9HUxaQcjQCkN2+QiJnrWhOWNk8yCUavWRxNWDXZZ3cxKz+1hKNL9PCEwp8BQD70LgSc0TLGnxvG0KIl4ewzoZELYMl6p8rMrHi7JuRhTrpVCvFV3VglU3i1kJxR0wPLO6FnPQ0Ky3PIzaBhr3dLNYtWbTohFjhOLj3jwVWz2jXZXlHO5uP6dSSjYCJU3Vk41DVgPAPfNFxymaGs0DjIsLQD6der6IpOaOPoHMYZcsDZTchV2xlFHNU9AxqmVFaQ450iZeA7oOROUWL33riPMme5ZeJ6YtDk2183CMfm1Vqqtqm3qzudlXdK/LhUu/LXFs6qRTUE/s0NSFDemdUQgRmLnwjkjB4M7Y81kzZ81MGSKJyIzKe1aZWUIip2D2SQKqgSkpk8BTFKgrquaJawMUfb1s+zMXAilUUojMoSBxZZXAitkyr6psYh6PzZlCKBQimYlVMyiWaUbAvIgSKomKWrFO99K0ITdvR9MjYir4ausnYKppe91Ner4FQVcqJWSkwhYTq2SibCzTlWuYCAhzjIR5vknaPU3r6VdP38b9vWt7T/8ekc6+teuOEl5j8NvfHrh+tlWF46h0b6p5C+7HjcfI7U//6U/h/tC7vz1INZVg53yxA1e7lCpl29jW1Vzer5ZAd7mulhljWVm3zSoYNw+jpmpq9if/L6h4McjgdYhu4BXcqNH06FkLmeJxWk1VWI0IN0IXrJcCbhcTcBvZlCLvUuCrAE81m3pQ6g6OiFJCt1hUWDfl46b8aK1cFjXHi6wGWte652CTDUIVYrFCk0agTXVoOf+8em4bXLHS7CZhmT1PduaDRnMp7uShLhU0zwxTwd1YRxHZHT1y3szWFwQJCepqxv8a2VaTnmSGMLn33938Yl+85iHIriLUCDIpMimchHCSTjp3TiEY7dPV7X3OfGubPAWXnuxBpXOn/xS4/JpNCnPPxAYmu72rOigqTa/LDS27RdC2442w7stAXRWWvW9e38vGuhKVXRVr7t3OJYlQS0JFWGIlSqVocOkmEnUjUoi5EjUSNSHyDo0zVRI5JHeQsYKQ71PgqyR8f7Lcidd1Y8mZrAoazQ2/SakEqkRLayWRRCJJZQuBlUScJiatLGSueUM0YyUrM4XAphORDDWw+pDVVHBRGt2TM3s+UGcEA8neYcTAO3jCqVoJ2lx13FtUA+qjUTV4EVDYQiHJRhThOkdmMeA6pcgcVqtWEKMzuAM9a3RrBBflU4eLfX4e0LWx9ddr3xvD1s5r1+9NKz/bwHXQmr/Frh0c30j3vR/k8SWPp/bHt9/aixgdMcbzVa2+1mXh+Xzhw/OZj9ezFYT8eObi0teybJTsykHRW4ZvJ2Ixuecg0fKvhUSSxIS5wgcCZNO+ZVUsP4BlLlgls8Vinm9BrVz41KQtPBOFz+RgHl5zSvzc6cRXofKOwrxlHwMz3q9tuAXmYKVQLlvlH6+F81a5ZqVsUFcLmNYLsKpLWbiqw436Ky5lQV2gbB58zLoDZXM3DtHKpmhM5plVCtk9jXcpukm6FFBxp5FqYKLmWVfyYkl4a2EtG+JglonOaDsrqu8hBLQKpQHLDhiW3QLYOVdJwfNZqgX9noT4PjC9C3z/5584f/zItlY2jUhKmImnmht2DLcyKOju7dKcVExADI1H2OUUEagBgqVWtHgiz2XJyu6JDW5j2RMZdvO6cFM7nlz6VjuX6bZAarUpgIBm2Fq5Gyph3hGCJWda5W3Zn0UINUEN6DRxPQVKTKTwnkt5z8SViBUY/f+z9/+gtnVLeh/8qxpjrrX3Oe997+37fVK3Gz6BAgWOnAiEQIGMGyQZhA1OBAocGCtSYBwIBLZAwmAwDoSMQaEQSLECBwJjB0pEIxmcGAUSKHDS3Zb6z73vOXutOcao+oKqMeZc6+z3qu/bku171fPe9e591p5rrvlnjFFVTz31VKGlYooi+4bWeJXyQlGnaMRAzmBYo/WdF2lcr2AX4dOnt8iNmvAZ46tS2HIMVTo+Cn1UrmK85Dz7cam8bsZdBvexM9odrFH8HoaLyo0Xikc+rFijjxfggrCBXmFsoBFhaRpqR6g1sFdPKEY6qDjdG5HpCujS8j6JC6NHDZkXQQjm7MAC4rbCMI85wRuvV+fDRcPDOkf957Xt2Uid17b5Oq9pk+E617r31kl9eh2+4WHADsAktsZ33n7GDdc7ce0zevhFzPu8yeMDfmbQvPeQzod+z2h94Z1E+4y23wMe/PzG7dON2+fG7a1xu7fA1HuI7BrjkCia+Q6JSKhINLarWbM1ae8lWU/iEKXEnvJNnU6nS5I8kvGGApse0ZaSyf+YvaUUrrXy4Xrhe9W5Ylw9iBARKGRNUua3EHhrzls3frzHq/Xs7dUCGrRmcHfoAQfqiIU4+b0RZQ1SGQRWR6SpsZjnpbWsNu1jHHVtkcZaXLeY/NOqCgHpLVLGSNX4MGZmgwkpexavRmLHM2+WyXWXWHwJ1QMthMpBqPquZ++5DC0IpiplU7ZL4XsfN7QrN3f83umqqZOXjsoDk+vQjg9Bk/DMZS4gIouvgQSBZgn4pkyT4KHybqd58IwszEDLfEGuoXDiC16zdqxaYdCinsvGVMuAJlCJujkp4W35gG7GpvW4P3sqm1gw7/xa6VoYWiOikY7SUctJ5WAWhA8d0fvr9apcSyjPVwpuzu1+o5bOx2vlZav4nirrnu1/XKEo11opZgxRmhVUB1uBi0SVwCfgjtG008sNpyF+o7uysxF6GFs4FObsAshAekfF4txLQJzoBSWei6mmOl2Us2hJLZQCw1I+awW5AR/YFFcW6KMjLaKpfa9U2RFXLvrGVa7Ri2w0amK7iw3LaT17B3R6MHBzn2lY3ltC/enz8Gi4zuK70xDOtWxuvx9xzc0ffhw4y/w5X+endUAqXxitnxSFLY+eR0P1YLhy+LljY7Df7tyzJcn9bWd/6+z3tuDBMbI2KelfU0UichSRb4o8VhQ6VlFKGi3VWbyamHjqDgZIOBtBhuE69AclDNe63sNwbaVwrYWPVXnRzsagWBA9pmTgJHMggYB8bsan5vz4btz2o0eYNcN3yzAQdARTTkawsjgZq1W3NNmTCiolemqpoCUXRTnuq2UNltlB6SeN1FS1EM17M/tCWZYZzK/yuMeshWN2+01dP40IeEwV/jl8JjzohFHjWOgDdmQJEWvNnlXqbCU0+wpOTxHeSaNfzycNkMwGlHIgee/5bAjp3ZP3wfOZMvtixsXm856L47m+bd6H5TDnGBQl4MD5ZUVTLV4OxRN1RifKD4qhyMrN+Qj1dsm8mFmSNzyOZaVkH7uCiaAMlNloMbDOkZCnmERqtsaYeEWjyaJJ9JNjpNaisKmDdNw7bQyEqGu8EA5H1GIpxY3NjSvGq4ai/U2cXQdN7pg2xG7cXdHI8tG4JaSnmFWSL4gOEAkYsAgEfR6iGH6KdkWNW+TpwiHKNHg80tkcLcd5OFcwxkC70FVovXPXhqDcS+W2Ncq2cR2h8wjy+GzndjYea73zY707Q3z5DH8icWP+fM9wzfdnrv/83b/PKnyKYf309hfW5LxDbmfDpU//nt4vp4++t2jwtM8Jy+29se93fvyjN775nVDF+PTpLYqN7zdu9zutB7NqNjKMiR0LhoyCukQuSzPSIjsMq2S0VZaC+hBnZ9Bt0GkHIUNtFRUulfdcEKclFhW2Wvn+9YWvCnyv9KDgEjVKv8MgcszKh0sY0GbON587/9ebcRse8k0tRICtG958wYNiWSNkEhT4dixsPjJCymIkTamqquFhB1wSif5ow9KZ7TVmZ1vHVnGsj3wYHiRtGxa1cSNdyaQsy1lbbnr4ORCCSRdST1FHlg88aebmTPFxSp0NBOOc9CKUi1JeFP1QqJsgGL/1G7+JjYaZUVUZQujUFQkx2wpyEXiFIhXZwKrjt7hftDA+ptB1pFpF8AbV9fDW53kKUbheCdWMcVoUZzR3zs8thyYt/lyYVoX2hBpjkjmesKbiHYa37J6c4TkRKd2tLwq9MSLisICcDUc2pVwqVl+jpowRLM1s9km1NDah/iL3iKK2F+PlKlxq5YUrjMaP3j7z408D9YaMwEmLG5dSeRF4Kcpba9QifNxqtF7xnc3u/LAO9hJK9L/ZnK4dY+B1cOsSNH6PiGvF9yY4FfcK0uO5saGhJYVptMihFCqhbDJqQNIjaxOxMfkuSMKGoEF8Sqr/6G0Zo88UfCjenc2VWj+BhjajfqhsdUOn8OLZCX8PVdJAOKKIIBypUcuSqYLT5+ERMvTjGIvN+Fz0PGsXz1Dhhe+8/YwbrvfiT3iMqt7bTk9MiUn3TB09G66z8bLTx7/lkGeP1kZnfwsyxts3b7wl5f2e7+37Tt8b3To2BT0TyomE9iF1VIawSc1kcqVIXb2oohI/RHJbKmN0RhYZe4iGJj17KrtrCY81CGGK1qDUfn3Z+EGJ4mL1jmp0vN2B+6a8bMJ1U0oVbn3wuTm/dTM+75Zdij3arsxmj55XIATLahUbay7xuXwaCc8puiUsqEEQmW3QQ4h2ZG2aYpZtKeaCm4YKjwYmTjDgRtsZI3QhLeFDkTCEwZ4sOC1o2/k9pEFzoug4hX8ySouFpqiyXSqyKVYcuQp+cdgc3UI1f3vRyE+kEalbQa9h7S4I45MmNTjzThll6YUklpCKKZLRY5QquMKmlVFigQ9uxFxoNN7L6SCbLM9dSvaCcsLhkcES050Qn4bxfxj7IociR475yeD2pEm6axrGiPwlo18hmyVmcXwcy5d6iTjIMLz3yLWqxEAVD91CmbTKyTQxxhg0G7x559U6tYLWCy/6ipniY0dtoNR0AAduAcv/jjcM4aUISuOldi7sXKRxHc42YBvOvTm35pk/LYSeYAO1aD6Zk90RhodAM6MheknDFVBvKVeUK6pXhgpdQllRXSNDZ0rRMODqvqJ3dETRs8Es8rYR4gEqgyI7gvNWC1u/I12pXbmMLZYxFaRsB6qyYOjZY28WQZMR4uzfHON1SAl49YxMnUlpczwIj0obZ8N1VumYUlDw+1Dh4/ae0Xrv35rGSY4b+pMirueE49OhvgilMxII+ntCgvfOvrd43VtoELbZW2scvY5OXyDn/lojFCEm7V3RI/E7i4zdaUsZY6wCYy+EhE/lgKPmtSe0tGnhpVQ+1sKVQWWEGoGsNBS1KtsWArsd59MwPnXnc07usRTe02jksSfdG+YiB7Pg8jD2GioMUig1WIMzf+aw9PBsVjfnsSb6NYkE64kHfhf3ZYyoybGU1cm93KPoOj5hOT/nGFon/OB0SoJCE2abdWNeDK2ajUUdrbpqm+IxWdiTraI6vVkhBHADkitzXBahVAmyioFuEizMNO6KLFbhFP31HC/Ls/Wjf5aUYKlNtfvzYLbMF0oK6ZKOAkbmyeDhlkxjmjBoGLaTukayNn0l39IBUEHVw3kSjYspk4U47/U0ZEeBcxwuZKJEpppKnruH0kXTBMWVJCqEjmGVHvfdZvQXkFvr4fDOum5hp0hnk0EZIF2oHWozdAcdoWFZhWDj0rmy06l0KoNo3xIdtgeSrFYZGtqJYUUQskieaKQa60YgF6MQEU/On1m+YAJoIirM6MwY1ukW68Nund12qhd229i9Ucn89+ooms9Kp2B0GKlpuApjvWwaKogGmw6LXv8eiBWP6PE1t2eEah7jOd74KbafE8P1Hl43N3n6/RTTllxkLiS+zqG3pU+vc5T1/BCeMV2PwMEt5Frue0g53d6C9n67R9+t+22nj0Yfh9E6LxKSEZeiFCupR1ioWaQbEGFMSHOnj2gIuaItN5qMrNeK+pRzxIWwqNRVhI/bxsdS+QGgWQMjkjBQCR22ry8B3ZnDb33u/IuMtPad1Yk5CCYsFfYyDaSBt0lrC5bfhL1iiYoFXbVQKvG9Cq5ThicKfxUnGidGS5hgX+lqiTIfgGRub1iPxLfZGimS4ULqF0BGbZ48cfd+LNCkQSWgy+jkl4ZZZWkDahW4KHIR9JrjqhQi22PMZHl52TAT+oC33aOmbY+mmoKGBa6CTvh0ZCSXJQUBJZOROAj1mAGe8CwRZa1atZBxSGehRCwqoVo//z7lwWzWe3mEeuvYloYxDVPAzXkPAqcFptCupCRXQpEpbizpPEnJ61TH6wgWZgmj4DKL30vKdskxBXM9V1HKAPVQobnvjc06n63z+iHEaLeivBDkoNEHQ3XVRuoIybA2nM/D+Og3IOZa6Dc7dCifHdmnLqizVdDN0eK8ECzDbFTCRg99w7FFB4CZ2MkaN1ciFyfRAqYVW2r/3Uv2exPcOyMlOUIOSqN7Q9nAbDU9HmYhGGxQbOdiN4oLNzZudqN4lsqUpIeKI4Ukjxg1mZvTLYv3wnCFXXFKim43rSsfvUho/WTI4NFozXUzx81aN8/G7vcNFxxx63uSw9O6PIVST3Zs7VKe3j8brDO2e34Ic/983yUUyz+/3fl8+xyv9haqGPcbbdzp1lPzLqIIX4XSc1GKgbdR2CaDUGvktmokpN2n1znoZvnq0a4k8w8r2V8J9Yb0nFQjWiiqfHh54Re2jQ8Ope14nTk2ZQ8ZNEra+tvovHXnN94Ge1fc0kiI4RL6gTNfJhlVuIQmoGgJVtUg65WiLYZaWXR+ycp/m/9zw2pQwnUTdGgYrAJiZU0kb2mcslXMmeyyGm5yRCnBess6ME8e4Ih8ymEIJA2rZluXiKBKOgB6UfSlhFPw4shVowflJeFZAdwpaDQwdOdf/vbUuBP8LshnR94c+9Ths6a8E4x7XBMNZAe/g+/ALQajEAZBhgZT04E9aodcCZ3AJcabArsazsssGJda2SbiRd73EZqWeLShD73CGJoZ56+iZYRQBjnND8v2Lt49jDUR8IgaoxLMyZkbcygUTDpCwGfZiyWlzkbUJopM7kacqkWPLzVFvGB+Y++dz9a4iPO6CS9bkB+iq0HBRwlhYHeGxjNwD8fmmx5YliIUC6WW3pzbN0ZvYG4UFeqloF5AjQ/XhhMlElGeHMu+YJmjbqs428VgZN4v812FmE8NwWtE3oni0S06HURh8rYWGNMsfhDHVBgaTN9dlF2EzY1mAdVba9g+sOsWrVBEV0Sl2PoZjzFEj0tk3YCIwColf1aGloAOazBqfchRD+Mczv/ZkT/HFGdoEd5fqn+X28+44TqHPe9swulvz8Yr33v+qDztej7EmV0Djw8lPzex/vDmdu5t577nz76zj8ZuLQzWSuUf0BoJ44RMjiQFPhUySrDStDzq55kF3XhYEDKGTRZhuqcTUpoLqR5Rf1Flq5WvLjUESN2Q4KKvfbvClPtpIyKsT4n9h6GYNyPzQspSEY+/+INTEGhTRgKW0aPHNU0UMe5NGhGL65ge98PjzZ5JcfdGiuf6QZN3ohbL5vMOssXqBC0nuvdJyDiUNY78Vyk18z8l6pkKSBV0U0pGWVw9pJZKFo4TUSgdxi1hTQliQfb3QHbBPxl2c/yz4Z8NmTUzLQyXN5Dd8T0Xih4LjU+DmhEOIsh28qym5FQKNsw8YHkpeI3Ghl0sosOltgCYI5ZCxDk2Z2PP+XxiqOY/siNAYpWZB0vocgZoc17MD4ucpo9QJqzogk6iCZkby8EzVSZmZnTWWS9/0UOM5d4sSTfRR6xKpVQPpl8V3DpujeGdKTbYhnN3p7hR0xkajVWDGIZ6ZpsTMr8MLjLo0uhe6TiahXLDYzwZBbUWbXusIF5n6pQisjoGDA/1GSm+WJyhlxi5PZcompY0NDEfonBZE5qUbtHorhnsDptHs9DxguqVqnUZq2m4pshvlH2PNFKhxaRpzARQCdUQk0KjRlE0YcRWE8sVafnxUCYsPaHBwzf/tzniOt+Fp03Ov8jT7ydrdQ5f/Wm38439CV/1fGhXo1vj3m7c9jfe9htv+51bu3O3nd0au60MVCwO5mshiMNk3VINg1VTeqlswSwMQdiYrCMNV7eR0dZY0dY8t9mG6nyeglJL5XXb+P5WuEgUfooYs524S6Amczx+3p3feTO+SXhQsLWIBTwSEV7J7r/RcWQqfWtC45nrqbo6NgcLyyOHMynrPiJSUlZeIwwLzJopTwPt4phMwxWst1nAOdXgyIVsiaSdpMDcHbcUzvWj75Rq5AhKvSAlPGPfEmItIBelXBUuwrikOoY67iGia90C0tx93ScbI+C/LAzmjag3uoN/BoYgIySBrHnAqzfgLqnpGD2ogvAlMIIK7gZSPD6bHWq4lGhLg1Iu0Xrj8uFCedm4e+M2bvglIuswJkZNgochSz3fDMbesjF2lDmc58l0BKJtWN7XekwckXAwBoNhEsZueVKDkvVQAlRNfUPCAXLPGjthOXSx0IbxqhnSGUJ3uLWIzt3g8lLYdGMryuWqXMTx0fn89oaPnmPA6EN4G44NQ71wMYGeDMxs3uoI5oZQKJuw9ej47brTRqVgjISFm2WZA6HAwiDIOVbTR/AoG9CC2Gx/k0Z5xBxSl+x20yNyRGNJ0lSdB4pF7ntrd8qeGqX1Fp1ZS2pO3q9salS9UvAo5l9OwQTLo/R5Gq4gaMQVVTqdyhQu3tnoUmm6cd+uaaXzhNJoaeaLPen+HFPt2P7tjbh+t9u0Qidv9NmGnSHA88fOoe00cue/w0MAh8CwnVu/86ntfN7f+Lzf+LzfeWt3buPO7o2hIXAbbd/9oFnD0h+sGr21tkuhlkLZCluZBAbobUROq4+lWN5tQnXJ6FJdbLbl6nmc9OVy4RcuV77aCq/sSObDQlTd2U24GZQm3Dvcd+c3fmTce3RoxUOANmR3xoLgoidRwHnu0cMr6n4EzKNnl4eKfdXt6PE0oPcRDTPHYLZwIfN4k3Tg7skoi2sm8z0mASku8sfpoUxhYnGwJhlVgWbzwggbe+QwNNTlS71QyobWK9gWavrawzhVDbLLFTo9hE9voX5ADW8XCzacSRACJBku1iOK8g7awfYwSCQcqMPR4QFBdbCucDe8jRwnhrjNUGaChnGdu6+IcgAyOlLBBvShaFOa3ahfF/wiyKb45kiN59Kb4dlsspSSLMtYmMalRG7RDO4BJ53VXZAwPtOTL9lBeS2NZdYrzXDfSbYJ4kZxZ0sVedFo1bPNsC2Nxhy7RTeqgOZ9leD642Y0OvQYQ2oNT8fiUq98+Kpi/c43n36MjxC6FcLI9R45RO+Nr6RyRXmtNcZ5y8i5G2pCLYXLVdFtsG2NwZ1mAbRFtJmOmyujC5K9y5wNrYFqlPpCEYKNKmGUNjI6toi4Jns8EJkegYs7xZ2KcRHnIvBqwnWHqxS28sL28katX1G2O3q/UOpg0w+BHJyiLE4jqKaRqgsubOuvls9woOxcaGzcuWKqdK3rmeraMxEHhK56rJ/n1/N6+1NsP5+GS55+PlipFW48Gq1nb+A9w/ZtOa2JcqRla72z987eW6i890YbLRZaD61A0xHNAG1O3lh8ITytUg5osNSyXpJN/UjPdrZAMM+i41nAPNmCJ294Xky0GC98qBc+qPIqhlqHYpnEh3uBTjYCtFDF+NSMvRujs/qDDcsckno2b5RFz0eIKGUyz5IJWDxyWYG7z3PzkLrSrDdLKr17dpg14t/DFiw6xlj1RCoEXDck26YfRlqyjitEbQlIzWe0GItr9HWCbatodnie6hxBx8/BkHk7T4djpCFxorfZKmB2hzESFiWCvO6Ri9ol6toGIfnTJVq37CDdjx5cWeMmCTcGmyUX+oxiIvQ7Ddz5hRa5qlmfNYRQ/O+O7kbfR+a7FB126n3muBd84j6FvHdx7UGIYUF6huM1I0wPfFMZqDhVj8Vr+CQZRPkuKw5OQ+dT2WMuj7PrNSsym/kf4Zg3IuForL5tEkc0j3Fy78amAwVeSuV27+EUIcwaLF05gDiFvRu8VC7bla9fLvzm7cfc9p19tyiLkNCb1B7RjhtcS8qgG2wogxFX4uMg+phG9GUxntVLQOYUaqIGqLNlX7dZ712MdHCj/q0Q2o6bG5sPqjmbwTai0WRtO6UNdAc2xdsnaDU6NJcXZq+087g54ELLqCslqc7DisiEzX1dhDtXcBhS8lkdhitQQo0xJcf688X6+R22n0/DBXmP0kA9cq6P98/bezDgOeI6Q4rnvwkLxkjginvv3FsYrb019rHTbKclrj6IbsPRDmNChDnxyJxWCT21Ugs1jZfWwlJCyKLFkT2lltGahIxJcZ65ptP9EAmP8eO28VqMC5nXSvjLq3DX7Pzq0O/OmxnfpISTj4DplnTSvKWraDXgHUnDZVWSgivJakrFjzITXlk4raFY78WhH9+DE1JHHve3W0+DmepuQuQfZnSZDCqmg55Q5zpWyk+smq9UuKglarK0aD7OQxnE5+3TqG8J0kgUjU/NP5NjeAQkeAwk3QnF9wZyI3UZw3DJVAvJCGzWHtjdkz0ZxkuW9zSZZZmvy/qeiaD6KTo1zVusoDOvNoyW31tMuPYeqUkNKG5wyXFZw3hoODtFQubLOpRLGGd1j+LoYdlcsrNJp4hTS5yjmYT8GFmpTThcqTlB8Z551Xge6tNApeORzkMIIk/HzQ6mnITotETVM3gJp4rBPpzbPhCDaymIzO8KBqvYhAvJe5jqKFoo2wvfv3zgc73RvGP7YCSpRXcJFmhXyiZcauS1A+mblHIlqrQ0x6JA2cNhUUnBYUCcIvUQzy9EITpxvV0iGrWEe6Zx2ehUH2xuVDO2Mdi6UFul7Jlv3Qq2f4NfNtiUuk2Nty/DnXPuq9JPkZmtZdAS34s7JWy0kEJDVu5xGq74VGr+yztW6vcjrm/ZplW3HA0rPtWjWO49yvs50poGy06/M4+b+yVWO6yz951v7p/55v6JT/fPfG43Pu133vY799bYbWR9FatNhqezJh4otoqkzFGllppRV0gPBc4eiu+7DxqdJllqLCmgKwRcVRwp5RBsVUGr8HLZ+Hi58IOPcLEWRcZV4OK04vwYx7Ssuuxf751vuvM2IroxIuKyjChUgi2lKQrr0pNyP/UMPQgNFbZrFE6HcXOG9RCXbQPfZLUxoUe+a9Yl2R4GujFgi9wHKhQ7B8sRPamCZU5t/tGnwsb52ZLRbJEQ7b2k2rwEtKbXazxoE3q/Y9KhDEqpzGacVoKhd47yJ89hNpV1c2QnjNXumdNyrIM3oNtKcPfmmbgkkJq0QnLq9jyN8syDOiMLlEvAvDNHUtaNiTxUskNHYZVBOIM6bhl1BXNOuGJSsZa4b1GoFa8va6EFEhbWYFhqj1tlUDPauioInS5CG6FSMrupmRCq61lUPLtoQ/SaYj6DEozAKBPwSdOICxq2rrNIlIfriAt1Ndw2ujmfDO7daX7ne1Re68br69eoRD842zuqRtmCtdv2wY/edm63H/Ej+4S/7Rlpxly1MrB70Oy1VcqmvGwOGtHGMKfnMm5krlJiIZf2lmrzHcdQH8EyrHGvJY1VLWkGLHQ6jYBFg7LewmDRuHhj88FmjW0MqkDZFd46SEOkwcsVK45JRy+GlheQip9MzWGgplHcT4bMMioFQyl0KlcEuPGaw/4MO87fJfbPnLnLmnjvBwo/xfYzbrgeVqEv/3Q2RtOVmUV4qYy+qrzP9QeP8fGXEOL5q6eX7T2Kjdudfb+zt52977QekVa3ELs1Cb/Jkh4+8zET7gqK7BTR1Sgi9JTGEV1tHCw9yp7MsKHjyO3U9OimtNPJSG/XysfXytevhe2yUzxEQdngrkugnU2cMULp/dbSC2XacM/Y0oIJKCmU6hbEhAK+yYrgpAp6LeiloNepQE8arCQvlFywK4FrdVm6dAynW0CJXcdSaghCCMuZcFjRSirtpNGKQ4dj4EFnz3NWPQxXKbHSG+A1iATuQWkeNcknJRb7Icnqk4BI1/iRBIynoK2BDXmof5E8Hz+PL/cUSP5yzEU+7uQ9TdFVwruPndJQZ1NIcQ46vpyGrkSZgtbI76l4wE30qInqMyrvIFuQJlzBaqhHLEVmktEa+Tgh7kO5Voo7JbtTk9FT0WB9qiekng3MJg1bPBbN0PgjnbdozAgjSROzxAKqhmagJFVf8lq0ZPTlwZs3FcyiptF7h5syLopeL3y4fA+VkvyMT1iH7oZVaFMYoBc294g0S9bPSYLDI5AAMagmbOK4erQesb5iDwjWoFu2UzGJ/Kd1bGiQNDzzXBpjUU0i/1ZAzNZy4zaZgNE0U71TfKAWzSnFHOmKNEV2hVrw+yd8u+BbgbEtXVOjhjFdS5pzVDYeNV2VFmIEK4qKwTmobOwcJcznpTGg4fgeS5IN0Sxz7vT7UOFP2IQFT4ScUP77ucr7WSHj24yXPB87/mZuabgarYXB6r3RFmkiJZ2YC+7poHKiv7sklHb01lKLKMxVUmwzYMHJHhwaBIBYJYjoJmZ/eNrzZxWul43Xl8qHF6HUVBUoERE1g5aev7jTh/PN3WjdUyYpDUYSDhBWHihuVUZ7Gap5/tRr1jpdCvoSUZB7dJf1zI95rE8JC+YxZn1Wd8bd6BrXutpppJEJA5VTJ915H9PzSwgpH/vRgDKgLyklYdlgag5LyKqA+Z4yXB0vJWufiOuflN80BCQjnTyXaImSBIsJeS6oeU70c47h9K93HdPngTg5oweK4O5HUSgxprWA1NxLjuEvmhGTONXTq/YBPpfFVMBQj3xbdNLEpeJaEZ/QpK/+WxCEjuJBm5+9vpZgg2UptpP9pw5W28P1zflKnvAkhHBch2pGCNP6L9ZhRF4RXmb8kGKYNgRpDijXWnjZXmL/0bJeIcdhzXyrEdGwaxZrxyNUmfnliIKwuFdVoh4zmI4j5K8mfC8D9YF5x01hdLz0eEA24vRF0nh5FOKXmAuS6QHUIwxlKl6EkK/4CONmPWDrIXhXvFe8b9h+w9oNbxe870i9Ip7EG46w/Eza0Dx2RF+NbTENj3q1adACQXqkCMrT8SQ9GJlrFMJ76OHvdvsZN1zP4dDTnyasN+fBNExnPa1nba1ng/W73PY2uN0anz833m7ZKPLtnrVbd9rYGT5SxNXTCJCTLRdUi9xPSLVUNjaKV8qIKGVAJp0Hu3W6tkPWCU8jRco6yTq+aNYbXSs/+PiBr14H12vAXlwjOuoKrYVXeHXl7UeNH70Zv/XNQHp41o4v8oSXyICULVQbxmjxvUXxLbXllFBEf6noS4nOv1t4YGNE4ScvExrzI+kPsQA3x1tIWDUNJiY1ciwuMwYJj1dn4NHC0DFmxBGGpdbQPawlO0STsOwl2o1oCZ0NsR5KIxfJtidJadaAU/IkY13UhIAmc24QEZfNqCIcgIfk1xlDRNaC+6BIMG1RRmLvj/f5+yRnpGUM3aAFZZ9JsGdHiwGlJxGAqCmKV/Rw81ym2shrESHCuTAibooXXRC022SXQimXiESl470fHZwJUWTJ8529LuclRQRJKLBo+v/7cQ9q5nJESCjbs7bLYGTtYSGRCWV4iVoqqaDGsIa3yEsqd16+p7yWCy8fvgLpeNlhb9zbSMcLdgKWF/d1X332yHPDLJ57HUoRuIjwWqIcw3wqVIx1feayYGvvs620Bgy9BcwpGmUqRqGMTtFxAI/qqEW9mNKTeOQcbVuiVq71huw7Xu70+w3Z3tC60d5ubOUFlYqXULSfUOFRNxckjZpG68LOJaFDRxc1vnHJ2q8DSjycsveG3Ryz34KS/RTbz4nhen6dFoq5278KUvy27ZlNOD8zgziPqGG/d+63xu3zjdvne8g73Xbue6O3EQWxHjkKXwvg4QHXSX8n1d+9UFwpFi3KGTBKRlliSc22xM4jQpgojmz5c1rHItRL5cPLC19d4bJ1pO7IB2ALQsQ+Bnq5RrTT4Ef3wae7MWbUkwQKL9HuQ0uovNsYqYgBMxRyC4MlWW+mqpkPzsUtVQHIYsu4/0kkSQr8IARUh4WY6tCIDKWCbiUYen7UfXm3qJQep2dWBClZTvAS7VBm37JS9CC7pPnv3ClfKeVVqV9feLtLPLs+Uk/SUu8wbVFGoMEy9EMSZ0J0djJadho3qde3xuYcgyVjqDlUU0Ejxt7ZQMWXyDpALoRx0cc4fXbUlgqMJ7lG2F25URkuNISCYbrhGe0HLCY0V1qf0fiIxdNGRLOpKSlacBdaFioHFFvTmPhxYTNsgqxF1ISsYvEcHPnNmhGUiiMp2TXEoQ20eOS9NCOEjL5UtrynEXGR0V+UpwUj9XbvfC4DvTiXC2zXV+pWkEvButB7ZwxDiydLldVfbI7lYHUOfBhmUY9VinApwfIL49VPD9ojCpsOxaihTEIBbWBxH4soVhI13wrFofax8kQ1jbVkhDgQhijdSxgyc7TDKE5rxqV1tHV0b9z2Tm2di46o+fsiyspjM+u6gh4/I66BZrnDg0vEeX19XmkPd0s4634++GQ/5fbzabi+MFrv/IRjITm/3vvc2dF9IOQkG84GfW+0e772xt6CEj+lh9yOnNbhjcfys4qNSQFdLVmYGxCimeASua0vjJZm3VJCnat1+4SFPPpAXWrhw1a4aKdKJIFkE5gqD2NQ1Bgu3Ifz1pw96egPCy4JaSRpwkfkegLNyEHpE5IL43UOY6OgNTXscoFffsXp/g8fdB9ZlxbnOEkmUyA4lLdPj/1ktFQUyXKC7bpRLofS/DS8omAygvGoIEWp3yvoa0G/J/jniPjsHuQR6xlx9py2D+c8PZnTWJlG55nYM+U/JuPz7Di9RxSaRZzIoRyScMuj/+pP4/WAZeZOC4UzsnxNaKnCHixNwV0XC0zmSUhKG2W0NmWxlCh2dpkRKUxlc5uahvm9oiUi4Lx57vNU5tV5BqE5zjyUI0oM0zDd6TDY8JQYS/9+RsLmoAOhZO5V1vgKsk7mBi0Er5s4luUPVQuqlW3rSW4CL3aQkjWN78xLzyJ4IxwnkWTsRlF01ahvjDOLeKN6ZyDp0DTckkLoDSxISzNV4Ao969lqGk0LjsppRk22bURzI+H+OgKi9m5IH9TeKa2zt07vnVI71TPDJSyDNY2XrN8fX86MqZ4Xxnk+XwYIq6btW/7+XbafE8M13facVaYsYP08idc9frp558XDeHweDwvO07c7mBn7vnP/fIvOxm837m+N/ZZdjVuLiGF66+fcVhovJQenBxmjlI1aNEVPJ/suoq1eBk07jdQ41JiopEeos/ngPGFRLpfKh2vlB1flYp/Agh5cROkJM4bm6eDNjH/52XnrQciQNIqSzIExYmKpC3ZLONAJ5tkimkiqomf+K6+BYQyin9BRWxaRUzC6k2wxLLtB91jUCmjNWp0tGCRSou/QXBUPllxMja0WtutGfam8fO/CyKhUazK3bDDGTvc7lw9X6scL9eNXXL8CaufT+MR+vdO0M8RjbcnC4RUpEt/NzKFN4+nEe12+HEs+B04afofVPfBhWM/V8tGzfbBbp2Uk3otziTXcV+5lqoys88qgTXqM+36JItugTxAtQVDQI0grEuLKg+gA0JyAaMW5jhHRznRsthJGAme0INMUDaWUSBLGYt9TVzLo1GUtonMxdo9i3xT/Albdd8hV2QiHSbPYPfOu5i1tdcB3TpA0hAw83VDbGfud5sbd4avv1ThHKbxsG9tV6K582ltAx+rRBoSAMYcD3VJxJCBj8SPSvGhEwCORCvFDiX2kCLaNcEh9ODYuEbm6R5QpWyjNqNBLlDyoOl7SQI98pIniWEybeFpDokVKD8Mr+6DcO1I79/3O3m4B4fuVKWAc0OBRfDx/Tsmng3V4jqwOuvwxFuc4nRxFWf9epQznufAdt59xwwXvhkbvRUvP7/2k7dlDfv66iXi4Mdpg/9x4+3Tn7dOdz9/cwnjdg1nYxlgsQE/4Yy0+lgKzXijUSGxLjX5NNbxFJLymSchoRCQyrDNKiNoFcyxo26ukTILQUVT5ervyVRUuNLyN/LvQP8G+lVDNlo0f78anu/Gj+2CoYDVulg/LKCBa1YcCvEdmekuZTvEUbZUgY2wlDFcJfpH1WKTKpgvjR7LW6fRsrIeSdxsjpYPiz7pE6fz0+CSFdjMCTPUHFeXl9ULdQm1EVdEaaL71zr7fIlKtjrwq7TJoegd745u3wSjGXnfaxULe6YWlEUhn1WBFB8iILtw8GmMmWx077WfH9cVPPXJa3R/H2+SLt/x9sVbOBzqqZFakd3KGYhWT4ziax7rnDhM+9IiUeqlJLjm6+07yiE3GpgxGwqxbPUdL0PqIsSCeAvR91fBJTWX8VPHXHJtWC8UUzOltMn/ySvO560Qn8sYPgmgTUJ2Ch0RT8xH1e2msS1WwhmBRTpLzVXXn6jc2dq5qVNuhd7p39lIRDeVkN/hwiTxd+8ZoAotIks6GO0FSHiANvFk8/2uc23UbmTdVtPcEAoJK3qlUb7QRJme44WWDHkzCIrY6f2sRsBF5Xg81GyyL/AdLUslEFgUfF/YkNbkO2He03tBS2e+v7PcLpRQuo1NqTb/dEhZsXLkn/eLIkczMV0/wdi6C57qv5INycBMPpOAh0nqeD99h+zkwXPClhZoji4c5vazO2YjBOe5+DOLOhuudCNfGYPROu+/st5123+n3npFWj9yIhejrTFAvb9oPqHDpr0k08dOMnCSVoE2C+j4wprqh4cvDXKfmeaKDiLqKspXKqxauYmhaiZASkmiTYcIocHf45u583qOvliW118tjKBDNHTKfc6oTcmAKx0nmtyYV29wWPVxG7D2hQpKQAbEIjR75wJcPL+y3KCOIaCxlocj7OGErWMXWuiULUzPaqwEXAlgfobZhLaroCiFAeoFRgjloEuUFpobVqO1xIhfkRQ7DJRlNZfPHM61dzjZm1hYs3Z7p8Zz2GQLnsZGflwGk4O8cLNNEPYzdlTybOa7zWI6xMIV+6fnM5u96fJ+ljNjDAuPHN0ZQGL/H8IpIemnfZa7XSChLSfKFZhQec2+cfcs8xkFome3sfTlXiOc8cYIyEJDmJIOYhGhx1uvmdx5QlrrlDHOKdC6Zr7lkCUDxUNLdbxYsPj3IO4JTNRiFIyFMzejanIi+nYAnncNj2RQtARVe1HAdqZ8Z868kEw9XemKfbntQ1WcxNSXo/RRMwzBLsSSuxJjzVewvDIJsJB6R17B06AaRruiN0XdGa7TeqSNyeKV4RtST+h55rZI5relmTy0MW0YptrPSfOwna5w8G6+Htff3uP2MG655F85QoT/+2c/7+TGh34um5qHOrxlhneDENYH7oN137m939rc7+9ueea49WsT3vgzXnGyxEnp2Ns7arUzI6qRlzzyVhsRL9BIa9CQRLGneZBEyWf5+/hnU5JfLha+KcBEP3TYlMXngBl4DWf1m7/x4N+4WNF8kAgNzW3Tc2SAwi6KgclKG90WGkJKkB433zWKyiWdxcRotyWNNH6PfGz17Sf3CH/gBP/6tT7x1p5shaykZyxEIu511ZCpsW0FlwlRADeabObS3O90agw4fNBiOL4q9hP7g0MFeBr55FDi/GBd2giiSTKoerelRCV3B5seYGSxiC6mCwRtH7dZ5KBrLc38YZ8t4pfPhpzfnODwN7GOk++MBzmN8kAxNQj9ROcghSjgbHUwKJhokiBldLK2q/GqfHaYkiLgJAW7iYJHH7YNU4JhK6eFAaA3Q0Vyyhs3wFPYVUUIJXTDLGjHJb53OvYcyhSZ60dtAdWTeKcjYonFSy993R4anJiZcpHGxxkbjKi0UPrwhtnP7ZLAJUgsf9YKP6DBQNaJREbibUYYsI+Vp+KUcDhmAbxH5lwu8ZA55iFEsmHoxnkrY5UiN4eMFtKIWEk9agh5sEvDgzD15sVxPLJ2ALF/wdBTT6EeHhHAYSm9Y37G20fdQ8yk98l2XGgZ7Gq2guPcltDvZgmf6xrlua/b1GpQHQ5VuKqfR9OgU/R63nwPDNY3W9DxPv5+rU9f+vwurPyf89JTnYR/Yh87e7tzuNz5/fuPt7c7b5zu3zzv3+wixWOuhU8YU2DzBSSYUSkwqlFormxa2Et1/USLSMqdr5LcajV6CVWgz96QJKXoU+83E91aUj6XwBy+VDzLQJDl87inlJM5lg+7OzZwf7caukcthI/s4hYH56vWCjYB0xm5H4qMT2D8Cksr1NWC5RXtPT5xZy6QsQU4p4D1YXm0M9r2FziLOj3/7x7QxgiE5SEgxcx+5OLulTNNWuJSS1GnmHzKP1djbHu1XqiDXDXkF34xRdnYGYzPs4vhHKBdnK41XvgnDRUzaJhutbuzlwr1cY+bcOSKXObwmlHg7/X2c/n6OztbvmQN0Ho3Vkwc1lwBbg9KfDiysOoDs0bUirJbnNCPcST48OWQAXlOPTjyhIl3LzgEQBZw4LCDAWjoXMUp1ojOvhcefunvaCWNcr5RyAd247wTUhSDblZURsYgOZ55rbBK0e90wj6hYExIbRKRnI5w5RRhD4HJBrKHeKGIUbxRzXkrnRe9sHvTuKg36CMO9D/b7HVdje6lsBITvCen17tCgD08jCjZ06XCWCxkhRyTvNahV21VxN7oRfbKsUwQ2lTTw8b7YBRsaE3gYtRBNNEuwizeHrYZR2z10RMWCTei5zpllWjUlomRG7P2OtUqvlX2/s93ulHrl9rLz4foS5y+hlnGh5Wt/MDPTdPaMyZxwEGYrlI1+irvOo1Wfonj+tWw/B4ZrTvCFO51e8K136ik4e/jYeb2Ax2Au/z5s0PbOfu+0PZiErQVMaC1p3DahntOa5JnbmoXGBINIs44miicTPsEZfrxWU0WiaDcCwdN/c1FSlFepfNTCR3e0hYpBw7lbMtHEwZxP3fk8PPD2iy90aBVIa7AZV9H0DBMRUpwgYiEtScgImA7xA8qbzsJanGVFW/3WQ+HeLBQmklSz31pGqbOY1ZLBFccQiZYv1+1CJcgirp7MNYlFZLSgsLtD0SSKBGQzgddeHN8cvziywaYxaa/sbDl5J1UbYgLv9Ro9sp4h5hGLm0+19wbSJWrUOA2A56H58PNp/AosFfgsoBeytcuD8TqfjKxxOiPTRQaZDtmMCicEmlQ1z/HuIpjKU1mpH6zE5Vdn/7OkhxcJY7WiDzMsITysrXNT3Rh2wEiqwfgTCSoGJ+KKyzz9WAhFCvVyoViqaWQUN0ZQ6X0MUlYfZVDV2NQp3rhqRFqVge4ekHnXIPVZqKXcx46UjYJylS2O6UQTSmMSGBnmFAsihCgLPvbuIZZcQIZQTDMvbKHBKeDqbNrwKH5k2I7YDcxD2slK5LqoRCfoQByseDgBqlh2dLYsNZhx+KTIq8/ykywp6Z3RGr0FacxGw6yloowtIxTw31y3pqsS0sdH1daTQXrazpGXz7z+e2vud9x+xg3XkTw8Y/1fGq93tvd2O8M2z+/nz0lpH63T7v2gwLdG2ztt5bbGKgZc8j75D3EQ11PRZ/SlUiQSyRPlyckRQumJ6VvKI8l52Mg69xiEhQ+68VEKL+a4Bch4d+fNpu1xeje+2aN1eRNCzrEktFcOQ9UtF5L8qsXiI42WZAuMScYoaWiIz4tnPmrleJJm787+FoZrmGejRkXEGftYXvfMyXiPhVccVIPm/lIuSJfspuzUraIqjP2+dBBdFa3h3k6R3m5RVuBVQvrrAlota1bC66yEEoF5GI3BCHksYPHS53XNB5YGa7YpWZHmF9HR83iUp3/K0/sZ8/jzcSaOfd4SbZgL/xlBWHktP5iFnVWrNOsTgiypqBzFs3HZx7kH0zQXSveQayphJCSdLTc7wI/R41zU0W077h2Rv4yG1EE8WRGoxbkdacCI7uv1QtkbYhGhRG1dsPisgdARbwg9GHMyqLZz0Wj+WOjBuuuCN8V2Ah40Y7/vlE3QcuGDXJl6N32qyhjICINhNun04aTI0p/0rDsUigvm0eXbZ/siderWmCr8ze5ZYmLogGKVohaUdd3ITHiQipRgNqriMmL4PfgrITElHsXKw5w+BqV3rDdGb1mn1nBrYEop02DF6xhbcCgYTsM1Xw+1QcfYRU65sH998OB5+xk3XPDlguAc2Ex59xNr98ni0qf339vW5I+iwvvtM/dPb9w+33i7NW6fJ0GjBUwYy26Ua5y8tKhnUXQZrqDAb0SXY9FgnA2Piv3unTaCpDBSJgkOb39SdJP6hAq81I1f0Asf3fHPbwzv3Nz4kTu/2eBahGuJS/804M0Vu1iqUQR+7uIpoiqhR4eE+s+8Fsi6sdBWi/xAJvgd+ohnIB5eqGRxsJthvYeyfDfaPQxUFLAm7b1mJcmInkrsfnT+bcJLrVy3Cy/lCp+Je9Jhq4rvLSS2Rk/udEGF8DhnD6+LxzOvAhfgIkiF4oNCo0hbPuWSkkKYWgI0h10CCtyBm8MN5I2AK3cOVuAaaO8NrDmpy5dvnRaO4xjz9zPD8PzBdxaS+dFnw9XksHmT2TBPs7LUPUwqU1roHN0ddTzznUjd9xHntym8KIhGTrJbFsprIAKj7dT6imqhudDuHR8e9XeUBa1HfulMrh5gnfF5R6Uja3JFjm1g7Hvjqp0qDfEblSBlvEijtIia2BV5K6vLtNxGCh8797ajW3SK/gN/4PshFO1w73fKkMxbB+Gia0a0JfQK1SPfZbtjRD2ZFqWm8zbSw3RzuEPddjTzVqM33HdEdkoZqLyg+pI94gKZiaL7KD4enUgoet7b9V8JI5vPSBrB+tTBNjqXdsf2N+x2x18/IVqom7AlBf7Iax1Gq69YrLKnCFQIPj3GanaKyMbZuH0bp+A7bj8Hhgu+nOS/y488Q4LwuMY88z1GkBVG7+yf8/XW2W+dfR+0faQnk1CUZG3JrKMBRJYCYerl6SqMVWQJsIaIbtSqmM+Xr6BSLER0lzLDiJR51cL36sbVnJrN9AbRzftmHrrCAiDcc0FxyFZPs37GF+EhWFZyGJ0pzSSgm6ShEXQjipk9elS5enj1md+YTRR974eSyBhBcJAwkFqPnlmGrc9PD7aYcqlXXvVKGRoT1w5DPvY9ipvdYStZMhSLTLMetT/F1sLsc4FOwsJE5efznhUsA6VRY7L6FkZrGqeT6rs3oMmKYk5FXadB9hwhxQOdMOYawWs4zxA8PYIHaNCPw51b98waRjkdaEZgq6bLT1EZGa2fxvs8ZT1/35wWjwbrjHNM/UA3o7tz0VQsV+Ge/duGD4SO9juoUesVvxRsEHJdalnnJ0jNTscMNjE2iTqnyCcFJBgq8zFxHcdG5JZFO+oNkY5I5+od6UFbj95n4VTpLoy7QBO8Of3NkFdl2zY+1o98w47Ynmr9c/6lQzrtvUgWR8ty3nAw62ip2RizUBirOzfLdzA0r8esI7aFsszouDakFJQNJGDJUoRqQq2ySgBt5rM8EZ2zEvss+rceJI3RAkbvN3RoRHeuEW2JpQvkjFPEdVRsyRqjj0SMOXZnNnS98W8k6vo5MVxy+vkedPK8H48B2hllfHaOJyKU0IX3wWiD9hZQYb9Hrmt2I44F2VKMNuCrlZchobUM/IvqemnWyMxEvc2cllmK806pKBJqjGhmdvXFgqRRKXylhc2C/t5HDMBmIaJbaxKxzNl7wjk50XwxH4+mkEVD5NfcIpnec9Il5i7ZzkSnyoAFrZ0JI6VBlFQotX0w9rxPqZ0kkH26YhVYyu+pORi5opiM27axlYCZxhj5fGK62EgtPQWvkRQPbceo1bHMLYThkkOOQWFSMmeh5Jy+03Pc2ehWGVaP9iTn6Gq+JhljavydvCNZg0xPQ0uPITvn+9ngnMfu8qLn32fx56MpeZgGz60kHgAKj8T+eR74437uM+Lx9a2yzi8L1M/fDcwElbmBjHSCCmX4IuuIjITyPOoYS0Uk6fJZZqECpRjFR7TxUGNL9pswkMSOQ1n+VH1ms3dwGEisIzIoPiLH1MCbLmhvRvLsYbj85pRL5cqFCxeqFTRr9h58h/PtSvj83O0h/mYLUSglok2zgFKnCsg6nGdZgRmMkaoug2KhUSjp4JV8qSpFWXkuO90HdTn6mrlH37EhYDuMBmOHcUdGQc2oXlAZJ87gs0l6f019f99/89vPgeE6z3rlcdae99EvP3qGUU5z7ottITPOuHXabeftx3du39y5vd3YP9+4tzt7b/Qx0hPLOis/vC+BJGQUqiq1RIRUJcBCIFUyZsNcydSJZzHuqYFg1ujEh+J6r1r5qmz8QimU1hg2MCSQLIuixEuB3oPJdOtRn2JZoOrjqMyfxctFShicBn0nep9IEjBco0hSgS2p0qkgwP3J/lsoBLTmtPtIKR/hWmtASfvAd4ui1anAkEbAdxCi7Yi60HdL+jHp3Q6st4AGSwjiunf20egWtVlLUHnjgMLOPdnEE4QrmeXqBMpZ2H3jM19hreA34BuC6n4/vyQgxAnJrW6Oh6GZqh4Zyhzjcv66tAR5HL7T1s3DDT3dXOOL9eU8Jb7Nj5veygNa8XQcYKqQT2jwcc9ZIPx4wpJXqwQpwAVUnZdaUTNuNriNTtFgLqoZul3wsjG2ikcymSLOVaL1TvHORYIwE/9uVGvR+sONrWabGgTvA7PG0JAL9tKxLCWJrtOCtI63Gr8PQZswbiB30Dfh6x9+xQ9efoB9NurNuezCZkofCcvlfZ3Fv64efc5qDEHJGkHbwLagnGsNlmEwJ51mMDw12EXprilSEEiJZCGy2KzzFFQrWqJtzGZ77k8gD7YfhguP9jKW5QAWrVa0FXRUdDh1bNQGtV+oviVpJYqQz1CwnwZRlAJOWn9fgruWYOKECX8ydeP3vv2MG66zcuhz1HXmr8vxY/ZOOlOYB+/atePOZ/TQB+02uL919k+N/a0FVNgyiugJ6VkIKZmSDe1YpAklILgi0bSulJJqD2T/QKF5p3tMtU5f9HfDs2bT01E/vOWihY8vG19fKpcSih7DjObGj7uzi3MpESW1Ybz12RcsoxtPhYxBqNRbpVioTuy3hu0j8EbTNZkq8XcpEvVlHhGPVsHbCPUPVfwuIXdFUN8tIcfA6+Mm6xKjDZye/A5MwsaULVQQtKLZvwjtmO9BJHnNuhcPtuDeO72e+mapQPUoOr6CX4hi6aC7RZQlSvctp9xs4VDYqfRW8KYHJNjTsHbHhyxizIpU1gA6u+jHePyiKFMALOl3T2NvbmfE0SLSXoSNuf8mzHY2zK4H6jnm/fjbe37ee1Po6TyWvSPRA5kFpxNLyAjtJHEUkFmwBUWEa1HEk0gxBqJGbQNsp9aN7VJSImxwKUZxy4U6DJh6Y/M7hVDHUAkSgiQcMVUfJoE72n4MbB9UIrIL5DWWWJUpBxX//fp7H/nq5YWLFtqnhpsiGo1dLbj6IZii4NWxKozZ26+k73TqPGHFkvgkOFuQx0sgATMWj9uUrUJHIAMyDFVDkwiiGd3O2s9NARGGgGi0TgFDsl5sPuLNOtWUYhtiG9pvaCtIu+HjEt83OPLl727xt3PBcU0a/CRjaOb0pgCvZETuc3w/+0i/B8v2M2643pt5zzOQ4/fnP8+Ii8fd1s+n/d2i8LHfw1D1+6DvIxXEI2djWYjp4itKk8QEQkw3JsjMbZXVOXiiNzl4JRbgwQl2fD6306+1Fl6vhddNUR/ZX9XZjSgqLs5WMnHr0NyxqdAtqbqQ+Li6UqwgQ4LGuw883MMFUQbH6TCeltDTJJ+4jrmMxXe4L4OUYVLm0+aSR0pBcUQmec9KiTq3WmowDw3QyB96sSh8JptsWsphyWG0UIKJOWvUrkQxbuWM6WQS+tAKMA+OVfcSxmnCgOf80Hxys9nVw2IvHFcHZ4bg0T79NJsfgpf5gE8LyVM0dRD88jgzait+OGjnPnOz+Fhk0d8fX3OO+OP3LkN7OsfjyR7o4wm2fSw5jYnmLkTGUNgkxtFISyjWEbIBVb2kMTZqFu4uCoB3dBXIZk7Gp0JGPMgiPeq3CH0/cQMLiF8nSlAkYfxwFkSJDshS+Or6gW2rCE7vB3lIq1KiCDLiUDGkShTxV1LijDRSpOB1QtBTh5MCGaEFSdEzT3W6U7PAPktWsKxvUyelSFOkRpYIQRzPAzpNWDQevWcz9BJ+y2jIaMjYwWa+S6NH2CoijvD++Smy/np6HgwqUzf+5Kyc9j8Nlkd04Pew/YwbrqeZ/C30THjHy3zOaz3DNecFIo3bsEbfd9ptp721eN1bKj7MvE0m5C2x7hEDS2Q6wEHIqCesOjrvptEyw3Rg9JAhwsJjy/5W83rk6N6HiPDxtfK9V+WrAnYLYdBuzieHUaBW4cMm/Gg4zZ1GXps6U+Eibs9kORasOXtrIabbiWiLUK5XUWREFOq52EXbe4mIiEnUyD5BWUZQXyp9j1yYWigMCIJ1Mqk/sVVJjUFlu2xU3YiCAcElku9WdvgQ/VxElHF/C9YgFoXU2S13Lt5eCIN1zfeq44wkhATkM1TpEjktRyOv1BzZPcgiue77VFMtSZKZ0U0EnUlGOcGBX2yZ0zwFXUCOGzk5JnLYu2mpSg7cs6GbXxOr1MGarKfoq8zf/fReQJVnbsc0XuE8zPM7t3mfU2gq2E3IcMaZuYDJYGYLV444bg5bLVQJ/lpIFZZ0iHaQhpZC3Qr0htBQayh7sD7pXKRnNGVpvMYyXBudi0S0dlWoI/qs3XsHjbZX9RJ524CVQV8qHz688FV55Re271FFo3O5GI1oHFpf4rk5aQzd8eoBP2cUP6K+Ooqxi2RvvGhCOQhUQApUMXbdAkL3g+rvHigIKRrsw/CRKiFeI7oUqGUWZgeCoxoMx3A+owNEGBfLoLtShlPGHR0XGDVEpvud3oUxCuYB+w2Z1xlP8rymToZpcD+VSlvjoqajXRJe/oLVLQ+Hen9a/C63n3HDBe9HWu/s8rwrHBP/jOQ4D+mH+bnhxu3WgvL+trPf79zvO/veGHv0azKz1Sb+KODVxKg11aezmWEJozXbfgyxLIyNidLFYgGWKDaei+90iOd5ixRqqfzCV1c+FCje6TS6BDz4mRTsLAFvfDOMnTRWxZMmG0Y22ikUNja4C9aM/mZBQHBF0lutabjA6PcRsJ9AuQhbqVyvW0g13VqIoPYeTK7uUd8ihpSjLi06tsJoFouXKuJlJaBJCGjmz5wdryNgPxV8DHq/c780eolF4oDJOIyWcuS2jtX3MepOu+kkE9KJPNuUcnoiB0oaggkFrSaRVU5MwNPBYTHPDq2++VAfoxp5HtrOEemdx/GKtIhFtOgRaZ1yeHF+/mjI3nHUZsR3uDPOM6MsFic9Ie6zOcn0xT2XrTjx8NSzNg/D+kipM2FTpY2OLzi9HeLTRcBC+uMqHZVYGDeCrKFYRBneVuS80aneKL0Bd4QGKXLdrePiaAXZop3LYFB14/X1ha9fvwc/Djk3ktg6PEB7KpRtQ7WwSeHHe2he6gW4KnYB2WBUoydkKAVIYVq3TE9GDx2oFmQvPHt0ZYTjQeAI6uKgTH1CTVg06z89JDhS3zCQmwn7F2+LnF7ds1jbgrE4dqxf8Dbw1rEerU7ML4xU6p8D67Fa9IAL5zvznKNUutOop3f/NYVX72w/44brX2Gwvm3XZ8N1Xrj0y/2DzWf0FgXGrTfaLOJrEVH48GTmyZpAR2SXidVUyAhR3YgSJBevg3s2GYXRsmRCXfN1IDmx4BUVLpvyYSsUenhoZFTlTse5aAyhu4XE00wuH8xHKJdKqdHMslCwuzN2w+4ehaokF1JgqjDYSA1GHEl9PevO0Ow9lqSSPuL+TKhxwZ4SsMi8eB/Ho4luKNk/a7H+Yicv4SmXrQSBYjead0ZxvIaRkiequ6otO+EZYbiAp3GaNPxVKJ6ReKh2HNf8MBdPz2ZBRGkUJKN4P0OKMiMbeRyH54Pa6f3nYb2K9955TSM0DfYZIlxGyR/hwjWY5Mvv8vlDlkTXVGeI0wzYezIwheh6PRfeE8cvUcyZ1bO1pEmqxevqByZgTrSTy5IRrYgaWp3NEv5zp1rAiJM8cn44hYF6lMuGUn02SBRdkmHdBzUFmCO1KOhV0E3iOvK5TcUMy6irbEAtUb9IiWL7jYCgNyKKL+AllEdEzp2tMvsTSdelM0r2NjtMQzpPc+zlG5JMTRHN+yahxj8d4ESHTNJ98AkZ+pHitA6jB9tqdGyEAEAfIXQgDwPzuYBYmFChIwStJK6tPEGF/yqjNefid91+TgzXOZx9526cd3k2XBMq5PTe3GYNi0e43vfGvu/c9p17ux25rjaCAj/zOJ5fmt+lSaRQr2m0ApITCYDa0hi4hVIGnpGWz8iIBQkIM2cWh9825eVS+OqisGfdF3Bz55bKHVpCjeZzj9qaqfy+TlWhvlyoNZmEKPfPezD9ElOcpBIVAiIEuo+lHq+pgWgj8n4Q9VzDPLy5pLaXNFyeRAHbLeu8gqAxfXqFNFolRIcFonxzDyHVS6G+Vvasz7r7iLqsrC0jFxMklovJlJqPdBCQoMmJobmzoqTIc/sDI/SEhj0OvZJGrfgxoyyjr4eoK6HLmle5Vic/4EU49RZj3Y9jaJ+MV6xeYXzOUebZgCFHNLcir3n+abR03l9fi3VcA7n4siLP2UjRdTbT1Dydg0sW/bUmuywOFLcrPISFEKXDoOJc8xY2GxSX1QG51Es0ZqxCbQQT0Z3Sxyp/VUlJlTxgLNYhtbLMRkLZZCFw9x6RvWh8z6ZIhSE9rcWxppiN6KGlRr0U5CJQLxTuMU+r41fwS8iH2QZWJSFdxUQx15CttYmyKEWFJoJLKNC7r7uUaYNsK5OakGJR3qEeq36VYAQvUe4knagYNdXvq/cwXO5puLImbWx4v9PHK30M9qy7E5eUoZrD7NEA6dOC6evJ6jJc+rCgPm6/F2N13n7GDdecofCtxutsrM4e6Pl5nOtXyun33McsCov3e+d+36MZ297Z95193+m9PdRauWXNFTH5pGq0iifgD7VoI68e+F2oand6TpDdB6MOrETCJHob5blZ5l0SVvm4XfmFlwtVWtQqWRQcf8a5JSQSTG3jbnasSj6jjohE1AabXhGUfjPaW8f6bIw3zz3U36N8JsIReclJY0RfIslWEz3uT9sbo43FuptKUNF+ROjqGa36EgwuRSm1oCVUBwIuvAEDvwq+KVacITu9Cv2SFQ0vINWhGFsmqNUNkcNwzanYqYiFrKgbi3ix1sAUQ36Iss7Da87f8bRPbv48QR8iH44PjNMH/fTz/Dp/38P35wHLfKDz734yaqf953vLEsMjlMkyog/nMnceT7tq5ENCpCkApE5ntiZUNoS2EHhOccd5QXTrkY4jKhpC1TyZc/uNUgu1Fq4VLnjIIBWQ3rOQtp/suUMWofu8FzNyEtZNNBeKeVDxh7Bdoi+VjaDw64iSC0dpKQJtWbxersrLtWLXK7s3mg/qVRkXY2zQNCgoalHCYVRMQhl/pyxIYBASTuahOGIZdWaVWqQcbOQNmXluXxByXcgNFDW0OJ5ElGIt84GDgmQtl8fa03ekb1i/Qb+FVuOujH6N4+kxzOYgeKwUlKeoSpi9xh7rwP7NbT/jhusZL3laHb4t0jpv/vRzLlbCYpBZN1pr7K3TEg8es7/TbBK58K6c9ctJDo9eXShOVqgHJj075zqkdxXKAiaTzADU9FKy/QP5OwK1FK618qFW3FL6O5O02R2CTYQ9FTL6eKKmeqTaVSPVVTw8vd7GIVGV8IFMAeDsg7XkeFreVCVgOnFcRoh49hGtw0/390zhX516Mx+oVSi1UqsiW8A2UoSQNyC8+01CK5JUBRfoMlaEpTpQGWySk8iTmi0zeR9RwQNV9wwFzl5Y59dTXgtPI70KjiNiEz8itGOevwOZnBl7ehzf5wovpwjPnmzM+qg8OmBTHXmcjjkj9gkFTucnW+Y8hJFLRzKPldCBzC8+G8D5pfnR6OUV4FFkVaJjsXqk8D1RhvP0Oxsw8cygSTDlyin6kyEoHXVhuwibDmr2/yL7UvVj97VkzkhATicacmkxuSMIDWsmQ6kRbtHGoL21UECxcNp67zHXxULkXoVyUTbfAtZ3T6hQoAqmlXn3ZpnF1PrrbHgmWk0KQ5yhztCeKYL4nHmagDQ4ksxCz67RQUiKXmhMoYPZmVstBHp9RkDkPAC1lsXIDcYd7zveCtY3em+UMpO0a5H4whidmww5UQpzjrYOZuGXxmuVUvwerdrPieE6J6ZWNvqYsM/Ga77O+QQ4Fpx834Ho0DrYW+feOq0PenbpHT5bOyar6rSyzLkXiVMQgzKySaRn9DKmNmAs4tN42ewzpHkkYeXC4uCR97nUwkstvFRl7D3OQqFp/BQRNhXe7uHRjeEc7LAY7AHJhXcY6lRB+T8POsnrkGm4UiaKiah4NP/jApOmPvYe8KmRDMhciLIhmGeObDVKVNBNqZfCdtnwMpAtasYYDY/iFaQqZjvdBrt1LMWAJSWnlBFKatJOgcXsDZXP9RRwBN1YyCK6gC2nwWocArXO8nTJHlcy24UsI3coK8gxFNbYOrPh13jLTgAPUZWwIgXICHDuP+/7PI7mfiWeA8WPY9bTCUgaq1nL9W1O3FRimQZsDoDzcdZN9Fz7ham6XKiMWW+EAfUhmc/pUkWmEp6Dh8BQlaits3QI1TJaGB5OjTpFciHVWOBdiXYm69ZM8tBcB8g6xamf6WCR7xKHMpRKhS602+D21vAW46CqBGOY6Ik3ANeAFqteloSVbQOqhGILW0RHON0P2HR2vDIq7htoiU7j4phpFGsTZRjrEcy8lgdUONVgzEE01PhlGi0lfo5wzw5eYEZHDmINscZUFPCWLU9aY4xAbNxDmzSWz4MCf64+nM6fJUT4WAJxirieA4M5DOZy+R23nwPDNY3WKRt9Tn6fbdvZgNnTIZ4Wmfnqo7P3zj21CPfdue/GvQ366AwfONG6wXKCcJr4ilC9UL2iRG+dYpPWnRJJbvQ+UlR3YGU81G1FkJU9SIXA5FG+d7nwQWEbjdYj6uvmfDMAdYrDcOHehdYllLBzxIhDvQiU0E4sfmF/C8X49hYrthAsw9kRFvOsVQtTrRCwTInoQ0wwjcT36AkLzohh6ImlVwKGsbH6h+kmXL4q1GtBL5H7C1mfSIz5VjBxht+4SWOI0wWonuUGHrJA2bICmw90LmhBJTSUXVIfwOuXuoOzVmtKAWWHjCkKD5wMlT9IPNFBU8V+HWOexnns5WmJ5DH0KZo6j8UpRoekZE/+fdZhqRxR1hzHM4LMBqBUQrX/dD/WFznLMDOjkPMcUTmiufMFxKqa90MYGo0oZznyXC63bOluFDSLVSPDGMeLUTTSVjuMEb2oxJeKTCa86Ledei2hjRmjBlUo2zUgNxOGCeaFSQzZ0nCGsUpPywQZTvvcqVvlw+sLxZT+Zuw/7vS9BVFnwM1GFAprJAJsNJCNetl4LUbVjYvAj8cdUcsr76siMPp2gcglXzke3QgFnXAIuxUsHcf5lJSQe5OhIYAtShs1jKIE+cO1pkp/R0sLSnupoUJClJeUGDCAUhxsdEpvaO/c2kDboO7G9R5QqFwElW0ZrC2KZ9a/Wf86xtLRe+t4Ta35b4Xbfw/bz4Hhgi9CqljpHw3WTF6/5/WuSXt+Pxb40cOotBF6d91aFLhmMnNMssNqactaaA5Vwlmwe4q2svDSzfA+NQktoceImCiy1pH5+Sji1CiULBubGbZ3vAfMMBz2ZO+Zwb05o9nqEcSQZAIaJhKwRyloV/a+By15WERhHGXGEz7yPhLaIQqN00CIEDpv5LVkH6zp1U4kVUxSbSLurwNalXqtlJcanYk3CeWBkeKgVQM+9WjQOSRIJ0cE4SfvMB5i9AA6TSY5KlDMFOsKXZGUbjpgv4zAhp8Mkh+w7ryWkQSOJ8Pl58/kIhTRaXlwks7Dj8lenCSN9YeMe5dBO48xn3KQHOiCrL/NaFjm36ZRm4ZqMSQ4QqA1B6bxOic7TucxH/iEszOB5CqMWZN48s8LA/fBllng1NBIxy73lXTDEYZlUChHG0KHHFcSTFDJv2QxsbTQ0gzYsEE+7RntxOxJqTCLXXQIl1p5LS/Y3bAWdVPmluM1tDbjnGNs99EZo+MMRIVaSiLYA/Noo2N0GAaW0kvXaFBpEjmonhVQGnIVMWrVuetY8m49b8dwQDqMgmnFRzpqFtlDYQvFD3GGjHCgFdCBe8GpqSYftZ/iV9QulLHhPea9N6U05dIUeoGxUep10emdYA1K/ns+39kZfDaXfH6ZZ5PLc/rlvP4+5Ux/mu3nwHCdX6f3n42WnH7CMQnH+4eJBcUDEuyhjBEGq2ddx5yERMEgSS13P+a/nE3WswkLr2uK0oYydC72LCRm5ZgmLz5IYUrVwgcJDTIbI3oJ4XSHMYL+6oMQ0u2Od2P1i5rfUQjiyChIF8Y9EtPMc5eT4Vr35OkRLJFf8JayTmPm/fJ7zEPSacJxfUYRHv2KtkJ92ZbRYnPKBayFx2hbCWXrEcDs5KdMNEhysT0W/FlbUnL52qJlPMLwsroUy11SZ9APyO+8uFuc+5QdlOxxNOHDc58rSQ/d83NyaisBIHMS5zM9Rpkc0cthk5DzeF550xOLaJIP5ni30wCff9gIpuUUFp6HEMkSh9zORmwuMt8yL45zyu+d552Xa6VEdJOGNOqs4iOTMj2zW0dv5XXAOIW5fwaN869zrgyJLtuzsl/0oLlHbthQj0L6M2gmLgcRpzvVCptUrnrBd/DuR+PRWQjvkiSmuO/DBmPEOlCnXJsKF6mRQxshsyYtc1M4ZesgMxINdvGQAdZRnQX04GJ0DSYuHFxMsxF9uCyOOXIsDlfGqRawSw+2p8LQkKoyCkio2ARM/0KxjToqjELpgnZh68q1C9oVGZWtXqgefcx8Pa+54h2Ga8Kf5xaUU5jaZ83Je4YL/m03XE9WSfiy+PLZgJ0//jwhTxGXu9Hud/reGHsowffeaaMzaKENlpHW9MmWAwyLyV6JSSQJumk+9sCrk2qbZA+bNR2nNUrG1NQDXNi08LFuXCWil7EHq+pu8JaNKp1w+nqLvlfWPSbmPQyuKFx65WKVMpT2Kaj97p7NHEvQdkViAbSczGU5xkwyyFwrx240G9ysxQCfUe84DID0jFQEpAiv37tQXze2l42mjmxO2ZzLFfaqWLZ4qGIgRvPMqWiQKw4PcGo3zGp/XZyq7lsYy2y/vlrZ78AnjvdWZJMPcUZf8735PGakM/efpA5nRabn6GQGLPOWxUKfkJC/B+E9fv6A6tJDmFHO/Pca/0DPge5EzrFn9DTV8ONL0/KzjNgRcR3jbJ3Smbx73ux0vZPJ2MN4hSPhARWleeonyq4yWAT6JM6c28q4O12cy5qj0RJSesesg29oic7AeA3YrEAorPeILiT73Rmoech23SVg7Zvz1YcXvtJXLlxWp+AwXr5kl8LQJku4CN2NfQS7+OMv/AApFtGXO3UIt16QW8vcbjyf0tJ0lntOBw2pKwoankUYWXV2d3aARAcczUL9mM+sYmQi5VAiR4YKrSjmO71URhqvYR1PVZEohdyotlHHRu8VaSXyeTvoLvRdGDt8vFS6ROn0xk7Jiq2a1mbqeM7+XDuX6KBAzdad6ahNctN0eJ+dpO+4/YwbrufEAcfEW/9+ep2N14nR9bBoeXp3ZlHceu/se6OPPfI3BGtqYJhMNYDwLnwOEM8CSmaxYCRSVQ1VwTWgj5E4/hgHHEFO3sNb8dXwUlzZivJV3Si9Yb1DDxZhSzmnTWA3kpAxi3+JAuFhWQwtSJpUMaXtd7wnKWMLSqwUokbEYiFxsZBL8jAU5qlWPw2XRA+yx0U3GIs+PCISg1LCEMsm6LUgFUwGehUoA5POG4qVoFu3vrPnvXJNqATP3kF2en4z1a+YCH2kxmCbBkseW5CEsELksh5weJ9hXPw/hXgXBMc0UoeNi+DjSy9ovTMNlDz+W1IsNxb3R77QOh1O43SJ2p5H/Yz2Ax+UGSkMZuI1bdysyfITsQZm1aqQEYk+RVLrdY4C53iMcbWmT94D84NlGIu1UyhHy5o5+RzUs+eWRNHsQ+7EkwcqMeZGzgntIwuVAe/0HvncKaNV3KljUPWOtB4R0F2j00ATtlH4uH3kyhXenPZNZ9wG4z4CMszoawQVL4xFntkwY+89+mGJMty41oDyUDn6xA1PeG4gw2B3rnIPNXkAjRXCtaBcZ7egfGThgNhs4uLQLUgqURYTxI/iMdZFCkMLoxSaF/YidGt0jS4RM5uoCBdXNg+U5d4MaYZ259IE3UEbXExPa2UIT2vChtM5jLar2zJcEza0Zy/n7MiN0++d77z9jBuuJ6t0VgB4NljvGa55A8+1W3b8tB4Cs6Md8MCUZbJcLGYeZ8EmxHJ1znCt14Q+JmzgMx8U3p1PbDAXnmfYxj1rW0R5LQX2llGBpwGMZLAWYQxPw8U6jqcyRNymODtM8UFEW7lqSskC0Fy0V+8gOEbMXLByBTebhncu1/MD+XP1Xnc8FeVl0t1TKkm28L59YvUEDBucrmibEo/54GkdS5wsKMaTlWVDj8hqGqhJwJhR1xkinOMGmHmepSf4TOCZ94qnz3H6vIc5+tKcpZl6isweDnMeo368edTOPH5YcjzOWrWDHeiHeseUdn+gvp8OY6fX8/WegrrzKfj5l2nM87nPvKJIUOMnRDhJ0+uzHMKtIucEnKzDLi5sDqNhBxSHWIhco6AlwZbZMqXHYp/PW1qwCK965aJXihVstzRaFvB091CgSUdpBQYSpsvd6ZaEEolYsbhTi7IJFH0iV816O0tna44tkYjYiuGqdEIvs0hO6zzAmj52/kcE0yUJXwh0UYZUuhZ2dZo2mjQGUzPS2Wb3SxeKRXsjHU7pzr05pUPt0I0ovwEkDVHku468YV/dkC+07JQ24fkviPDncXYeb99x+xk3XCcM42yYnnNaetp1/h0ecdczXJIL8dgH4xaNIltr2ZBwZ/jOkL4W6sNRj/43Z9M1xSgLStFyIDHDGKOFsbFMPGsqZnDy6JPVhoMUZSuFV618FGW0qJPy4SwN2JwU+4C9h3itW5AovMcSEGdWUKlYM2w3+tsICn0RdEjQkFOA1IUgi6jCheiX5R76gknEGH1Ee3YnFNxzoi5jNXNc5MVVRa8lkLgi6EtB677KAKSA9Ya7MdTpM6ejh6TPpFl7en9A9DRCUwlDYPcgYNxYRmwSKFan4sXUO42ZRVOPxTGHxUGJN5ahnyvUY7ZmHvA0xvJtNTA9TWx/+HEseGdj6lHmO4OgR5pjfHpJH7meDMl0HE7j+/mVtsInAjFzkdP9X/PGj/MaM0Z8NFoLhlRJliHr/oUPpnlnyoPhOnz4Hu94KE6cPQLN/ZN8GHkuJwlUHaRQVLkU4SLORSzU0BsBEe4gN2GTyvc/fMXVopv1/XOjfW6p8BKRkls2cnWibc56GJG/bSke7VvkwFrryCV0Qyl7ECQC3Y6o3+fZj5PKlkM1pMLl9c6QQAsuMouQD1xtEjUmZFgNdDhooegGWukadaW7DW6lso/GLo1Regj1+uBqPQyyEXT/hNClO5/bQPZB3Qf37jGPveBS8FBOZQp9RrRVuXPNDl4b7QQVPvhjZ4fo/Id/e3NcT9tztAVfEA7Xq/AQXc3FaNGPh+FtpPpDKEC00ekWgptGwGIufkzAXPDUNTNaCRWmerNmUBhTIiO44fQR1HGfq2LxozfO0DQ4MUk/vm58EKX20E6UhCM+9RZpGolFvveItpy4pqkVWAbUqlStXFzZ98HeDWuESoVnofNcWJWECYnRciFgEyGhN4EeUJBnSBcGO4xl5Nc4uthrPqCM5vSq6FWQzbls96jtEcetUTwEh9/Mly3Rk3c+p0fSSWLCeK7pO2GsbsBnovHj7Fg8IbTJHpxjZptj5jSQxCN3wun8E7Z9wOv9NPCEWOQno/IprEpb/u7wPZTg3/ljRlIs8/XOQVbYc/y66rLS2V7R1HLc9PB+y+n98zGISBcCtjPRg3n54F17jDfSeKWb1Jl9mqYpU5xYFCMXbPmaUzC+K3IlqaOnR9jXAe8edPhaV94UBkWMWpxNHL0pfnf85vhnZ2sb1+3C9+pH7BuiI/cthKKnEPSwMKUup1yCyNL27D5orXHfd671ymu98FuffxzU9hLEqehensc8FbOXhIYnbMdFUpoMLtfwanoN0QDFM0+Wj8FJPUehDyiDkD+TgsgLo/gS176PC/fSuZfOPnZcOuod5w4WmJHooKTAtTTj1h3thjbj5T7wcsFKYUuCynTMDhdj4871BBdeF8Pwi6jrNAYfHKbvuOm/epfH7R/8g3/An/2zf5Zf/uVfRkT4e3/v7z383d35K3/lr/Dv/Dv/Dq+vr/zKr/wK//Sf/tOHfX7zN3+TP//n/zxff/01P/jBD/jP/rP/jG+++eY7nP7JEr0HE/6E3b+IxJIqP2WQFvV62Ok1VqX8yVwxUfvp4S61ifm/XKTnCjLzQ0cx4RlyPD3uxdiTKIx15UUrG4KMqKC3ZBn1yXIzaFNHc0w37fgZKh5hUAMODaVuIQMMk/V6EJZ9576FvBKJah5MwofbPAdoOgTzfqhKGMqqodQtqSsns+9So/gelf5+qsz3FFCVR9hleuLzXtEkocD8fY9XtGjngAknnX1CsgujhPfzPKzn/u7Yet5VvtzpASY8G7bTMD5Gz/HR8zGPr/Pj8+ezOi8U5wT5s/e71IbluHc+x8LjoR+v2RcDfyq7fLGdQ0hJyvt7m8wvmF+SV3cyunPhPh/TjJxHEcIEizfyySGqewJqHcSF6+XC6+XKVrd1jbMUYcpEPZRiPtzaOCe3KJO57YPeY071AWMYmFETcXCLaHCiGpYGlDvIDfQO5Q51B23pVLqzia2mkRP8DTWN6F/W82cbSjelW4moRy40vebrhV1f2fWVm7xy54W7XLlzYfeN3WvkwoZwn68O9w63fO0DmksaqcrRH3nLLuGPr35iFX4xxudYfH59x+2nNlyfPn3i3/v3/j3+x//xf3z37//df/ff8Tf+xt/gb/7Nv8mv/uqv8vHjR/7Un/pT3G63tc+f//N/nv/j//g/+J//5/+Z/+l/+p/4B//gH/AX/sJf+O5XMRfTZ4P1PE+eF6Cz0XpgHhrDO23sjDFSPXnQzeiTJODLXAFhNA7aNMtABO6lp3NMTzKlW2YBsiV+HBGLJ/U6jciIn8WVD1q4ItB7tEToRu8enR8GyBBueySIvRNRUZ+Gi4iFpFBEsW70vTNaQz0o65IQQsgYyYJQz3Wp0yKFdlrmMhJa8fOCNvc/eVlTi1CroBelXAqlgLBjPsCi6LjYHR13yrhHiwqfhNvJFcyi0nMJvrGo7txYBsp3gknWQDI5z+747l8UHJNEUbHz6nWYkgcbsSZejoV5T06G6LzcL+dgLsg5Zubpv1c3D3L8ezlEevrryRwKEbEuMsZxTQdtX07P9jDSYo/7H2PZU2oIZmLez4vRnEdT6UU0SxT8weAczpiHXNOKBv0h+jzEgqYLZ+tzZifLJRGPhfM2EtWIdh9hsPLmlpx+CqUWvvreBz5+/YFtK9SqlCpoCWfVpxU7PYBICx5GdQoyWzM+vTX2PaK13qHvjjXjRSslle77Pug3o98Nuxk+EYDPUN+cyxtstyBFlAbbgBeMojCV5VPnnoHSLF77UPau3Edht8JulV1e4qWvNPnArh+4l4/c9ANv8sobL/m6cGPjbhduo3DryqcufG7H61OD2wiSVzAGj9eMsBpbGMITTDg86rcOh4hHQ/XsRH3H7aeGCv/Mn/kz/Jk/82fe/Zu789f/+l/nv/qv/iv+o//oPwLgb//tv80v/uIv8vf+3t/jz/25P8c/+Sf/hL//9/8+/+gf/SP+6B/9owD8D//D/8B/+B/+h/z3//1/zy//8i//7k/myQt+eO+97UzZOu93JsE4QcbwEbJCSX/vFuoU0el4TjyJBW7K/cycjhxK6puE4rom/GRJtZ3amZZsO+sJvyVRRGwaiVjNigqvtfChFKp1WtsRi8jqPmnbHhJS+/0Ezw2iMLiBd6GWIHcUCvdb6glmq4TIXQWNVVNlw92O9iA17qH0WHl9DNp90JvlLS2nHFBKQ424hpItXcpV0UtBtxTRtQEjeiT5VqIRZ9+x/Z6iw/CSLeoeH/1c1nRNbmY0NckYdyKqSuMwZnRwdqflyRhNSFPSE1f5Ejp7YCEmgPIe9rcG2un47+323nv5ffEj/ns2gSKFmfeansFc8qOb9UB6iYh4GvPzOZyjsXy+okRrDovF2WuO7/kVLe/HtJuTXj9ZiMAqds7tSBt6pu59ceWyJSMONDZCqLUtzOE9H9Q82pqUUzNNayFyKxhig7oF6agP2DZBX5WyKT/4g1/zsX5g80q792C66og2PHdLEVoPFur0KCZMDmHUhVTVEPrv7Ay9BNx5F6w71oWvPly4WwvptDfwN5AeEa21o7Ow4UgD7aHTaRp0jK2G2LC64FZIETN2Nu5eEauoVppfKXah+EahYH5lmETdpkmwKW+Cvw265ROoSrcLOx3TxhhwHxe2/QXfr7RtozeldIVesLFh5WW6LESJw6yPjBzX4VJu6di8Y7BmLnkarnk/v+P2U0dcP2n75//8n/Nrv/Zr/Mqv/Mp67/vf/z5/7I/9Mf7hP/yHAPzDf/gP+cEPfrCMFsCv/MqvoKr86q/+6nf/8vcQk/feO/9+Nnwz+azJKci6juEhfDtOckez3YAnG/B4SAlvLL9YEY0Fe/beclgNFBdEePIkH3IceVyxUIJ+LYXiMTlDdy3aGHSmQPg0gmkIB5FonlETqSadkcNoI71YQUullJqtH47bc/aU/FzIPMILD6gxiyPzO9Yif77tQvTOuxTKVgIiLOkdyyQrSCpdh8EUN4r3BVQ89PxJt988VTKGHtHWhAI7S6Fjlbo+ROansGFCZfOZ9oxIThFLEGVOkegJUnzwlVZ0PS3l2Us6vPf57xnFOmEY/Kzq/jBm14FZoURaHJGHC1vckohwzmP0FKGu6O8YfzK/R06RHhl5nc41BF6PEo+SL02YS+SsZnII6k4Z3rMQ66RmWOa9zhd+KP2dleVPkLFnzy1rqOUYEU+2amW4oi+F69cbr7/wgn4Q/OqMq2FXZ+SLV5BXQT8UXr5XKB8KXCUbc57GyzL4Rr93+j4YO+jQMHi7UYYvgpNP9MIk9C2HRq1dEqesOSOZjDGWAmmZa4bLk3yth+jSmGuUOzElk5Q0s2dWohmnJdkqz6F70OWbV3av3K2yjwkZKvch3LrwNpRbvnZKwItcFoNwRVgTQvSK2zRacixkz47SNF7z9R23f63kjF/7tV8D4Bd/8Rcf3v/FX/zF9bdf+7Vf4w/+wT/4eBK18sMf/nDt87zd73fu9/v6949+9KP45QwTzW0WVj7fMHn6fW4niq8nlGeklFMWCJtFjsunlJFZRkqBaa8kfEIJiwYvEoy5jDYQCXjQSWaPLyOJHMwlOefrMi9VED6USjEDG7gZKrLGgUpEbxHAzJqppPXmIhvCmbnAWTR4tBRd1Vopk5Qwjhg+CCLptauncGuEAm7Ty7Sk7B+G+4gPIi4SASkBDcqWenNpuEzBVfFcdEoSG9STxivh5U2pT9Kri2sXzDQM1+5Bd58QYfYAWxHUCQ52Pz37ucOE7c7jJhmOMdz80Xu0+XzWEQ7bMt/wdwAAd/xkGMJuniKZNU7PA5m8AD/d37K07w5P4dygNA+XBmpem/j52ZxOME9I5rmonU7+0ThHHd3UzzzwTl/x1XHuq3zBsyNvtpU/9kravE/R1jGf8mm/2ccrxmYxmLCeAzKiprBojHNVQbcLvVVer8LlZePley/Yp4HtUcsoDqZRj0ldriYXBb/1yEndbfkMCyo2cPFoKns32h7FwMPAzVaRfdToxWCbELxYWZJp5g6atVndcIveYJGrKyDJ6POzDuB8no74IBN90eersGo01eNqCmm8LJVjtNBL9OZqZtERwhQbwmWAdkG68NKVWxe2Lly9hCABUcuVbTkZXh7knlYk9Rw4vAcVOv/vMVz/prb/9r/9b/mrf/WvvvOXvBsOMw+x+NtzkTKOOi042rbnogQ8RF4uHj2teqftSYXvjZ7U9RVlnRMU+UAEwgMVDfWJGmxC0ZmXsOUlmTvNovZqzIVISBLH6ZwAVeVSK1/VioydUO0kwv5h7DkA33Z4a45ltCHZnNKHUzxapG81+g51y2LhIkiN5SM03SQhw4QxnZTgYDHqos24cb/vjBaQi7pGtDYfS27BqJbAPrbIf+imyAVUOzstnqIKY2/cR6NZQ71Rs7/PyP8aSve6GkAOV0xqKiL4wSCcMCFPz13lqJ6Y+Z3z5FkiwGnw5qI+We3OymXqHAJL4um44EWTz4VkrTYPPta0pnFuMolCHJ73+m47TuXBGgFHgvYUPU7crwgUO7ozZ0PSmBt5L2YjrPn3C+GcFA7JqIQSfUZaeEJ9oVans9AQMM4JemU29Cg+xWcblZYRdD8ZqSPp8cgc7ad4Y6xpoUioqRC5nzJu0QRVFO5G2TYu2wv7ZWdsSt8qfIiKDukSJQmfHHsbjGqUjFpVlJcC5aa83Aq//SNPON2PBZd43v1ujLcG252XcuFH++DujY+1I00oo1AJhyyeVMyRVaMvHhZY07Ow/INGbdbskj4NVohl9YA0ZYAXZDREC/gtCFdlQ0rFxhbIvjvlFvls9XmXD7p9dwEreBfedsc3g+Zc7852EaQql6GUUlNx/4DnjcLOdtyX55zV6X59EXHB03z46bZ/rVDhL/3SLwHw67/+6w/v//qv//r62y/90i/xG7/xGw9/773zm7/5m2uf5+0v/+W/zO/8zu+s1//5f/6f+ZcZb55M+pQmMn7y67wdeAhg2NgZY2dYOxUJ25JkikX+WI+mSyupl6dZRDiJCNFaW5j5I7NgBbmnYGh6j/Lgsk/3N/pubapcVBdsiQjNYeQCNiOtMaWNMiKcUYf4UQhtFo0esYxfRMiqlfCeS17h5O0mGcVy0SYjObNocT490akaP7fItnjQ+1OFQ4vG7xKTz7OA080Zs9zAMh2drMH5EyIyWeKecqH3gjUNQ5WCudxZ0Zf0Yzx4/vr4zPMfMxoZsbAteajGYiSemYneJQzmmXlJMuc0nAEppBHwx15YkmMiBguLlXGuI1tEnjxNeXytavZ8Q6blS3JENn97JB2pLEdFopdhtIOpp9fp33LqqCxpH0XjeaiE4YkMTGRh6gnSLYtScERjZ5bkegx532fR7O6YQwABAABJREFUct5FZC2NCS3KZJweCpQRwQ029vx3o3iLFjYW0lB1u1KuH5DLK7eujCLRN05DlHbowOrg8r2Nr3/4wg//wCt2Vfy14B8q+pUiL0QZyHZ2AGJ876Pzed9jXKVx82QaVhEupxYynk6sbpFzo0oSWQ6z78mKEZFooKq6xqcaieh4OkvpSdlIId28ZwK1CKUqpQhljkV9dIzNZRGOu0UE1kYgMb0PWh+0YTSTdDNODEKPJz3z+48oBMec8Hd+/7Z1+KfY/rUarj/8h/8wv/RLv8T/8r/8L+u9H/3oR/zqr/4qf/yP/3EA/vgf/+P89m//Nv/b//a/rX3+1//1f8XM+GN/7I+9e9zr9crXX3/98IrtHcN1XqHOnsD55p1fcxPWzmYNsx75rYyOIic15Z1g0X9PPyQpuaqnkD3ZTlHMq/mSIzeztOrOJ3IKt4CqyqYlWnWb5eIrUZSbsEEs/Gm4ThiyjyP3NKEQt2hfMuGf+Ka4IZ7Gypft9PVXYEGcS3vwdOY+le3jSOunFIJFWKM+TCYP2S0NF7gNzHqowfuRz1jn5XG2Z2HP5hVriu8SFOM0Wr77YhKeKe8zOjrgwBlmzzHix895D7vgLWpdPGWjHhpNnsfWOUI7M1bPEc05FaVP/z5bqPNQeG+4Tvq3zGg+IcI51pQonJ3PMg3XZNjJ+dzOxivfk0oYubn/fJ1USzTT9Ice+GMeUh/G17yOOe6P23Vc7MNerEaT6wUHaJbf449GUjzaiUTPt0HdLmzXV8rllfuI/JDrKQ3AwNUoL4WXry58/PqKbQqXgrwo5VWRK7D5ala6IlIJBY1b79EziyMqn/nk2bYk2pKAlNnhO57VuaHnpOTjnjkuSb1Q1rUfUzL28+zR5WnExDPTVYQyS05SYo3Mu0rmXf1suDwkpUamRYJJbfRumUMrdC90D+ZgqL+XB2bqu0br/PpXBRA/xfZTQ4XffPMN/+yf/bP173/+z/85//v//r/zwx/+kD/0h/4Q/8V/8V/w3/w3/w1/5I/8Ef7wH/7D/Nf/9X/NL//yL/Mf/8f/MQD/7r/77/Kn//Sf5j//z/9z/ubf/Ju01viLf/Ev8uf+3J/76RiFwOMdmFOknBalE13wBLmsbd7Mk/l2CwZOG0JrUa/RxqDZIfO0+iJWyeQ/SaaKYsBSYpGWktJGOgcLmEXEZQc8/ZCmi2X8IEggwlW3oNhOodyc8W97aBEqzi1ZilOX0CYxwVIWRjdUr7gFVb43x8tU0UjwJVWqI68zjZgfkUJGX5aQJ5C1Z5wW4NBxRFiFu6UI5aVSLkmXIgxUc0vdtg79Dawj3hN+ioflefBZqb9z5cYLYyi2K3wS+Azy5shngm48ZZ3ihkbqLXNKGKGYYbAEdOdDmDDGvPd2HCNc1Pm3zDI9Qx0lPzQXibk9T+iJ7M1jP6/u04DFHeaLzcPzPj50Othkf04jWf2IoDY7DFW+fCPgwbMwdc1nlxGZqCN6REB1Ga2j1BSMqd2hT2d1OByFVPNk1vsBbKzMJY8yXnPf8006XHh3QHwNPTyK7ks203Qp6Hbl49c/4PW6cfutf8G+d/oYwba72SIx9aY026hyxeQzL6+CvAQZorkwKgd87MSir7AXQ2h85E40ZlXu3UI1RAXVgkRrcQxHi1JE2EQC5lZniIERjV5TtUPVqRIvSWdPLbAGYwMX3CLqNIvrFktjRaA9UjWasZZCqVFsPKbBIgxp88iB1cx5tx6vfRi3HhqG1wavKVqwxrNzlJG8M0SR09/nvDr/hP97Ddc//sf/mH//3//317//y//yvwTgP/1P/1P+1t/6W/ylv/SX+PTpE3/hL/wFfvu3f5s/8Sf+BH//7/99Xl5e1mf+zt/5O/zFv/gX+Q/+g/8AVeU/+U/+E/7G3/gb3+H0Z/HNGV5zlntr6dItob3T9mzAZtRiEl5GH4zeaG1n9L76ZZkYVlLef5JDymmCqSSTMPFsTTahz4LJjLaM9JLyRBZc4KfzCz35Fy1cAB+NINFO/TRb1fQzX2aTgj4h0wGkgSpEkWS0QYn81rw3Jb1xJrty5UMU20KWZuZK3IncXObaSHgMDqFgd5ldJ5ASZAypkgXLA9TwqoF/0BGLyv6S8RTpbU+/u2cFV6NiXfBdopjzsyNvYbz8TSLXNYcFGVOeIseVx5r3fjo5LqvW7QHe+OKZPA0lOf+U0+I/jVck5j0nsBiH+MX83AyyTu+vOFdzp5FOzYnBGGb9dALTaJ1hvy2jpwq++XFul9Pf5vslIrWHyEsD0j1HUkUHxQz1SZqwdT6z8ug4M13PYaxkcwjudibTcHy5EM37ua7yESZZDQ2dVdg897ZhXK+V148f+Pj193i5CFU722ul3nTWodATDhYr/H+/d2Wo8c3nT+y9E3Qo407HtmQpJslirhfgeDGGDt58rPYnn+93tst1+dG6aZAwLKj10cfPZnY3HBGL04o+b44UX2STIo5OR9znnT4YyWqGjGAIz4iLFMfWiXZ4RIBLsBTHCAYjnk60hSO895E9CDPiah2rA/OBUr+MoJ7hgPz+BwfwvO/Mcf3fSc74k3/yTx5e9jubiPDX/tpf46/9tb/2rfv88Ic/5O/+3b/70371O9u8GzOcOmMw+f5zm4nH8X9s0+k2kp2Xea1FgZ8RVw6byQKc3rPN65+elqxwP/4wq/IPNqGnmvzyPtcC5kw6qUqQKqpENBjRVnyiSETqIKkTOOEGOJQqWLCliAQpw2If9clsk4PJqODqj/mRIkeeRmakmLBG5mqkCJPV73m9E7yfRJWIPnOWqsesZGRB6oR+kk7NrPBhLYfmAUZZlygovoPPflrZW8unWsZZymmx8zjkj957DTme5TJqfoyV+SznqvxgtEg2ni+/KRiYx/4TYpQ53k6HfD7ejHxT8H0VLJ8u5SFIW3BgYeUUHyDKMzT4YNz8ESackGLur2Kh2j7zVpLGy4+etzIHWkaisXhaxlHnZxi5uNkOozCIpfAZEDwmp89ndr7apRs4729G0znHzCOyuV43Xq4XNMfc5WVDe8Fbj+GRy4dY5I9vNhgtun97arSN4uEAnMdD5jXdw3B5MZrYov93G1QC7tOilC1KPObYi44NFoZ7lhmcIOwpHix4RFBPvtc0XOALntdUEAluWsw9mTm1QjIcg5SCPwD5CRn6Yk9PlaCADLN2ta+amuPWf5vhktN7773+n4i4/t+1PSQYeIy88u8zRJhq6+8ZrfxsRBKGjR7MwmGrvcnsk7Vy8Qqu6S2JZk5cI6F6HjRBLYtBha2BNhIqdJeYcDIXvnjqIgQxTIVLVWqB4S3yFwK4c62a+SpnHxZ03JMBxo4820zm930wQo13KXxM2EmKZq8fZzUfrOG1LeNFtnsZlq5BQhk1c0HzEZS0W1l0XLYSihkl2qC7OrYMVwfrWbN1JODDK5xLY4JUvgX5InUIZeoQvjncfGkn0mcuLYbDkqBZj/tkhHJciAmzC/GEDGeLkLnrnJUz2Q3p8U/DM2G5i4dRyIhfCqlEL5kfiwU+ekjJOqVgrOYYVkGyXm5hL1nuEbZQjqFe/DHSmr9fjvekSvztBbgSxIwtoi9fyftjGkmNouHKoEowACdBIs531mKd706SN5yMWdIYyRGHOSURgHBWZtZqXrcga5E+GzRH1xGXkcTD6ZFjXzNHi7C9VK5boflguPCDj68wbgGFWRTQM0It5tOnBsXZcF6qs70WfFPUSmgfTUOFHxAYIwuync5OIUSFO6GhuBVF5QLaYYB2p/fBbs6eCVclqOnHoh66jO4j0w8llW6gyCnnJwfu5j6YkmuzYATJcpMaEVfxUBWpLRCaOeYs77n6GY3JiKt1eu/0NrCabYz0tNael99phCZOfCZrnA3Wv010+G/f5p2ALwzW3Fx5YH59q+HK3d1WUnL0IDxEhJLwoBxQjQgr3zX7G4sQZIyspVkTylnwoNs8v+lGz4hrGrCIFAvK6+XCpUBVA7NI1pJeZa5b7nGeQUhSJPjqsY4mRXhSWcfICE8JOMRzAZyhY/a74kyhLhlJaHiTs7HLvO0pfI2UXMZycGtVSi3US0VVU3bHMS2hhM9AbI/i0VXKOAHBntN6euwn4zMXjtmy5Fx0fNYfXFHM4SlGlHNa8Oe7TlKeTwZujpkVps34FFYkf7JZMy90ziGdMUCZIXKLertwetJ5gayHIkNaiVfxQ++xy4qk5ymsMTif1ZUwRjN3NckEFw4jdp37ceyXn49bExdexB6YgsHcO4gTMQfSAJ9v50P4eJ5yksvql8nmo7j4IGW8tx1RmR3PJSOyOYoB3j6/If/C2e+Dl5crL9eNwsZteIhK20ikIHKwP3q7oRdBKry5c7/f8Q5W80rWojvDa6LYXxwjDKM1D3k2JNmByvVSgvTg0d24qdNLSMdB9BSLOspZm+eZ5zUqxlWMTaG5U32wGUSLn0I3BRugA6wh3hAPd6GoELqJRrlMt69jPVTePdMMYuGQj6xrK+70EYpBlz5ou9FujVEaTj1oA/PxPBufCXydE53P/LmfsP7+brefA8N1jjfPhusUrz6ESk+v3GaDu0MZIwb3SCFcTwHZVc0p58k62V1kuudgfMXX+4qEjtcR2h8nQXr56XdK1G/VTLjayolNlh2nurD5J8912pkQoE6oMD75cLeWd2tz4faEBGVhEwnArLbmE66cSCykaLAc74uCVE2VjNnOJYzVXGidgUxCxtIinPmUsPSGZO5A1r07R0kB9fgJ9uHxOT+uobHguE/zc4yPb3uR9xSWp79wmyzUPZjovgy+Fxb12IkFchnRGVQ9JLvWyR3Xd9ZLnH7ZJJWk0TrgXI46rBlxZVTlVSL6uxD5rZn7mky5GmSA1ZFAJtznFI5eTufb6BIR7cwhzoT/4v7J6caveykgluN73lNWTD1hyMNN8WOgzkN43reT0ZJ0LiQfj+OM3rnfdrZr5+VyRV24ve30PnPVyXYlYW/xjJyVTup3qHCpF7q3df4lL2s1xnbWnPBhaBcuZVsTXSQYfsMTzVHHyhzIkszNkGIbxZY2YozRiG43GYuo0RGEns6C4N7BCmodtYZajbIAHFJ/cVMLWSuN6+6SwsTngZ7XMcyTXRjEtNFG9CXskds/3eTTQ3kcwj9xPp1f//ZChefV5SiCPO5IznTXg6gwJCb4s+WfAz7rpMaw6L+VdUWWgrjRCZXHD8uJVCce0UVQ2XJQpwitL18nqPXnhTgnZBSyenhhUrheanZdnxqHlmtaeEzdnDamYTxJSM01Vlg1Q5LXiLNyb3MNnq1PXOLzszbLmfVaceaDk5BuiVyiezR7BA4yZwkRXd1KdFROum73gZWSUdqeXmJj6U9L1AWllgJ6Su47EXH4hPbe0UTzU35qLbR6mKnn0bOMnz/9Pm+On8fYzKWwop3JwJs5pZkb8sJi24MngWcuxMfK5zq/Y66Ip6+zvKFpxCRlgdw8HSNOhsujWPhCRFyVgAQvJDlDAhKc+1zzvS2M1hIuZiy2XqCHh7zWvKPhuMgyvDNGOoCquR8Pn5tGalLZDwDwXNI6Jms7Hh1+yu2cnuLDwjnHe4CJDtgYtL3BiP5bivLbv/VbXKyt3JSVUF4Rg68uIJsyijJ6tv65Vl4+XLm3G711cLgmh/Ke64kTrRU399AE7cq1KGqO+wCUUqJLcnQ8H8c4SLp6UeVahVahq0VRcA5G9cFFOk1mAQIYQqUjbgyL1ESxjTL2JfO0+TXusQ6u2ZwVZr+/rK/0YIJO5RdPg9UGIRrcgnjSd6NdB1vpXMQIEPjpOZy35WDxvrEap9+/4/Yzbrje2967U3LcyDOFc75XCJzYOtbHKoTt1qEPbETktaq4viCnxORUlIqm0jpZO2hEEZDj3hnjjo0WIb4n0wgS4kvDtcL2WHu0d9wbtPCKVs2yBa39vnt0bh0cKvXE4uYS9FvMaCkVBaFcH0rXSf0b4C09MY1jTRgIorZqYOzWImlf5IH3YhyLt25QXwr1WqiX6IArPa9ZQV6EgnPdd4wdzbLGmsrvkiBhPxD7I7Y+G6TlxbMivTMv5znSWq8zVX1wEGxmZLPgODkdECC046RYjBk9rtkLmTPigFN0neSKYs8J+BWZPBiGucg7+CnOGb7yY2IPux4wX6pdnCOuBQ/OnxW4ekRcJXQG475P4xF0TPEgZtTTKvNclXVE7wdNY57YES/NcgvhqP2axcuNKH04Pk0+7eMIyqQvafIQQREqfjJ2PqMbCZKQuCE+KCV6UI3RaO2Oeg8WnhLOVsK0d2t8JcZXVYiAybC9cTfH7yC74rvRMipeJRVkeYjB2KOTsF7yKtxpfefl+orWjZ7R1hSfdss5pmFwg4gnSRzpIA3RPRpLSsFVkHFL3m1BGHRTXDyJF0oxy5KzyNcNBq4N1UEpBnRcYi6PvL+Wd3SkuDLdaHuna/QeHFvHavQg9DI4dDHf2c7zaC4M57X2NCV+L9vPkeF6BxMCHozYGS58ImpMJfQohD2J6ea0mV5+OPPTgB3r5dQYmziCaC4wGp5XGMaBe89/LwsTZz6ymC8X1RjIwuYC06CMPPUJaw7BGtnlmAWVeVKmQ+x0LiSBszsxSVQJuj4c0WhhRStMGNOD3n80LZnRVvA9xsIGWIWrchHKq0bEdZEkcBiMgahTuCPeUHbEz0oLUf1/qGScW0ZOhujp+wRWx+QJlw0/Gj/OMXAyWos8wgFXPXt/J4c3nqsFrW9FUFmYuyDBIovNN42nnIzj2QZO73YxBZ/m/1R6mgZ5xjThdGXxs/naN8J9P5iAJ8PlWUS8zq16FhazoM0ik+Z+PIPlHLgtAsax1swLsNM7kqbrMHHHE/A5EY7ISk6Suitn5vHs17XH98wZIhDSYetbSCoEyDJnYQi2UlL02VDboVc8qSJ4jP/LZeOmoJtwKZX/z9cbVSMfPt46Wh0tULpRGlno7oePMRfiHFOWMLu7cW+Dl2vA865QaxSx6MytJjjkw1OIf9Am3OiZn7aBahBiNjGGeLoQnjmukfftHkuZB0SoXlHv1GD9UMTYZbBJSLxVdWo2wF3+mcNIklZ0bPbUIHVGTWb1EtO2ZAa/M3gfBvJ6TF/GEQ/R8nfbfsYN19lYnd3p83vvGK5TGDsXhdVIzk+Gy0OAc3nJMweUEJLMhZ3ZIelgRC0cX5wQxY2Ox6G+MftvzVbs6UkPUhoqCB7Flc1gthI/oMe4ot6d0Vg1QrOKXTxzFkkOYSJqbmmI8viadHxnyk0vo5VzPM5PNb87zzdvs5bjIyLTaIFchfoilAtohTIvbvRAtWxHbMdtRzgKjs9J+UMHPKjTU/tuagIuA6T+SAWvB8x0RuCAg2VYmHd9wRqP9bzyNLkkouCToTxgQXmACHPXsOriUc/2NFQFDkh4Wqf8sqh9y4PMiG1au2xVIyOOLfMQehivs7KDPBmupTuY0dmjJuDJcC2OfpAxYNEh0qidLb0k7DTdI0njG7PiKEmeT/CABwtTqDcdFmaUJUlYmSYzM7YyxQWMADIH04MoiYcIAfNZdlZV3/FecGrMiREm7ONlgy3aDn113fiD379w35VPn2H/9MZlc0oVtmpsTbIEQ1enhXOQLBozGgcz+Lx3XrxQVBgZwVUkemxlNOLKWgGGw+6eTbPj4FP5vtK5MJKrE+N3eJQRBLswe3X5ltFkR2xQvGcaNQzVUMPU2Aq0EZDgXKsMGCnEq0k48Z7pkh5kjTHScA17XGqPofu+IXrPeJ2N2Hfcfg4M17Oh0tPrKeqaN+ss2ZMfsaxXaG1ks8jZdmRq+M3RmoczfYze5lLrlRDGBBOjiEfRctJXLdukhD7vmRE54phdoQibVa5W0QajWWiRKTDCGFWE++7B+tltGbdzi5RZR+UukXTt50jFoNi6Buuy2IGUiOKCIwtWMqGdNGM0E9mFXGAy0f2ilAvUK3woqWrmzpWOagNGdG/tn/G+Y8kmPBiFx+J1Fg46dBpOMyW/P0RiPUZyzyuveQvk8T6sa59/d1myWASK8ujrJEro+b6cDeRkEKbxPNdKeWF6LrFI5ZiR08RekZWf/zFPkGNxCJbA8u6pCeOuA4VBXoZ8ql4sWrufzjuM4dTUnADfbLZ+lCGsE0vo9rgd8+RSp3xFWNO8jYyDNPeId+0UlR2STbKIH6z351FmLDW/O3zFo9y5RAyDrX0Crus4uifVXJ0qgveQcKtAHWHbXwX+0P/v+2wl0Icf/ebON2/wzRv4p4bXgVehXYwCvErBauVzj/ZGjL6ea/h5howwbPfWKD/8wOvlQvmqMjRyx9et8FkF253eDNco5BcDm6Uk6/FPHcaGUCjiq21M95gTiqEGHaObInahWFL4Z8pB4FKjm8VIZ1O1hLEdJEhcMBdKT1KOO+Pu9JIMyN1pl0HfUlrqd7M9R1fPOa/f4/YzbrgWJeL00m95Hw7jJYfhSpvh2SByJIliZE4n8uMx8MLjnMYrF+xlCwqzkeJiFIqAj1M0d4Qx7meoJXDuoKfGIlZEqArVO27xiqBLVxBwb87enL508w7jKjrZhGEg3SJXNxdLMxhj6dIHa28Qq2vjUARPSZop8aQpEhvInaMqIdtUDDanVONFOx+Kc1HjIs6rNtwa5oNm0PzOIKLPSbMuEounrIWz4KdlbdVSKRwK5xnpTNZcPyJWjKizE3ICH4ZkroY+o+fM8cG8j2lkfH5GTkNLDqN0Ot4ia+gKAtbfBD8lpOUwYqdgijzk+sw0kLDYe7PGTCaj8TQej3/OA+YxV25hElSmGTj6YZ0Nx8wxxieOejryEzNAnIXGYTIOioWm9ZwA47nr1uOaNU3TNGJHfD2ZhdEBWE6fOGDFwygeRjPBCcYwaok6qqJEhGZCVecHr4WvVPl6K1R3bp86v/Op8elHnbZHF2PZnWaD3aCn5FIR4XItbFW53zufvzEYdpCC5rM1wTxUOcydly3EAToexCQ1bIuofbY68RFzSWLYR27coLgBLZTr3UECremidNd1Z2LIVDyhQlLzkxIQgGadqeh0OpNdCOGyWKwpqnOtS0LWsFgXJ2Et0yczsl3bt0VQ50Dhed/fj7jeM1znn+dbbDzUdeXAQcPr9hG5pPlwLB9wpFZO7sPitB/ncdRxyXE2MheSE+42F0ROugJymtL5a5FUDfKOZV7MjCVvg8Dew2jZuagvFxMVzXoyWcofmAXckm6ijYAUw5WWjPgIiCknlAxfkIYLqbYRq5dJTjKFUUCKU3TwIjsfdHBV4yKDj7rTpdF9oAPEB92NwZOUEEFYmdNiKsc/PMvT45XnaKeyDMNB6z8Nh+Sh5Lr9fgHktCImRzpF+XJ4CY/nw9M+M480/5Dw6/ruabSMByOWrIjjmRDXKDl8H75n/n7yYBdLPI1WDNtTbobDdMXHZz40FspH+nvIPU3jOp+7+mPdlYlgCeeSNI8we8fNOUwO69+PrMJHduE0qLOxpK9z9YwYZ/HxyYTltB5uVMnODBiTm3pV4fsvla9UeXXhdhv8+MeNf/kvb9xvvroqaI/IbQC+wZZKOJerIl7AjM9wiC1nq59I/cRcaT3qQUWi39xwj0LoRCu8aOTEluHKMZDPVhyKGeINz4S5MDAZFI8O5vOORN3YhnlDbFtJb/dwJM6OtMt8XtFOadjhFM4BNA2XpcLHkrtLSbnp/z8ImLwXSZ0NlP+E/b7D9nNguPT0+3ydV6ynbd7I9vTRBt6IJoyeJApa1j4kGHLWZZlPzyPW0vRsgldYDtHnuex7YuDeg+mTT2/xxjwU+cK4Voo6pQ6chnHPY2g0bzQN2uodrPuhrmDHSCka3YxFfOXsZlhQJJK2D4Z4OPiGlLJa08sgCJHdlhGnCvUiWaMUtOKZR7mw88LOB7nxfR28sHP1nY/jjbsZO84d2FxpDncPmErkAATnUnYUmh4UPRFdXqlPSaWNWDy2fK6zpgvivOYQmX3Y5pCYhuvoT3rci8M3OMbMjDbO9WszQX0O8s/1VOXp81OGajIDjVDrONODz8bPOHJU07poGJD1/RJjcDktHsdcF/A0w6ejdBinGX311apkUuAfi4KD1hNPwii0RaIxFJMeauFsKxrqFA7axlTZfGQfzi2ivaWPgpNUdcb6/Hxwj3HYvKoj82YiaC3UrbLfG199vPDVy8YvfXzlaxy7G//Xv+j8xr98o90db1CHMEY4gmPMYwivm8I1OnazpYoGI8bZLHZvAnt+u4Bs8OmbeyAQ3xfspWBiNAbDCt0qbcT9KDKopVOko3Yy7Q7YoNg9SkQy315k0BDayh8K4pqM5R1KRe0CFgbPSj2GrypIjeaZCh2FdiLjCHiNSxvWGNboVhmjYf9/9v4dZrZtu+tFf631Pqq+Odfa22bD9bF9RcAjIQACkBAZYAQ2EgF2YskBL0FERIAEGQKJhAgCyBABxIQgJGSRWAiQuCScwBb3XqGLLweb/Vhrzq9q9N7bCVprvfeqOZe9X4ejtTdjrZpfffVVjRqjP9rz3/6tn941A/caSyILn72n3YtKxZ738z16WfvxA6C4doc5Td1dkqR637L6Kdx6xj0M7gM7O6OvGLIRFEhphbA4BhcX4LqG9LIkCOVkM38t2ijY9NaeZzCBD0ItNtE/Y9xZDK0CEedvJh6OyDYmfnPTAu0EqgqNmi9/PTsxuyAcsfYCUWkFG+JtyDsQbeRHH4sGqoNQUBGa3UnGfClwkcYbOflE73wiN17GK9fxnuP8HBXhYsJh8I5L2MDjQThmd9Ue4m6Gf7Z7k1QUU3kRSmt50b6f0xOT+d6JOUiPLOv6jCkwJqAj3yfxPcZDuDFbh/h7NSzV/Hv8LA53zwJvRrJusBRnC8t9hvTWMt6R8lK2y0rlSFjSfbvYsXlU09oVL1hNPYcGWtDve89vlWlEJImuIwtzYFxvDyr3CahImtxVCeYZqAnW2PaHX1Lsj6nGnPV8QeTTCfCrS8/qMQGQQt5d4kEWNguDwXEcfPr2hRc1rgqlN9rrnXcdxqvx+joYTSM37Dnudno374JSiyuroxaoSjmE6yF847PG7d49WtFxxpabMe4yadoQeL2d8N54864witIPoxSh9YPbUG7mfmXl5CKF66V754fw2jAchHMDC/YUNUHvBBCl80ZxbwwYdkG4Y3bAOJkwaMxnVgiWDyEYx2YniQyNW5R4mC1P0J23YKAPBvnrQ23j9nQ8vvzB688e2v8KFcKjssrneTyNphmrsBNmY8Tu4bNhlvudDSL4eDrLN6TC8muZVfwpOcx/7r12HiuP0zpONFcUhKoHWsyymVRYV3iB6DD1kGYU5E6IPrYxdvh3J6muf4+/x9J7kHUtFqFUS28rwoijedW91VTC5gz3JC7Sr/nQxkVPXvTkhRsvvOc63lH6tzD1oKAYtECFpXDbH+DqbA3fztkQGLOclyewhJW491wGG8s5ZTqca96TRd6ehL3IrAvai4hnREU+8sjXP5ZencXeuzUtU5nN/GSChXJd9Xy7uDJ8khcfLHFbU7wHBh5AIQ+Xa1NxrXBtGhN9yzKmulnhvTq7F7tgTCXiPX93hOBa5zL/3Ycx/S//Tt1gowm7kA/ev87twxUDnYrZHHp+qconh6LWkD7ot8btLvRX4/Vms6WJdWjdwQrW8caL6ryjyWDjERTjfnbONmYtliTt2CkL2Vmh3TvnHe63hr3xFihDjDYO2lBOU+cMxChimOrcyzOtEKQAOYcyBGmx9MWol0a1k06hWGN4Js1BX1luYw5lSWM1A7HD8BxD5uiinnTShw2mfBlB4D0yjTJi780E7eZ5PSuu58fz69/l8SVXXM8xmvy5K65drW8jFgwaNgzaoEXnz9471puHCjUkeNDBiChiHiaYvHb414osQ9u798qc2Jz4bEr5IGSYUWp/UQZakv7GIOCtaVlOYWG6pc12E8YiouTJc/PUlocqVZC8nwy3WF/CIxVYM8Y9zql4qLB0hpov8ru5cH/x7xbpXLl7bqvc+bTeecvnfGKf8cY+Q+SbDFO6CaUbrb8FOxA5pjDKw+loHtXZ9MlkicKpJFJpVVuhQsMFyGHeVyyLb3cnvIkLG8NrnE6we/w9vNihuzLzh808mc3XdjJfn1RZy41Hz2nfvBJKy0JpSSguyftrc3n5SYJtXrLm7vmYObAYg+DWs+Q9tBFKbHm67ukEkS5OdKzZSTeKg4WxfalDtS+c0xNLCIZBKLT04Dy8FatkrvdChigl1jRT2W3DFj9lWyPLGwQX3mv1SGqtMMBO1Ar/j0+/yutnRrsNztY43xn3V+Nb3xxYi754zfe+DEfcVS2rAWTzfTG6cTsbn79v3F+H57XuIHdDTpDTZcQIsuNx75yvxuvtRO+Fcwzeyxkl15VuNewXY4hjO5MWzSJ0b2H0MgYSUHVpwS+qg6qdWk66KIU7FuE9Gx36CVq8YJ7KrIHUKDUwQ3r3MHWPcctUgxh2CWN+dPo5/NHGJB539haW2NkfOYH77895ru/x+JIrri8webP6U3DpM0cqYYSbYIkk/JgCHpI6qT9Im7G8G8Nh6SN6CksIIS/dp9T1LWfms2zMwmNjTKsmt7BvQW/ZXYpGF2VnfC8B+CgIQ5UxhGYjenDlWOQ9+jVk52WnOwpvzDo55RKewBga1+REvKkcXLmFJaYgRb0gs5bgdfTQKdUo1bjInU/qjU/LK5/qOz7lM77CN3nLZ5y301GMZlRxo+Dg4MYFV7HLsxIujBCQNkVrpZt6Zf+8TXnwuqTgTRFzPKohO6ls5pzS40pCXjHPc+2KYPN66OmxuGC0BSNdy87i/UM8BhPaTvZ1Ft2TZ5wGV4K6u0OptPadned+enkKAyQW7/a3NKh0e5/FmClQhMLgoHOhUydrSZuKJyHrC+mZZEMe0j0m/XdmcSUyWmMSJFdOz6PE2dIMIbyrCFrFK6sM2pGMqeiYHIoStZO+y/OGM/O2wB0Hndtn7/jvr6/wjc4bEy4oxQ7G+057hfHOOERnelcolOq1jVIKfYA0uAhchrO6f/0bd/q3hncheAWJhqWWRgdBXNsUa4qdyvkevvIjHpJ8342X4z0qhYPKjQuHGIcYindR9vAs0yP34JCvLemC3t2YyJZKl5cGopzcGZGoH+OOjeYeVXEYhjECkVwdFCyZRg2TI5SkDUdg2mnOCJ8RqNEYo0Ffda25P57s5sff19L5MJT4PRw/QIpre2zhmakVgIc4zoPQCas34OTZviBsN2aRbk5uKrxw6xM04JDTR3txhQXjaVimy21IpWXzmrNweBLg7gESE8yco9C285KLb11I/G2toBVeiZ/JqmEyCz5hycm8B43eRFbWuBi2Cll1BMdg40LjIidXbhz9Trnf6TdiwRuqjUu5gXZEetjfy/4fJrQt3JSTuGwI265TAjZuaSguOPnGIiFXkKs5Ok9gDFkgiggVynNNV4Z9lgyNuXlcNz7Gks7yI1JRtvclY32PAY572fXwfvL5ei6fQabStjnfv+jxRYl18lFLV1KV7PyAgz3ElwCIWRgc3kCGFmVbT57H282PZ4TguqP9e+ZatHg271/WNt4uPlk38vyxCEjg1M4AYufgfgrvzhtHvXAthSLKeeuMm1GGt/3Iq5hF+cUNolK8lVBVOF87r/fG62cdu7mHlV65y4FtgtxGDaY39/QOK4gJxzix09netfgWrSIcWBBFWzSG9Fu2XO9mi1wg51NdYapFqNe6R4Pmw8OE2e9L03N1W9aRmZLrMNYvRmIARkQZR3THGBG2HEEb99CT0b7NB9vP7/H4kiuuPMLTmuY3j/H/kbGaHUaYR8SV+8B6x9oyIZyDTKZgcisiFlkIoZn+EpDDm8llUSSWdV4rA5XnsLGFhObl+C+uCDXgtX4znteSqL/CYfA2MHu8F5dKTh9hEGHPUFwCKVl9QTvUzkxDefnNSIUEGwwxVCvUjtVBS5oqEaSCJpCEwWGhuKzxwo16u2Pf6tg7jcarTl1zvL2jx0nRk2i5xxAPWhnQ0ZnmXxa6beNl3gfJcNDFPo5piB8sT+sN6CWaIMrgzuGF3gehuDYhn61D4ntSmSwUaIz0blFKKi1zHE3O+5ZLndDpPaQS8kVCcG9LYN6Lyfb+uE5PTW7raa6BlHZLkVpc11Jgu4IZiHTK1sRzN403PRc/FxkvJPnu47ErpCwsT0pdX8n525hK6yH3F08SAL+W9aYMzddbvnMAYqtMvdqJdGE05bx37KqUo3IthXfvT8bNyXLJvTrr9OKnDd4ewsuLYtr5//2PO5+9Oz1EuLfOaUuR7MFQujkh8gn3d41LPzjUaDb4+vs7WuFyaby8NES9i5cEFP+RwQaXFVisL6dlylSFRWmJms4xzYXlZAjB14jNqHqVaIckvocfxEcs7JnXirzfaIPRcdRlcLmWUqNGLh4PJTlrOX4/vaz9+AFQXJuVtsy0R4WQm/95J8ZhsDofmzdTc/g460PJ3N6FJDyVLmTSQ6rXbKgMRFMhCJ0Ra3H3mNYFSIYGgsFdFV5q4VChaAA2Ih5uKOdQ7sHgnBRMCLPZoIhwBJmgoyA9VJBhNUMI85LU8G541WWOFXB+mhAuOvyzqfcT9aa+ciUElHtad164cW0n5Q68P7DPRnSU9poWA/RqXK8nJt3DkyKcFLyxoHDl5JgAAZZw2eZTEuKeEdDdm6lgb0EunsR+y/vpWdy5cK8Hp16wq6y1cbJSpDBDNcjydKaislQKvkYsjAwxR2JaGXCHbEQ5MQfkNdpaWpvScoNHw4AfmwBjenOmeN4q17jl9eVrm+f8bMTFLyJZcLz4AW0z7FJNDykQOS9XRTm8zrOHQQvjI0OjJS42zY0S6s4LjNukMSqBJpRtc+r89gSORL6WRD8ubstcDg7mWd6jdIE72N24n4P+psFL5dNP3/BZV3r3cR1mUL2LQdZfIfDVTwujd77x+cmvfvM95+lCXBp+3mbQVihYVOZ0zjpBC66/98b1hJfjwifXg89+7X9gapSLYicOsxdhjIJ1WZ7ScBShL2lHsCp4rmsUysB7emVeN1IPvmYlWuKF0hMeyV3EtzeRr52RaMvv8g1mIT+c7ccjFdO5TONuDwF+O96VPr3nuzy+5IpLPvyZltNj6QcrDPN0GAH3HLN9dbalnyHDQOVZWhVdomA5zqlGZtbNPHKcwmi20w5rd3peU9HadmluCmVOyy33zd61CPBYp3+MekWWnJprx7INiXsPc2Ox5/TAa4PCFIsNLFHA7Oj9QDhp3geRe3BLvejgUKNqJPptcIgi9eDWb8gZIRBRuI91+2XExheqeIO8GvVEVfoUVNk/11RWiDA3wI4uDE7HJJqV4l6CWnTwxYKlo9Bl0Et5QB4+FDO3HEMeQoDCHKLpeT04zXld87nFeULQ5evk+2zbx7EmYi08zvLmmWycUQ8rW7ZFkNM5LzqF1A59mSeMZzpX78xJJWIWN9Q8pxWkTnEvK0dJnKEH1lAZCasHVLa+a/ZINbU6A+xWZnhvtsKMU0HFIEtMTiq4jGi4lzC43Tqv1ujXO4w+96SoBpuEhzoPAZHBu5t/5nZ2zrMzuoRnnMZGur0uZyzmw6YFkRvMQU7nq/H2WvjRl4NjfMOp14KlZhSDZM0hTxt57/i+WWYRXtL8TiQwF26s2YPcSo/WZhBKcD6aEvbpNHLCKpvk0qn0bEzvy2ZfQj+nJLLw+bCPPH92Jp7F9ndxfMkV135so7CDCvfBeva4Yh3ORpEjmyWylFcu9ETSRMjHO5VIyI8VtvCfGRhZK2EtqhQeGXlOGWRkj6USG4lhQfXiwmggK1w4VnDC72tZzklsarl799WUcHhzIPMIC23mWMJhyYUt4lZW9gLzFWPzXLulexRPNB8MjjG4iDpFVLujWdRsCrfMzwnUAcWQ4pQ8XQuHZNfdMzgMO40+GQcGMjc1EKzwrHAFtlp4aNIY5WMh2GYxcXpZm+KSrA/DPFmdNVhEAl5ClFtCmJcaELElBTZds9bnk9EhDytlGRdPiieBYftS3w2RuRx2sO32HcQ6IwwOBzuY13RFDHJEiNqmKkoLIaDhU2UJuQJ39Zqeke+KHiOmLAbDpbgqiWb0HmxV+kQ05misNc1DLq4GMaV7ObJuMQSrDTc0xxjc751XOzlvN78mcfvmqBL0NP65EqHk//bZyfubw94z7zNzjdu6SYWTA53h2yleDOw03r8ffPVT5Ueub7lSsdbp9xhv9eaSiIfxMuqyPJNUhuk9SabSoo5QyC4Ku/kxFUzOo/ijxGxoGKZTTGl+MpZtyEMs5OFI+RiGwbfjNe3r8mOPjym+b/P4kiuu/e6/g5F4GnD3plI5yUZWG0wOXko+ecXS+vbSK4MSMeQAVeiEqIUCi0WfnpbYo627NqezbxxVqJq5BN9oZhJcf8o58GZz24Y1a2RMwC3mDMFkvNuVRtK/TIj2w2i6RPYiRAmvYtG92PAwgw1X3MOc7DcZvqt0Dm1UObm9O7l942R8Y9BflYsEl+PZsfcsJXORzeMR9DIo6ii3I0OQ3GO7DVJVGuo9ig5XKlkkPGVeIcoK/CaHeDgLjMYRSMUyx0DUr8EuLCvUpWUoAVvWqLHWWoRM0jGevbI0Trorlvhs1p6nce46PLwaYVFZBQIwheSDR5gF1SKJUme6gc9VIjuRjCxgRom6qaXjXAX1uR6Z6ilrtZQsB1+GWea+EhLvXbM6EhmuIcoIBvc0dA5uHNw5OLlw48pr9GRr21m9NHnHHB6ZY0tDSMDqilok2bAUkEM8r1pgXAuXTy98ondKM973gl41nKbOu9vJN943Xl8bt/uYOaAZSs/bPfwX6eaApazBO1mjJmufyxh841uv/OiPvOXTT97wE1/7Eb7+jVe+9fmN8/VGxxlRVWoYUOKIWI29pswbFVE3qHKSa6dpCdMu1Lpb4uFo+fo3OkWcnV5VYkmJA0RqeHY7FB5f336qAGT0VGQTw/bx4yPG0lyTuT/zuXzw6W/7+AFQXPBgXj5bmvvxEY8LbIUAYkI8N7pyUVmniy1IPD2t69zua5bEEnpKgDuIEy/FKttFWP4uioinUhM9mKa4DQv4+yr+9WveLPu4lhH5CyfXDUkuca+pMkUemJ6TRmgakOJX1s3rOYzwTsb6ztFsFiWrZosKC9KKsALFx7dFnmC0vhLCOVdj2daMBQAotoWVxOF/wxxW7YwdYU9G+BCLjY44AXBY0J5rXMmrZtWDhvOGw+sN5TWVUyqYDUwxUV1m4VfknLuVOjPfsOwo2xdeaiqL/3W+TyKsMzd6YVNg4H3AbL2eod3d/I28xX6eyRwfCjk9k4nOC09hKqO5pPyJQ4VceXg+KZVZsMSLTfRhCYE3kYiW62BMPy3bddRoILo/qrS591IlrmdeYyZeW+GgKwkC5VTOsPK0gTiVQ+AQPsN4LUoT47gopl6X9No637qdnOfwvNFGLOBrI+YgPC8fr7RUcp1seS58LVkoPzWoohxH5bd89Sucd+P9u5N2KhqcgkS+zUqALrLuMOJ66R1ZTq4YHIMhx1RaPYqazaDkxQxX4sSelzBcipq/rkS4lGhuGumMuaTcU7Pw4kZ0zZhh0Wd0x8cU1wbmnn+Xp/d+h8eXXHHlsS0ieXzp4djlh22v7YIkN3EqhbTIbXtbLoj82odJkCX4JG3Q/NLdI9yTNLkRXHElijBzT+DX1aNuy8OYm+KLNepCJFWTuzQ2qV9g5U6exg1h5lPmn6OWrXtthwgQvHoJOJgIqBJpxe3UGiEM/07v7dPvw/NkxZankHPhdACBIUkEWY/Qhgs6v7yV0zFL3o78rlTN5KsuZMXhIylwGsULuMfjuknWgAnEiCjrpGTa1pAbDpHXsXUav/kUqsDc5LhhsrTCGu99zQYIRoSNozCuawPOegI9r30zf6d3JetvKfQ0n245rN10tgWLAFj0tOvIDK7Pks2x9k9JeHLrEswGatE5Or4zvb1Kp0qL9jcn1dqsAVuKUeZcFnrAxsfy2GVXzHPxrVCemnsVVXgP3IuP3VGEcwzuvfG+dd6dLdb2tPGWEUfORxgJu53a13s2MeKeftoBI8+r/MhXvsK7zxvfKu+5vfdO5Jij94ga78kGV2L31zhRroPMVR/Jpx98JxapBAKckWHTWCjOAhIGprB6yAW921zjeS/bsszXXIHN9rpMCZXj8WSjPRhi+7jtJ/4ujh8AxfUxVf7h04cj3dXt1z6iS4Hh9RD06KHlimEgYAVGbB6IBeCSx1uIKCoFtDBLJCAsNeWDAuj43EQnSUGlIiTzswsDvxrz9ghDaSO9wk35SS6jlKwen05udxdBiqqbX5bWPSWuTcKyiiMUVosmVaGDGFFIK0HumxviUONQ89YIA5iEwUK9KNKLK6337+N7Q6CmZyNANQd6kDx6Xn584ZyWfpcSBaMuzLLtSSboU3Ft8oTJOxlGxUDd++2yoMc+FOtn7gyRmT+zvM5Q4tPCyQ0fEs9ccq0NPacpTwAfrNN8PFBtpnclCzwSrSmkJJQ5pEEISlMmXx7G7EptKciDZVzCE9YtN5rH2F5tOFzbG8VrKBx/T/buWuRdPtpen6f0UaLEzs0QyF5cnqO64ijUCzcuvFJGhw5Fuys6XfPmQ2OrZKG5BzDzTWMT7vi9Uh1Y0Mugl8FZlVLdy/rsPHnf7rTeuedaVDYDJYyLEnu9KHp4g8pJaB21f07XFcZKsqFImqLK55/f+cbXb3zzf9z5iR//HRztDeV943//9ROlgBm38+7sLQXPzZFrMBSKeXmKHhLkBMpp1wi2ZqB2hdEzSZCpCiKf6YBh7+4shyA1wp3NorQktW/zCzBPk9vIQmZfIZMZOsc7Rdum8NZcbH/biad/eHNcuw8KifL5wDV91m08/W5ptKa3JRPyOaOIxuKtjLDRbC4ZntmyVlNqLKW3BKyHUCzCGZaLi40fTVKZuOntBX/+3lSuuwPgl2QcUijoZH7PFi1AIKwHNrqjBVWi5miyDaaWxfBmeT1afNeqK/wirtAyJzhMPIdBkvxoUN/gDNRiYD3gtBbCk+XZRSgsk87eckFjilLQQYnuiRrj5yACCft+AVDSWvdPV+d0pHjRMaGwZz82W4XByXoxHdTl0djDBov5Sit7U3wSa8PWW/15hJI8bDcgeyntOiwU3CQDzrBlurKHbeEvebLV7MHzsD0ntzOhzY8sIdeloL6YgVTyaRYs72yYAzNSfC1FxXZGYmOA4WjTea5A22bJyIU71e4Uu3PhdPBO5pAV0IHW4TWEoWTnnHWcrovwalLpZGw996i5wG2t8Sp3vv7uFUbz6IXhnR9yPCsrZbCXVSR6UJj57Nm4k5VbLSZB4SX0e5+wdBtwe9f4tV/7nF/5f/93vvaj/096M3qrnO8HL5eDy1EoQzlHi1D6CIUZ393V83jY9LxFYHSdIdUxH8S+9EtvBmJRVJI6MHPjg+mspzNkWdulEvo44uTxxh4tToyxxFyur91a3I2AhOr/L8WVx+aLyraZf6PH/tFc+HmkDLLt9z3/tbTTegMsQbZ9h29Wmwpn5czsQVA93I1KKK5MTKxHXlemW9aF5MXZ3MMZoLT593WTZoucJ+PWFsilEO2uuCxCAmLewmBzFEcocRthnUvBZFG1GsVJRctgFLfyg3RmgQVm3ubx4WG9sgnFhVyccxAitEtAshNuHjhzz4O53+b5Qg8LWozRRCAm9mVHJAZv2xzonWbqNznm2rFNCMYKicGfP6fwCCUw18NueFXP3xFgg9Vxmbnkc4lMXbsbbbY9Z+VyE2wxKHQraOSRFhhi3wJKYgRTPT0rrTTXIFP6+bxvn4k2HJFbc5qpO9WcasoLcMN4UJCaAANXqpKLf587YpukwAzDas0dMIzeOieNm56e941pLXv+r6TRIrOswrbxc+M1dlVstMxhiQhVFOkSLe9jAOJna53PP3vlV///3+Drv/YN3n3rPbfXznnrvCkX6lEph8J58w7hNqC3FRYO0gNLcZWGyjb6u4yZZVaxKHQtgjxBrIf1PO9L5jlTEmRI0J7+Y2m9zHXt4uZjj1Rm6X398CquCfn69pTWs+LS8JEEb1+ihpijfGYeKYpFJUgKZ+w3GXWfD0nQwDNc3Wcu48QU24SMLx6tBOlFmM3DP7NUVw+i3vyyFWsWEoywLb15jzKdUU+9yNygOyuIkewakEFGbOBxhXkjMSbqRKMIQyrUK00unFw4ORjaGUfHXoz+HvoZBMMqTr90AFeDF/HnF7ArdNVgzUvFYxRODmyGsCqDgdBMNxo/F4fZT3dZoUENOIbffAvQSyqshhOpNnMrPr2uzmJJONmdOg8DpSE611XM0rQlbCEM8zG2BZObVnzNUEAuMgWwFQJx6WvFijOV5NJYn80n25x/RGllSNRM6FY55SCZFgZJ2ZRnSdXkcPhUrM6jJ9s7XHv6Mtspuvwsupvz2yEYRyAJL9wprXmYrCfiNuZHoei5PthtkSOnV5T3n0W4qTTamtveB613hjWoEv2obMraobiHY7JKGQYzJZAGXk/HNLYP1ShHoR6Fl1q83f0tcg73vHf3TN69u/H67tf5f+n/TjHhfmvcPr8zygv1Uvjk00+p5zve91deR5wj5rOffm+liKMpY18XNffyLIzFIUESJHTTpUzEDQcQbxw7ZU6aFbsSDCUVRivqYK8e0ZsRq8LPkZ7Yb2LcpVEBj8rqY0TR3+bxJVdceWyK6/nY466y/UyUVRzhZ8TCjE1rK8eVBYizNUkmZmZC4cDzRWX70u190ytYhvcOQJstjyuopgJxKiS3tIZbdXG1KZkkvsMALUKprpB6W4tpDU1aX8tSlRmMYy5hLbEm48Mjk+GRT1jy0KbX1TVt6IObXfnMDi8ufmnw1gWnR4vMqZiCR5C3zJqrVgunHNy50GZH3Uz4N7KfrUXGy6NDC8pxIjhA38EYI1BWklRMWTSe3lUwIcyQ4T2tfheEEkrL26GFAZN6Pqd9WpDm8Oe5pFYGbi7EubljDQkrBJsbuoayyjqyGBvJ1iy7R7YsDv/GsCfmsrPlUUyFY27Bd5UY0SUClt2e4mm19HRLPhGdk8+EGeiWtJP6w3mWB7YrQwsYfKPaeDAOHgCYAVaYkjU94DQqUjlPTzbfZwEkkmVcmcBLdVQctgzMLf8i0W/Ow3OunZRAOJo5JVzMmwTK83gRrm8rpVSsdBcHTRBKhPQiXB8lJP+f/++vOeEvQunKefdi56/96BWtynVc+OwuvN6N3psX62eIXgZy+DrSArX0WQeX5MiB/507ZY4Rfk0IjgBWQ0uiRnIdSShlQTTy7LFU01YVOhahUgugyBz3fQ5yDnfQjPAoGr+H4wdEccXxMcWVrz8rtrSacjtl3DrlfUJAn88VyisVgXsz6wvs4csyg5Xb28+Wc/1wfTNMJCvvY4JIdaZngbLxjH3sJtObm1Zr3qTAJN7NADkyc3Z5+avA1ZP/eyXPDJ/Z8iompN88xNSpNCvcrXCzg6qNcnS4GpaG88AVVwrmC1gRTJUmB00qya6W9r2mcrY1igYZfApHZu2O2Qx+S5avwnF5zJU03AsL5SWNUF5M5m8LI2BGRub82dLuQsRn5IvX4Uen7dECniHUyuzw7MXQDoWfgnZfQbugSEG+5RhW0WoKeKOH0sri+ZXZym5oPgMj/r4yXstQMBZ4Iv+aymqiAKcXnz6wG4AHjWKGjjQWLFxjmQpqNekOARye0LQbY7h9nscc+yQ7dozVrlgj2fI8Xsqk5Jpzp76+rnp4R+Q+6KPPSxQFPZR6rVzeHN5xnEIVp5wSVTd8NPoohGFip9ED3XutB0W8/11vRqmFazkYxwu93WFAb+fq1l7CwCLQtzIelFaWo3g64JEIOZepZq3plAkblHBbhrmw5n8hF4JA1Xv1TVEny4B7PN1SnM974mOvfQfHD4jimmbFFx9fMHheXiVBdwTpIRmyl10xhdNmURN2v+wnnpn1PItbqXuB6YxVP1+UsIpLuyMRVWvcXqMo1DIofS3GXbX2MaBBrSUspWkm+TXpLA7xLxt9fW9lhi+HgFa3NNUEkwgRhMCY+Vo0hLm3HrlTudnB+1YoduVaOqKd0kOZlhBOF7BdcWmhTU/roHNMbwsIsK9E5MMvImG/fVeuIVAd7l4CLSUr1NdBTluKKS33UF7cWGGoHvItEFfA7uimXbItJKblKmnJE3aDPrx5Lac4z2PBsSHheef4EHVIKFv3gSfD1Z6+IcAMmutWvaYu3+giz8d3oBRZVLhqIQCn9+VfkCt9lQMHUpXkxsuh8fq5GsS3CbvfzCkvNO5jjr1kfSS25RZlu0mbymq37vf79xh6DGp61D1wLiJUK3Rry9iAxR4RDBqM2DLDa68+vV45b4N2b7w28VZHKlCV4+3B5ZMLl0+uXLXM8Hc/YLwHu8F4P+hHd8++4i1Rwug7qiK1IiJ8/v7O27cHx3FwvHyFdp7IHV5bh5vflwB64NRpw1d7rSeHCAdnzIgv3mIdzfE3D/cJ3rSyBALaDe6MrS6DS/baH7KB0WAEWMt0rPX6MbGbk7Kd+vt9/IAort/kkO2Rv+9J7CBK9f/VJ46QRTmfMwE5wevzdL6lgxkCmUncaE38UGkuSR8D08Pb68FUosg0PD56D+SaxCWv/6Y1nO68BRAhlMk63Ez32LQnSlxRZ7gzfmRuRUGqugAbQst8gGw3ksNoIA7NYlAZemDHld7ecOudboNPrgPa8PKmExfG1X82PchalB7ZrHNTXC7yHc6f37mwahk8XCUFUzxOaz0+1W21omhC8k1y4l7WfNj0yJblvimeSdGwn9/W2sqLJJRPyN+l2OKuEgmX+avpZeGeVpUVTs2Q4TPwYr+OvCyJNZIxack3RZIuFp6rf/e6UkWlLzXoUzV5MHqv2fJTNjxHpgGSzz3jqrJPL/lDbkF/VM7l8Q5WacJ+Txmjyvud1hOs9Z2LP8dkKedUYN0GTQd6UUqQSXfOidh0lK2vd4fvl7kGvnW7UYaXuFyuL3xyPTiuNRTW4cXNCmzIX1X3sNIrKVXxUHJct4XBGzDU3gff/PxbdN7w8nLw6cuFT+sVaZ2z35EW+HhT98B75MJNOKRDvXPn4M4NFeWUSuVOsYJaBe6Y+A66bfsq5Vj61kICPHytLjH5KEAnelFtcYbmHO2h6meZ+31UYD8ciiuPfZDnQMYop4CR8GU2hZIhxUlUMGNFz7MSNC+sMOPY38a27x4EX77gClAteeGYbzIjCgzT1wopNuHsseFmzBFW11p/v1fol7whV2BslryCJGhE855DEWyh1OkpbHGFQWEEstDwGhwZge3OS5Xt8iJfYzicvifDQm6ebYgmEAAh69WyXbvtE7d9ek7Pc/I4LPPpNe4tatLS38sebDpSDzM1v2CuIaaVswChEpbpJpARkiTYC57X82QymPmziOzmfczz7od89Om6ngelumm87UcKrBGCVbbBWoFDh3FoXL8XvD6iEt2o6DMvlF+y57xkGnQ2Z8y/aR9gYRn9m5Vnj9f+UWFomeNZ7zG8E/PZG+UQNKjRtaiHxDWCD6HQj1Ji+JRLPah2IAPGOajV67mKFo9GzH5VY9HBde8WPDpBMMwDK4tEn6wkr8Xci+rW6ebfrajLgab+fhWPiJw2lYqoIDXKC6rDorCKRJmBUtEIKRheW1qpMwjvyjPlnG0GkEdZ8rns6y/2YIYMPzTYPjI38pHHg+z7zo8fbMW1D9I+iPFzKqakz9HcRKGEUgjNcz1N1HbCtZcW7uoBPLpJv6m8BkzqHnMLCnxD5LpYW9truNoIxFB4gIZ3VvbrKF4DptXJgSHCg+6NiS2p6HJV49rw8ORGk5MFtFnv5UonILOptCLuaSahtOIhXo+m6qFGYOXPJhDUx3uh//Z8yeMj68Nith6gA7tYnGd7yvEs4S1r3BMzPFgNIPv+N1nPjQWL34SmzI0c8z0VuoUhIO7BztoVH4SpjIK+KT0uK/bATehVETJRZA/CIMNq+XvqzlxjHy7UpSgsBOq+JuPkY9rf+TWRaRSZdrmnOxf/hUYeS/A6sGJ5hj2InnMTyitzVXlPE0SVm3Ifb1vj/mAwbp+f47DvRx/LMaDZ4Ha78en1cOJnFKnF+fsEp1MzpyU7qmBaKFr5LS9foVqFLrS7J85MQ1ndvNyjq3eX8AbExrh7q3s7LUCFMThFZsRFQlH5FAqX3IvYHH0JFKxYrImTUFxx6yrQHL15Ke5zgUbJ+IFSKRyYNQznQHF6AyHBTRLrVbdoQMq92S1iGmM2ja6ZEUmZmEwxeXws3/U8Z/oFf/82jh9MxTUHlTU4+yBuVuyz6rcyQujYFE6SE0TAZdVWS5Nt4xgjUKwejhMkSExtgxtvkmZakkS4zYVvFWeg0Jj8vIW7CedwV111kFznCEgHqQWrzr8ko8bSXKXPupnwzu7gIAwKAYoMwVmUUnxB2wB0MKbF5cWbYlCGrQZzCF0OkBcKjevlisirK8wh/j3VPDQU+jNzVI+pZInpWnVhe1GxX8Huka0NozjzhkoSvj4J7+lFyVJWp61w1RZenAXn6Yn1+YUTvTc9o6nNx9rQcb/Ti8rLTGG917JV8yWT7BgV5Nje87FcQsab85wrFr2Efi4z4yNCYoUAtzLhUG5lGmAjtK4sf4u2MlsQIfLMiZQIMGpIvwXn8Mc2cQshiO2p4cf5mkWtz/tn3vj20pNCKzL3fbfONz77Jvdx4fpSuH56QQPQ4c5hsEpIod2iPb0oesG7Jp/GeNcZ1t3YqEK/NKwMV2TAuA+sDUYzxmnRoVjcqxLzKH1VRjcv4DdDtVDl4HK58sn1DS+lwG3w+Tfe8/7dK/3ztpSACVTvHabpuYnnB0tpvKmfc9CDHK3GDBlQ6bzlZHAwqDiQRBFEkudKMu4PuMEpOJJxGavE3hWvL9yBSLlOV0r0e1ZOv9Hxg6m4PnbI0/NE8G1VdxIbKFsALEYCmxOw26gpFYal7S+bQozDEk4Le5wwI1gPujN6MYwg0QGjjITzQh/b+TPhHwJMVDguSj0cAr6ErIaOzHgUE9pqQyIc5T+tSCgv6JIsCYT35SIuvQADRtLc4GZrZkUc8+DsHz6Mtq41PBEEB1CklyVzBiLMFCJPskn7Umr5nvxcKtTcLPnpZTHaPnFLSYWHNVFq+yNDU6nAxgYgSO8grf8NmTAplxwRMJPYHyBBt5Bp0jlZgjOCTy9DuLZ9fvrfuZYeQHK2FNU8lqGUo/ewfvOvltyAaehk4bG/r6PUKY2WJ+xEFzZfnewpD98bBeTdoqQEp1UJnePDmHtsU0QTjJHWxHZX2x57fJb7gmUghHGRtZruwISijmEookHmL4wuHFo5pHDeGv0V7AS7RYsjNXqFPhpWzYlxzcLLGl53FQaPDYmIjpGQ9gzDyVCqFA6tvFwvVIXRGt96/57Pv/XK/fVOv3Xfl3j9mZyyUX8J1sKgvMOhJ6pKsQO4h2/lbb7FHJpYJKD4tpbtsgmXITzlhMR35Yu6QehTju7rTZ7OuTsRz3vgezh+QBSXfPTp3BUfG7BtslY+iaiEt4fJW5OQr8f7M/8DZMzeLTj/UvvggjahMeVGCH91iZMWcBou6qeeHZSRLSG6bTxBKIcrrntjCkyInMosQmQJTfPvndDWCFuhJI6ILiGImbfu4wKMYUESKpg4cW3m28+h6BBHQE1hYtPbyjzJVFbfxiPP43om72czBli+WLZAWfOzPaLOZ/IU7jmt+NsGwPO5TWj9zm2YYwnMHEAaRLM+K8E2jx97UFwZpi3MMO0MI4bSmvmFVE6hjB+9yvySxwUvc+JSwe5qxdfOGh7/y+ool0Ag5dE3S3CH574GaXBFnnPmuBJRGBZCyL3du3WFL0zy5llHue5nMdhsGzqWhGzPbbsxmQZeDHmRFWHY9g4GhdWjqg3lKJWDynnvjDte43d6I8Uh0IfRRscOg+I9q/rZvc39CRrIVRniKLy4qOxqQBFqEUotHKVyvVbog/M8+ezzd7x/d6PfG3YfvidFfT0kRVkTf73FGJxGPTqqJ4U7MmGMDbOO8682z3vZNreyjMF9razSGFZkIWXgNAzkUSA8y97n3z9cmt/18QOiuH6DY0e52NPfchCLRE5GZ+7GBIfDZ6xQDNT58nyuglMwlYIkNittz9gTIaB24T+RpsL8hLft9jxU6+JCPzb/jAIhUGLzmG+yvTUJZdX5OBPA9jnRUEq+eSUsUYtiV0lvS/0+2jhnXquo15J1s3VfUy65sBkDuhbOUbgN4342ajPK8OJkK0by0FhxmqhuOguNBwu51qc28MPZMJwGqkT6P33cxQ4Asqkz2Sf7QWk9/b4/Hr90PmTe5/63TUJuCmh6ThsaMA2NiYnJdVFwMMwMC0qEarfz7Z2Zt3uwnaA4lulEcuU1Plm9NoWNLYX7oPzSmFheUgT4gMWWsWq5IqyEUOZ47Kt/k1P2oeJf+bi4PsMjVZvi3k66rPf5obifHCfZ3pzUT7GGVeDlpXC5FEop9OHOg4pSvascQkG18NVPDjiV0YTWRoSThXHC2bo3f2zDf5bB0GC0aeFVdnWWjfDereDGoY7oxCIUKVyOgzfXK2/rFTXjm+/e8/ruxuff+hxu3RGuFsqp4OmA5sX0K0yNRwLEoApFB5VXChWzitmJSaNpw6RSx+DBFMwcViz0AAj79WbYWm2tQwEpunWP3uZihjT3ufiCOfyi93ybxw+Q4pLHp180KPvgpRIqMCoLCq7B2m4SYUNWqGcKgLA+g1fQ9o2bEzkgWgxvsi4CMJnb2q8thOMKC9mDvLwUKD0/E2I+haIJZ4eR8epnCyf1byiv9LIsrfwtpyLFgsDWBaRZR0RQSgA0bDIIFC2ozp7CriDV+xcblcHBzQoip6+24WO2h5M+8KzkGYe2xmon4N1vULEg9wjrfpfayUr8ALpwpSexYR8sdQvjAmFaDXuuNNdPhPbmc1Ufv4pz7R142G/usvgu2MKJLKh7scmeMiHxyeyeJLkPCjgg+2nxaoSkc2wGay3o/njMPXlXAJm3muOazTvzlnvmu8SwyGtJjP3KRiZsw+LrAiyTLOpzbyyDjG255hq0VF7JkG4yvzsLvafw3gEwecrnULDAcSkcx4Goc2nW40ItSlWFU6laqVKxE/rNPSfuno8aQRvVemf0VFzGkE6XHuwYwz3K5gX3qbiGsvJHRai1chyFl+vBlUIdQjsbt9uN+/3uyi8UssRqXgAuvy9JT0tCaZ14DWIBOdzvRRomjVOSQTTMDhmoBLt/gi1KGNEBBnIG+rQw1hqSEkaBjBXVedpuD7Jnk7WPE/SR176D4wdIccXxPID2Ba+n9Qlk7iWR4qmo0uFaIUIeJmIWdG5f7nIjgy+w27PrsPVjhnDs4W87PDjflhEDz2sE6Ds+bh26eVimyHPlRVzdFGB5P7YW31PoSm1DOfXNes4LiAtL4P6ihvGLHBJoAzkYeqDlROihP7K54CMo44sfH/hQD2O+/Nb1ysPg7cJ+hgk3A+Njxz4lD2tAlgc9rVOmYfDgKc2HhHDevjDP8aC4/LlNT0tWmcJW3JySfkXNwjLfogoSJu3KU9ic+5RD+wi70NrufT5dK2m+O8PW8Wow5bHTLC/vN6p+dqW1acjpBeZa3gXdprB3z3p2691q4ZYnJs9bcipwUaHWgpbKEFyBqHpBbnEMXqVwax0LgAXNgjVjOFx9dMbwwKgFK8ZghOLy8KOd5g9PEE9EHiqU4iCpQyuHFTRahpz3ztkbbURUp8TFpyG726IWY5CPbpN309sNERlKTzzkTs5ZfOY+8brCOK/KQ9832ediLoUwwDTTI9tYf0xx7XPxfTq+5IorzQA+/thk7Bd9fEK0a0dKQJhScWlCUzfvZs855ILSsDsfYkH5fBX3eUgxLJbkPMMcQBGAEBFmayFwd11HQFfLFhcagZob6c0NRKJtis2UWV4MIoMV8jSkhHApK5SReRYrYXV1o5+ddjoHm4YnalJ8S7Tuj270oaETgnT3eAt0TDrl0rFbj5rOvhUbO71Twqp3GqGFMHSxuIrwx3yWOTuZ710CFkhNuoAYyZSRRLpL/26LJmqMsnN1WgZ79DL4IDOcNcftYs56cYBdgCtYFg+LX+c+r8y1l89lKiyKn0d03f30xC3yHTgHX3JozsaYqSQeaHnMFaGAZrDVHNO57J9dQuWobFogjaRNaflMtuho3IhevKxGoN61eP/c/Jqs1yr5N3u85uxDlgK8EIXK7OWJ4ZnE2GR5Qx7BP2jA64AfuVRergelFEpZocJLqUhT7BTkNGdYad4S5Tw7vXVaO+nd67MWU3yQR4dXPwYeyjv999TLogUt6iHCfuHaL9Q2aO3OaXCenXM41F4PV3DWPfxoxBrRmNcMw4xQjhJr+vQ51hNKuHsW/45QNj5fSkWo1r0dS7pYOV5J6Fw0HkQqQVaO+jGav+Z1V1bPwI3v4/EDoLhYAmB/7O5pWtu7QlNAoz+QZciroDUnRiKOWyIYvjbUQz3SUwhmxX/8iyVCMX70UF5M9F72rtIIKbm1HRBy89beGvBt60qS/IqKW1mR1B5jMcWbOkw9wz9iEdKcQInUq4WtPatbZcYsjhzdLcmMDORmIRrQUdSb3nW364LTdJLPDFPohc9ugrbquxoJWtAyxd4I0ZciMOu6GiWY4r1OzEW/S6VkKQh1gBmcVJqUKTZX3y1Z3IRhrPstpyW6/LURRaiJLgXWBoww6yTBzTKCY/OSkvn+ArxhPU+F9eRV2LaOUgGqjqDmaaucgsduz3nvQySQl8pIwVZyMtc9pKXtat1HffHnp7p3EyBGeHt/nMNWAFdp8+GdjDvV+jRFapgnqeLmPiQHN1/O55uEy/yrGEPKVPiFPm2LBcslcojxTTOUH4o+WObB87bvXt8xhlMrvX37hloPrseVehdGgzaMcYsarbPTWmeM7uS8EiAUMV/KY0wPz1rcnoE0QUaJPePcgDIc43ctldrcgHy1k2YWuePuM6xGqQFMUfO1NuQj3J6hOM0SjLxCiNFoUy8DpNM2r7iKcejgEKhqHGI0UXopDA1i4DJwfjlmmUaWufpPzwc+WnNrb/3POL78imvfBA/u7PbgC17/2HtmfcJuxeffhZnYni58elH5GZdCEm9wLyg8IRToc3PJpvASzWfRxiKLFRlh/URlvyArvzHzWzEUc+XE6pleV8CQZxGtzOjSPpTz2KDgKWvzXCYEzDfeFxBxG1mXpZxDIx9SMCvcRqFaJYHtCcjom+LK3x8zJXvgySd3pprESwQWv8jqMTUoK4e4Qd8z55D3tbM7LCNoH4h93uOtTyHVWWCcIb9DQsCYK6wL3gTywRKVuV6luBbNMK6q5yCKDCrnFs6x2bJiYVN9fS1MhgtEixIPyYljQSqyCHgS4IZCzJtzQysukywYHpvSWteTpK6FHjVFYXLY/tPXiS9DW+OYrkhcdioxCe82Q4i2boTpAOf+y/PE6/tsPu9tt7myXRGoKsdROWqlluL6cAx6cy9ntDD+uqNnk1V+modzmUwLYX77RHGqK6y1hKI7g7mx16zRopyGMpimWGzxBeqJEHEaO7q26Jz8NNKSVHoQbWg83zgihpHxjSxayFovDTm2k/BKIJgnl+Y0NPwh++D+Tz6+3IprL+J8EigPHteeUM8jV4jA7Cg7/7ZpwLlbYjZVYMJb2RLJoYm0+PdpmukrUC8yEHVUoL+sa2HU9Lh8EUsNL6h7/ZBqfHUTr3JPhF4I42wgKTaQrtGnByYwJDbsZEJI5aWbHNmE+Ao7dhdTw/MUWssszFVzy9M6WDfv80TnboU7B2YXhh0Uu3CJzbIrqL6FCHdF5oqteEgslNaQvEKH15lJKMcAFoisc1h0PE5IciNaXNgkXp1KLI4HyqEYul1f+fz7O93AYAvrxfMr2EWWl/WyKS9JscTyEgSkMAOjGjD1HIVFoOXKx/OOQoaAMlQ4GAxJESQxVlBCussUYIsv0NnEB95/Dlb9FWQINvNT2d96BXE7mb9SW7MnMYMZKoQRHj/TobIcWFj1TDkm4t+aebmsKEvFOnB+vzQKVwmmrK1q22v5S3y3p5mUWitv3rzhkzcvVC3oEHr3Oqz7rdPP7pRNLaIJ3RVeHz7yq7Ypzy0RvNDHHmxj3dcERkmUD/TBvd8ZbGaIrmsXW+w5266M+4xGryPtUPF1fbAiC13R4V57D2+u4MTHZeDM/LGbnLSLmHNwZo1lBoJD+C1yJCMV1/8NCiuPL7fi2hXVs/LaLVxY0nk3sBN9MZgw8h00w2lIN6QLaoUhY0UCM+wmgJp3+i2G6EDKEd/pYgjxnNIK1cUCPJg5M6r/bhdBX4JDLUhfpfkiPopRC57QjZYb4MJgxEbXEaHIyH34DTtnoZgirS4Y6zY+U57M12QWGqsuTEOzwZ4uoxl2F/qrcX9zUBQOBqd+4tB97XQ7udviXegcId7KJhqV5s0uQmQ/pvpz6tJuNJJ1Y6ETO9W7PNnhbNzB/D5rXzbvK/NcoqzyhB0qn+Oxr50UhLvBVEM5pbK65k+DFxZBrkC29UhspIo9jcAS1ek/PthT806Xmi0IjcT/aWQwfLxqxEbTs9rDg9UDsNNYaaFumKIqr2OFB3MAHxWZzZlcXlyGyGONDtvyTtsdjTDOVGauNj0SUaPoIHNfFvc/52mHXZftd3jMYRqTdklU+eTywlcub3iRwymaIt98uzXu987ZGmfzrsm9dXp3JeagjD6jK25sxj6KEG2yrSRQggwVFkXVqdjS6xtmtBEGZVx4ZiRoK/wnfduUiuexhifyTPH0AQGUaHikpovLrdEpds7Q7fK6fN0dDKoZ1by43I0nDUW28dVIrKkA1UgYfrvD+8Gxz9P/BceXW3HJ0yMVl2w/bfs7T8/neaIuIWJ3s8bO8HAdm6jQOIkti3E2VpNVR0UW+YWLnxRLj4rTmIWqAYG2aljdAvX7tZQVWc74+YNJu1u10xrae3Qo1osv6iJMBEe83x5PE6+tQUzZjYWX1WzG1u0+aK1ySuXUC0PfgDZMT87xypjVWTI9qh5CctgSukO8JYlz4oV/sCvTKUZXa42Vuan04Xm31crE5hDMUMrIQYr7Cfb9D/DZZkubP3vrzx7+VkCcJQZaxUEwMqYgzy/1j5uDFx7uKD1fe1iyeanL/1vXmn2zdHu3o6nbw2jt4cHs4bT6caXHa3PNsykuL1reybeWt+XhxMwsuifnrVHGB+uLbQzmMdJNypAiC7+0uWqrcFnma/n5BNLsRcWLEWXto9467WycenIUr8M0M+5ndEkeg2HRe6t3WmsOyJiAl/Sg5KHGzrB1Hd3rJN3OFZIQUSTCjsMmfN6JdmOuN8abByMrxy17jCHM0odcl8qMMGQ7H2dz8lBuC4/YjZrMZ8pch+ljL9E5WIXqezH6El1rHng87OnBR55/7HPfwfHlVlwfy2k9gyZ2152n98bv3psmPmDq9Vu2ckxu6NkHCtEgCgtTecTa05jYIcsaHHH6CN1Nct0HpTWwOiB6YXlcQZfyki3UnJQyYlvoMuqrItZiIc6NTpZH2zimBSxY5KtsMqNbWsoYkvBecwUsSUI8Is5/GsEoE4pLOEvhLFdGMSiNXu7c7cVDSCFcZi7LdlEaXpbtnti+xtfEpY+ycmLCyGLmwWwKOR87ge7W3SN1k4/vUmTCmsupvCQXTwjTDJ1kHdzMdVk8/Llqp0h2BZ5fsXlcHkIVWdBxmVe3FqkLtgyLRgBNXNlOQSLJZeHfUqZy8nNPL8uWzyviykUjROvbSuZ1rrwp8zwZesx8WfaBmp5XvmZLcU3EY+6jFIp5ekkP3zaj0d+XqTEGXmz7IARt9X3KiZ1GXezBifgb3F9PXvH86MtxAVEP27U+FdRUWr1xni2+LxT6LmcuskBWunK90g1qgKtwIJPEvTlPYSis5ozybjBa8J/GnE7PzZWxqEQrnpiRVBolvPIWciQNyVj30g2Vc4ZyXcqN8KBKAGMtQoXOHK+yrcP4GjGZou/BeN6G/uExnp7zG7z+XRxffsW1h20yULvnuFLZ2PaT9bpErHYmwW2gQ9GuzqfWBG1K6eqQc3X3yUrE8AWPpelgohSxaFUxfCHPBKcGxaAzXzxY7dEs0A7oxyBSSpSLv8c69OEbRMRzXr3gG3QUVzA9oggWizPgzhYtVF14Hsio0EqgGmNActFbbMYEhoTVaOKMG1plhToYvkHu/pC7MErhtVS+1TvWDsZ54a298KJClQvn+fkDCCOzJXvQKcHVFomg9PlS+S6lVaJ3l+d6zNQ7LWdzyPw5tse2aaZD9bymwmqe68ce/z4LgjdSXA6QC9jV55GLccidIzCUpOGAowAzX1QjSOdftUis1mMHpIdPtV14Zv2Y47MUjHtZef7MJmav6nM2jzQRSra7SOUIZM7Lv2kpwEKj2kr01/Ch6zaTk0sxk6h5FymwHtxIWV5WGpuekI2wf1hP6RVnyD0F3+aRP3grYajIVHjGeR+Mqnz6yQsyCufwMOF57/R7p98b9/uNdnbamfVZzHyOFo+Rj2IzTGyHMTzdOguE1ZKIOOrjLBhvRiiubtirG70yQNoSI4KuVjt5/QpaxMl7hHleSWi+yeqUfLNg+/CIiLdRSRMxvCYT1EbMW4nsSmNyx8s2RUM9f9fVqayarH2Vb0qj8Gns52t7uL5vn/kujy+34toV03OI8FlpfdTjErf8xOPfGuHCMAiX1fOU+4DtvER789hbIz2q+DJHi4knzwirKcly43UrghbBCowCowi9EsQBmYALr6+EQpGM/se/JhMibvFu30luBk7rlgCHDJv3YFG3NFFMaR0HinHM9wqIRguE+M7pSRQsQiBtCK/Nm1CKKOcoFKkgg8aF7LWb3lJi1WbmRBK8+9jq5Ln9yXg6z0MoMBsTDqbFDOktsUBgc11IeOi2jJw5jSEYElE615ixF3B7mFiiNk4mpH5BznNW4q4t7kZCuMQFJX/cxJmJLKRgvObeTi7lKCDmQT2yCgMW9EUZFAkYjIXiijFM9NmQIGpmsJsND1tPdqRhCtP0yLLv1kdCd7M3mSxtkL8Tnn+utRyEHL2PGSCkAt/OE3tWhs3GoJ6TMepQDlOKFe63Qete/NvuJ+3eaFEIPGyR4RLpAUl2AsVDwtWVFod5iUguieG5ZveE4xxmHqnI2qse+6zZhBBqD1SfuSKjWziRkbUUgm5pOPo09uMI9gxJxZ0e4sjlOegy6IkmNG+dVLflXCIXj6wwYtLZlQiPqnjxtEo0zX2AJW9zMr6Nx8PcfufHD4bi+pgCe1Zcu3Xw/DlccTkSMCSW4cJ8sCDVm9GY+3nKxAyJkMLDv0xzAagvfGdkjw8HnHoV/uJM0xVG9/5bIxGIeU2W3luKsFBTiRLMxRMJARcwfvP+zrEufG33eJaSfFO9iV7IsKS/GEOniEQFpMm0KDHh3s0dElVaq3TpEY46yMDZkF1xpVIqM+dleG+vGea0FfjK2iV/XUho/uMGCUseR0XFL9u87z+XIv84JN5W0fn0oPeHbWtPFjB1P8Xc2Tl+y6fapng7XGL4/cZ92H7azJsZCZKX+ckFmkjvbiquB4U22HrfLkU0ryWvaLuZ7TvX+7dZjBzXrrQeHruHNM16Wz8zJGc4K0S+fWsAuivDZZTFO2dXZQJJKhEGF/RUtCnShHN0zjY4z0a7n85ecTb6iNC6EDVxa7Zml/BK5KNtAnNWDkg9zzVZPCyAG0txWRP3hjSAFIIDsnqEBs/xAG6exm+V2Q9LB2S/NtnHFJl1l55Gd6XV6RNNmD3bPdMheD+KsBpyWkJxacqvVFwoOjuhPi3cnJvnkOCzQoMfYsW1hwp3pZWoQviNldoWUpTqHVEJBSNDlreVygtYlbgOKpA8+RAHZ2Sif1qCaS/FgtK0kI3FBF5m8fFQkDpWOCQFZdReVqAOQcvSopJEu2FlCgORE7MVJ3Pd2jC9xFgoKpWhoJMA8VGRlaimv93T2jdoHSkyO/ZqQnwjqa3iCCrv43Sg+sIIk1fGoItN0BcwRWiq4FV8XFnIQrc6bf5tZYOyX5Tfv3g8tQP761GPYhHOmZtsy1ciPISEZjhjX0e5hhIpGOss8Rsuo5YHsIyBPIzHl9LMyfF4VB+Gez6J7twVxNKL+yf9WXpzxxypPvNdK4QIiMyuA+nR7gwma6W7ErQYNHnAnGVCf9HxzmaeHayP6TmkgbMPyRyjug3NFHi23p8hwvSIM6z9IDD9/ZKI2ybB6h5/F+Em8P4cHO3OnU7rg9YGt/vNqZ36WNHNLJNJzWg4evgY2GU4O8oF5CrIlVAoYezmfUQob+ZeDc8JB82XdVkGVpRueIlEJMrN4eryIpQX9ZILiVVj/t6JBi7MtISI5+qtwUUaHtg/KSh1hAyxCxWlMjhpyIRLd7K2ULIWNQjAhUIRD4I+LO3nEOEeKnwOE/7Qhwo/Fh7cqWDyPbul96zIonW3VtACtQgq0Y7cireft+4bwtJ9ZoXbUnwMNhTciNZXOi1/ma0y4gKmxwTMsF+2NLFocyWU8BREhBodg53WRpDRZ8J29zZKGVOEqCRWbYtniYezsmjWkmoolXiMXda9uCIK4Efk2dx5cavR4/Rj1kmJKV0OGicMZZyCiHtbd4FuS0ntPscSnhq5qwUSnyGzBzs/N7AsgTY1kTHRLAW3VCVvKuYhvdnNCjRlkZzGmR7W2ZPi+sCzyjEafp8eek5Ye7wxfgyUbmWhymSpieWBshLx213vHg/ztfWeRzNgeVkLIWjTy1nfx5yDpbT8bB2Zf3XLPG7eIKHywqDYqhXLJGI6u+aoku2QWYi/t4pfYAvm/vEQoMXzJyX2nLts4jmeE7iBRbhQgF4699F4P+5hRA3OERyEJPMMEdqHQCqR4Kyh4WXFmkouSqnFmWQirDtXaNQ4koGJ7mUzea8ydi9N4cxAXXhjgsuhq6Ivih3bup/r3GYtqByC1HDJ8G4Xhe4AjSHIKOFlKcUSGu8NQPP+wYfbi5HVPS7xschI0hz3zT7cL+mDfNcHId7t53dxfLkVl3wPj02WZ5sPiVyTSPpIG7owlY74onywDCGXvC/Okgtq5LpazErT8mSbQJs/s1A4xU6cMvIJxLXYCl9OxeiKdIbUJUTYc0wrFecEF1hAuGVZbrquzfdXoEOMFapJ3PyG2rIzhEaDXjymMkzpQ1E9NqMrBeNq8b4L6y5BJGROG5WhMsIAts1L8N/tcROkpMz7UB6aOqJx+SlI90210V89rLF9GBNJuBtMcz3YHJMMeY4JMlkXmcpFZv1BCvoYF1lh0GVzpVJOxRThuFwk2DZvewA2c2q2vnM77OGsK6A5g4ZGjLWxes3tQcX8+g8l0RR02/VP+yJPnyUjeZ68zc0GmQpshp2WoTYh42Ew0MzBQqG4sjRCgHF42OxOY6jRZdDMiXKz0aRbsrGOfIHF9jen1Ypmn2R7oKI48WGGdv0uH42KeNVsDpPUXG4Riuv+U7sgI0JyJqgpclHkIrRg2JhVBhmPTWUbciwN7AXGiMLxkEGaaFQaXro+pupi7srtPKIz57XbadvkPt7qs6L6X4rr6cgB+1gocBfCxrIO8vVZe+NWilZxItkSC8g8Cb7XomTjxayRSKvPq9kHg4ZVnRscgDG8vbY5KmgQn1Oi741X7hNQWRvQuiJ90AzqMGwIvTkzTO2gHbiXmXx2azRFSUp5BTnIRDnmFExZO+bWmUEdyKXMsTFk5hPmradb30JBp8A4BFSwuzBe/X5GHYwiNHE6CZNOt4NiHewkWNniyC3upnj6B69cZxhxN9OXH+K/KRZ8fU/znhbzDB8vQedlDjwKxx7vPbfn+1oRmGzkWz5rhvlzc0a7CU6hHzXCfDpPJVO5WIBcAsBofvf+Z8WcHjzt33kZ66LSN9p2/5PS8ttP7OaCOK+s4X6W1eNsV3l5Ph7e+6jg8qvzNZkvyEOucV3709gqWI04bla27tZDjq1tj53iaEbEYy+ksjqB9wI3nD9QB6aD3jr31rBiDB204r21Uh5oEvvGpfYyolbTfN9Uca7OjYgWqViQ+okNTEbkp/uMUtgGiAIQFQ+7icscHerNYEWopaK1UIsi1IDcD2680snIjEz6pxlZKMy2OqpCyZCuGYyOmIM6io1ov+e5rkqh0fCgbw1PC2dzEbzlix6UolOJbfHqjx8fnbenRfNdHl9uxZUybQtzPQiaZ8W1h3z2otEaC6coRQtFhaLqSoyC0iLMZzMPYkEjZAOHuArAiKLH7rmyKRVDA5yO9fLwVk9pBTrQpq4UTqOfQBf6UHojWh/YpFqS6CycEHhviZ7KE9oQp5PCNytRFy9EOEMdwSiHUC4FqZ4OyL0qSDiLDns/ROgi9K2VgsFEODLwcOHhlFZSgVpQrQgHN14waQ7kqC/ejG9qwqVsBZvhwcbF6YxysZNzV6bAn16B7X/P69rmvqSQs2Wtp+ecQrD5e5M+Z+5HYWNisfn7LDQXvz7Z16P4mrQGoyhnIgw3Fe1ETUajssJ3KxfqtsFuhiRk3pGmDoBISp6MARgWhYNLqe2sGWvc1tXs8PeUK6nICovLMGdrhW9nSNHyM3keDe99hEe1neDh+Tae8TkQNLsgdB+HyY3Zcg4t8lYBQpiKS6bykoRsN9sQeso4B6c2z1VFXnnWaMJCm9rwPadrpU2DKHLjM8NtINFk1pBZEoONBX2PHJf14dftuYT5pVqVMlyRlVGpdlClUNXJehvDyWB6p1n3LguZb48xlujwPPsJxoqw4YPoESS2OtUeCMOYbXEWeW92aZEvE7S6jFBHW62Gu/se+yIP61lxfZ+OL7fiet4Qsr32bIF/TKHFz0T06Jx47+4pMUHuMrNNgFswWXBow60hM/XF6ibWFI5THNhaOIa4wlEiebk2Wm/unckIFGLG9MMgXZ6DbXtKJnJuGFGQ6rklZngnbjY8vYlO3BF38GRGO7hkxKK3vv29r/eY4kXUalHf4ugN0QrS6Ip7gEW4W3P0IUxYv19Wx2EAyhi67nUHSqgxkqSW7TrJk8SA7NZdvjc3Wd/WgeFCLeZjnutBWeZ6kce1w/5eWZ6aMmP8tn8Gd60m/s/wWjUbU+jpvKj8+vS2HjOBDqPPzNRjGG8nxN2ziFNx2VJUT8HEj7z7KTS0lhwrH7b7cxKCj4l4nOO43dU8XSh0i/X6OKkyn0rCyDNE+LGEf+ytFU7MD6cQdzUsNiIPteYn7zJ0FsR4PivdBCzkxSeISxuhqCWQvYPslWXtEQb/EKkNMm3BYeaqipZKqcVDhF3AHPjUrNPGCCCUzZS1D/G0OldIL8N6lhPn947pfOkxy7xpGfEyDY2O6Rrn1Xne0Ja7Unq0fj6usPbfvwdF9uVXXLui+li48Is8rsx1xO8aIQCqgkYfmhpu8QYFddaIMRem9QzOR12LKWaDRaISAiZrJBoz35XlpoJMPruhcJ6DqyjVoh4kPAW1VJQWOa393nwhGd6uUcwLCYsWzkwwi0RjQlshGoMxBCkrbi4J243aE8GvYzS3WJeiUKwNuBvSJfLmHsaQFwEtSDlQvXMqdFU4lLNpKC6B6mOjFva9hFgeMEGRbUeL5LWnZHTBPetrsEflkYpKmd6h7WuGXAu2PCfJ+XlaZ3vUMoXdgxK3R4OozYFyZaV+IqdnWlaCCxHx8UyVYUH/FMJnL9lWcQYMDZb3JQcEo8XlhlrJmqqd5sCWuFrMg+mTqRdyp7Eyb99YA2EzMvfM6t+lMKTFctyMoZiaOY9s8/BRpRXvSxBN3ILtxeW7Fx3eWQKIfC59PkRjbxfoxY2rorY8lICYZ2fv3nIewwgMz2NyfIJ7TN0FuJorr2T6Hwb04cTTEfr36/cN/iCeLBRDLxStVCkc9fC9HznY1jv3cXKzk9YGPfbm1IAVl1m5pHVfshr61LwIOfrMmRU3OC1Xzs5l6fO2UnfuZakIpURZ9XOd3a609td2r+v7eHz5Fdez9fuswFJhPf+9PL5PSkFrQQ+lHkqthVqFUgXtXjnuMWKiHos1Md0Fqv/aY0cP0EI2ohRJr2sgAdlOSKsBds/EObT3d7hcUY2cQ2zegltw0uGIfJl1Z60G5vty1aoKR6ncaySfBS+YrITg981bqyLXK+1+x/p4sJQVpdjwjWp4+K6Zhz3Suywgp9CbIa8dvd+pn4IcoAd8er3y2esds87xRhj3QutGp09U46jKOMLKsBRQaV1v2iZDNfvu38ESmcfcQxWzgt8i37JZMzmHwrLiC2t++XCtMMd7GQ+S36mhzMQ819JxFKJ/YJYR+FIMwewzu+Q6suk/LxrNbmVKp0ijWp9ZKQuXNH2zVFrebuTR5DXbMYDuaSXB7mNpwq5VQtFgcz3vPl124SrhMTvXpNNdPRiXMSw57A9O2P5KfmXOWUKqT5C7ONXYQ0NQ90ryKheePU5Z43zF13/C2PUFTxoXmV4W5nvKhzIUVYbEYq15CkHRxiTUTZ5St6Vs7pFpPMW9ZTBYYSqBgnJY5ZDKoYVDFE7o5j3E3rcbt9649UbrM8zhIJGMTFiEmsVNo/R4BaK7RHKFai5FQGJ9OfLQxJX00IEVoRbhUDiKN7YsVajZi8t0Kaics52sofGosIzvqwL78iuu3+yxKy3bXnt4RI5Lg8m5pJe1vK0ZHkhtuJG1mvWwYtI4DFC7pZQL+1ZWSwgM33y5ibOuo0C/mYcQkLDSmLm19LzcIvOaqCUCbHIlJosDYVEmU4Gpx7GLY91JjKSNHlacW/kDZlJdRKdTQlDWWCgVb1KZoBJhdIJF37BDGIdQUvCkF3MncQheB1PjeYGEH5NkoVFEOoXcrmjENtiyK2QJ71YEB22oTJ034fAT/ZZWoy0Bl3KhbN+TCjE/n9fxFCoxwYWpMOl6PjCk9sWY40HavH4sDNGuHsJ7EqfyUutbcCHRpBmEjDFgkG1Ali1i+xkX8hEJIMkjAENsh39EJi0GdG8CPx+2Kb59H8a+eVBYjzr14YU5TQFMmrmshuevTl8fD+1plkO4lEWUfghuMCxghXiTxNwr+yV0PIT4LGxn7ijCe8MVUX5n6kvr5jnwQXhl63JWyM1Dg8UKBfe0vKbKSb5bN3rvnP3k1k/O3ulec+P7NC9XjUfwS1wTstbnAILoeRq328Jdudcgaw7IcsH7dKnqYhbSLaS1K6WPKagvenwfji+34tpDf7te+c0U10eUV6IJiypaSigv3Zidt5OaeEyvR7iQhLlKWLRRkWUpLF3riPR4RF6nwWQJuAPiKKF+N7jE4jbFRsOJcRUZI6igbBHuGts6NeflVWEUYRzEOZxqdyhIIiOjAZCZ0c97CL+412DCcGPe09AFYHjrchpoC/AEMO4DmjG6TOU5KnAoctpEJfYRm9qWEJvsB+nZ5OJv4gqyQRLbPli/xPhhc55VgiRUDNMyqZL8y9kGbF8X4lo5PS7bzjs9OtbvoZjmmpqhkRgvkaV4FSddDUUo+iR44md6Qf6tK+OS+aoFaR8Ua5RdIWHzPPZwb/t73IhKKMyHfBr6WIw8lVPmgtJDXGfevbadancWJ8s29lN676Mv21iEwspRMJAMZZl5rWIU6NLACwJZoUJkhZCnUREwc5zbU6pONCAHAbKRuXecJmxbJxGqz3nPUhnFGSfYnB+LoEDumWnYbUaWAVp1hd6sUqxQcW/rglKiXq21zr2d3NvJrZ30EQ0nsS0aEJ7iWCuGLBieuQAJDzIuJmCIWeIz8WH4+R0SH4S8shRXKi3RdCvXvf+myupjntb3qMS+3IoLHjfGF+W3nv+mrI61qdiCBaIehXIRyqHoodFLxwW3Sghq2ycuNnhYQgOwMbDRQQ0JAsuRMzjJeDuCYkPhVuYmNxxO3i6DJsILwFCsR/V9FlNa0mGGpS2gGnUYIvTYoKrmNSDDPO6e+9oyl+IAkDEXkdHGwM4xEYwjQjNyKv39CW04qrErat3bNHR/zzgHrTcOOeCiyAF288JuVLjfR+hxFwY2BLmwFEHO2Z3Zhnz2/hGWYNrnPDUlMeZqlO7Gg+DIPsQt7Al02Y8UVEd8dxo0ydmYDODbJpxOxLksblKwZ/hqz0O6sbxRfsEQi0hULsIp5cCU7DgmwS5fsluZOIRl4QLd4FhqbNPrU+31WRs2TNh74DLpcR3XudSVX93aPosvY503ld+BZ+gaXQqKRyEkvdUduLL3g5u5ys3C3OZXTDbPG49S3IH38XsaJrsxmjIcQ4oFQlixqsgFJAvIjyWDOZkf9OLbrcmrEAohePuItRlKzoYER4Et42WGqf36HOkHIheKCBWl2IWDwmHKS/O9PEbnfrvz7v3gfG3c7idnj7zlBJLEUhM2+jdCqUbHdYFs9GkRTpwBoEQH21ohIoMiDZPCCCP+KEItSimFUg5qOThUXZk/2kcfMmQ8K6z9/eMjr32Hx5dbcT17XM9KK4UgPHpbaUVvn5OwLEqwVah47HkrRY63yzJT5okh7NHUCrgKyhkNzsBUWBIluBMBoGTfKOnCOId3YK2+EIcxUUl9Fhl7U8k2hGZEHG/uWBZoAfTw1g0Qngs2RVNSurjwDqs37yF+ylBS41mzsCY9HGV2grn3N5rXr40y6Le+zk1FzMOTMsaMvDXBGQ7SAJAYW2El323e1Tbkm2Tb8ky+WRaoIO+32GoAaODhlX2+8qhPSi0VV6wlxwrImv4cd3vagylZUibnxWwhLZtAjeUwONrL581kASP8u6LzgGTzyR0JlnJi2wwmm0Jc5m96R4+v+r/+6bFuNrStkN79Yt/IdZThxo4E+8Ly3IYoRQPxEuCXqbQKROsBV4dz6WZSiSUQnx8ZMsy1E4olQ+2EU2Cp+CByUBaeg0xWCh8KmwTTSJTFRMpAq9HiHnTCyHMS58Bva5LHeVdCdvijUiimFFMuphxdqaLwCqc1eu/c7o3brdGaw94poXQS5ZhKcco5C/AEqxN6WFZGGInz0RBzJJhYIyQM2S07t6FqKiwHqBXVqDkLKZgWsOxjwMePjymv7/H4ciuuZ2X1sdd2qbcruF1xEdbKfPgmLMH39fjftMuWx2xZzplHKC0LiLKE4hKmFY10ZljH1D2PCIeMc0RyF6SUkB82EbaWdnIRSvbMig2S1yP5/RilJilmKt3NMyjrvvJyZNIW2Qp3xMLMehSGQe2Yx/2Y4VOgqzHu3upBi2BSIiClDh1mGcrLuLApfBBcOGGB5JdtHrfVvxeGD3fLLK5jpOJIIRuTlf5E9juzVJqw2ESmVRvzutyXCWScyl2ZXrhEyFEif/iwBk1YcVXml0REay7dpzt8OFaeK5VJMjlGmNFy7aXnsHX3slV2/Ah9z290hTWLuy3PavPayublpaeXCnMPGe4Q+xrC1dJTDqVlOxnAk2niubXIx8zaQdx7mWUjzLzpUowxBnNvuySfU6zGJLyOdTYFfBhMSWBbi1KrTtCPiS2ofQpu0kZdij/t0LlWlFBaLk+qLcV1DKV2Rw+Obpy9cfbGLcl+u4OqHo1sCTBYjFTc5+RJjLdIGmoS0shSJg0sIPFsMzZSnm1GvGyPKRtZjXYfFNdvpJw+sDy/90N/87c8Hv/6X/9r/vSf/tP85E/+JCLCP/tn/+zh73/uz/25xzoCEX76p3/64T2//uu/zi/8wi/w1a9+lR/90R/lL/7Fv8hnn3323d3BZtl8NFSY8exsrZ7t1fO1CBd6BXyZ+a1SlVILtRwUXTkvmQVdrE1n6nmiYfThQtFC2RBAAZEk6ZC5QJIAFelk91Ka57jGaVgTlAMdSh1CxUN6d4PXASX6Y2kUuFZVqoZECHd+EEo5NqsX0AujCXaC3KE05UWvlHEgZ2HcwO54HuGuC0U4oJYDEV/qrbUVcQjz2MZgnDCaX4OHQ+Gilbf1wmSXNk9Mz/DPifcRuuGPPd+0F4s/GCQSITnZwjaOatvZKpTBwZ2DG1duHNxnD6kiNul7qOr1ZxeFq8Qj1kuunQwvl7V+5Hl9zYc4s8gDWSvLYo7w4cyrmIfxkq/xsdA37yc97iTO2reBPTxz+8Tt6ZPCaZXTHPre8BaWy4daomDrR+2IRukccqNap1rn4FxXZ25GpbLqaJzbC5gtvaAcrxgzE6GLd/PyEObqw7vCbLGOoy8ejad+axKP/TWWR5YGVmiuSp2w7j1l7QJf57ilMTHTnCaBqt3WWz7f17/YypkHG49UodbKUSuXcqHKwWEHl3Ggp9Jfjfu7k3ffuvP5N0/efevk/bs797PRLZTWFeQKXANYctFYW7ZSHu4mOfFAKpsqDvoSInNlM0LTI62xgDUVp9w4nIi7FCweRY8gZoiJHPo0Rzx6Xc9gGbaf36fjO/a4Pv/8c37/7//9/IW/8Bf42Z/92Y++56d/+qf5R//oH83fr9frw99/4Rd+gf/6X/8r//Jf/kvO8+TP//k/z1/+y3+Zf/pP/+l3djHy9EjltQu6jyk0YSOHDEtweD1FOSLPVZXsdKJbJbobcUJPi1qJHlxpwWswPriSKShZmChxAk94yoxEWdTaeNJVwAbt7Jytw5vLRHt5TZjvphO4qtdZVIPeNutvGCZjtfA+PK+kQ2mjey1XhjYOr+HiELiJs4FM1JZBN4q5WyHmst3CC+w9TV4jcwBp/c3K/UCoeErAKKXQhmukyEq5IG4xHc/W5cyL8Cj4570yBRPRHRaFUT00I/Lc+WsAToPl9uzGEhqsQ9M0maiRODr+F0tLXlxY7UWlwcbgBpO54CgW3mj4Ka7jlwOcaxn3TNJ76nNR+weGeZ1Uoc+yLIsGVjaV1F6jJZsFvIiyzGT23Fpfb9tF7CRQSyWV6W2NmD9f9YubYzDb0VBpFqox2VSAoTLvcX53uN+7D5hjRNKZ7WHCzkMoeSJRA/BDXy6sj6BMwtjJGrHzHj7IBucGHGa07q1F9g7h6bknKCKjEsy1H5D0kpAmceSglfC2hGIgfUR98qCPzm24t9VtOCo3CZyzA0PGAY2pjC3WIUGS7akInTJqyifFDQoT7lY5rXK3wmkXTg4aR/TJu4BcQA+QF0QumFwoUqiinlOfSXJZ4cqcr93zyqULmSr9UIl9D8rsO1ZcP/MzP8PP/MzP/IbvuV6v/PiP//hH//af/tN/4p//83/Ov/23/5Y/+Af/IAB//+//ff7Un/pT/N2/+3f5yZ/8yW//Yp6V0RcpsY8pr5RXKXeV2aYjIfGOMHQls0grmVYa7BiuOHEorBU88IeEAnNrKJFvsfhIRSJk+KtHuwV391esugrcUwCKURRqgVvzzybS1UaEKceYlFBqCr3PBG2ekwQtRNdUAtHn3In2OE7iiWtTo/e1AqfVqjqTxQ5Y8XvokfcoRRzCb4H0YvM6ttTGQywg5nM6u8LjJhkpSKZcYZjkZbDng2aoS7ZMWCooxWt6Ms+2b8I992UZasy/x4QHl517FzaRa+iWm8j5MWMy0Me6ssgBeeTVhbsH71YWauEEZa6wDFWvRxq+eX9pJqzxHcGeMAueWaHGVE7LDwp1JFkX5oOxgBqpvB55D4dkk3iQ0v3MInRJ/rx9ii2MBptrIUPUSXXmr9n0sLPzr+RN5aVtMsB1kYe5Ei3LcAMNxVGecRN7OsAIFN/s6sCC6E/lYWnhxE1IhNmYMsPbiHh4UM1rv5IMe/RBG664zt6cFYPhdGwiATTyNSlpKKeYyLW0GXZJ0eQPm2HPocYwoQ2lmdKs0KzOTuONgyYHnQPkQOSg6IHJAVJXlATNCOWau+efa0I//P3/TsX17Ry/+Iu/yI/92I/xW37Lb+GP/bE/xt/+23+b3/pbfysAv/RLv8SP/uiPTqUF8Mf/+B9HVfk3/+bf8Gf+zJ/54Hy3243b7TZ//+Y3v+lPUtjsiorteeVDBbYrrlzogSpLXq5SowD5UqlH0K8E+3M2LXQjwuaEjQE9PCnf2zIbUaqbX9TS6N2FvocrQnj5Sl0bpMG9NW6t4E6Nhr81uIrgDpGLoiM253vEPb/pcuCrWwIVKIJaQc4TT8IORh/ooY4GBOdRs+FKrivWhdEdQp1sH3OjiocN+9CANAulHlhx9N69nYxm1G5UvXh2xJSjFMbokScyklzCQYHLcp7z9Xw8bxDbBNteazXSQM685MpCLkBDFl4WkqF8KqldUQkrJCJP78m1BWH92gyLyYXIq4CN4d5vwuTjChKub9uaTA/bkolQBt2SF3DllqbAniooi+D3ImJ7GDYf3i1LtSn33BCL1zCUlw1qBBVXsnMZBHEnsZUqnRYK18OUWVdnSEDmPZQ7jYksD8EewBcfPN9BOIW1VrYcaBpCASFwcthaKEciNrbzEkZDAGWc+GIzuiTHRcNY2a5hZJzXvzXTAaJQawAbNGq0rExqKGnBztEHZ+u01uhj0KzRsQcZla1Kcl1PBKSZG0Pm6wt1rkMpxZlADkEP0JJrstGae1nNCqd5qPhO5SZXGleavGB6RfSCloNeDkq9Qrl4Tg5/bKEqP/Y5+Z94fN8V10//9E/zsz/7s/yO3/E7+JVf+RX+xt/4G/zMz/wMv/RLv0QphV/91V/lx37sxx4vola+9rWv8au/+qsfPeff+Tt/h7/5N//mh39I4bbnPp7DhM/Ka/fIUhClq6+KXkJhvVSON4X6tlBaQbui96A+SsdosyKcHzAsqREWrcUFxAbI0KOI+oKTzlzxBOtcyJLRjPM+uHfj6Ip0haaRJnBm5zF2/RS5tAiFmHW3gM2tYS3CIcJ56krUXgB84YtEHqHHzQ2H0OvY8iVmsytzegxZkCihnLNexa3VBt2oUpwdQ8XDTTNsMyh4LY832bPHeqmAEn+gMKYAiRcsnu9gDcC7JEPzbyExdXl4jVSfhZagdNWlxHaXS2SFoDBXUPMt8TzDNsWgGlXbBFLcJRp4Rv+lhzxAysaJRiVqosMzTAEp/s+O6BeSYe5JjVj6Y3n4IMrD75vsjU/W6Tw8VnmJPX7LLqck/s1Wkh1FrHJjA9hP5y+vIBXWypXJGGQjUGsgd5llERMSjwttR32w3NUAKYB7UVI9/1tqQTVgeUNzYB2RWMVz21GInx5KWJuxDMuiv9wg5GFFxNoIozcIDGpyDYpSBGfYiLd3G4zhnIN3Gl07g+HsN+k5RWH0tGhMYvxidjWfpdfIxlqvwblaJsvMiXI35TYKt1E5R+U+KifueZ3iocIhL6i+ocgnXMqVItWLoiPnLzUtyeXJz5+7Uv+fcHzfFdfP//zPz+e/9/f+Xn7f7/t9/K7f9bv4xV/8RX7qp37quzrnX//rf52/+lf/6vz9m9/8Jr/9t//2JcyePa/dA9sfO5Ip52ATiqK+kPVw6ie9RC3XRdC758CkycP2z4hHGn+2JauTYdvfZySrgxf2aUCKN2EYUkxwcMfoxi14AMtQtAdDTezdzD0nWcP++REbzILpAoIRJAsSMRcSUnzRE/c2w25za6wrNJnhrXX7EYLJEJuCFO9bNHBPwclK3YR0ueH5p25CwgJGDuBghkmmN5WCI68lEWdLbqw3TCWWxoWH9UbEjWTbbbLNlItQJxYdEVIybHGyKStMxLwQ9qWQNWT5qLTp97RU6Pt0z5+2ft+XAszw3e45PYQMH8KEYNsdPp80deSy3OWDvz+efT9zctXnt8jD+dc7V2enHiCQR4X3mFebhMBmi0g3aZSSfaSzdSBnGqbP+3DNQyiSCPNvuvLBsJGRe36DxqcSyLDis1E015lPUobIVcRBXE/o5CRNzi7IfTjEvVmn4wzvQ409n7vXjsH67hnCjp9pOK/w4PYIHkYUOoXTPMfVTDnxLlzd6qTr6lIZAc5Qda42pfh/soqmedr/26L8UGntwmN/7fug3P4vh8P/zt/5O/ltv+238cu//Mv81E/9FD/+4z/Of/tv/+3hPa01fv3Xf/0L82LX6/UDgAfwoeL6mLe1e1x7riuRAWy/J+XTUSgXf+jFvbByVLeEokOpG2TL9pw1ffFwcIaHSxxCukIPU3GpRfuQTMBDJj2tG60Z33znntPVhGs3r1+OZPWNQAeFMnCSXzcWB4INwwtPmw+KRh7KOjY6o8XnRnH0dpPgPvOst7Dgtp6fwMcn0FT9tFjkwijDN1MxL3wu4ISj0Qq9eEFnb2Uqq8Zs8rKxJOzCgg29HwKAbfPOyYMPdoOlwMiAl49j8H+E/HNva+BhzB7nltCGNrUVAeKI+rfdKyyb1S2LrrbSuHDO76902uyzHldguNUxuQvZlPG6r6k8colA3IssZRCeR/pF+5jsoIfNcN9fWYpFYGaqbCn2LzpyB+RVJvMdcZ4WIib/us/aNBxsLAUVyMBsSGoRJnTFFYvbZIXQ8mS7UkoDtKwoAAL0EWzruOfbEkjEOl+B0FyuvIZN7kJLr4jYNxE5ULL+s4aXtfJBk5jAjDaMPpq3JLFOZzCyNivZeQRkGnoxj2OEjZFGlC1Kt4D8S+bm0zMKb8uKcbeDuxVuQ7lRuKOOMk1ghhycAY8VORh6AbmiXKgWOS6tiBaPrOyglmev62NLZVvyXxrF9V/+y3/h137t1/iJn/gJAP7wH/7DfP3rX+ff//t/zx/4A38AgH/1r/4VYwz+0B/6Q9/ZyXeF9azAKh8qrv19sAZ6Wi44qvBFKG8V/aRwfFKoZ4QJjwM9hxfknuJxv/EITXJmaN843rjxADSAAr7ATYWjDs4+ZmgxYbai69qsGee90avTq67cf0DjW0BaxYkwc0H0LtNKHn1gesfZoDu1dBgnbZxgNYw5AynOvBEoByOTWlDLBTP32HqIyy7NQRZFIpoxJuxZogTBYuN0O31zVaXUg3IzRvNrW1a9Kw9SQGUOA1vGxgeTv82thGU6LVLBi9t8HDo1siuPtUjZAdYNjCSKTQG8BO3A6FroGY4K79l9ijHP5RwU/j0HLRSi0qX6Z4uutbcJwnlPIbhceTQk6XcCQrf7OJlXyrDgh37QWuS78jKSSTy8hvl894KGs4ljs9ap0NLMeJoLe7g2i6t9zivOKQVkm4fHwmJZ8PYd6n7acjGURVy8X0LkOifre5GwoNYXy8D3ZxfkNTj6FbjaKl+oOsODhCHKCO/PmGU+WZyrqhylLm8njBJfyt6Pqzejt+6P4b3Y3NOKL4k1ruFppc6SPM+IWSq+tncuUopfd/IwShX0GHAIVoTzXjlHhAv7wX0c3OzgzoU7V05eaPIC8oLolaoHhxWqFEopHEfxmtG9zx08KrBn72p/rk+f2bEI3+XxHSuuzz77jF/+5V+ev//n//yf+Q//4T/wta99ja997Wv8zb/5N/m5n/s5fvzHf5xf+ZVf4a/9tb/G7/7dv5s/+Sf/JAC/5/f8Hn76p3+av/SX/hL/8B/+Q87z5K/8lb/Cz//8z39niEJ4BFs8e1PPz5/RhfCB4sqHHko5StA/hQdWXelMuKuEtbuHtTBmr6P0vvJCJeDsOlDtG9LJcz5LHCRc1wEU59mcOV0i5WMLJD2NfizEcobclmXt1zRm/qSo0aMLpc1iRIfRptBciBVmoe7MZZmialgpiHoR9TAn7jWYkP99rPtw6hlEseR/HIVaB2d3xn3VaAfxgOjbnicRbu7oAKU8zOdeY/cgYGW9xPIuVlYm818JGZDtPS72vUBzQDR+lOBELJwUy/5YnSMCZcU8UDZEEStOiit11j3N+/vwx8w7+e2u69hV0goVLrU05muP4Th/su5lneGLx2W2Q3lSfOs6HvNcudkWiN4eQCLTKyRhJ+t7PMLAIiZu4XlNVv+8Rl9XYvu3p1eStymz0WEqkAyJSiAKsxHrzDcSSjHWusYGE42SbWGGurPQVzW6F2vxmqmQwlmk7MAt31+9mSMI+2BYj/IZnMEl1zvGqn1lvjbv21i56WmgWyAJzQmEkyh8Flh7iLyZRqiw0IhuABZ1fFIYUuh6UMLtTDI5Z8/w2lAtJWQAjzJzX5Yf+/35kdiC/f3fxfEdK65/9+/+HX/0j/7R+Xvmnv7sn/2z/IN/8A/4j//xP/KP//E/5utf/zo/+ZM/yZ/4E3+Cv/W3/tZDqO+f/JN/wl/5K3+Fn/qpn0JV+bmf+zn+3t/7e9/51e+K6IsGaQ8hfpHiSos94mylKvUo1KO60jo8VOjhgBTpsv6dSRqZMtYfa6F58rei0h+q0jWRhbKchYUfGNzPk/Hm8NoXVUa7B2pKZw5ZgGN4948e+SkZSyA74e+AYZSCF2YKjNHR0QMxYo6uMlDNRFcMZCpqUax5I0c1tzjP3hg2InfjYSvFN6SFkmm9UyNZNbTQVZFauBQ4X11wFRX6ICzJJ6t+pL6SNX+7knt+zMldc5TCP38m4EAl+w/FWCVsP+8jzuC8HxUVn9Pkgas0iqTSGxy2ulNJoOscee1ek0hZoJ55iduCnAidNPfX9ftnwmsKoZQdvJJqaWx3+ZDPszmVc3Qen2yDvXnbGQgMLpJ59g/tvVQBK78728tvX5V/LXTURnBoyuqztT+m0lqafHoiympFIrgXJfBQsyWaTZj9b9kPKxVXMJ1MgFTQUT33rEPxXNlGF1UU704sxb9nKsn4MVxBjd4Zp6MIW/d9OMsbUkHmPYXGSiSsG50xtllaklMmQPWUg2oCv4IovLjiGkROy+AcyjnUfXjbysulMtQfhYpY9a7I4oa6M4gUB5tUXcjf57XzrKzytV0O52vPiu67OL5jxfVH/sgfYWe3fj7+xb/4F7/pOb72ta9958XGHztyUL5IcT0/nkOFGbuYuTH3LMpxUC6NchEutXIphbsWaqmIVGZ7kqBzygVoGEOHiygb6IhQHcNDaMUc8UNBeqFIYYgn8rOnDm14YRbDF17vvHZXdpdDaffgL8OoxXMwIvAiSldXXGeg5ywqNUcfdFGaDo7rQamG9kE/B2MUpCtmxYdT1ZO0WdyCRaGxKzJzQ3JG5cpmJExdYg7Bt25YNfSEdp5INY7jBasedrzqlVsfMBpDBgdRazql4pOYzV+fQ4f7Gpiu2AbdTi8olEdNX0AGla153gam2Bn9DIl6lzKDgTk2viedxaJaVk6lx2rbI/NGgyH6GCbZofdR7J7f8AiSyDAudCt4S8qRapTsHp2DkYHdTOjKNEYSiRhC2/I+H6ETPprL23r0YQ354Pflne0VXfl6CSVfZFBGWz223gN3PJ91x5O3GSLcwlEiFlyE4gvPYAF6QHt4Uyg6FG0S3nwYXpEfFvN9rofGvjfsxYLtxODFZs5LKmip7s0c4h5WzM+BuqU1BKKgOBupDvG5GaM780w0fxwxtKbmOSj1rSYdZvvZVGBDQlnZLLFJhJCFrp25ra3m1GHw7lGdo3DvDoW/o5x2OBzeooGoZCPRioyDYgcHlaqFixYuqlxSaZVt06VR8e0ee6iwPL32XRw/GFyFzyHDj3ld09tagmDoSmK6YgErEnRP6h5XrZTqtSCqFdWoaLCtnHVayGEJiy9eywSW5M6CIhrkoxlmcKt/0Bccemzis8PZGr1U6uGeV1E4dFCkpzohk2NZH2biOQpnXHAl6nIrEsgavXMzBBF5ObfgNpRfhLYkoU42PBRBCTj+QKOWxhxp4kzZhKgbOEjkHPTSqZfhSD/xRpL1EBjCfUTKMCvy8+tybPO+PparfPgZ3kWGh7AJ7VZ6hPWiCaM4+ZF/JslrV8OP9LhMEshRKTYmvN7PLxFWe2TnWFwSPkbuYTgVrUXtjaTSmOs1vZZQtrbyW8kQD0kivPsv8tCSJAVfqpFdyeS5nXxWJxnE9NPs8R7mGK6zb0pqtyWWn5XvK+xNU7orLLqvlyTJzfzV3cES3PnQ4yIucHpHsT7CJvDlsfw+HRkmdBYMDTSsB1Q25N0hUA07CBo4V17jgtdCFXGEcXVPq9RQXCYzV5b0bkSn42HmkPf8z0YoLWbJR3Za3kO1kz9QJHSTbZ6JkHRSUmRRaFX/PXvuuRKLUGFgKNqQYMlwJdZHrpVcC5BAFJ0E4078W0ql1AM9iufsy7reBytmf+3RuvnwyHnL59/l8eVXXPnzWZA9K6woBF05g+FNBo0ZIsgaHK//UA8PZpiwVrdsIgSRdC7Lzw8VIgFtsEDUBarIoq+Aw2Z1tlpwNz+EMiNgs37e3CDn2WlF0ZerM3oYHDYoLcEDNhdfxsjdmg7Py3rUlfn5RYVSvGuie1C++crhnXidKTsVrwtICeYBszHzB6XgBchYpvncbn/wIIDhQJJ+Di/EVRdz3Vxx2RCkEYltIocxpqExhdYDszjLy4shmPNvTEXnci5rksYmTBdwmwAjVBZDYE2FJm6MJKHt8nxyqS0Jmsi5xf43YgiWt6d0KEc4YcasQ9qMrgRIPHa4WvVcM9MU95nfvlSGRMgqvealwP2ZkYhE5nsePbtdWT3+bf2+b8KltNa9rxLkEeMX9xKKi+aKy05x5XU+Ka4cH8tbkvWV+Rj55/hvo3QS8b5ZU3EJlDRWK8gV7AC7mHtaB6HEXKlJVcqlosXDcKU4KleGTMXqtqktxTWMbj084ZABaSCO9GtjTZstmH/8tBmizVsVUsykl0aV1ZolgSiHe4SpwCyMwNOUu1Xuw72sPjbi5dgfHgV1g9h/OrS/lILWitYyv2deazrvebHGowcmH3m+GxzwQ664dHv+rMh2gEbxkM5OK1oYdC20o6zYbWUu2Mubg8ubg+PqyJrjUqlFaerCXWo4U2NP80egyLyosI3u9R3IqpeWIMQtyhiD3geqg95PjA5WGFZR8xj9671TS+U+hKMeHOKhtc/awPqgD6NIJallnV7K1liYW4JnN0ofqF44jsJNLb6rMARK9bwVF7BAP5nh1f5juELF4/SuTxwyzXDuxsy4YJ3RI4wJlCbTgDAbaK2ICL0bpTTUPLwxArchotz7WHmGbP6XRK0xkBabwMKpfZClM1noYd2kla3xcykz25SDA4TzfYmNG6bhZR+xhuoU3SO2UH51iXWlMxPq7zyoDDlBlK7dC52TqDWvOT5borqm4oS2DlZetRs70ME/tftC+iQXIqxNn4B+NwscRzm3jK2z5D1kLuoh9Bf5PHkoarOYEgvP9GRR+C6EZaUvT+oO3NTDgu/H6q91hlJIo2ksRbwqgeeA5dfPfVhGcY9rGqmuyBTZkMYGV8E+Ga6wrhZEyhEOfEMYqwHMin58iH8Hp6/jccdrJNtg3Jxkewyb9VmphKbBkUrYp4Uk/YjQAslc/yzTrNosM+EF5A3YVeBSwzNUSoFy9fCnXQrvOXg3Ku/GwftReR0Ht6GcGBZMPK4DO1IGWqFeCse1cLlWLteDy8vB5U1F3xTkoq7h9l5juQTz9+dj98B0e+++Yb7L48utuD52PGv6TaEtK9Dj7TPPWIuPhIPGoAp6KejVGTTqtVKuCdKIKvIiZJZ9hrCIUEBLCxjGGNFY0hF5aT0VkdnfRrWAnIHoNozu9VSoe4XDaG3w7hx8otUVoQpv6oRe+DoSpgDJ3kyqxWmVzJWPTbIO/1sPyLgFp55UOI5Ku7dojW7Myts2GGOQZLq+l9fP6XuIosNh5ZmDsO5w4Nvnd7QU6qVAdaXJGFRR7mVEPsKQIzwDl6TYRl7r5VDuQXgkyc1Gd2p9LlSNoi2E/8pQFekTGKCjRydh92icNT4F7RlhRAKYcWxK5WAFB8fcnxZrLP8CzhHnM+HK0FCaFESqc/blMsLnyEOCHhpMBfXo7+yBOl/kHq721zqFNOjHXIUWEYL4mm1TiGU4MPOAjw1K9OEcPWwJI+HsKYHyvXUaCY8KuLBqtYhmqOzIwWxX0m0NZqytmVDdj8zXWcL5QzlFraKHBPMt5iHRCuMFh7y/GLx1r0uuglx1ei36Io4mzr5cYQ4my9OMjATU3dqgnwFzz9eLhwQVplc4Lztlky+YeY+TXWTYLOMxkVBahh3uGY7qrO1IZUhhqGJHxY7KKJWmlRsHr1RerXAfhdOEezDDJ8RDxVHGIm4416tSr0q5aMi8lHtKVV+boyhWw+B6yC1/5HiIgMTz3eMqH3zi2z5+MBTXxwbuQWmtkFGqlFnbL6DFe0eRbQBquN5J/3QtPqkBk/ekrisikbA+Eyk6cB5ACZt+Qs43RQerul69fmrmkPZHvD/DEa99cNXisGpRrgXOITTLjIdEB40MBOV2Dit7JAjEEYKlVO9eHJvbxDxUevHNat3rrQiiXQkFNENVfiMzhTeNYTLHkJamRTgF+jnorXsL80OxUQIk0Wmx2UW9H5LTVQ0nVp8AmoD+kqE4CU+OSFi7QivSH7ynQqMGW3l6U3s4S2W4grM2FVel4SxUMr0JZ+Ibe+ZmKhNPze2/Gclqud7t32ECEp6u13M/xl2yNmvBSvwsto1xLvzl7QvdssDasZEJ5th547NkY53pEQso8/nywj7068Z2zuVZ7kprel0WPIdpmSd2ZcfP7I/0QuKH5Fqb921zqHwJLm9FkkU9IeEaITZHU3irmot7LbzBa7euoC/RBuRYnounBhxBO/XkVlA8xoju3x416cO7geffd5mwQh9Mo480nMUDBNmjbGCrs7Gad+6OriNuwDnCGKl0dUqrXg6GHvTiQItkgL9bdWLdERCiCawLFGaAw1SMOlMkGgQM8byII2cjLdK1PCqtZ+X1sd/tI3/7oQ8VPg/UjjqLvz0nmifjdQRNboe3DyGSroJyjMLlk8r1faG9Fq6fFG7vK2c7KLdCv3dGNDCc4OPhfH5ixsngsEG36Fs1CqIlFuuI9jkacWUv4PVWFG67SsQ4TYUmxvvWeFvS8j95UzPJ6ymCi5Nj8FkDCQCBmaOghnmieAxljILqweV6oZ83hjUPb+DQXq2BWGyG3QxEva6mGGo1YvXhaYWXpKLc20nHFaG3/fCN2sPrcg1UabcGMrheXhiloAUuRRicM8zy1U8O3o/ObXRPswXPVdFVHYSPDgiMQHplaKpK4zK7Tp3hQY3gw/Z+Uu59LU8jldWDxxUbrsuNDOT5GY5ZB9Msg4MVmSG9kMFikVcfsdYGhzh6cdCjK9gj9CH9Fy+CvmIcMH27lAM6Bd9UJ7bChITX7UrX1/6wvgW0c2t8GGR8zHWNh7+tXGHblBzz/ZVGjXEt1uY4yhirwHgHX/ggpQZ6tMKf8j8P+zyo12aOpiZMXaMPlnvmqzAXJz6+glxAXgQu4WVdBb2WVQt1Ifp2aeStHGDRm8HpvfKygL63QOf27q9lhOJ8vh/XyIKEBxYWSIYGd3lVXIlJHa60og+cVLCLMEqhScUv9MC0UuTKTSsqTk/wagevXXnthdsoNMuuFeFLB5ilBiECRTiKekrkWqlvCpeXwuWiHNIjOA5KXV5Xhu+fjY5dFtvT8+8EifgbHF9+xfVFr8vH35Ob0GP3rK2p0GqlXwp0ou+McHxaON4f1PcXyttKfVM5zkJ9jRR/98DcZIofBM+azHquPrybSK9ReCmeM/GuyBaFjBUZ/vuMfatBtA0fCGc3T7CK70DlzrUOEOOzu3p1uwoXhT7CM6qC9OGCwwathTBVQ6+VouqNJcXRVeWN8pWvXfnsVrDbSbPurNNVPFzRb9EmRSjHxQEduVdHiyT1+MCazFq1fu/Bd2qUfqKXAymOtDvCwzkFb5d+BAjmfPWQnqTXkiHJMBdMAq/hCqtao5rnhYp0qjWycsXDhjcXrLJ7BkupVRpX7r4yHCniolxcYUyqHKs0q9y2AGOo62kaLePS15wXhUooLs8KtsyKBTLUTOKKArWZISRSDoy5xAULarEVKkxlMsjO0w0DjqlsFrJyqcnH8GCGCL8oOOmAi8wXM5GbVc4Jcinh6eroq8lj9IhzYIMtj0slekrFjX2QR9lCiJYKy9eHo+Ci9qgIclFvKXUBfRG4KnIR9IqHBKvE7w7A0KpRp+UPDWYuM7whanPFNbo5tL0NRhv0sznoKCIT2b+O3L8j0Lo5buKzuHu789BgM9FUuHhI8zDPv1WwqrRSaHqh6wXTC6oXhlaaXrjxgljBpPD5UN6Z8t6EmxXueCcGy9C1rLH2fL1wPYzLBY6IMF0OeCmDSyBCfR0PzlI9bFp1gd8KT2UdrEW7/9zpU35oPa7n41lhfUSx5WZf0OcIx4hbIaOuGK4Mj/nWF891levhMd9LcQTPiNBExjHGinKMENgjwgY9HgqJVl6M0irOA6bFFYyOWacxAQribHvdoItTCBVz9ulLMY7iHGkyhEsRbkGnNFuSx2CYOSjAzGvK1Nyy7HRMjHIIX/mRN/TPbxjGeaaH6OFFOdSVqTn0luJhlN6Hh1YYTmE10ZwSOJGMjVhQ4EBvnfpyIKqMJCgNYT7Ui6VVXOlK5KWyxNbCw/AwcArgk4udUwG51d+D7HZ5CkfWE03hukKIqbgO7sujSKBLKLBK46TRAjphGCcL3hyY1XjFP6+zhsr9MqfyifxifO6RxjayZJLKb88oJcdf5vm2UCFJ5xShRRIUlNVnqdomYdR8fDyT9qi49qtLPzONwR09WcwfXmRMhAblw/YkuSszrJZ7Y9u/luG1VArggAuJULjoZK8QUd+bV/eq5BNB3uj8XS/FaykPccWWhLTzSyNsbkDwZ1rwFY7uhcQWxlnvHiYcAcogG06G5ZmyYN6j5LjPCYIAkDzIqlQEFVdeF5vdFZIQt+M1pUMOhhx0iSaQFIYpNxNuJtzNUwndhG42ZzG2tBsASkQ94KhCrcJRhaPAoSvOIMCIRqamskpTnlGGz7L3C2TxFzoe38bx5VZcH1NUu9v90eRhOss9MgdL2KAwRGmX6otpKPVtpb49qJ9cOd5eqG8O6v2kvI+kSxsL+dSTyoVoceLKqsWmbpYoNsOih45KsOQ1pY8SNDMeQxkS1p+aN26UzmmDakKVKxfqDJ29uShj+Mb95CK89u5hDHPhP3QEmsjDgX6vhtSCFoPeMRqXQ/nffuxr2K9/A1Hh3hrnuKHF61lKO9yjiri9GO5SjkG5FAd0dJthBCsBADYm0HFYMAncOm+/alCFJoVyHN6tQox3YnyqJ1ftvCsnvXs1ajFo6ROEBZvC9eDkym0i8WaGSAJWbi5sL0HT5MrqnICNg8YhobjsjHBY9qEiYPrCSeWUCycXXnlxh8FG4A3KtGOyGFjQYNcgYO6DlqHZmYUnPCYfV48H1GjAmXcI2cCyJuOHJTjEPby5lqfqi80RhlRB8H7UmfuEWRz9gQLLWq49hLiFDyVLCLL1iVFn7dmgckYPKlaIMHnJxloPJEI0vFt/TVboaebCZJKKFAI9GOHBLMItqp6zeqvIW0W/qshXBHkD8kYc4l0Eqd4nbCdrdvazgDtlc+8Aj3g5hwOMLAEZDUYCmAg5MAQZGT4VAs6coodZk5UKOm57vkckwoTMnJxdhS6JjU2oS0E46HIFvSB6pcsbnOJJeDXjNoz7MO5DOUd4XCyZWMJ4LqocVXg5lOuhXC7KS1GuEb3R2BtJVV3pXrhcyscV1/MRw8BzqPCHVnHl8TwAaQmE1a+S1uGyCo+A7PocrvzXQOm1BFRZ0UulviiXN8LlbeHyVjnvyvFSqeN0LrrTE7gjCmsRwp4d9KG04UW7Pr9hgYvXhQyUMgq1WuSHHP3npqVFcSGThua93BG9cNELd3uJMNjgpSg3cSvoU1HeRfjv/Rkel0ZYMtu1XKFzUq+FopV2u9FG5/37d3zjv/0ffOVrP4JV4f15436/M8y8f9aLwCiupM82O+kSNDpFwLQgl+R1CIqbLMTskXjuwv1m3O+nE+++OWimHNfK9SqM8x1FGsrJp0fjlE7vA7oH2BYwYuVYlhDNrZ0QivaQm6l7GIvmCEPZe/juKLrIC3VHd4rBpYxALQ6SK6MwuMH04DUWX45BSfEuhWFeJ+NCplLotJmJO0IpC80mxwd9g1ILEq3Bdonnx85V4YJGw6ov9LgvL86QOW5lfkuSDqcHuohwM5ya4/mW91uYtaHzbwnCCO/jHEGcq4EmtFAGNpXR2sMZF1w/5ksjP+PWqZjfgVp4WaazBY1UX3/6AuUtyKdgb5R+eeFEsUBtpCJW0pPrYUj2RRwTSsvawO6DcTfsPrCbYXeJ+jNm3zAZhvSY/wdFYet+dFNcuv1dQ2llqPDijzPiB75GLph4bkvKQff4JyZvELnQTbmb8K4N3nXjXTduA+7DjWihg3h0B3Uqp6Mq16JcD+Hlorw5lLeXwrUqVWWWMixvu3tz3MxxZRNX2x67bN5/35frDz2qMI/0uGbcNSCfsjysPSxUtsnIbXvSw8NxD0wmykYdHnqpjrg5ikNlM0lMFj4mxC1+zAJkZkgh48vOqZaIKN041mR6gFYWzY0oTiWjxihK70cUWPYoGozdoMr14tRPrwkljtj2KIOm6WEapXhVfOmVNk7uZ+PrX/8mP/7bvsqba+HNmwuf15vH9W0wGyiCQ5jD0kruxWztbhkuifCLmNPe4GVqEGGW+71xuTgPIEWDUR5ehtMCiZ0UOxF1mHEbzVlLvEp6C30kLDwzNM/LwrbHTiAbn7Xdz1hZHgtSvKy3sZGoxb3jVHU2FGuoLMXlzkLxMCyTr4MhCy3YYj02Klk7NTY1kdezhw58hGW76/1eZzBqnm/9/fG9j+OThddj7o0qKzzreyYhKI0XbugIvsfhbBgSj2gwEIpLNuZ32xCFsgm6FWYlAVJTWfGg6GS4kSizqFic6V1dFTlDhp9PRLxmK0LaTerMJ3ptnl+vinlYM5R6zjPD1+wIg8sfIzwusGbY6Q+J+7TBap2C7EvM52WTT7MBZNofZXsEerCrl09k8LvLAVoR9Z8WPIOmB4ODjnIfwqsNbmNwN+OMqI8bzSDiIA60OhtQya7v6gCNWoIpSCYae3nbDvaRnSc07+mLarmeF9v34fjBUFyyPTbYNIUVc98c7TrzGW1u/rQXq1ycSDWUV6nFldW1Ui8Hx0vluFaOwyfcKaCUPrzdifSBdJts1077ol6Y2L3uY4g55kJCeW25Lo1ckgmYOkw/KVwovvhNjX4IvV0osclVnbdcxIXddQzOyJ1mIaSKF0Y39YV48Q9511Y7aGfj3hv//de+wU/8rh/j5VL49JMXvnF5zzlOxmjBquFmkxQ3twSBUsC8vxCnOIy+4Eln8Yqi3XI29ZDi/XbCRSitwttCL37vb+tg3E9sePegqu7NOsqwk9nJZecvIb/865CMJsj21z1ns9PHLugHFDEGFawHZBgnJ47kpepweH2EGQ3vjL37LiXCgT2gIztbuhPiKo2DwkGXGlbtoJkDPxJ80ine3HJIVBjktQtLqNh0WhLxXMTPJ/Z435M9xjI0mGjBHkjMxgpKLWDL2jsnb3j1kN9pH0DbZYe8p3ETwAX/m8yQZyquJeFZrwfQyZniBWmE0oqfwTAtQFI6ifg8SeTDRtT0mcrs+tvx+kXPN/t4XLlTCbYYj3fDcJLcHkoquzNPJXwH7svj2hXtNBFGeFKhuCQIcDMilCTAiUCcIcIKI5TtOTOvhSEVkQuq2fCxMqLx4xkBvbsp78fgvQ1eh3EP08l3oVLEyYGHXhCtlOKUdv6oHEFxV8KY3sxCdkT2g5Owp2Ty53PN2rPS+qENFaa23xUWhDWzJ4uzIPTDj+8g5Icj9pIAtVSux5XL9ZXjUjku1Yv0qjoVkwgS7cYTMeVf55DkPoyGQ1vHGIyuEdN3T+1QoRejW6GJw4YNgg1Ig5vMnEsRo0nnZnesFvcIBlyrKy/EaEN4qwW7wDfr4GYRkQnkko1O5855OI1VrYPrS+F8Vzjb4H+8P/n1//rrfPVrX+V/+21f4Rvf/JzPpPP6zpWNacP7ER2UXqOTuvD5N90qVnW1MKx7zkAziS4zL5UtVdq9I68n+iocb16AQElL4aVCLUbveLsQhU8+PfjWuxtnd7Hdt/jEvl86snFaLPTgo8eVeyvLp1egPs+Ya2QKpRTUcY5LbYwJmzf2TFGjhEILD86W3ZqeYefk4OIt1KM3rYcMLwgWABC/1h48l2YyhUeCjKZQ2bgGff1aeEzn3Asy/b/sT5bPPRh1DTFZtzxfGnoVR2nyOR9yCm71WbIpnkSdSoCClhW+meMZCrWn871u3wHBPeiZOukrwji6x6m1KXLAuLpC0e5dB0aHuwqvjpELL7ZEYMYNj2pKNejWUfMGIAlimRGwzOGmMrsbcgNu4fkl12ZaDwYzMSdMgxrDgReJ5684tiKZYYpgmjMSFYnpJUV3ZVSx0HTDvHz+NpT3Q3g3Cq/DeB2D16GzlYp3bhBQ51614wrHC3q8cKkXJxWvhSNyhgui8xEZKbgGyTdkXvBjntfHEIQ/tKjCHMld4++u+Mb7tSAZy//KaRnbdrZoDWHmG4Ph8fNMYDrFf6VWZ1AuUaAoGRoZrM05YEif7Sb68JyQ11MlUzwL2aNCGTrzYRaxb4k35f10Bqd1LsW7P3UJpF/GztVh98eAN6Kco3tk5gFq7F2Lm7gXVa+FOgrjHNzp/Pq3PkdfKm9+5A3Xl8LtrNx7o99PV0YmFCfL8zGzCKtioAXrThE1BiAePPPJsJm+M7w55jgH93cn+kYRLZQqdLkgx4sDq+yE+w3M26McYaY6Qlc3JZ8eFqFy/PeVm0lS3QU48B25AsaWIR6Y3ooMNus6LM3whmo5qTPeYw/KCYwhitp4UGh7OFIt82kNONgbMA7TeYkZ/FMccZr+ZfIvJpzdAUepxNfPHfbvYbGlxDKv5681b71jS1lpKKvKifaBpLeRrUj6CM9qGW1zD2wk+b5actPakyQM6yryY1nzJWf8HHj4dTKRhNefXI/mUY4R3QikD+gazC/KMKEPD9N2cbgB4r3VejRZ9c7EzudXE7VYupeBDCY5MhJRjAyLdnxMZqdmjwUQClsJBJ7O5eZRgKzzCvIDNm+LZI5fvnQw7kBRZ7zQQrQ78vf1IU6qO5T7gPsY3Ie3MfFqAnNWm+BbHeUC9YocF7RekHpBjgtSrx6KnPtCtzUbglZAbKxOzXu48NnD+qJc1v/KcfGh4nr6YyKuHNHlHXHTSl28BmHHJofcYBYjF/GGarW40irFXekiwT491Iu1ot5kblyJcCHCiM2hJl4EHN1ws5AyaaCKBJWQLJElc5M7vP4cTtZq6uLKkRH5vuEM8sDbKnzemKFHry8R39R4U0nVDgdUK3R1eqpvvHvl+u7Cj7Z7UMAUaqv0fnclEYWWI5myTTxXBpGLa/QzDICprDbFYuTOxLrRXhvtVakHcK3048DKCyLCVZSz37E2kNGpLsXmOHu06TFsthSYUTZ2+GxB8iwzfZBtfzW8lgj73v0hJ8tQUlygS3tQSpFhgVAwmbnynNlajwNFJbtOl7Dt08tzPygv0H25bHyxq79FDpw1W+velqpIgMUCruzm2qPiU9tLBM4J1NDRPGx341FxpS0wQ2W2tO3EGcks65gXmIXH81pT2YVXe4orrc5qV+K+u3scUWvpYU8JLyU/H7murfB2DyV3SdcGJBKvZbjSSiLailCqeTQlwqK2yxdfeCuvFd4lkt0hIFEea2m5gpasd9lzW8GQYVUmkfRcmuGYeR+wUFzqHKEpHLJh5GmuuM4e2JjdyQ2KqFEqlAuEwtLjQOqB1gulXhA9Nm8z87ZjKtF5xudQ4XP46mPhwN9MoX0bxw+e4noaqBQEuYFHoKtuXBhICBblzjUqfOoH4Q+xQtELl/rCUU+O2jjKhaqHW/DmII3RBGnGGMpsUYKjBdWMZpEEHkKVjg3P0ApKLQdmLgBPqjdVnJnplRMwCMLcwf0A1QoIzU40quurQC9QVfhqUT67Ke8x7lHMrMPDGr13TAe9wKl36qcHnPC+v/J5O/k/vv45nV/D3l7Ra+GNvnC2BmfHbHC2k8IFp4cStBRMFR3Fa2E4nScOppBx3icC7iwxvr657+87owhWlfrpwfuokVG7o/VgYHz+elIL0cXFGK2z4Agy95BbtqmoFoPDjpQTkl0iuQobVfx9Vzup1tySzv5QkWthsDbsAeXwkJLbBOvs3tZklfp67yP3vFJpDEbQdAW4Afe7Go3KfRU7J1NHBL118yjrRPXlN2Wk4VGZr9rFBbQoOMPIDAOGIlwYx8gKjeHNHlNh3fO5PfbNmsALmyUT06AceFQAdktsHansUiEFAKMEi0WVYwM0gVAiJGnOlqG+/vVQD8MVQSugla7VIwFyYBwY4ownAcJoBnUIpReO0CKCUQ7XRlmQ7AhJW9GNuDUs2oVY6u2UOuu2S66b/FB6YQpSLDw5mQprkOdZ6YwihhZFoltFL4Whbl68cvB+KK/NeO1wN4nOxzavRVBMDygVOV7Q4w1yvEEuL9TLC5fLleslaUfGNKaW0t/5UuLYnYaPxRTl6WceP7ShQvhwMGLGPeS387YB6fnMoNHyuBK60UgoPNOoSAu4FCfYLUWipbWG1xU9eqYnsVvubmUP8TzXMQZdvKZLx/D14YhlB2dYWpauUluEIdKCT7SUCLR+0o5KKQdtFI7a0TooVbDqbUcuVbwBJYkmxIVvDwsSGGqc2pz2pgqXdnB+PrjZyTfefcvRZQFCudSD+wmtO5pKxcDcSyNY4wGHKEcrCBur5Xl6WQwCZRaF3GjQ6gzsfqe0C0Wcmuq1X/jKi1B74X67Y8O9iovC0BHCzglx1VxAV2lcpHGxM8hzoz5LvBhZgw3dRKYncnD39LYNtA/0jJBVCutAi42sNzIPDZXhSFSR5b8YwulBIooYLUNbRHZMZEbLyuYBCne8WubkugU4T/EGgJmJyoXv6fadX3DPiOc79jYj7pUtxdW5Tq+qPYxVoVHMG1BmXifXjgVIQXaPK+Y1PfDcP6ahZAMd6xtK9kvcXIvYD8GAUYlCe1Oq1k1pLStVMG8rH56LvhXnJPRooH+/ZIjRRbBZcZomrzD23nK2CHUhShc4KOX0C+w4k8Xh/IFSZO5fvxz3pjzFtWTAQayNRNkqzDY92S4kSAey8JkRfrk2lMJwZumJ3kUdXDECKXm3yjmEcziZ7mnQxgglutSoJdFBqe5dHReO48KlXrheLlyOQi1u0Gdhv+E1ZBJnymrUOYGP4u4xZLi//uxY/NB6XPsg2PYzrLZhYYPPkNuyHJI4KFFbiTQa6NqEc0P5bGR4UIu3tVZxpaVRjCG2hBEwWQDckgoW98mk4UzSarlAPObtCszDjyO7q2bcf7jwz33fbbgDUJQuhVocrq6HoYfMvj2XQ7jjTeJ6bsDuXovvEfe6RhlQlPr24H6/c47O+/PGy71yqRe0CLVWGsFePzwL721OVusHJJLoRSmo149MORVov3lPNi1sG1kvY7Rz0A6haOXOQVeh2qDUyjgDkCDGtUSocrh1qKGUHESw6pF2NKnXoSwPZ5HfnlQbnpNKr2ICEPw6l+2KD153a7kEPcQI72mQ1EsZRFye4IoBhTiJouSkTfKYk2xLWieyrFO4O1RlqqT1Ttme5ysrh1WmCMpatp0JfwdgRG7LMsdnj4CJzGVFSO5BcT3sm6fNqSzFtVvb6Znl5hEX5qpKlUrF11HRuvhpQyDP+46Qm1WwK8jFNoZ1Jo2aRPtuY/XLS4Z8FxtuXGXhRKcg2j3MXQ2pQXqbPb2yEa1k5DAjDI+6GHEjKb0sibCpzI2xzVyOc3QucKozC8UlJC/UkDWLLcKcbQinCc2Mbo+kushSeo4mPKJZpCMJE5RRVNhhGbnObCounTRjHyit38i7elZcP9Qe137kIG61Il11LkGmPSo0+nTDRwiDk8MTtRu018/rXlAtlaMcXPSIPJe3GKkIGgvHupBxfBGgjMhDeYS4YR56MAdQeB42rEEVCkqtwT0wBiXrwiK858TMriS7GV2hH8orV29KWU/n3nwDEnxtb9Tvvo3BK+KeTvPurr05ozUM7tKotfLy9oXX2yv91bg143q7c1B5I96KpKuzCwxR53GLbtCFaB9ewjYrF69Oej9w0reOidAJLymVQsUt3rPPetTzWyf1Rw70UhHe8PX377hS+eTtC+1dZ3S3lH/rJ2/4/Gx863bSewhm6Q+ewyVChU68eyc7IZdYDdOz6DZDgjK9LGbekhAevoJYcO2QubW2aNmuk5sCiODkwDICILiHSu7lvs7JolNyJeOrtJtEOLvyKldOOzYDbJVOLwnhc6qb2FnQ9h3e/sigf9C4bGTDJPx7hkrxnNMZTu4zYS7MLiQGSzilZ7J7KLvgC3p/QdCLUKxQOXhzvVC1oLrdlxl0N/wylWxqE9zQ3zD7a0mBjocCW+803Gh0w9G/2ssF9suqDLOH1F3RTj1OuHRohlxt4xOM+zpBgh2+x2wWXJGlpzjHYCrV8IbMGTcmk/zAWS3EHKYf1G+iBcoFK1eGvNDkCI+rcOuVe1duHc7RaTgDS0Fdaas4mrAelOPguBxcLpXLcXBcrlwvhcuhXMvy4nNFJnX0xAJMIA0fKq+c9wwbPj+e3/tdHF9uxfWBZcdSWkoIRQlE3Wq3DsTWlfl8Kq0uj9Yly44tFKq48qpycEilUBArXsM1NDyPDmqLyyusPpcBLnCLOR97Fi1rleBf02iI5y0/BkFam0cYXEWAqlCMXgb1OBhy0kqjXodTxRzQX7zdmHdiEcoAGwHNfmeM1zEh3r10pAjHYVw/vXCKcH5+cvbO561zl460QRHlclx4fW3RJoXVQsKcLVtLWK4GtfRoA4Fbnt03rBbcs+jDEXtR22X3wf1znIevVcpX3tAEZyQ4Ty61cRRFrPHu/h4zeKnQZmJ+gRWqpEA+OcxzNvm3Qo+aH1w5nQSKDfe2oqB0hj3SWi4WqyI278lSbtXDhm6I+07dC4gNp+aaQRhJTyj7WUUuThoXbmjz2qeh0MrBKQfveeEmL16UanXmzgZCt8vcGHuIcHVgzhzWAmCs542D4a1ddkUee0KCINeyjilpnO4ZpbDwInyfKTINEduEtoQQtin0BjLcfNPi+d4qhUMrVz0mh+UQ5wd0bkzz/ldhEiQyTy44L+GBk+mK53haH96ZWFpcapgEkxTR3SD3IrItkTP0uVHWMO2Uo2/dhyNKER6UxTIYYylFM6MG8k7MvFGrtxreNGVK+BjDZt6J2by8oZaLN1YITlP3tJxo9+TCOQ7OIbya8mr6f7L3L7G2bNtZLvi11nuPiDHmWmvvc2zOObzM9c0XWJACIUu2kBBCyC64gnCZh0TJOrYElhACUeAhsESFkqGETMkVCgjJIMRDAgQYoXQlE6z0zaubXANpGz/OY++95hwRvfeWhdZ6RMyx59rnYefNe3wcW2OvMcczRkSP9vjb3/7GikOGrTsakqg7syONfq1S0GlGy4U8zSxzZpoKJblNG92Nh5nVPV8/2gk+YbvPvk6Epn37poUK77d7qGJ3YofLaqIR7OcTvVxp5uKUz5zW2TEa+AwrjbHWeR99oDJEdI7z5ReFPUuRB0enS6cRY0biv73rP7TDunijskgQPXpEXSfsWGPRdzrkqFqoYgEZWoaeIM1GFqOI18w0O4PIXk+8/ZW3rB+u2GZ0bXQVujbyJdObUW+VrXZolc5Kru68tWRWdcc6DpAMSngPWDZCTE3igzQ7O1RqgaWMfh9rg1rsx6zfOlvyRp16nVHJaJqodWLO1eEjEZ7qBua5TErsSiVDi/C+8fy47Brae1CZ8ZrNZtiAB1fxhtmxjhJH8+89ft/juf3km9caw6wefYTDeR10+bNUkhNEDpHg0javb4baSJJO0oh9BTTU6F1KyuEbGfjvM8fV9+bmkWmlcOCjR+v5/KwTPDhucS0N+vfQ5BvXivdqSQQx99FkHK6R1qS4NmCfc+XC7D6XN+dE1kRJyVm7cRENG9+JScMagxvxIFGUUHlnV31Q8+GnXTpmjS4tjHA/vI2v2sN02IhZJbJkC1zGYTSir9JOQemALY95XSPzjCGvkVEGq+h0UCzc1mh+Dup9BAI+FDPIIeo1LnMB04DshoCui+nW09/uPKPCHxR4Ser1rZQ988qFnB1BynG8h1rGmYo/7jc7FF0+lm09+113f78EFX7TZlzn7SWnNWyq5+o+TVShqwMmGth2Rx26OeP19zcDDW2vXBKlTK6xl4eCRtSQxD+PcfK9zR8wp8MHZNDUqNbdYgqoh6IkEUoqPpvLDLVE7+2QjMLQMAyi4bR6pWsOPN45aSOqbcnhwqKdi3l/TnkzM3/qgcvr9/hvP/NzfLFvbLfqhkdh08r0egaB9bZy+3Cj1RulNawtlKX4MZgLa1uh9ehFGxms7+vo8ciluOM1wzZvSu7qMI929Qxss2M1KvTVWKXSeqcsN+QhIamQphmAkjYeSsaeVta2sbXKdRbI3TPdrVFivEnZK0SedQnDMAtsRwZhgylXiYbSoDR3Dl22LIcjGxfjoDOPfr4MSCdr3a9VkVDAIFFFQ9l+gHxeZxu9UkV8n1l9n6z6h6RLRUtHkjO9lI5KOC5zwO8wM+NzHfI5dByPKcWH4uPJsdt2OjYcjmuHBg+HZl08xdihCf/2br7Gw24eNZ2zpNGACUUQSbu6e1F3XCVlihZG79YeMEQwUM0Fp836syBo1F1sNOkaWNucrCUOzpsoSEUoJ/PRg6ghVHQvi/ul39gz56hpmRLqOuyQ3+60dgq6lwN6ELeSaehdRjazN10bvdfD1oxjnhzrSeG0PGvKmCa6pv1Yd4Ma0lStWwjqjuAFP/iiSEhFaZmRspDSQs4TJU9MeSYnH3N0dBzehz8e5rjTkr0p/Nn2kjMaXKJzxjWum69z+/XjuODjTutgk/s26KgClsUneXJ6Li7Q3XidcH2i4pqKUi6JMgtlzkxLYbpkUinUFh/SbVd0H+fYVQ18gXeFSiPHEEkTdWkaifOZiHHZiSKN3pJDcMRY8I7PAYv6iqmxrRtSImbfVsrm8IkArRspK+8tmetvfcXj1qjbB/yu/+HbmT78gJ9vb/nlX3obAqTGphtFMwnhahe+XDfa5vUO1c7j7UYmMV0LrTXaBq130k51xqPFKLALC5qV3CulTtx6pVqjsvqQSfN4esTVYko1ryV0jI++8ES3wjJDSspbvDa3rcKr64UpK9sK3W7M2sjasN7QtoXjikaHkPE5BF4jbqh2nO/Rq3Uzp8EPcszInocAatQo3KHZ/riNoX8VtDQ0dbJursHIUfB3wsCheeGHzbPEQSDYo9mRsQu7iLPiWSVsCNkzAnEndIA7LQDNQfo42IeH47LI8KKu1nFiSjXYogH4XOca18j5uhhJXuzrufnbDX0cO9X4LfG3OQlJxcVccziuKTsZQ02P9oMe8+0q9NAK9MDCGGN2DLBkSFVs61gS6qZe09KGSQOtDJKCnoxyRUL3M875/huEYSarNCZdPSjMxxrYiR7dA7YmA1XwA1IJ0lXH1eSbobWhcQ2juO5hlb0UYEOBBA96nFPhrSKSFUnCRsesev93Vaxu0BRpyc/jOAuioBlSJpeZXGZKmSllYp4XyrKg84Skib1gy+G02jPHFUH+qXqxby9lWmeHNZ7Xd7z+a9i+sR3XfZb1Ekx4fu2O1hxR835g293tXs4mwkdNydmFRcmT/5uy16g0CVIlqK+2B5XYEVyNdj6nyAeEMTKzOJGSghIvhna/wFp3GKLv7MQgbuBwlplrkBuJ3jPWKvRONljNo7YlC7/lc+/xpbcrHz5W+vohn34zIZ95zeMXf5nH3vBxG66RpjlTrj6LrPdGq16XUxuRoAsOm0BdOy1U731QJscYdbz3hO50+24EA7OzWd0zlzMkJF1C6BTa1lmfmiuzl04uDqGIJRZNaM7MNOp6oyS8mC3Vh0hqo8RsqJ0h10/rYb9ZwIYSvUm2G2qrp8L6XjuNW/MMy8Z4BzigQ3C18OTfORo6lRaOyGcsdTlEgQ95X//MYYD8w8ZSPpzaaCw2JNiJx6If9wdAeQZ/DtRmfHpcOOc/B1lgMAmH4ns/WZwzFwTbs679oUGBVzvqXPHlEkZa4twLGszaAN6DlPTsfMXaGUo1wgGrHQfKLziL38CY42YNsYZK9PJZ7FNkSgMmbPasS+lgB9tg9B4HySRuwE7KGn55/FSJI2J4xjXg1V0pnxDtxT1nPL+32AhuC/YTdzSkizVvJ+mbn/+eYvbscZAHhJqG9mqo/5STRmFKUe4YNug4mLzIJLy/ndbnxzY5PScvPPZ1bN/Yjmss6MbBVjoX0+H5wR3XtHDAP+NCOkEizxQBztprRH0rJ8qUYqhkJpdMKoKu5+bIUcc5FrOf86h0qWDSMXFhWqP70MDRbyIOPSZzyKN3otdk/ES/kh0R1HBcPga+W6G3SqpGCX+YxFiy8Nt/66d5+LDyi1945INf+QU+9eY93ps+zS/+v/8XWCtP3am0mxQmVaZlpiwT67ZSbxutrXvgvHUhzQmSsLVKo4P6mAQJVRDE6L3FxZfAXEMwqA201Z2wJHPmWByjUNTxi73iUGb3qcmThnPXwpNtXDSzTJ3clCl1knnzc1GXiJpopBqZTGecCD+vXk0P8oEe5z3WgY31ICeLdHZcEz7lNpsbdvfHRwZygsaGA8HawSwr7NxBO8yNvz5z8oARCMhoRj8WuAasoHeLf3Bo78www03a2B/89x2mSk5GxXY46zCocQhPgd9uy0eP2/jFO6wWZASN7DQo7yKuhCHdp4Kr6t5WYtbZhYUjG1LTMNpjZtnpiA3HEQoxQyl+h0Rj4rWZZ5oN/11+nfaQMvP61BDfPTdK+3Xtc8dG8GAYpj2ycV8fWp0NuAcjMj4mUtMIjK12SOow4IYr2Y9sLhy2dnG/rzhrODy20X3kThe0Gbk3Uje0d7QbGp16g0LvrSx6COmWzFQypfj1Og3N1cNNcRAwTm3sph8LJL7i9pKzOju8r2P7xndcwxkNSHBkS4YvpkHT7fE4PHdww7DcFaGfGbBznUvUT/xcmKfMNmemuVBKppZKXocumEJ3LJ1mp7R55FyJLYB0oZEs+UURkIqakFNyPcGaXYetrlFotmfGQOJY9GZsqmi6QF0pW2euxgP4ZOWnSv3iF/j0pz7Lq09/jv/bv//3TL/twvVTC//jd/xW/tf/6b/xhS8/8WRKrRsDG78+PCCr0t8a29PmmWU03KpAmoSHtPD49olulWpGKYXRkb0HwwJpUm8S9UPB9uQacmZgRf1zFW/yVlfgaHRs83/XBI+PDSsGs6HMtA61N771OvNmmZlk5gu3L5O6DzacYY/IA/E9dkgsfufpcSNGchC0bzudQ/F1UfB+HuPcJrivsRFkMxiuoz4TAZQMxzVDmlpMuPVp07Z3so+DJiCdqoUuLlfkRfIBdY+2evCZUvFz4iMGG+z5paP7brkB986zrOuRWZ5v4sEC4/iV04edoB8Zx2AYtZOUkWSCUeeHPGnM0+oBE8d12hkaZWnPPDSynQFHt8Q+xsdEYbKdmi6TwKRIFu+9ChIVBEFB8EyFtkN6yZw8jo1WhBg/JJ1Cp4jLX+mpDNGkezkg+XmUTUkNtEGVFCUCoYgy2PzPlPM3XE5DxKHkSNNSwqn8McKlqIQ+YUPUo2pjQyzHSBkXCC69M1mOVp/mTcuamHJhKsJclGXKXOfMZc5M14llWVjmyaddRPaeYxGH8Fyc8lOP65k/MNbDJ23j2rh/7Te945K7f4czG1nW2RnB8xT15JT215yd2Hhuby72yNB7upz5lJNHMSn6TUQ0xs37iBO/sGMBGCFK258J7nZt9B7MqsGOCggl4UMqG9Gki2Ep5nKp19NcQSmUQTTTJbtoaN3wUfGCWeILv/gl3p/f5/qbEt/y2d/Edrvx0Xbjt/6238IXf/EjnuqX+eCjxtY7WEURJnVCyjQXbm87rXbQhuZGa9EomhN5yvTutGPBx7RIMKFckNPoE0jxuob25BF0SDuR3GA7hKSuigGhN2dYNFjW7jpsWmHKOKNOEzdTam8U7Uxzpj8p1j0fKUkhphC7SJSfjGfKQyPAaZ4U7YzCQdqRF24D7jkFQ9LZITYDz8T2hiN53vOU2Wtomjqj/2e/1sWjfxveCPYsYmzCLioVNbLTeotIWUPm6Pmj5wL8sXsSWQsJxtysM8Rquw88ssHzZqPWuXf9HiG37hmAHnO1VOJYdUchLcb6iCuyiA1mXNSOzPw98fGqeG1xAmZBZkEmwSbBNJofzEfeV0tUU7rKfursAEYQcUJFUgs237mZve7w9W5zZY/v9gxaG0goxIgKWZ83SDuNnhM1/AhS7pMTRchyiOsOF+IQ4cbo76R5O46a19JTiOkiRlYoKpScmIrETZmK923llFCJwPnudN43tO9/noK8r7idndavAh48b9/YjutZN//p1u5ec4YBYawI384n4AX677OUuAPmNZycElkzWTNFs4vvpkTSdKhbDOgovtPCuJmMYm7Mk7JR64roEV/CEhGpy0DFlGUcl+9qe9+VU1wda1dcTUMlGGxt5RLwmJnyK7/4IfP7b3n1rY3Pfu4383P/5X/how/f8u3/l9/Om2/5NB/cQN9+yUeSNC9Yz0zkLNhcWFlp3aA3euq03uIqc9iUVtmqky+SuNK7JAGLut8EOgVpoye0KX3MOoqihUV0f64VjppFM2HroM3Q6uzMri5lszZlbZVinVIy6y1h5gXlKfl56TH2Y9j2MTJeOJ3j821fF3HFBZNMUtQq4j02/MjZAwzhOk7PndG8s6ZfGoDM6druBCwVUJgNJQWfbaCxg2pn9ftYtCe2hIkP6NhpzM9SxGOnfbc9m6Zzoq/Hvp6h9lHEOW/ja4WjVnMyVDIqWSI+wNTCVMfrRg13DF41ae644jeMNu4Owc6LFpJkMS1YYBGYFSsCxQlYm7iYlTutTJXsk8l3eaYwhOLnIEkni8U05MHC9DqpBc/dAhL12qfvg2XfB22gLZqpJTJNFX9+KG9E0/LOTI0AZUQrTovwe0nEWzYlauSRLUrfXNw7VGykp7iEhESMPJJEVshJyUkpWSlFvdG4JB8aGRmp7Av+OM3PF+/pwa8W8rv3hL+RcfHcSe0RMEcaazyn9N54fiB32inPou2POcTzyTFBLTGXhXlaqaWx6MosE00rNVVufUV71G5M98Kv4wBeUpEOPVe6BAupQ09C1+DuZM+6nCLsp6lJp6dGU8Nyh2lDZkizeCYDNLonnyVjyajthj52b/JX+KUvCv3/8wW2nPkd/4f/Kx998JZfqL/A/+O//Gfe/B9/M/LpT/FLX/xp1q1Te2erjaf6yMTM5TKxLRvb2426NtQ2ZPGpx09bZV4yahk2oaWNXrpfyKnRtWPJ0EvCkkMsivfF9BXayu609lpSwIYyYCp1ssDNHBattaN1Q2djWoSmM19ujadVuDZF0+yU6J5Z7YbKRpYbJcf7t9Dcg49dgAaHHl/0pe379wxGk4M1N9bhaX2KBPQXxjfKDjtELUFcGF+6j5EfaOEIngREakTewqRP+9fo2SFWGGSD3fkkIeftRIwYGZY79bHj+66P/RvX0XBeI6s879fdNSKVkE3yXI7ujkrHeCAZornJf398qdex/LcbPma+mflgVpEwxv6ZzuILjogokkEWoHi2VReliRP8nyisISMcDRE0C82QaEnwetch0DzmnKVYEE7q8GY/q81JFG3sezjPEvW46PPSwcYSzwZHg75MsvdYnkeYMOPN0wUkgQTZK6u6upQYObneqfaQBKtG3zK9Kr0nrHtPozvM4t+XhJQLZcrMs98u88xlXrguhaVkSh4U+I9vR9dhBMVHmviVtzOT8Nd4+8Z3XCOqu69xjQvvniUIx8Ecz5+HoZ3fM7ZTRjYERJOo95rkwlQKUy5sOZNDX63TA+LgWfTrF7N3tPeuNDVUGrUnJLcQ3Uy7KG1Wz5QMj5iaBUSYjT5Dnzt99szLumEmtNpd0kWEpDNbfURuRhJhzsLTrzzy3+WX+cxv+TJv3jxQ+6f4f/0//yfm+T3KPPOtv+PbePszP0e/bdStsW3eGCqmzMscWoKVWitanVWYsjhEmIQ8JSeHTIrO6hRl8cZoy4ZMTudNKpTUYIX+2HddNcHIU6Y1z0pFXOpqZ6dFg6V04VZxKrc1yuzqJk0Lq12YJkhWKJax1ehNWIHMSkqdRTutCi31YIYdNAY7jZb3ukRkWsMRRQDkja8BqyU5XaxHxjFIFYKM4dGhc2d7xO1sLTut68hERifraQkdkXn8c0IKpAXsZcJo5man7cct9lekIdqcIBA/SDj9BuMIIvYs0de/CyRzZGLj2pCxa/55OvIs8SwgxWNZ08HqTcMd2f7O6Ll3WHA4rBNjp3Fo/0k2bBZaUmoqrFJ2xcUbs2vcW2KzTJPMIao1ZvKde2b8BAz4FfNZaUK0UgyFlOhVk5hOLlndmURNTwaBRgxKPJ7AStSnkx3zt5L4v1M4rCzkIXQwxiYZXn6QhvUaLTFhS3ry/QrX7i2FcWx2iNClnZZpYpkLy5JZpkJOOep/Y5PTVfDCo/fO6IxYnZMCvfv713j79eO47iEeOMgZ59v5AJ9hQE5/32dZz55zA6MWfVbqtNIpZ9aUQjHehXdljCIZuNT4Q+PjuzOSXHA7IB/r9GxYi9pVQCsq8bk0LEHL0Av0yei5n1QrCKHN5BG8Fmp7QjdXz8gibB9ufMhHfPDBF5mXiTevX3F7XHn74RN5zrz+TZ9m+s+/zPq2Ya3Stk6loii5TJTs2dy2rtRWnUlVEs2672cRVBMSbQItjKUk2R0XWUMlJNFTJktjqy1ET4U8C7aK97ZEjcDUMDmGfTaErcGK8WSdV9mw7MoCzQpdvY5oHSw52UTUZb1UNrKFqrt6ANH3Is7dGuh2xB5wygx9jQ3VhjPsMz5DxviWWI8jGRHlmfLC/p7TzU7rWU4owsfqci+t8VGbGxneIJOMTC+78ZTIFl3ZfhjbWK0xamPU7GR3XLyIboySFjuzVkKJQaNWG3MPJKDicKqWHPqWkWbKyHRkHH7/fB3TB0b/FgHBKb0omxRuMnOzmSruuNZ9nnNiI7vGnnhO5bC8izKbDMft+3EWJ1ZCZLf7yTsjrRLOgexOX/YJx3Htqxyw4Mlx7UHEmCCS3WlJAonpwy7kPZx/OA9rYN5L5bdhTCSg5IA449hI8knt5cQknONWcjQcn3q39gV+t8m++D721Mc3eeE21uqv0fbrw3HB4aTOtalzs+TQn7PTewcdfhTe4bnx6Hd/j80EtcwshZ4atzxzmRN1TaxzptyEWpVkiUo9qN3+VswgNejanciBOx+fGNzo2o5OeXFyg2oMkJNKzx2bYLuAFP+wFIwpgN47b9eNmcx0mVi3hd5W2DYeUkJap7bK//o//2e+/f/87Xzq9Wu+9XO/mf/6334JnT7ks//jt3F984rt0agffUTdvNGxA1dxNlJKifqFStsqZoaWAjkkRTuUh5mujaqVruZjJiY8+px8n42O5ES5KOl1Qd4++Xyt1kgzNFX6Fth7CPc2C53FkLyptnGrgnajdnB1g0KjUc1no20VlqIsuXMtwPYWWz+i3z5C9OaF6yQ8JYkay2kddZ47rd2qH2tGRpNt4vmFHc5H4FAJGBnGs+L8800GQeSU/TsLeo94Dop49Jn5/treuHrUpMLAR2P0oPAff8dnBkS1T/+GCDbiImgE/Og9VGR5hmLsxygEqaWJT04gocnrNBqTFBSHDBlN+upwt2cl3fcr6o5+KftJsCGbZKFsodBFuTHxxMRqE08sbCy746p4XavLGObi15TqgEZb1KEzUBHxPsAkfhMZSepwXGkPHvbevizQ1NeA+XkY2YkNtRU1yB3mUxYsAQsOlmWozafiCEZKjrg4XCjB8dqcYdygNdmzUuvJxYKlOxU/GWQllcI8T8xzYZ6LZ1vTxFImlqmQVCP+Osg+95uzC4/JhnsG/knb/w+zLfhGd1yDAQgHVBid6LtxOStYbzw3OqMGkHk5KhjO70z66OxiozkVptK5zDPTPDGtE9M8kacbpTZ672xbOjTIrO2U1xaQyc50a05H7ii07ky7JmjWGJ8CXZzN2FOQEqhs3fH5ZBupD6kahw3X1nncYNaJ2o23t43psZFmvyh++b9+wJs3v8T7n3mPb/sffiu//MWf5UtfvHH76f+GtU7JmawTXTasGq1VqqwugjonLpeZp6cnWq2sj2+Z9AKavEhODdgj0+zmUX5Sz7ZSj/qVeUSO73PRwrYK6wqPa6XFuc2TS2oZBi10HQ2wFrCSURs8rT4huaorZVhOrmlYEjdz1dzUN15dHiAZncZTWr0PR4ykMF0mSN5X9bQ+ea/NWAt7M2zo9J0z9WiK3aHA0zqzsd5GhL5LH4kbmME63YMlf5MEu5E+1q7DcxaBmYysbONgN9Z+ghnlyA4b7qxa7IwEnDUyl6GFGUKzJnIyVRZG2TM0NUjWvdazRVamgjQXcU1N0a6klg7EQP0577/zte+9i86M7YSHz4KUkGczdQZgDzspzR0IkRuJ98B5DWvyLBufUYU4Uy4RMxjMEZARP7jmrBOeEkY2wjm4mk0WGbMoSSFLRcNryyMDLcdpG21+nnkOFiQuQTYg4YxT9sNxjf6sHW5M/t1aBD05L9mlq8L4dJcjcxKIa1mqKUohiZOVVL2XMhVlnhwWvM4T12VimRPzpJSEU//9AmSQM45Y/c7zCCFX9Qle6StlW+ck4Cs5v0/YvrEdFxxQ4RnmO8N/Z6dzoiHvdbCzI7vPmHnhc/fP9wgyJW9ALpOPCcilUHKi5kTdmnO/bDSNHvvr2mYBhWBOIxclaY/6lwUpgF0HUING7HpiPghvr3kFTV7NC+EdF9S9bY0yF8wSrSvbFnWoDP2jypd+6UPIyuXT7/sU5nrjw1/8CK0JekTN4gTy3o1G2yPnMhe2umG1UrcNrdkH7VkOmCWUEGCXKxrEBK/hnWndRike+xnKuuFphhJakGGle0NT0MubOxuJJtXb1pHmGWsTJ8b0BFMYHhVYrfsAW8lI8sbxnj3al+xFdekO76QEfUCAwSq08/q6z8hPF+W+lM4XqlgwJtnrdeG14xDo888ZznGvedmehcl5LW62Z1zP1F667XDmXvwYTiwo/EezbwRXp901vA0DhJHsCB5wFOrepKviyijaldwypSdSF6Qmn7YtwSTMydeDjMnjbir3Gp65Q3I2qach1pOri7jnYq9DygDz3DFJ1NE8AQp2ogwVkh5kieFlvBrkEHwjmUWWdTiqY95epwRT2JqTKnoED1IimJIgEY1jeTIdtgcpHD1tAyqEgMHdcWkENRKDah1OjeChu0ux1A7ouIcTM0HNG6xNLDQUQ2k/K1OOcSVZWUpiycqU/Dgd6ipHs8Q49+90YPfB/b3NlNO/L9nUX4PtG9txnTH2cXGOi3IcvHp3O3v5gBv2zOu8jYN+zzAc1OjuCzVpcsbOsrCulWXZmKcpSA2NtAXjx8AkYUFjc2Fq2xeGa5x1tg5pXBmIO4Cke+9LGU25YrSbOtOQ5uxjVZKoSx6h9AZvbxuXqZAkYTrztL712pkKF4Ff/K9f4lc+uPF/+j0T15K56MSHX/jAdRU3SJLJKaSgemejYhtkzcyXmdpn+hM8vX3Cbo/0VJiWBWuJZF6jy3NmkxZSOt0bLBWHtgYM1Iwye7Kmmthapq4b1jspu+qFWmPWG5JSXMjdpWpaQ6rweNtoNFY6RaDNjTmDlY7mTjV4tEJ9uzIDi0xcrpnamycqG1jzBaQiTJNQm9JCPX4Y92dSSFWilmRHPWnAQLHGBqw3nIjXOAatnuPJfvf6eGqvqQyHFWQje9a6YTsScB7NM0Rg9yZ7haEUQjpUKUZa6Ov0MGOVY/zkaGIWjCmtlFTJpZHmTqqJ1DMLC3MLx7UBm19IyjDQ0dMUEZyFksToU5Mm+3ifLuHoerzH8iGvNA62KDkgFidUbH6Jq6vSGImNTjMN5XT/BaOX2oWKWzQZd4oYWZSUIKsyqVFwGM5JQdWDmbDIloPhu57sBh5IeMBmTrjaYUOipyt2QDTYf+z9m6l4W824jbYLb5Zu3joSRCyLCeKJmBygPbQUhRT9Wpcp8TAJD5PxUOBhEuYi5I+x0Hw7FC2f3/yX6fNg/is5pXsnd29/v87tG9txwfPM6twIqnePny/y4ZDguKiHYeH07/k79ij49J0BfyyXwmW+0JbOtjaW5Ymtdmoz1ttK1yHJxN6bNGjfHhQbdfQwGa7Qbcro4teQxynJiQcWi7hZoveO9UZtrqjR1GjZax+S3DV++NETl5K55Asf3W6++Htl0oy8Nda28V/+77/At+aZh+uF7dr48i890VbDKpFZ+nHabtUHYxooyjxNqKoPpGyVujbksZJTw0LXMS+ZlAVSp24rpOTF48g0CYfWN4dv5gQ2w5aU1gztG/QNpVFKJ9kx9mVMDh5QlcNHQpLGrXZ6a9ha6bkyBVSTksYsq86UL6TZe79SUjZpVKk8Pq5IUbQKWkKCCqWLsNH2RtRn624QLYw9u9nb0KKOMdZb3xl+8STstHg5F9VMjh4xTo5rZ7iy18POb3tG4BhB2Pj+sahHGrV72WFs4zFPk2Pel7BJiZosKMmVHKQy6UbpmWyJqxXmntFQl5ctnaj9Dg92s2CMxtengEWz/w4VRYpRSnVnGQfunMkQiJuIYdIpIxez6kScONCdFMipsHV3vrZjtgF/Ysy2kqN/a04Oo2Uxirpzk33aQXJ1/sn7+HZBAWLy8Ugx7KRhGEHNOPe7PmNk36Iu7+X9mM4q1BIz+rIjLT1+eGuN2oStOTxuIysX7y+VFJPHZ6XMiWlOPCyFyzKxXGauU+GShaI+V9s/1ksU9w5q3MbKeIlt+FXVu96BSnzzQoX3B+Klx146aO+6wcup7UuODM+HECXlwrRkpq0wrxNlnpnWyrY2cs4+8C4wdl/8HOoCoQYg4qoJIqPJMuZ1WXdZHAgoRP1ytFFHUHpTWvVxHn0UPrLDJr0a6+YKGEW9YaTWldUqeTIKIHTe/sqN+VWCKlw185GNsd9CLjNb36D65/coOmx9Y8relzMvC0/rW3rtrI8rPStFzUV1NwvIzyEgq17Ldtuh4Xxk15dTEXI0Lbttb/TmvTRqDenm2ZxPxfTLTixUS/wEmThRxEdMNLZe0e5ZVytOdDERyDlqDx0qaO5o9gtfbr6vlrobEw3hYWlsWqnSAtLFHcwJ8toDpMioZKyjMGCiXqPp4TQEUO17ADV6hCzOu53W3UuXga8p/2P/rvH9A6IaLMZ0PC/nDzEQ7ZG/uLOS0ZwdijCEnmaKrF0FcjZKTxTLFEte29LRexVNsbGeWhesu0rM2G9arI0eUGH2vRIxkh7uoAf7zUKmazDtdEichAEf2o3jQO6OS11BwyQGIY5jBD49IBzXlDpZneSgAtJ7tJoc7NIRGOwZdhow4YiATydrOK1gx+69iSIhgIs7qZgenorfNPljjnK6XagWk2VsIMmhdzFGw0iC5IIIJY/pxj4kci6FeUo+U1BGTWtfnbvzOoDDARfKfg72O+N3n0s177CTzwL+e9v8dW6/PhzXfcp6TknfVYcYWdnZyIzthcBiP1mnxb4z/nJhuhbmPrHUmeWjme1W2aZGnhyKajSfPTWyLT1EOMei9JlNfvOBi50aWmQpujVTFK1zV3JTbz5syR1X4Pp0x/SdfQe3CPmTdK6yeD9TNebSmcQoGF94rHzQViBxEaVE9UlEWJYLaglbgxSydRfONfPIO2WulytrXVnrRt2eKKKgk9cBsvegaQJyoTafySVJ3TAEbVfPxlAVTV4ITtL8Pc1HlWhbHTrNQmvOpFIx/wzw+ySktzi+Ln1VW6O2Su2JXMCyueMqgrVGkwYqpKIs14Jt/vnbWyPlzDQvzMuCSeOj9sRjv7HautegdnN1H1XqKfUagwjVxVVbeBuNWhFjCOdYcyeikSC7dNS+dgb8eFq0Eu8xOBzXhFPiT8SQHV4/XRcaYZOZ4kKtPoZn6P15rVAoKaQBFaZiTJaZLDG17PJBTUiWKKjXuZqwtY716pN517B6EhlWjn0yRdKRQZY5ghI6PX7YSAg9mHMWoARRB5Ooq7EfV7/EhTaYheJ9XCZDSUTcaakzCYt2L0GGW+it0atnic9IOXGORsAwHj9KAHe2Y0DIgaCIDHk3DoeVlDw5qSINiJGwBRhrdcJKNaV2bwlxyTMXg5SUveE4F6YyMZWJMk1M08w8T0xzIcc1loISOsR0Dwd2X9+S01/Dfslzu/kSWvVJjus+4fgat29sx3Xe7g/OOeh5ycGdndt9lvUSzHL/94hmPRxlulx98miD64c32uZD3W7rU2RcnUZzopfY810LmZvuhRS2rohtmHkTc+oSRISMFq9jFXE5zBHjNZoPnIz/moCZOgraYF0r/WbMr6/0XmhdyB9+yFI7eRJeZeXtL9/oJhTJLOYR89YNW1esd0hez9tso63ed9UNSs4sl4U3rx94e3viy48f+XMf3ai9cU1CT46RiCpZHfZprdOLG0Uv/FfvRRFjKpGJqFGa0/GtbViriNSBaWG0gArN62DJe8imJNhtdeVsdc5IMsNqZ60bkjqaG5drI5s6lDkXbEuIGnMxliXDK2izkWxxZ9AhlcSUCg9y5VeePmCTlS4R5Ueh/iBEBCaU7YAGhT0LeLb4DHYZKHhWW/WkwvY1HD/ft3EVi9/fnd74NxnMPCMGHIMd5dl+QdCuYx9z8t43TYWiU7RmKJNUZoFZjDkrU1dyQJ7ezyVB8XZUIAVppDV1UkF1nFBRZAKtoVsoSl+DCGRGMvFzlTzLGolSEq85SQftAt3FeqW5g/fq6ZEGiBgpNbJ2z3xCmcLR0FBgJ/gyQeIyoHXX5uy10279GKfSOfQJlegZHKam771nGAcRA/Z65ajbSR9ICuTsDkuzO7DR3tKks5lxa/BYlceaeGqJ1YRKChalonmCMqHzxHRZmC8L18vC5bJwuUzMy0RO0/M+eQiizCd5kXM6ZR4tPIOdv8Jb7xOGc1LxdW7f2I7r6/Hi987snHHdZ1T37zlHTiPKin4UzYlSjl6JdS6s68RUCmvefPChnYYEij37+H5KASttj1JTbbQajCk1x8Rx3Dur0lIiY9SeAs7o9Gb7FeLkDvGeqm68fdxYUmLSifWWfQp07UyzsraAIaSzxG/tQK3NG6LNiRMpem22bcN6c4hnu1FmH4FyTZ3H+kjvsG2N9bY5Sy8LWg3JFsoZmWYVa90JccGIShjavQtn0s6rWWmPjb5tNDbM6m5YDIdZfdhFG+AUxTpGRaR5rUI04FUJ6KfSqtfkaII177tDvQVh0sycCgjU2ikt05pRa0OKkjJMSXiYFlZJVGmsUulaIcZcGDDGVMhuKSwEXT2LcOcTozJ2B8VzxZfTv89YjbsyrBu/c1T/bK0OZYbEofIR0NWhpjGcmYY9cjSBpPvkb1I+HBeN7OTxcChB7IiLaUiYYb6ORQRZPVuSIBSMEUAlBqqOvsUacDAbmPQ9OxyMTI0+rOGhh7ySdPHa2p4UnQa7SDilFLT4vRP8uYM7rkkLaLN5gFWNVu1InCEUUeyYhmwjjLRgMB/GxO95G4dGdi49altxKuLKdsbrAEINGkY1YevC2pXV/NZwJZCuGUsFSQ5l51woZaKUiTzNDheWmZJnkBSh7eGqzrWtMxVDTn+P51wL9eyJ72zk2f7eJwxjXZ/RiK9z+8Z2XGdHde+4XjqQ9++7P3Dni/6laOL8+BnfVVBzhfhpyszLxHzbWG8b01SYboWWO7fWUKvhpI5I+wiwAyG3Tusd7Q5Vteo1oJTiwhFQjSKs+M2V1iPS692bFC2cjVe86QKPTyt5vjCXTK2ZrW/IZizWmaL4ccOYAFNhU6FtXsdR80Wekof1m1aaBf6/GekykUvmOl/YPtyo1mjVWJ9W12jLimWnmbtOYfKGa58EGI2g5ili21BtTLnx5gpbq1TbqH2jSz1NmB0XWqNb9VEPphRrmITjopOzzzaTJt4LZI3eNuqtQlesCdYzyTIihWmaKdkbdWRrlJpga/RNkGjeTSnxkGaKZFYa1lYfJ+8H3c9rMAgDkdqbm8X8nLqVjduZvRpMQVemtzsWoTxzWnvmvzulU0Q8sqocz5+fG3WXZNEkK7BDgg5BSUqY+r+U5IooKhSLUSOWMHEkQcNxGS7RZYTgdAxX5TYOAl7bFGfRzZpDi5Kjz7F5RtXFkOYwcofIqN15HRliZGvhvOhOtdfx/pD0cLkp7y1LzR3XEK1tYRM6FvrAo87sEOGYumxxePs4bviadXZmMGSHHzQYShtj/0YHhLTh/NjFhscwTR1FyH0/jNolHFZi7cpmA/YsdCmgBcmZlEd7zkSZYsrx5E4s5QlXDGnPnNX5vh/RM5fwPoo/2cLx772zGv/eZ1n3TMRvWscFL2db5/rV+cC95Oj63d/pdP98cvT02L1zi8dTSUzXmcurmVorvTUebxdq9ehm6xVrJaD9LXbJDsgnVFV7h9oaCGgGVp+ADEpRZxylrORU6C2aRVsPG1ip5kQDE0dlyMFMFGGtlbfrihV4nd/Qnj5k7TfWx065OqtpNY/gl5SYpkLRwhc/fOILHz5yqzHlOBWWRbg9PTlEKcbb2wdMS2F5mHkzvebx6Ymn2yPrrdI/6tS+cSlXB/UxNBslZ7q5AkaN+o0aPkbCVpJtXGWlyo2eNmxu9NyotbHdKr2HjECvfvzGfCeBORmqHauNgt931Qb15s3aqWulrfjk46eVmYJmmK6vkeq0+3RVbAWyobOhFw0GZycXIU8TS4JLWvjgUVjrxtrWaNa0j68ZO+Ao0slhDaWXBnsVvuIU9z0Lk6OJeGBb94KtZ8bi+HdIC4XjGv1ULg2heHE/kQfpIdKAnjJoQjOuuB4ZYmqgwQbdwtuYGJZAS4uZavF1VUhPAreEPDr9PEtCxGHjSy6kmNPVxCWWqnW0NSpKl+bUdot9F/b5VgO2SnjtTYIko30wVmEQSrIUiiRXWxcXv67d2Fqj1TXEsC2II6frcjewB8nGhJihFX1THPHHHlz0cFBD+aSG4+ojEbZAABTthWQOtyoepPhHGM0aW4dbSzz1zBMzTzKxstD0AUszkhd0upDmB8rymvnywOV65fpwZVleMZWFlEpYHGcRjl665wzCdziql7Z3vXQcg7ONraf73/SO65yC3hVIP3E7H1C5e/89VHjOvF4wQNgJphGHv5aysM2Vumwsc2KdldaUaS1Ua8FOcuWLseJN2SEkrNO6QBXSKkivSIcq3lWPmisUqA+Qs5Royb/DGVNB18ZrBWLRSBpF7nVzpfDLNaN1wprw9vaWS2/oBJcp8SgOJygb69poWz3o13GMNSt5ztQKtVW0wrYJrJDKxDwVRODt7ZG+dTbd4MNHlocZIVNFfXJwIrI4X+3ehdZQKto3tg8/JNdH1/gu0JOrY2y20asTL7p5oCDqlk1VQrS9e0bQ3TsIzhZL6tClrH7+ezOPx5PPHsuTZ5WSQScn1aTJ2Z1WCNhWaFN2SSuFnIVLvlB6YeoTtW9OX+7xu4YGH8YunhvrcW8sduHKI7saFLJNokfL3KIp7JZ14GBOGg0pJ29qPQaOJof9BjFAB19fSHkMWEyOyllDcOvag/bmlOzou4uLx8LjymjAFYIZl9CUkElI5mtYTaPG5J9pJLIKRZU5++tN/Lhak5jkq2hvNBE6LXgrQ9yWcGIC2UV7NfID68HURYjOZVSVpQfrsTvE2cEb1ivIKvssOYvz4upSI1uOczWSIfUeriZKk+QaiHFxSGoktRhrFChJx/evjexrKIoEMQNXzxenmjp7F6OLM2G35rPotqZsllzOSouTMlJGykQpM2maHR6cF8ogY0wOIzoI33DtmRAqPoGBz1uQ32U65f6Bl9ErOT03+mfvocLK1719Yzuu+2zrPqM6//vSe8bf54N8z5Q5v//ecX2sNuYKDVMY7XXKzJPDh1vNPmyyuRitdB8Gt9M0bER4EsoZ/qGtSRCTGyklem1IhtTdQCT1hVc1kcQnlibTIISE8zJBo+9JjGjShVUaxaW5uW1C0U7uMKlwSw41Yi1qXD3mgkW8IDhUaY6Z115pvUOt2GpcSiGlxCRwqze6NdrWsaeVVAZD0qM+Z1lpwER918pTM6R3+m1F2SipcZkKrXYqndwaXRoNNzi1H/L/igZCF8a2NYYFSdp9omy80swjc0HIOVFKJmd1iFRx9fGwliJClXoIo05uDLzOKUxzjsg5sXWltkZqDXp3lZPeg0Tji88GnARHM/AzZXiOCz5IAa5wcQRLO/yXcRizuDH3TMr321J22aKAmEUTg56nOdRYYgDqgLOMg2gyCA/7Tg54l6gfiZMdNCuas/87xTw5xLOunTWqUXcUJtWYEJwwEUQGkO7XBw480ASve0nUh051OlWX9hrxows1u+MaFHuveyYmSzF1WXcFjFQ7solnOUF7B/ZG8QH1jut+z6LVM5ZK8mkFGEgocFj1YzPqWfh+DDhznyXWZJ90PAZrWrdYAp0WjquaULuzCUczeJeMhePSPJHK5CLY00SZCtPkTivlHOdbA8j133dmE+60+he2FyHFsx09Ey7OtvL83FnI4Zs+44J3Oy25+/vegY0s6yWndabJ32dh905r3I8nBWEuE22Z6W3l8fHiht+E29ZCecLoW+iz9erDGGM/DQ+qXTizU6vGLCBzlYhqsHVUzcfbe57gBdqYX2VkrFfH+rv5oEb1aBY8u+i988tPH/GpywOXXKjtyuNHHzGtGwudV9fCTYS3m+u4Td2zNo8AbV+DOWXvSVLj8fZEs0aRzlpujrUX5dWbV7xd37K2lXprvOUtZS08yMWdAY7w50uJBtvmUWxcWKpemZgm5c2nLjx+qbJh5A5SFJsS1ozHp07fQqTXiywRBDQsBEhz6mjfKFIp0jFLngGIAyWXeeZ6WcgpAdUbh4uQpmhuls623bACNgkyeezeFZhgShrIiDBpib408AGbPt/so6e3zrrsPdbAsbQAl8YKosTuK9JpzZrsjnOHCCdBF4ErWEpYSlQpjjXvKq7e65NyIuUwWuL9fS4jJtBuWK3uJMXDZUdwE9q3ECHuqG246oT32mVVF4RNDmGnlHw0B84q1BQq5zJuyXWXRZldURKAhpJIVBoVr0sO+veu3i/jona4UUnMybPhbgbqdanWfeabmNeLU8cZjuZMD+me2VoVHldxeL3G8dY+MGtvjNbTOegS4MBJvZ6DJepTqKMuXIOMMeqr7fhoz87keLx5NtnNdtmyKsZmibUJT024kX1si0x0nZE8o/lCKRfKdGFaLizXhYdLYbnMLMtCyTlM3XNPMa6vMYb07KCebwec+DF88N729v0tz53WyLTOGdfHRTu+6u0b23GNA3OG++69v73j/j376uyc7iHIM/VzvO6FWtgelUqi5JnL0rleb2zVi79Pt0ZthkgQUDelopETOKXMxKP/3t2AeVNyAu1o20gte7FbO5JaQDxQutJ7hibU2km1B+Rke++YSXcZHbMggMCH9kidCq8vC1utWN3gw8psPsfnqsoHzWnJFzV6TqzdpamseQSsCFMSNm20Xnl6qmjaXCh4Ss401Au5Z95Gk/LGxkcfGIvN6Ow6gjxWV8jOE73P3HpDemOWiS6dtlX40oa0SC9Sc5HQgMKSZapCq3jjtlO1qM2DALVO6p3CDQ2mGE8g1RUyZIVJCrNm0u6cLaR+fPhlw8fLNzMf5Ed1kd4ManrUYDBykZDqSiSZeHC5EKbHC0+31RmX1UfHUBuk5tlSw63h6s3bthk9NSe4DNudJTIsgYv6IMIF5OLzyJpkREZhyzPuNNh7EvJNsZYtWGIy+gAH37ubrzMZxbeBERspmApCfC4jo/BeM+0uAts6sBlpFcaYeemKT/BlF79WCxYjULprbgqCiY9uEBHqFllzwMDEa5IIJa7nUOSCkUWEnh8IvWrAY44e9JAa6xWo6uugifeZiYSgyZ5+xmo4ZLK8v60xSQttRc9JUvW6nuzqIYJUkA3/Nw5xQskhBqy37LBnBytGS0ZVqMl46srNMqsVGk7G6GmCPKEBD5ZlYbpc/bZcKfOFeSosBUpkgvdahPsx2uHCEbG/e3tRPYOTvbz/e5zjUeM6v+43oMIX/r53WC89Pja5e22/e2ws3LNze0cdU+JJTZlSJpZp5mla2bbONG1MtdKts7aEVsfaTXpEawNAgiEI2mn07pBha41WQwJGlb51F+YUp3nnrlg3ck/OymrmbCja7ry6huBodxhlFV89l7mQKLRurLdKloYUvCmSHXFiGSMcZBSx3S4kdeV6w6PdusUVqq4knrIyjYvPXHFiWzfS6l38OcgCoh6ddsk0ClUqNyskqiti3yoTHNE7tqs7aIraAe74I2HZI3EVo9BJrUPt9BVkFaS6FUoohUwi0asb7pG1muEZUgqHNujrsPehORlAh7j7ri/pUj7ZRWZFmVCaZsgVWxv01SFWqajPZ3fhYIWWegy61JjG7KtMQ0VdJsEW8VExBbQkV/gYo3Sjt0qkk2SggwMOO/PHTmvvfC3AHuioNofqom9uzxTP10X0ViGEU+hIVaQZgx6+y1EZDosFIjAg0xT75ETDUPIwQ83ZcAT8J6Hurud9EEIDk8OLxalsOPTsE5klyBmd1nrUF+PW2aW7dq3HO3tiDK3JyI7F1yEGuqkHlzUc1bg/Pj+uPyGyrSoOVab9EDLYhE1thwp9tKUrf7j0VEZTJpXs4t7T7LT30XicfT6gvmjUBvR33D8s2LEWPtmN3W33NvddMOFwXN+0GddLzuhMIJC7v8/v+6TPG9u9Qzs3et5naec3CWjKZOB6eWDdGq3DZa2svdJo5C35FNhQOR+F0tNgI8C1yUCduKGQn1pQ06NRNBW/wHsiN5Bu9NAwJCDH0ddlas4+7O7owDOn3owP0hPvXWZAeXrc4GmlTI18Ma6XiTUZG8KrSUjd0IBiBmTSgXme0U3pZqzrRscNklTIuZCnxMP8wOPjW7bqvW1Pb58oveyq2Fb9s0rKmE50jKd68zEaJtja6dKZpDGJQ6YjbkQ7ksMJmtdTrEOzTu3uuCZxQ9o3oz927NF7y7IZyzJRyGhT1scKTejN2NZObT6eguICx+O3LVNB5kKXzkfrR24EDR+OGDI8qLIZ1B4kiZxRMik3ptRIvSCtQt4cMooaTHtsbGv1TKPgSU8HUMrkCh+6JGqp7lCT+QBOzXRJ3FB616j59FhVrhfoBKGEkajSo4HbDa+ERuHAKQUjWSeLusOKnoy+B3SjkTdQhx7rrhttbUdx3nbGvduz+CivA2aHsmOwoeL7k8hOvDGLgCSMagt8QwzrQjWNa7G7neyd3vxmFaQJK5UWkKXXNh0yr736+JoQr9Ww8bsslaOS/rt6x6JnjR59lQn/IVGjOhwW6Br12obD/KOHzVyeyYNXgexZm3W8Zotn9018ykMzh/RMRkO4r6M8FaZpYpoXlnnmMi9c54Xr4soZJZU9NBnbyLAO0zZqHvfG8UyZ/5hpOu6fndL5NhzWmZxxft03bcb1lbZzavrSgbt3Oi9lZo2jlnDe3um4iGK2S+ZM1yuX7orSt7ayVQfR+9YOIxfaezssHJGimTs0rPp4bnNsvDe/cF2VfGiUeS8XJpTq2ZDG4MEhH9WjWcX1D82L8XRahQ8/XElNXWDUXvP4+EW2W2NZN65JybOyZeUJXFk6u9jv0+piwpvhV/AEJOFx8+LybXOyRtWOWmZaMteHhdoyb5/eOmFhW2lvOzOdsmRSSmw1KPyaWcpMDXJIsy2MbkckSuNWUfPx6mPGk2CUmPBbgSYW7DzDnjo8gjwJ9rZ71CuwzAV7dKe73jaylHBcG1XcaTmP2Qc5qimvLok0K6vBB0/mmQV+DLbmdRpvfE20GpCwZsr0QDZ4a4+E0hRqLeoRCTHhbb+5WkpOSHH4yQMOpYyWiFmpqbHR2KRBjaxVO0Wq1zgNh8z23idjY3ZmvQQxQ6OhyCqDuRc4YmSQDSz6jCTt1HRDsBTMNpEYOeOOq1WD3kPBXL3cVpRUjJ5bGGljw5X/h7iIc92dOdGs0sT/3ZrXBZ19G84Nz2qHAoiJ0bbugcnmws1s5hmVKVVkhzTNfIRQs06trtRhI9EesOmQ2GoeGNhoQdg80NpJIgwIMJzTZrtav5p6C535Xkvcz5bQFtDN01Dp8NFBVcJ5idE67rDEVTU0JSRndJmYF5chu14uXK5XLg8XlofFWYWagrNTT+bNc9rhV8bgl8OshczVKc0cc6BHTexFZ9X3D3zuuF5yXmP7piZnjO3sbO7vv/SacdD07rUvRQ7n2tknOSyOx0cfjGvczdTemOeZefZMYy0bJWWn4PaOtlFRkRC9GIwzhyVcMkr8wjMXEs2S0NT2hkzBC8FJHDv3GlnU0SJCHFR8iwZWn+XjF8eTbljKaC6ILPS+sa0rba1eQ0p26MkJXHLMSRJ3pm7n1OeRpeLNxbjB0S1sS5VQnkhMy8StbRiuSKHb5pE/PjOsqqFmVBVmTYjPeI/Iz7MI6U7dFvP+n10xRMzrX3GylXE8E73nqPEZVqvDNyKoJfpm1NppWwdx49pDaHdfG7FWzIzbraKhIzfsnGctnnEQbE4VVz8YegW610xlv1lArmk0yebkwI32IHnoXujX5AbbR7wTUCbUrQcLLqoXZtFwHed7qGQkL/yL9JhK7HW5IUl2QvOA0e9zXudxEYhg4jp5nvq3gPIs1nM4RDU0GtCtJFJ2NRbDncRY30OI1rPCkEozH6uz4X8PWXmN8ybVvF0g6sK9Nq8/NqKtwHYocN/94bjie3yasN+3zr7Po+PAhzUIlgb1f9Ts2NG1PWNt5vWsLk7OuDMb7v4jOxsHWfG5emo7eWoEHaMetbcspIQlhwen4hnXHCzCqbiwrqrD0sFXfZZfnaP2Z+f0bju3Ie97/5J9PN/undlLt7H9huPiuVO6f+z+oMLLB+38mvMJGGyiMb7iJQd53ka0KpC1MPWZZp1lvjAvmwu33ipPubjjao3U6u60BDyiNY/eehifbp0m0YGPOMSTNlf0Vry2YULW7Cw3jGad1DNm1S+Gajjl3L9Is0fVAjz2lZaNfEks+QFrN25bpTxtXvNSx9WbgKlwyeI0YB31b/NoPSWWaWGrK1s1tro6Hd+LN8xpJhXlslzob4WtObNyXV1CqlclXTO1d1Q7GyCz+lDLqoGNh4OzhqP/HhOO4YY+PNANSe4W4x9coNiYaObvter6c6hHw3Xz+LK1juFs0B6qB7vz7wR0ZHzpy09YCMTmLFQ7mlHpMRNK4jN9j7HufWoSx8TzXs/MhpSXaiKXLQyZrycVJw9odxJItPygqGfQg3CiUW/pQ4AoDFcKiDlJzGTzrBV8+raeHO+Qph0TkeGAA/0Zb3z3eos3KY/hmEPWzMkesrMkU1ZHLibDJqVVC+p3p0VUaOq1yxbHplmn9UalstHoFgLNhpN0RKA2dEvOEMTH/HhhSHxKcw+ntTlJx+IidXr/cFbhuPB9Mo1/CT85vE/23y06am2RqOL9knujcXWWYOqE6LPs3yqhtD96tkguZNyT1wRr9cyrx1gi/5JwXGki5QIlM5eJZfap6/M8s4Tc3FwySdKhzPLMZL0ccR9m7NyQfJA2LES7X3RE77KzZ3JGu3tuZGRf5/brw3F9ctjw8cJg5/jl47FziPmSAxzvH6kvp8fuN33+XJkKqPlgxLWSG/S1cdsuvrgsdPaaR2lbr8e8pwiOxlTkzYyeFJo5iy0lZ5eVRLbu2VbKLojQBWshe7PFD+khX9Occotp9MJAa8atdb7YOt/y+oE8TcB7fPD0K0ytUrbqQxtD8b1fZh6WxCyGtM5j9LJsOGNK+8xkhbc3oVql1lGhNlJLZMm8en1h643bunJrT6xt80yoC9fJe4G6GE9PK6orS4apZIplpHpGkpIwaYK6Mq5zbThM1PDo9+bkhr4ackvI5rp23ofkzkKqj0DZF4EE9m9e65LxN26YSd7DZEHQU1FS1Jo8enY1Co9+QyPOGlvvPK0JQfa+Lm2eHa3bRk+NnJSShSbJG3DFWw+0RZTvRQ9sc5irWqN2J2BYOy2/qG2Jxhh4daHjpF4jTdZdrsqcKdl6Q61HHxS7er+qw4Otj/lcI2r3Y2Ix56qG8ZeoqZaRWeowh0JSaE2cLdl8TaPNG8NxZ9rEe/UqjaY+5bulaMUQD+RkbzgT2AJvFUH3DCtqsBvOgN2OGhkGLZr0h8j1filHtjxixyE5KMlCvoogZOyKggHNcziuTZ1+bwaW9veUqHt6o3wsr+TswRbCwoNI4oGOrx1NyeWcpgmZJnSZuVyuXK8X5oeF6+uFh9cz0+wNyD7TORz5KXw5sqePb4FVMJxXj36xhk9xfxEOPNvUMwnjDA82ntU59wP9Teu4zgfv/rH7jOr+YI+Ddlx77/7M82ecndz9iXiOB3hEBaEakFkuE7fLTG2Ny3rj6WnBulFbY22bR59474l/fD8uHnAHF1BYle6Cr/G9qh3RFsw87w9RUTKJ0nNEjRbaglHz6A7mOE7UnXbf3Qh+dFtZ5swyF3q70rgh20a6NYo5T6nWDXJCs3BZNFQ63HDWWLzdlJkZquD174Y0h3LYQnhXhXmZAt5xBfhaGysN7UadN3oJ2Ki1fZaZRHTuShRtd0LjXO0s7hvwBLaZT6pd3ZFrUyYtqPrYFWeAHzJNQ8Uk+pOdfCB4bXGc9si8rNvJ2Eu0TalTG0NJIuEDOK12BomhG6GT51Bm66FPYeYN2kPlIgmTZFSFRmdrDcwlg3q83rOcseaCsr8vV9ubXNXE139kgg6XxXEbjAQ7L+swZibx9BiK6rAi4vR34hi1WFIpJKAsnItkdZX8gtP+Yz23yIKU0eTujfROUqh0CWJMjh2LTEhCe1GGxJXEpae6w+27GQgpKDjO11CX2V1WZJO7sxpwfWRbQ73ef7fEY/5G3RmJgm6ecY2/kdNaTaMG6Y/3FIzVZkEmsf28xRsxDYHjlEiloPPkFPjZHZVnWxNTmcl58jaIHaxVhi6Gr4Iz/PfctB1Oi3BaSrfIuD8pw3rpdk4U7h3a+MJvWsf1ru0lR3a+f3ZALwUgL2VcZ2d4dlz3DnI4wdN3iSlZE/NSmC8TtTWW28wyB2xYK7dtpTcLyCvkLUNPDYh/fXGLufrPpnWvR2Rt0QvTUE2gngEUcaFel/6BSgvxXWdcASFZJGjQups13t5uSILlUhC9+iSK1km3ShYB7dS60bwww3xR7zlr3Rs5V/YodNLJHW6DW/XMYETAVoQ8ZeapYGrUzVmAvVW2yPCqNnryCc+1dYeLou4jIa1j1r3kPCLwjvfRVMNuYI9gG+64NoNQEhdVSvG6gSdS/j2jJ09OtUZaxK1J9vNshCFsviCCI+Y1KVVMlS4askqetVTbGAKvVM8CNDxMCxZo68ZSjvEW0oVZMroJj3WN7I2Yu3a4mPPSa30s7iAx9HEbNckefYMHHLR7UxuLWfagKdDWgPB8fam6CkxtrvbSoi6Z1DMiS+Yw11CFyATZaTigmEHXa3ybOy4P1pyosAcqKUzu+LmnwYw+ONXfHZVBf0/AlcPd7nyLkNwaRB//IL/Y3XGdjMCAks3Pq+zAH7uDpBO0d4l+LX/MuqMZ7qw04FSHG0nQc0g7tXBe0X7hTivSNM2gPmsrl4xOE3ke87VmpmlhDiq8aowBYDii587Lghz/3ETKx27eIRlw4cCI7x3P/e1sE991Ozur36hxvWM7O6zzgRth6Pg3ne6P7Xz/PnJ4KeM6Z2zC85Oi7rwmnblevJpba+e2baAeW27b6nnhvcsAAKFrSURBVPUdS07hleGsTthkXHCtN+jG2sAK9CwIDctuGNQayUJ0NMGUsxehBIcZu0SUB71F5pWU1BqmQs7KVjc+eDTWXvnst7yG9IC1zO3pyxg+vE+z8dHtiZ4Scyo8vMrMXXm8dfqHQt2csUiDaZ5IZNiEtd5YQ7ZpnvA+tt6YL5m5LHSbePrgy1A7rVanzNcVyZVlulG1UqVSZaWpSzipNsQ0alB2CNbegEfgA7xnawNaOgyWeYSe1WWyavf6n6qCtqhbRFY3TkfoIY7apw1NQKB2Jx2gRjcfnqlJmErZl4qIQ4TW+wGfiZI17708zn3QOG3e5NvwjLm5wtRok/PBjaIUMaYl0Ro+gmO7eQYZLzRzmaNdIlPcQKeoMXnW1RkpphHQ2pgTR2Ovf0TmoeYEj822PRPJuB5kRSgZX+O90wJGbclopbN1hwJrr1Tnz7pT6CMwiJaPQe5IDr9JXFNpOBGBnJK/rENSh4XNgBLrXC3WzIDOYOhFumO+m0g12gEiq/LetQgERoJmw3EJNM+0pILcwGvTrjYzdBxVnN2a8OGYNhl98t2oBWr24+K1YHduXQqSC6lMMM3My0K6XMnXV1wfHnh4eGC+PLAsD6S0gIx1NvLsI5L+SkqER2PJqBh71vWsTnUuk9xnYGcbe3/7DajwHdu993/Jubwr2xqOZ7xnZ3zdff75ffefPTa9e10fUAugmWmavVZ12bg9zX5B187T7Ra9JzFOAduLxgNKGt85ml0H85qobR3GrDt1VsfcruRGNjdqGbRW9am/PeCr7hbBNAxSV1pr3Fb40tsby5SY00zNC5gzI53660ZprZ3cPAq/ZGErcOvC2owqUEpyaaFsvN28jlf7yrbGiJLJL/qUFVW4PFyxG1A70oy+VVq7Udsjraz0VF1pwjZcp6dCc1xKOg4LbsRNjvvV9tEXeyZVjyJ8CJewjwAx3LJE0IkScj3j1EeWF/TpkZ1gcR03cxLI45MTGEKQdTDagsAPGCWaxIcxHmxSE6dUN2cf+LSBrUN3kg5qlCRMJfNKJm40btaom8PFo6HVkwrPBLv0gx0vDrtJNJUfv45dhaJ3CP4mhrcP7GSNZvs1kKKGaQpSlaZGk06TxhYjfbp0qlQ2rWzqgsm+3kNPczTVq2dPMnyFhYAvBJnmYOgpclzCpodT6f5b/HeOZmx/YdfIdnuAn4Nte7qmHYaW03UfxiWc5B4B7A3MToMfNt5nhHuWeIxMcRi1t0BmO1Tbr3o3FcmRDK9tFaQUF9CdZ8pSKEtmWQqXxWcAlpIjQxtVrcO49d0C3UNL503owcN16lCid91/2zPo71ge5wvh407s7Lheyrh+w3GdNnvh32fOxT7+/H4+zwv0hfffO657pyWnf88Z3f7ZQk6ZKdhAyzzTamdbO/M0UbdGTY0qW/DkbB+6B8PQhkERODIxI2t1I2aCSnOICUB9jIepkbOSs2Kh1Va3MEwD89cesIVfXRoX4EdPKyKTj1FJEy3Wc7YQrOrd61M1kxIUTcwpMpHkrMiUNBCPTE1AFXr1qc0udyRBS/f+slIymAvDJhOkN6xXuq00WelWMTZENugx9qJpOCWQTRwSrLJr0A0JrGHQxngJqrjRCs7FMOZ724o9/3s/+ePcD7gqnA0MREi9htU6zXzqMtIRyYw61uAK6Mm5+EdLBDCeebfeXE2j+ecNx7XXmoqP65hrUPrXBquzFF282B2cgNdZOP2+YKASr7P4zOF8x7JrJ6bZ+RJo8SMGsNiShfpEOCN8OKqFw+7WI/txGHgLD2C4k/O5lO78lIDV4ssGVOfZmOw9URrMTwkm7ghC6LZPNZDopwJC2srhwU5352U8J0WNH9j915me6OsQvWHhVduxpsZxi5mWoQTvB7HvHyoO/njSdwSrI8tT9paHlDNaCgzK+1wos8Pry5SZpkRKur9fnu28cN7lcZ6e516nTMtGtqXPWYT3dvQ+GThnXPfQ4P19Tp/xdW6//hzXebs/4G4FOJzXKfUf5/icdaW7z7l3anJ3O3/v+T3jbwFJmTLB9eFKvW1ILODbumLdHU9bV2ISRjgFp3E3O8EcRPHdYoSD3BwfTwPM6U6ckALikFXJmWUqqDgRo3awtUOLy8ZwYoUlsuASQiI83VaqdR5b5Vvfu0CZaGlj40tMwayyatSPVnrO1CzMOSSU1Gi3RsqGZKdPz5OSLJN7cmHe3mjbhtMtBWk+Yfg6CfM8kW8L+vgRpTa03+hPH1F1Y0srMq3QlV6V/nZFQ7JJcRkdKt6T1dhrN721mCQslJRIJ+cWJDw/bcpen0ANKxbzrUZfxDinQBIsCSYNTUIpynUu3JrwuHl23Kph7kFdJgqhW0KoztTTTEmN3rypewQYGDzVjXIT5AZ9wxUpGtCczm9q9AwpVW61clsr/QYxTos+A9XoUVuigGn3W+o+BiW8s2HDVuOVQ41oXPfVd5Dz5DBG45DsAZ473E3CkteVXr22utnKKo2aOrWMVe21VxOliWHSI4tSXE46NBUjc9n3OKA6V8LAmUFDH2/rnnG3EZTIWB2kyHbHWBInR0hIpXX/LDtd2EGM8nMyCpyHo5MRRwrRFwhYJ+loeo4cXXFNTTF6QILEaBz0UNm3ksilIGWBZUGvM8vrielhYrrMXC6Fh8tMnkr4ziEd55nePTj4LI6Oczeq6pVEjXPcTT/udM7OfHzYuxzU/WNnqPDsuL5pM66TQ3gxdX0phf1Y2DDuvoQP3m3nzxQOx3b/tnO965yl6birlHlieb2EpEvldl0waxiVdZtinlB3yZ6AEDXoyDaiYzxKxzp1A+3V2WxRCO+9gxhFZ99dhSmP1EFpwY6Tzdis0VosZlN/78heujlVvna+dINX08RUCjd9wOwRq420OpDUaqWmzlYWEsqcEm8W4Sadzbwna8BBJWcuywNb8+GWtd68IbZ1Eji9WxvXYlzyRK4XytMN2qPX+qxxazdaU1JNpE2DeGZY08i4vIaVFrcWtjX6zV8zCBR0DxDa2rEWckhBPLDkM9AkxemUaBAthqm4uK66zpwVixH0sDZot+qEFXFlE4yglPt8JR9Wo5RU3LtoptUbXv1rkFzmyFEsn4JrDbbWobUwzopskZVJyFzFGk0tI/iEasSokSVKN9dqTOG0JqI45Mw3vyySN3HLAS1LH6p3gjAw1Q7S3LUYFLEgUTtBvq7OCuq9QahZtM1CVaTRxfUfh4DhDl+OSyjWsi9520ke0gdO6XCbmKefVo2+EaxV83lrUXuiez1wQKOD1K/dXEXEXE6tbRbUdkc5ZMD0w84Mpx3nZXA3B4SKDccaWSeyw8w2HFSCFhMGbDKkgEygEz5xYE4wZWSa4TKTLzPlMrMsF6bl6irwD6H8HrVQB3MN9iDjyJDHUT1nyn72/Pw2i7PW5Bhc+lKZJU75M+hw3D/Dgud/x+1si+Gb2HGN7d4PDcdy78z2f+3uSdgzrwFLnGG/83af6r4ED96//9nN2UVKckWN2tjWjWW5UdtGbRvTlGm1xliT5lHggEIYjaC2f0c3L9pXa4gKmzQ3QMT8o9y8kC0+CiVHU23JGmoBbgd78ICNiKjDAo7mYTN46hulO/9Y8oQ36W5Qu9c9UsAuMZtcFZZJg8UFFa9joIYkZSpuhDbp9L6COT2610ZTv1lqTqDImTzNpG1CesW6sjWwGo231b1LMoOW914nRJBRApBoElVBxvRoC4fVHUq0TrDR2OnQPgaevd5ikVGMbGyfW6W4lh1C7d5ePM6V7ClJBAdI3LJH/jQaNYxhPxKZgCBHr5GNBnKTYzRHB+s+NkdEEBGKeM3P4d+6syJHTc2GYc54phu/dV9Yw4dJOBAZP/z5BTC6uPzmKvyCQbDk6mDK1U6P5toWrR8dew7DRgFqjLo/dz272G88V+PxPrLkOA4NejVs69hmrsy+MdoHAyaVoznaPzhyTPHsfcCF0RpwJhjuTsv2pw8zIKfzNa7PkZwN6HwM/EzQC86unCQas/HxNJOiU8JKQcuMTDNlmpiniXmameLvqUxO/Y+WkNE6fEZlfJfldP/548NpdZIjPk2eNwzfv/Hekd0nBy85tf7Ca+C5Lf0at298x/XSQXzX1u//OHuZ89XD84zqnEHd/2sco9LH1ngJSD6yLvMPn5dlf2pdq8NItrHeJix0DI/Bg7ZDHRL4PzrIAN6wSG+HjmE0UWKKlg3LkLMb7JSFyb0MHj87y461U7sX4t0WRNFn0HmBx75RV5i18C2XKyB0bmy3lckgJ2cbwhNWMk0zyzSTSWxmWK084YQNSwJJSClxSRNCpa1GX11cNqvfHvvKXColC9OrK9NWSWuCm7G2G902Sq+0tVJIZMvsZBYVl9RK5kOAJyEVHw3DBttHbXhtXxUjY6sWYzaMnoRMjF4RaEOjLuSTbNzfZfTFTbgxxMkjY5Ng43lDbzeldadwmxmtVeh9V7indXI07qIeQCC2Ky0ghCpDrLlq3NqNopmSMpclYTnR1PuhJIITb7I+1qdGv5G0UNUItQu3OebBBP7b3F/b7t9EfP9yOK1kmwcGvhy9Z80ksnc7pJiAHi+UQUUXGREBghNSpHrdUvuABf3SlTNLLZyXs2RxOHLte9+eq9OrGzsbwUbUgCXUQ8wHNZoJySq9qw9zjWO1o4T+EXsLwrDLKT4bYaf8j0GUlr2frWd/oQW0TAGZDZkMroJcBb0q6SGj8wLzFZsf0MsDU9wu1yvTZSEvs2fqkrFowRgTy4bBOjMEX1LMMNQnKZOolr1VJMbMPCt13G/vggft7vGXnF2/e+zr3PQrv+TYfuRHfoTv/M7v5PXr13zmM5/hj/7RP8rP/MzPPHvN09MTn//85/mWb/kWXr16xfd///fzC7/wC89e87M/+7N83/d9H9frlc985jP8uT/351xV4ddiuz9Az2BC7v84PfaO7XyEPgFFfDGtPn/sfealIJIoZeZ6feD68MCrVw+8fnXl9asHHh4uXK4LZZ4pUyHn7IyqEERVOXZsUNtb7dRaqXVj3VbW9cZ6e+S2PrJtq7PRzLOwnJRSCvM8+W2a/VYmkub9J209tPtad0JE9/6tp/WJX/7wLasJlhZaeY+nmtlihMPcOlOtpHXltq5srWIYb+bEQ0lcso9bWFtji4nAy1J4eFh4/fpCKd75v7XGtm083TYenzYeHze6JdJ8ZX7zafLD+6TLBRbopbNSeWo33tZHblap2rC50y+NNjU2bWy60vIGU4O5Y4vXgKwYxHgQU3bqdlWccDAZ5QLlaqTZkAls8tpXTwNZTZFBCWv32xYj19cWj5HoUjCdaDLz1DNPLfHUla0nGoUmE5Xio9or1FpZe2Oz8ApBuqgSFHlrXk/aGk+3ytunjQ/f3vjw8cZHT2scZ6f794oHRt3rY2k4Brtb4OLgU0WiZCTBLPTeNFfQODL0Xcx5a/Rbo946283YnnrcjLq6rJE1b55OlkiSSJK9WV40gg8n5eSAIF2RQrFV4obXr9YON0NWQTe/yeYageLzQHwuXG+uMFIbrVavg4VgLyZRX+YIeDr7pGI19VYLkyCM+m8+JyYO7oZgr3U2jE2NrRi1GC27A+sz2Aws7qz22ytFrgm9ZvKrTLq8Il9eUx4eWB5eMT+8YXn1hsvDA/PlFWV+hUh5ZpRGveoM9xx52EG6aKRwWJmNTOv5YN2ucbud7t+ru987rTMseLa/58fO9a2P2eSvffuaMq5/9a/+FZ///Of5zu/8Tmqt/MW/+Bf5nu/5Hn76p3+ah4cHAP7sn/2z/KN/9I/4+3//7/Pee+/xgz/4g/yxP/bH+Lf/9t8C0Frj+77v+/jc5z7Hv/t3/46f+7mf40/8iT9BKYW/8Tf+xte29+cff+8w5P65+7z3HUft/vPgucN6CULsp8c+KfM77dNAnFUSObkDaXWmt41lfmJbG73DbfXZVkPtwiLsc5Krf55FgdihH6Fa8wuXGCOeQGJ0hSsx9Oh9UXqMd+39aGTtHar0vX7mTLABzRi0Ds24bSuPm9A0UUoh6YLJSmd1uKgHfLhtNMtY8inOU7DaTIw1kjqUUMFQBB/XILUireLlESP1zo3ObINxlZjKxetiybD26D1hGNQWSJJfrAmPtCWpM9C61zn6ZPt0W0m218UMooVAYPLXySToDN4uI7QCPdtJmdzxwsM47AqKYEE1DtaWicOENbJdz3Cd8WmYTw62FsKt3mS9Q1YiTrjouKZewFJjzIjRndzTzIk94dwG62w0Vu9ZUGdn4PWuOzZmmJNKTBiKkOeC/zCJGOHSPH8fDcTj+53F6RqLMmBAiUbtOOPecB+UdhvPESNeiFKa/0iL2utOjNiN4ynF3V8zbtFeEjD5TqRA9gxqNxF2urxlOPQDgHspecAiOx3XZFzkJsYQ3CZQEsb06ilus6CToIuSloTOBZ0uyHxBpgtlvjLNF6bpwjTNaPbJ1qOf7ui/OtiB97UtG7+VQciItRjX/k5mGbdzbX7/kfH3u2DBlwL383Pc3f/fynH9k3/yT579/ff+3t/jM5/5DD/1Uz/FH/yDf5AvfelL/N2/+3f58R//cf7wH/7DAPzYj/0Yv+t3/S7+/b//93zXd30X//Sf/lN++qd/mn/+z/85n/3sZ/m9v/f38tf+2l/jz//5P89f/st/mWmavvoduj9on7Q9y7juwVV5/rrzAR+Qod49f/9xL/nF4UBf3PdwXaIk9THb3TbMGo+XJ2eVIazDcZnQ+7Y3zboDkwOPj9pMx7xbP54XXKgWEqKNtNNsXbtusoyaBVU5tPcQrHthwFu1etDMnSji3ydsm/HhzZgl82a5UMoD9OwKG7b64EcM1o2tGVtO9KTk4t+tCn1rhMgA4M4rZWXKC7Y2bGvYo7IGKzBZJ/fu8FeCPF+Rkkl9AX6ZnlZ6rvRb82GQ5pFz1okkiZyTF9667ZAqXR1Gq8CKF/ajJkYGm6AuwGLoIkxXwbKg2WgTOxRklpwRR6JKZpPiNaww/maj9uVOzEsKY1yNU8UTiWzOKMy46v0gHgzLKoKPCDGcCakDOo597p0x4drPWVibYaDVz6vGsenNfBxLw5vfo5ePcK7NhIqykXdj2PballfphmK7ux4nCVg4Q08SvdijOFqQAh4UPKvqUSQK1xZQIXt7w70zcgasPHNWrqbe99rd84tvMHD1WfM5uCPsbdT8/Lrx42ywIxvi3r0HDL9DhYez6sOD2fMY9vDCXieUZId6yCzILKRZyZdEuhbSsiDzAzq/Ii2vmJYH5uWBebkyzTOWCqaJenJSR9OwcpKcHuHtYXZ25qCrYzyra40UcmRQI3l7KYC/z8DONvOlmtZXa6e/yu1XVeP60pe+BMCnP/1pAH7qp36Kbdv4I3/kj+yv+Z2/83fybd/2bfzkT/4k3/Vd38VP/uRP8nt+z+/hs5/97P6a7/3e7+UHfuAH+E//6T/x+37f7/vY99xuN2632/73l7/8Zb8zDoby/MDch0afeLDO+B0fdzT37098/PPuI4zzpnf798L7BOEyXTxDUlyDULz5cOt+QSS9RZbS3MiEI/H4Oi7EMBKmjXXzxKj3itGo3aMrIVGyksyhwpQ1MP/s9OMYzEiDis8vqr05k04bqeE9WCKk1FlvG9V8HtSb9y4s08R8+Ra2py+jbUXXihaY+oa0ymqVfpmQKTEpvDd57evWG1vz8zCMY5kyKU+YXmEVrMJjNJ+tCmtytYtLUi4p8+r1tzA/rEhd2T76iPq47Sy2Xm+oCVUSJRVnY2l2yCZo0D5mHa9/rXF6ksFs8ABcHNbRayJPULzEwEc9UU3ZUERmunixe6NE1uUEiUaoKZgEi0vZgr2XgVkKIy5WKtUsxpI4281iDbkQq2eUdp4VZwLFnZwNm5t6rMFGV9nlk+ieDXRxnb1hsKxCj/eY+v5tJ1hp/LZQsguS+ojqhUQNJt5xfUk4qtITaj62pYwLSbxXa2j+GbJr/EnXyJTYUQV3MN2p/ZEZ2JBXMqexW29O1KiRlQ61eiII2zOqCFzMaKPXb/T7na7j51p/g9oi2DjQcUCH+Unx0Yifg1EDFQUrIEWdRTiDLoJehPQ6Mb03kS8X0vV99OE99Poe+urTXF6/Zr6485L0gMlEP8k6DYdVyc/gwD4EHF94nZlfT96Uf/r3LIy7R5N83C6+y2m9K5v6inb4a9u+bsfVe+fP/Jk/wx/4A3+A3/27fzcAP//zP880Tbz//vvPXvvZz36Wn//5n99fc3Za4/nx3Evbj/zIj/BX/spfeffO3Gc7L93/xO3kvM6psX386Wef+5LDOn/n+T0vpdywF8JVEiVN2NS5Li4y2wwut05d/WKpVqnUveeo9wAIDCAFnf7IyHp357XVDhKq4MnL6IVQLY+5PSkpJUeAZY0WiJHhLMAeUjk+WdnZbNI1WG2dtW68vSkNr92UcgVJ9O2G1BXNMGFIa7S2ORNQBcnJJxarR+O7YC1D7UDQXFALluLWqN1cHouhKRjy7BVm8QnI6SqUsrrixuNKf1u9Rw0XI9ai5OLR8W60Vxz2qyPQ9kyKGWwx+gJtgW0ybOgIJlApSI9pw2HOqw1jr1EXchjNmWzqdSMLxxVQocTsDO8xgtHouxP9RPbxGt5UbMFSM4fRlKOZmDCYA546sdx8nUdmcXKIskfaA3JKAUWNul1xgxhDvQYv0EMc26P9JAraQ1k+oaZkS2QZs8a8fsVwcCOzGrseGb3c1U/McUvf5zZYhL7+vE8rCEmnnr29N2CwRPH3izEW+85GtHNmEHeH4oWBK7wwoNKTM4sO9XPX1Mi0RqvooMBLwM9SBJ1AZ4cH8zWTlgVdruh8pVyu6HIlLVfKciFPi8s+BRkDhvO8l2nSaEZ4qaYR7+lEpsXzLOtct7p3NPLC/a/Wvp7t5/+/M67Pf/7z/Mf/+B/5N//m3/za7MknbH/hL/wFfviHf3j/+8tf/jK//bf/9l/FJ96fhZEW3YUVdvcSuXvuXNu6T4PPrx0Z19mR6fEeZ+ArORUEoV4aa3MI7fJk1M2j62qVzarTa82lf/wjO6O+YBFFOmToF7qPf5BwXAddVpNryqkKKWVKjF/o1Jjb5RGrD909yfJ023tpNKCa2oy3T1DNQBPvXRYwxZpgraK9h7ZdY22EakKQTbKTRRTxMeXgvUZx0DRlkkxunCUYY73S2pAr8KOwSueixqLe/FumQmorqq5M3zfPHJt2V5tfov7QzC/gFI6hGmNEBsmwCWw2bIY2Qy9GUyGrkCWjWlC8T6uhNFOqjaZOjcbOYQsEJFMtiA+WCFJ2nEeNKt+hYJHw+VTnOokNyQUfrbvrJUaRyJdZ5tTY6vdFzovwtI5Dv/JYvLJnVxb/dgpHQ7JDghZglbewu1P2wqZ6T6G600o9+0TenkjmdUZ3WPGlo4/SekT9ckT+YzzJcFDd6NVv1ofj8nVohr8/nJZFR7mBCwoHfEnUOC16486KGRJNV44Y9sMH9vNlPv5vz8yAAKHbdTits4lJ0ZpRfGRPWhL5kikPEzpfkdkdVl4unn0tF8pyJZcFyZFpycii3CidiRdjFMnh1I5zahaWYg8O+GTnNX7UKJlw+vdrcUD/e3FcP/iDP8hP/MRP8K//9b/mt/2237Y//rnPfY51XfniF7/4LOv6hV/4BT73uc/tr/kP/+E/PPu8wTocr7nf5pDu/7XfTqvqLjJ6dv9EfQaeO637yGQ4qJe+5v654Qzjs6RnMsrl1ZWunVSCspuN9KiQDUudp6fETW+eUYl3/3RzNQbX2mt+4eCq22yjhqUe3ZfRlOojT3J2rbucckSEijQjdUWbEwaEwWBroeZBCLSGJncSqlZaN261cds2Xi0zDw9vSHWitY8wu5HoLHSaCbfaebIOLaFz5pKcQGIZtm3UoIKCrYpqJuUrlOyjT7bKR9sjTzd3EddJuJSJRTofvX3koRSWnLl++sLDmyfatnF7WmlbR4rCFFlJGEeeute0KliWIHPgLMMLrj6RYWueYUlT5qLMObEUhSR8WF1o13UkC6Nna8Bgg4XnmUx0QAWM5TrpToLYLDNJokmiiqut+7AtXwM7VaARUGE4MuQgKwwSQLJjre03ORydstdfEG8b6IPaz9hP3Z2qE/A88joSuYMKoKJO4y9CIZNacqWUqHHtMkkjLSH2EdxhDTp2M28i7k7Z7xVoFVqsv3BWNHYJLA+2hhPzL9l7EjvBpvTv7ada12AVjl62A7mI32ejy+VwhMfFPZxYOArjcLx4v6IkiR4t0FnQK+TXhfJ+Ib0u5FefIr16n7S8olw/xfzwKfL1DfnhDdPyGtEJc8xiPx9uhp6TMkbj8dl5Ac+ysUNVBGcNNj7uuO6D9tOp2s/dfenjvI33/Ro5qvvta3JcZsYP/dAP8Q/+wT/gX/7Lf8m3f/u3P3v+9//+308phX/xL/4F3//93w/Az/zMz/CzP/uzfPd3fzcA3/3d381f/+t/nf/+3/87n/nMZwD4Z//sn/HmzRu+4zu+42vbe+P5Qbzvt4K7tPel6uAJIrxPvu4d10vRRj+95z4Lu8/UzidTOBbJUA3AMJSsE8tyARVqcwq0JJd02agB5ZhLGYEbs95PkxlGsTsep1OrR9S6i+EFlGMW7GpBSvdGX1GsFS/sm9KaoT2jHVZjl8exwFwUcQWH5LN80crT6hFupfLeUpDygDDR7SM0oKVZJfQRO9SKZCOLkdWYS6gq9NBOtBD/NBB1yES0IVpobaP1irVHtl55ksaCK48/9catNmayO9mlkC4O2W0CZh1N3WWw5na6UOMkD+Ofoatf+NtoghU86qeRkpE1cUkOVWoX2hgzL6PGKHFuJIL+WBiRQe+GyCTstmdrgoG2mD/VvW5FZG8F6LKbqDE+xo50bc/U9rmYIesgKsfvK55ReiuAYpIwTUcGaOw5lVMwggIgnUkaE52MsYi52PJ4p4wGWdyZtEjhAxp0wp4L0/r1JHuPljSQlUPtv/YdRnQJfAIqtJh0HASlSI08iLNdAcNCw3Bkq/tlPBwbHPJL+wrwoA8b16txenJX6O+cHFdkLEMwQFQcHszOStWLkK5KeZPQhwW9XJDlfXT+FGl5oFxfUy6vycsr8vwKkQUjY3JIb43s6gwRDkLGvRPzXfIz5k5LDvr7fdb1kok8B9x29+/9dh+0nx+7d2Yvvfar3L4mx/X5z3+eH//xH+cf/sN/yOvXr/ea1HvvvcflcuG9997jT//pP80P//AP8+lPf5o3b97wQz/0Q3z3d3833/Vd3wXA93zP9/Ad3/Ed/PE//sf5m3/zb/LzP//z/KW/9Jf4/Oc///VnVeeDaXz84N5nRS9ucjig4WzOmdY9w2acAD39fSaKnKPb01fsz59P3kjN46JRMqX4DKvlurH2iqnLMt3aisv/dOqtxsWakOaqGYo3EIc9OCLQOBC1Gvu4drVAxPzizmJIMlJWes+MGkirDaluXHozqtUwtC0mKbth0YDyrBlbZGRdOsscc4Q0Ic1/i2gji0sEdVxhPpnrx2VxJmRP3vi6mQffFtN3RT3zcGrdhLXqAyg36G31Ie/iqhVrEzYxLilTkjEnZy1KKHRAc1Fiwdl8IY8uETqb4gzDJDR1aM8Fjvy/3kGahdHuFAUxV8vYQj0fGUtDIwi3yLTu1kY/L2E3PhXPUpKKs0MH9De2kVnF4hSI+pc/tiva7y/3Wo8kOQKzDAwtyRzZYAy6EuIrQ8ppNEenCD5UjFkqRRxILJGbDfFb2ZUvgmU4YLmm8bPjF0fsSI9WhSYxT4193e30U+NU37JQTYFdLBrbjbAZR0N0/D1u+6GX08W4Q3zhtk6BsQUEO8gn77S7I3MLtMCDBJAEMgu6JNKSSNeMXmY0GIQ6vyLNr9xhLVfyfCWVCyZlp73fO6oh63RQ4M+PD0gXV8c4axC+lGXd17buf6C98NhL27uc169h9vU1Oa6/83f+DgB/6A/9oWeP/9iP/Rh/6k/9KQD+1t/6W6gq3//938/tduN7v/d7+dt/+2/vr00p8RM/8RP8wA/8AN/93d/Nw8MDf/JP/kn+6l/9q7+6X/JJ2x5F33uN8EbDSend7d5pnU/IcFpn5g0cePA50zobmvHe4eRGpJk5FhGQy4Tm5NBVgjQlLLmRzyWhCWxtbj7FafINQh7K0O4jUbzmpa5WYLDhmVfvHRNnHDbr9OS9YgnQpJRJvJAe0E2uiVorsoo7A6tUXMMQMdLWseyQXiehvWGtU9fK+sHKq1dXrsvEm9fv0/uH9H7DeKIIqOIztfpKN88wk8KkLta7pcStCpXO1jptDDgSoYmgxUja4LbQtidafWLbErfmn39Jxs1g6jB3yJtf2kmElDNpXOBJ0WlzurJyzLFK0LOwSWIl02zaswjt3uukDW6ts2RFMszZ+86euvA2yjbW8HPByJBiEViYHqvB1vOspqGoOZFDUYq0kJaSY/0JnnWd1qYkr2ccUf9pneLBkShIZAEEO1JiMCM6oEEPJER8uJXSsJO8UNZOls6VShF3ZDTZHZZ0iV6uTluVvhoaDepYDN0MZGBkjKkncmRLVIMbtGoQA1QPAysHe3DzG6fAg0G26B64WWRjZ+O52+cz0jJuO+xnjLE2wKF4dee40um53bGNrExHtiWka6K8KpT3JqY3D+j1DbK8R3l4j/LqDeXyQHl4j+nhPSQ/gF5o0YZwhgfb6f6hSTic2PObRRa/Z1ZnqHBkXWen9VLGFUvnEx3XOZsatvGcbQ3ndX7s69y+ZqjwK23LsvCjP/qj/OiP/ug7X/M7fsfv4B//43/8tXz1V97khRu8cLB3L8Z+5afT615yVONkvgQVnj/u/v5wiOd9uT+x42IcL9kLr6CSmPPC9dqRGFtQqzsrGmwX82ZNc9UM6UKPK3bv4einQq3JLqw7hqxi1e9noDpMl7MP5ksKkhSkxGwv3aez6qjbaEB6kTVJj56g7I5FRGkdPnp6Yu2VTXyGUJkyiULnEWTDS0mhw0hnq51VHcLMSbnkREuJtRlPdZDLJMgQHek+5j6HM9IsSFV6W3kK59uC9916kIWls6R8ynDci4p4Ngo4rKeJSmFlYrWCScbBMBjj5gXIPhaYVF3oOCVhSgIqbI0Qa+1oT4w5tMbmTpRKkka25plNNPR6zSualyNyH0q0I5rfreiYsEuIxA4MckBlElH/aXab/+QUHznqXL5ePG7z9ZGk7gt4OK2Ei8mWDinGh9hgA0aNylXMDFZDb06ykBpqFDg5xv3EcHa2z7WiCfZEBHQSx7wxJiKMqcG2t4dEXWt3WkPx3V7MtOJr/ZLMx3VqQXDxBXAcb6sBCI5sdr/MZbfRhwmQ+L+4OnxStChlmZiufiuX16Tra9LyivzqNdOr15TLA/PDK1K5hrJKOjkmeDaZ+JRxnY3c0PA/NxzvDv+lbOtMff9at68GzTo7sbMt/t/Kcf3vdrv34F/Ru58eHHLULzm8l7aXTtJYrfdp9tmRjcfONbAzpPixj/SFmiTH9Fxjq5V5XukxqmNZNqx5ZrOtoWxtRlevTTnbC6wPxtZwZiFZUzsqDVTQVl1SJ4E0cYV5XM0gJ8ViNG/Lvi90HI4bWYn0U4Qa4xVMUfORHr1V2taxm0Ge6aoseQLp4TQ6WOVoM4ox5iI0GTJXUNRHQrgCAvtF20e4qz1mehUH2tQp+L1Xl+PxnXGYUzqtuvajYIxJ9yriv8sE00RPhWaFZtkVQMQJBuEiTgixkHpEwaJe61KhqDswwx2hmvdtDWUSsR4iPI0sDbW215AOwvPdGtwliuKYDwrbcEBjFY0y2541uCOVZs5w60OtQhza6iPe6kgIEB8ynOI1UenkboPQSGrq0F44rtEUbCNritlovXZ3WkMBY3jOsV/mzt0nv8Q+njMCTuoVg8beHXocv9NOBvosmtz7YP8ddHbhlBV1jl7j02H+ipucLvM7szJQAVEl5YSWFEMgC9NlpiwXdL4E5f2BabmSZ6e+i3qANBxWhDzPHNZO9PkED2A2MsfzennH7YXf9nVt93b43h7/GkCG39iO6yWH89JrRpS6P3D35v01X+H7XsKAzyfipefOXwnPCST3+3/3/RImZE4TimJX2Nbuo9oR2lpjt5VWG7eIKMfUoi4+JkXCuBkxLK9F3csqJl5usBV6gaLOLJSCT1UOynrOGkMOHfbw5lDfx6qNLQ3GocNnTt5wsgnS0ebkhK1X1lZZLoX331u4Xt8AG9uaSdtGlkTBuGZhrZWtG4+9+yRYVYoq8+T1tF7NBYcBTPeL2DMLbzTOBrl10roitVJvo2GrItpZ24olxZKQJz8JHtm68yFNUK5uaJvSm+7KJCK2D8d1OEbZTJxU0RNaYSowJeXVLMjmkG2zkW05A7HXSrKNSVYmbkg4L5c/ba4WQkND3eLZrQ5n4byNsW52YduzjhxAd8USNh9hoqIuD2Yc0kqpBzu97fCX7gZO9uzMBzj6udAa0KBBC2fRWg9NQXbdOwmYqnXn6JkISVySaydIjPlZFdfM62P9RrYlIVwVZAnbBhQYjxk7PZ6OZ2f7IbBnhn5c+nnUw4aM1HCm4RgPTnxkXyd/e0hVxYcmQYohBTQn0pyD9l6YXy9c3sws711Ir14j1zfo8obp+obp8oY0X5B8pUXrwceVMT5OyHCndvymHT40/Xi2df73JSLGr3Y7B+z3UOG5tAIfs3dfy/aN7bi+0naf7Sg7m+ljDuvsOF6qaY3tHibkhdd9vWn3SycXEMmUrLxKSu+VKXsU79BeJufsDis9crvdWN/Chu2wIDTPSDo+qM+TIp/P1JxgQcgddZy1Zqt50yhGLoVUXFdRi6INctfgCQg1MqUVH5PSe3cyR+/RJK0uK5Q8sl9vldYba1t53a8sS+a6vKFNim2PtO2R0lckJSbcldyacGvwKI6IoTBPmdy6j8joHVoj08nWKVSyVIo0FjEmEdKklKakRjRQV2gtKP3KdgvjBagKkjPUDewRk0JCmdRnpPlaCMbZqSbytjo2bKFAnpo3d89qZIU3SZiysm6d1hwiRFeSrcz2xGxrZFsOTu5l9s3oa5ynG0evU+NoHCYyp0Hv3+QgNDQ5Mn7DlSlGvamlfSzLmDoQ3Ayv5QU0JmaRQQRRMcRn/Xj68XBSRcxza9BWvP60evbkQZMf/xaUfBHvXxtZotYgZrSYVNB8HbUemot7n2LfocF+NsTNnczwQZ9waQFRC7IetTcG79090UH35MgOHS60MUkaO1ibIsgEsqhrD14z5dVEeZOZPjXx8P7C5f0Ly3sPpFdvXCFjeUN+/YDMD6AzTns/HFQ79c61/XE53T8c2lDMcC3C+D3nula7//1f5/bVQITn7Rzgv8tufg3br1/H9a6UVGAPI1+CCe8TsrG96yR9Urb30vu+mlT5pcxLlCSZZZ7B3FCvT3WPJte1hgyQz7IaWmquyxbQjRzXIUjUCnpQh1sYC0OrodWZcRZ1LhXZR6JY8n6xTnFjNYrwJlSJHrLB7hKnQO+4vwaBRMDWztu3N1rvGAWbCiVDkgTbW5c6Ciht9N428z7U8XEiQlIXExbxyDmbkboz/TKdLI2SOsUak3ZK8jqKT5aODEIcmhy1+BYEAFGQvqElRf5rPE/PPfz2pLZHTYKoMbon0C6sahQ9puE6rtXQvlFYKbIxy8bU1/jNjdRbMOLMs5VBQqh+33dUTkhAOJnBqKt23B8Ga2TNAXdqZGbn+VF+MAkHdc5O4nioMEiJAuSoL2Hiorp7nUqCABBOayUi/ViEyt7g7s7L2zxsONqqUccajsuDIl/zbdckPIgX4VDscFw7uDh+hqfne4Dia5TdyFuL7HN/vT1/8znulfG66PcT8XlfUxAx5kS+KOWama6F+dXE8mpiflgo19FgvCDLgpYF00LXzGjyPpMuznT3sbbOYrpHj+Dz28cyrHvU6Gvd7B33P2l7l039Dcd12u4Pzp2NOZwWH6e/y93rxzZO9HnxyzveM+xaP73u683ATj9K4kpZ5mUfElk386GFKqx1o1MRsRgR70bdTKLZuNM1RJJOv6ePC79WHwEhCqkjyQccmuKCvJJIKQUBQneDJh1Sq2gF+kagUNQemm7iXqDj9GiLYsLw328/FG5r5XFb4VMP3kBcHtgkw/aE9NCeSIaa0/ZvzWjd5Zvm7DyQrD7XKzdIzYcaFjqTdSYqRTYm2VjYuGZvbu6Sg2bssGY1iz41XMGjNiQ5WWVJfZ99JXLUGdyZ+hwn1yL0OlbtTp23ES1bp2ijqHFJ6rJXvSJ1Zckbi25c5UaS29GbFE7KOjsDTHZdOTuyrWGbh9MaGcKebUF0RLulbYKS0BYZ18ohEDuMr0hINo21beHMJFig/rzT5I9aWmvEWhB6lRgtAn04rxhYKdjed9jE3Fni+y2VmJfWsSq0ZrTmI0N6ZPHdAmrszpAFdie23w+3ZZF93Ntcs/1eqLXEBON+ggKNI8Dd8VJfA0OJRMCb9gcJYxbSIqRLojxkpleZ+fXE5c3Mw5sL5fWV9PCK6eGBdLki05VeLlQpEWqdK5z3fVrpRcd1OC2iDzDtzNJPhAfPduyrcURnO/hJ2719PNvDXwN48ten47q/f3ZS8Bx75e4174oO4HmkYjz/3DMsOT5/LJR37ecgdLz0/vu0Ou4rhWlSNGeaKKkoJSvWOjkJ01QQSTyqst7WXeKntYq16h83Ct0yLuDIyjZXz+5A15XSm2dkyUiayb0z5YJk1+lT8bpKba5PJz2ReyVbZU1KpdGs0euGz/d142B7g6rQpNK6UOvGL2yNac7Mc+HTD69J6ZXDjY8fIQGhZW08qNc6WjdurXvtX4yrdiaFa4Irzm7U3pl742KVQqXYynsUNE+QMr/yxS+44kgSytyZVKkmPFbltoU+owkaWZ0SGpDRJ9YtOckiFkxlNClnr1OIQzjaG70LG8aNjWwbyTZKe0R5ImtlkUpa1TOgDn01n3FZjbZa1IeMfvN/5X59DYc1buE0BmFBzBuCVX3GlQ5f0WMN9GgmP7FsJe7bvmZtH/ciEpChunMY369Vnb5eBdm6Z36VIFN0R9bEjynq/bC12U53tyF0XMVnyIVTdBg69Ah7ZGcju+LIru75T+e/jkvYjqpBPC92ssvhXJNARIEcaVa8KNplvLVAXcapKHpRptc+V2v+lolX33ph+dTM9VsuvPnWV6SH99DLp0iv34fyPj2/orI8q2sN2K/t/x5Q4NlR3WsU7nWxPWDheaPxeY2Mw/K1OK6xzt6FZr1kV+8d2Pm5r3P7xndc54N177TuI4vz/ZeyrfvPO7/vJcjv/ja2cYJeAtU/Fvbd3e739fR35Dg+w0vhMs9IKGOstxXDm5BrjZqPslOHqQ7bteZstr3ILQdUMrIvWkedv+11qaqUoJApnn2JeoSZVPfI2ZrTwMUGVdjv1+7SOp7ZAXRvhhw/rw2oxzUS69aRBnNOFFWmdEW00G2j9psHvqFkP+2RdSgkiBMrEGFKzkJcOkytk1pDW8N6crUMNdI+h8w8m0he30qSKJp2mzWm9A4C3w7biITzUprzAmNIX6FSQg3eMyg1z78yQ2rIpWutt+hfaw4JBsNv0OxNBJWRF760nuTj98EZeh3GyBtCL1KS7nbY4bGjz8lH20T2EI7KBgEmxqeYClbYs31T27MaujvaHg3CrCOjt92BYg5NeoaE19XGdbL3GnmGVpsdqIAdQdbIlixSp5cuox3vs0G4OQVqPLfdjkWcwZSYExbIxXhiZwsO2xHTjGWKmVqTkK9KeVWYXheW1wuX9xYu73m2NT+8Il1fIcsDlCstzd5g/LHM6QwTvgwPHtDh0XQ87r9oW+5tzNfiON5lm87b2YbeZ2Zne/ySvf4at29sx/WVMqR7p3K+/xI8+NLr3nVw798/XnvOxPrpNfcOCz4Zc37xe8N1ifd4LfPsy1bCcUkPx9Wprbqh7Q6xEONKRkzauyHaj4bKKH676GyLGpBBMnQT0IIl251SEhdQTeKCqSqCtejvsrjgTVzxvHq+1aNGYeAzplAI0gZR1+ibUWN67mUuLFMhX66gPr+j4azFRCOJUSxSW/MMZJR9WnIR3AW4KGRrSGtQG22tpKyk7PT1Rjgkn+2OKmRVyAG3BNXcCD10ceZgsxA1lYwPjpzYKDSKz+NiirpMdSKGhTrHXvQ3irhD79ZZW8M2Jz0oQkF9ZEjUmqp0epAjRofr/vNHJhCv94xBaOG8rPbDYQCoK+p7T2DfC/cuZRU3ZX+9YeG4ZBd59inRnnFFiWnvm+rDWdVBR2f3HBL119FL2EZCYx787FBoDcfFcF4jGzrmYY3jaBDK+7I7pAFmjP1vp4vsHjGzOMPD+af9+juy06FjeDitaOCO5mJdhDQJ00Niel2Y38xc31u4vL9wfW/h+ubKcn2NXF7BxeHBLnOEMs8d0mjz+HhWpfvj5+zrmLPla3L/Ue9yXMOc3Nu6ezv0VdmlT9i+mqTg69i+sR3Xu7Z3UdvvqehfLQX+rr/jE53avaMasMt9cfSMO59T+K92EyGnGb0kSpno3RtvS3FdcUnC0zKRikKCbVW2nLDb5rUbT70QvNhtgte4QgnCstEk0RTatlHUKCnRq1G0kckskp20oIpMytzVR7H3RGqJrW1szdX2Nms+t6vV3TD1re9Cr6pAdqV6UWF96mxp48OsfDjfuD7MLHPm4fo+qa30trJtjyTbfOiGKCVVr2fhTdm1GRudWRvXKVTWbwl7ajy1R97aUyjmSxg5w7rQ8KnRDdfsIznHz5MXi1El6RmU08lsWliZqSS2nthiumxrAr2gvVJNqGLUrhQgxyTj2o2+bqzrRiKRUqGJOV1dBC3uvGRXgR8e+pQFBjtyjLqvZvTWaK3tDiyJMqUU2bK3VZwHkop5n9UONAzqeTiuHga7qtFzD7hX6RE8mOHwcGTwu4MIX703CYcjGtDbTnbrElOoO2zGaAuLxMqdNOH84yIbl5tnpLJfesYQij8GsJziNMJte+3Sjk/zCQn3CULMHVMLCTBf85IFLUJ6SJSHRLlmrp+6cvnUleXNzOvPXHj9mas7r09fye9/ip5f09IDN5a9ZhU5P0Px/bnyxZijNejxGo7ref2rkfdjtM/VgucI0JFSHj/uXTawf4XnP5b+n7aXnJTx3Db+KrZfn44Lnh+o+xu8O8v6So7spSxrbC9FJ/efOxbWuWj6Uhr+iZGO7CiIkshp4nq9ONyhPs2143UoC1ULfUpIWum4GG8b9ZLAaY5Ctv9/j5AHAaCBbYZsRtdOi4GWKfkssRQOYIyzIHmRPolTprU3Uq/ODRhF9gZDe29E8T3ZrkUo3YklT3ajWeNpTdzqxHVKFJnIpSC20vvG2le6VYRKkurHxSBjpL4hsiHWyEmQKWEBZ6FCU4dNK7br1BUaXXLM68x0SyF6Kz6uRNRJGLZ3W0Vty1X8NtNwfEBSsAlDab25PRFnDm498Yg7jslcVb6ooNKxlGKZeCAS6QoQsFw6erfcwXmLguv4dWpuVG0+Ty0ZKSUfXzOFdqScWpWDWj5o7QM6HHCyYa7cn6I22oXegxrfDxjTKejuKryta5B0YGc9PAvQbCQ5u+M7LoDYD8LR2PEMtpdqdzg3UMjYj3CiDIcQeIMd36qMzx5StMd1db7s9qMktk8MkELAg4pOQcJ4XZgeCpdPLVy/debyZub66YWH96/Mby7MDw/0/IDpQpPpWU3qYBLyrH51Vr94SZ+w4RqE3aKudSZk3NeyPmZH7rav1aG8lD3d29SRnb6LV/B1br/+HNdLB+clp3R//6txWufXnj/jq4k87p3ScGDn9P3++8+Pv/S94OwvTUzzxBKc57Z1atS4mjWHDSNKb7XGZxlmwUc2l5PahUXhgGOCkj1ETaUSs5+8PtR7sKcVVJUkgphDGGqukm7qkKGKgHS2MNBOoe8MylfHI19JvhcONfprmnXWqmyt0x9mlly45ClGwLsobDenvmca3ZJ/J64CoRblbcHFZAnYTEA1hILFA371mfE06aE0pLTuRIwmGhoXEt1WeY+Ea9xa6BESGY3/hhhxIuqZSO8hlVVYAxrMKkiyXdiXfGLDxfn33qoBETqJQ2UYV/E+vc01LZs2urrTcumhTEmZMmdyisajoJBr84DHT73tTbfPHBceZHgvoGdqQ5PvzODrdkwO6MEtd5beCI2eO4gRX7JnUmNx23F9xH6eM6HhpJ5dUnf1rsb5EnPndUg2HfmZwVH323OsPSF8fvxVXFJsEnT2BuP8MDG9mpzy/t7C9f2Z5b2Zy/sLy5uF8nAhLQ/0tNBlYh/K+Sxr+jidvX+CM+sozVIwh/XjzMGzffnVZDnvsovvclZfKWn4Sp/7VWy//h3XeOycIb0r6/pav2MshvPVpHf/3m/3V9R50xded/7Od0VNIuS8cF2EkgraHb6bpuIDGhNMj5nHyefqpseV7dH7bWrzfzGv3Zh2SC2yIB+YaL157aIKffMo3OtmnSxGso6RyTlF5J+ZUboqPSmpdzarbOZzmlZrVGls4hOd99pXWGmn/rsD2U9VjGt/asbTbQ0VjcynXl1YpolputLTax7rl9naB0jdyDyRWUkkZmAyH7PXpNKyUtWNQkqenZYJSO68bupEik3hSfxTjIT1RLdCl6NQ7jpZkWaKp4+JzPT/be/vYy1J6vt+/FUP3X3OvTOzs8uyT7YhQBwjwkNsB69WVggSaIEgy479h2OT2InyBUEWKbYJQlixsR0pRETKH4ks578QKbbjWDJBRo4VMAaLeE1iAsJAsjKIhDywRsE/YNmZe7q76vP741PVXadun3PvnVlYz+75jHpun+7q7urqqnrX57ltp+92/UQgeuUqQkAj4zbKIUnifEVo2oHWO9qmwTo7GR8QmdPZB4tLUdPNpKBTE/FhGBmJBIToInTgvaOJjnXb0ThPa10K56RRLmJaRBBBNikOoCjXNEWzMBNvlPqfTBO9FBE2AKKJUznxonpM0WbS44mzmlAhLYbyuMggaJiAMUsGM0CaAvnm4LZm5riYy6q40KRPITMSVeMvTxMlo6DDS0XYtklbq87F9qihOWpojhvWdx6xutqyutJw+a4jLt15zPpKx6U7j+muXoL2mNFdZcMRAx09bUo06gjJBD4m0fO2o/HsgJyza2cQG/HqDJ+lIzmP2Sk059S7zh+L86koyrkpz0WlKHFpXq3nr9II52aAlKcicMEyN5X3s5y3LnsT6A9sr2yysUH+eOUqKFNZj7pTLO0vnTOkVa8ub5xtMN7CZYM48K3TjMc24luPbTwSDd6esDEb7UOD6kCycNwk5XtMPirZ5DgEDc8jvY6OIBZMpBVwSSHfRsE7i3NoZHkBYyytS6kwrMUFgzUjYxxxztJjCaJm88GGQnchKX+VRt6Y2s8ERRaUE/vTMdI0nrZ1HF1q6LoVpvNItPSj4XpwPDb0tJwQLazbE5wRXAy0MTCK0fxT1mAag3gVATprsahCaZPkVMYI1qlzs67GRQ0pTI7zbiCqyHEUjW1gjLabdRqzzoho6hhxOGkwpsXGLn1DwTf6Pk1yayBxOzZETIgq0hsD8SQggzASGUNEkqm4JHPxGDWHm28dThwr09JazUkG6mcXRQikBUPmrJxJVoZ6T0wCrSTOzaCFkSkhpKRjmVPPFoAmSnJIJnmOm2mSFWHyEYt5AAlzyKYCsDPFgjtSWDXTbzAzgEGKuZs5pxLkkl5LTDHfzgukxA+m75vCYiUuC5tM3juLX3nay52KBy+3HN9xzNHtLavbWi4/84hLdx7RXV7TXb0N014m2DWDOSJrYbP1qcoHSqBypzixrM8KpZ4r6U+VyzLbwXKXQGFJyiPV+bNoF9e0pDYpz5WAVRut3SA9NYCrboSzGqVeITwR4FWvctjxe+n556FdgFasHq1xGGdogfUqqMGDBPqogXQjwtiHaVIYQgQzpMR9WsloVAFvTNzKPySiei8zBg1yO624TYrzpvH7iE7B1MxiJGcMOF3l5/e2Oe0FMOa8TaBO0iZPZZI4mlkXgVXOI4pJDq9qPj+MFuOEaD1iPWu7ZuWP8XbkhA0ncqJZiw00MuBiwMYU0SOL3pIVnZqCG42QHx1ODN5kgQ0Ya5WjwRGMUYM8o5HLZzN/AwREb5qCUSQhjxFcjlphslywQUyHXzmatqFtW10wpAgbMcXsEQA7Eo1G5R+JarkYNA9aOXkZa3BYPE6dxklm4RLVcEOi+uml7wukaClZl5U6rs3gJROjYjI/k8ErAQ/ZeTqi4sbctwIqZk6LuMmIIDM+SSw4+R9N8QFnAWM5lLIVY8a3koFS0/wMZ9uWhSZx9KekWGYL3rbAS3NpGay32MbhWofvUjSM45bucsfRbarTWl1pWN+2YnX5iOZ4je2OCfaIYLrkIuEro54yIsbpXFqzeDBbDCZ9Vl7MFbroRUCCsmFOb/XxknZJr/I10+J5R/klbqws97QFrtoP6yKNU8oFyjK7RHznqUu5qsm01FHKVUrNytd/c/mShB3vZzA4vHOsV4a2aWicQ4zgvcNZA8HqhOwtwYA7MQyDxofrk5XhvHrN4iLSZCOExAGozkdFSs5H2hiR4GicJ3ohuIA3mk3ZWgfWYJzDAj4YRok4PDZYtTZMKRMDgdFkYZcoaAUh2DSJBJLILE38RMYxEnrDGAb84GlXlvFIcO0xtvWsViuux45xeIzHT/5/tPJVOtvTMeANOIlJ8iFkhzbjBOsbvLS0xmLHZNYugtiekHQUA46NOEaxjMahWcwc1sAQjeoRsTQaVwNMMl42Ua3/SL5QpiF6R3d8zLprWbctw7Dh+mbDpu85GSLDIMQxwDBgx+sakWQEM8iUcJEebNAwUwaHM5pvDFIgDRHlsMM4B6WNM3DhdF9s0nGm8TGBWM4GUPb1zLBPzq4yAdhk3RZNCoYLOQy/LlCSIVDmlvJ9EthNQ8dsMws5S/QEaJI0VkUw7WyjZydejSIB5DY3NukIp6FkmNLHuOQ60Vr82uOPPd1l1V+tr6qf1uVnrllfbemuKPe1unoF2x0R3GUGVox4BhqGBF5D6j8jpXOxZcnhOExgp39PBU8u/y6B1i6ggu1Gzdt5FtXl/LNrIV4ez/Nj4Gx1yjno1gaui9AuYDuLipXhFtjUtARW+XjZYXI9avPUUF1zEbKcCp7pjOakcscGMYG2bVRvQkPrPa33WGu53jVs+p7rmxMY1erNxlGHvcl5veK0qpaoySONZPNnwYWoIXkaz2ADrQ80zhOcI1iHdyoqc9ZgnVWRIVETOQoMEnDR4xlQrZdlMAoSWdEvMc4r/MgUTcEi5BAO0cAoARkiX47C4Ecu2cBXveGx7gqX3IpLl67QDl/j8fE6drzOKlzHyIiRgIlR85E5R9utsc0xNoDZbGDYYKM6EUer7RtNgzMdTnQCisbTNZFBIhuBDXbqCpaQ4vHNHji6bvY4VjgreB/ZRMewiXxlc8K1vmezGeiHwDAIEjU6iYueNrY4M+KbQcHBkEzJ0RxYUUWXJoUpCkaQqMlC4xghJRolokYZKctitAbTStGPSwFd7toKCpMor7RkGwUG9d/S2F/M6UWyqDBZCs4halMrKTu51f2XJFuZ9y25sJBzkhSc1hS1Pdc3NRGg35G5bP6rHHgKeZWyIjTe4Vs7RXdvLzd0V1sFq9tXrG9fc+XuI9a3dwpot18iNpcZ7Zqejg0tgYYhAdY4OalviwpLACsjYcxGQF6j7NduNOXidwl8akCruat6wS3Mc91F5slvIj19gAu22dryWPlxZE/ZpQ9en6//1srIfN+aQzNVufPQnpWRKq81GeSqW5PlPSFl/7UmpZawYLymQDE9jCnQruTcXXklnCaWyRcHjYmIMVM0A1XAWz3vdUKMTkAsTizW2WR9aNRxywiCS9aDESspMgc6cYyiYrAQR1W8J25IUnR3CQn/Deoca0iRM/T5jwdLcA6iJyJcc5brznJExBuPty0DLcYM2BQTUdPPGwItYQj0Q6DfbAjjgBFNVU8yAsCqn5VLHzJzKCoS1QDBIbWdTRyX5v4KOVoQBos1DRi1nHy8V7AeorAZAuMojKMhBgeiItZGkjWcAecC1ml4JVArURMT9wVThBTsPFFP7RhFs2Qn4w6MiggnLivO3x09nfqAJDFyWkhkAJui0ifwGgTGFCszModqkjy3pvpsjTV1sp6HSjYJSY7FRX/M52ZdVzanT/ETp7/FejFVd1tQYaY/Jn0/a1NoLOfwjce3jrZr6NYN3XHD6lLL0ZU1q9uU4zrK1oNHHbRrglkxmnaKoJKjqYQJrGY/wOX0JVV8wqhxRyexYCkehNNzEwvn6m2J2yqvNQvn8vF9z6mPLZWrz12Qnl7AVVLN3tay26VGLRWMuewucKs7R/mMUjZccnNLloZnvUOmUxY7aZ1pDF13hHUNzqlVm3cW7x1CxLYGt7GIjVhnGAYLo8GEgbEwFdNJIq3SUcW9BAgyEp1JimIhOktwOiFGmwL7BsE3XtOyG4tr3JbeS+31IkMEjyMYhzEOGwMhRsbRTpaHMYTZempME5cFa7VukRRyyhqurxqGaBlHuDZAZw1HTrijWbEyDSt7xNpewsmAjQOOnjb2OBNpgmW4do1xGBg2+kBvRF2ysESrnISxvYqkTEDEad6ypC9xjDo5icEyYO3sqeMywOHAOEQifRh57GRDP0Y2Y0zZptUqQt0JdBoTmxNZGhqJWDdMgXEns+ig3yyH/orzjD+DT0TFeROzk8DA64JFghaeYh1Oort8kwQtyWHK5HBNGzRA8BCRwUw6UpUAmmlImNSHFUi0fjmaRrYanKVJcyLIuUfO3FfWg+bsLQ4hx+6dLAVNSqyKSZxXgk6T/lrdt0ZT0ThnaRqPX7W0a8/6qGF9uWV1uWV9W8elq8es7lixfkbH8Z1HtMdrbLvixFymN2sGWvoUTSUD1zBxWpo6NINTuV+KDUdRgJu+a5meZNwxJ+xbdJem8qH6nctliZCp9mGWFMH23FY/pzy+CyAPwHUG1SLCXTLZTLtWLiVglZaD+dgSaNViv7oultP1KMV+uz5uzantegYASVy3djjraNsTuu4E6wztSct6c4JvHNeun9D3PXazYbMx2BBSlHOIpDxeRJ1I0WgJcYyaqXY0DG4kOIu1kbiJqkuzjqYNNONI47M5udf09Z2a0DsHzgleLMFERhMwNPiYoj6YkdEEwhgZZSTagCSrOJ2g1dkVZyHalBpeLdqCd/TdmhPpaMzI18cNjw+ezo60duTY9nSmpTWBzgTWLgVtCiPOekwbaPxIlBHioHqulGMMbMoRNSAYsF51WmbEiFNHazSwbWNFDVJM1qWlGIaigYxjiIQxcDImsWsUNVpJn9MZm8y9LU4EbF6LDzSNYCOYUQE1++OZ7N+GTtGZ8wEmMNF+pByXcmfMLEkCtkmfNeq5Oat9FiGbKUST6Q1yPSCjEAYNfhyn8vruW+uryfJPKOzrk6hvDjyz1e8LDM56rnL+tcycWi5uEzflk7HHmO+QHmRJEUqcpXWa/857R5fiDWbH4svPVLP3o2e2XLrrEutnKHCtrh4z2CM2rNPWoQlrlKtXfWjmumbdVikinAGtmc6PNAzRq5g1JePcEhXmxtmlxijnodK6OZcr56haVFgu1GsgOuve+7i7J4CeesBVA0O9f5bMdl/D1quFcmTs47TK6+vn599uoSyc1p2dp66m3E0/jEZzb5sOREUhowwYp8YaUdT83XmXlqmCHQYVQUWIMSQjr2z2jIoukgJbfZFQXZQBXCAGwds0tURJDq7KtVhEASuFeNJwRhabRYkm4AOEYBjRoLeBgAuaMiRGjd6RzfWnUEKomTwkQw5vIBr6xhKcJ3hNP9LKSBsDg3V0JtCYQGcGrhtHa0JaKxvN52UjVkaMHfVvLD5KEnNOn1fGJPrUctY4sClOU06XnCdaIeWZCmrCHgLEoCJJEdTrLs/Skpo6WSUaDQHlyFmqAYuGdEyZiKdOYmYruyx4k5RQdBLzxfmvmNPHRVBwknSPzKWJgnDO/WV6QxhS2hkRBjm9jpuHzMwaTIFsYX7PHKzZzGCJYbJArZjI/GaTcNCkvjEZbBTNYovnmuz+4C3OW9rO0XQaYWR1Wa0Fu+OWo9tXHF9dK3Dd1nF824ruckez7lI0jI4hmbsPkwWhn7in0nqwTlcyg5hP/l2eIE4djFOk/C2T9yW91RKdBSI18NSc1RIHte/e+8Cqvs9NgNhTD7hgGRx2sdAlnQUM9QrkLI6r/GBlnfK5Jeuakj0vOw/F8bp+JXDWNI1ZjXdtfYsxOkBH6XHGquVhWn06rw7L0USst5iNSanWDSHpPCSF+LGiVnPZ90qiAls0KrYTqz5koL5FIahuxFsV5Xgr4KzqE8SmZ1us00k6BkMIkQE15gg49QOLhhAjxlkF1BQN38Qc7QM13Q9gvP4eR0NoNN3IgKUxgZbAYByNGWnMSGssK+toGekMrK2lMVEzKFtVk2NGbDLFy7ohGwdyuKIoaS0fk9O0dRjxqPetTd9JkrV3zjMVEjcUsVHU1wvdYgrw64xayDkEb4IacxiNv2iNxSRrP+O1j0jiosxCp1fQklk3GZnETzJKof9KIaWiLkykcHbORoiTbjOLJ/tZmtWj4FXqojKmThnZTIE+CbCyQcV0WKb10ba0vTg+dXdJfX06KGR7+QxgxqQsBmQ/LTXCsK2aureX1NS9WbWsL605vtLRXWo4un3N8e0KXBo49wh/qcGtWjasGRKXNSS9VikWrE3fVZ9VpzBJoCVqxBHFEqPTxky52U5xN/W8sDTP7AOtpf16TqtVJDUtgdMu7mvfQvwC9NQErnlJN/+uRXYl7ePCysatP6hZKLPrHhmoyg5Wyothyu+zJQaoP3rNtp/n+RXnaY2jtR1XL9/GSdNzctLjfUOz8lzvT2ivN7jOqxn25oRr108Yw8AYHHawBKO6JyMhz2P6Wmk1rubyI2KMRs8QNKuyCwxYWhNw0dGIJVivzrh4Gh9VMe4snWs0JJIR/CiMLum7GktrGkYXGO3IKIFAII6REDWqfc5kTIwpAaMh+AgebGuJnaNvHNcbuGY9rRlpTGDNhj6c0BiLR+hAsyebkZURDYprDCtr0ZRUGt29dR5nNJxUwiWiQB9Dbg36CDFqtAojJCfdBFYSMaK+Xcm0JH3yWdzlSVaYBloG1vQ0EnAyqEl8SI6+6OKBnOVZclSLCRkQkvguiQplVMChFzgRtTpMRhaBFAMvziK/eV6aQSwzAzkjSd7PUm+9ZhbpTSAkqN/cxCfpG6dlFuMklE0gLSr2yyLEZARfDAtD0nTO61Vrk0heJg4LoDVOuXxvaY4b/Nrh157V1RXr45buqOXy5WPWV9Z0xy2Xbzvi0t0r2ist3e0tzdVLxJUjNJ4NHZsUESPvl6LBzGmV4sFxa98zJJAbaBiDn90L+qIxM8dVjv1yEVzOB/sW0udZwJ91Te4Ipb6sBNV8XKp6139vgG5t4KpRHc73QZaO7wKv8+jBllYbZR2X9ksusAyRUos3Sxl06XWef++r16klatIfCAgWZzq6RkM0YYEGmr7BOofxhqb3+NaCg36wDIMGjTXBYmLQQAhh5jykbIgk5omixhkWp07No0N69Z2K1hBHUZ8mItFrdHlLmsRTrEMvKh6yRKxV4w8nAe89QzOkmIKRMATVuyULPZF4ShcQUXAkokF2vUO8IViL+lklkWgS6OSYhgaNiOExRBtoTMQTEDNgTEBMpLERa9N6WoTGqGHGGNGMy6QMyWI1c7QIXuMtoRZwkC0PZz5FN29TKhmjYOrHxJ2NAieoj1ROGJgie0wZWUA/etJXSfmthJT2RBS4NjCOmukkZE4LCg5NLwu5dul+IYGSGqWaIlBGFj3m/sAUtzAbsWiCy9xdtY+qnYSktZxMazowyboz85Jma52a13b5Go/NNheahsQk45mckqexuM7TXWlpLzW0lzzrO9asLnesjjouXV6zvnLM6qjl+OqK9TNW+OMGf6mFlSX4ht609DQMSZ/Vpy2bsM9cVikytFsGGlmsOIojTFyWUdDKxkjl5J+HWimhqRe1S9zPRek8wJWP13quyOnnl/Pj0xa4zrOiqBt8F0gtfdR9nNi+Oi3VYalcKUM2xe8lQFoSBdT12wfAW5RWuMaq0YZxU7QE1zh1QvUR11usN0QTcb3BbnRCMuOgK3yEEY1sbhJQFAIe/SspN5NJeoygK/xgNC27jBoE10lEBocXwYkHCViSNV0ANQgxOGMZLTjnCBIwHgLqrjzKqIYORIwZmXx98oSbnVqT4kUijMmAQUAtHsWnCVM5OQUhyzAJ75IIUPPL49kQTMCaQDRjiq8o6Z2cLhLE4EO2pjMEcSlGIanN4iQetCIp/FOcdHYG8HEGLiMa7DivyKUX9Zcakl5Pcrfa7nhSRMmYDDMkBddNubPoDWOYLNqZor6TxIdksR+ngcukJk6WgzEZe2QTdQSNhylMkVWsqWMIpB4kqStnQ5Ot9zFbwCdlrzOZO8uiVRKSaeNZZyeu3lmP65TL6q6o83B3ueH4zjWryyu6IzV5P7q8pjtqWd3W0V7tsKsGs26Q1jIaP1kO1lsWE5bBc+sYhFu6razTCnaWt+atBIHtobw13LY/+MK2e0pYvj6fY8f5GpCWji3p1Fh4lwvQrQ9cmQPZ1XBlWYrjN+G1/YRRrntpmFFySblMHtm7VlXltfWxM8DMGE1HctSs8Z1lHVu6wdF83XCtb2mOOlzrONlsODnZ4Jrr9JuBoR/Z9A7jBtUzBSYd2ARfWRQlICHqhJp0YBZDNJZRBNsEfGcJ0uB8xDcB13i8tTgsLjgsukLGq35CHEQfaa0lDJEwRIam0fBHEhkZGFEOLBDSczVqOpIs7IwhBIEUDX40U4qrxD04LBG1OkteNpKmHBnw0tNwnYYNLkZkgEFn+9TPhslnyVs06n3K57T1+WJMHKA5Ndgzo2ySyAwhBdpl0kUxkEIlmckCUDEqzoYVOXJFQEGqj7M8rzfEjWiA3VE4EaGXOeP7xHVN3zeDmZnAJJCMczBb3JgeSwuXqSsqK5g5SyRO75hFfLnb5iSTJl2mfn5MzsVUQyKDnyOJE71Aq6lIXNJjWW+x3rFarWhWXrmsOztWVzpWV1Zcfuaxhm06VuA6vryiXbX4oxVm5aA10Bqus2bDahINZlFh6WSshhmeOeHjDFjKoc1RMYaosUS3xINZt7ULdMoXXwKWmkO7Edo135RiwjKnYO7/oSpTgtZN1unWBq4lyo1T66PyOarjN8JVlfeof59nlVODZ81Nlde44lhpFCILZevfZZk8a1T1UimOwRhH6zRNiOssxnnaYUO7OaGxlusnLV3b4rxn027YDANmYxl6QxwDY4jYoNEuTArQOjuwxun5GrBXc1JpJmHBBk22GEbBN2qk0bQjYzKnd+Lw1k5JFQ151Qy28XirkdBd0Nh+UTQI8GgUuEbVgumkawKxjUQviBdMk4wdiDgJk90XRphTRKa4B6KGyh09HddpZcMqbKBPqUROBHqm/GVbIdOTcsZYM3HXyojItmMpylFl0Jo+klGRpUrSlENTcEhsTgSNhpGD3xpNRaMsEDKYiauSQVSnlZ2FTwxyXYgboY8pjyOaUDNIajdB40OmjpN1XPNC2hT7udvNOi2EyVpRgSgvb3KqkdQ5TR68Zmt8ztax2q5OEvepDTaVsWiQaA1qDKZVcaD1Ft843NrjGke7UovB9qihu9Rx/IwV3WW1Erxy5yVWt61YHXccHa9oVw22dZiVQzp1ah9Nk0BrFg1mENoO41Q6GtuCC3OTODFIcjAe0sopg1XpZ1XOJeXidmluq8d/OV/UVKP+LiqfX85D59mWYilmYLtBurWBq56ky8bNnf6slco3sh67QKv+nTtB3XFq7qucFZY64y7Qyn+XgNGYKViucS7lezKsMdhGV6cignUO5xxi0sq1d+q0bEUzKg9BzaFjJATN0yVGDSX0/jJNMKXzqxDUKVXSCj1YfKPB8KIXgtUwTCIKXM66pAvKYXm0kSwGrEZKiKhI02EJRGz2OUONDWIbiF4z+Bo/0kjSN5HCMBkKg+WAS+lQfFKhtwy00tPEHjsE5ESQDch1mVfKhXjHGOU0M+dsjNnCtMwVSWACJDN/HqVsjWCZooRoAQW5bNo+RWbP+8lSQnI0iwxcG5LvlcBGiIMQQp4v1ccsi/uEnPVEtrrhdlcvg+HKqe5Xd9OJ82LmqMotl7Pm9PG8n3VX2f1LI38pcBlPypmlfdg1Ft95/FGDX3lWxw2rKyuNgnG54+iOI7rLne5fXbG6vKZdt7TrDtc5aCzSOgUt6wvOquSuZoAqE0CGLS4rGWuI+nUF0f0tx+KlkE675pN9tO8jlFTPM/vuBdtcXLnVxhl1R6lFhDcxB9/6wFU3Tn0OthutnBW+EXWp98vzsFzHJaMNW/0u5Se5/qXJ1q46nSVH3lIwaMQK54TjxtNJQxcafOvprrVcPzmhWTmunbR0/YbmuuX6iWcYBjZ9j+0tIWjiyjAaYkrFoevrLGBKryLq1xVlVH3ZaAi9aPDfxjGGiPcavWD0EZeyLHsn+BTdwFqLTxHx1afJEK2mKYnGEUJO3SHKc5nIaAOhiUQfEa9hmBoMLoVS8gnAdIt4CRpNnoCnp2FDxwlt3OCHHnncINcEToBrTIYS2bxOLQi321p94czEiZDagww6xXefdIMu6mh1IM5gvYA1Wzmupi4eNeqtBJIPELABNlF1YQHitVzPCCcq5h0m3I1JSqUdLYoQcvR+ivnUnB5i20MgddhivKleKnNPGXUyQJXQVPyx85BQ838VBVorUxo0nEnZiZXTsj4ne/TKxTeO7rilvaJc1tGVlvXVI7rjhvWljuNnHLG+1LG61HL56ppmvcK1LTQeWoN4w+iaLX3WSTJ/z1ExsoFFzpmliW1mq8GRhp6GIMlPKzj1z4qcjoixBF6Z9i1Y99G+crsW+fuO7dJfLYkK67JPe46r1HHt4i5u9EPfSH0uej6/g632IZtHzWbyMId52fXuS1RIXxZpWr7Om0F1TNY1OOvouob10NE+7uk2G042Pe2qodt09MOgZvMnJ4zDyNAPbDYDcdTIFyaSuKqkIZm8/EVNsRMnFo0go0bIcNEyNurX5ZqgDqLW0lqPdx6XuK1oGo2DiIqDTBITOacix8zJBSMagsqNhHZEGkGaiI8DPka8RHx0Ki4USxMdDZZGLI0YVkQaibQS6KTHjhFOLHxd4HGQE+BxUe6rR4GiT9xOVAmYmSbxHNsBtbScDCU0IoeClUzcrxjBeoOoPT60QlwJ4iOTi1j6btHlmI7J+GWIikbXgBO1PJQepBfleEcYgqTULIYek4A+c1omuTsIKb79NP9sS95jep8kNpR5kVL+zb+mXFdVGTt17hnGJCnI8rBWa0HAWdUbeoNtwXiD8WpQ5JIeq+k62s7hW8/q8or17R3tpYb11RXHzzhmdalldaXl0m3HdEct7aqh7VaY1qlisoXRekYzm7yHFCx3QzeZsfdTHMIyYK5GsRwnXl3FizEYjYRR+mZly8F9OqEngvbNFRcFr1oUWAf9XXqf8vlPa+OM/Lfe38XhLN3jPBzYUpmle98MW7+05Wfn5y85Py/VaYkbrcFrx3vPebMszhiaplN/l8alSVQDjxoPrjFsBo/zajgxbAac08k3DBY7GsZRRYgmi5+ICRyTiDDVUUxMYi6drKMI1qveyqWo8mIhBlFTZqsiN4dVjgyXdBtpUpxyLBms1cjn0YNbGTXT84EmOBoZcWJwweKixYrBiaUVSyuGVgydCI0IbYw0ydZbRqvx+HowG5CNwHUUKE4UIDSp4yQlTZ8mTmblxkiK9KETtCEDVg5TlCKaWAUvvECHcmeNEBt0FFsFsGxFiTBFZZ+U/EnpL70CWIyJ0yIt9GUhOMP0zXYvnMtup+9R/i5nQ+2A2YC9FC5YzGRhmLk0k8TY6oI1n8/hm/AmgZXBdmiSx9ZOHJbznq7r6FYNTedZXVmzvtLSXW7VmfiOI7pLDasrHevLRzStx7ce03iMUy4ruuRjZbatBbdFhLNuq47qXnJbg2jG4okLzg2fuayaU1maB+omnTvVN5aWnre0xerv0j7V/g3QrQ1ccLrR6ol6ic1e1PVc8Lkll5TvVa6QljrcPqpXIrusHmtlwC7wyvUp2fElRUF5rvqbAaxxLd54WmmxjaHpWjZ9j+8M7cqy6QearsGeWPpNz+Z6D84y9APjYLG9VfGhBHLohCxGkhQpQrKlX0A5AYM65ibHWmcd1jpGC4GQOC5LsFENSqzDi4oTnbF457FOuTJjwTmj3Ig3yNpjnJqud9HhJQFWcAm4HI5AGxS8VhiOIrQxZXkeDBIccRDiAPSC9II5sYTrgtkIcgJxkEkCBJBzRgWUDRTJhtwBRC3ODKKiT6vSQTU4SM7PVrAOBa4RpAXpgAZN/Oghh2zSEE2kYLcZvEw6pr+jzKeU4yJxW1nMlYCQ2fiiHGJs/TXpHfMQMNP5efmQyhbjzySnao/qKafITwVHljksj8Gj5a2z0FhoDLYx2LXBdhbXOdq1xzcNjW9Yr9esVspJra6sWF9VceClO444vjOlKLnc0q6Pk6OyAa8iWLFmyydrd8DcOTpG6bsVkgHGQMMgDT3d7JdVAlfNkdTiwXoe2ecu80TQeUCwBqSleXjXBtvvdwN06wPXPiobJlb7dWzAm31O/awSPG/mnmWnzg7IJfdkquNL12Uq9WZLVB/fAkgV1R03l+lWA0MYWJ14rp+s2fQD3fXrtCea2+vkaENzrWUz9GyGnv5kwzCMhDEwDAMh5GjvSRdj1NdLrRETBzYkTsUKBM0nZUzEinpXJeEgvQ24FGOu6dSB2YnDmyE5n+YwUipCsp3BrgzeCq0RVmLw0SrHFcGlBJUOw2qERoROApeiJstsRiHGTjkpYoruEaf5xk0m+ELvNGexRlFSu8YgOU6hFLEVZ3EcRn20bNL/pGQeNFYzTTcRuhGa3mAaA2ugRUWGjUAns+gwTYwyTTIzp5eTJStQpTklHYsprKKGZNTM2aW6haJbLXWlmSEw23Ouyd1TuScS5zRzXbMNSt6cUXzyxtBi6UxyLWhVAmA7izkytJcb/JHDH3tWl1raVrf1asVq1dJ1DccpDUl7KUV2f0arVoYrD8l/EWu2gtwOE1jl6BbNZKZTbiWoDZPYUA0wTlgTo9XvsWEGrtpHq05Tsov26YbOWizXx8vgvPUCfxeVXFWuf8mql+BVixFL8Hpa67hOL/22z9fHYLcs92bqsevZN0rlzJC3WnSwdD4/u5Yn1xKb+vql+wFlriKMYKzF02CsxsezztM0Pc4ZrIe29zSN1cgbg6PpPSeNoe9HhmHEbAzjMKoJ/WhAwhSZQqLqucp3ENJsmqwcoqSo6aJWf9FpNmYXVazjRsG5SIiWEBMHlnzArFVjD0+kYaAzA50Z8TaoUUZUq3WXtpWBVoRVFI5ixI0GKx5JIBSxE3BFK9jkXhWMQVzKvaXh1km11U8i22biMzeTuLAsqZX5k4UomicsfUczqCWkSb9zCCmxaCXSYmbKcpwXBFksS+Z6y/mkjIaRrARN3t/uSCaXy11lDg5YCDTmME4mI1cBVCU4ae7ojB1Z1AveGrzRrTE2ZRIwGlew89iVwx87uiue5rihudRydLml7RS4jtYZuFqNOXhlTXuk1oN+1WBbq9FTnCUa3TI3VXJQmaPK1oI5EkYdLLe0Px1xDNKoqftots3cayOMcswu0a7xu6v80px3s1TOL/XcuyRLXlpML83ZN0BPDeCqG2Qf1SKxev9GqAaN8tguLqakXYBXckv1dfvedakt9oHWPrFjSYkLsEbdQL2zWOdpG0+buJ6TfkPbOkzn6IeGdujx1w0nJwObzahisI0lDCMYDbUagxpthIimI0EnVVHk0ok3HSMKY1DgMgKxEWy0jGIYG83G7IMlBEvwESeaY1jFiVY5x9hrUF0ZaF1Pm2zBvIu4KJNpfGeFVoSjKKxjTDGMPAiJcxLEWIINmureStJJQXBpwk51nh23IhPbA7nE1lhH8ueYnblzqKSYUqO4UUDmCPKSAgyLBZOSUAlMxiHE1I6RFHVdJmCKmauSrNc63ZV2SZa3u3h5tDySucei2xkzORO7ZCXo0cw0Dcly0CqnqTEaNYuBawzOG+zK0awb/NrTXG5ZX3W0l1rayx1HV1Z0nYLX8dGKdacc1/pKR3dpjVs1NOsWOos0KhoMVvPAzQ4P2d/Kbon+ZMvUfQavEsCyvisHy5VgTkfCKDmRJX1W2YD75oubobMW8EvnalFfCVpn7dfg/LQFrpulvPS7SPl9wLeLezkvlR+25KJyZylNsHL5pY+/dCxfW/+9aF23ANDTWUfbdKz8mqbr6EPP9b5n1V9nE3o2oefa9ce5fq1nczJw/VpHf33D0A/0CcziEAj9yEDQKBwx6qSQnF/FhClsk5QRI6JF4qgiMwwujNhoGUTN5D0accNj1UIwgh0CVnpwI2JHnA8qNrRR7cVMwBs1XG7NQBtTQNshIKPmH4uDwab8UyGFWMJIkqhqHDz1MQoKMklEhjEp5qJGBpe0ds8+UplRKkVsW14RarkConoym54dbeKcMj4mU3mErYnSKEpBLOcUU316O4EahimFyJStmLl7SnFVGc29LIdlipoBMyeVA+U6o0DVWUtjDC3QWDUK8hZ8A9Y5jZ+5anCNwTeOdtXS3tbRHHvWVz2rZ3a0Vxq6qysu3X5E1zWs2oajS2tWbaMJIbsVpvHJWtDAisn4Qi0EmyT2ayaQmtOQaCvF4tucHhrz+QxiEs0yUC0B1hMFSEu0NLaXgOsiHFFtU7D0PktcWPmsG6SnJnDVnWAJUGo73ItQzaGUk3kZAb4sv3SPsr7l37xfvkfNwdWdLlZlc7ly5rPsBuryWSVQxnRtxf2Z8gXEYqWhc2u88zS+oe0cJ2HDSfB4b2hcz6YdaJznxDn6zUBjeiyjRnk3A0ZU/xVMSKlTQEwkGlsEhpU5pUb+JzqZSzTYINgYkaDR4l1KDWEG0bBMMRBjT7SjbiESXdJTWZ3lxYwIk904EgbiGJEhElN4qTiKJn8M+ldGNWuPSZw51VPlbpjETWpTztH11G9LChVmOiP5/WbK1nXR6HUp6fSsoBLSwaI/jKYwF5TE8M0x2Kf7Z4tGcpYsmfrDBDq5m5jTk3e2FJy6ssm5tKYOM1sOGkMDtBZaY1gZm4ALOgOuserS4C2uM8lC0OHXLb7x+NbRrdspMO7qGS1Hd3a0V1pWt7esb1/TdRrpZb1a473HWYdp1MTdOIM0Rs3c8Yym2QqK29OSfbHmFpn9suaIGNtBc0+JDXMOtno+WuJUasTfNb9clPZJluo55tSqY6H80vkarGogW+LS4PQ8eQG6xYGrntn30C7wuBkx4RL47LrneZ6zJHKsgas2sFjqYBmklsB7F1jnDlYfryPSn1qlJYdSEZoUMso3aiDhosMHFdN542n9kPRNhsZ5fLQgI4Md6dFguoOxmGCJjDNeGpNM5QVMnJNZmhRBwqBm5TEns1TRmY1R9Qsx0oyJm5NAlAxc+luzLEeCDVgzYkwkmpEgA0EGYlSftJg4rjBGwijIGBnTX0lAFlNm5jiBSQKu6W9q7ARqORqFTcVPL1rnSBo2xUzM7T9FRk8ToEnfMHNLJI7LBLNlnFFyStvdttBJTZ+86mDZYbg4NQPUXCbXP1sKav31HSYuy0BjDJ0xrKzBO0NrwXYpantrcWvNkeUbr5Es2lYd4o9a1lda2kue1e0rjm9f0V7xdLe3rK6uJx1X13QY4yBbDCbrUrxaDJaGFqXF4AxGGYxPxxosI2WU5cv9RS5kaeJfaOqdx2raNbec5/g+8FqipfIX2qS49jwvt0y3OHAlqhF+V3ucJdM9z3Pyfer7lv5V3wgq33EfCOa6ZNpXn3pVlE268jPswlavBkuKFmtbrGlw3YqWjpGertmw7nr6Tc+RfZzrrmXTDpy4nlWzod8M9O2GjW3o+4FhGBnGnjFqoKaBMXFEyWnWopmWJegk6UDUw1fHQhBCr2lT1O9nJNiBYEdiHAmhJ9hAMKM6JNvAYCPGRkYTcEbFhkFOCLKBuMFvNkgfCb1yXqGHcCLISUx/NVahpPBJ45g4ryiYmMAngZcrBrErOpXiTOYrZ9iYm1xmvRBzyCMENQJJCn9j566QdVzK/WVeah4E+VPWxmVlFyrrUHdxM3UbM3FXVmWnSGlkYVQI6ZMYsANa62it5cha7NpiGrX6bNYpavvK0xy3NCv1r1oft6zajrZp6I7UvL09bljdtuLyM1uaKw3N1Zbu0grjPNY2TI5g1iDWTIYWY3IgzvqogbYwaZ/TjTBxWabYt5PxRb6mPxU5wyWOiwXnuGorG7pudLtwrqTzLohr2jdP7pozljiqfcBcmqIuRQC5CXpqAFdJ+1YKcHMcVnmvnRzIjmecBTZLH/W8H9osbPn6pY6/tFrKv8uZLMuvXFWu5toMRep1Ne82weBsizUe2zR0ZmB0AyvxrHxHfzJw3fU07oS+Heibnt5cZzMMbPqRk03PGEdGAk5GQkwpS2JMnI1FJOljXDIB96hV3VY7CDYMWHqsDJjYY+IGbEBsIMQRZzWfVshKIyInEonSI6LXjZse6VVUKL0QepIfl/6WXogbNA5g5sKESVxoJVWpCqA7OyYrnDhMNf639V3TesLMJuUzYBtNARPnB0gKd2+Cfhf9WHMdJsl20T+tVnnLy2JWvcrsSZK+uTfMlpAm58rS6Bg+OYM7p3nVvNGAyWtr8F6dhZvOYdd2SjHSXPI0naNZe1aXVrQrT9M1rI7VOrBpPeujjnWKJ7i6bcXqaotbO+yqwXrNJ4c1BNMop2RSgFszpxFR8eBsBRiT6G9M4BMmK8HaclCPz5Hd3Skgm9q6pCdo0p7oInPZPi4rH6utGnfNSbWBxT5jjK3n5QOx+ntxusWBq1gLLjWwqYpdBLxudIVzEfHh0rOWgPCi4FUvl/Pfeulcd8xY3KMst1TH+jlTW5tJZGVwiLWqbHc6QdiVwYmjNwOOBiOO3g1sbMNGDH4Y8H7EGs8gA4OMOBkYgiUksV4MQf2oxKIhpCLRAs4oV2ZkqqMxOVCurqud9FjTY2XESiCHkBATiTZFhte7YuOAZWCQgTiOCkZBiGOyhAwp3uIYpxiAErLhSJzBQWaAMulgbi6buFj9FJIs/opmT+fyNdrsClqm0NNK/i/IxHFhVO9HMhXM1oSzQ7BsCQtk2i/N31XvNosCJd0630OtAmfGRi0Ac8BbbyzOGpy1tIJaBjrLylt8Egn6I487dvjO0RypQ3CzUkfi9SWNzt6sGlbHKQpGBq7jNc2qpb3U0Rw16tPlXeoHhujsBEwBOwW4ndKIJA5pTvaYA+L6rf0xGWqECrhKoJp1X0m8uDS+ynFyHrpRbuqs63YtkOtF7C7gWjq/7/gWaC1ddHG6xYErO6WkJWcepKU4bZ9vxC46T/nMjZS0JEK8CJ0FbksdqQaPLNIrAShfXzr+Lb1jLlNyVEsypFpsmMvUCyhREZZJ1n3OqhnyyqwYm5F107NqrrNJ0Tau+5a+H+n7kceb6wxRQeNENvShJ8TAEAaGQS0Pg4Tk/Jtiv6ccXZJCIOECzonG8JYUsMf0+LDBmx4vAy6MYFVvFlLjRGLyE+sx9NjY4/pBo6v3ClwypnBKg3JeU66rZAQhQkoWuf3RJLeXY4pqDgnYhBRFxGBi8eGmWyTIqb10EzAa1GRf4gwsNgXuzWu7CfxMvuY0g177weYI7QEm1kqTepqpK3iUs/LO4HCTVaBL4NVYS+fAtQ7bOvzaYY9UJNheamiOPU2O2n55TbP2tGvH0aWWZt3SrFpWR2tWa0/TelZdQ7daYxuP7RoNhNukeI4NjGYOatsnMeB2eCY/hWga8agY0E7iwXHipJotc/ia+ypBq+TapIxAnGlJMlKO+X0WzvVCcV+581LJGe3a6vIl7TIsiVX5si8/QbqUWxy4YGqdpQa8EbHgjS4Cljili1xbPn/XvXZ1piXAdMXx0sS+BNxdC58a+HdFqM4Amc85tjvzqUFqMNHr5GZaGtfR+ZZhNbBZbThpO/p+YNMPrNYdQ9gwxIFrcWCIKjrsxw39ODLGoKJE0VxbgUBwgWijig5bcI3gnFVDAFRv1RKmZBTZ+NnFiDWafZgEWhpTYkBkQCQQRk3bIiTwMcrZiRNoZFowiZnbbFpklhwsplBQFe0skKPDn54QDDnx4nS/jDqJFZtA0DLftPwGEfCodWPIVVb/rVwkfz6H6qeigE0GMDoPl3osO0mR7eRrZWicpUnA5Sw0jcN5q9aAa4tfOdzK0VxuaFeOZuVpLne0x00Crpb15ZTg8ajl6LiZOa5La7xvcE7jEJpGuSsNPEzK3G2mdCMa1LadImEMtBPgnBLtUZq+z6lIhmRtWHJk2Zer5LJKy0LJA2zXfJC/Uw1c5Zgr6SIuO0vPWqJdddsFWvuu21X+icOpU/QUAC7Ymr1vnPs838faBRR12YuufMrJreaWbpbKyTH/zoPnLL+KsiPX3Fh5r3K/HozJiiCLm4xxiJXkyGx0InKWxjj6fqQdBnzb0A8NQ+jxsaePDUMc6YNnMw6McWQII4OoHmwkMJohRYCPSCt4q2vpFp2oG4QGSfm1RMFqEvxErJmsGDCoKNEk64bSBB+LApZH4wR2ZpYFem0nKdkWMzeGSe0h2b8p6wanZJBm4r4ySurvij2qOG3J4GWLcZC/WTKBzz5gWAUwI4JN97eyVRzBqAAjMw5Joaa4NaeRUUdhjWzhst7KpRQ03tC0mrjRdZ7mWDmtZuVprjR0a0/TedrLamTRdj7lx1prlPajhvWRBsj1XUOz6rDeY63VyPBJjyUeorNEq1sGmxxLsAapEriWdFg5hWjNmeWyGeqXLArl1ABZGCf7jp01vyz93kX1wogd+0uL4YvOY0sL2639JUS88QnuKQJcC7TEBsPuttrHFl/kI5Yr3JulGrxKQCtBbolqkMpUmrfXnFcsrqnvtaT/Ki0Rqa4tLQnKemTOK6GYN7p6btoGaTuGMTAMI+uTDX2vIsIunLCJgSGODPGEk7HX/TDQJz1Yz8jGeKIZiTYS2kgXe5ootBHaqODVEjVxJIJLTsMOzb1lCJiYDZpHrBlxUb15xNikO0uA1SajidHorN8ArUzpKSYMzA1iyn2ZOaYkm8vRLUyZ7CqDzjQdJnSyqYFN/jh6L7E2M2Dpe5oZEDM7FVFdl0pI52em+pbDBmMI6YbWFB/SWFwSA1pjaZzT3w5ca3Bdg2ucukUcNfhWLQTbSy3tkadde5orLd26oeka2uOO1drTrjzdsWd1+Yima+hWDe2xx3mP9R6cT/orUl6y9F5uO3VIGaapjBtYgtdsAVjrrixlehK1NtzmsGaLT3MKtPZOxbUEonZZqcfQWccuwoktzW/lHLUkMiznn10geG5R49Ik/LQGrguwNmeZktd0I+1aTuwXfU55bdmpS2Ap67Qkbsjl8v12mdPma7KJWCmXXtBVTRTYHni5HqWGv67LJFNaqK8FxGJpwTS4RuhWkfV6xTAOjGHgRE7YjCNDDGzGnk3cJO5r0H1GBhnYuJHAQDAjg+3xQfDB0YzQjWOKRxhwQTUZIgZjAhHDiMEFg7WzvM+IBWsR4zCNWhxKftcGjdLegBlAUvR1MyawCIoCUyT0yDStCTODNrV3Tj8yFm04MqNJ+c1qPWYOyGvNLDLMfSkmfZmQQlalYyMTOJoo0zkzpgclq7icWsSgBhcaGcQUgYsdvtUMw641NCnDsG8Tl3TU4JNpe3epY5WAq728olk1+M5zdNSwWrcKYkctvkuiQOcxqihLIkGmFC6jyYYWZeqQGaxKkWDY4pi2DSlyufmabQvBUkwY02DJPPkc/omkGys/UkFLYJW/u2N7zO2aN3YtUm9kjqoxZMkqsLz3ReaynVTaqO7gSi9AtzhwFT2i7BzVqZ0f/Dxc1hLtAqZ6hXJeKkGq9gdb4mZKgKtXQuV7LUXxWOLgSspAs48zPUv8kO9T17l+l/QeOayQmlfrbO8AYyzOexyeJg6MMrIKDZugYsNNHNhEzyAjAyMbOzAyMJrAYDfYADY6fA/tGHEpbYkbDUY8SJ9M1tURGUZERowkdI6q6xEB64KyUS5ovpFWMKOoHHJAOa9BYFTjCAJTgF0wasiR2shEUWu//K1GMKQUL45ZPmeZsydnsskScTLQUFGZycDlEgdoYDJaSv0pOypLNJig7WzEpIgaJpnNgxGroE2yXkwpZBSwFLS8cxqdvXEJpNRhuD1qaI48rlVji/a4nYBrddzSHXnao4bV8RrXNfjGsTpqaNsW13h847Gt1SDOLjsNM1kJbosDHdm6b/bP8luc0RwYt9RBbccZnB2H3SnObL5XLqedVz/dDFyTiFC2M1tv9fey3y/NVWeB0HnmlF33KO+/NG53jeX6mfvqWc9P5cI2wmyZRHHixugWB6607EwOhlviqX2glWkJgM7qPGcB01nP3HXPJRY7g0ievMr9pYFQ1i+D3673qxc9Gax2cU5U5cv9fYuA+v5lnWuLRZgmUyMWaz0OoaWlNYNqsmRgM7YMEtjEkU3wDKie68Rupv2NazDRYkKL7S3NYLChxYZGgSuotaBERwwjJo5gekQGjAREgjrQisOIw7qAcUmc2IzYGDQNy4iaoAfB9JJ+A8FgYs5GDDHKLLZLOcamPCKpEUzMnA4KJCW4Y8jiRZMD/aV+bloDCbSss+DUJD7He5w4q9TOJoGqSW2dbFGm41accliieitrzMRdWa/hmNqmVd1V4/CrFr+y+Naqrmrd4JIfVneppek8zcqxOm5o1g3N2rNeH+Ea1X+1qwbnWgUrrOoNjZm5WwvijJqwmzks03YerG2wqfVNs1ivBK05GsZs/u5ObbMo0G6BlLavLZ5T9f2l8XLa92CmG1EvlPffNZ/tWmzuoyXG6Kx5rQTgLZWE2RrfMz1tgaug3CnygLYLx8uPWOtmWPgNyyunm7HyWaIaeEod1BKo1SLDJbBcGjxLx8rryjYqn7XrGbto14qu3Pa1fT4v+YTHG49PVgSr1UA0gdGM9HJMMApW1zhhNAOjGTlxPUEuI2GD64+xwxEmnmDH6/o7bLBhQxyvIWGEMMK4wYYBddQaCXFgjAHCiPU5BEXU3ww61UVwMqhfWOyxMSoHMzBxXhJIx0GCYCauTFQcmJMLWpBBZs5oAKItgEvHvfECTeKukvjMePR3a5RTcYCJWFziajMLpw1tRYHJpH2bgMyJGswYDM5qjD/nNIyX+mCpGM+3DU2bwGrV4tcO1znlqFYalqk5algfN/i2wSd/K9+lezUNWKe6zpzSOPcxl7tBBpUyOkUz7W+L97bB5nSXNBMHNosJZ0CbsxbPXFsZl7AEwj0BsZYXcfUCbWmRt+Res0RL4FYvEssyS2N/SRJTU8kAFP6CW/cqj5vquvp9lq6/Cbq1gSvJ9rc4rAxate4Gtj/wEnDlMrtWQeXkXRsdPFFUs+5nKU3LutW/67rt2l/6ncntOF9ztmWdl2gXINZltt7XnHqshhHyGOsw1uN8mwwyAt61jHZgtCOdHQn0SNxghwb6BhNOMOEadtNgwwZCj/QrYhiJMSBDr8dCQMJIDCMS0756HYNEjbwhKlaUqE7MIgGRHheVG7Otcm2Zk5n8vkISJ6aAt2ZgivqBFwWxDFxeMDGDjUxtbTxIo0Blkt+ScWC9AhdOQU1cgQcGkgBWh4xYFQGalKsscVgaUd+kNDDNZPHpvKPxCbicp0tiPt8qx6R6LUeXrABdq9EuuuM2cVaasDFzbMZZMImTMY6YlHOZo5FkvLMdqaI5BSol2JQAtL120nsrd+W2uKwyvmCgNLSo/9aDKQ/EhYFTj89ybqqlDqU0Bc4eQ+eZs2paGmvlXFlyf+XCvCxTglA5D+2a/2pJ0bQILetw4xPnLQ5cC1vZ0GXHgO2VQv0xMtXcTHndrsn+PO1/njK7WPpdosTz0EX6xkXf76xVVH2+BK2lVd8SSOf7CGhOJwGchhayTsM8OU90Ade0jH4kuJHWBgIbRFrMaGFjIXQQG+zGQ9hgxp64aQkplUoYNsRx1Mgco3JhClwBGQcFrhiw8YQoA1YGJA4KajKCDLjYg4xY0ejyJnNWQ5yBKxgkRWw32TquAXpR5+lkQMEQVXwYLVMMphK4PJgGTGMw3mCS7b9JEdDxBmPz+i4Bfo5ykRJrWqshmKyxGJN8sFAw877BO58MMRxtY3HW471n1fpJJ9WtkgFGm7itLkVzbxuaVZvAyoJ3ZG9msclXjMkZYYsDmrvN7F+VDTDma7YjtJc+WaWFX5k/azvq+2n/qzlBZAbS06BV4lJWyy72+XoslHNUObaWJBQ17eLU6nMZhMrz5bOW7CPqLVPJcZV1Lu+x9L677r2r3A3QrQ1cJZViQs/pgLF5yw2eoyvUVFvX5WvqldJ56lPSeT5e2SHqjlp30m+QY99Up4uAMuzmAMtBlK2W9l27C5in42mmiKZYyXms9bReaDtBmkhoB6JtwYwQOsywhthD2ED/OIwbGHvGYUMIIyFEhmFkHAMhRPqgIkITAmEcYRwhDKoLCxuM9BgZMGOPjRusDDjZYMcUEzFF3DAxYCTipcfGACESezRE1Aj0kvYF6ZU7MylYrkTRyO7JmVnzYJqUT4okIjSY1ih4NWBWCmLWp6C1Xg0q1ITdJQAzNH4GJO+cOhFb5bi8VVBrmpbWNljrsN7ReE/jLY2ztI3H+hbXNKzXDu81rJdpWs2dZdJgLKIBl6AStwAnG1Rsg5Z+9lkXVVv4jVvgNYv1ap+q8pllqhJhG/Bq5+PZGOMmaUmXtWuc132+3F8Cqvy7XqAvLfx2Xb8EMCVgZWvOmhEYq/qWc+zSvXe92w3QrQ9ctcgqD5T8N+kZTl3jOd2gS52pnmjrVdMS57Zv4l/6iCWg5mcuiQrL3/sAZWlldt6OUsuzd3Fh9X1rkequOi6VqwfVvucuiBwMkK0RJRkcKNfQgI3g1/hmrXop6WE8SiLBntDPwHUywjBGxijYEAijaMqTYUDCAGFIeqzr2Dhi4oAdr+Gi6rhc3ODiiYaIij1eTlRsKAGXxYgyYsKoOrBRNIzUkMBrUJw1KXSUCJryPaDOwsYm4AI6BS0azVllfAKvlcG2CljBNxjr1ejBGqxV511n7eTIq6DkcdaqSNB5Wm/w1tJ4p5mtncV7T+s83ivQeWeTpaHFug4xljFxbZnD04iHVjkrY7YARbCUJue1j1T5dUtObLbwq3NjuS1QK6/ZtiIsrQC3z2+LEGcz91z2tJdWupPJvdCc5r62jBQW+vJZwLVL8lL/riU19Ryy3aSn56FyXsv1zX5yJSNQ6q+W3Ftqji1W15XlbsJW4NYGrqXVQblfynDrFchSo+9aidTPXGKFS9qllFy65z6Q2NVB61XN0jW7qAaUfaujXe9fXrvk91GerwfVLnFh/a7lIJc9W+biUpxKE1AdTwSsS6xK1AnbjDhajPcQB4g9wauoL8SIBIMZBRvVSnAYFcDsqMBlQq9GHfFEQSsO2HGFjwNWVITo4/UEbj1NPMHJiI1j4sgGnIx42cCYjDj6iAxopI0EXGTgimaKf2hFEigkkWCHAlVrcZ3VY43Bdg7TWGgsg+0wtsEYp1xXAi7vXEr74TBWjS2sU0BzjafzFu80fFPrlRNz3tNaN+u8TI6iYQkocGXQmW3vhFLUJ1tnso+VnQwuMmDUAFEDT+aE4k7gmjmr0rBi0SqwKH9K7yUzqBnYNog7L+0CiLKv76J9QFX/Lo2o6jG+9PxdXJbsKbNrXjhrTqtBcancBenWBq5MJViVyYpK4Cr9k0ruLF+fG9SxHWXUVr/P+kD1uV3c1z4xZW0BWXbOfaBVmr+fl+taMj5ZAt56wNXPWALXWiRS1n0XtyXFtaWIpdY9Lj275hYj6rgqjrFxBKOCpcZ2WJuEVa1mwBIRGhFOAgwRNgHsKMQYVMQ4qojQhs1kSm9iTxMex4UeJwNeNrj4uAJayL8HXNR0Kg7luFo2tGywMSCDEPsMXAKjWhVKsDBaNJ9XRKO7OwWvBFy04DqHWTGJCvEdwbUE29KbFdgWYxzegzEZqFqMc8pxJSDSsBeO1ntaa2iswTmPt5IivvvpE4QJlGDWG9lpgjfVEr/mfPTTzEFpS+Cau8/cGbZzk53mkHKki23gmu+3HJIJMsdVOipP9xE3iy0lgdYO5Fq0MVga60uc0T4qAamWbtT79Xiq573aUGIJkMp6nwdU6nm3rG+m0lCungNOG3+em25t4MqNsm91APPHzCLD3HjlRL/EFcCcAC5T7gjn/bDl/r4VS/l3l/6qNlcvqTQ/3cVVnTXALkIl2NRGFbXytuSecuihclFx1jPyfv5uOXpHuVDJRg1JP0RMf/O5EcQZRu8JzmETiE3RLExynTKaN8pa6BwIQkwskBUVNbp4HZfAy8UTNNfXSDOe4MP1qZxPIkUrI042eBlxMtLEHo/qxXzoZw4rgBlEOUcMMkT1+Qom5fEyYAy2sbACGrCdwa4t0XlG6wnuiNE2jKbBm0uTqNAZwbrEfVnlsEiWmVZDYoA12BSJNyCpb2gKxRFJ3V4/sksfIWIms/TaXDwDzax72u5sZYilGVi2oeq0oYXd2s+WgqcD3S6JGOeBlgFtDvCVxZWa8kRyn6sXaUtSiH20tOCj+r1rDCwBUg1K5SIx0z4R3Vl1rZ9fqlrKeTM/p7birlML7FuoPm2Bax9YZdrFTsfqmnIlUJavdUyW0x2u5iqWqF5t7ev8S5xJee4i994HWuehJS6nbtNyW2rrUiy71KlLWqr70rlywOatBu4SRGFaMavORf9OEdeZJ9xpIWl06hTjEROxpsGaDh8dLvZJ9Neieb5GmrDCx5WKBelxcaU6Lka8JK4MBS4nG5wMNLHHiMZIJIIZ4xTGUMaooBUMKTy7Glc0BulAvIHGQdsQbMNgWka3xqipIWIugXFgrAYUtj6JG53qysxskp5dS2Ka6WKCbGFbW0QBL9kCb+aYSsOHbau9JeAqgaeMSlFybEvive1zs6HHaZ1WWfOcsoTpftum8Am0JNWjjGxSUr3YMpw/A309BvdJT+aXPD22l8Bg17VnbVR/6+M16JVjPtfhLKAsx2VZ16ctcJUT4nmBK3/8LE4sy1GUySuNGrjyc2vgY+H5JdiVq6J6v67r0j327e87ttQuSx32LKqfXYNW5nJydIhcpuS6Sg/60qhliRvdBbT1oJh8oNgeILmsL64p2lesVTP0WmSb6m7iXJ2yzxirZvjeaKChho1GtpOUSEN6HJpx2UtKWElQ4GKYrmniyWTU0Zpep3ABJ6NOt4JG5IiSEhZ7bM5r5AVaQ7CO0XaMHDGaFmNbhBXReMQ0CEcIDkkBcmPRuLbqgBkQSrgJzPHQZ5jQTc9mbmUW9YXkQ7Vt+Tf7W22nyZxFfiXY7QOubVq+fhu05v3SMTnrvqKcFi9OXEM9QS9xNhTna7pRQFu6dmms7gKjegEZOT1eQ3Wuvi7fv1wcZiqvLcd3+bsE3F1j+SbQ59YGrl20tGrIIiTY/hgZxJY+bHlNPeGW1jWO7Y9G8beWL1Oc32VVU3aSetVTGzPcKO0DyKXn1KAqFGBV7cd8g2JpmKMjpFQgk4iv7NSlCLY2nqkHV35E1kmWlqPloKnLl3rEfP0SWO5YDWsVPAovinzCgArXWoJZTVqXYIZpSoz05PgOQo8wqFBKRjCDTrHCMs8gpWkBRRp6jYY+pJxTQ0qamIPEDnTT3cwEWzMvVE7zGRxm3kRhKOKKa2NqmnyN7mXH4FJvNYvfZv3TUkQLbdPTA6HkivITa91ZfY/MsZXX7zLOKI9vgZWwvb9rMVjunzVB3wjtA6UlsCn7dv0O5TUl6OQxG9hepAOnmrrmmrbXH2dbCC6df9paFeZJMJtr1o5yNzK57+sM9YqrFEfVk995RYFl2X0gsbT/jaClOuwaROUgyLH4pBwted9CtPqeYwKw4tROrrVs07hw2/xNAtuuD7b4C6ddFrK4pzTOWQLJ8v3z/QWiS5NpYssESzSazjJ7J41EPH4CgoCfwsBGPCHxIo0ZGBIManSLGWBKXmMW1Sk3k9PQayqPnH9KM/5mv6hZ90QCqnzfWSNUAqLeO6IRA22CrBLg5s5viRPE5bxX2/H9MkyXhhPbES2WP3pu8qyHckjxYU6bpM9n6nsqQNUcmGYnFtR1QnKWzHqi3wdcZbXr8X6j4LUkFbkoaJXHdr1PLdoP1e8l4CoXz/vmogxgS4u+EuTy/tNWVNilrRYX7QKuJXHUWeLFXRMYLCtJ62eUooZQXFPWaakz1MeeSMA6C9jL4/UgXhSlShooSyMj38SlAeXAJsTJ4LHUbiUwlb+XBrNleUDmvlCCGGx/t/KZtdg2/y0Hs0k6Gatiw7x6t4kPA8GamH77acoe8CkP70jAT1P8SD8BiFZFqv25QjNwmUk8lzP7jgWIZeu4EU/mZmaN1DZwzQA2C97ysdOc2jZwleLAXJ/AbGxRJmvMeqjzzuwZsreBC/ZxXds0iwrL/SjpfksTf93Xyz6yRLtE3WdXbf+5Xf18aeEIy+9Sv1dZrgarJeCr54Dz0JKx1RKIlVKPG6RbG7ieARyn/bLzlL5b+bdnu3O1LBsNXITyhy6t/XYBZwl6pRhric1+IkFqF9UcRt25l4CznszzIJjO7RvxRWPlazxzu5TcUS6+1I41R1a2dz1gQ1W2fIcsqozFPZaUyEsDMQfENTA4vwW+xmbuaDv705yHd6RlSPl5A542WTfm2589S2QfKAUHV4CVmziuzJXlK1SwuR13YnbVnTVBpX1ebW5R3kubu855tQ1cJXhKKn9eynzmLNLL/mH77jH7jumvDH6zuHGrmy5N0vW5/ZWc/9qF/YtQ2d9rqutZDq8lDiyDWg1k+fgSuO0Cx7IOZ1Ep9WrYHr91vc57zx10oSZ+5zvfyUtf+lIuX77MXXfdxQ/8wA/wyCOPbJV5+ctfnuKhzdsb3/jGrTJf+MIXeO1rX8vR0RF33XUXb33rWxnHOn7IOegKcBtwGThiSuy3NZllHVQWK7ZM4XJOGWgs0RILX1O9Kt/VCWJVvjy+a6VUDqCl8nWZfe+RJ+dyK4/DaTCo33HpuQKnX3iJ0g12ve+uS2sOuX6P8vi+NgrVNqIglLecyLE8H6rzAxoIdwP0BjYGTuZNTgzxxBI2jmFs2ISOk9hxIiuus+KEFRu6ndtJKqPbmutpu8bRzk3Pr6f967LiuqzoY0MfGvrY0kvLRtqtZ/W09LRJTzZvczbh+e98vt153bz5Qnx4WoS4zevVsQK3LRFn4evpdCOnN19dk8STYohiUpZps8xd7RKTFd12Z9+vz+/iaHaN//o59bGla+o5ZqleS3PQvut3ldn3PmV9c8zNDlijc/JR2l8xS8jaYrtBuhDH9eEPf5iHHnqIl770pYzjyE//9E/z4IMP8pnPfIbj4+Op3Otf/3p+4Rd+Yfp9dHQ07YcQeO1rX8s999zD7//+7/PFL36RH/uxH6NpGv7xP/7HF6v9JRS0xmobijKGGaDyqqbmcuqOuiRS3AcMUpVZWolRndtHu8Ax/13iApauq0VfS+IMKY6d5z1PDZBdo2LXCyQ2U2DKOcU5Lt+1Gi1BtuYgM0dbcl+G0yKWJa43V3Vpcsn3KQF0C1SNBpFNoutghegsjtlAIRpLYCRitkSFbD1qrlQ2Jc9GBuWEPeAJohP3KC5FfLBz/VM9jYkT5xUxBOPSHSzZYCPzVyWk7CJJ9ckAlbmsyWKv2JfpfZb1VKUYNL9ntvirhaa7yFB28lzHpMPSm88VP2udtW+81eN86dpdC+KlMbrvPnXfWxon5wWnfcN0H1jGhTIllRKLFOiZNXMbRE4bgghMAoEboAsB12//9m9v/X73u9/NXXfdxcc+9jFe9rKXTcePjo645557Fu/xH//jf+Qzn/kMH/jAB7j77rv5S3/pL/GP/tE/4m1vexs/93M/R9teAIbvQLmugbQCBh5n/liBbTnqEjdRDu663Fms7C6gWBIH5vOx2M/Xn8X1lfXYNciW3uGilMG9ju1Yg1W5Altctp2DygGRJ/+zgCu33y7uq7xvDVz1pFXqwEor0X31XKpbrTsr3ydz9Q5C4wiNwzhBxWvKk4xJD5b1T3GapIsJfBJzbfsdZU5koJmSQW5xjGVdPQqm1hC9ZXC+EO5lyImTViq79WYN0RLlupXApdVwlKGUTkes2Nbl5feem3jWtAHn7lYCLIaxKK89SxJSj7V9zy3Hdrkozufg9DiMC8d2jdWlvlePkVois8QN1gC2JMU5i86aCy0KWKu0XWbbKbmUaJSSlhukm9JxffWrXwXgjjvu2Dr+y7/8y/ybf/NvuOeee/i+7/s+fuZnfmbiuh5++GFe9KIXcffdd0/lX/WqV/GmN72JT3/603znd37nqedsNhs2m830+2tf+xoA5ihi1lEdMXOHzUn5cnSFkmqrwxpEllYwS7Tr/BKQlaAl1bml4/ueVz9jaQDUA2mp7Dmx5dTztwbAWaOkfHA9c4BaGrr5dKyKnl48z7db4hzLupaPyhxW+Y3z85YAc6mdas6rfr26bnmbgMtMYCkehqYhWstofLK5C9PUXgJXOelP4rQk8pqs4oJJoGW2zZrLySmDd86cHLVewVqiM+qcbCyObCmoIBYTJ7bczDP0jBNoZUfg5FgsbgKimgyiOsGqOZHcvRKnVLf9rr5r6o+xWOn571nc174xvmuc71rI1uV2/V6qb67nkni9NuFfMoHfN0T39et9YsS67vXxUj1TWvhmvXJeGJeSsQvSDQNXjJGf+Imf4Hu/93t54QtfOB3/0R/9UZ797Gdz33338clPfpK3ve1tPPLII/zGb/wGAI8++ugWaAHT70cffXTxWe985zv5+Z//+VPHbROxjRCMUSQvoxjvmvRgeYLa1WnP24GXJtpyFbYEJKYqU15X32fpmefp+OflvOqJYVcbRJhDBezq2fuQsUSoPEuZ3e1ff7PzvNMSQO0SB5fX5OP1wmbX4IXTr1oCVzlB5PtFQzQOHERriSYbnksqYlOzmMlsGwxBksisnMxr/cOSPw5FXWx1Lt0/uPxaCYyMSTydmY7WVJqYlylBNM5f4R+1oytIcomQ7ZvOf8s2Pw8XdJ6xUC9qlp5Vl6+ftYsrXwKppW9w1lhfqnMNREvAs9Rmu8oslT/P+V31XRKpw7ZEw1XH4clxQH7ooYf41Kc+xUc+8pGt4294wxum/Re96EXce++9vOIVr+Bzn/scz3ve827oWW9/+9v5qZ/6qen31772Nb7t275NrbPMSGxaxIuubKf8P8UNcocp9RylCKlW2i91jLyfV+m1xdrSfvms+vxFOIfy2C7g2rWSW+LClgZP2TGXVl71JLl1sLyobLjca031O5c3IPb0QKm5I2GbMyrFhVTHM+WFDGzrtEpArO8P26K/JZAq71XfM//Or5ljJbqiPl7vERtNghmyVWJuuvw3FPuliLasQ32+nqzy++S+X+p68zsHrVN0jugsAcGLZkYe2eb7ato2ptjmDiduafuCs2nfRMrCXzgbtMrn5+tK4KrPLT2z7gdn0b554KyxXz5n6dsucV31+Rr0y3Yt+9ESwNXXsHCuJF/cqxZXl+PKsD2+vtkc15vf/Gbe97738Xu/93t867d+696y999/PwCf/exned7znsc999zDf/7P/3mrzJ/8yZ8A7NSLdV1H13WnjrvkchmxjNYhzuzWF9UNnlefdVinpU66NLGXxh5U5c+iejVWT8y7qD5X/zYLx8tnnZdjyffYWZclZGfhd9lYZuEYu9u8Lrp0vrjN4r2WRHpS/S45o320a0W+S9xS6s3KrZxoRrbNhusJp27mGpSW+uxSPesxkYGv1A2muok3jNaTjTjMJC6sIw1SANV2yKVF2tefao5qH6js+n0e++j6G9fPLe990bG4ROflrHaNx3112QXqSyC/JC2o+28ut0RLHFX5u3T6Ly1y84KsjJBTIs5NWBVeyBxeRHjzm9/Me97zHj74wQ/ynOc858xrPvGJTwBw7733AvDAAw/wR3/0R3zpS1+ayrz//e/nypUrvOAFL7hIdSa7KkvUYKmldddU6R3b0iRRf9xdHeq84rez6KKruIvSPnHpRa5b4tIuRDf5oru+IZweiPu286zmLzKB7ZoEyv61i6uvLWFrq9jSVL88Vm9Lpsr7JrRd9YugpuIGiRYRm6z65vQhs5GFbmfN7XslEXUblvU8i8zCdhbt64LfiLH3zaaz5qxddF7ub9cz9/anql6l7iurdW6QLsRxPfTQQ/zKr/wK733ve7l8+fKkk7rttttYr9d87nOf41d+5Vf4a3/tr/GMZzyDT37yk/zkT/4kL3vZy3jxi18MwIMPPsgLXvAC/tbf+lu8613v4tFHH+Uf/sN/yEMPPbTIVe2vfDYIHhmN25ZM1Qv8pdX3PtY6l8ubXTi2a9AsiQf3DWK751yu565z5xVF7qvzktht7/VJxLfFCpWj/6wRUNx8VxsuMWpnTX71N8/iYFv8lWq/3Gqu7KIT2pJoLNcDZk5nrN6l5HqWuCvhtOL9olS2Qz1RxaocIGgQXycCZm7KJWMNtQosbmAsUn+wJa6oFPmWfbyWSNS/L0r1c/L9ljj5uhzVNXC6T+7r7kvfud6vy5bPKaUkdRssjVFZ+LtLx1u39ZLEJte15oJLKiVX5cKsDHydp4tSlfPN4rh+6Zd+ia9+9au8/OUv59577522X/u1XwOgbVs+8IEP8OCDD/L85z+ft7zlLfzQD/0Qv/mbvzndwznH+973PpxzPPDAA/zNv/k3+bEf+7Etv6/zVz67JSaOa9cEuLQyrmnXam8fONVldoHCLjrvavE8ddhXtxuhGrAvdNETTEvfpeZw9pV9op65r+zSKn4fJ1YaUuzal+LY0gLsPLTvmnNwodt5rLZJu4cWnrNgzcLDC3FEux5wQ/3wBp6z69n1/lnXfSPoyXz2RWipj5cLkhq8buKbXojjkjMSz3zbt30bH/7wh8+8z7Of/Wx+67d+6yKPXqS5X8npg2fReSem8wLLjZ4/7/131XcXSNWr6n3XPWGikptdGt8A1ZzSn8UBDcvizaUy9f55rrtZ2gX8U3vuBi4tIhO4TftLq//6/rtuuPTIpW/7RLRH/cx9+xftZ+fti7sWu7eiCPOsvnrWYuCcdEvGKswAeu1rjxExbOi53g+MmwYeA74OnKBOyRr39PSqOHfGpRXvLnltvq7e9q0c9nFhF/l4S6v6+vql+9ZiyLOemcVStZXQ1r6gJvFZyVKysUtL/NxI+cFZhqBJDrFmdtgtV2blqmxXO5bl699ZKeyrMpbl1V/tyLzUNvVrlmK8+rXr+7piy6ldyhiaSyLrUO3fCOV3zs+q37k85rbPGxOxJmc8Pm1+MQ+tOVPxpA+TygAHttt1QUS5F9SXuNrz0FnP2bd/MwuIur/uEhXuGo9LouNd4uRd+qWyv+a6n2VVKMU19X55n3JOzPqqrHsF1cu26W+ZqTz1uZPH1B/3LIZoiW5J4HrssccA+P++7bue5Joc6EAHOtCBboYee+wxbrvttgtdY+RG4O5JphgjjzzyCC94wQv4X//rf3HlypUnu0p/5ij7uh3aZ5kO7bOfDu1zNh3aaD+d1T4iwmOPPcZ9992HtRdTeN2SHJe1lm/5lm8B4MqVK4dOs4cO7bOfDu2znw7tczYd2mg/7Wufi3Jamb6RtjoHOtCBDnSgAz3hdACuAx3oQAc60C1FtyxwdV3HO97xjgs7LT9d6NA+++nQPvvp0D5n06GN9tM3sn1uSeOMAx3oQAc60NOXblmO60AHOtCBDvT0pANwHehABzrQgW4pOgDXgQ50oAMd6JaiA3Ad6EAHOtCBbim6JYHrF3/xF/lzf+7PsVqtuP/++08lpny60M/93M9hjNnanv/850/nT05OeOihh3jGM57BpUuX+KEf+qEpaedTlX7v936P7/u+7+O+++7DGMO///f/fuu8iPCzP/uz3HvvvazXa175ylfyx3/8x1tl/vRP/5TXve51XLlyhatXr/J3/+7f5etf//o38S2+cXRW+/ztv/23T/WpV7/61Vtlnqrt8853vpOXvvSlXL58mbvuuosf+IEf4JFHHtkqc54x9YUvfIHXvva1HB0dcdddd/HWt76VcRx5KtB52ujlL3/5qT70xje+cavMzbbRLQdcv/Zrv8ZP/dRP8Y53vIP/+l//Ky95yUt41atetZWY8ulEf/Ev/kW++MUvTttHPvKR6dxP/uRP8pu/+Zv8+q//Oh/+8If5v//3//KDP/iDT2Jtv/H0+OOP85KXvIRf/MVfXDz/rne9i3/+z/85//Jf/ks++tGPcnx8zKte9SpOTk6mMq973ev49Kc/zfvf//4p0/cb3vCGb9YrfEPprPYBePWrX73Vp371V3916/xTtX0+/OEP89BDD/EHf/AHvP/972cYBh588EEef/zxqcxZYyqEwGtf+1r6vuf3f//3+df/+l/z7ne/m5/92Z99Ml7pCafztBHA61//+q0+9K53vWs694S0kdxi9D3f8z3y0EMPTb9DCHLffffJO9/5ziexVk8OveMd75CXvOQli+e+8pWvSNM08uu//uvTsf/23/6bAPLwww9/k2r45BIg73nPe6bfMUa555575J/+0386HfvKV74iXdfJr/7qr4qIyGc+8xkB5L/8l/8ylfkP/+E/iDFG/s//+T/ftLp/M6huHxGRH//xH5fv//7v33nN06l9vvSlLwkgH/7wh0XkfGPqt37rt8RaK48++uhU5pd+6ZfkypUrstlsvrkv8E2guo1ERP7qX/2r8vf//t/fec0T0Ua3FMfV9z0f+9jHeOUrXzkds9byyle+kocffvhJrNmTR3/8x3/Mfffdx3Of+1xe97rX8YUvfAGAj33sYwzDsNVWz3/+83nWs571tG2rz3/+8zz66KNbbXLbbbdx//33T23y8MMPc/XqVf7yX/7LU5lXvvKVWGv56Ec/+k2v85NBH/rQh7jrrrv4ju/4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "heat_map = superimpose_anomaly_map(anomaly_map=anomaly_map, image=image, normalize=True)\n", + "plt.imshow(heat_map)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "`predictions` also contains prediction scores and labels.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(0.6486) tensor(True)\n" + ] + } + ], + "source": [ + "pred_score = predictions[\"pred_scores\"][0]\n", + "pred_labels = predictions[\"pred_labels\"][0]\n", + "print(pred_score, pred_labels)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "The last part of the predictions is the mask that is predicted by the model. This is a boolean mask containing True/False for the abnormal/normal pixels, respectively.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAGiCAYAAAC/NyLhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABExUlEQVR4nO3deXwTdf4/8NfkaHqnlN5Aodz3DaUgCFKhgAqCqyDKsXxhwaKrRXRxXZHVnyh44oKsyooHeIMIKspVECgFqggUKBQKpdCWozSld47P7w8kGig9k0wmeT0fjzweZOaTyTsf0r46M5/5jCSEECAiIlIIldwFEBER1QWDi4iIFIXBRUREisLgIiIiRWFwERGRojC4iIhIURhcRESkKAwuIiJSFAYXEREpCoOLiIgURbbgWrp0KVq0aAFvb2/ExsZi7969cpVCREQKIktwff7550hKSsL8+fPxyy+/oFu3bhg+fDguXLggRzlERKQgkhyT7MbGxqJPnz74z3/+AwCwWCxo1qwZHn30UfzjH/9wdjlERKQgGme/YWVlJdLS0jBv3jzrMpVKhfj4eKSkpFT5moqKClRUVFifWywWFBQUoHHjxpAkyeE1ExGRfQkhcPXqVURFRUGlqtvBP6cH16VLl2A2mxEeHm6zPDw8HMeOHavyNQsXLsSCBQucUR4RETnR2bNn0bRp0zq9xunBVR/z5s1DUlKS9bnBYEB0dDRuw0hooJWxMiIiqg8TjNiJ7xEQEFDn1zo9uEJCQqBWq5Gfn2+zPD8/HxEREVW+RqfTQafT3bRcAy00EoOLiEhxfh9dUZ/TPU4fVejl5YVevXphy5Yt1mUWiwVbtmxBXFycs8shIiKFkeVQYVJSEiZPnozevXujb9++ePPNN1FSUoKpU6fKUQ4RESmILMH1wAMP4OLFi3juueeQl5eH7t27Y+PGjTcN2CAiIrqRLNdxNVRRURH0ej0GYzTPcRERKZBJGJGMdTAYDAgMDKzTazlXIRERKQqDi4iIFIXBRUREisLgIiIiRWFwERGRojC4iIhIURhcRESkKAwuIiJSFAYXEREpCoOLiIgUhcFFRESKwuAiIiJFYXAREZGiMLiIiEhRGFxERKQoDC4iIlIUBhcRESkKg4uIiBSFwUVERIrC4CIiIkVhcBERkaIwuIiISFEYXEREpCgMLiIiUhQGFxERKQqDi4iIFIXBRUREisLgIiIiRWFwERGRojC4iIhIURhcRESkKAwuIiJSFAYXEREpCoOLiIgUhcFFRESKwuAiIiJFYXAREZGiMLiIiEhRGFxERKQoDC4iIlIUBhcRESkKg4uIiBSFwUVERIrC4CIiIkVhcBERkaIwuIiISFEYXEREpCgMLiIiUhQGFxERKQqDi4iIFIXBRUREisLgIiIiRWFwERGRojC4iIhIURhcRESkKAwuIiJSFAYXEREpCoOLiIgUhcFFRESKwuAiIiJFYXAREZGi2D24nn/+eUiSZPNo3769dX15eTkSExPRuHFj+Pv7Y9y4ccjPz7d3GURE5KYcssfVqVMn5ObmWh87d+60rnviiSewfv16fPnll9i+fTvOnz+PsWPHOqIMIiJyQxqHbFSjQURExE3LDQYDVqxYgdWrV+OOO+4AAHzwwQfo0KED9uzZg379+jmiHCIiciMO2eM6ceIEoqKi0LJlS0ycOBHZ2dkAgLS0NBiNRsTHx1vbtm/fHtHR0UhJSXFEKURE5GbsvscVGxuLlStXol27dsjNzcWCBQswcOBAHD58GHl5efDy8kJQUJDNa8LDw5GXl3fLbVZUVKCiosL6vKioyN5lExGRQtg9uEaMGGH9d9euXREbG4vmzZvjiy++gI+PT722uXDhQixYsMBeJRIRkYI5fDh8UFAQ2rZti8zMTERERKCyshKFhYU2bfLz86s8J3bdvHnzYDAYrI+zZ886uGoiInJVDg+u4uJinDx5EpGRkejVqxe0Wi22bNliXZ+RkYHs7GzExcXdchs6nQ6BgYE2DyIi8kx2P1T45JNP4u6770bz5s1x/vx5zJ8/H2q1GhMmTIBer8e0adOQlJSE4OBgBAYG4tFHH0VcXBxHFBIRUa3YPbhycnIwYcIEXL58GaGhobjtttuwZ88ehIaGAgDeeOMNqFQqjBs3DhUVFRg+fDiWLVtm7zKIiMhNSUIIIXcRdVVUVAS9Xo/BGA2NpJW7HCIiqiOTMCIZ62AwGOp8+odzFRIRkaIwuIiISFEYXEREpCgOmauQiKi+pF6dYPH+49y1NvsSTGdzZKyIXA2Di4hchyRh7CfbMEN/3rqozUez0PIfDC76Aw8VEpFLqBzeG6G79Bjjf8Jm+Qv3fgbD960hab1kqoxcDYOLiFxCWYgGn7RIRpjaz2b5+IAreLfjJyh8oCc0LVvIUxy5FAYXEbm8rl7e2LNoOc6NipK7FHIBDC4iIlIUBhcRuYTA0+Vo9/MkHDeWyF0KuTiOKiQilyDtOoAWuyWsPdgdU4MOVN3G7NyayDUxuIjIdQiBHcNaYYemXZWrIy4fgMXJJZHrYXARkUsx5ebJXQK5OJ7jIiIiRWFwERGRojC4iIhIUXiOi4jod5JGA9GzA4T61n/Tay4WwZyZ5cSq6EYMLiKi36mbRuHDr5cj5IZpp/6sw66HEf0XJxZFN+GhQiLyaCpvbxRvbIlGu4IR9fll6FXe1bZ/p+cqaJMjoQ4Pc1KFdCPucRGRR9E0iUJh/2bQbzoGhASjoF84PurwGtpqr+9lqat9/WAfC3q3XovbRz+BsD3BsBw85viiyQb3uIjIo1y5LRo73nwH5rbROHtvJPYsWv6n0Kodf5U30p5/B8enBjmmSKoW97iIyOOoJRUmfvQDmmivyF0K1QP3uIjII00KvIShPg2b/DC6cy4uzoqDpOE+gDMxuIjIo0gWgSvmUphFw2c93NZpHZY/tQSqxsEMLydicBGRRwlc/xseGjQBH1+NsMv2enip8FzKD8if0dcu26OaMbiIyKNYysthOp2NcovWLtvTSmr081YjeGwOcp7pb5dtUvUYXEREdrCl47eYOfE7QJLkLsXtMbiIiEhRGFxE5HmEwPuv3YOOux+y62bj/Y4i+4vOEHHd7LpdssXgIiKP1HhFCnw3BmB5YRNUCKNdttnByxdHB3yM3Nv8oO7Qxi7bpJsxuIjIYzV+PwXf9muF3yrtu91DTyyD/3sF9t0oWTG4iMijCSEcsl2V5JjtyiHzzX7w2xEKvx2hkHp0krscBhcReS5NyxYovLsTglR23uUC0M4/HyXjYqEO0tt9287Wsss5rGm9CWtab4KxUfWz5zsDg4uIPFb22CikvFr3SXZrY0FoOna+/V+YOsXYfduejnOUEBE50EMrNuCSKRAGsw/2j2oBU845uUuqlwUXO2LXrD7w+u0YGj5ZVsMwuIjIIxVMjYMp9qrD32dS4CUAl1BqqUSvv94Or6LmUJcLhL2/D8Jkcvj720t+ZSCk3b/JHloAg4uIPI1KDZWPN6Y/tQ4z9Oed9ra+Ki8cnbkMAJBWUYl/rb0L5ouXAUvDZqh3hjKjFkVGbwDlcpcCgOe4iMjDlN3TC/MO7cLkwDOy1dDdS4N/pmzEhVmxstVQF4GTi3FlnPyDMq7jHhcReYz8R/vDONiAQd4AYJ9JdutDLakwwBsIGnMOOYH90XThbtlqqQ1z/gW5S7DBPS4icnuSRgNN0yaIffhXpMetkrscq22d1mHu5K+gadYUkk4ndzmKweAiIrdn6dMJ7+/+HP9pslPuUm7ycEAePtj9Oa6O7iF3KYrB4CIi96eSEKnxh1ZSy13JTdSSCmFqPwgX+W2sDgzEiY96ovRe1z3/5iJdRUTkGJqWLVDYxkfuMhRBExmBsri22DV4CQo6uF7IX8fBGUTk1s686offYpeCf6fXLHN2DI5MWQq15C93KdXi/yQRuTVJElBLrvur7rtSb8TNmYlGO8/KXQqEBJfuq+u4x0VEJKOzlY0R+FkqTA6apb4u/M8Ck84MAgD4nZe/nlthcBERycjsQge+Qt9JQf471/7dCCnyFlMNBhcRuSVN0ybotv4sXm+0AoBrDc44WlmKxBmPQV1qgrrcBIjDcpekKAwuInJPXlo8HZoKvco1QssozBh86C+4Wq5DSbE32mw/BFFRAUcekFN5eyN/ag9YNBK8igQafei6e1F1weAiIrcjaTQQ3l5yl2FlFGZkm8oQNNME/9OnAMChgQVc6wNVVAS+m7cYkRp/rCwKw6cfN1PEpL41YXARkds59e8++Gj8f1xmb2vgbw+gcaIRpuwcp71n9ry+eG/qfxCm9nXaezqL65wVJCKyk7BfLJiQ/DdUCKPcpaDt9skwrQmFKeuMc/Z2VGpkP9cfHYcdxwBvlXV4e3fdWZx8pS9U3Ts6vgYHY3ARkdvx+yoVHV+8hHIh/40aW7wNNH7feeeWJK0Gb016D1+12myzvLtOh8yJ76Cgi95ptTgKg4uIiBSF57iIyC2JSwW47a05GDp+L96M3C9bHUXPluBSYXdYTCq0TzoD86XLDn0/YTThqbemI8mv6vXR+y9C6cMzGFxE5JYspaVostmA34Y1AWQMrj3dvwIAGCxlGB37GLzzImzWq8pNMKdn2O8NLWaEv33rG1MqPbQABhcRuSl1dFN8+O27CFHfYtfDyfQqH2x59783LV9WGIMNnYMBF5jySSl4jouI3JbWxSaMVUuqmx73BqRDlxwObXIkjr/TV+4SFYF7XEREMmqq8ce3bTYCAF4Mbo+fxgyCf3IGzIUGmStzXa715wgRkQd7NuQYdix7F8bOMXKX4tIYXETkdnKe6Y871x+Av6STuxRygDoH144dO3D33XcjKioKkiThm2++sVkvhMBzzz2HyMhI+Pj4ID4+HidOnLBpU1BQgIkTJyIwMBBBQUGYNm0aiouLG/RBiIiuK4sw4/FGpxVxU0Squzr/r5aUlKBbt25YunRplesXLVqEJUuWYPny5UhNTYWfnx+GDx+O8vJya5uJEyciPT0dmzZtwoYNG7Bjxw7MmDGj/p+CiOhPJLOEYkt5zQ1JkSQh6j8GU5IkrF27FmPGjAFwbW8rKioKc+bMwZNPPgkAMBgMCA8Px8qVKzF+/HgcPXoUHTt2xL59+9C7d28AwMaNGzFy5Ejk5OQgKiqqxvctKiqCXq/HYIyGRtLWt3wiclPqxsGo7NICX3+y1GUm2q2LO++fAtXOA3KX4VAmYUQy1sFgMCAwMLBOr7XrfnRWVhby8vIQHx9vXabX6xEbG4uUlGtzdaWkpCAoKMgaWgAQHx8PlUqF1NRUe5ZDRB7KfLkAuuwCucsgB7HrcPi8vDwAQHh4uM3y8PBw67q8vDyEhYXZFqHRIDg42NrmRhUVFaioqLA+LyoqsmfZRESkIIo4c7lw4ULo9Xrro1mzZnKXREREMrFrcEVEXJuDKz8/32Z5fn6+dV1ERAQuXLhgs95kMqGgoMDa5kbz5s2DwWCwPs6ePWvPsonIDYlLBbhtyRx0evsRtPzqb3KXQ3Zk1+CKiYlBREQEtmzZYl1WVFSE1NRUxMXFAQDi4uJQWFiItLQ0a5utW7fCYrEgNja2yu3qdDoEBgbaPIiIqmMuKkLUot1ounA3Wn9eUfMLSDHqfI6ruLgYmZmZ1udZWVk4cOAAgoODER0djccffxwvvvgi2rRpg5iYGPzrX/9CVFSUdeRhhw4dkJCQgOnTp2P58uUwGo2YPXs2xo8fX6sRhURE5NnqHFz79+/HkCFDrM+TkpIAAJMnT8bKlSvx1FNPoaSkBDNmzEBhYSFuu+02bNy4Ed7e3tbXrFq1CrNnz8bQoUOhUqkwbtw4LFmyxA4fh4iI3F2DruOSC6/jIqK6EAO646cvV8pdRq3xOq7qKWJUIRER0XUMLiJSpKzPuqL/b5Xo95sR6k7t5C7Hrsa9uwkn3uondxkui8FFRIpkyfHF6bLGeC7kEE6OD8aFR/rj0ow4qHx95S6twWYGnYNfNCdauBXeSJKIFKnVk3tw7MF+UL/6MzKmvQMAuGAuwdTNEyHO5QIWAWGslLlKcgQGFxG5jcYqH8zd9C3KhRYpJa2xNzYAlnLOEu9uGFxEpFj648WI+XYG1iUsQVcvb6glFQb7WABUoJ02FasXzIVkBozhRrlLJTticBGRYon9h9E2TcLHaXFICvkZkRp/67oYrT9OPPyOjNU1jLfWBHV4GMwXLgLKu2rJoTg4g4iUTQikDw7A0HefkrsSu9re/RO8nPotNM05qfiNuMdFRIpnLipCs83FaK99BJunLkLTP+15KZWvygsdtGacWqxHRVlP6/Loz9XQfbdPxsrkx+AiIvew5yBi0gOQP8kLTd3kN5tWUuPogI9tlrXOn4W2p9rAfPSETFXJj4cKiYgUJOPBpbjn692AJMldimzc5O8SIiLAUlKKR+c9BuNDBdjX8wu5y7FRbCnHgMVJ8L5iO9CiuKmE9NnLar0dtaTCXf4Z+HpzT1j+Xxg0W9NqfpGbYXCRQ0k6Hcrv6AqoAE2JGerkX+Quidycd4EJhgrXnHxbVyjQeN8lm8N8jfp0gTnRArVU+wNgTTX+2NRhPdoNmYXm5d0g7f7NEeW6LB4qJIdSR4Thq3ffRPJ772H00i0efXiDHE/l54vF/12G9LhVcpdyE3+VN/YufAfHZgXbbZsZ095Bk9dP2W17SsHgIoc593R/DFh/HI1UPgCACYFH0OdXE/ocMCPzkx4yV0ckj/+Neg/6nY2h8vXFycVxSFj5c532toiHCskRVGpcebgvAgbn45mQDFz/+yhE7YcXww4BAIK7l2DV34YDAPRZRmh/2i9XtaQw6tBQ5I9tDQDwP2+G9/q9KJrQD5WBEsxeEoJVPwDwkrfIagz2saB5s3W4d9pT6Nv/KB5vdFrukhSHN5Iku1P5+WH+oR3o562uVfsuqQ+iyf2ZAABhNgMWsyPLIyVTqWG+vRs2r/ofAGDMieGoGG7Avb9mY4b+vMzFyWNq9kCc73dV7jLqrCE3kuQeF8nup17v4pejIQCApM+mosWzKTJXRK7q+Iru+OT293B9L/79lmuw/3AwBnlfhSvvZZF9MbhIdpEaf4zSXJvB+9FAi8zVkCtSB+lxKqkjJvXcgQHef5wPClH7IcG3Agwtz8LgIrtSeXtDFRYCrWQGULtDhX8mdBaoQ0NhvnjR/sWRS5O0XlAFB/2xwCJgvnTp2gSzIcFI/evr0P8+0Ic8G4OL7Cp3ek98O3cRmqjrdxfaA6OWYPOQcLzfowssJSV2ro5cWdHYnvhs8avW52dNvnhpwEiYcvNkrIpcEYOL7EpogOgGTHCqV/mghfYSoOLwYE+SPb8/mg46a/PdCVFV4sTr4TBVNIGXbyV8JR4OpGsYXEQkG5W3N9C2Be4ZsxuvhB+wWeer8sLx2z/805K6H3p2dzvKgd8uRCEUGXKX4lQMLiKSjSm2Azasfhc6XtZSL089NxOhqz3vFic8HkNEshGSxNBqAMkCj7zukcFFduVzwYLHc3uj2FIudynk4qQenXCxh7fcZZACMbjIrvSr9iBjkA6HK/lXNFXvwgITfptb+9t5EF3Hc1zkUtrvfBjNlmqgKj4gdynkIJpmTdFqbT4Wh3wIgHtcVHcMLrI7YTJh8r6pmN15Ox5tdKZWrzEKM+46Nhq+W/2h2s4pn9xF0YR+MPrb3sqmPFjCmsi10EkMrYbK7y+gLe0Ln2/2yl2KU3GSXXKYzDf64eQDy2vV9oq5FA8NmgBTVu2CjhRApcbEI2cwKfCS3JW4NU+cZJfnuIiISFEYXOQw4alA6+QpqBDGatu9faU5en73OESR8v5qJJJbfKMjOLOgPzTNmspditMwuMhhAj7bg3bzLuOqpbLadsuP3Ya2M/fCfLnASZURuY+JAZdxbPoyFHeLgiogQO5ynILBRUTkBlYtex2n3o+RuwynYHAREbmBphp/zOm6Gcff6wN1aKjc5TgUg4tk9VOpFqWX6ncLFCKyNUN/HodGvI2yXi2giQiXuxyHYXCRrBZPfQhtZ/0idxlEbsNf5Y2NK5bh6D9byF2KwzC4SFaS2eKRk4S6O9MdvVD2QzTu8D0tdykeSSdp3fq3uxt/NHIJFZV4+txw7K2wHRJ/0liMx3N7Q11cIVNh5EjFTbywo8taNG3ATUWJboXBRQ5lystHTr9iTNr3V5vl/8y5B0d7mWA5eEymyohIqRhc5HQdlj+CwsebyF0GkVt7L+F9+O0IhcrPT+5S7I6T7JJTqA8EYEDgWABA021lEPsOyVwROUrZmL642M8idxkeb6iPGY2bbcAz6jvlLsXuGFzkFE1f2g28JHcV5AwdnjmEHU05wz85Dg8VEhGRojC4iIhIURhcRERuSitZIDVuBEmnk7sUu2JwERG5qfZaHZYkr8L52b3kLsWuGFxEZBfqtq1w/P3eGBe8X+5S6HdqSYVWWn+YveSuxL44qpCI7KKyiR5ZI9+XuwzyANzjIiIiRWFwERGRojC4iIjcXGm0CZbbustdht0wuIiI3FzW6Hcx8f3vAZVa7lLsgsFFRESKwuAiIiJFYXARkX0IoEIYa25HspG07nEFFIOLiOxCu+cIxox4GM/kd5W7FKrCff7Z+OuhYygdGyt3KQ3G4CIiu7CUl8Ny8BguG93vxoXuwF/ljfv9Daj0U/6vfeV/AiIi8igMLiIiUhQGFxHZ1b4PuqP9zoflLoPcGIOLiOwq9J0U6Nf7y10GubE6B9eOHTtw9913IyoqCpIk4ZtvvrFZP2XKFEiSZPNISEiwaVNQUICJEyciMDAQQUFBmDZtGoqLixv0QYiIyDPUObhKSkrQrVs3LF269JZtEhISkJuba318+umnNusnTpyI9PR0bNq0CRs2bMCOHTswY8aMuldPRES1sqMc6PnvWQjZlSt3KQ1W56vRRowYgREjRlTbRqfTISIiosp1R48excaNG7Fv3z707t0bAPD2229j5MiRePXVVxEVFVXXkojIxXhfMePZC10wp3EqGql95S6HAJyqDEPou3thspjlLqXBHHKOKzk5GWFhYWjXrh1mzZqFy5cvW9elpKQgKCjIGloAEB8fD5VKhdTU1Cq3V1FRgaKiIpsHEbku7w17sa+nF9aXRMtdCrkhuwdXQkICPvroI2zZsgWvvPIKtm/fjhEjRsBsvpbyeXl5CAsLs3mNRqNBcHAw8vLyqtzmwoULodfrrY9mzZrZu2wiIrcVs346Ppl5F+AGe1tAPQ4V1mT8+PHWf3fp0gVdu3ZFq1atkJycjKFDh9Zrm/PmzUNSUpL1eVFREcOLyNUJC/6ddjdyu+7E041PyF2NR/M9rYU6eZ/cZdiNw4fDt2zZEiEhIcjMzAQARERE4MKFCzZtTCYTCgoKbnleTKfTITAw0OZBRC5OCLSa+Cs+Wn0njMI9/tJXIqMwQxJyV2FfDg+unJwcXL58GZGRkQCAuLg4FBYWIi0tzdpm69atsFgsiI1V/uSPRGSr+XsZGHX/NBw3lshdisc5WlmKUX/5K6Lfz5C7FLuq86HC4uJi694TAGRlZeHAgQMIDg5GcHAwFixYgHHjxiEiIgInT57EU089hdatW2P48OEAgA4dOiAhIQHTp0/H8uXLYTQaMXv2bIwfP54jConckPnSZWhMJpQL97j7rpJUCDU0h7NgdrMBbXXe49q/fz969OiBHj16AACSkpLQo0cPPPfcc1Cr1Th48CDuuecetG3bFtOmTUOvXr3w888/Q6fTWbexatUqtG/fHkOHDsXIkSNx22234d1337XfpyIiIrdV5z2uwYMHQ4hbHzD98ccfa9xGcHAwVq9eXde3JiIisv+oQiKiP6sY0Qdn/iIQpf5e7lI8yoNZQ3Dghw6IrkirubHCMLiIyKEu9tAiK2EZAN5g0pn2HGiLNi/uhpsNKATA2eGJiEhhuMdFRI4hSTi+ohcm9vxZ7ko8SoUwoud//o5WP5fKXYrDMLiIyDEkFRb0/waTAi/JXYnbuWIuxZsFfapcV2zSocUn2TCdzXFyVc7D4CIiUpg1xS2xp7sXUOUIbwsA9w0tgMFFRHZ24qOeuLP9UQDASL8z4KAM+4pZPx0tP7dAI9xvtGBtMbiIbqCJjMCl+Jhq2zROuwzzkeNOqkgZ1KGhuJzQGk/0+h6PNjrz+1KGlr35ZWmh2bpb7jJkxeAiukFxr2ikvvJOtW06Ln0EzY6ddJvbRNSLJAHSHwOTK7rW3G9UP2ZhgeX6wHZ3HN9eRwwuonpY+X9v4fWRw3FloMFjwyvrpX549t4vrc8ba9JlrMa9td02DW1frQAAROdkwDO/cX9gcBHVQ1+dFklRP2LKvL+jxTeXYU53r9m3b0X074Zzg68d/us+MEMxIwYPVpbj3p2zqt1beaBzGl4KP+i8omrBKMzovmcSQn7yhuXAr3KX4zIYXEQ3kCwCOaZihKt9oJVuPaN5X50WRxKXIfbsLAS58c6GpNFA5X8trE4l+OLY/y2TuaK6+7G4E1o/VP0v/i8XDcCj43cjUuPvpKpqVioq0WJuCUyn3PgLVg+cOYPoBt6bfsPfYu/Dm1fayl2KSzDc3xsvH/gRLx/4EdumLJa7HIdp/cJhTB07E1fM7nvhrrtgcBHdQNU2Bkf+FY3+vrW73bzmwXzkzOvv4KrkkTOvP1STLqCrlze6enm71N6IvVmuXoXqeDb6fTgHz17oInc5VA0GF9GfaJpE4WJsMLLGvIsB3rX78djVdQ3uun831G1aQt2mJTQR4Q6u0vEknQ7qNi0x+v6d2NV1jdzlOI25qAgtnk3BmsxucpdC1eA5LqI/KfnAC9s7vgXAq06veynsF5Rt2wMAGJg2BWGj8x1QnfOY+nfC1x8vhb+kA/++JVfDbyQRAE1Mc1xY1x7/arUevqq6hRYAqCUV/FXe8Fd5Y0HHb5H7TQdoIiMcUKnjZT/XH/7Pn4Ne5QO1xF8R5Hq4x0WeRZIg4rrC4mU7WvBKCx32915ql1/U9/iVIr73hxg6+DE02ucDc2ZWg7fpDJJOB3O/juh053F81Wqz3OXIquKsP5YXNsHMoHOy1qGGhMLeEQgCYDp1WtZaXIkkRJWzNLq0oqIi6PV6DMZoaCSt3OWQgkg6HZLSf8EwX6NT3i/m2xloO3OvU96rodQd2uCrTavqtcfp6hYXtMLmzgF1eo3o3w0/ffWhgyqqm5Zf/w1tHk2Vuwy7MgkjkrEOBoMBgYGBdXot97jIYxT/JRad5x5ErHcRAB+5y7mlS3+LQ/eph6pct/1kG7SaaP8LUXOe6Y+R96VAJ/FXwnWaw1kYNGsGAOBCLzWO/R+ns3IV/JaSRyi/qy/Ox1uwq2kKnBlaTVpcQvH9/RCwZj+EyVR9Y0lC6b19cXVICVZE76yyybv6U/jfxHsQvPkUzPkXGlyfpNGgaFxvNL49F4sjfgVPe//BXFQEn3XX9pYb6/rJXA39Gb+l5BHufGkHsu5+z+nvu7PrGry/6HWogvS/T0p764dKp8PcVz7G8UEf3XJ7M/TnsWfxcpR1j7ZLfapGjbBy0WvY0WWtXbZH5Azc4yJysNZaHcbv/A1GUf2Pm1qyIN6nEHUdil9feX/vjzmzvkCMxtsp70dkLwwucmuali1w5v4o9PZdIVsNWkldh8lonTcwolKP3+u69XyM5Bo6dsnG2cf7I3LpfghjpdzlyI6HCsmtXe0ahsOPLUOCb4XcpbgclQnINRXLXQbVwoa2P+DDv78BlQ/3jgEGF5HHin7rN0xL+CtOGhlepCw8VEikZCo1Tr/QF8YgS71eLrQWBKv49yspC4OL3JqqQmBLmRpxujK3urC2NEwLn9YxgFqNtx74XwMPhfrarS5XYhRm7CrXwgwJaYbmAArqtR1NkyiUNZbsW1w9aCULREwTqLOuDdX3ZJw5g9zb78PMB++7jKcb1+42JUpQbCmH+ffb+epVrnsxtZx2lAMv97kDoqQUQgiIivqFu257BD5r9a1L/OFjsJThtrfmIGrxbrlLaTDOnEF0K0LAUl6Ota8MxbsJt+HkHR/IXZFd+Kt4kr4qBksZ+i+dA20xoCkTaHxlL2Ax12tb6ratkLPIC/9p9qlLhBZw7Y8UwUGgDC7yDPpP9gCiHxZ3b4XEoKMu84uI7ONdQxSumPxwyeiP5v/LbPCsIup2rXFhYCgO9uU0T66IwUUeQ79qD7Z+HYpuh7OdNskuOZ5ZWLBm0lCIfYcACAANnwor60UfHB3A0HJVHE5EHsVSUYGFs6eg7Y5JcpdCdjAntyeGJM6EdOy0XbcrSYo79e9RuMdFnkUIeG3cBzE4DhgkdzHKsKfcjBez77I+91Yb8VHM90473LrCEIG1+T0AAE80+wlDfa6ds5qT2xNrd/ZFm2/2oH4XAyhTafsKlI3ua50A2BNxj4s8koRrh5ioemZhwT8yx8E4ONf6KL3HjEyT8/ru5W/vhXFIHoxD8pB06H7r8r0v9kGbx1NvnrC4oeyxDQc6NWwFJr/8rcvX6UgcDk8eSRMZgdKuTfH5+28hTO0ndzkuq+cLsxCxOR/mE6f+WChJkLp3xOl5Khy77WOH15BWUYm08hYAgKG+x9FK6w8A+K7UG+eMwTZtLxkDsGtYC5jy8uv1XpomURi08QTuDTyAtlrX/V6sMETgi46RgPJ+fVtxODxRHZly8+CrUsGs4B98Z7jS1QzvgjAE/Dm4hID4NR0VBX2dUkMvnRd66c7//szfunyUbzmA8zZtiy3l+GjWUGhLWtW43WYfXht9KGk0yJvVF2YfoDJA4MtG38BX5bqh9becOGza0xVthHvdEbkuGFzkkSStF4QfL9ytSdbodzGk9Wjgc7krqR1/lTeOTV9WYzuzsGD43v+DtrQMKn8/rEh6E71018/ZufalErvW9ECbl5V/AXJDMLjII515pjc+nfIGIjX+NTcmt6OWVHhr5VKUCzXUEOjixVMOSsLgIo9k8hHortPJXQbJqJOXsva4c03FGLD2SbRMLZe7FNkxuIiobiQJmubNoPLnRdzOlG/Wov2/jnj8BLsAg4uI6kitD8QzW79Bb50ZAA+xkfPxOi7yKJJGg+P/642HRmyXuxTFeDpmI3K+7gRN82bXFkgqBKkqoOOlKE4z9Mg9mPby47CUlspdiktgcJFnUavx30EfYn7oEbkrkd2Bigq8eaUFjKL62dMTfCtwoN9HuHxbE4gB3VHWtxW8pfrNuE71k3U0EiH/TYEwmeQuxSXwUCGRh7o3+RF0mHsaI9PSa7zYViupsWfx8j8t4WhMkg+DizxGyX2xaDnnKProDHDXu/5et6vcgqf+8Qgk860vsG53qhiWQgP+77EnUPm3Auzp/pUTKySqPwYXuS3zkJ4oDfvjYtLcwRbsbL4D7h5aAKCGgEUDSNXNZ6eWIEwm+Kzbi7Oj+gDdnVYeUYMwuMg9VPEL2vf589jcZqMMxVTvxsl91ZL9TzX381Yj5dXl1baJ+XEa2v5VUvR8d56Ak0HfjMFFinfuH/0xe9K6m5bf5f8zXO1czMZSHV5/eDxUf5pdfdgHu5AUfKqaVznGhiH/wapfYnEgPsTp7021U2wpx8jEx9Dhl3PgsIw/MLhIuVRqXJgVi5A7zmNm0LkqGrhWaAFAodkXqn3pNqPD8o11mxnbXjp5+SApJAWDHpmLHu1PyFIDVc8MgYBDF2A6myN3KS6FwUWKpfLS4o2k5Rjsw0Mp9RWi9sORWTVPSkvkSngdFxERKQqDi4iIFIXBReRE3iojVC2aQeXrC0mng6ZFNALUyp/t+7ixBAcrlf85SBl4jovIie72LcLt21Yh4Zk58L1owpfvvYlGKh8o/W/I+1+bi0bHjdj2v/fkLoU8gLJ/WogURi2p0EjtC6EGfI/mYejrc/FNSZDcZdXbwcpydHnjEURuLYC6gvMXknMwuEiR1KGhMPbriACVcg9Pmc6cRcQbu/Hy8QRsLFXmTS3PmoLQZEkaLIePyV0KeRAGFynS+QltsHn1/9BL51VzYxcXfNdx/HPRX+Uug0gxeI6LyImSy1T457wZCN2dbTMTgqTQWZf66wqwaqsvLPBDM59f5S7Hrdx3Mh75b7SC//nf5C7F5TC4SJH8cs0Yn3UH/tv8O+hVPnKXUyvvGqKw5OgQNPlqH0wW2/NBfnnXPs9/otcjRF39LUZcSSO1L1bHbJO7DLeUcSkMUWtSwcvrb8ZDhaRI/l+mwjC0FPsrXG9ap1t5c9UYNBmbDlhuHsTgvX4vCgcXY2d5uAyVESlLnYJr4cKF6NOnDwICAhAWFoYxY8YgIyPDpk15eTkSExPRuHFj+Pv7Y9y4ccjPz7dpk52djVGjRsHX1xdhYWGYO3cuTLyzJ9WRpaICi+8fj5gfp8ldyi112PUwho2bjGHjJiNmRfUT6QpjJZbfPxrDxk3GkKn/hxxTsZOqrJlRmBE3ZyaGjZuMOyZNw0mj69RGnqdOhwq3b9+OxMRE9OnTByaTCc888wyGDRuGI0eOwM/v2uGNJ554At999x2+/PJL6PV6zJ49G2PHjsWuXbsAAGazGaNGjUJERAR2796N3NxcTJo0CVqtFi+99JL9PyG5LyEg0tKhuRgndyU3MQsLBvx2P3w3+0NKSQGAWs3uLX5NhwTAJzQURhc57/VdqTfm/PIXtNqZA9PZHOh8fXHn9sfg7VtpbfN81/W4398gY5XuZUj6aGB3kNxluCxJiPrfjOfixYsICwvD9u3bMWjQIBgMBoSGhmL16tW47777AADHjh1Dhw4dkJKSgn79+uGHH37AXXfdhfPnzyM8/NphkeXLl+Ppp5/GxYsX4eVV8yixoqIi6PV6DMZoaCRtfcsnN5G1MA67H3oVABCg8oJOxu+EwVIGo7CgVAjMjJ8M8/GT9dqOOjQUS/evRYxW/kOhQ9JHw+vOM9W2Ob+2I3b2WaGY842u7s77p0C184DcZTiUSRiRjHUwGAwIDKzbHRIadI7LYLj2F1ZwcDAAIC0tDUajEfHx8dY27du3R3R0NFJ+/6szJSUFXbp0sYYWAAwfPhxFRUVIT0+v8n0qKipQVFRk8yC6rvUrRzB54ARMHjgBvfdOlrWWEXOewOSBEzBr4ASYM0/LWoszNZtxESOTnpC7DPIQ9Q4ui8WCxx9/HAMGDEDnzp0BAHl5efDy8kJQUJBN2/DwcOTl5Vnb/Dm0rq+/vq4qCxcuhF6vtz6aNWtW37LJDZkLDTCdzobpdDZ81+jRcpPzr4n6rtQbrT6biUb78q7VcuZslYMwlKb9zodhWBNVYzvzxYvwuVhZYzuq3tfFgWj12Ux45RTIXYpLq3dwJSYm4vDhw/jss8/sWU+V5s2bB4PBYH2cPXvW4e9JyhT0cQravV6GXeUW7Ck342hlqcPf87ixBEvOxKN10h6YTp22z0YtZqSWN8MFc4l9tldPESu9EfpOiqw1eIqjlaV4K2vote/R6Wy5y3Fp9Qqu2bNnY8OGDdi2bRuaNm1qXR4REYHKykoUFhbatM/Pz0dERIS1zY2jDK8/v97mRjqdDoGBgTYPoluxHDyGF7sMxIIugzDt6SSHv9+DLzwJ1ahLdt2m+XIBPuzZEf22PWrX7ZLrmjx/DvxG58pdhiLUKbiEEJg9ezbWrl2LrVu3IiYmxmZ9r169oNVqsWXLFuuyjIwMZGdnIy7u2sivuLg4HDp0CBcuXLC22bRpEwIDA9GxY8eGfBaia4SApaQElpISNNqbi66vPYKurz2Cttsdc/6r5ZTjOPl8D7tv11JSAmGW7L5dRzj3j/4Q/7RveHuK5DIVurz+CEJ258NSrty5N52pTsPhExMTsXr1aqxbtw4BAQHWc1J6vR4+Pj7Q6/WYNm0akpKSEBwcjMDAQDz66KOIi4tDv379AADDhg1Dx44d8fDDD2PRokXIy8vDs88+i8TEROh0ypxolFyXKesMIl+7NiLO8FA/vN21+U1t7vA7hk5etRsNZxRmrDBEwyj++NEZ2CgTGe3D7FPwDTT5XvioKASTAuUJBUOMFpHtWsOckXnTOk3zZjBFNgIAtEjIwoa2Pzi7PMVLLlNh4emRiHotBeb6D/D2OHUaDi9JVf/198EHH2DKlCkArl2APGfOHHz66aeoqKjA8OHDsWzZMpvDgGfOnMGsWbOQnJwMPz8/TJ48GS+//DI0mtrlKIfDU71V8R0++Ul3ZA75oFYvT68sw9xeo2AuuGK7woG/dFRd2+ObHz6WbZj/rYbDH1/eF5l3Lwdw7XYtVHdd3ngEUYt3y12GLBoyHL5Oe1y1yThvb28sXboUS5cuvWWb5s2b4/vvv6/LWxPZRwMCpt+B+6B9vzH8DGkODaqbyDxZ3Sutv8LLO0betPzViM8YWA3Fnax64SS75LEkrRdKR3VHTET1J8TNwoJHz/dHSXIYotbsdurvGqlHJ+T110Ml47SifXVarGm9Sbb3J7oRg4s8ljosBJ8veR2RmupnpygTlTg9sQmijjv/kE7GY97IGr4MgNrp703kqhhc5FEkrReCk/3QW38GOtVlhKl95S7JStJo4Lu1EW4L/mOaqFf8lgHgoCV3k15Zhsf+OhvRR07Wag5LssXgIo+h6tweOQnBeKPJq+jgdT2waj4Ep5XUyHowHF6F4VBXCIS9nwZhtO8sEeqObZEzIgQfNXsD3W1G1zK03FG5UMNr33GYrl6VuxRFYnCRx8i7PRiHkpYBqNtelk7S4uiMZQCuzW7w5Lf3wXKlELBY7HLdjaTTIXdwCA7O4d6VJ6gQRlw2+wEW3iKyvhhcRHXQVuuNZ37eADNU+KqgDzL6qhs8J6HXT42wuvmrqGugkjK1/2EWOr6QD0sJp66rLwYXeYTzT/WH/5D8mhvWQC2pMMAbuOv4CJxMjkG0aPg8fh0C8/506JLcnVSqvjYJM9Ubg4s8wgMPbcWzIcfq/Lor5lKcMt38Y5L9bQyiX/fMC0eJ5MbgIqrGiEOT0OiBm/fUosr389pRIpnwsneialSa1LBcvXrTw56jCre9FYfW26babXvkmkotlWj//izEfMMB8A3FPS4imTVamQKLNg4YIncl5CjHjSX4ytATrd7NhinnnNzlKB73uIiIHGxs2gxs7+bL0LITBhd5hM3/GIiYb2fIXcYthW86h35zZ2JPecOG1pPr6bzkEUS9pnXuxMxujocKySPovt+HJr6xmNp9IN5s+hP0qtrdf8tZTKezEZRzHonjJ6BTSF6Vbf4esRm9dF5OrozqK72yDAvPj0CzDQWwHK77iFa6NQYXeQy/r1KRu16H1PRADPM1yl3OTYTJhJC7j+NWV5v9feN47Oy6xqk1Uf29cG4UrgwoAFAodyluh8FFHkVUVuK1B8djsdetZ1u/0McXv81d5sSqaicwSYM7g6cAAIYt/xlz/zQZL7mWTm8/gujvCgAUyF2KW2JwkWcRAth7qNqTu5FlndD19gkAAPPeRn+s6NcVl7r5IfR/9p9ktzbMR45b616+6U4ci4vEiuidTq+DaqY/ZYHlIA8POgoHZxDdQKSlI3LMUUSOOYqmL/0xO8bpUX5Y8vRSqPzkPz/W+ok9+O39LnKXQTcwCwsMljJIFg7EcCTucRHVUqvXjuClFWNgNnCeOarax1cj8MVdAxCY8xs497vjMLiIaslcaAAKDXKXQS4q4dgonElujuhMzmHpaAwuIgVSh4bCGCDJXQbh2uHBQ5VG5H/dHNFLGVrOwOAiUqDw9eX4tOlrAOQ/3+bp0irNWNB/NMIv7uXEy07C4CJqoJxn+qOic2mt2lou69Dmsb03zaJgHtITp6fX/qzIgrAVLncRtScafvQu5H0bjciLeyFMnDzXWRhcRPUk6XRA59bocdcRfNIiuVav+a7UG0v6/AWS2Takzg30Rubgulw7duvr0Mh5Mg82Reu3dnNPy8kYXET1JHVoha/XfQBfVe2nYRrlW46EtR/eYi2vTiGqDQYXUT2c/Wd/xN19sE6hdZ1aYkApXbGlHANfSkLb3YUc9i4DBhdRHUhaL5QN747wwec4a4WH2lEOLDl3FyK/zoQ5/4Lc5XgkBhdRHagbN8LHy15HtMZf7lJIJn9LexjRfzkkdxkejcFFRFSDx3N7Iz3p2hRbMXlXwbumyYvBRVRb/brizO3+COA5Ko/yYNYQ7P+5PWK2pwAAQ8sFMLiIakHS6XByjB9OTFoGwFfucsgJzMKCMlGJ7NfbIubrFLnLoT9hcBHVQNJ6oeeeMiwNXgyA57Y8xYqipvjmnn4IOHeIIwddDIOLqCYqCYMCMtBKy9Byd7mmYvT/4QnALMH7ggbRJzj3oCticBFVQ+XtDVVkOLwlo9ylkAOlV5bBKFTYU9YO7Z9Ih6W0dlN4kTwYXETVuDCpBzY8uxhhal9wZgv3dMlcgrkjpwI5eRBCwFJ6Ve6SqAYMLqJqWDQSInnNltt65Fw//PxFTzQ98xssJSVyl0O1xOAiIo/0TYk/NqZ2Q5vFuzn4QmEYXETkcczCgnceHos2qXvlLoXqgcFFRG7v6+JALHphovW5JASCMzJgFrwhiRIxuIjILRVbyvFU7mCYhYSdZ1ui6ce2FxFzBgzlYnARkVvaX+GLrIGApbwMTZEudzlkRwwuInI7rbZORatlFkgVB+UuhRyAwUV0C0UT+sEQWy53GVRLq642xmsZ8QCA4K3ekHZzfkF3xeAiuoWEf+zA/NAjcpdB1bg+ES4AzN9/D1pN/FXmisgZGFxEpFiTz9yBgimNAQBtDec44MJDMLiIbuGzrwdj5+2tsKnDerlLoT/ZW2HEAz8mAgACTmgQeZwT4XoaBhfRLUT/ezcu/18c0p8tq3K9t2TmjPFOYhYWHDeWwwIJ712IR9uZvHDYkzG4iKoR8mEa5n49ssp1xk7N8f3nK6CV1E6uyvPsqlDhlQFjIcorADMPCHo6BhdRNYSxEuYrlVWu02Zo0H3poxDSH8sWT/0fRvlyJKI9GCxl6PNREjQlErSlQER+KmBhaBGDi6jezBcvoulLF22WLb49AZejd0ItCdzrlwtflZdM1SmDwVKGdcXNqlyXb9Kj9VsnYc6/4OSqyNUxuIjsSDf8DFZJzaHy1qHxwWIk+FbIXZJLe7ugB37u7nfrBhaGFt2MwUVkT0IAwgxLWRlemDcF831UqPSX8OO8xQhTV/MLWgZ3Hr0bRR82vWl599kH8N+m9r1495K5BHe+PBdeV20ntdUZzPCxcKAF1Q2Di8gRhID/l6kAAHWjRnhkwmiEeRcjWFuCF8MOOfztr5hL8a+8IbBAumWbnB3NEP3RzUPJN/Xqh0f623fW9EsVfoj87BjMlwvsul3yTAwuIgczX7mCqwOBqwCyunZCxQ+/QCdpHfqe28vDkBlnhjCZbtkmGlVf/9Tm73tw0u4VccAK2Q+Di8iZjp/GyIdnIvql4/gg+me7bjrHVIwHH0uCtsgMdYUZkumAXbdP5CoYXEROZCkvh2ZrGnZviUPf7hEAgA86fYROXj712p5ZWDAq424UlPmipNwLzbceg7moyJ4lE7kcBheRDFr884/BD++lDcRL4fWbtqhUGKGa7YdGR46jEXhzRPIMDC4imZ0YF4X7dA/W78VCwHLqlH0LInJxDC4imZlOZ8tdApGiqOQugIiIqC4YXEREpCh1Cq6FCxeiT58+CAgIQFhYGMaMGYOMjAybNoMHD4YkSTaPmTNn2rTJzs7GqFGj4Ovri7CwMMydOxemaq43ISIiuq5O57i2b9+OxMRE9OnTByaTCc888wyGDRuGI0eOwM/vj+lspk+fjn//+9/W576+vtZ/m81mjBo1ChEREdi9ezdyc3MxadIkaLVavPTSS3b4SERE5M7qFFwbN260eb5y5UqEhYUhLS0NgwYNsi739fVFREREldv46aefcOTIEWzevBnh4eHo3r07XnjhBTz99NN4/vnn4eXF2bSJiOjWGnSOy2AwAACCg4Ntlq9atQohISHo3Lkz5s2bh9LSUuu6lJQUdOnSBeHh4dZlw4cPR1FREdLT06t8n4qKChQVFdk8iIjIM9V7OLzFYsHjjz+OAQMGoHPnztblDz74IJo3b46oqCgcPHgQTz/9NDIyMrBmzRoAQF5enk1oAbA+z8vLq/K9Fi5ciAULFtS3VCIiciP1Dq7ExEQcPnwYO3futFk+Y8YM67+7dOmCyMhIDB06FCdPnkSrVq3q9V7z5s1DUlKS9XlRURGaNav65nNEROTe6nWocPbs2diwYQO2bduGpk1vvp/Pn8XGxgIAMjMzAQARERHIz8+3aXP9+a3Oi+l0OgQGBto8iIjIM9UpuIQQmD17NtauXYutW7ciJiamxtccOHAAABAZGQkAiIuLw6FDh3Dhwh93Nt20aRMCAwPRsWPHupRDREQeqE6HChMTE7F69WqsW7cOAQEB1nNSer0ePj4+OHnyJFavXo2RI0eicePGOHjwIJ544gkMGjQIXbt2BQAMGzYMHTt2xMMPP4xFixYhLy8Pzz77LBITE6HT6ez/CYmIyK1IQoha3+pUkqq+m+oHH3yAKVOm4OzZs3jooYdw+PBhlJSUoFmzZrj33nvx7LPP2hzeO3PmDGbNmoXk5GT4+flh8uTJePnll6HR1C5Hi4qKoNfrMRijoXHwDfmIiMj+TMKIZKyDwWCo8+mfOgWXq2BwEREpW0OCS5Gzw1/PWhOMgOJil4iITDAC+OP3eV0oMriuXr0KANiJ72WuhIiIGuLq1avQ6/V1eo0iDxVaLBZkZGSgY8eOOHv2LIfHV+H6tW7sn6qxf6rH/qkZ+6h6NfWPEAJXr15FVFQUVKq6XZmlyD0ulUqFJk2aAACv66oB+6d67J/qsX9qxj6qXnX9U9c9ret4Py4iIlIUBhcRESmKYoNLp9Nh/vz5vGj5Ftg/1WP/VI/9UzP2UfUc2T+KHJxBRESeS7F7XERE5JkYXEREpCgMLiIiUhQGFxERKYoig2vp0qVo0aIFvL29ERsbi71798pdkiyef/55SJJk82jfvr11fXl5ORITE9G4cWP4+/tj3LhxN93E093s2LEDd999N6KioiBJEr755hub9UIIPPfcc4iMjISPjw/i4+Nx4sQJmzYFBQWYOHEiAgMDERQUhGnTpqG4uNiJn8JxauqfKVOm3PSdSkhIsGnjrv2zcOFC9OnTBwEBAQgLC8OYMWOQkZFh06Y2P1PZ2dkYNWoUfH19ERYWhrlz58JkMjnzozhMbfpo8ODBN32HZs6cadOmoX2kuOD6/PPPkZSUhPnz5+OXX35Bt27dMHz4cJsbU3qSTp06ITc31/rYuXOndd0TTzyB9evX48svv8T27dtx/vx5jB07VsZqHa+kpATdunXD0qVLq1y/aNEiLFmyBMuXL0dqair8/PwwfPhwlJeXW9tMnDgR6enp2LRpEzZs2IAdO3ZgxowZzvoIDlVT/wBAQkKCzXfq008/tVnvrv2zfft2JCYmYs+ePdi0aROMRiOGDRuGkpISa5uafqbMZjNGjRqFyspK7N69Gx9++CFWrlyJ5557To6PZHe16SMAmD59us13aNGiRdZ1dukjoTB9+/YViYmJ1udms1lERUWJhQsXyliVPObPny+6detW5brCwkKh1WrFl19+aV129OhRAUCkpKQ4qUJ5ARBr1661PrdYLCIiIkIsXrzYuqywsFDodDrx6aefCiGEOHLkiAAg9u3bZ23zww8/CEmSxLlz55xWuzPc2D9CCDF58mQxevToW77Gk/rnwoULAoDYvn27EKJ2P1Pff/+9UKlUIi8vz9rmnXfeEYGBgaKiosK5H8AJbuwjIYS4/fbbxd///vdbvsYefaSoPa7KykqkpaUhPj7eukylUiE+Ph4pKSkyViafEydOICoqCi1btsTEiRORnZ0NAEhLS4PRaLTpq/bt2yM6Otpj+yorKwt5eXk2faLX6xEbG2vtk5SUFAQFBaF3797WNvHx8VCpVEhNTXV6zXJITk5GWFgY2rVrh1mzZuHy5cvWdZ7UPwaDAQAQHBwMoHY/UykpKejSpQvCw8OtbYYPH46ioiKkp6c7sXrnuLGPrlu1ahVCQkLQuXNnzJs3D6WlpdZ19ugjRU2ye+nSJZjNZpsPDADh4eE4duyYTFXJJzY2FitXrkS7du2Qm5uLBQsWYODAgTh8+DDy8vLg5eWFoKAgm9eEh4cjLy9PnoJldv1zV/X9ub4uLy8PYWFhNus1Gg2Cg4M9ot8SEhIwduxYxMTE4OTJk3jmmWcwYsQIpKSkQK1We0z/WCwWPP744xgwYAA6d+4MALX6mcrLy6vy+3V9nTupqo8A4MEHH0Tz5s0RFRWFgwcP4umnn0ZGRgbWrFkDwD59pKjgIlsjRoyw/rtr166IjY1F8+bN8cUXX8DHx0fGykipxo8fb/13ly5d0LVrV7Rq1QrJyckYOnSojJU5V2JiIg4fPmxzzphs3aqP/ny+s0uXLoiMjMTQoUNx8uRJtGrVyi7vrahDhSEhIVCr1TeN4snPz0dERIRMVbmOoKAgtG3bFpmZmYiIiEBlZSUKCwtt2nhyX13/3NV9fyIiIm4a6GMymVBQUOCR/dayZUuEhIQgMzMTgGf0z+zZs7FhwwZs27YNTZs2tS6vzc9UREREld+v6+vcxa36qCqxsbEAYPMdamgfKSq4vLy80KtXL2zZssW6zGKxYMuWLYiLi5OxMtdQXFyMkydPIjIyEr169YJWq7Xpq4yMDGRnZ3tsX8XExCAiIsKmT4qKipCammrtk7i4OBQWFiItLc3aZuvWrbBYLNYfQE+Sk5ODy5cvIzIyEoB7948QArNnz8batWuxdetWxMTE2Kyvzc9UXFwcDh06ZBPumzZtQmBgIDp27OicD+JANfVRVQ4cOAAANt+hBvdRPQeTyOazzz4TOp1OrFy5Uhw5ckTMmDFDBAUF2YxQ8RRz5swRycnJIisrS+zatUvEx8eLkJAQceHCBSGEEDNnzhTR0dFi69atYv/+/SIuLk7ExcXJXLVjXb16Vfz666/i119/FQDE66+/Ln799Vdx5swZIYQQL7/8sggKChLr1q0TBw8eFKNHjxYxMTGirKzMuo2EhATRo0cPkZqaKnbu3CnatGkjJkyYINdHsqvq+ufq1aviySefFCkpKSIrK0ts3rxZ9OzZU7Rp00aUl5dbt+Gu/TNr1iyh1+tFcnKyyM3NtT5KS0utbWr6mTKZTKJz585i2LBh4sCBA2Ljxo0iNDRUzJs3T46PZHc19VFmZqb497//Lfbv3y+ysrLEunXrRMuWLcWgQYOs27BHHykuuIQQ4u233xbR0dHCy8tL9O3bV+zZs0fukmTxwAMPiMjISOHl5SWaNGkiHnjgAZGZmWldX1ZWJh555BHRqFEj4evrK+69916Rm5srY8WOt23bNgHgpsfkyZOFENeGxP/rX/8S4eHhQqfTiaFDh4qMjAybbVy+fFlMmDBB+Pv7i8DAQDF16lRx9epVGT6N/VXXP6WlpWLYsGEiNDRUaLVa0bx5czF9+vSb/ih01/6pql8AiA8++MDapjY/U6dPnxYjRowQPj4+IiQkRMyZM0cYjUYnfxrHqKmPsrOzxaBBg0RwcLDQ6XSidevWYu7cucJgMNhsp6F9xNuaEBGRoijqHBcRERGDi4iIFIXBRUREisLgIiIiRWFwERGRojC4iIhIURhcRESkKAwuIiJSFAYXEREpCoOLiIgUhcFFRESKwuAiIiJF+f8q4ls51HG7EgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pred_masks = predictions[\"pred_masks\"][0].squeeze().cpu().numpy()\n", + "plt.imshow(pred_masks)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "That wraps it! In this notebook, we show how we could train, test and finally infer a FastFlow model using Anomalib API.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "anomalib", + "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.10.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "f26beec5b578f06009232863ae217b956681fd13da2e828fa5a0ecf8cf2ccd29" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/notebooks/400_openvino/401_nncf.ipynb b/notebooks/400_openvino/401_nncf.ipynb index 6580b86c3a..64af5ae4f5 100644 --- a/notebooks/400_openvino/401_nncf.ipynb +++ b/notebooks/400_openvino/401_nncf.ipynb @@ -1,345 +1,344 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setting up the Working Directory\n", - "This cell is to ensure we change the directory to anomalib source code to have access to the datasets and config files. We assume that you already went through `001_getting_started.ipynb` and install the required packages." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from pathlib import Path\n", - "\n", - "from git.repo import Repo\n", - "\n", - "current_directory = Path.cwd()\n", - "if current_directory.name == \"400_openvino\":\n", - " # On the assumption that, the notebook is located in\n", - " # ~/anomalib/notebooks/400_openvino/\n", - " root_directory = current_directory.parent.parent\n", - "elif current_directory.name == \"anomalib\":\n", - " # This means that the notebook is run from the main anomalib directory.\n", - " root_directory = current_directory\n", - "else:\n", - " # Otherwise, we'll need to clone the anomalib repo to the `current_directory`\n", - " repo = Repo.clone_from(url=\"https://github.com/openvinotoolkit/anomalib.git\", to_path=current_directory)\n", - " root_directory = current_directory / \"anomalib\"\n", - "\n", - "os.chdir(root_directory)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# int-8 Model Quantization via NNCF\n", - "It is possible to use Neural Network Compression Framework ([NNCF](https://github.com/openvinotoolkit/nncf)) with anomalib for inference optimization in [OpenVINO](https://docs.openvino.ai/latest/index.html) with minimal accuracy drop.\n", - "\n", - "This notebook demonstrates how NNCF is enabled in anomalib to optimize the model for inference. Before diving into the details, let's first train a model using the standard Torch training loop.\n", - "\n", - "## 1. Standard Training without NNCF\n", - "To train model without NNCF, we use the standard training loop. We use the same training loop as in the [Getting Started Notebook](https://github.com/openvinotoolkit/anomalib/blob/main/notebooks/000_getting_started/001_getting_started.ipynb)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from anomalib.engine import Engine\n", - "\n", - "from anomalib.config import get_configurable_parameters\n", - "from anomalib.data import get_datamodule\n", - "from anomalib.models import get_model\n", - "from anomalib.utils.callbacks import get_callbacks" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Configuration\n", - "Similar to the [Getting Started Notebook](https://github.com/openvinotoolkit/anomalib/blob/main/notebooks/000_getting_started/001_getting_started.ipynb), we will start with the [PADIM](https://github.com/openvinotoolkit/anomalib/tree/main/anomalib/models/padim) model. We follow the standard training loop, where we first import the config file, with which we import datamodule, model, callbacks and trainer, respectively." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "MODEL = \"padim\" # 'padim', 'stfpm'\n", - "CONFIG_PATH = f\"src/anomalib/models/{MODEL}/config.yaml\"\n", - "\n", - "config = get_configurable_parameters(config_path=CONFIG_PATH)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that we will run OpenVINO's `benchmark_app` on the model, which requires the model to be in the ONNX format. Therefore, we set the `export_type` flag to `onnx` in the `optimization` [config file](https://github.com/openvinotoolkit/anomalib/blob/main/anomalib/models/padim/config.yaml#L61). Let's check the current config:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'export_type': None}\n" - ] - } - ], - "source": [ - "print(config[\"optimization\"])" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As mentioned above, we need to explicitly state that we want onnx export mode to be able to run `benchmark_app` to compute the throughput and latency of the model." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "config[\"optimization\"][\"export_type\"] = \"onnx\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "datamodule = get_datamodule(config)\n", - "model = get_model(config)\n", - "callbacks = get_callbacks(config)\n", - "\n", - "# start training\n", - "engine = Engine(**config.trainer, callbacks=callbacks)\n", - "engine.fit(model=model, datamodule=datamodule)\n", - "fp32_results = engine.test(model=model, datamodule=datamodule)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Training with NNCF\n", - "The above results indicate the performance of the standard fp32 model. We will now use NNCF to optimize the model for inference using int8 quantization. Note, that NNCF and Anomalib integration is still in the experimental stage and currently only Padim and STFPM models are optimized. It is likely that other models would work with NNCF; however, we do not guarantee that the accuracy will not drop significantly.\n", - "\n", - "### 2.1. Padim Model\n", - "To optimize the Padim model for inference, we need to add NNCF configurations to the `optimization` section of the [config file](https://github.com/openvinotoolkit/anomalib/blob/main/anomalib/models/padim/config.yaml#L60). The following configurations are added to the config file:\n", - "\n", - "```yaml\n", - "optimization:\n", - " export_type: null # options: torch, onnx, openvino\n", - " nncf:\n", - " apply: true\n", - " input_info:\n", - " sample_size: [1, 3, 256, 256]\n", - " compression:\n", - " algorithm: quantization\n", - " preset: mixed\n", - " initializer:\n", - " range:\n", - " num_init_samples: 250\n", - " batchnorm_adaptation:\n", - " num_bn_adaptation_samples: 250\n", - "```\n", - "\n", - "After updating the `config.yaml` file, `config` could be reloaded and the model could be trained with NNCF enabled. Alternatively, we could manually add these NNCF settings to the `config` dictionary here. Since we already have the `config` dictionary, we will choose the latter option, and manually add the NNCF configs." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "config[\"optimization\"][\"nncf\"] = {\n", - " \"apply\": True,\n", - " \"input_info\": {\"sample_size\": [1, 3, 256, 256]},\n", - " \"compression\": {\n", - " \"algorithm\": \"quantization\",\n", - " \"preset\": \"mixed\",\n", - " \"initializer\": {\"range\": {\"num_init_samples\": 250}, \"batchnorm_adaptation\": {\"num_bn_adaptation_samples\": 250}},\n", - " },\n", - "}" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have updated the config with the NNCF settings, we could train and tests the NNCF model that will be optimized via int8 quantization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "datamodule = get_datamodule(config)\n", - "model = get_model(config)\n", - "callbacks = get_callbacks(config)\n", - "\n", - "# start training\n", - "engine = Engine(**config.trainer, callbacks=callbacks)\n", - "engine.fit(model=model, datamodule=datamodule)\n", - "int8_results = engine.test(model=model, datamodule=datamodule)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[{'pixel_F1Score': 0.7241847515106201, 'pixel_AUROC': 0.9831862449645996, 'image_F1Score': 0.9921259880065918, 'image_AUROC': 0.9960317611694336}]\n" - ] - } - ], - "source": [ - "print(fp32_results)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[{'pixel_F1Score': 0.7164928913116455, 'pixel_AUROC': 0.9731722474098206, 'image_F1Score': 0.9841269850730896, 'image_AUROC': 0.9904761910438538}]\n" - ] - } - ], - "source": [ - "print(int8_results)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As can be seen above, there is a slight performance drop in the accuracy of the model. However, the model is now ready to be optimized for inference. We could now use `benchmark_app` to compute the throughput and latency of the fp32 and int8 models and compare the results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check the throughput and latency performance of the fp32 model.\n", - "!benchmark_app -m results/padim/mvtec/bottle/run/onnx/model.onnx -t 10" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check the throughput and latency performance of the int8 model.\n", - "!benchmark_app -m results/padim/mvtec/bottle/run/compressed/model_nncf.onnx -t 10" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have observed approximately 30.1% performance improvement in the throughput and latency of the int8 model compared to the fp32 model. This is a significant performance improvement, which could be achieved with 6.94% drop pixel F1-Score.\n", - "\n", - "### 2.2. STFPM Model\n", - "Same steps in 2.1 could be followed to optimize the STFPM model for inference. The only difference is that the `config.yaml` file for STFPM model, located [here](https://github.com/openvinotoolkit/anomalib/blob/main/anomalib/models/stfpm/config.yaml#L67), should be updated with the following:\n", - "\n", - "```yaml\n", - "optimization:\n", - " export_type: null # options: torch, onnx, openvino\n", - " nncf:\n", - " apply: true\n", - " input_info:\n", - " sample_size: [1, 3, 256, 256]\n", - " compression:\n", - " algorithm: quantization\n", - " preset: mixed\n", - " initializer:\n", - " range:\n", - " num_init_samples: 250\n", - " batchnorm_adaptation:\n", - " num_bn_adaptation_samples: 250\n", - " ignored_scopes:\n", - " - \"{re}.*__pow__.*\"\n", - " update_config:\n", - " hyperparameter_search:\n", - " parameters:\n", - " lr:\n", - " min: 1e-4\n", - " max: 1e-2\n", - "```\n", - "This is to ensure that we achieve the best accuracy vs throughput trade-off." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "anomalib", - "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.8.13" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "ae223df28f60859a2f400fae8b3a1034248e0a469f5599fd9a89c32908ed7a84" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the Working Directory\n", + "This cell is to ensure we change the directory to anomalib source code to have access to the datasets and config files. We assume that you already went through `001_getting_started.ipynb` and install the required packages." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from pathlib import Path\n", + "\n", + "from git.repo import Repo\n", + "\n", + "current_directory = Path.cwd()\n", + "if current_directory.name == \"400_openvino\":\n", + " # On the assumption that, the notebook is located in\n", + " # ~/anomalib/notebooks/400_openvino/\n", + " root_directory = current_directory.parent.parent\n", + "elif current_directory.name == \"anomalib\":\n", + " # This means that the notebook is run from the main anomalib directory.\n", + " root_directory = current_directory\n", + "else:\n", + " # Otherwise, we'll need to clone the anomalib repo to the `current_directory`\n", + " repo = Repo.clone_from(url=\"https://github.com/openvinotoolkit/anomalib.git\", to_path=current_directory)\n", + " root_directory = current_directory / \"anomalib\"\n", + "\n", + "os.chdir(root_directory)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# int-8 Model Quantization via NNCF\n", + "It is possible to use Neural Network Compression Framework ([NNCF](https://github.com/openvinotoolkit/nncf)) with anomalib for inference optimization in [OpenVINO](https://docs.openvino.ai/latest/index.html) with minimal accuracy drop.\n", + "\n", + "This notebook demonstrates how NNCF is enabled in anomalib to optimize the model for inference. Before diving into the details, let's first train a model using the standard Torch training loop.\n", + "\n", + "## 1. Standard Training without NNCF\n", + "To train model without NNCF, we use the standard training loop. We use the same training loop as in the [Getting Started Notebook](https://github.com/openvinotoolkit/anomalib/blob/main/notebooks/000_getting_started/001_getting_started.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from anomalib.config import get_configurable_parameters\n", + "from anomalib.data import get_datamodule\n", + "from anomalib.engine import Engine\n", + "from anomalib.models import get_model\n", + "from anomalib.utils.callbacks import get_callbacks" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Configuration\n", + "Similar to the [Getting Started Notebook](https://github.com/openvinotoolkit/anomalib/blob/main/notebooks/000_getting_started/001_getting_started.ipynb), we will start with the [PADIM](https://github.com/openvinotoolkit/anomalib/tree/main/anomalib/models/padim) model. We follow the standard training loop, where we first import the config file, with which we import datamodule, model, callbacks and trainer, respectively." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "MODEL = \"padim\" # 'padim', 'stfpm'\n", + "CONFIG_PATH = f\"src/anomalib/models/{MODEL}/config.yaml\"\n", + "\n", + "config = get_configurable_parameters(config_path=CONFIG_PATH)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we will run OpenVINO's `benchmark_app` on the model, which requires the model to be in the ONNX format. Therefore, we set the `export_type` flag to `onnx` in the `optimization` [config file](https://github.com/openvinotoolkit/anomalib/blob/main/anomalib/models/padim/config.yaml#L61). Let's check the current config:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'export_type': None}\n" + ] + } + ], + "source": [ + "print(config[\"optimization\"])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned above, we need to explicitly state that we want onnx export mode to be able to run `benchmark_app` to compute the throughput and latency of the model." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "config[\"optimization\"][\"export_type\"] = \"onnx\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "datamodule = get_datamodule(config)\n", + "model = get_model(config)\n", + "callbacks = get_callbacks(config)\n", + "\n", + "# start training\n", + "engine = Engine(**config.trainer, callbacks=callbacks)\n", + "engine.fit(model=model, datamodule=datamodule)\n", + "fp32_results = engine.test(model=model, datamodule=datamodule)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Training with NNCF\n", + "The above results indicate the performance of the standard fp32 model. We will now use NNCF to optimize the model for inference using int8 quantization. Note, that NNCF and Anomalib integration is still in the experimental stage and currently only Padim and STFPM models are optimized. It is likely that other models would work with NNCF; however, we do not guarantee that the accuracy will not drop significantly.\n", + "\n", + "### 2.1. Padim Model\n", + "To optimize the Padim model for inference, we need to add NNCF configurations to the `optimization` section of the [config file](https://github.com/openvinotoolkit/anomalib/blob/main/anomalib/models/padim/config.yaml#L60). The following configurations are added to the config file:\n", + "\n", + "```yaml\n", + "optimization:\n", + " export_type: null # options: torch, onnx, openvino\n", + " nncf:\n", + " apply: true\n", + " input_info:\n", + " sample_size: [1, 3, 256, 256]\n", + " compression:\n", + " algorithm: quantization\n", + " preset: mixed\n", + " initializer:\n", + " range:\n", + " num_init_samples: 250\n", + " batchnorm_adaptation:\n", + " num_bn_adaptation_samples: 250\n", + "```\n", + "\n", + "After updating the `config.yaml` file, `config` could be reloaded and the model could be trained with NNCF enabled. Alternatively, we could manually add these NNCF settings to the `config` dictionary here. Since we already have the `config` dictionary, we will choose the latter option, and manually add the NNCF configs." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "config[\"optimization\"][\"nncf\"] = {\n", + " \"apply\": True,\n", + " \"input_info\": {\"sample_size\": [1, 3, 256, 256]},\n", + " \"compression\": {\n", + " \"algorithm\": \"quantization\",\n", + " \"preset\": \"mixed\",\n", + " \"initializer\": {\"range\": {\"num_init_samples\": 250}, \"batchnorm_adaptation\": {\"num_bn_adaptation_samples\": 250}},\n", + " },\n", + "}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have updated the config with the NNCF settings, we could train and tests the NNCF model that will be optimized via int8 quantization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "datamodule = get_datamodule(config)\n", + "model = get_model(config)\n", + "callbacks = get_callbacks(config)\n", + "\n", + "# start training\n", + "engine = Engine(**config.trainer, callbacks=callbacks)\n", + "engine.fit(model=model, datamodule=datamodule)\n", + "int8_results = engine.test(model=model, datamodule=datamodule)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'pixel_F1Score': 0.7241847515106201, 'pixel_AUROC': 0.9831862449645996, 'image_F1Score': 0.9921259880065918, 'image_AUROC': 0.9960317611694336}]\n" + ] + } + ], + "source": [ + "print(fp32_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'pixel_F1Score': 0.7164928913116455, 'pixel_AUROC': 0.9731722474098206, 'image_F1Score': 0.9841269850730896, 'image_AUROC': 0.9904761910438538}]\n" + ] + } + ], + "source": [ + "print(int8_results)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As can be seen above, there is a slight performance drop in the accuracy of the model. However, the model is now ready to be optimized for inference. We could now use `benchmark_app` to compute the throughput and latency of the fp32 and int8 models and compare the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Check the throughput and latency performance of the fp32 model.\n", + "!benchmark_app -m results/padim/mvtec/bottle/run/onnx/model.onnx -t 10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Check the throughput and latency performance of the int8 model.\n", + "!benchmark_app -m results/padim/mvtec/bottle/run/compressed/model_nncf.onnx -t 10" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have observed approximately 30.1% performance improvement in the throughput and latency of the int8 model compared to the fp32 model. This is a significant performance improvement, which could be achieved with 6.94% drop pixel F1-Score.\n", + "\n", + "### 2.2. STFPM Model\n", + "Same steps in 2.1 could be followed to optimize the STFPM model for inference. The only difference is that the `config.yaml` file for STFPM model, located [here](https://github.com/openvinotoolkit/anomalib/blob/main/anomalib/models/stfpm/config.yaml#L67), should be updated with the following:\n", + "\n", + "```yaml\n", + "optimization:\n", + " export_type: null # options: torch, onnx, openvino\n", + " nncf:\n", + " apply: true\n", + " input_info:\n", + " sample_size: [1, 3, 256, 256]\n", + " compression:\n", + " algorithm: quantization\n", + " preset: mixed\n", + " initializer:\n", + " range:\n", + " num_init_samples: 250\n", + " batchnorm_adaptation:\n", + " num_bn_adaptation_samples: 250\n", + " ignored_scopes:\n", + " - \"{re}.*__pow__.*\"\n", + " update_config:\n", + " hyperparameter_search:\n", + " parameters:\n", + " lr:\n", + " min: 1e-4\n", + " max: 1e-2\n", + "```\n", + "This is to ensure that we achieve the best accuracy vs throughput trade-off." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "anomalib", + "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.8.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "ae223df28f60859a2f400fae8b3a1034248e0a469f5599fd9a89c32908ed7a84" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/notebooks/500_use_cases/501_dobot/501a_training_a_model_with_cubes_from_a_robotic_arm.ipynb b/notebooks/500_use_cases/501_dobot/501a_training_a_model_with_cubes_from_a_robotic_arm.ipynb index 3022827c8f..ca7b97e67c 100644 --- a/notebooks/500_use_cases/501_dobot/501a_training_a_model_with_cubes_from_a_robotic_arm.ipynb +++ b/notebooks/500_use_cases/501_dobot/501a_training_a_model_with_cubes_from_a_robotic_arm.ipynb @@ -141,8 +141,8 @@ } ], "source": [ - "from anomalib.data import Folder\n", "from anomalib import TaskType\n", + "from anomalib.data import Folder\n", "\n", "datamodule = Folder(\n", " name=\"cubes\",\n", @@ -646,9 +646,10 @@ } ], "source": [ - "from anomalib.utils.visualization.image import ImageVisualizer, VisualizationMode\n", "from PIL import Image\n", "\n", + "from anomalib.utils.visualization.image import ImageVisualizer, VisualizationMode\n", + "\n", "visualizer = ImageVisualizer(mode=VisualizationMode.FULL, task=TaskType.CLASSIFICATION)\n", "output_image = visualizer.visualize_image(predictions)\n", "Image.fromarray(output_image)" diff --git a/notebooks/500_use_cases/501_dobot/501b_inference_with_a_robotic_arm.ipynb b/notebooks/500_use_cases/501_dobot/501b_inference_with_a_robotic_arm.ipynb index 546da666e7..236b3ccc56 100644 --- a/notebooks/500_use_cases/501_dobot/501b_inference_with_a_robotic_arm.ipynb +++ b/notebooks/500_use_cases/501_dobot/501b_inference_with_a_robotic_arm.ipynb @@ -58,18 +58,20 @@ "\n", "# Anomalib imports\n", "from __future__ import annotations\n", - "from typing import TYPE_CHECKING\n", + "\n", "import sys\n", "import time # time library\n", "from datetime import datetime\n", "from pathlib import Path\n", "from threading import Thread\n", + "from typing import TYPE_CHECKING\n", "\n", "if TYPE_CHECKING:\n", " import numpy as np\n", "\n", "# importing required libraries\n", "import cv2 # OpenCV library\n", + "\n", "from anomalib.deploy import OpenVINOInferencer" ] }, diff --git a/notebooks/600_loggers/601_mlflow_logging.ipynb b/notebooks/600_loggers/601_mlflow_logging.ipynb index 24c32b9c34..1d37c03592 100644 --- a/notebooks/600_loggers/601_mlflow_logging.ipynb +++ b/notebooks/600_loggers/601_mlflow_logging.ipynb @@ -129,7 +129,7 @@ "metadata": {}, "outputs": [], "source": [ - "#!mlflow server" + "# !mlflow server" ] }, { @@ -175,15 +175,17 @@ "metadata": {}, "outputs": [], "source": [ - "from anomalib.data import MVTec\n", + "import warnings\n", + "\n", + "from lightning.pytorch.callbacks import EarlyStopping\n", + "\n", "from anomalib import TaskType\n", "from anomalib.callbacks.checkpoint import ModelCheckpoint\n", - "from lightning.pytorch.callbacks import EarlyStopping\n", - "from anomalib.models import Fastflow\n", - "from anomalib.loggers import AnomalibMLFlowLogger\n", + "from anomalib.data import MVTec\n", "from anomalib.engine import Engine\n", + "from anomalib.loggers import AnomalibMLFlowLogger\n", + "from anomalib.models import Fastflow\n", "\n", - "import warnings\n", "warnings.filterwarnings(\"ignore\")" ] }, @@ -1044,7 +1046,7 @@ " pixel_metrics=\"AUROC\",\n", " accelerator=\"auto\",\n", " devices=1,\n", - " logger=mlflow_logger, # Logger is set here\n", + " logger=mlflow_logger, # Logger is set here\n", " **kwargs,\n", ")" ] diff --git a/notebooks/700_metrics/701a_aupimo.ipynb b/notebooks/700_metrics/701a_aupimo.ipynb new file mode 100644 index 0000000000..5c5497b3b8 --- /dev/null +++ b/notebooks/700_metrics/701a_aupimo.ipynb @@ -0,0 +1,543 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AUPIMO\n", + "\n", + "Basic usage of the metric AUPIMO (pronounced \"a-u-pee-mo\")." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# What is AUPIMO?\n", + "\n", + "The `Area Under the Per-Image Overlap [curve]` (AUPIMO) is a metric of recall (higher is better) designed for visual anomaly detection.\n", + "\n", + "Inspired by the [ROC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) and [PRO](https://link.springer.com/article/10.1007/s11263-020-01400-4) curves, \n", + "\n", + "> AUPIMO is the area under a curve of True Positive Rate (TPR or _recall_) as a function of False Positive Rate (FPR) restricted to a fixed range. \n", + "\n", + "But:\n", + "- the TPR (Y-axis) is *per-image* (1 image = 1 curve/score);\n", + "- the FPR (X-axis) considers the (average of) **normal** images only; \n", + "- the FPR (X-axis) is in log scale and its range is [1e-5, 1e-4]\\* (harder detection task!).\n", + "\n", + "\\* The score (the area under the curve) is normalized to be in [0, 1].\n", + "\n", + "AUPIMO can be interpreted as\n", + "\n", + "> average segmentation recall in an image given that the model (nearly) does not yield false positives in normal images.\n", + "\n", + "References in the last cell.\n", + "\n", + "![AUROC vs. AUPRO vs. AUPIMO](./roc_pro_pimo.svg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Install `anomalib` using `pip`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO(jpcbertoldo): replace by `pip install anomalib` when AUPIMO is released # noqa: TD003\n", + "%pip install ../.." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Change the directory to have access to the datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "# NOTE: Provide the path to the dataset root directory.\n", + "# If the datasets is not downloaded, it will be downloaded\n", + "# to this directory.\n", + "dataset_root = Path.cwd().parent.parent / \"datasets\" / \"MVTec\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import torch\n", + "from matplotlib import pyplot as plt\n", + "from matplotlib.ticker import MaxNLocator, PercentFormatter\n", + "from scipy import stats\n", + "\n", + "from anomalib import TaskType\n", + "from anomalib.data import MVTec\n", + "from anomalib.engine import Engine\n", + "from anomalib.metrics import AUPIMO\n", + "from anomalib.models import Padim" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Module\n", + "\n", + "We will use dataset Leather from MVTec AD. \n", + "\n", + "> See the notebooks below for more details on datamodules. \n", + "> [github.com/openvinotoolkit/anomalib/tree/main/notebooks/100_datamodules](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/100_datamodules)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "task = TaskType.SEGMENTATION\n", + "datamodule = MVTec(\n", + " root=dataset_root,\n", + " category=\"leather\",\n", + " image_size=256,\n", + " train_batch_size=32,\n", + " eval_batch_size=32,\n", + " num_workers=8,\n", + " task=task,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model\n", + "\n", + "We will use `PaDiM` (performance is not the best, but it is fast to train).\n", + "\n", + "> See the notebooks below for more details on models. \n", + "> [github.com/openvinotoolkit/anomalib/tree/main/notebooks/200_models](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/200_models)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instantiate the model." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "model = Padim(\n", + " # only use one layer to speed it up\n", + " layers=[\"layer1\"],\n", + " n_features=64,\n", + " backbone=\"resnet18\",\n", + " pre_trained=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Average AUPIMO (Basic)\n", + "\n", + "The easiest way to use AUPIMO is via the collection of pixel metrics in the engine.\n", + "\n", + "By default, the average AUPIMO is calculated." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "engine = Engine(\n", + " pixel_metrics=\"AUPIMO\", # others can be added\n", + " accelerator=\"auto\", # \\<\"cpu\", \"gpu\", \"tpu\", \"ipu\", \"hpu\", \"auto\">,\n", + " devices=1,\n", + " logger=False,\n", + ")\n", + "engine.fit(datamodule=datamodule, model=model)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "F1Score class exists for backwards compatibility. It will be removed in v1.1. Please use BinaryF1Score from torchmetrics instead\n", + "Metric `AUPIMO` will save all targets and predictions in buffer. For large datasets this may lead to large memory footprint.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "880e325e4e4842b2b679340ca8007849", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Testing: | | 0/? [00:00โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n", + "โ”ƒ Test metric โ”ƒ DataLoader 0 โ”ƒ\n", + "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n", + "โ”‚ image_AUROC โ”‚ 0.9887908697128296 โ”‚\n", + "โ”‚ image_F1Score โ”‚ 0.9726775884628296 โ”‚\n", + "โ”‚ pixel_AUPIMO โ”‚ 0.7428419829089654 โ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n", + "\n" + ], + "text/plain": [ + "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“\n", + "โ”ƒ\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0mโ”ƒ\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0mโ”ƒ\n", + "โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ\n", + "โ”‚\u001b[36m \u001b[0m\u001b[36m image_AUROC \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 0.9887908697128296 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", + "โ”‚\u001b[36m \u001b[0m\u001b[36m image_F1Score \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 0.9726775884628296 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", + "โ”‚\u001b[36m \u001b[0m\u001b[36m pixel_AUPIMO \u001b[0m\u001b[36m \u001b[0mโ”‚\u001b[35m \u001b[0m\u001b[35m 0.7428419829089654 \u001b[0m\u001b[35m \u001b[0mโ”‚\n", + "โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[{'pixel_AUPIMO': 0.7428419829089654,\n", + " 'image_AUROC': 0.9887908697128296,\n", + " 'image_F1Score': 0.9726775884628296}]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# will output the AUPIMO score on the test set\n", + "engine.test(datamodule=datamodule, model=model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Individual AUPIMO Scores (Detailed)\n", + "\n", + "AUPIMO assigns one recall score per anomalous image in the dataset.\n", + "\n", + "It is possible to access each of the individual AUPIMO scores and look at the distribution." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Collect the predictions and the ground truth." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ckpt_path is not provided. Model weights will not be loaded.\n", + "F1Score class exists for backwards compatibility. It will be removed in v1.1. Please use BinaryF1Score from torchmetrics instead\n", + "Metric `AUPIMO` will save all targets and predictions in buffer. For large datasets this may lead to large memory footprint.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e8116b80da39406e966c2099ecb2fdb1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Predicting: | | 0/? [00:00" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.hist(aupimo_result.aupimos.numpy(), bins=np.linspace(0, 1, 11), edgecolor=\"black\")\n", + "ax.set_ylabel(\"Count (number of images)\")\n", + "ax.yaxis.set_major_locator(MaxNLocator(5, integer=True))\n", + "ax.set_xlim(0, 1)\n", + "ax.set_xlabel(\"AUPIMO [%]\")\n", + "ax.xaxis.set_major_formatter(PercentFormatter(1))\n", + "ax.grid()\n", + "ax.set_title(\"AUPIMO distribution\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cite Us\n", + "\n", + "AUPIMO was developed during Google Summer of Code 2023 (GSoC 2023) with the `anomalib` team from OpenVINO Toolkit.\n", + "\n", + "Our work was accepted to the British Machine Vision Conference 2024 (BMVC 2024).\n", + "\n", + "```bibtex\n", + "@misc{bertoldo2024aupimo,\n", + " title={{AUPIMO: Redefining Visual Anomaly Detection Benchmarks with High Speed and Low Tolerance}}, \n", + " author={Joao P. C. Bertoldo and Dick Ameln and Ashwin Vaidya and Samet Akรงay},\n", + " year={2024},\n", + " eprint={2401.01984},\n", + " archivePrefix={arXiv},\n", + " primaryClass={cs.CV},\n", + " url={https://arxiv.org/abs/2401.01984}, \n", + "}\n", + "```\n", + "\n", + "Paper on arXiv: [arxiv.org/abs/2401.01984](https://arxiv.org/abs/2401.01984) (accepted to BMVC 2024)\n", + "\n", + "Medium post: [medium.com/p/c653ac30e802](https://medium.com/p/c653ac30e802)\n", + "\n", + "Official repository: [github.com/jpcbertoldo/aupimo](https://github.com/jpcbertoldo/aupimo) (numpy-only API and numba-accelerated versions available)\n", + "\n", + "GSoC 2023 page: [summerofcode.withgoogle.com/archive/2023/projects/SPMopugd](https://summerofcode.withgoogle.com/archive/2023/projects/SPMopugd)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "anomalib-dev", + "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.10.14" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/700_metrics/701b_aupimo_advanced_i.ipynb b/notebooks/700_metrics/701b_aupimo_advanced_i.ipynb new file mode 100644 index 0000000000..a785075060 --- /dev/null +++ b/notebooks/700_metrics/701b_aupimo_advanced_i.ipynb @@ -0,0 +1,1433 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AUPIMO\n", + "\n", + "Advance use cases of the metric AUPIMO (pronounced \"a-u-pee-mo\").\n", + "\n", + "> For basic usage, please check the notebook [701a_aupimo.ipynb](./701a_aupimo.ipynb).\n", + "\n", + "Includes:\n", + "- selection of test representative samples for qualitative analysis\n", + "- visualization of the AUPIMO metric with heatmaps" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# What is AUPIMO?\n", + "\n", + "The `Area Under the Per-Image Overlap [curve]` (AUPIMO) is a metric of recall (higher is better) designed for visual anomaly detection.\n", + "\n", + "Inspired by the [ROC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) and [PRO](https://link.springer.com/article/10.1007/s11263-020-01400-4) curves, \n", + "\n", + "> AUPIMO is the area under a curve of True Positive Rate (TPR or _recall_) as a function of False Positive Rate (FPR) restricted to a fixed range. \n", + "\n", + "But:\n", + "- the TPR (Y-axis) is *per-image* (1 image = 1 curve/score);\n", + "- the FPR (X-axis) considers the (average of) **normal** images only; \n", + "- the FPR (X-axis) is in log scale and its range is [1e-5, 1e-4]\\* (harder detection task!).\n", + "\n", + "\\* The score (the area under the curve) is normalized to be in [0, 1].\n", + "\n", + "AUPIMO can be interpreted as\n", + "\n", + "> average segmentation recall in an image given that the model (nearly) does not yield false positives in normal images.\n", + "\n", + "References in the last cell.\n", + "\n", + "![AUROC vs. AUPRO vs. AUPIMO](./roc_pro_pimo.svg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Install `anomalib` using `pip`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO(jpcbertoldo): replace by `pip install anomalib` when AUPIMO is released # noqa: TD003\n", + "%pip install ../.." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Change the directory to have access to the datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "# NOTE: Provide the path to the dataset root directory.\n", + "# If the datasets is not downloaded, it will be downloaded\n", + "# to this directory.\n", + "dataset_root = Path.cwd().parent.parent / \"datasets\" / \"MVTec\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Imports" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import cv2\n", + "import matplotlib as mpl\n", + "import numpy as np\n", + "import pandas as pd\n", + "import torch\n", + "from matplotlib import pyplot as plt\n", + "from matplotlib.ticker import PercentFormatter\n", + "from scipy import stats\n", + "\n", + "from anomalib import TaskType\n", + "from anomalib.data import MVTec\n", + "from anomalib.data.utils import read_image\n", + "from anomalib.engine import Engine\n", + "from anomalib.metrics import AUPIMO\n", + "from anomalib.models import Padim" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option(\"display.float_format\", \"{:.2f}\".format)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basics\n", + "\n", + "This part was covered in the notebook [701a_aupimo.ipynb](./701a_aupimo.ipynb), so we'll not discuss it here.\n", + "\n", + "It will train a model and evaluate it using AUPIMO.\n", + "We will use dataset Leather from MVTec AD with `PaDiM` (performance is not the best, but it is fast to train).\n", + "\n", + "> See the notebooks below for more details on:\n", + "> - datamodules: [100_datamodules](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/100_datamodules);\n", + "> - models: [200_models](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/200_models)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# train the model\n", + "task = TaskType.SEGMENTATION\n", + "datamodule = MVTec(\n", + " root=dataset_root,\n", + " category=\"leather\",\n", + " image_size=256,\n", + " train_batch_size=32,\n", + " eval_batch_size=32,\n", + " num_workers=8,\n", + " task=task,\n", + ")\n", + "model = Padim(\n", + " # only use one layer to speed it up\n", + " layers=[\"layer1\"],\n", + " n_features=64,\n", + " backbone=\"resnet18\",\n", + " pre_trained=True,\n", + ")\n", + "engine = Engine(\n", + " pixel_metrics=\"AUPIMO\", # others can be added\n", + " accelerator=\"auto\", # \\<\"cpu\", \"gpu\", \"tpu\", \"ipu\", \"hpu\", \"auto\">,\n", + " devices=1,\n", + " logger=False,\n", + ")\n", + "engine.fit(datamodule=datamodule, model=model)\n", + "# infer\n", + "predictions = engine.predict(dataloaders=datamodule.test_dataloader(), model=model, return_predictions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compute AUPIMO" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Metric `AUPIMO` will save all targets and predictions in buffer. For large datasets this may lead to large memory footprint.\n" + ] + } + ], + "source": [ + "aupimo = AUPIMO(\n", + " # with `False` all the values are returned in a dataclass\n", + " return_average=False,\n", + ")\n", + "\n", + "anomaly_maps = []\n", + "masks = []\n", + "labels = []\n", + "image_paths = []\n", + "for batch in predictions:\n", + " anomaly_maps.append(batch_anomaly_maps := batch[\"anomaly_maps\"].squeeze(dim=1))\n", + " masks.append(batch_masks := batch[\"mask\"])\n", + " labels.append(batch[\"label\"])\n", + " image_paths.append(batch[\"image_path\"])\n", + " aupimo.update(anomaly_maps=batch_anomaly_maps, masks=batch_masks)\n", + "\n", + "# list[list[str]] -> list[str]\n", + "image_paths = [item for sublist in image_paths for item in sublist]\n", + "anomaly_maps = torch.cat(anomaly_maps, dim=0)\n", + "masks = torch.cat(masks, dim=0)\n", + "labels = torch.cat(labels, dim=0)\n", + "\n", + "# `pimo_result` has the PIMO curves of each image\n", + "# `aupimo_result` has the AUPIMO values\n", + "# i.e. their Area Under the Curve (AUC)\n", + "pimo_result, aupimo_result = aupimo.compute()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Statistics and score distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MEAN\n", + "aupimo_result.aupimos[labels == 1].mean().item()=0.742841961578308\n", + "OTHER STATISTICS\n", + "DescribeResult(nobs=92, minmax=(0.0, 1.0), mean=0.742841961578308, variance=0.08757792704451817, skewness=-0.9285678601866055, kurtosis=-0.3299211772047075)\n" + ] + }, + { + "data": { + "image/png": "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KlXqqhdPnz17VpKuWXauuLI8LS3tmut8++23qlSpkv7+97/bxnx8fDR48OAb5g0ICND58+e1YsWKG657LREREXkuRZI0ePBguyMuw4YNU+nSpfXtt9/mO0NefPvttwoJCVHv3r1tY+7u7nrqqad07tw5rV271m79Xr162UqRJNuRvYK85gso7ihGgItkZ2dr3rx5at26tfbv36+9e/dq7969uueee5ScnKyVK1c6vM2/nrYJDw/XihUr9P3332vdunU6duyYlixZogoVKuR5m4888ohSU1O1dOlSxcbGqnPnzlctP1fGrhSka8lLgTp48KBq1KiR6/Pc6JSWJD355JO6/fbb1bFjR1WpUkUDBgzQsmXLbvi+/xUREeHQ+n99rIGvr68qVapU6LfcHzx4UDVr1sx1p9yVU28HDx60Gw8LC7N7faUk/fV6KOBWxqk0wEVWrVqlo0ePat68eZo3b16u5bGxsWrfvr2ky7fOS7LdHfVX6enpdutdUaZMGUVGRt5UzkqVKqlVq1Z65513tH79en311VdXXc/f31+VKlXSr7/+et3t/frrr7rtttvk5+d3U7mupWLFitq6dauWL1+upUuXaunSpYqJidHjjz+e66Lka/H29i6UbFdTEEcG8+pqpxaly3feAbiMI0aAi8TGxqpixYqaP39+rp/evXvr66+/thWhoKAg+fj4KDEx8arbSkxMlI+Pj0NHghzx6KOP6scff5Sfn586dep0zfU6d+6s/fv3a926dVdd/uOPP+rAgQM3vJ6latWq+uOPP3L9C/tan/+vPDw81KVLF02bNk1//PGHhgwZok8//VR79+6VlPvI2s3as2eP3etz587p6NGjdnfLlStXTikpKXbrXbx4UUePHrUbcyRb1apVtWfPnlzPcdq9e7dtOQDHUIwAF8jIyNCCBQvUuXNn/f3vf8/1M2LECJ09e1aLFi2SdPm/9Nu3b6/FixcrKSnJbltJSUlavHix2rdvf80jAjfr73//u8aNG6dp06Zd9zk6Y8aMkbe3t4YMGaJTp07ZLTt9+rSGDh0qHx8fjRkz5rr769Spk44cOWL3VO0rjwG4kb/u183NTQ0aNJAk2+3+ZcqUkaRcRSW/Zs2aZfdcqOnTp+vSpUvq2LGjbax69er64Ycfcr3vr0eMHMnWqVMnHTt2TJ9//rlt7NKlS5oyZYp8fX3VsmXL/Hwc4JbGqTTABa7clXWtO5aaNWtme9hjr169JEmvv/66mjVrprvvvluDBw9WeHi4Dhw4oFmzZslisej1118vtLz+/v5XfQbPX9WsWVOffPKJ+vTpo/r16+d68vXJkyc1d+5cVa9e/brbGTRokD788EM9/vjjSkhIUKVKlfSf//wnT3fSPfHEEzp9+rTatGmjKlWq6ODBg5oyZYruvPNO27U3d955p0qVKqU333xTqamp8vT0VJs2ba76CIK8uHjxotq2bauePXsqMTFR06ZN0/333283v0888YSGDh2q7t27q127dtq2bZuWL1+e6yifI9kGDx6smTNnql+/fkpISFB4eLi+/PJLrV+/Xu+9994NL4QHcBUGgNN16dLFeHl5mfPnz19znX79+hl3d3dz8uRJ29iuXbtMr169TMWKFU3p0qVNxYoVzSOPPGJ27dqV6/0tW7Y09erVu2GWvn37mjJlyjj83tWrVxtJZv78+bmW/frrr6Z3796mUqVKxt3d3YSEhJjevXub7du33zDPFQcPHjQPPvig8fHxMRUqVDCjRo0yy5YtM5LM6tWr7fJXrVrV9vrLL7807du3NxUrVjQeHh4mLCzMDBkyxBw9etRu+x999JGpVq2aKVWqlN02q1ataqKioq6aqWrVqqZv37621zExMUaSWbt2rRk8eLApV66c8fX1NX369DGnTp2ye292drZ5/vnnTYUKFYyPj4/p0KGD2bt3b65tXi9by5YtTcuWLe3WTU5ONv379zcVKlQwHh4epn79+iYmJsZunf379xtJ5u233871mSSZcePGXfXzArciizFcdQcAACBxjREAAIANxQgAAMCKYgQAAGBFMQIAALCiGAEAAFhRjAAAAKxK/AMec3JydOTIEZUtW7bAvwYAAAAUDmOMzp49q8qVK+f6ouTCVOKL0ZEjRxQaGurqGAAAIB8OHTqkKlWqOG1/Jb4YXXkk/v79+1W+fHkXp7m1ZWVl6bvvvlP79u3l7u7u6ji3NOaiaGE+ig7moug4ffq0IiIinP7VNiW+GF05fVa2bFn5+fm5OM2tLSsrSz4+PvLz8+MvHBdjLooW5qPoYC6KjitfzOzsy2C4+BoAAMCKYgQAAGBFMQIAALCiGAEAAFhRjAAAAKwoRgAAAFYUIwAAACuKEQAAgBXFCAAAwIpiBAAAYEUxAgAAsKIY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CoeLkcVi0QsvvKAxY8Zo7969OnfunOrWrStfX9/CyAcAAOA0DhejKzw8PFS2bFmVLVuWUgQAAEoEh68xunTpkl566SX5+/srPDxc4eHh8vf314svvqisrKzCyAgAAOAUDh8xGjlypBYsWKC33npLzZs3lyTFx8dr/PjxOnXqlKZPn17gIQEAAJzB4WIUFxenefPmqWPHjraxBg0aKDQ0VL1796YYAQCAYsvhU2menp4KDw/PNR4RESEPD4+CyAQAAOASDhejESNG6NVXX7V9R5okZWZm6rXXXtOIESMKNBwAAIAz5elUWrdu3exef//996pSpYoaNmwoSdq2bZsuXryotm3bFnxCAAAAJ8lTMfL397d73b17d7vXoaGhBZcIAADARfJUjGJiYgo7BwAAgMs5fI0RAABASeXw7fqnTp3Syy+/rNWrV+v48ePKycmxW3769OkCCwcAAOBMDhejxx57THv37tXAgQMVHBwsi8VSGLkAAACczuFi9OOPP2rdunW2O9IAAABKCoevMapdu7YyMjIKIwsAAIBLOVyMpk2bphdeeEFr167VqVOnlJaWZvcDAABQXDl8Ki0gIEBpaWlq06aN3bgxRhaLRdnZ2QUWDgAAwJkcLkZ9+vSRu7u74uLiuPgaAACUKA4Xox07duiXX35RrVq1CiMPAACAyzh8jVHjxo116NChwsgCAADgUg4fMRo5cqRGjRqlMWPGqH79+nJ3d7db3qBBgwILBwAA4EwOF6NevXpJkgYMGGAbs1gsXHwNAACKPYeL0f79+wsjBwAAgMs5fI1R1apVr/vjiEmTJqlJkyYqW7asKlasqK5duyoxMdFunQsXLmj48OEKDAyUr6+vunfvruTkZEdjAwAA3JDDR4w+/fTT6y5//PHH87yttWvXavjw4WrSpIkuXbqkf/7zn2rfvr127typMmXKSJKeeeYZffPNN5o/f778/f01YsQIdevWTevXr3c0OgAAwHU5XIxGjRpl9zorK0vp6eny8PCQj4+PQ8Vo2bJldq/nzJmjihUrKiEhQS1atFBqaqpmz56tuLg42wMlY2JiVKdOHf38889q1qyZo/EBAACuyeFidObMmVxje/bs0bBhwzRmzJibCpOamipJKl++vCQpISFBWVlZioyMtK1Tu3ZthYWFKT4+/qrFKDMzU5mZmbbXV76mJCsrS1lZWTeV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NHXqVIWHh8vLy0v33HOPNm7caFs2evRolS9fXqGhoYqNjbV73/z589WlSxdnxy0RJk2apCZNmqhs2bKqWLGiunbtqsTERLt1Lly4oOHDhyswMFC+vr7q3r273VPMT58+rS5dusjX11d33XWXfvnlF7v3Dx8+XO+8845TPk9J8sYbb8hisejpp5+2jTEXznP48GFFR0crMDBQ3t7eql+/vjZv3mxbbozRyy+/rEqVKsnb21uRkZHas2ePbXlmZqYee+wx+fn56fbbb9f3339vt/23335bI0eOdNrnKa6ys7P10ksvKSIiQt7e3qpevbpeffVVu+/dYi4Kzw8//KAuXbqocuXKslgsWrhwod3yG/3upct/L/Xp00d+fn4KCAjQwIEDde7cOdvyAwcOqEWLFipTpoxatGihAwcO2L2/c+fO+uqrrxwP79QvICkE8+bNMx4eHubjjz82v/32mxk0aJAJCAgwycnJZtGiRSY4ONhs2rTJxMXFGS8vL3PixAljjDEpKSmmZs2a5uDBgy7+BMVThw4dTExMjNmxY4fZunWr6dSpkwkLCzPnzp2zrTN06FATGhpqVq5caTZv3myaNWtm7r33Xtvy0aNHm5YtW5rExETz9NNPm0aNGtmWxcfHm0aNGplLly459XMVdxs3bjTh4eGmQYMGZtSoUbZx5sI5Tp8+bapWrWr69etnNmzYYPbt22eWL19u9u7da1vnjTfeMP7+/mbhwoVm27Zt5sEHHzQREREmIyPDGGPMBx98YOrUqWN27Nhh3n77bRMUFGRycnKMMcbs27fP1KxZ06Smprrk8xUnr732mgkMDDRLliwx+/fvN/Pnzze+vr7m/ffft63DXBSeb7/91rzwwgtmwYIFRpL5+uuv7Zbf6HdvjDEPPPCAadiwofn555/Njz/+aGrUqGF69+5tW96tWzfzyCOPmN9//9307NnTdO/e3bZs3rx5pkuXLvnKXuyLUdOmTc3w4cNtr7Ozs03lypXNpEmTzJtvvml69eplW1axYkWzceNGY4wxgwcPNpMnT3Z63pLq+PHjRpJZu3atMeZy8XR3dzfz58+3rbNr1y4jycTHxxtjjOnYsaOZPn26McaYnTt3Gh8fH2OMMRcvXjQNGzY0mzZtcvKnKN7Onj1ratasaVasWGFatmxpK0bMhfM8//zz5v7777/m8pycHBMSEmLefvtt21hKSorx9PQ0c+fONcYYM2zYMPP8888bY4xJT083kszx48eNMZf/g2TBggWF+AlKjqioKDNgwAC7sW7dupk+ffoYY5gLZ/prMcrL737nzp1Gkt3fPUuXLjUWi8UcPnzYGGNMnTp1zNKlS40xl4tY3bp1jTHGnDlzxtSoUcMkJSXlK2+xPpV28eJFJSQkKDIy0jbm5uamyMhIxcfHq2HDhtq8ebPOnDmjhIQEZWRkqEaNGlq3bp22bNmip556yoXpS5bU1FRJsn3ZX0JCgrKysuzmpnbt2goLC1N8fLwkqWHDhlq1apUuXbqk5cuXq0GDBpKkt956S61atVLjxo2d/CmKt+HDhysqKsrudy4xF860aNEiNW7cWD169FDFihV111136aOPPrIt379/v44dO2Y3F/7+/rrnnnvs5mLdunXKyMjQ8uXLValSJVWoUEGxsbHy8vLSww8/7PTPVRzde++9WrlypX7//XdJ0rZt27Ru3Tp17NhREnPhSnn53cfHxysgIMDu757IyEi5ublpw4YNki7Pz/fff6+cnBx99913tr+3xowZo+HDhys0NDR/AfNVp4qIw4cPG0nmp59+shsfM2aMadq0qTHGmHHjxpnq1aubO+64wyxYsMBkZmaaO+64w2zevNlMmTLF3H777ebee+81O3bscMVHKBGys7NNVFSUue+++2xjsbGxxsPDI9e6TZo0Mc8995wx5vJ/IfTu3duEhYWZFi1amN9++838/vvvpmbNmubkyZNmyJAhJiIiwvTo0cOkpKQ47fMUR3PnzjV33HGH7TD0/x4xYi6cx9PT03h6epqxY8eaLVu2mJkzZxovLy8zZ84cY4wx69evN5LMkSNH7N7Xo0cP07NnT2PM5aN0Tz75pAkPDzeNGzc2P/74ozl16pSpVq2aSUpKMi+88IKpXr26ad++vfnzzz+d/hmLi+zsbPP8888bi8ViSpcubSwWi3n99ddty5kL59Ffjhjl5Xf/2muvmdtvvz3XtoKCgsy0adOMMcb8+eefJioqyoSGhpqoqCjz559/mrVr15rGjRubU6dOmR49epiIiAgzZMgQk5mZmee8xeIrQW7G+PHjNX78eNvrCRMmKDIyUu7u7po4caK2b9+uJUuW6PHHH1dCQoLrghZjw4cP144dO7Ru3TqH3ufv76+4uDi7sTZt2ujtt99WbGys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PClJSk1N1QsvvKCpU6fm2k758uUVFBSU598JgKKDYgTgus6dO6fPP/9cw4YNU1RUlObMmXNT2wsICFBISIjuuOMOTZ8+XRkZGVqxYsU117/77rsVGhqqBQsW2MYWLFigsLAw3XXXXXbrDh8+XB4eHvruu+/UsmVLhYWFqWPHjvr+++91+PBhvfDCCw5l3bVrl1q1aqXGjRurd+/e8vPz0/79+yVJzz33nIYNG5arnAEo3ihGAK7riy++UO3atVWrVi1FR0fr448/VkF9xaK3t7ck6eLFi9ddb8CAAYqJibG9/vjjj9W/f3+7dU6fPq3ly5frySeftG33ipCQEPXp00eff/65Q9kbNmyozZs368yZM0pISFBGRoZq1KihdevWacuWLXrqqafyvC0AxQPFCMB1zZ49W9HR0ZKkBx54QKmpqVq7du1Nbzc9PV0vvviiSpUqpZYtW1533ejoaK1bt04HDx7UwYMHtX79elumK/bs2SNjjOrUqXPVbdSpU0dnzpzRiRMn8pyxQ4cOio6OVpMmTdSvXz998sknKlOmjIYNG6YZM2Zo+vTpqlWrlu677z799ttved4ugKKrtKsDACi6EhMTtXHjRn399deSLl+D06tXL82ePVutWrXK1zZ79+6tUqVKKSMjQ0FBQZo9e7YaNGhw3fcEBQXZTuMZYxQVFaUKFSpcdd2COpp1xfjx4zV+/Hjb6wkTJigyMlLu7u6aOHGitm/friVLlujxxx9XQkJCge4bgPNRjABc0+zZs3Xp0iVVrlzZNmaMkaenpz788EP5+/vLz89P0uWLkQMCAuzen5KSIn9/f7uxd999V5GRkfL393foAuUBAwZoxIgRknTVC55r1Kghi8WiXbt26eGHH861fNeuXSpXrtxNXRS9e/duffbZZ/rll1/08ccfq0WLFgoKClLPnj01YMAAnT17VmXLls339gG4HqfSAFzVpUuX9Omnn+qdd97R1q1bbT/btm1T5cqVNXfuXElSzZo15ebmlutoyb59+5Samqrbb7/dbjwkJEQ1atRwuKA88MADunjxorKystShQ4dcywMDA9WuXTtNmzbN7g42STp27JhiY2PVq1cvWSwWh/Z7hTFGQ4YM0eTJk+Xr66vs7GxlZWVJku1/s7Oz87VtAEUHR4wAXNWSJUt05swZDRw4MNdRn+7du2v27NkaOnSoypYtqyeeeELPPvusSpcurfr16+vQoUN6/vnn1axZM917770FkqdUqVLatWuX7c9X8+GHH+ree+9Vhw4dNHHiREVEROi3337TmDFjdNttt+m1117L9/7//e9/KygoyPbcovvuu0/jx4/Xzz//rKVLl6pu3bq5jpgBKH44YgTgqmbPnm075fVX3bt31+bNm/Xrr79Kkt5//3317dtXzz//vOrVq6d+/fqpQYMGWrx4cb6P0FyNn5+f7dTd1dSsWVObN29WtWrV1LNnT1WvXl2DBw9W69atFR8fr/Lly+drv8nJyXrttdf0wQcf2MaaNm2qZ599VlFRUfriiy/s7poDUHxZTEFfqQgAxdD48eO1cOHCAvsKjwMHDigiIkK//PKL7rzzzgLZJoDCxxEjALDavn27fH19NW3atJvaTseOHVWvXr0CSgXAmThiBAC6/IDIK18ZEhQUdNVTiHl1+PBh2wXgYWFh8vDwKJCMAAofxQgAAMCKU2kAAABWFCMAAAArihEAAIAVxQgAAMCKYgQAAGBFMQIAALCiGAEAAFhRjAAAAKwoRgAAAFb/D60PVy7Nlq5qAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the normal images have `nan` values because\n", + "# recall is not defined for them so we ignore them\n", + "print(f\"MEAN\\n{aupimo_result.aupimos[labels == 1].mean().item()=}\")\n", + "print(f\"OTHER STATISTICS\\n{stats.describe(aupimo_result.aupimos[labels == 1])}\")\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.hist(aupimo_result.aupimos[labels == 1].numpy(), bins=np.linspace(0, 1, 11), edgecolor=\"black\")\n", + "ax.set_ylabel(\"Count (number of images)\")\n", + "ax.set_xlim(0, 1)\n", + "ax.set_xlabel(\"AUPIMO [%]\")\n", + "ax.xaxis.set_major_formatter(PercentFormatter(1))\n", + "ax.grid()\n", + "ax.set_title(\"AUPIMO distribution\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Until here we just reproduded the notebook with the basic usage of AUPIMO." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Selecting Representative Samples for Qualitative Analysis\n", + "\n", + "Instead of cherry picking or inspecting the 92 samples from above, we'll try to choose them smartly.\n", + "\n", + "Our goal here is to select a handful of samples in a meaningful way.\n", + "\n", + "> Notice that a random selection from the distribution above would probably miss the worst cases.\n", + "\n", + "We will summarize this distribution with a boxplot, then select the samples corresponding to the statistics in it." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ERGR6jHwEBERkeox8BAREZHqMfAQERGR6jHwEBERkeox8BAREZHqMfAQERGR6jHwEBERkeox8BAREZHqMfAQERGR6jHwEBERkeox8BAREZHqMfAQERGR6jHwEBERkeox8BAREZHqMfAQERGR6jHwEBERkeox8BAREZHqMfAQERGR6jHwEBERkeox8BAREZHq6ZX1BIiInicxMRGZmZllPQ0iKgHm5uZwdXUt9XEZeIjotZaYmAg3N7eyngZRqbEz02CQlwG+j3mE6/ekrKfzSpw9e7bUQw8DDxG91vKv7CxfvhweHh5lPBuiV8847Sw8dg1Cj69+RraVusJ+XFwcgoKCyuSKLQMPEb0RPDw80KBBg7KeBtGrd00H2AV4uLsDDvXKejaqwU3LREREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6JR54srKycPToUWRlZZV010RERKQCcXFxpZ4TSjzwxMfHw8vLC/Hx8SXdNREREalAUFBQqecE3tIiIiIi1WPgISIiItVj4CEiIiLVY+AhIiIi1WPgISIiItVj4CEiIiLVY+AhIiIi1WPgISIiItVj4CEiIiLVY+AhIiIi1WPgISIiItVj4CEiIiLVY+AhIiIi1WPgISIiItXTK+kOs7OzAQBxcXEl3TURvYXy/5bk/20hojfX33+PS/t3usQDT3JyMgAgKCiopLsmordYcnIymjdvXtbTIKKXkJ8R8n8uzd/pEg88zs7OAIDly5fDw8OjpLsnordMXFwcgoKClL8tRPTm+vvvcWn/Tpd44DE2NgYAeHh4oEGDBiXdPRG9pfL/thDRm+vvv8el/TvNTctERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkeiUeeNzd3RETEwN3d/eS7pqIiIhUYPny5aWeE/RKukMTExM0aNCgpLslIiIilfDw8ICJiUmpjslbWkRERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8RERE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", + "text/plain": [ + "
" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(7, 2))\n", + "boxplot_data = ax.boxplot(\n", + " aupimo_result.aupimos[labels == 1].numpy(),\n", + " vert=False,\n", + " widths=0.4,\n", + ")\n", + "_ = ax.set_yticks([])\n", + "ax.set_xlim(0 - (eps := 2e-2), 1 + eps)\n", + "ax.xaxis.set_major_formatter(PercentFormatter(1))\n", + "ax.set_xlabel(\"AUPIMO [%]\")\n", + "ax.set_title(\"AUPIMO Scores Boxplot\")\n", + "num_images = (labels == 1).sum().item()\n", + "ax.annotate(\n", + " text=f\"Number of images: {num_images}\",\n", + " xy=(0.03, 0.95),\n", + " xycoords=\"axes fraction\",\n", + " xytext=(0, 0),\n", + " textcoords=\"offset points\",\n", + " annotation_clip=False,\n", + " verticalalignment=\"top\",\n", + ")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get the values in the boxplot (e.g., whiskers, quartiles, etc.), we're going to use `matplotlib`'s internal function `mpl.cbook.boxplot_stats()`." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['mean', 'iqr', 'cilo', 'cihi', 'whishi', 'whislo', 'fliers', 'q1', 'med', 'q3'])\n" + ] + } + ], + "source": [ + "boxplot_data = mpl.cbook.boxplot_stats(aupimo_result.aupimos[labels == 1].numpy())[0]\n", + "print(boxplot_data.keys())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll select 5 of those and find images in the dataset that match them." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value image_index\n", + "0 whislo 0.00 65\n", + "1 q1 0.53 58\n", + "2 med 0.89 63\n", + "3 q3 1.00 22\n", + "4 whishi 1.00 0\n" + ] + } + ], + "source": [ + "image_selection = []\n", + "\n", + "for key in [\"whislo\", \"q1\", \"med\", \"q3\", \"whishi\"]:\n", + " value = boxplot_data[key]\n", + " # find the image that is closest to the value of the statistic\n", + " # `[labels == 1]` is not used here so that the image's\n", + " # indexes are the same as the ones in the dataset\n", + " # we use `sort()` -- instead of `argmin()` -- so that\n", + " # the `nan`s are not considered (they are at the end)\n", + " closest_image_index = (aupimo_result.aupimos - value).abs().argsort()[0]\n", + " image_selection.append({\"statistic\": key, \"value\": value, \"image_index\": closest_image_index.item()})\n", + "\n", + "image_selection = pd.DataFrame(image_selection)\n", + "print(image_selection)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that they are sorted from the worst to the best AUPIMO score." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualizing the Representative Samples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's visualize what the heatmaps of these samples." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# will be used to normalize the anomaly maps to fit a colormap\n", + "global_vmin, global_vmax = torch.quantile(anomaly_maps, torch.tensor([0.02, 0.98]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, axes = plt.subplots(2, 5, figsize=(16, 7), layout=\"constrained\")\n", + "\n", + "for ax_column, (_, row) in zip(axes.T, image_selection.iterrows(), strict=False):\n", + " ax_above, ax_below = ax_column\n", + " image = cv2.resize(read_image(image_paths[row.image_index]), (256, 256))\n", + " anomaly_map = anomaly_maps[row.image_index].numpy()\n", + " mask = masks[row.image_index].squeeze().numpy()\n", + " ax_above.imshow(image)\n", + " ax_above.contour(mask, levels=[0.5], colors=\"magenta\", linewidths=1)\n", + " ax_below.imshow(image)\n", + " ax_below.imshow(anomaly_map, cmap=\"jet\", vmin=global_vmin, vmax=global_vmax, alpha=0.30)\n", + " ax_below.contour(mask, levels=[0.5], colors=\"magenta\", linewidths=1)\n", + " ax_above.set_title(f\"{row.statistic}: {row.value:.0%} AUPIMO image {row.image_index}\")\n", + "\n", + "for ax in axes.flatten():\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "axes[0, 0].set_ylabel(\"Image + GT Mask\")\n", + "axes[1, 0].set_ylabel(\"Image + GT Mask + Anomaly Map\")\n", + "fig.text(\n", + " 0.03,\n", + " -0.01,\n", + " \"Magenta: contours of the ground truth (GT) mask. \"\n", + " \"Anomaly maps colored in JET colormap with global (across all images) min-max normalization.\",\n", + " ha=\"left\",\n", + " va=\"top\",\n", + " fontsize=\"small\",\n", + " color=\"dimgray\",\n", + ")\n", + "\n", + "fig.suptitle(\"Anomalous samples from AUPIMO boxplot's statistics\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The heatmaps give the impression that all samples are properly detected, right?\n", + "\n", + "Notice that the lowest AUPIMO (left) is 0, but the heatmap is (contradictorily) showing a good detection.\n", + "\n", + "Why is that?\n", + "\n", + "These heatmaps are colored with a gradient from the minimum to the maximum value in all the heatmaps from the test set.\n", + "\n", + "This is not taking into account the contraints (FPR restriction) in AUPIMO.\n", + "\n", + "Let's compare with the heatmaps from some normal images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, axes = plt.subplots(2, 5, figsize=(16, 7), layout=\"constrained\")\n", + "\n", + "# random selection of normal images\n", + "rng = np.random.default_rng(42)\n", + "normal_images_selection = rng.choice(np.where(labels == 0)[0], size=5, replace=False)\n", + "\n", + "for ax_column, index in zip(axes.T, normal_images_selection, strict=False):\n", + " ax_above, ax_below = ax_column\n", + " image = cv2.resize(read_image(image_paths[index]), (256, 256))\n", + " anomaly_map = anomaly_maps[index].numpy()\n", + " ax_above.imshow(image)\n", + " ax_below.imshow(image)\n", + " ax_below.imshow(anomaly_map, cmap=\"jet\", vmin=global_vmin, vmax=global_vmax, alpha=0.30)\n", + " ax_above.set_title(f\"image {index}\")\n", + "\n", + "for ax in axes.flatten():\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "axes[0, 0].set_ylabel(\"Image\")\n", + "axes[1, 0].set_ylabel(\"Image + Anomaly Map\")\n", + "fig.text(\n", + " 0.03,\n", + " -0.01,\n", + " \"Anomaly maps colored in JET colormap with global (across all images) min-max normalization.\",\n", + " ha=\"left\",\n", + " va=\"top\",\n", + " fontsize=\"small\",\n", + " color=\"dimgray\",\n", + ")\n", + "\n", + "fig.suptitle(\"Normal samples (test set)\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice how the normal images also have high anomaly scores (\"hot\" colors) although there is no anomaly.\n", + "\n", + "As a matter of fact, the heatmaps can barely differentiate between some normal and anomalous images.\n", + "\n", + "See the two heatmaps below for instance." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, axes = plt.subplots(1, 2, figsize=(7, 4), layout=\"constrained\")\n", + "\n", + "for ax, index in zip(axes.flatten(), [87, 65], strict=False):\n", + " image = cv2.resize(read_image(image_paths[index]), (256, 256))\n", + " anomaly_map = anomaly_maps[index].numpy()\n", + " mask = masks[index].squeeze().numpy()\n", + " ax.imshow(image)\n", + " ax.contour(mask, levels=[0.5], colors=\"magenta\", linewidths=1)\n", + " ax.imshow(anomaly_map, cmap=\"jet\", vmin=global_vmin, vmax=global_vmax, alpha=0.30)\n", + " ax.set_title(f\"image {index}\")\n", + "\n", + "for ax in axes.flatten():\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "axes[0].set_title(f\"{axes[0].get_title()} (normal)\")\n", + "axes[1].set_title(f\"{axes[1].get_title()} (anomalous)\")\n", + "\n", + "fig.text(\n", + " 0.03,\n", + " -0.01,\n", + " \"Magenta: contours of the ground truth (GT) mask.\\n\"\n", + " \"Anomaly maps colored in JET colormap with global (across all images) min-max normalization.\",\n", + " ha=\"left\",\n", + " va=\"top\",\n", + " fontsize=\"small\",\n", + " color=\"dimgray\",\n", + ")\n", + "\n", + "fig.suptitle(\"Normal vs. Anomalous Samples\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One would expect image 65 (anomalous) to a 'hotter' heatmap than image 87 (normal), but it is the opposite.\n", + "\n", + "This shows that the model is not doing a great job." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualizing the AUPIMO on the Heatmaps\n", + "\n", + "We will create another visualization to link the heatmaps to AUPIMO.\n", + "\n", + "Recall that AUPIMO computes this integral (simplified):\n", + "\n", + "$$\n", + " \\int_{\\log(L)}^{\\log(U)} \n", + " \\operatorname{TPR}^{i}\\left( \\operatorname{FRP^{-1}}( z ) \\right)\n", + " \\, \n", + " \\mathrm{d}\\log(z) \n", + "$$\n", + "\n", + "The integration bounds -- $L$[ower] and $U$[pper] -- are FPR values.\n", + "\n", + "> More details about their meaning in the next notebook.\n", + "\n", + "We will leverage these two bounds to create a heatmap that shows them in a gradient like this:\n", + "\n", + "![Visualization of AUPIMO on the heatmaps](./pimo_viz.svg)\n", + "\n", + "If the anomaly score is\n", + "1. too low (below the lowest threshold of AUPIMO) $\\rightarrow$ not shown; \n", + "2. between the bounds $\\rightarrow$ shown in a JET gradient;\n", + "3. too high (above the highest threshold of AUPIMO) $\\rightarrow$ shown in a single color.\n", + "\n", + "> Technical detail: lower/upper bound of FPR correspond to the upper/lower bound of threshold.\n", + "\n", + "> **Why low values are not shown?**\n", + ">\n", + "> Because the values below the lower (threshold) bound would _never_ be seen as \"anomalous\" by the metric.\n", + ">\n", + "> Analogously, high values are shown in red because they are _always_ seen as \"anomalous\" by the metric." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FPR bounds\n", + "Lower bound: 0.00001\n", + "Upper bound: 0.00010\n", + "Thresholds corresponding to the FPR bounds\n", + "Lower threshold: 0.504\n", + "Upper threshold: 0.553\n" + ] + } + ], + "source": [ + "# the fpr bounds are fixed in advance in the metric object\n", + "print(f\"\"\"FPR bounds\n", + "Lower bound: {aupimo.fpr_bounds[0]:.5f}\n", + "Upper bound: {aupimo.fpr_bounds[1]:.5f}\"\"\")\n", + "\n", + "# their corresponding thresholds depend on the model's behavior\n", + "# so they only show in the result object\n", + "print(f\"\"\"Thresholds corresponding to the FPR bounds\n", + "Lower threshold: {aupimo_result.thresh_lower_bound:.3g}\n", + "Upper threshold: {aupimo_result.thresh_upper_bound:.3g}\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# we re-sample other normal images\n", + "# the FPR bounds are so strict that the heatmaps in the normal images\n", + "# become almost invisible with this colormap\n", + "max_anom_score_per_image = anomaly_maps.max(dim=2).values.max(dim=1).values # noqa: PD011\n", + "normal_images_with_highest_max_score = sorted(\n", + " zip(max_anom_score_per_image[labels == 0], torch.where(labels == 0)[0], strict=False),\n", + " reverse=True,\n", + " key=lambda x: x[0],\n", + ")\n", + "normal_images_with_highest_max_score = [idx.item() for _, idx in normal_images_with_highest_max_score[:5]]\n", + "\n", + "fig, axes = plt.subplots(2, 5, figsize=(16, 7), layout=\"constrained\")\n", + "\n", + "for ax, (_, row) in zip(axes[0], image_selection.iterrows(), strict=False):\n", + " image = cv2.resize(read_image(image_paths[row.image_index]), (256, 256))\n", + " anomaly_map = anomaly_maps[row.image_index].numpy()\n", + " mask = masks[row.image_index].squeeze().numpy()\n", + " ax.imshow(image)\n", + " #\n", + " # where the magic happens!\n", + " #\n", + " ax.imshow(\n", + " # anything below the lower threshold is set to `nan` so it's not shown\n", + " # because such values would never be detected as anomalies with AUPIMO's contraints\n", + " np.where(anomaly_map < aupimo_result.thresh_lower_bound, np.nan, anomaly_map),\n", + " cmap=\"jet\",\n", + " alpha=0.50,\n", + " # notice that vmin/vmax changed here to use the thresholds from the result object\n", + " vmin=aupimo_result.thresh_lower_bound,\n", + " vmax=aupimo_result.thresh_upper_bound,\n", + " )\n", + " ax.contour(anomaly_map, levels=[aupimo_result.thresh_lower_bound], colors=[\"blue\"], linewidths=1)\n", + " ax.contour(mask, levels=[0.5], colors=\"magenta\", linewidths=1)\n", + " ax.set_title(f\"{row.statistic}: {row.value:.0%}AUPIMO image {row.image_index}\")\n", + "\n", + "for ax, index in zip(axes[1], normal_images_with_highest_max_score, strict=False):\n", + " image = cv2.resize(read_image(image_paths[index]), (256, 256))\n", + " anomaly_map = anomaly_maps[index].numpy()\n", + " mask = masks[index].squeeze().numpy()\n", + " ax.imshow(image)\n", + " ax.imshow(\n", + " np.where(anomaly_map < aupimo_result.thresh_lower_bound, np.nan, anomaly_map),\n", + " cmap=\"jet\",\n", + " alpha=0.30,\n", + " vmin=aupimo_result.thresh_lower_bound,\n", + " vmax=aupimo_result.thresh_upper_bound,\n", + " )\n", + " ax.contour(anomaly_map, levels=[aupimo_result.thresh_lower_bound], colors=[\"blue\"], linewidths=1)\n", + " ax.set_title(f\"image {index}\")\n", + "\n", + "for ax in axes.flatten():\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "axes[0, 0].set_ylabel(\"Anomalous\")\n", + "axes[1, 0].set_ylabel(\"Normal\")\n", + "fig.text(\n", + " 0.03,\n", + " -0.01,\n", + " \"Magenta: contours of the ground truth (GT) mask. \"\n", + " \"Anomaly maps colored in JET colormap between the thresholds in AUPIMO's integral. \"\n", + " \"Lower values are transparent, higher values are red.\",\n", + " ha=\"left\",\n", + " va=\"top\",\n", + " fontsize=\"small\",\n", + " color=\"dimgray\",\n", + ")\n", + "\n", + "fig.suptitle(\"Visualization linked to AUPIMO's bounds\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the AUPIMO scores make sense with what you see in the heatmaps.\n", + "\n", + "The samples on the left and right are special cases: \n", + "- left (0% AUPIMO): nothing is seen because the model completely misses the anomaly\\*;\n", + "- right (100% AUPIMO): is practically red only because the detected the anomaly very well. \n", + "\n", + "\\* Because the scores in image 65 are as low as those in normal images." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cite Us\n", + "\n", + "AUPIMO was developed during Google Summer of Code 2023 (GSoC 2023) with the `anomalib` team from OpenVINO Toolkit.\n", + "\n", + "Our work was accepted to the British Machine Vision Conference 2024 (BMVC 2024).\n", + "\n", + "```bibtex\n", + "@misc{bertoldo2024aupimo,\n", + " title={{AUPIMO: Redefining Visual Anomaly Detection Benchmarks with High Speed and Low Tolerance}}, \n", + " author={Joao P. C. Bertoldo and Dick Ameln and Ashwin Vaidya and Samet Akรงay},\n", + " year={2024},\n", + " eprint={2401.01984},\n", + " archivePrefix={arXiv},\n", + " primaryClass={cs.CV},\n", + " url={https://arxiv.org/abs/2401.01984}, \n", + "}\n", + "```\n", + "\n", + "Paper on arXiv: [arxiv.org/abs/2401.01984](https://arxiv.org/abs/2401.01984) (accepted to BMVC 2024)\n", + "\n", + "Medium post: [medium.com/p/c653ac30e802](https://medium.com/p/c653ac30e802)\n", + "\n", + "Official repository: [github.com/jpcbertoldo/aupimo](https://github.com/jpcbertoldo/aupimo) (numpy-only API and numba-accelerated versions available)\n", + "\n", + "GSoC 2023 page: [summerofcode.withgoogle.com/archive/2023/projects/SPMopugd](https://summerofcode.withgoogle.com/archive/2023/projects/SPMopugd)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Utils\n", + "\n", + "Here we provide some utility functions to reproduce the techniques shown in this notebook.\n", + "\n", + "They are `numpy` compatible and cover edge cases not discussed here (check the examples)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Representative samples from the boxplot's statistics\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from numpy import ndarray\n", + "from torch import Tensor\n", + "\n", + "\n", + "def _validate_tensor_or_ndarray(x: Tensor | ndarray) -> ndarray:\n", + " if not isinstance(x, Tensor | ndarray):\n", + " msg = f\"Expected argument to be a tensor or ndarray, but got {type(x)}.\"\n", + " raise TypeError(msg)\n", + "\n", + " if isinstance(x, Tensor):\n", + " x = x.cpu().numpy()\n", + "\n", + " return x\n", + "\n", + "\n", + "def _validate_values(values: ndarray) -> None:\n", + " if values.ndim != 1:\n", + " msg = f\"Expected argument `values` to be a 1D, but got {values.ndim}D.\"\n", + " raise ValueError(msg)\n", + "\n", + "\n", + "def _validate_labels(labels: ndarray) -> ndarray:\n", + " if labels.ndim != 1:\n", + " msg = f\"Expected argument `labels` to be a 1D, but got {labels.ndim}D.\"\n", + " raise ValueError(msg)\n", + "\n", + " # if torch.is_floating_point(labels):\n", + " if np.issubdtype(labels.dtype, np.floating):\n", + " msg = f\"Expected argument `labels` to be of int or binary types, but got float: {labels.dtype}.\"\n", + " raise TypeError(msg)\n", + "\n", + " # check if it is binary and convert to int\n", + " if np.issubdtype(labels.dtype, np.bool_):\n", + " labels = labels.astype(int)\n", + "\n", + " unique_values = np.unique(labels)\n", + " nor_0_nor_1 = (unique_values != 0) & (unique_values != 1)\n", + " if nor_0_nor_1.any():\n", + " msg = f\"Expected argument `labels` to have 0s and 1s as ground truth labels, but got values {unique_values}.\"\n", + " raise ValueError(msg)\n", + "\n", + " return labels\n", + "\n", + "\n", + "def boxplot_stats(\n", + " values: Tensor | ndarray,\n", + " labels: Tensor | ndarray,\n", + " only_label: int | None = 1,\n", + " flier_policy: str | None = None,\n", + " repeated_policy: str | None = \"avoid\",\n", + ") -> list[dict[str, str | int | float | None]]:\n", + " \"\"\"Compute boxplot statistics of `values` and find the samples that are closest to them.\n", + "\n", + " This function uses `matplotlib.cbook.boxplot_stats`, which is the same function used by `matplotlib.pyplot.boxplot`.\n", + "\n", + " Args:\n", + " values (Tensor | ndarray): Values to compute boxplot statistics from.\n", + " labels (Tensor | ndarray): Labels of the samples (0=normal, 1=anomalous). Must have the same shape as `values`.\n", + " only_label (int | None): If 0 or 1, only use samples of that class. If None, use both. Defaults to 1.\n", + " flier_policy (str | None): What happens with the fliers ('outliers')?\n", + " - None: Do not include fliers.\n", + " - 'high': Include only high fliers.\n", + " - 'low': Include only low fliers.\n", + " - 'both': Include both high and low fliers.\n", + " Defaults to None.\n", + " repeated_policy (str | None): What happens if a sample has already selected [for another statistic]?\n", + " - None: Don't care, repeat the sample.\n", + " - 'avoid': Avoid selecting the same one, go to the next closest.\n", + " Defaults to 'avoid'.\n", + "\n", + " Returns:\n", + " list[dict[str, str | int | float | None]]: List of boxplot statistics.\n", + " Keys:\n", + " - 'statistic' (str): Name of the statistic.\n", + " - 'value' (float): Value of the statistic (same units as `values`).\n", + " - 'nearest' (float): Value of the sample in `values` that is closest to the statistic.\n", + " Some statistics (e.g. 'mean') are not guaranteed to be a value in `values`.\n", + " This value is the actual one when they that is the case.\n", + " - 'index': Index in `values` that has the `nearest` value to the statistic.\n", + " \"\"\"\n", + " # operate on numpy arrays only for simplicity\n", + " values = _validate_tensor_or_ndarray(values) # (N,)\n", + " labels = _validate_tensor_or_ndarray(labels) # (N,)\n", + "\n", + " # validate the arguments\n", + " _validate_values(values)\n", + " labels = _validate_labels(labels)\n", + " if values.shape != labels.shape:\n", + " msg = (\n", + " \"Expected arguments `values` and `labels` to have the same shape, \"\n", + " f\"but got {values.shape=} and {labels.shape=}.\"\n", + " )\n", + " raise ValueError(msg)\n", + " assert only_label in {None, 0, 1}, f\"Invalid argument `only_label`: {only_label}\"\n", + " assert flier_policy in {None, \"high\", \"low\", \"both\"}, f\"Invalid argument `flier_policy`: {flier_policy}\"\n", + " assert repeated_policy in {None, \"avoid\"}, f\"Invalid argument `repeated_policy`: {repeated_policy}\"\n", + "\n", + " if only_label is not None and only_label not in labels:\n", + " msg = f\"Argument {only_label=} but `labels` does not contain this class.\"\n", + " raise ValueError(msg)\n", + "\n", + " # only consider samples of the given label\n", + " # `values` and `labels` now have shape (n,) instead of (N,), where n <= N\n", + " label_filter_mask = (labels == only_label) if only_label is not None else np.ones_like(labels, dtype=bool)\n", + " values = values[label_filter_mask] # (n,)\n", + " labels = labels[label_filter_mask] # (n,)\n", + " indexes = np.nonzero(label_filter_mask)[0] # (n,) values are indices in {0, 1, ..., N-1}\n", + "\n", + " indexes_selected = set() # values in {0, 1, ..., N-1}\n", + "\n", + " def append(records_: dict, statistic_: str, value_: float) -> None:\n", + " indices_sorted_by_distance = np.abs(values - value_).argsort() # (n,)\n", + " candidate = indices_sorted_by_distance[0] # idx that refers to {0, 1, ..., n-1}\n", + "\n", + " nearest = values[candidate]\n", + " index = indexes[candidate] # index has value in {0, 1, ..., N-1}\n", + " label = labels[candidate]\n", + "\n", + " if index in indexes_selected and repeated_policy == \"avoid\":\n", + " for candidate in indices_sorted_by_distance:\n", + " index_of_candidate = indexes[candidate]\n", + " if index_of_candidate in indexes_selected:\n", + " continue\n", + " # if the code reaches here, it means that `index_of_candidate` is not repeated\n", + " # if this is never reached, the first choice will be kept\n", + " nearest = values[candidate]\n", + " label = labels[candidate]\n", + " index = index_of_candidate\n", + " break\n", + "\n", + " indexes_selected.add(index)\n", + "\n", + " records_.append(\n", + " {\n", + " \"statistic\": statistic_,\n", + " \"value\": float(value_),\n", + " \"nearest\": float(nearest),\n", + " \"index\": int(index),\n", + " \"label\": int(label),\n", + " },\n", + " )\n", + "\n", + " # function used in `matplotlib.boxplot`\n", + " boxplot_stats = mpl.cbook.boxplot_stats(values)[0] # [0] is for the only boxplot\n", + "\n", + " records = []\n", + " for stat, val in boxplot_stats.items():\n", + " if stat in {\"iqr\", \"cilo\", \"cihi\"}:\n", + " continue\n", + "\n", + " if stat != \"fliers\":\n", + " append(records, stat, val)\n", + " continue\n", + "\n", + " if flier_policy is None:\n", + " continue\n", + "\n", + " for val_ in val:\n", + " stat_ = \"flierhi\" if val_ > boxplot_stats[\"med\"] else \"flierlo\"\n", + " if flier_policy == \"high\" and stat_ == \"flierlo\":\n", + " continue\n", + " if flier_policy == \"low\" and stat_ == \"flierhi\":\n", + " continue\n", + " # else means that they match or `fliers == \"both\"`\n", + " append(records, stat_, val_)\n", + "\n", + " return sorted(records, key=lambda r: r[\"value\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Usage" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value nearest index label\n", + "0 whislo 0.00 0.00 65 1\n", + "1 q1 0.53 0.53 58 1\n", + "2 mean 0.74 0.75 7 1\n", + "3 med 0.89 0.89 63 1\n", + "4 q3 1.00 1.00 22 1\n", + "5 whishi 1.00 1.00 0 1\n" + ] + } + ], + "source": [ + "# basic usage\n", + "boxplot_statistics = boxplot_stats(aupimo_result.aupimos, labels)\n", + "boxplot_statistics = pd.DataFrame.from_records(boxplot_statistics)\n", + "print(boxplot_statistics)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Repeated Statistics" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value nearest index label\n", + "0 whislo 0.00 0.00 67 1\n", + "1 q1 0.59 0.59 58 1\n", + "2 mean 0.78 0.79 43 1\n", + "3 med 0.98 0.99 9 1\n", + "4 whishi 1.00 1.00 0 1\n", + "5 q3 1.00 1.00 36 1\n" + ] + } + ], + "source": [ + "# repeated values\n", + "# if the distribution is very skewed to one side,\n", + "# some statistics may have the same value\n", + "# e.g. the Q3 and the high whisker\n", + "#\n", + "# let's simulate this situation\n", + "\n", + "# increase all values by 10% and clip to [0, 1]\n", + "mock = torch.clip(aupimo_result.aupimos.clone() * 1.10, 0, 1)\n", + "\n", + "# 'avoid' is the default policy\n", + "# notice how Q3 and the high whisker have the same value, but different indexes\n", + "print(pd.DataFrame.from_records(boxplot_stats(mock, labels, repeated_policy=\"avoid\")))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value nearest index label\n", + "0 whislo 0.00 0.00 67 1\n", + "1 q1 0.59 0.59 58 1\n", + "2 mean 0.78 0.79 43 1\n", + "3 med 0.98 0.99 9 1\n", + "4 whishi 1.00 1.00 0 1\n", + "5 q3 1.00 1.00 0 1\n" + ] + } + ], + "source": [ + "# this behavior can be changed to allow repeated values\n", + "print(pd.DataFrame.from_records(boxplot_stats(mock, labels, repeated_policy=None)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fliers" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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qsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKqnX9iGIgIASE9Pf2WDISIiIgL+L2/k5Y+XVejAk5GRAQBwdHQslh0TERERPU9GRgasrKxeuh+NFDI65ebm4sqVK7CwsIBGo3lqu/T0dDg6OuLixYuwtLR86QFS8eL8lH2co7KN81O2cX7KvsLOkYggIyMDDg4O0NN7+RU4hT7Do6enhypVqhS6Y0tLS/6wlWGcn7KPc1S2cX7KNs5P2VeYOSqOMzt5uGiZiIiIVI+Bh4iIiFSv2AOPkZERxo0bByMjo+LumooB56fs4xyVbZyfso3zU/aV1hwVetEyERER0euKl7SIiIhI9Rh4iIiISPUYeIiIiEj1GHiIiIhI9V4o8MybNw/Ozs4wNjZGo0aNsH//fqVu5MiRsLGxgaOjIyIiInS2W716NQICAl5uxKSYMmUK3nrrLVhYWKBixYoIDAxEQkKCTpsHDx4gLCwM5cuXh7m5Obp06YLU1FSl/tatWwgICIC5uTnq16+PuLg4ne3DwsIwc+bMEjketZs6dSo0Gg1GjBihlHF+St/ly5cREhKC8uXLw8TEBJ6enjh48KBSLyL4+uuvYW9vDxMTE/j6+iIxMVGpf/jwIXr16gVLS0u4ublhy5YtOv3PmDEDH3/8cYkdj5rk5OTgq6++gouLC0xMTFC9enVMmDBB57uVOD8lZ+fOnQgICICDgwM0Gg1+//13nfrnzQXw+Hdaz549YWlpCWtra/Tv3x93795V6pOTk9GyZUuYmZmhZcuWSE5O1tm+Y8eOWLNmzYsdgBTRypUrxdDQUBYvXiwnTpyQjz76SKytrSU1NVXWrVsnlSpVkgMHDsjy5cvF2NhYrl+/LiIid+7cEVdXVzl//nxRd0lP4efnJ0uWLJHjx4/L4cOHpUOHDlK1alW5e/eu0mbQoEHi6OgoW7dulYMHD0rjxo2ladOmSv3IkSOlVatWkpCQICNGjBBvb2+lLiYmRry9vSU7O7tEj0uN9u/fL87OzuLl5SXDhw9Xyjk/pevWrVvi5OQkoaGhsm/fPjl37pxs2rRJzpw5o7SZOnWqWFlZye+//y5HjhyR9957T1xcXOT+/fsiIvLdd9+Jh4eHHD9+XGbMmCG2traSm5srIiLnzp0TV1dXSUtLK5Xje91NmjRJypcvL1FRUZKUlCSrV68Wc3NzmTNnjtKG81NyNmzYIF988YVERkYKAFm7dq1O/fPmQkSkXbt2UrduXdm7d6/s2rVLatSoIcHBwUp9586dpXv37nL69Gnp2rWrdOnSRalbuXKlBAQEvPD4ixx4GjZsKGFhYcr7nJwccXBwkClTpsi0adOkW7duSl3FihVl//79IiIyYMAAmTVr1gsPlJ7v2rVrAkD++usvEXkcMg0MDGT16tVKm/j4eAEgMTExIiLSvn17WbBggYiInDx5UkxNTUVEJCsrS+rWrSsHDhwo4aNQn4yMDHF1dZXo6Ghp1aqVEng4P6VvzJgx0rx586fW5+bmip2dncyYMUMpu3PnjhgZGcmKFStERGTw4MEyZswYERHJzMwUAHLt2jURefw/JZGRka/wCNTN399f+vXrp1PWuXNn6dmzp4hwfkrTPwNPYebi5MmTAkDn99bGjRtFo9HI5cuXRUTEw8NDNm7cKCKPA1atWrVEROT27dtSo0YNuXDhwguPuUiXtLKyshAbGwtfX1+lTE9PD76+voiJiUHdunVx8OBB3L59G7Gxsbh//z5q1KiB3bt349ChQxg2bNiLnYaiQklLSwMA2NjYAABiY2Px6NEjnflyd3dH1apVERMTAwCoW7cutm3bhuzsbGzatAleXl4AgOnTp6N169bw8fEp4aNQn7CwMPj7++vMA8D5KQvWrVsHHx8fBAUFoWLFiqhfvz5++uknpT4pKQlXr17VmSMrKys0atRIZ452796N+/fvY9OmTbC3t0eFChUQEREBY2NjvP/++yV+XGrRtGlTbN26FadPnwYAHDlyBLt370b79u0BcH7KksLMRUxMDKytrXV+b/n6+kJPTw/79u0D8Hi+tmzZgtzcXGzevFn5nTd69GiEhYXB0dHxxQdZlHR0+fJlASB///23Tvno0aOlYcOGIiIybtw4qV69utSpU0ciIyPl4cOHUqdOHTl48KDMnTtX3NzcpGnTpnL8+PEXTmmUX05Ojvj7+0uzZs2UsoiICDE0NMzX9q233pLPPvtMRB4n8ODgYKlataq0bNlSTpw4IadPnxZXV1e5ceOGDBw4UFxcXCQoKEju3LlTYsejFitWrJA6deoop3SfPMPD+Sl9RkZGYmRkJGPHjpVDhw7JDz/8IMbGxvLzzz+LiMiePXsEgFy5ckVnu6CgIOnatauIPD7bNmTIEHF2dhYfHx/ZtWuX3Lx5U6pVqyYXLlyQL774QqpXry5t27aVS5culfgxvs5ycnJkzJgxotFoRF9fXzQajUyePFmp5/yUHvzjDE9h5mLSpEni5uaWry9bW1uZP3++iIhcunRJ/P39xdHRUfz9/eXSpUvy119/iY+Pj9y8eVOCgoLExcVFBg4cKA8fPizSmAv9bemFFR4ejvDwcOX9N998A19fXxgYGGDixIk4duwYoqKi0Lt3b8TGxhb37t9YYWFhOH78OHbv3l2k7aysrLB8+XKdsnfeeQczZsxAREQEzp07h4SEBHz00UcYP348F8gWwcWLFzF8+HBER0fD2Nj4hfrg/Lxaubm58PHxweTJkwEA9evXx/Hjx7Fw4UL06dOnUH0YGBhg3rx5OmV9+/bFsGHDEBcXh99//x1HjhzB9OnTMWzYsBdfcPkG+vXXXxEREYHly5ejdu3aOHz4MEaMGAEHBwfOj0pVrlwZUVFRyvuHDx/Cz88PS5cuxcSJE2FhYYGEhAS0a9cOP/zwQ5EWnBfpklaFChWg1Wp17iIBgNTUVNjZ2eVrf+rUKSxbtgwTJkzAjh070LJlS9ja2qJr1644dOgQMjIyirJ7eoqhQ4ciKioK27dvR5UqVZRyOzs7ZGVl4c6dOzrtnzZfALBkyRJYW1ujU6dO2LFjBwIDA2FgYICgoCDs2LHjFR6F+sTGxuLatWto0KAB9PX1oa+vj7/++gvfffcd9PX1UalSJc5PKbO3t0etWrV0yjw8PHDhwgUAUOahsL/zAGD79u04ceIEhg4dih07dqBDhw4wMzND165dOUdFNHr0aHz++efo3r07PD090atXL3zyySeYMmUKAM5PWVKYubCzs8O1a9d06rOzs3Hr1q2nztfkyZPRtm1beHt7Y8eOHejSpQsMDAzQuXPnIs9XkQKPoaEhvL29sXXrVqUsNzcXW7duRZMmTXTaiggGDhyIWbNmwdzcHDk5OXj06BEAKP/Nyckp0mBJl4hg6NChWLt2LbZt2wYXFxedem9vbxgYGOjMV0JCAi5cuJBvvgDg+vXrGD9+PObOnQsA+eaM81U0bdq0wbFjx3D48GHl5ePjg549eyp/5vyUrmbNmuV7lMPp06fh5OQEAHBxcYGdnZ3OHKWnp2Pfvn0FzlHeYwZ++OEHaLVaztFLyszMhJ6e7j9TWq0Wubm5ADg/ZUlh5qJJkya4c+eOztWdbdu2ITc3F40aNcrXZ3x8PJYvX44JEyYAKIbfeUW6ACaPbwszMjKSn3/+WU6ePCkDBgwQa2truXr1qk67H3/8Ued2sn379omlpaXExMTI119/ray8phc3ePBgsbKykh07dkhKSoryyszMVNoMGjRIqlatKtu2bZODBw9KkyZNpEmTJgX216NHD5k7d67yftq0aeLt7S0nT56U9u3by5AhQ175Mandk2t4RDg/pW3//v2ir68vkyZNksTERImIiBBTU1NZtmyZ0mbq1KlibW0t//vf/+To0aPSqVOnfLfa5vnXv/4lo0aNUt6vWrVKqlatKkeOHJH+/ftLhw4dSuS41KJPnz5SuXJl5bb0yMhIqVChgrLGTYTzU5IyMjIkLi5O4uLiBIDMmjVL4uLilMfNFGYu2rVrJ/Xr15d9+/bJ7t27xdXVVee29Dy5ubnSvHlzWb9+vVI2ePBg8ff3l5MnT0r9+vVl+vTpRRp/kQOPiMjcuXOlatWqYmhoKA0bNpS9e/fq1F+9elWcnJyU28zyfPPNN2JjYyPu7u6yb9++F9k1PQFAga8lS5Yobe7fvy9DhgyRcuXKiampqbz//vuSkpKSr68///xTGjZsKDk5OUrZvXv3JCgoSCwsLKRNmzaSmppaEoelav8MPJyf0rd+/XqpU6eOGBkZibu7u/z444869bm5ufLVV19JpUqVxMjISNq0aSMJCQn5+jl27JjUqFFD5zlYOTk5MnjwYLG0tJS33npLEhMTX/nxqEl6eroMHz5cqlatKsbGxlKtWjX54osvdBarcn5Kzvbt2wv8N6dPnz4iUri5uHnzpgQHB4u5ublYWlpK3759JSMjI9++Fi5cqHPSREQkNTVV2rRpIxYWFhIUFCT37t0r0vg1Ik88spKIiIhIhfhdWkRERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8REREpHoMPERERKR6DDxERESkegw8RPTaCA8Ph0ajgUajwb///e+X6qt169ZKX4cPHy6W8RFR2cXAQ6QSMTEx0Gq18Pf3z1e3Y8cOaDSafN/MDgDOzs464SEvBGg0GlhZWaFZs2bYtm2bUh8aGorAwECd9xqNBoMGDcrXd1hYGDQaDUJDQ3XKL168iH79+sHBwQGGhoZwcnLC8OHDcfPmzeceZ+3atZGSkoIBAwYoZSNHjoSNjQ0cHR0RERGh03716tUICAjI109kZCT279//3P0RkTow8BCpxKJFi/Dxxx9j586duHLlykv1tWTJEqSkpGDPnj2oUKECOnbsiHPnzj21vaOjI1auXIn79+8rZQ8ePMDy5ctRtWpVnbbnzp2Dj48PEhMTsWLFCpw5cwYLFy7E1q1b0aRJE9y6deuZY9PX14ednR1MTU0BAOvXr8fy5cuxefNmTJ8+HR9++CFu3LgBAEhLS8MXX3yBefPm5evHxsYGtra2hf5MiOj1xsBDpAJ3797FqlWrMHjwYPj7++Pnn39+qf6sra1hZ2eHOnXqYMGCBbh//z6io6Of2r5BgwZwdHREZGSkUhYZGYmqVauifv36Om3DwsJgaGiIzZs3o1WrVqhatSrat2+PLVu24PLly/jiiy+KNNb4+Hi0bt0aPj4+CA4OhqWlJZKSkgAAn332GQYPHpwvdBHRm4eBh0gFfv31V7i7u6NmzZoICQnB4sWLUVzfC2xiYgIAyMrKema7fv36YcmSJcr7xYsXo2/fvjptbt26hU2bNmHIkCFKv3ns7OzQs2dPrFq1qkhjr1u3Lg4ePIjbt28jNjYW9+/fR40aNbB7924cOnQIw4YNK3RfRKReDDxEKrBo0SKEhIQAANq1a4e0tDT89ddfL91vZmYmvvzyS2i1WrRq1eqZbUNCQrB7926cP38e58+fx549e5Qx5UlMTISIwMPDo8A+PDw8cPv2bVy/fr3QY/Tz80NISAjeeusthIaGYunSpTAzM8PgwYOxcOFCLFiwADVr1kSzZs1w4sSJQvdLROqiX9oDIKKXk5CQgP3792Pt2rUAHq9x6datGxYtWoTWrVu/UJ/BwcHQarW4f/8+bG1tsWjRInh5eT1zG1tbW+VymojA398fFSpUKLBtcZ19yhMeHo7w8HDl/TfffANfX18YGBhg4sSJOHbsGKKiotC7d2/ExsYW676J6PXAwEP0mlu0aBGys7Ph4OCglIkIjIyM8P3338PKygqWlpYAHi/itba21tn+zp07sLKy0imbPXs2fH19YWVlVaSFvf369cPQoUMBoMCFwjVq1IBGo0F8fDzef//9fPXx8fEoV67cSy0mPnXqFJYtW4a4uDgsXrwYLVu2hK2tLbp27Yp+/fohIyMDFhYWL9w/Eb2eeEmL6DWWnZ2N//73v5g5cyYOHz6svI4cOQIHBwesWLECAODq6go9Pb18ZzfOnTuHtLQ0uLm56ZTb2dmhRo0aRQ4e7dq1Q1ZWFh49egQ/P7989eXLl8e7776L+fPn69zRBQBXr15FREQEunXrBo1GU6T95hERDBw4ELNmzYK5uTlycnLw6NEjAFD+m5OT80J9E9HrjWd4iF5jUVFRuH37Nvr375/vLE2XLl2waNEiDBo0CBYWFvjwww8xatQo6Ovrw9PTExcvXsSYMWPQuHFjNG3atFjGo9VqER8fr/y5IN9//z2aNm0KPz8/TJw4ES4uLjhx4gRGjx6NypUrY9KkSS+8///85z+wtbVVnrvTrFkzhIeHY+/evdi4cSNq1aqV7wwXEb0ZeIaH6DW2aNEi5dLTP3Xp0gUHDx7E0aNHAQBz5sxBnz59MGbMGNSuXRuhoaHw8vLC+vXrX/iMSkEsLS2VS2gFcXV1xcGDB1GtWjV07doV1atXx4ABA/D2228jJiYGNjY2L7Tf1NRUTJo0Cd99951S1rBhQ4waNQr+/v749ddfde4iI6I3i0aKe/UgEdErEh4ejt9//73YvgoiOTkZLi4uiIuLQ7169YqlTyIqm3iGh4heK8eOHYO5uTnmz5//Uv20b98etWvXLqZREVFZxzM8RPTauHXrlvLVE7a2tgVeyiusy5cvKwunq1atCkNDw2IZIxGVTQw8REREpHq8pEVERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqsfAQ0RERKrHwENERESqx8BDREREqvf/AOgpDv2lH617AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# fliers\n", + "# if the distribution is very skewed to one side,\n", + "# it is possible that some extreme values are considered\n", + "# are considered as outliers, showing as fliers in the boxplot\n", + "#\n", + "# there are two types of fliers: high and low\n", + "# they are defined as:\n", + "# - high: values > high whisker = Q3 + 1.5 * IQR\n", + "# - low: values < low whisker = Q1 - 1.5 * IQR\n", + "# where IQR = Q3 - Q1\n", + "\n", + "# let's artificially simulate this situation\n", + "# we will create a distortion in the values so that\n", + "# high values (close to 1) become even higher\n", + "# and low values (close to 0) become even lower\n", + "\n", + "\n", + "def distortion(vals: Tensor) -> Tensor:\n", + " \"\"\"Artificial distortion to simulate a skewed distribution.\n", + "\n", + " To visualize it:\n", + " ```\n", + " fig, ax = plt.subplots()\n", + " t = np.linspace(0, 1, 100)\n", + " ax.plot(t, np.clip(distortion(t), 0, 1), label=\"distortion\")\n", + " ax.plot(t, t, label=\"identity\", linestyle=\"--\")\n", + " fig\n", + " ```\n", + " \"\"\"\n", + " return vals + 0.12 * (vals * (1 - vals) * 4)\n", + "\n", + "\n", + "mock = torch.clip(distortion(aupimo_result.aupimos.clone()), 0, 1)\n", + "\n", + "fig, ax = plt.subplots(figsize=(7, 2))\n", + "ax.boxplot(\n", + " mock[labels == 1].numpy(),\n", + " vert=False,\n", + " widths=0.4,\n", + ")\n", + "_ = ax.set_yticks([])\n", + "ax.set_xlim(0 - (eps := 2e-2), 1 + eps)\n", + "ax.xaxis.set_major_formatter(PercentFormatter(1))\n", + "ax.set_xlabel(\"AUPIMO [%]\")\n", + "ax.set_title(\"AUPIMO Scores Boxplot\")\n", + "num_images = (labels == 1).sum().item()\n", + "ax.annotate(\n", + " text=f\"Number of images: {num_images}\",\n", + " xy=(0.03, 0.95),\n", + " xycoords=\"axes fraction\",\n", + " xytext=(0, 0),\n", + " textcoords=\"offset points\",\n", + " annotation_clip=False,\n", + " verticalalignment=\"top\",\n", + ")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value nearest index label\n", + "0 whislo 0.24 0.24 44 1\n", + "1 q1 0.65 0.65 58 1\n", + "2 mean 0.79 0.78 29 1\n", + "3 med 0.94 0.93 63 1\n", + "4 q3 1.00 1.00 22 1\n", + "5 whishi 1.00 1.00 0 1\n" + ] + } + ], + "source": [ + "# `None` is the default policy, so the fliers are not returned\n", + "print(pd.DataFrame.from_records(boxplot_stats(mock, labels, flier_policy=None)))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "with option 'low'\n", + " statistic value nearest index label\n", + "0 flierlo 0.00 0.00 65 1\n", + "1 flierlo 0.00 0.00 67 1\n", + "2 flierlo 0.01 0.01 71 1\n", + "3 flierlo 0.09 0.09 64 1\n", + "4 whislo 0.24 0.24 44 1\n", + "5 q1 0.65 0.65 58 1\n", + "6 mean 0.79 0.78 29 1\n", + "7 med 0.94 0.93 63 1\n", + "8 q3 1.00 1.00 22 1\n", + "9 whishi 1.00 1.00 0 1\n", + "with option 'both'\n", + " statistic value nearest index label\n", + "0 flierlo 0.00 0.00 65 1\n", + "1 flierlo 0.00 0.00 67 1\n", + "2 flierlo 0.01 0.01 71 1\n", + "3 flierlo 0.09 0.09 64 1\n", + "4 whislo 0.24 0.24 44 1\n", + "5 q1 0.65 0.65 58 1\n", + "6 mean 0.79 0.78 29 1\n", + "7 med 0.94 0.93 63 1\n", + "8 q3 1.00 1.00 22 1\n", + "9 whishi 1.00 1.00 0 1\n" + ] + } + ], + "source": [ + "# one can choose to include only high or low fliers, or both\n", + "# since there are only low fliers...\n", + "\n", + "# 'low' and 'both' will return the same result\n", + "print(\"with option 'low'\")\n", + "print(pd.DataFrame.from_records(boxplot_stats(mock, labels, flier_policy=\"low\")))\n", + "\n", + "print(\"with option 'both'\")\n", + "print(pd.DataFrame.from_records(boxplot_stats(mock, labels, flier_policy=\"both\")))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "with option 'high'\n", + " statistic value nearest index label\n", + "0 whislo 0.24 0.24 44 1\n", + "1 q1 0.65 0.65 58 1\n", + "2 mean 0.79 0.78 29 1\n", + "3 med 0.94 0.93 63 1\n", + "4 q3 1.00 1.00 22 1\n", + "5 whishi 1.00 1.00 0 1\n" + ] + } + ], + "source": [ + "# and 'high' will return no fliers (same as `flier_policy=None` in this case)\n", + "print(\"with option 'high'\")\n", + "print(pd.DataFrame.from_records(boxplot_stats(mock, labels, flier_policy=\"high\")))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other applications and `only_label` argument" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stats for the maximum anomaly score in the anomaly maps\n", + " statistic value nearest index label\n", + "0 whislo 0.46 0.46 65 1\n", + "1 q1 0.63 0.63 48 1\n", + "2 med 0.70 0.71 10 1\n", + "3 mean 0.73 0.73 118 1\n", + "4 q3 0.81 0.81 115 1\n", + "5 whishi 1.00 1.00 22 1\n" + ] + } + ], + "source": [ + "# other applications\n", + "# since the function is agnostic to the meaning of the values\n", + "# we can also use it to find representative samples\n", + "# with another metric or signal\n", + "#\n", + "# in the last plot cell we used the maximum anomaly score per image\n", + "# to select normal images, so let's reuse that criterion here\n", + "\n", + "# recompute it for didactic purposes\n", + "max_anom_score_per_image = anomaly_maps.max(dim=2).values.max(dim=1).values # noqa: PD011\n", + "print(\"stats for the maximum anomaly score in the anomaly maps\")\n", + "print(pd.DataFrame.from_records(boxplot_stats(max_anom_score_per_image, labels)))\n", + "# notice that the indices are not the same as before" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value nearest index label\n", + "0 whislo 0.42 0.42 90 0\n", + "1 q1 0.43 0.43 80 0\n", + "2 med 0.45 0.45 105 0\n", + "3 mean 0.46 0.46 89 0\n", + "4 q3 0.48 0.48 75 0\n", + "5 whishi 0.52 0.52 95 0\n" + ] + } + ], + "source": [ + "# we can also use the `only_label` argument to select only the\n", + "# samples from the normal class\n", + "print(pd.DataFrame.from_records(boxplot_stats(max_anom_score_per_image, labels, only_label=0)))\n", + "# notice the labels are all 0 now" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " statistic value nearest index label\n", + "0 whislo 0.42 0.42 90 0\n", + "1 q1 0.52 0.52 95 0\n", + "2 med 0.65 0.65 17 1\n", + "3 mean 0.66 0.66 45 1\n", + "4 q3 0.77 0.77 108 1\n", + "5 whishi 1.00 1.00 22 1\n" + ] + } + ], + "source": [ + "# or we can consider data from both classes (`None` option)\n", + "print(pd.DataFrame.from_records(boxplot_stats(max_anom_score_per_image, labels, only_label=None)))\n", + "# notice that the labels are mixed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cite Us\n", + "\n", + "AUPIMO was developed during Google Summer of Code 2023 (GSoC 2023) with the `anomalib` team from OpenVINO Toolkit.\n", + "\n", + "Our work was accepted to the British Machine Vision Conference 2024 (BMVC 2024).\n", + "\n", + "```bibtex\n", + "@misc{bertoldo2024aupimo,\n", + " title={{AUPIMO: Redefining Visual Anomaly Detection Benchmarks with High Speed and Low Tolerance}}, \n", + " author={Joao P. C. Bertoldo and Dick Ameln and Ashwin Vaidya and Samet Akรงay},\n", + " year={2024},\n", + " eprint={2401.01984},\n", + " archivePrefix={arXiv},\n", + " primaryClass={cs.CV},\n", + " url={https://arxiv.org/abs/2401.01984}, \n", + "}\n", + "```\n", + "\n", + "Paper on arXiv: [arxiv.org/abs/2401.01984](https://arxiv.org/abs/2401.01984) (accepted to BMVC 2024)\n", + "\n", + "Medium post: [medium.com/p/c653ac30e802](https://medium.com/p/c653ac30e802)\n", + "\n", + "Official repository: [github.com/jpcbertoldo/aupimo](https://github.com/jpcbertoldo/aupimo) (numpy-only API and numba-accelerated versions available)\n", + "\n", + "GSoC 2023 page: [summerofcode.withgoogle.com/archive/2023/projects/SPMopugd](https://summerofcode.withgoogle.com/archive/2023/projects/SPMopugd)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "anomalib-dev", + "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.10.14" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/700_metrics/701c_aupimo_advanced_ii.ipynb b/notebooks/700_metrics/701c_aupimo_advanced_ii.ipynb new file mode 100644 index 0000000000..ed647ef666 --- /dev/null +++ b/notebooks/700_metrics/701c_aupimo_advanced_ii.ipynb @@ -0,0 +1,936 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AUPIMO\n", + "\n", + "Advance use cases of the metric AUPIMO (pronounced \"a-u-pee-mo\").\n", + "\n", + "> For basic usage, please check the notebook [701a_aupimo.ipynb](./701a_aupimo.ipynb).\n", + "\n", + "Includes:\n", + "- visualization of the PIMO curve\n", + "- theoretical AUPIMO of a random classifier (\"baseline\")\n", + "- understanding the x-axis (FPR) bounds\n", + "- customizing the x-axis (FPR) bounds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# What is AUPIMO?\n", + "\n", + "The `Area Under the Per-Image Overlap [curve]` (AUPIMO) is a metric of recall (higher is better) designed for visual anomaly detection.\n", + "\n", + "Inspired by the [ROC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) and [PRO](https://link.springer.com/article/10.1007/s11263-020-01400-4) curves, \n", + "\n", + "> AUPIMO is the area under a curve of True Positive Rate (TPR or _recall_) as a function of False Positive Rate (FPR) restricted to a fixed range. \n", + "\n", + "But:\n", + "- the TPR (Y-axis) is *per-image* (1 image = 1 curve/score);\n", + "- the FPR (X-axis) considers the (average of) **normal** images only; \n", + "- the FPR (X-axis) is in log scale and its range is [1e-5, 1e-4]\\* (harder detection task!).\n", + "\n", + "\\* The score (the area under the curve) is normalized to be in [0, 1].\n", + "\n", + "AUPIMO can be interpreted as\n", + "\n", + "> average segmentation recall in an image given that the model (nearly) does not yield false positives in normal images.\n", + "\n", + "References in the last cell.\n", + "\n", + "![AUROC vs. AUPRO vs. AUPIMO](./roc_pro_pimo.svg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Install `anomalib` using `pip`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO(jpcbertoldo): replace by `pip install anomalib` when AUPIMO is released # noqa: TD003\n", + "%pip install ../.." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Change the directory to have access to the datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "# NOTE: Provide the path to the dataset root directory.\n", + "# If the datasets is not downloaded, it will be downloaded\n", + "# to this directory.\n", + "dataset_root = Path.cwd().parent.parent / \"datasets\" / \"MVTec\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Imports" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import cv2\n", + "import numpy as np\n", + "import torch\n", + "from matplotlib import pyplot as plt\n", + "from matplotlib.axes import Axes\n", + "from matplotlib.ticker import FixedLocator, PercentFormatter\n", + "from numpy import ndarray\n", + "from scipy import stats\n", + "from torch import Tensor\n", + "\n", + "from anomalib import TaskType\n", + "from anomalib.data import MVTec\n", + "from anomalib.data.utils import read_image\n", + "from anomalib.engine import Engine\n", + "from anomalib.metrics import AUPIMO\n", + "from anomalib.models import Padim" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basics\n", + "\n", + "This part was covered in the notebook [701a_aupimo.ipynb](./701a_aupimo.ipynb), so we'll not discuss it here.\n", + "\n", + "It will train a model and evaluate it using AUPIMO.\n", + "We will use dataset Leather from MVTec AD with `PaDiM` (performance is not the best, but it is fast to train).\n", + "\n", + "> See the notebooks below for more details on:\n", + "> - datamodules: [100_datamodules](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/100_datamodules);\n", + "> - models: [200_models](https://github.com/openvinotoolkit/anomalib/tree/main/notebooks/200_models)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# train the model\n", + "task = TaskType.SEGMENTATION\n", + "datamodule = MVTec(\n", + " root=dataset_root,\n", + " category=\"leather\",\n", + " image_size=256,\n", + " train_batch_size=32,\n", + " eval_batch_size=32,\n", + " num_workers=8,\n", + " task=task,\n", + ")\n", + "model = Padim(\n", + " # only use one layer to speed it up\n", + " layers=[\"layer1\"],\n", + " n_features=64,\n", + " backbone=\"resnet18\",\n", + " pre_trained=True,\n", + ")\n", + "engine = Engine(\n", + " pixel_metrics=\"AUPIMO\", # others can be added\n", + " accelerator=\"auto\", # \\<\"cpu\", \"gpu\", \"tpu\", \"ipu\", \"hpu\", \"auto\">,\n", + " devices=1,\n", + " logger=False,\n", + ")\n", + "engine.fit(datamodule=datamodule, model=model)\n", + "# infer\n", + "predictions = engine.predict(dataloaders=datamodule.test_dataloader(), model=model, return_predictions=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compute AUPIMO" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Metric `AUPIMO` will save all targets and predictions in buffer. For large datasets this may lead to large memory footprint.\n" + ] + } + ], + "source": [ + "aupimo = AUPIMO(\n", + " # with `False` all the values are returned in a dataclass\n", + " return_average=False,\n", + ")\n", + "\n", + "anomaly_maps = []\n", + "masks = []\n", + "labels = []\n", + "image_paths = []\n", + "for batch in predictions:\n", + " anomaly_maps.append(batch_anomaly_maps := batch[\"anomaly_maps\"].squeeze(dim=1))\n", + " masks.append(batch_masks := batch[\"mask\"])\n", + " labels.append(batch[\"label\"])\n", + " image_paths.append(batch[\"image_path\"])\n", + " aupimo.update(anomaly_maps=batch_anomaly_maps, masks=batch_masks)\n", + "\n", + "# list[list[str]] -> list[str]\n", + "image_paths = [item for sublist in image_paths for item in sublist]\n", + "anomaly_maps = torch.cat(anomaly_maps, dim=0)\n", + "masks = torch.cat(masks, dim=0)\n", + "labels = torch.cat(labels, dim=0)\n", + "\n", + "# `pimo_result` has the PIMO curves of each image\n", + "# `aupimo_result` has the AUPIMO values\n", + "# i.e. their Area Under the Curve (AUC)\n", + "pimo_result, aupimo_result = aupimo.compute()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Statistics and score distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MEAN\n", + "aupimo_result.aupimos[labels == 1].mean().item()=0.742841961578308\n", + "OTHER STATISTICS\n", + "DescribeResult(nobs=92, minmax=(0.0, 1.0), mean=0.742841961578308, variance=0.08757792704451818, skewness=-0.9285678601866053, kurtosis=-0.3299211772047079)\n" + ] + }, + { + "data": { + "image/png": "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KlXqqhdPnz17VpKuWXauuLI8LS3tmut8++23qlSpkv7+97/bxnx8fDR48OAb5g0ICND58+e1YsWKG657LREREXkuRZI0ePBguyMuw4YNU+nSpfXtt9/mO0NefPvttwoJCVHv3r1tY+7u7nrqqad07tw5rV271m79Xr162UqRJNuRvYK85gso7ihGgItkZ2dr3rx5at26tfbv36+9e/dq7969uueee5ScnKyVK1c6vM2/nrYJDw/XihUr9P3332vdunU6duyYlixZogoVKuR5m4888ohSU1O1dOlSxcbGqnPnzlctP1fGrhSka8lLgTp48KBq1KiR6/Pc6JSWJD355JO6/fbb1bFjR1WpUkUDBgzQsmXLbvi+/xUREeHQ+n99rIGvr68qVapU6LfcHzx4UDVr1sx1p9yVU28HDx60Gw8LC7N7faUk/fV6KOBWxqk0wEVWrVqlo0ePat68eZo3b16u5bGxsWrfvr2ky7fOS7LdHfVX6enpdutdUaZMGUVGRt5UzkqVKqlVq1Z65513tH79en311VdXXc/f31+VKlXSr7/+et3t/frrr7rtttvk5+d3U7mupWLFitq6dauWL1+upUuXaunSpYqJidHjjz+e66Lka/H29i6UbFdTEEcG8+pqpxaly3feAbiMI0aAi8TGxqpixYqaP39+rp/evXvr66+/thWhoKAg+fj4KDEx8arbSkxMlI+Pj0NHghzx6KOP6scff5Sfn586dep0zfU6d+6s/fv3a926dVdd/uOPP+rAgQM3vJ6latWq+uOPP3L9C/tan/+vPDw81KVLF02bNk1//PGHhgwZok8//VR79+6VlPvI2s3as2eP3etz587p6NGjdnfLlStXTikpKXbrXbx4UUePHrUbcyRb1apVtWfPnlzPcdq9e7dtOQDHUIwAF8jIyNCCBQvUuXNn/f3vf8/1M2LECJ09e1aLFi2SdPm/9Nu3b6/FixcrKSnJbltJSUlavHix2rdvf80jAjfr73//u8aNG6dp06Zd9zk6Y8aMkbe3t4YMGaJTp07ZLTt9+rSGDh0qHx8fjRkz5rr769Spk44cOWL3VO0rjwG4kb/u183NTQ0aNJAk2+3+ZcqUkaRcRSW/Zs2aZfdcqOnTp+vSpUvq2LGjbax69er64Ycfcr3vr0eMHMnWqVMnHTt2TJ9//rlt7NKlS5oyZYp8fX3VsmXL/Hwc4JbGqTTABa7clXWtO5aaNWtme9hjr169JEmvv/66mjVrprvvvluDBw9WeHi4Dhw4oFmzZslisej1118vtLz+/v5XfQbPX9WsWVOffPKJ+vTpo/r16+d68vXJkyc1d+5cVa9e/brbGTRokD788EM9/vjjSkhIUKVKlfSf//wnT3fSPfHEEzp9+rTatGmjKlWq6ODBg5oyZYruvPNO27U3d955p0qVKqU333xTqamp8vT0VJs2ba76CIK8uHjxotq2bauePXsqMTFR06ZN0/333283v0888YSGDh2q7t27q127dtq2bZuWL1+e6yifI9kGDx6smTNnql+/fkpISFB4eLi+/PJLrV+/Xu+9994NL4QHcBUGgNN16dLFeHl5mfPnz19znX79+hl3d3dz8uRJ29iuXbtMr169TMWKFU3p0qVNxYoVzSOPPGJ27dqV6/0tW7Y09erVu2GWvn37mjJlyjj83tWrVxtJZv78+bmW/frrr6Z3796mUqVKxt3d3YSEhJjevXub7du33zDPFQcPHjQPPvig8fHxMRUqVDCjRo0yy5YtM5LM6tWr7fJXrVrV9vrLL7807du3NxUrVjQeHh4mLCzMDBkyxBw9etRu+x999JGpVq2aKVWqlN02q1ataqKioq6aqWrVqqZv37621zExMUaSWbt2rRk8eLApV66c8fX1NX369DGnTp2ye292drZ5/vnnTYUKFYyPj4/p0KGD2bt3b65tXi9by5YtTcuWLe3WTU5ONv379zcVKlQwHh4epn79+iYmJsZunf379xtJ5u233871mSSZcePGXfXzArciizFcdQcAACBxjREAAIANxQgAAMCKYgQAAGBFMQIAALCiGAEAAFhRjAAAAKxK/AMec3JydOTIEZUtW7bAvwYAAAAUDmOMzp49q8qVK+f6ouTCVOKL0ZEjRxQaGurqGAAAIB8OHTqkKlWqOG1/Jb4YXXkk/v79+1W+fHkXp7m1ZWVl6bvvvlP79u3l7u7u6ji3NOaiaGE+ig7moug4ffq0IiIinP7VNiW+GF05fVa2bFn5+fm5OM2tLSsrSz4+PvLz8+MvHBdjLooW5qPoYC6KjitfzOzsy2C4+BoAAMCKYgQAAGBFMQIAALCiGAEAAFhRjAAAAKwoRgAAAFYUIwAAACuKEQAAgBXFCAAAwIpiBAAAYEUxAgAAsKIY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CoeLkcVi0QsvvKAxY8Zo7969OnfunOrWrStfX9/CyAcAAOA0DhejKzw8PFS2bFmVLVuWUgQAAEoEh68xunTpkl566SX5+/srPDxc4eHh8vf314svvqisrKzCyAgAAOAUDh8xGjlypBYsWKC33npLzZs3lyTFx8dr/PjxOnXqlKZPn17gIQEAAJzB4WIUFxenefPmqWPHjraxBg0aKDQ0VL1796YYAQCAYsvhU2menp4KDw/PNR4RESEPD4+CyAQAAOASDhejESNG6NVXX7V9R5okZWZm6rXXXtOIESMKNBwAAIAz5elUWrdu3exef//996pSpYoaNmwoSdq2bZsuXryotm3bFnxCAAAAJ8lTMfL397d73b17d7vXoaGhBZcIAADARfJUjGJiYgo7BwAAgMs5fI0RAABASeXw7fqnTp3Syy+/rNWrV+v48ePKycmxW3769OkCCwcAAOBMDhejxx57THv37tXAgQMVHBwsi8VSGLkAAACczuFi9OOPP2rdunW2O9IAAABKCoevMapdu7YyMjIKIwsAAIBLOVyMpk2bphdeeEFr167VqVOnlJaWZvcDAABQXDl8Ki0gIEBpaWlq06aN3bgxRhaLRdnZ2QUWDgAAwJkcLkZ9+vSRu7u74uLiuPgaAACUKA4Xox07duiXX35RrVq1CiMPAACAyzh8jVHjxo116NChwsgCAADgUg4fMRo5cqRGjRqlMWPGqH79+nJ3d7db3qBBgwILBwAA4EwOF6NevXpJkgYMGGAbs1gsXHwNAACKPYeL0f79+wsjBwAAgMs5fI1R1apVr/vjiEmTJqlJkyYqW7asKlasqK5duyoxMdFunQsXLmj48OEKDAyUr6+vunfvruTkZEdjAwAA3JDDR4w+/fTT6y5//PHH87yttWvXavjw4WrSpIkuXbqkf/7zn2rfvr127typMmXKSJKeeeYZffPNN5o/f778/f01YsQIdevWTevXr3c0OgAAwHU5XIxGjRpl9zorK0vp6eny8PCQj4+PQ8Vo2bJldq/nzJmjihUrKiEhQS1atFBqaqpmz56tuLg42wMlY2JiVKdOHf38889q1qyZo/EBAACuyeFidObMmVxje/bs0bBhwzRmzJibCpOamipJKl++vCQpISFBWVlZioyMtK1Tu3ZthYWFKT4+/qrFKDMzU5mZmbbXV76mJCsrS1lZWTeV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NHXqVIWHh8vLy0v33HOPNm7caFs2evRolS9fXqGhoYqNjbV73/z589WlSxdnxy0RJk2apCZNmqhs2bKqWLGiunbtqsTERLt1Lly4oOHDhyswMFC+vr7q3r273VPMT58+rS5dusjX11d33XWXfvnlF7v3Dx8+XO+8845TPk9J8sYbb8hisejpp5+2jTEXznP48GFFR0crMDBQ3t7eql+/vjZv3mxbbozRyy+/rEqVKsnb21uRkZHas2ePbXlmZqYee+wx+fn56fbbb9f3339vt/23335bI0eOdNrnKa6ys7P10ksvKSIiQt7e3qpevbpeffVVu+/dYi4Kzw8//KAuXbqocuXKslgsWrhwod3yG/3upct/L/Xp00d+fn4KCAjQwIEDde7cOdvyAwcOqEWLFipTpoxatGihAwcO2L2/c+fO+uqrrxwP79QvICkE8+bNMx4eHubjjz82v/32mxk0aJAJCAgwycnJZtGiRSY4ONhs2rTJxMXFGS8vL3PixAljjDEpKSmmZs2a5uDBgy7+BMVThw4dTExMjNmxY4fZunWr6dSpkwkLCzPnzp2zrTN06FATGhpqVq5caTZv3myaNWtm7r33Xtvy0aNHm5YtW5rExETz9NNPm0aNGtmWxcfHm0aNGplLly459XMVdxs3bjTh4eGmQYMGZtSoUbZx5sI5Tp8+bapWrWr69etnNmzYYPbt22eWL19u9u7da1vnjTfeMP7+/mbhwoVm27Zt5sEHHzQREREmIyPDGGPMBx98YOrUqWN27Nhh3n77bRMUFGRycnKMMcbs27fP1KxZ06Smprrk8xUnr732mgkMDDRLliwx+/fvN/Pnzze+vr7m/ffft63DXBSeb7/91rzwwgtmwYIFRpL5+uuv7Zbf6HdvjDEPPPCAadiwofn555/Njz/+aGrUqGF69+5tW96tWzfzyCOPmN9//9307NnTdO/e3bZs3rx5pkuXLvnKXuyLUdOmTc3w4cNtr7Ozs03lypXNpEmTzJtvvml69eplW1axYkWzceNGY4wxgwcPNpMnT3Z63pLq+PHjRpJZu3atMeZy8XR3dzfz58+3rbNr1y4jycTHxxtjjOnYsaOZPn26McaYnTt3Gh8fH2OMMRcvXjQNGzY0mzZtcvKnKN7Onj1ratasaVasWGFatmxpK0bMhfM8//zz5v7777/m8pycHBMSEmLefvtt21hKSorx9PQ0c+fONcYYM2zYMPP8888bY4xJT083kszx48eNMZf/g2TBggWF+AlKjqioKDNgwAC7sW7dupk+ffoYY5gLZ/prMcrL737nzp1Gkt3fPUuXLjUWi8UcPnzYGGNMnTp1zNKlS40xl4tY3bp1jTHGnDlzxtSoUcMkJSXlK2+xPpV28eJFJSQkKDIy0jbm5uamyMhIxcfHq2HDhtq8ebPOnDmjhIQEZWRkqEaNGlq3bp22bNmip556yoXpS5bU1FRJsn3ZX0JCgrKysuzmpnbt2goLC1N8fLwkqWHDhlq1apUuXbqk5cuXq0GDBpKkt956S61atVLjxo2d/CmKt+HDhysqKsrudy4xF860aNEiNW7cWD169FDFihV111136aOPPrIt379/v44dO2Y3F/7+/rrnnnvs5mLdunXKyMjQ8uXLValSJVWoUEGxsbHy8vLSww8/7PTPVRzde++9WrlypX7//XdJ0rZt27Ru3Tp17NhREnPhSnn53cfHxysgIMDu757IyEi5ublpw4YNki7Pz/fff6+cnBx99913tr+3xowZo+HDhys0NDR/AfNVp4qIw4cPG0nmp59+shsfM2aMadq0qTHGmHHjxpnq1aubO+64wyxYsMBkZmaaO+64w2zevNlMmTLF3H777ebee+81O3bscMVHKBGys7NNVFSUue+++2xjsbGxxsPDI9e6TZo0Mc8995wx5vJ/IfTu3duEhYWZFi1amN9++838/vvvpmbNmubkyZNmyJAhJiIiwvTo0cOkpKQ47fMUR3PnzjV33HGH7TD0/x4xYi6cx9PT03h6epqxY8eaLVu2mJkzZxovLy8zZ84cY4wx69evN5LMkSNH7N7Xo0cP07NnT2PM5aN0Tz75pAkPDzeNGzc2P/74ozl16pSpVq2aSUpKMi+88IKpXr26ad++vfnzzz+d/hmLi+zsbPP8888bi8ViSpcubSwWi3n99ddty5kL59Ffjhjl5Xf/2muvmdtvvz3XtoKCgsy0adOMMcb8+eefJioqyoSGhpqoqCjz559/mrVr15rGjRubU6dOmR49epiIiAgzZMgQk5mZmee8xeIrQW7G+PHjNX78eNvrCRMmKDIyUu7u7po4caK2b9+uJUuW6PHHH1dCQoLrghZjw4cP144dO7Ru3TqH3ufv76+4uDi7sTZt2ujtt99WbGys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PClJSk1N1QsvvKCpU6fm2k758uUVFBSU598JgKKDYgTgus6dO6fPP/9cw4YNU1RUlObMmXNT2wsICFBISIjuuOMOTZ8+XRkZGVqxYsU117/77rsVGhqqBQsW2MYWLFigsLAw3XXXXXbrDh8+XB4eHvruu+/UsmVLhYWFqWPHjvr+++91+PBhvfDCCw5l3bVrl1q1aqXGjRurd+/e8vPz0/79+yVJzz33nIYNG5arnAEo3ihGAK7riy++UO3atVWrVi1FR0fr448/VkF9xaK3t7ck6eLFi9ddb8CAAYqJibG9/vjjj9W/f3+7dU6fPq3ly5frySeftG33ipCQEPXp00eff/65Q9kbNmyozZs368yZM0pISFBGRoZq1KihdevWacuWLXrqqafyvC0AxQPFCMB1zZ49W9HR0ZKkBx54QKmpqVq7du1Nbzc9PV0vvviiSpUqpZYtW1533ejoaK1bt04HDx7UwYMHtX79elumK/bs2SNjjOrUqXPVbdSpU0dnzpzRiRMn8pyxQ4cOio6OVpMmTdSvXz998sknKlOmjIYNG6YZM2Zo+vTpqlWrlu677z799ttved4ugKKrtKsDACi6EhMTtXHjRn399deSLl+D06tXL82ePVutWrXK1zZ79+6tUqVKKSMjQ0FBQZo9e7YaNGhw3fcEBQXZTuMZYxQVFaUKFSpcdd2COpp1xfjx4zV+/Hjb6wkTJigyMlLu7u6aOHGitm/friVLlujxxx9XQkJCge4bgPNRjABc0+zZs3Xp0iVVrlzZNmaMkaenpz788EP5+/vLz89P0uWLkQMCAuzen5KSIn9/f7uxd999V5GRkfL393foAuUBAwZoxIgRknTVC55r1Kghi8WiXbt26eGHH861fNeuXSpXrtxNXRS9e/duffbZZ/rll1/08ccfq0WLFgoKClLPnj01YMAAnT17VmXLls339gG4HqfSAFzVpUuX9Omnn+qdd97R1q1bbT/btm1T5cqVNXfuXElSzZo15ebmlutoyb59+5Samqrbb7/dbjwkJEQ1atRwuKA88MADunjxorKystShQ4dcywMDA9WuXTtNmzbN7g42STp27JhiY2PVq1cvWSwWh/Z7hTFGQ4YM0eTJk+Xr66vs7GxlZWVJku1/s7Oz87VtAEUHR4wAXNWSJUt05swZDRw4MNdRn+7du2v27NkaOnSoypYtqyeeeELPPvusSpcurfr16+vQoUN6/vnn1axZM917770FkqdUqVLatWuX7c9X8+GHH+ree+9Vhw4dNHHiREVEROi3337TmDFjdNttt+m1117L9/7//e9/KygoyPbcovvuu0/jx4/Xzz//rKVLl6pu3bq5jpgBKH44YgTgqmbPnm075fVX3bt31+bNm/Xrr79Kkt5//3317dtXzz//vOrVq6d+/fqpQYMGWrx4cb6P0FyNn5+f7dTd1dSsWVObN29WtWrV1LNnT1WvXl2DBw9W69atFR8fr/Lly+drv8nJyXrttdf0wQcf2MaaNm2qZ599VlFRUfriiy/s7poDUHxZTEFfqQgAxdD48eO1cOHCAvsKjwMHDigiIkK//PKL7rzzzgLZJoDCxxEjALDavn27fH19NW3atJvaTseOHVWvXr0CSgXAmThiBAC6/IDIK18ZEhQUdNVTiHl1+PBh2wXgYWFh8vDwKJCMAAofxQgAAMCKU2kAAABWFCMAAAArihEAAIAVxQgAAMCKYgQAAGBFMQIAALCiGAEAAFhRjAAAAKwoRgAAAFb/D60PVy7Nlq5qAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the normal images have `nan` values because\n", + "# recall is not defined for them so we ignore them\n", + "print(f\"MEAN\\n{aupimo_result.aupimos[labels == 1].mean().item()=}\")\n", + "print(f\"OTHER STATISTICS\\n{stats.describe(aupimo_result.aupimos[labels == 1])}\")\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.hist(aupimo_result.aupimos[labels == 1].numpy(), bins=np.linspace(0, 1, 11), edgecolor=\"black\")\n", + "ax.set_ylabel(\"Count (number of images)\")\n", + "ax.set_xlim(0, 1)\n", + "ax.set_xlabel(\"AUPIMO [%]\")\n", + "ax.xaxis.set_major_formatter(PercentFormatter(1))\n", + "ax.grid()\n", + "ax.set_title(\"AUPIMO distribution\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Until here we just reproduded the notebook with the basic usage of AUPIMO." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The PIMO curve \n", + "\n", + "We'll select a bunch of images to visualize the PIMO curves.\n", + "\n", + "To make sure we have best and worst detection examples, we'll use the representative samples selected in the previous notebook ([701b_aupimo_advanced_i.ipynb](./701b_aupimo_advanced_i.ipynb)).\n", + "\n", + "> Note the FPR (X-axis) is the average (in-image) FPR of the normal images in the test set. We'll note it as `FPRn`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# representative samples (in terms of the AUPIMO value)\n", + "# from lowest to highest AUPIMO score\n", + "samples = [65, 7, 58, 63, 22]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def fmt_pow10(value: float) -> str:\n", + " \"\"\"Format the power of 10.\"\"\"\n", + " return \"1\" if value == 1 else f\"$10^{{{int(np.log10(value))}}}$\"\n", + "\n", + "\n", + "def plot_pimo_with_auc_zone(\n", + " ax: Axes,\n", + " tpr: ndarray,\n", + " fpr: ndarray,\n", + " lower_bound: float,\n", + " upper_bound: float,\n", + " fpr_in_auc: ndarray,\n", + " tpr_in_auc: ndarray,\n", + ") -> None:\n", + " \"\"\"Helper function to plot the PIMO curve with the AUC zone.\"\"\"\n", + " # plot\n", + " ax.plot(fpr, tpr, linewidth=3.5)\n", + " ax.axvspan(lower_bound, upper_bound, color=\"magenta\", alpha=0.3, zorder=-1)\n", + " ax.fill_between(fpr_in_auc, tpr_in_auc, alpha=1, color=\"tab:purple\", zorder=1)\n", + "\n", + " # config plots\n", + " ax.set_ylabel(\"TPR [%]\")\n", + " ax.yaxis.set_major_locator(FixedLocator(np.linspace(0, 1, 6)))\n", + " ax.yaxis.set_major_formatter(PercentFormatter(1, 0, symbol=\"\"))\n", + " ax.set_ylim(0, 1 + 3e-2)\n", + " ax.set_xlabel(\"FPRn\")\n", + " ax.set_xscale(\"log\")\n", + " ax.xaxis.set_major_locator(FixedLocator(np.logspace(-6, 0, 7)))\n", + " ax.xaxis.set_major_formatter(lambda x, _: fmt_pow10(x))\n", + " ax.set_xlim(1e-6 / (eps := (1 + 3e-1)), 1 * eps)\n", + " ax.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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RERERERERo0dYyIiIiIiIjJq7BgTERERERGRUWPHmIiIiIiIiIwaO8ZERERERERk1NgxJiIiIiIiIqPGjjEREREREREZNXaMiYiIiIiIyKixY0xERERERERGjR1jIiIiIiIiMmrsGBMREREREZFRY8eYiIiIiIiIjBo7xkRERERERGTU2DEmIiIiIiIio8aOMRERERERERk1doyJiIiIiIjIqLFjTEREREREREaNHWMqlZRKJerUqYNFixaVdChUQNOnT0fTpk1LOgwiyevSpQtGjBhR0mGQATRr1gxTp04t6TCIiIwSO8YGsGHDBshkMvzzzz8lHUqxi42NxahRo1ChQgVYWVmhcuXKeP/999XabN++HYGBgfDy8oKlpSUqVqyIvn374sqVK3o/z6ZNmxAdHY0xY8aold+6dQvBwcGoWLEibGxsULNmTcyfPx+pqalq7eRyOebNm4cqVarA0tISVapUwcKFC5GVlaXW7tGjR+jatSscHBzg7++PXbt2acTy22+/wc3NDYmJiXrHn23q1KmQyWQYMGCA1vojR45AJpNh69atWuvHjBkDmUymVla5cmXIZDLVj5ubG1q1aoXt27ertWvbti3q1KmjdduOHTtqfb5169ap9qvt9/n48ePo1asX3N3dYWlpicqVK2PUqFF48OCBRtvx48fj4sWL2Llzp9bnotLHGHJddHQ05s2bhyZNmsDZ2RnlypVD27ZtceDAAY22Bw8exLBhw1C9enXY2NigSpUqGD58OJ48eaL38x0/fhz79+/HtGnT1MoXLVqEHj16wN3dHTKZDHPnztW5j0ePHqF///5wcnKCg4MDevbsibt372pt+/3336NWrVqwsrJCtWrV8NVXX2mN6Y033oC9vT3atm2L69eva7QZO3YsAgMD9X6dOTVp0gQymQxr1qzRWj937lzIZDI8f/5ca32dOnXQtm1b1eN79+6p5URTU1NUqlQJvXr1woULF9S2lclkan9Xcm67cOFCrc/3zjvvQCaTwc7OTqNOCIGff/4ZrVu3hpOTE2xsbFC3bl3Mnz8fKSkpGu2nTZuGVatWISYmRutzERFR8WHHmIpMdHQ0GjdujL179+KDDz7A6tWrMXz4cDx79kyt3eXLl+Hs7Ixx48Zh9erV+PDDD3H+/Hk0adIEFy9e1Ou5li9fjuDgYDg6Oqo9f5MmTRAZGYkx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", + "text/plain": [ + "
" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, axes = plt.subplots(2, 3, figsize=(10, 5), layout=\"tight\")\n", + "\n", + "for ax, index in zip(axes.flatten(), samples, strict=False):\n", + " score = aupimo_result.aupimos[index].item()\n", + " tpr = pimo_result.per_image_tprs[index]\n", + " fpr = pimo_result.shared_fpr\n", + " lower_bound, upper_bound = aupimo.fpr_bounds\n", + " threshs_auc_mask = (pimo_result.thresholds > aupimo_result.thresh_lower_bound) & (\n", + " pimo_result.thresholds < aupimo_result.thresh_upper_bound\n", + " )\n", + " fpr_in_auc = fpr[threshs_auc_mask]\n", + " tpr_in_auc = tpr[threshs_auc_mask]\n", + "\n", + " plot_pimo_with_auc_zone(ax, tpr, fpr, lower_bound, upper_bound, fpr_in_auc, tpr_in_auc)\n", + " ax.set_title(f\"Image {index} ({score:.0%} AUPIMO)\")\n", + "\n", + "axes[-1, -1].axis(\"off\")\n", + "axes[-1, -1].text(\n", + " -0.08,\n", + " 0,\n", + " \"\"\"\n", + "FPRn: Avg. [in-image] False Positive Rate (FPR)\n", + " on normal images only ('n').\n", + "\n", + "TPR: [in-image] True Positive Rate (TPR),\n", + " or Recall.\n", + "\n", + "Integration zone in light pink, and area\n", + "under the curve (AUC) in purple.\n", + "\n", + "This area is normalized by the range size\n", + "so that AUPIMO is in [0, 1].\n", + "\"\"\",\n", + " ha=\"left\",\n", + " va=\"bottom\",\n", + " fontsize=\"x-small\",\n", + " color=\"dimgray\",\n", + " font=\"monospace\",\n", + ")\n", + "\n", + "fig.suptitle(\"PIMO curves\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Meaning of the FPRn bounds\n", + "\n", + "AUPIMOo only uses _normal images_ in the X-axis -- i.e. the $\\operatorname{FPRn}$.\n", + "\n", + "**Why?** \n", + "\n", + "Because the integration range is a validation\\* of \"usable operating thresholds\", so using $\\operatorname{FPRn}$ makes it unbiased (to the anomalies).\n", + "\n", + "> Recall that, in practice, a threshold is set to decide if a pixel/image is anomalous.\n", + "> \n", + "> This strategy was inspired on [AUPRO](https://link.springer.com/article/10.1007/s11263-020-01400-4).\n", + "\n", + "---\n", + "\n", + "**Definition 1**: Average FPR on Normal Images ($\\operatorname{FPRn}$):\n", + "\n", + "$$\n", + " \\operatorname{FPRn} : t \\mapsto \\frac{1}{N} \\sum_{i=1}^{N} \\; \\times \\; \\operatorname{FPR}^{i}(t)\n", + "$$\n", + "\n", + "where $i$ and $N$ are, respectively, the index and the number of normal images in the test set. Note that $\\operatorname{FPRn}$ is the empirical average of $\\operatorname{FPR}^{i}$, so \n", + "\n", + "$$\n", + " \\operatorname{FPRn} \\approx \\mathbb{E} \\left[ \\operatorname{FPR}^{i} \\right]\n", + "$$\n", + "\n", + "**Defintion 2**: FPR of the $i$-th normal image ($\\operatorname{FPR}^{i}$): \n", + "\n", + "$$\n", + " \\operatorname{FPR}^{i} : t \\mapsto \\frac{\\text{Area of } \\mathbb{a}^{i} \\text{ above } t}{\\text{Area of } \\mathbb{a}^{i}}\n", + "$$\n", + "\n", + "where $\\mathbb{a}^{i}$ is the anomaly score map of the $i$-th image.\n", + "\n", + "---\n", + "\n", + "No further ado, let's visualize this $\\operatorname{FPRn}$!\n", + "\n", + "> For more details on this topic, check our paper in the last cell." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing the FPR of normal images ($\\operatorname{FPR}^{i}$)\n", + "\n", + "$\\operatorname{FPRn}$ is the average of $\\operatorname{FPR}^{i}$, so let's first visualize the latter." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# visalization of $FPR^i$\n", + "# since normal images do not have anomalous pixels\n", + "# their FPR actually correspond to the ratio of pixels\n", + "# (wrongly) classified as anomalous\n", + "\n", + "# we'll visualize 3 levels of FPR^(i) on some normal images\n", + "FRP_levels = [1e-2, 1e-3, 1e-4]\n", + "# technical detail: decreasing order of FPR --> increasing order of threshold\n", + "\n", + "\n", + "def threshold_from_fpr(anomaly_map: Tensor, fpr_level: float | Tensor) -> float:\n", + " \"\"\"Find the threshold that corresponds to the given FPR level.\n", + "\n", + " Args:\n", + " anomaly_map (torch.Tensor): Anomaly map, assumed to be from a normal image.\n", + " fpr_level (float): Desired FPR level.\n", + "\n", + " Returns:\n", + " float: Threshold such that `(anomaly_map > threshold).mean() == fpr_level`.\n", + " \"\"\"\n", + " # make a dicothomic search\n", + " lower, upper = anomaly_map.min(), anomaly_map.max() # initial bounds\n", + " middle = (lower + upper) / 2\n", + " fpr_level = torch.tensor(fpr_level)\n", + "\n", + " def fpr(threshold: Tensor) -> Tensor:\n", + " return (anomaly_map > threshold).float().mean()\n", + "\n", + " while not torch.isclose(fpr(middle), fpr_level, rtol=1e-2):\n", + " if torch.isclose(lower, upper, rtol=1e-3):\n", + " break\n", + " if fpr(middle) < fpr_level:\n", + " upper = middle\n", + " else:\n", + " lower = middle\n", + " middle = (lower + upper) / 2\n", + " return middle.item()\n", + "\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(13, 5), layout=\"constrained\")\n", + "\n", + "# select normal images with low and high mean anomaly scores\n", + "avg_anom_score_per_image = anomaly_maps.mean(dim=(1, 2))\n", + "# get the indices of the normal images sorted by their mean anomaly score\n", + "argsort = avg_anom_score_per_image.sort().indices\n", + "argsort = argsort[torch.isin(argsort, torch.where(labels == 0)[0])]\n", + "# select first, median and last\n", + "normal_images_selection = argsort[[0, len(argsort) // 2, -1]]\n", + "\n", + "# heatmaps will be normalized across *normal* images\n", + "# so the range of thresholds have an exact mapping to the range of [0, 1] in FPRn\n", + "# PS: it is not exactly true because we don't get a min-max, but a quantile-based normalization\n", + "global_normal_vmin, global_normal_vmax = torch.quantile(anomaly_maps[labels == 0], torch.tensor([0.02, 0.98]))\n", + "\n", + "for ax, index in zip(axes, normal_images_selection, strict=False):\n", + " image = cv2.resize(read_image(image_paths[index]), (256, 256))\n", + " anomaly_map = anomaly_maps[index]\n", + " thresholds = [threshold_from_fpr(anomaly_map, fpr_level) for fpr_level in FRP_levels]\n", + " anomaly_map = anomaly_map.numpy()\n", + "\n", + " ax.imshow(image)\n", + " ax.imshow(anomaly_map, cmap=\"jet\", alpha=0.10, vmin=global_normal_vmin, vmax=global_normal_vmax)\n", + " c = ax.contour(anomaly_map, levels=thresholds, linewidths=1, colors=[\"blue\", \"yellow\", \"red\"])\n", + " ax.set_title(f\"image {index}\")\n", + "\n", + "for ax in axes.flatten():\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "fig.text(\n", + " 0.03,\n", + " -0.01,\n", + " \"Anomaly maps colored in JET colormap with min-max normalization across all normal images. \"\n", + " \" $\\\\operatorname{FPR}^{i}$ levels: \"\n", + " f\"Blue = {fmt_pow10(FRP_levels[0])} Yellow = {fmt_pow10(FRP_levels[1])} Red = {fmt_pow10(FRP_levels[2])}\",\n", + " ha=\"left\",\n", + " va=\"top\",\n", + " color=\"dimgray\",\n", + ")\n", + "\n", + "fig.suptitle(\"Contours of $\\\\operatorname{FPR}^{i}$ levels on normal samples from the test set\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A few notes about the different FPR levels:\n", + "- $10^{-2}$ (blue): images have many and/or quite visible false positive regions;\n", + "- $10^{-3}$ (yellow): most regions disappear, but a few are still visible; \n", + "- $10^{-4}$ (red): usually one or two regions, barely visible." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing the Average FPR on Normal Images ($\\operatorname{FPRn}$)\n", + "\n", + "Let's now visualize the $\\operatorname{FPRn}$ and the variance of $\\operatorname{FPR}^{i}$ across the normal images." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# visalization of $FPRn$\n", + "# this one is an average behavior of the previous\n", + "# so one should expect a similar behavior but with\n", + "# some variations at each FPR level\n", + "\n", + "# we'll visualize the same FPR levels\n", + "FRP_levels = [1e-2, 1e-3, 1e-4]\n", + "# technical detail: decreasing order of FPR --> increasing order of threshold\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(14, 5.2), layout=\"constrained\")\n", + "\n", + "# function `threshold_from_fpr()` is replaced by an equivalent function\n", + "# for FPRn is already implemented in `pimo_result.thresh_at`\n", + "thresholds = [pimo_result.thresh_at(fpr_level)[1] for fpr_level in FRP_levels]\n", + "# note that all images used the same (ie 'shared') thresholds now\n", + "\n", + "# `normal_images_selection` is the same from the previous cell\n", + "for ax, index in zip(axes, normal_images_selection, strict=False):\n", + " image = cv2.resize(read_image(image_paths[index]), (256, 256))\n", + " anomaly_map = anomaly_maps[index]\n", + " fprs = [(anomaly_map > threshold).float().mean() for threshold in thresholds]\n", + " anomaly_map = anomaly_map.numpy()\n", + "\n", + " ax.imshow(image)\n", + " # `global_normal_vmin` and `global_normal_vmax` are the same from the previous cell\n", + " ax.imshow(anomaly_map, cmap=\"jet\", alpha=0.10, vmin=global_normal_vmin, vmax=global_normal_vmax)\n", + " c = ax.contour(anomaly_map, levels=thresholds, linewidths=1, colors=[\"blue\", \"yellow\", \"red\"])\n", + " ax.set_title(f\"image {index}\")\n", + "\n", + " ax.annotate(\n", + " \"$\\\\operatorname{FPR}^{i}$ levels: \"\n", + " f\"Blue = {fprs[0] * 100:.1g}% Yellow = {fprs[1] * 100:.1g}% Red = {fprs[2] * 100:.1g}%\",\n", + " xy=(0.01, 0.01),\n", + " xycoords=\"axes fraction\",\n", + " ha=\"left\",\n", + " va=\"bottom\",\n", + " color=\"white\",\n", + " )\n", + "\n", + "for ax in axes.flatten():\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "fig.text(\n", + " 0.03,\n", + " -0.01,\n", + " \"Anomaly maps colored in JET colormap with min-max normalization across all normal images. \"\n", + " \" $\\\\operatorname{FPRn}$ levels: \"\n", + " f\"Blue = {fmt_pow10(FRP_levels[0])} Yellow = {fmt_pow10(FRP_levels[1])} Red = {fmt_pow10(FRP_levels[2])}\",\n", + " ha=\"left\",\n", + " va=\"top\",\n", + " color=\"dimgray\",\n", + ")\n", + "\n", + "fig.suptitle(\"Contours of $\\\\operatorname{FPRn}$ levels on normal samples from the test set\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Discussion\n", + "\n", + "#### Variance\n", + "\n", + "Note that each $\\operatorname{FPR}^{i}$ has a wide variance\\* of visual results across images.\n", + " \n", + "For instance, the blue level ranges from 0.2% to 3%, which visually is a huge difference, and the red level doesn't even show in most images.\n", + "\n", + "This variance is specific to each model-dataset, we observed many state-of-the-art models on the datasets from MVTec-AD and VisA, and we noticed that low levels tend to have a negligible visual variance.\n", + "\n", + "#### Default bounds (L and U)\n", + "\n", + "So how were the default bounds chosen?\n", + "\n", + "> Recall: \n", + "> \n", + "> $$\n", + "> \\text{AUPIMO} \n", + "> \\; = \\; \n", + "> \\frac{1}{\\log(U/L)}\n", + "> \\int_{\\log(L)}^{\\log(U)} \n", + "> \\operatorname{TPR}^{i}\\left( \\operatorname{FRPn^{-1}}( z ) \\right)\n", + "> \\, \n", + "> \\mathrm{d}\\log(z) \n", + "> $$\n", + "\n", + "##### Upper bound U = 10^{-4}\n", + "\n", + "The upper bound $U$ sets the requirement level of the detection task.\n", + "\n", + "The lower the $U$, the harder the task, and ideally we'd like it be zero (i.e. anomalies are detected with no false positives).\n", + "\n", + "Compared to the images' content, the regions at $\\operatorname{FPRn} = 10^{-4}$ are _visually negligible_\\*.\n", + " \n", + "##### Lower bound L = 10^{-5}\n", + "\n", + "The lower bound $L$ has two numerical motivations.\n", + "\n", + "First, AUPIMO's integral is in log scale, so necessarily $L > 0$ and more weight is given to lower FPR levels.\n", + "\n", + "Second, images/masks/anomaly maps have finite resolution ($\\approx 10^{6}$ pixels/image\\*) -- so $\\operatorname{FPR}^{i}$ and $\\operatorname{FPRn}$ have discrete ranges.\n", + "\n", + "At $\\operatorname{FPRn} = 10^{-5}$, the discretization effects are still reasonable.\n", + "\n", + "##### Be careful!\n", + "\n", + "\\* These observations are based on the datasets we analyzed (from MVTec-AD and VisA).\n", + "\n", + "For other datasets, the default bounds may not be the best choice.\n", + "\n", + "Fortunately, AUPIMO allows customizing the bounds!\n", + "\n", + "> More details on these topics in our paper (see the last cell)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Custom FPRn bounds\n", + "\n", + "It's very easy to customize the $\\operatorname{FPRn}$ bounds $L$ and $U$ in AUPIMO.\n", + "\n", + "You can guess from the signature:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mInit signature:\u001b[0m\n", + "\u001b[0mAUPIMO\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mnum_thresholds\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m300000\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mfpr_bounds\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfloat\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1e-05\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0.0001\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mreturn_average\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mforce\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m \n", + "Area Under the Per-Image Overlap (PIMO) curve.\n", + "\n", + "This torchmetrics interface is a wrapper around the functional interface, which is a wrapper around the numpy code.\n", + "The tensors are converted to numpy arrays and then passed and validated in the numpy code.\n", + "The results are converted back to tensors and wrapped in an dataclass object.\n", + "\n", + "Scores are computed from the integration of the PIMO curves within the given FPR bounds, then normalized to [0, 1].\n", + "It can be thought of as the average TPR of the PIMO curves within the given FPR bounds.\n", + "\n", + "Details: `anomalib.metrics.per_image.pimo`.\n", + "\n", + "Notation:\n", + " N: number of images\n", + " H: image height\n", + " W: image width\n", + " K: number of thresholds\n", + "\n", + "Attributes:\n", + " anomaly_maps: floating point anomaly score maps of shape (N, H, W)\n", + " masks: binary (bool or int) ground truth masks of shape (N, H, W)\n", + "\n", + "Args:\n", + " num_thresholds: number of thresholds to compute (K)\n", + " fpr_bounds: lower and upper bounds of the FPR integration range\n", + " force: whether to force the computation despite bad conditions\n", + "\n", + "Returns:\n", + " tuple[PIMOResult, AUPIMOResult]: PIMO and AUPIMO results dataclass objects. See `PIMOResult` and `AUPIMOResult`.\n", + "\u001b[0;31mInit docstring:\u001b[0m\n", + "Area Under the Per-Image Overlap (PIMO) curve.\n", + "\n", + "Args:\n", + " num_thresholds: [passed to parent `PIMO`] number of thresholds used to compute the PIMO curve\n", + " fpr_bounds: lower and upper bounds of the FPR integration range\n", + " return_average: if True, return the average AUPIMO score; if False, return all the individual AUPIMO scores\n", + " force: if True, force the computation of the AUPIMO scores even in bad conditions (e.g. few points)\n", + "\u001b[0;31mFile:\u001b[0m ~/miniconda3/envs/anomalib-dev/lib/python3.10/site-packages/anomalib/metrics/pimo/pimo.py\n", + "\u001b[0;31mType:\u001b[0m ABCMeta\n", + "\u001b[0;31mSubclasses:\u001b[0m " + ] + } + ], + "source": [ + "AUPIMO?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's recompute the scores with the following situation: \n", + "- $U = 10^{-2}$ to make the detection task easier;\n", + "- $L = 10^{-4}$ assuming that \"small\" anomalies are not important for the application." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Metric `AUPIMO` will save all targets and predictions in buffer. For large datasets this may lead to large memory footprint.\n" + ] + } + ], + "source": [ + "aupimo_custom = AUPIMO(\n", + " # with `False` all the values are returned in a dataclass\n", + " return_average=False,\n", + " # customized!\n", + " fpr_bounds=(1e-4, 1e-2),\n", + ")\n", + "\n", + "# we already have all of them in concatenated tensors\n", + "# so we don't need to loop over the batches like before\n", + "aupimo_custom.update(anomaly_maps=anomaly_maps, masks=masks)\n", + "pimo_result_custom, aupimo_result_custom = aupimo_custom.compute()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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vYJaunRpAMDt27fTjcvR0REREREa5U+fPk13u7R69+6NpKQk7Nq1C4cOHUJkZKTa5GJFixaFra0tFAoFWrdurfXHxcVF1d7a2hq9e/fGhg0b8OzZM3Ts2BGzZs1CfHx8puIiIiLKDewYExERZYGNjQ1WrlyJ77//Hp07d9bZrlGjRmjdujU2bNigtsyR0jfffIP79+/jyy+/1Hn1FgDatGkDW1tbzJkzR6MzmXryrdKlS+P8+fNITExUlR04cADPnz/PzMtDxYoVUbVqVWzfvh3bt29HsWLF1K54Gxsbo3v37ti1a5fWznpoaKjq/+/evVOrMzMzQ6VKlSCEgFwuz1RcREREuYFDqYmIiLJI1xDitDZv3gwfHx907doVfn5+aNq0KRISEvD777/j1KlT6N27NyZNmpTuPuzs7PDjjz9iyJAhqFu3Lvz8/ODo6IgbN24gNjZWte7wkCFDsHPnTrRr1w69evXCo0ePsGXLFtUV58zo3bs3vvvuO1hYWGDw4MEa92HPnTsXJ0+eRP369TF06FBUqlQJ4eHhuHr1Ko4dO4bw8HAAKZ16Nzc3NG7cGK6urggKCsLPP/+Mjh07pntfNRERUV7hFWMiIqJcVqxYMVy8eBHfffcdrl27hrFjx+Kbb76BXC7Hxo0bsXXrVq33/6Y1ePBg7Nu3D3Z2dpg5cyYmT56Mq1evon379qo2bdu2xaJFi3D//n2MHTsW586dw4EDB+Dp6ZnpuHv37o3k5GTExsaqZqNOzdXVFRcvXsSgQYPw+++/q9YyDg8Px7x581Tthg8fjujoaCxevBgjRozAnj17MHr0aGzZsiXTMREREeUGmcjO4odEREREREREBRyvGBMREREREZFBY8eYiIiIiIiIDBo7xkRERERERGTQ2DEmIiIiIiIig8aOMRERERERERk0doyJiIiIiIjIoLFjTERERERERAaNHWMiIiIiIiIyaOwYExERERERkUFjx5iIiIiIiIgMGjvGREREREREZNDYMSYiIiIiIiKDxo4xERERERERGTR2jImIiIiIiMigsWNMREREREREBo0dYyIiIiIiIjJo7BgTERERERGRQWPHmIiIiIiIiAwaO8ZERERERERk0NgxJiIiIiIiIoPGjjEREREREREZNHaMiYiIiIiIyKCxY0xEREREREQGjR1jKpCio6Ph4uICf3///A6F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", + "text/plain": [ + "
" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, axes = plt.subplots(2, 3, figsize=(10, 5), layout=\"tight\")\n", + "\n", + "for ax, index in zip(axes.flatten(), samples, strict=False):\n", + " score = aupimo_result_custom.aupimos[index].item()\n", + " tpr = pimo_result_custom.per_image_tprs[index]\n", + " fpr = pimo_result_custom.shared_fpr\n", + " lower_bound, upper_bound = aupimo_custom.fpr_bounds\n", + " threshs_auc_mask = (pimo_result_custom.thresholds > aupimo_result_custom.thresh_lower_bound) & (\n", + " pimo_result_custom.thresholds < aupimo_result_custom.thresh_upper_bound\n", + " )\n", + " fpr_in_auc = fpr[threshs_auc_mask]\n", + " tpr_in_auc = tpr[threshs_auc_mask]\n", + "\n", + " plot_pimo_with_auc_zone(ax, tpr, fpr, lower_bound, upper_bound, fpr_in_auc, tpr_in_auc)\n", + " ax.set_title(f\"Image {index} ({score:.0%} AUPIMO)\")\n", + "\n", + "axes[-1, -1].axis(\"off\")\n", + "axes[-1, -1].text(\n", + " -0.08,\n", + " 0,\n", + " \"\"\"\n", + "FPRn: Avg. [in-image] False Positive Rate (FPR)\n", + " on normal images only ('n').\n", + "\n", + "TPR: [in-image] True Positive Rate (TPR),\n", + " or Recall.\n", + "\n", + "Integration zone in light pink, and area\n", + "under the curve (AUC) in purple.\n", + "\n", + "This area is normalized by the range size\n", + "so that AUPIMO is in [0, 1].\n", + "\"\"\",\n", + " ha=\"left\",\n", + " va=\"bottom\",\n", + " fontsize=\"x-small\",\n", + " color=\"dimgray\",\n", + " font=\"monospace\",\n", + ")\n", + "\n", + "fig.suptitle(\"PIMO curves\")\n", + "fig # noqa: B018, RUF100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice how the AUPIMO score increased with the easier task :) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cite Us\n", + "\n", + "AUPIMO was developed during Google Summer of Code 2023 (GSoC 2023) with the `anomalib` team from OpenVINO Toolkit.\n", + "\n", + "Our work was accepted to the British Machine Vision Conference 2024 (BMVC 2024).\n", + "\n", + "```bibtex\n", + "@misc{bertoldo2024aupimo,\n", + " title={{AUPIMO: Redefining Visual Anomaly Detection Benchmarks with High Speed and Low Tolerance}}, \n", + " author={Joao P. C. Bertoldo and Dick Ameln and Ashwin Vaidya and Samet Akรงay},\n", + " year={2024},\n", + " eprint={2401.01984},\n", + " archivePrefix={arXiv},\n", + " primaryClass={cs.CV},\n", + " url={https://arxiv.org/abs/2401.01984}, \n", + "}\n", + "```\n", + "\n", + "Paper on arXiv: [arxiv.org/abs/2401.01984](https://arxiv.org/abs/2401.01984) (accepted to BMVC 2024)\n", + "\n", + "Medium post: [medium.com/p/c653ac30e802](https://medium.com/p/c653ac30e802)\n", + "\n", + "Official repository: [github.com/jpcbertoldo/aupimo](https://github.com/jpcbertoldo/aupimo) (numpy-only API and numba-accelerated versions available)\n", + "\n", + "GSoC 2023 page: [summerofcode.withgoogle.com/archive/2023/projects/SPMopugd](https://summerofcode.withgoogle.com/archive/2023/projects/SPMopugd)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "anomalib-dev", + "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.10.14" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/700_metrics/pimo_viz.svg b/notebooks/700_metrics/pimo_viz.svg new file mode 100644 index 0000000000..962c95f463 --- /dev/null +++ b/notebooks/700_metrics/pimo_viz.svg @@ -0,0 +1,619 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PIMO + + + + + +i + + + + + +AUPIMO + + + + + +i + + +Recall(t) + + +Upper bound + + +Lower bound + + +FPR(t) + + +โ‡’ + +Recall(t) + +Upper bound + +Lower bound + +t [anomaly score threholds] + +Transparent(never detected as anomalous) + +RED(always detectedas anomalous) + +JET(AUPIMO range) + + diff --git a/notebooks/700_metrics/roc_pro_pimo.svg b/notebooks/700_metrics/roc_pro_pimo.svg new file mode 100644 index 0000000000..b580e89d17 --- /dev/null +++ b/notebooks/700_metrics/roc_pro_pimo.svg @@ -0,0 +1,690 @@ + + + +image/svg+xmlEach curve summarizesthe test set with di + + +๏ฌ€ + + +erent aggregations. + + +ROC + + +PRO + + +One per image! + + +AUROC + + +AUPRO + + +AUPIMO + + +PIMO + + +i + + +i + + +Recall + + diff --git a/notebooks/README.md b/notebooks/README.md index 36976a6855..8d8724a228 100644 --- a/notebooks/README.md +++ b/notebooks/README.md @@ -51,3 +51,11 @@ To install Python, Git and other required tools, [OpenVINO Notebooks](https://gi | ---------------------- | ------------------------------------------------------------------------------------------------------------- | ----- | | Dobot Dataset Creation | [501a_training](/notebooks/500_use_cases/501_dobot/501a_training_a_model_with_cubes_from_a_robotic_arm.ipynb) | | | Training | [501b_training](/notebooks/500_use_cases/501_dobot/501b_inference_with_a_robotic_arm.ipynb) | | + +## 7. Metrics + +| Notebook | GitHub | Colab | +| ----------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| AUPIMO basics | [701a_aupimo](/notebooks/700_metrics/701a_aupimo.ipynb) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/openvinotoolkit/anomalib/blob/main/notebooks/700_metrics/701a_aupimo.ipynb) | +| AUPIMO representative samples and visualization | [701b_aupimo_advanced_i](/notebooks/700_metrics/701b_aupimo_advanced_i.ipynb) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/openvinotoolkit/anomalib/blob/main/notebooks/700_metrics/701b_aupimo_advanced_i.ipynb) | +| PIMO curve and integration bounds | [701c_aupimo_advanced_ii](/notebooks/700_metrics/701c_aupimo_advanced_ii.ipynb) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/openvinotoolkit/anomalib/blob/main/notebooks/700_metrics/701c_aupimo_advanced_ii.ipynb) | diff --git a/pyproject.toml b/pyproject.toml index 052aae2a3f..2893ad20c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # SETUP CONFIGURATION. # [build-system] -requires = ["setuptools>=42", "wheel"] +requires = ["setuptools>=64.0.0", "wheel"] build-backend = "setuptools.build_meta" [project] @@ -46,7 +46,7 @@ core = [ "matplotlib>=3.4.3", "opencv-python>=4.5.3.56", "pandas>=1.1.0", - "timm<=1.0.7,>=1.0.7", + "timm", "lightning>=2.2", "torch>=2", "torchmetrics>=1.3.2", @@ -68,7 +68,7 @@ docs = [ "myst-parser", "nbsphinx", "pandoc", - "sphinx<8.0", # 7.0 breaks readthedocs builds. + "sphinx", "sphinx_autodoc_typehints", "sphinx_book_theme", "sphinx-copybutton", @@ -96,8 +96,11 @@ version = { attr = "anomalib.__version__" } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # RUFF CONFIGURATION # [tool.ruff] +# Enable preview features +preview = true + # Enable rules -select = [ +lint.select = [ "F", # Pyflakes (`F`) "E", # pycodestyle error (`E`) "W", # pycodestyle warning (`W`) @@ -148,7 +151,7 @@ select = [ # "LOG", # flake8-logging (`LOG`) - ERROR: Unknown rule selector: `LOG` ] -ignore = [ +lint.ignore = [ # pydocstyle "D107", # Missing docstring in __init__ @@ -158,6 +161,30 @@ ignore = [ "PLR0912", # Too many branches "PLR0915", # Too many statements + # NOTE: Disable the following rules for now. + "A004", # import is shadowing a Python built-in + "A005", #ย Module is shadowing a Python built-in + "B909", # Mutation to loop iterable during iteration + "PLC2701", # Private name import + "PLC0415", # import should be at the top of the file + "PLR0917", # Too many positional arguments + "E226", # Missing whitespace around arithmetic operator + "E266", # Too many leading `#` before block comment + + "F822", #ย Undefined name `` in `__all__` + + "PGH004", # Use specific rule codes when using 'ruff: noqa' + "PT001", # Use @pytest.fixture over @pytest.fixture() + "PLR6104", # Use `*=` to perform an augmented assignment directly + "PLR0914", # Too many local variables + "PLC0206", # Extracting value from dictionary without calling `.items()` + "PLC1901", #ย can be simplified + + "RUF021", # Parenthesize the `and` subexpression + "RUF022", #ย Apply an isort-style sorting to '__all__' + "S404", # `subprocess` module is possibly insecure + # End of disable rules + # flake8-annotations "ANN101", # Missing-type-self "ANN002", # Missing type annotation for *args @@ -178,8 +205,8 @@ ignore = [ ] # Allow autofix for all enabled rules (when `--fix`) is provided. -fixable = ["ALL"] -unfixable = [] +lint.fixable = ["ALL"] +lint.unfixable = [] # Exclude a variety of commonly ignored directories. exclude = [ @@ -209,7 +236,7 @@ exclude = [ line-length = 120 # Allow unused variables when underscore-prefixed. -dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" +lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" # Assume Python 3.10. target-version = "py310" @@ -217,14 +244,22 @@ target-version = "py310" # Allow imports relative to the "src" and "tests" directories. src = ["src", "tests"] -[tool.ruff.mccabe] +[tool.ruff.lint.mccabe] # Unlike Flake8, default to a complexity level of 10. max-complexity = 15 -[tool.ruff.pydocstyle] +[tool.ruff.lint.pydocstyle] convention = "google" +[tool.ruff.lint.flake8-copyright] +notice-rgx = """ +# Copyright \\(C\\) (\\d{4}(-\\d{4})?) Intel Corporation +# SPDX-License-Identifier: Apache-2\\.0 +""" + +[tool.ruff.lint.per-file-ignores] +"notebooks/**/*" = ["CPY001"] # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # MYPY CONFIGURATION. # diff --git a/src/anomalib/callbacks/checkpoint.py b/src/anomalib/callbacks/checkpoint.py index 8947124364..7d7b4bb7d5 100644 --- a/src/anomalib/callbacks/checkpoint.py +++ b/src/anomalib/callbacks/checkpoint.py @@ -35,10 +35,10 @@ def _should_skip_saving_checkpoint(self, trainer: Trainer) -> bool: Overrides the parent method to allow saving during both the ``FITTING`` and ``VALIDATING`` states, and to allow saving when the global step and last_global_step_saved are both 0 (only for zero-/few-shot models). """ - is_zero_or_few_shot = trainer.lightning_module.learning_type in [LearningType.ZERO_SHOT, LearningType.FEW_SHOT] + is_zero_or_few_shot = trainer.lightning_module.learning_type in {LearningType.ZERO_SHOT, LearningType.FEW_SHOT} return ( bool(trainer.fast_dev_run) # disable checkpointing with fast_dev_run - or trainer.state.fn not in [TrainerFn.FITTING, TrainerFn.VALIDATING] # don't save anything during non-fit + or trainer.state.fn not in {TrainerFn.FITTING, TrainerFn.VALIDATING} # don't save anything during non-fit or trainer.sanity_checking # don't save anything during sanity check or (self._last_global_step_saved == trainer.global_step and not is_zero_or_few_shot) ) @@ -52,7 +52,7 @@ def _should_save_on_train_epoch_end(self, trainer: Trainer) -> bool: if self._save_on_train_epoch_end is not None: return self._save_on_train_epoch_end - if trainer.lightning_module.learning_type in [LearningType.ZERO_SHOT, LearningType.FEW_SHOT]: + if trainer.lightning_module.learning_type in {LearningType.ZERO_SHOT, LearningType.FEW_SHOT}: return False return super()._should_save_on_train_epoch_end(trainer) diff --git a/src/anomalib/callbacks/graph.py b/src/anomalib/callbacks/graph.py index e2f27e3a99..38864245f6 100644 --- a/src/anomalib/callbacks/graph.py +++ b/src/anomalib/callbacks/graph.py @@ -33,7 +33,8 @@ class GraphLogger(Callback): >>> engine = Engine(logger=logger, callbacks=callbacks) """ - def on_train_start(self, trainer: Trainer, pl_module: LightningModule) -> None: + @staticmethod + def on_train_start(trainer: Trainer, pl_module: LightningModule) -> None: """Log model graph to respective logger. Args: @@ -47,7 +48,8 @@ def on_train_start(self, trainer: Trainer, pl_module: LightningModule) -> None: logger.watch(pl_module, log_graph=True, log="all") break - def on_train_end(self, trainer: Trainer, pl_module: LightningModule) -> None: + @staticmethod + def on_train_end(trainer: Trainer, pl_module: LightningModule) -> None: """Unwatch model if configured for wandb and log it model graph in Tensorboard if specified. Args: diff --git a/src/anomalib/callbacks/metrics.py b/src/anomalib/callbacks/metrics.py index 081e43d2aa..5cee830dad 100644 --- a/src/anomalib/callbacks/metrics.py +++ b/src/anomalib/callbacks/metrics.py @@ -98,11 +98,8 @@ def setup( pl_module.pixel_metrics = create_metric_collection(pixel_metric_names, "pixel_") self._set_threshold(pl_module) - def on_validation_epoch_start( - self, - trainer: Trainer, - pl_module: AnomalyModule, - ) -> None: + @staticmethod + def on_validation_epoch_start(trainer: Trainer, pl_module: AnomalyModule) -> None: del trainer # Unused argument. pl_module.image_metrics.reset() @@ -123,21 +120,14 @@ def on_validation_batch_end( self._outputs_to_device(outputs) self._update_metrics(pl_module.image_metrics, pl_module.pixel_metrics, outputs) - def on_validation_epoch_end( - self, - trainer: Trainer, - pl_module: AnomalyModule, - ) -> None: + def on_validation_epoch_end(self, trainer: Trainer, pl_module: AnomalyModule) -> None: del trainer # Unused argument. self._set_threshold(pl_module) self._log_metrics(pl_module) - def on_test_epoch_start( - self, - trainer: Trainer, - pl_module: AnomalyModule, - ) -> None: + @staticmethod + def on_test_epoch_start(trainer: Trainer, pl_module: AnomalyModule) -> None: del trainer # Unused argument. pl_module.image_metrics.reset() @@ -158,16 +148,13 @@ def on_test_batch_end( self._outputs_to_device(outputs) self._update_metrics(pl_module.image_metrics, pl_module.pixel_metrics, outputs) - def on_test_epoch_end( - self, - trainer: Trainer, - pl_module: AnomalyModule, - ) -> None: + def on_test_epoch_end(self, trainer: Trainer, pl_module: AnomalyModule) -> None: del trainer # Unused argument. self._log_metrics(pl_module) - def _set_threshold(self, pl_module: AnomalyModule) -> None: + @staticmethod + def _set_threshold(pl_module: AnomalyModule) -> None: pl_module.image_metrics.set_threshold(pl_module.image_threshold.value.item()) pl_module.pixel_metrics.set_threshold(pl_module.pixel_threshold.value.item()) diff --git a/src/anomalib/callbacks/nncf/utils.py b/src/anomalib/callbacks/nncf/utils.py index e221e2e16c..99f1db6aaa 100644 --- a/src/anomalib/callbacks/nncf/utils.py +++ b/src/anomalib/callbacks/nncf/utils.py @@ -40,7 +40,8 @@ def __next__(self) -> torch.Tensor: loaded_item = next(self._data_loader_iter) return loaded_item["image"] - def get_inputs(self, dataloader_output: dict[str, str | torch.Tensor]) -> tuple[tuple, dict]: + @staticmethod + def get_inputs(dataloader_output: dict[str, str | torch.Tensor]) -> tuple[tuple, dict]: """Get input to model. Returns: @@ -49,7 +50,8 @@ def get_inputs(self, dataloader_output: dict[str, str | torch.Tensor]) -> tuple[ """ return (dataloader_output,), {} - def get_target(self, _): # noqa: ANN001, ANN201 + @staticmethod + def get_target(_) -> None: # noqa: ANN001 """Return structure for ground truth in loss criterion based on dataloader output. This implementation does not do anything and is a placeholder. diff --git a/src/anomalib/callbacks/normalization/min_max_normalization.py b/src/anomalib/callbacks/normalization/min_max_normalization.py index cdd9760b42..ff0afc9232 100644 --- a/src/anomalib/callbacks/normalization/min_max_normalization.py +++ b/src/anomalib/callbacks/normalization/min_max_normalization.py @@ -23,7 +23,8 @@ class _MinMaxNormalizationCallback(NormalizationCallback): Note: This callback is set within the Engine. """ - def setup(self, trainer: Trainer, pl_module: AnomalyModule, stage: str | None = None) -> None: + @staticmethod + def setup(trainer: Trainer, pl_module: AnomalyModule, stage: str | None = None) -> None: """Add min_max metrics to normalization metrics.""" del trainer, stage # These variables are not used. @@ -48,7 +49,8 @@ def setup(self, trainer: Trainer, pl_module: AnomalyModule, stage: str | None = msg = f"Expected normalization_metric {name} to be of type MinMax, got {type(metric)}" raise TypeError(msg) - def on_test_start(self, trainer: Trainer, pl_module: AnomalyModule) -> None: + @staticmethod + def on_test_start(trainer: Trainer, pl_module: AnomalyModule) -> None: """Call when the test begins.""" del trainer # `trainer` variable is not used. @@ -56,15 +58,16 @@ def on_test_start(self, trainer: Trainer, pl_module: AnomalyModule) -> None: if metric is not None: metric.set_threshold(0.5) - def on_validation_epoch_start(self, trainer: Trainer, pl_module: AnomalyModule) -> None: + @staticmethod + def on_validation_epoch_start(trainer: Trainer, pl_module: AnomalyModule) -> None: """Call when the validation epoch begins.""" del trainer # `trainer` variable is not used. if hasattr(pl_module, "normalization_metrics"): pl_module.normalization_metrics.reset() + @staticmethod def on_validation_batch_end( - self, trainer: Trainer, pl_module: AnomalyModule, outputs: STEP_OUTPUT, diff --git a/src/anomalib/callbacks/thresholding.py b/src/anomalib/callbacks/thresholding.py index 1a4d12febd..14bae0331d 100644 --- a/src/anomalib/callbacks/thresholding.py +++ b/src/anomalib/callbacks/thresholding.py @@ -11,7 +11,7 @@ from lightning.pytorch.utilities.types import STEP_OUTPUT from omegaconf import DictConfig, ListConfig -from anomalib.metrics.threshold import BaseThreshold +from anomalib.metrics.threshold import Threshold from anomalib.models import AnomalyModule from anomalib.utils.types import THRESHOLD @@ -28,8 +28,8 @@ def __init__( ) -> None: super().__init__() self._initialize_thresholds(threshold) - self.image_threshold: BaseThreshold - self.pixel_threshold: BaseThreshold + self.image_threshold: Threshold + self.pixel_threshold: Threshold def setup(self, trainer: Trainer, pl_module: AnomalyModule, stage: str) -> None: del trainer, stage # Unused arguments. @@ -86,13 +86,13 @@ def _initialize_thresholds( # When only a single threshold class is passed. # This initializes image and pixel thresholds with the same class # >>> _initialize_thresholds(F1AdaptiveThreshold()) - if isinstance(threshold, BaseThreshold): + if isinstance(threshold, Threshold): self.image_threshold = threshold self.pixel_threshold = threshold.clone() # When a tuple of threshold classes are passed # >>> _initialize_thresholds((ManualThreshold(0.5), ManualThreshold(0.5))) - elif isinstance(threshold, tuple) and isinstance(threshold[0], BaseThreshold): + elif isinstance(threshold, tuple) and isinstance(threshold[0], Threshold): self.image_threshold = threshold[0] self.pixel_threshold = threshold[1] # When the passed threshold is not an instance of a Threshold class. @@ -133,7 +133,8 @@ def _load_from_config(self, threshold: DictConfig | str | ListConfig | list[dict msg = f"Invalid threshold config {threshold}" raise TypeError(msg) - def _get_threshold_from_config(self, threshold: DictConfig | str | dict[str, str | float]) -> BaseThreshold: + @staticmethod + def _get_threshold_from_config(threshold: DictConfig | str | dict[str, str | float]) -> Threshold: """Return the instantiated threshold object. Example: @@ -151,7 +152,7 @@ def _get_threshold_from_config(self, threshold: DictConfig | str | dict[str, str >>> __get_threshold_from_config(config) Returns: - (BaseThreshold): Instance of threshold object. + (Threshold): Instance of threshold object. """ if isinstance(threshold, str): threshold = DictConfig({"class_path": threshold}) @@ -170,7 +171,8 @@ def _get_threshold_from_config(self, threshold: DictConfig | str | dict[str, str class_ = getattr(module, class_path) return class_(**init_args) - def _reset(self, pl_module: AnomalyModule) -> None: + @staticmethod + def _reset(pl_module: AnomalyModule) -> None: pl_module.image_threshold.reset() pl_module.pixel_threshold.reset() @@ -182,14 +184,16 @@ def _outputs_to_cpu(self, output: STEP_OUTPUT) -> STEP_OUTPUT | dict[str, Any]: output = output.cpu() return output - def _update(self, pl_module: AnomalyModule, outputs: STEP_OUTPUT) -> None: + @staticmethod + def _update(pl_module: AnomalyModule, outputs: STEP_OUTPUT) -> None: pl_module.image_threshold.cpu() pl_module.image_threshold.update(outputs["pred_scores"], outputs["label"].int()) if "mask" in outputs and "anomaly_maps" in outputs: pl_module.pixel_threshold.cpu() pl_module.pixel_threshold.update(outputs["anomaly_maps"], outputs["mask"].int()) - def _compute(self, pl_module: AnomalyModule) -> None: + @staticmethod + def _compute(pl_module: AnomalyModule) -> None: pl_module.image_threshold.compute() if pl_module.pixel_threshold._update_called: # noqa: SLF001 pl_module.pixel_threshold.compute() diff --git a/src/anomalib/callbacks/timer.py b/src/anomalib/callbacks/timer.py index ee9658a9b0..3cbf516dc0 100644 --- a/src/anomalib/callbacks/timer.py +++ b/src/anomalib/callbacks/timer.py @@ -105,5 +105,5 @@ def on_test_end(self, trainer: Trainer, pl_module: LightningModule) -> None: else: test_data_loader = trainer.test_dataloaders[0] output += f"(batch_size={test_data_loader.batch_size})" - output += f" : {self.num_images/testing_time} FPS" + output += f" : {self.num_images / testing_time} FPS" logger.info(output) diff --git a/src/anomalib/callbacks/visualizer.py b/src/anomalib/callbacks/visualizer.py index c78c1f6ab8..41d56a7ebd 100644 --- a/src/anomalib/callbacks/visualizer.py +++ b/src/anomalib/callbacks/visualizer.py @@ -146,8 +146,8 @@ def on_predict_batch_end( def on_predict_end(self, trainer: Trainer, pl_module: AnomalyModule) -> None: return self.on_test_end(trainer, pl_module) + @staticmethod def _add_to_logger( - self, result: GeneratorResult, module: AnomalyModule, trainer: Trainer, diff --git a/src/anomalib/cli/cli.py b/src/anomalib/cli/cli.py index cd95b18bda..323c700fa4 100644 --- a/src/anomalib/cli/cli.py +++ b/src/anomalib/cli/cli.py @@ -30,7 +30,7 @@ from anomalib.data import AnomalibDataModule from anomalib.engine import Engine - from anomalib.metrics.threshold import BaseThreshold + from anomalib.metrics.threshold import Threshold from anomalib.models import AnomalyModule from anomalib.utils.config import update_config @@ -64,7 +64,8 @@ def __init__(self, args: Sequence[str] | None = None, run: bool = True) -> None: if run: self._run_subcommand() - def init_parser(self, **kwargs) -> ArgumentParser: + @staticmethod + def init_parser(**kwargs) -> ArgumentParser: """Method that instantiates the argument parser.""" kwargs.setdefault("dump_header", [f"anomalib=={__version__}"]) parser = ArgumentParser(formatter_class=CustomHelpFormatter, **kwargs) @@ -139,7 +140,8 @@ def add_subcommands(self, **kwargs) -> None: self.subcommand_parsers[subcommand] = sub_parser parser_subcommands.add_subcommand(subcommand, sub_parser, help=value["description"]) - def add_arguments_to_parser(self, parser: ArgumentParser) -> None: + @staticmethod + def add_arguments_to_parser(parser: ArgumentParser) -> None: """Extend trainer's arguments to add engine arguments. .. note:: @@ -152,9 +154,9 @@ def add_arguments_to_parser(self, parser: ArgumentParser) -> None: parser.add_argument("--task", type=TaskType | str, default=TaskType.SEGMENTATION) parser.add_argument("--metrics.image", type=list[str] | str | None, default=["F1Score", "AUROC"]) parser.add_argument("--metrics.pixel", type=list[str] | str | None, default=None, required=False) - parser.add_argument("--metrics.threshold", type=BaseThreshold | str, default="F1AdaptiveThreshold") + parser.add_argument("--metrics.threshold", type=Threshold | str, default="F1AdaptiveThreshold") parser.add_argument("--logging.log_graph", type=bool, help="Log the model to the logger", default=False) - if hasattr(parser, "subcommand") and parser.subcommand not in ("export", "predict"): + if hasattr(parser, "subcommand") and parser.subcommand not in {"export", "predict"}: parser.link_arguments("task", "data.init_args.task") parser.add_argument( "--default_root_dir", @@ -278,7 +280,7 @@ def _set_install_subcommand(self, action_subcommand: _ActionSubCommands) -> None def before_instantiate_classes(self) -> None: """Modify the configuration to properly instantiate classes and sets up tiler.""" subcommand = self.config["subcommand"] - if subcommand in (*self.subcommands(), "train", "predict"): + if subcommand in {*self.subcommands(), "train", "predict"}: self.config[subcommand] = update_config(self.config[subcommand]) def instantiate_classes(self) -> None: @@ -288,7 +290,7 @@ def instantiate_classes(self) -> None: But for subcommands we do not want to instantiate any trainer specific classes such as datamodule, model, etc This is because the subcommand is responsible for instantiating and executing code based on the passed config """ - if self.config["subcommand"] in (*self.subcommands(), "predict"): # trainer commands + if self.config["subcommand"] in {*self.subcommands(), "predict"}: # trainer commands # since all classes are instantiated, the LightningCLI also creates an unused ``Trainer`` object. # the minor change here is that engine is instantiated instead of trainer self.config_init = self.parser.instantiate_classes(self.config) @@ -301,7 +303,7 @@ def instantiate_classes(self) -> None: else: self.config_init = self.parser.instantiate_classes(self.config) subcommand = self.config["subcommand"] - if subcommand in ("train", "export"): + if subcommand in {"train", "export"}: self.instantiate_engine() if "model" in self.config_init[subcommand]: self.model = self._get(self.config_init, "model") @@ -359,7 +361,7 @@ def _run_subcommand(self) -> None: install_kwargs = self.config.get("install", {}) anomalib_install(**install_kwargs) - elif self.config["subcommand"] in (*self.subcommands(), "train", "export", "predict"): + elif self.config["subcommand"] in {*self.subcommands(), "train", "export", "predict"}: fn = getattr(self.engine, self.subcommand) fn_kwargs = self._prepare_subcommand_kwargs(self.subcommand) fn(**fn_kwargs) @@ -399,8 +401,8 @@ def export(self) -> Callable: """Export the model using engine's export method.""" return self.engine.export + @staticmethod def _add_trainer_arguments_to_parser( - self, parser: ArgumentParser, add_optimizer: bool = False, add_scheduler: bool = False, @@ -427,7 +429,8 @@ def _add_trainer_arguments_to_parser( **scheduler_kwargs, ) - def _add_default_arguments_to_parser(self, parser: ArgumentParser) -> None: + @staticmethod + def _add_default_arguments_to_parser(parser: ArgumentParser) -> None: """Adds default arguments to the parser.""" parser.add_argument( "--seed_everything", diff --git a/src/anomalib/cli/install.py b/src/anomalib/cli/install.py index 31432be487..d114c8e168 100644 --- a/src/anomalib/cli/install.py +++ b/src/anomalib/cli/install.py @@ -54,12 +54,12 @@ def anomalib_install(option: str = "full", verbose: bool = False) -> int: # Parse requirements into torch and other requirements. # This is done to parse the correct version of torch (cpu/cuda). - torch_requirement, other_requirements = parse_requirements(requirements, skip_torch=option not in ("full", "core")) + torch_requirement, other_requirements = parse_requirements(requirements, skip_torch=option not in {"full", "core"}) # Get install args for torch to install it from a specific index-url install_args: list[str] = [] torch_install_args = [] - if option in ("full", "core") and torch_requirement is not None: + if option in {"full", "core"} and torch_requirement is not None: torch_install_args = get_torch_install_args(torch_requirement) # Combine torch and other requirements. diff --git a/src/anomalib/cli/utils/help_formatter.py b/src/anomalib/cli/utils/help_formatter.py index 892161d0cc..4535011b09 100644 --- a/src/anomalib/cli/utils/help_formatter.py +++ b/src/anomalib/cli/utils/help_formatter.py @@ -65,7 +65,7 @@ def get_verbosity_subcommand() -> dict: {'subcommand': 'train', 'help': True, 'verbosity': 1} """ arguments: dict = {"subcommand": None, "help": False, "verbosity": 2} - if len(sys.argv) >= 2 and sys.argv[1] not in ("--help", "-h"): + if len(sys.argv) >= 2 and sys.argv[1] not in {"--help", "-h"}: arguments["subcommand"] = sys.argv[1] if "--help" in sys.argv or "-h" in sys.argv: arguments["help"] = True @@ -252,7 +252,7 @@ def format_help(self) -> str: """ with self.console.capture() as capture: section = self._root_section - if self.subcommand in REQUIRED_ARGUMENTS and self.verbosity_level in (0, 1) and len(section.rich_items) > 1: + if self.subcommand in REQUIRED_ARGUMENTS and self.verbosity_level in {0, 1} and len(section.rich_items) > 1: contents = render_guide(self.subcommand) for content in contents: self.console.print(content) diff --git a/src/anomalib/cli/utils/installation.py b/src/anomalib/cli/utils/installation.py index de31ef7d61..01c2f9d288 100644 --- a/src/anomalib/cli/utils/installation.py +++ b/src/anomalib/cli/utils/installation.py @@ -134,7 +134,7 @@ def get_cuda_version() -> str | None: # Check $CUDA_HOME/version.json file. version_file = Path(cuda_home) / "version.json" if version_file.is_file(): - with Path(version_file).open() as file: + with Path(version_file).open(encoding="utf-8") as file: data = json.load(file) cuda_version = data.get("cuda", {}).get("version", None) if cuda_version is not None: @@ -319,7 +319,7 @@ def get_torch_install_args(requirement: str | Requirement) -> list[str]: ) install_args: list[str] = [] - if platform.system() in ("Linux", "Windows"): + if platform.system() in {"Linux", "Windows"}: # Get the hardware suffix (eg., +cpu, +cu116 and +cu118 etc.) hardware_suffix = get_hardware_suffix(with_available_torch_build=True, torch_version=version) @@ -339,7 +339,7 @@ def get_torch_install_args(requirement: str | Requirement) -> list[str]: torch_version, torchvision_requirement, ] - elif platform.system() in ("macos", "Darwin"): + elif platform.system() in {"macos", "Darwin"}: torch_version = str(requirement) install_args += [torch_version] else: diff --git a/src/anomalib/cli/utils/openvino.py b/src/anomalib/cli/utils/openvino.py index 65ac7b80db..40046ac615 100644 --- a/src/anomalib/cli/utils/openvino.py +++ b/src/anomalib/cli/utils/openvino.py @@ -25,7 +25,7 @@ def add_openvino_export_arguments(parser: ArgumentParser) -> None: ov_parser = get_common_cli_parser() # remove redundant keys from mo keys for arg in ov_parser._actions: # noqa: SLF001 - if arg.dest in ("help", "input_model", "output_dir"): + if arg.dest in {"help", "input_model", "output_dir"}: continue group.add_argument(f"--ov_args.{arg.dest}", type=arg.type, default=arg.default, help=arg.help) else: diff --git a/src/anomalib/data/base/dataset.py b/src/anomalib/data/base/dataset.py index 7cfba278ac..f1d2ff3149 100644 --- a/src/anomalib/data/base/dataset.py +++ b/src/anomalib/data/base/dataset.py @@ -171,7 +171,7 @@ def __getitem__(self, index: int) -> dict[str, str | torch.Tensor]: if self.task == TaskType.CLASSIFICATION: item["image"] = self.transform(image) if self.transform else image - elif self.task in (TaskType.DETECTION, TaskType.SEGMENTATION): + elif self.task in {TaskType.DETECTION, TaskType.SEGMENTATION}: # Only Anomalous (1) images have masks in anomaly datasets # Therefore, create empty mask for Normal (0) images. mask = ( diff --git a/src/anomalib/data/base/depth.py b/src/anomalib/data/base/depth.py index dbd5377cb6..0ffe0b3a34 100644 --- a/src/anomalib/data/base/depth.py +++ b/src/anomalib/data/base/depth.py @@ -52,7 +52,7 @@ def __getitem__(self, index: int) -> dict[str, str | torch.Tensor]: item["image"], item["depth_image"] = ( self.transform(image, depth_image) if self.transform else (image, depth_image) ) - elif self.task in (TaskType.DETECTION, TaskType.SEGMENTATION): + elif self.task in {TaskType.DETECTION, TaskType.SEGMENTATION}: # Only Anomalous (1) images have masks in anomaly datasets # Therefore, create empty mask for Normal (0) images. mask = ( diff --git a/src/anomalib/data/image/btech.py b/src/anomalib/data/image/btech.py index 33bbd68c4c..9cceacf947 100644 --- a/src/anomalib/data/image/btech.py +++ b/src/anomalib/data/image/btech.py @@ -81,7 +81,7 @@ def make_btech_dataset(path: Path, split: str | Split | None = None) -> DataFram path = validate_path(path) samples_list = [ - (str(path),) + filename.parts[-3:] for filename in path.glob("**/*") if filename.suffix in (".bmp", ".png") + (str(path),) + filename.parts[-3:] for filename in path.glob("**/*") if filename.suffix in {".bmp", ".png"} ] if not samples_list: msg = f"Found 0 images in {path}" diff --git a/src/anomalib/data/utils/download.py b/src/anomalib/data/utils/download.py index 93fd14cbe4..7df5da1403 100644 --- a/src/anomalib/data/utils/download.py +++ b/src/anomalib/data/utils/download.py @@ -299,7 +299,7 @@ def extract(file_name: Path, root: Path) -> None: zip_file.extract(file_info, root) # Safely extract tar files. - elif file_name.suffix in (".tar", ".gz", ".xz", ".tgz"): + elif file_name.suffix in {".tar", ".gz", ".xz", ".tgz"}: with tarfile.open(file_name) as tar_file: members = tar_file.getmembers() safe_members = [member for member in members if not is_file_potentially_dangerous(member.name)] diff --git a/src/anomalib/data/utils/path.py b/src/anomalib/data/utils/path.py index 9c3f56273b..7bc61b27fe 100644 --- a/src/anomalib/data/utils/path.py +++ b/src/anomalib/data/utils/path.py @@ -142,13 +142,20 @@ def contains_non_printable_characters(path: str | Path) -> bool: return not printable_pattern.match(str(path)) -def validate_path(path: str | Path, base_dir: str | Path | None = None, should_exist: bool = True) -> Path: +def validate_path( + path: str | Path, + base_dir: str | Path | None = None, + should_exist: bool = True, + extensions: tuple[str, ...] | None = None, +) -> Path: """Validate the path. Args: path (str | Path): Path to validate. base_dir (str | Path): Base directory to restrict file access. should_exist (bool): If True, do not raise an exception if the path does not exist. + extensions (tuple[str, ...] | None): Accepted extensions for the path. An exception is raised if the + path does not have one of the accepted extensions. If None, no check is performed. Defaults to None. Returns: Path: Validated path. @@ -213,6 +220,11 @@ def validate_path(path: str | Path, base_dir: str | Path | None = None, should_e msg = f"Read or execute permissions denied for the path: {path}" raise PermissionError(msg) + # Check if the path has one of the accepted extensions + if extensions is not None and path.suffix not in extensions: + msg = f"Path extension is not accepted. Accepted extensions: {extensions}. Path: {path}" + raise ValueError(msg) + return path diff --git a/src/anomalib/data/utils/tiler.py b/src/anomalib/data/utils/tiler.py index 6fd87223bf..089aeaae91 100644 --- a/src/anomalib/data/utils/tiler.py +++ b/src/anomalib/data/utils/tiler.py @@ -181,7 +181,7 @@ def __init__( msg, ) - if self.mode not in (ImageUpscaleMode.PADDING, ImageUpscaleMode.INTERPOLATION): + if self.mode not in {ImageUpscaleMode.PADDING, ImageUpscaleMode.INTERPOLATION}: msg = f"Unknown tiling mode {self.mode}. Available modes are padding and interpolation" raise ValueError(msg) diff --git a/src/anomalib/data/video/shanghaitech.py b/src/anomalib/data/video/shanghaitech.py index 6c0055dd31..0a1b09bfe4 100644 --- a/src/anomalib/data/video/shanghaitech.py +++ b/src/anomalib/data/video/shanghaitech.py @@ -118,7 +118,8 @@ class ShanghaiTechTrainClipsIndexer(ClipsIndexer): clips indexer implementations are needed. """ - def get_mask(self, idx: int) -> torch.Tensor | None: + @staticmethod + def get_mask(idx: int) -> torch.Tensor | None: """No masks available for training set.""" del idx # Unused argument return None diff --git a/src/anomalib/deploy/inferencers/base_inferencer.py b/src/anomalib/deploy/inferencers/base_inferencer.py index 05f8d65ba0..b549b32a19 100644 --- a/src/anomalib/deploy/inferencers/base_inferencer.py +++ b/src/anomalib/deploy/inferencers/base_inferencer.py @@ -118,7 +118,7 @@ def _normalize( return anomaly_maps, float(pred_scores) - def _load_metadata(self, path: str | Path | dict | None = None) -> dict | DictConfig: + def _load_metadata(self, path: str | Path | dict | None = None) -> dict | DictConfig: # noqa: PLR6301 """Load the meta data from the given path. Args: diff --git a/src/anomalib/deploy/inferencers/openvino_inferencer.py b/src/anomalib/deploy/inferencers/openvino_inferencer.py index 7ed44a99da..bb57a8d65a 100644 --- a/src/anomalib/deploy/inferencers/openvino_inferencer.py +++ b/src/anomalib/deploy/inferencers/openvino_inferencer.py @@ -127,7 +127,7 @@ def load_model(self, path: str | Path | tuple[bytes, bytes]) -> tuple[Any, Any, model = core.read_model(model=path[0], weights=path[1]) else: path = path if isinstance(path, Path) else Path(path) - if path.suffix in (".bin", ".xml"): + if path.suffix in {".bin", ".xml"}: if path.suffix == ".bin": bin_path, xml_path = path, path.with_suffix(".xml") elif path.suffix == ".xml": @@ -150,7 +150,8 @@ def load_model(self, path: str | Path | tuple[bytes, bytes]) -> tuple[Any, Any, return input_blob, output_blob, compile_model - def pre_process(self, image: np.ndarray) -> np.ndarray: + @staticmethod + def pre_process(image: np.ndarray) -> np.ndarray: """Pre-process the input image by applying transformations. Args: @@ -279,7 +280,7 @@ def post_process(self, predictions: np.ndarray, metadata: dict | DictConfig | No if task == TaskType.CLASSIFICATION: _, pred_score = self._normalize(pred_scores=pred_score, metadata=metadata) - elif task in (TaskType.SEGMENTATION, TaskType.DETECTION): + elif task in {TaskType.SEGMENTATION, TaskType.DETECTION}: if "pixel_threshold" in metadata: pred_mask = (anomaly_map >= metadata["pixel_threshold"]).astype(np.uint8) diff --git a/src/anomalib/deploy/inferencers/torch_inferencer.py b/src/anomalib/deploy/inferencers/torch_inferencer.py index 3b57eddc04..840063421c 100644 --- a/src/anomalib/deploy/inferencers/torch_inferencer.py +++ b/src/anomalib/deploy/inferencers/torch_inferencer.py @@ -80,7 +80,7 @@ def _get_device(device: str) -> torch.device: Returns: torch.device: Device to use for inference. """ - if device not in ("auto", "cpu", "cuda", "gpu"): + if device not in {"auto", "cpu", "cuda", "gpu"}: msg = f"Unknown device {device}" raise ValueError(msg) @@ -102,7 +102,7 @@ def _load_checkpoint(self, path: str | Path) -> dict: if isinstance(path, str): path = Path(path) - if path.suffix not in (".pt", ".pth"): + if path.suffix not in {".pt", ".pth"}: msg = f"Unknown torch checkpoint file format {path.suffix}. Make sure you save the Torch model." raise ValueError(msg) diff --git a/src/anomalib/engine/engine.py b/src/anomalib/engine/engine.py index 8648cf30ae..83b9714416 100644 --- a/src/anomalib/engine/engine.py +++ b/src/anomalib/engine/engine.py @@ -9,7 +9,7 @@ from typing import Any import torch -from lightning.pytorch.callbacks import Callback, RichModelSummary, RichProgressBar +from lightning.pytorch.callbacks import Callback from lightning.pytorch.loggers import Logger from lightning.pytorch.trainer import Trainer from lightning.pytorch.utilities.types import _EVALUATE_OUTPUT, _PREDICT_OUTPUT, EVAL_DATALOADERS, TRAIN_DATALOADERS @@ -407,7 +407,7 @@ def _setup_transform( def _setup_anomalib_callbacks(self) -> None: """Set up callbacks for the trainer.""" - _callbacks: list[Callback] = [RichProgressBar(), RichModelSummary()] + _callbacks: list[Callback] = [] # Add ModelCheckpoint if it is not in the callbacks list. has_checkpoint_callback = any(isinstance(c, ModelCheckpoint) for c in self._cache.args["callbacks"]) @@ -474,7 +474,7 @@ def _should_run_validation( bool: Whether it is needed to run a validation sequence. """ # validation before predict is only necessary for zero-/few-shot models - if model.learning_type not in [LearningType.ZERO_SHOT, LearningType.FEW_SHOT]: + if model.learning_type not in {LearningType.ZERO_SHOT, LearningType.FEW_SHOT}: return False # check if a checkpoint path is provided if ckpt_path is not None: @@ -534,7 +534,7 @@ def fit( self._setup_trainer(model) self._setup_dataset_task(train_dataloaders, val_dataloaders, datamodule) self._setup_transform(model, datamodule=datamodule, ckpt_path=ckpt_path) - if model.learning_type in [LearningType.ZERO_SHOT, LearningType.FEW_SHOT]: + if model.learning_type in {LearningType.ZERO_SHOT, LearningType.FEW_SHOT}: # if the model is zero-shot or few-shot, we only need to run validate for normalization and thresholding self.trainer.validate(model, val_dataloaders, datamodule=datamodule, ckpt_path=ckpt_path) else: @@ -856,7 +856,7 @@ def train( datamodule, ) self._setup_transform(model, datamodule=datamodule, ckpt_path=ckpt_path) - if model.learning_type in [LearningType.ZERO_SHOT, LearningType.FEW_SHOT]: + if model.learning_type in {LearningType.ZERO_SHOT, LearningType.FEW_SHOT}: # if the model is zero-shot or few-shot, we only need to run validate for normalization and thresholding self.trainer.validate(model, val_dataloaders, None, verbose=False, datamodule=datamodule) else: @@ -912,22 +912,22 @@ def export( CLI Usage: 1. To export as a torch ``.pt`` file you can run the following command. ```python - anomalib export --model Padim --export_mode torch --ckpt_path + anomalib export --model Padim --export_type torch --ckpt_path ``` 2. To export as an ONNX ``.onnx`` file you can run the following command. ```python - anomalib export --model Padim --export_mode onnx --ckpt_path \ + anomalib export --model Padim --export_type onnx --ckpt_path \ --input_size "[256,256]" ``` 3. To export as an OpenVINO ``.xml`` and ``.bin`` file you can run the following command. ```python - anomalib export --model Padim --export_mode openvino --ckpt_path \ - --input_size "[256,256] --compression_type "fp16" + anomalib export --model Padim --export_type openvino --ckpt_path \ + --input_size "[256,256] --compression_type FP16 ``` 4. You can also quantize OpenVINO model with the following. ```python - anomalib export --model Padim --export_mode openvino --ckpt_path \ - --input_size "[256,256]" --compression_type "int8_ptq" --data MVTec + anomalib export --model Padim --export_type openvino --ckpt_path \ + --input_size "[256,256]" --compression_type INT8_PTQ --data MVTec ``` """ export_type = ExportType(export_type) diff --git a/src/anomalib/loggers/mlflow.py b/src/anomalib/loggers/mlflow.py index f98723e6f4..f6ec089586 100644 --- a/src/anomalib/loggers/mlflow.py +++ b/src/anomalib/loggers/mlflow.py @@ -1,5 +1,8 @@ """MLFlow logger with add image interface.""" +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import os from typing import Literal diff --git a/src/anomalib/metrics/__init__.py b/src/anomalib/metrics/__init__.py index 4c3eafa811..81bab3c93f 100644 --- a/src/anomalib/metrics/__init__.py +++ b/src/anomalib/metrics/__init__.py @@ -19,6 +19,7 @@ from .f1_max import F1Max from .f1_score import F1Score from .min_max import MinMax +from .pimo import AUPIMO, PIMO from .precision_recall_curve import BinaryPrecisionRecallCurve from .pro import PRO from .threshold import F1AdaptiveThreshold, ManualThreshold @@ -35,6 +36,8 @@ "ManualThreshold", "MinMax", "PRO", + "PIMO", + "AUPIMO", ] logger = logging.getLogger(__name__) diff --git a/src/anomalib/metrics/pimo/__init__.py b/src/anomalib/metrics/pimo/__init__.py new file mode 100644 index 0000000000..174f546e4d --- /dev/null +++ b/src/anomalib/metrics/pimo/__init__.py @@ -0,0 +1,23 @@ +"""Per-Image Metrics.""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +from .binary_classification_curve import ThresholdMethod +from .pimo import AUPIMO, PIMO, AUPIMOResult, PIMOResult + +__all__ = [ + # constants + "ThresholdMethod", + # result classes + "PIMOResult", + "AUPIMOResult", + # torchmetrics interfaces + "PIMO", + "AUPIMO", + "StatsOutliersPolicy", +] diff --git a/src/anomalib/metrics/pimo/_validate.py b/src/anomalib/metrics/pimo/_validate.py new file mode 100644 index 0000000000..f0ba7af4bf --- /dev/null +++ b/src/anomalib/metrics/pimo/_validate.py @@ -0,0 +1,427 @@ +"""Utils for validating arguments and results. + +TODO(jpcbertoldo): Move validations to a common place and reuse them across the codebase. +https://github.com/openvinotoolkit/anomalib/issues/2093 +""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import torch +from torch import Tensor + +from .utils import images_classes_from_masks + +logger = logging.getLogger(__name__) + + +def is_num_thresholds_gte2(num_thresholds: int) -> None: + """Validate the number of thresholds is a positive integer >= 2.""" + if not isinstance(num_thresholds, int): + msg = f"Expected the number of thresholds to be an integer, but got {type(num_thresholds)}" + raise TypeError(msg) + + if num_thresholds < 2: + msg = f"Expected the number of thresholds to be larger than 1, but got {num_thresholds}" + raise ValueError(msg) + + +def is_same_shape(*args) -> None: + """Works both for tensors and ndarrays.""" + assert len(args) > 0 + shapes = sorted({tuple(arg.shape) for arg in args}) + if len(shapes) > 1: + msg = f"Expected arguments to have the same shape, but got {shapes}" + raise ValueError(msg) + + +def is_rate(rate: float | int, zero_ok: bool, one_ok: bool) -> None: + """Validates a rate parameter. + + Args: + rate (float | int): The rate to be validated. + zero_ok (bool): Flag indicating if rate can be 0. + one_ok (bool): Flag indicating if rate can be 1. + """ + if not isinstance(rate, float | int): + msg = f"Expected rate to be a float or int, but got {type(rate)}." + raise TypeError(msg) + + if rate < 0.0 or rate > 1.0: + msg = f"Expected rate to be in [0, 1], but got {rate}." + raise ValueError(msg) + + if not zero_ok and rate == 0.0: + msg = "Rate cannot be 0." + raise ValueError(msg) + + if not one_ok and rate == 1.0: + msg = "Rate cannot be 1." + raise ValueError(msg) + + +def is_rate_range(bounds: tuple[float, float]) -> None: + """Validates the range of rates within the bounds. + + Args: + bounds (tuple[float, float]): The lower and upper bounds of the rates. + """ + if not isinstance(bounds, tuple): + msg = f"Expected the bounds to be a tuple, but got {type(bounds)}" + raise TypeError(msg) + + if len(bounds) != 2: + msg = f"Expected the bounds to be a tuple of length 2, but got {len(bounds)}" + raise ValueError(msg) + + lower, upper = bounds + is_rate(lower, zero_ok=False, one_ok=False) + is_rate(upper, zero_ok=False, one_ok=True) + + if lower >= upper: + msg = f"Expected the upper bound to be larger than the lower bound, but got {upper=} <= {lower=}" + raise ValueError(msg) + + +def is_valid_threshold(thresholds: Tensor) -> None: + """Validate that the thresholds are valid and monotonically increasing.""" + if not isinstance(thresholds, Tensor): + msg = f"Expected thresholds to be an Tensor, but got {type(thresholds)}" + raise TypeError(msg) + + if thresholds.ndim != 1: + msg = f"Expected thresholds to be 1D, but got {thresholds.ndim}" + raise ValueError(msg) + + if not thresholds.dtype.is_floating_point: + msg = f"Expected thresholds to be of float type, but got Tensor with dtype {thresholds.dtype}" + raise TypeError(msg) + + # make sure they are strictly increasing + if not torch.all(torch.diff(thresholds) > 0): + msg = "Expected thresholds to be strictly increasing, but it is not." + raise ValueError(msg) + + +def validate_threshold_bounds(threshold_bounds: tuple[float, float]) -> None: + if not isinstance(threshold_bounds, tuple): + msg = f"Expected threshold bounds to be a tuple, but got {type(threshold_bounds)}." + raise TypeError(msg) + + if len(threshold_bounds) != 2: + msg = f"Expected threshold bounds to be a tuple of length 2, but got {len(threshold_bounds)}." + raise ValueError(msg) + + lower, upper = threshold_bounds + + if not isinstance(lower, float): + msg = f"Expected lower threshold bound to be a float, but got {type(lower)}." + raise TypeError(msg) + + if not isinstance(upper, float): + msg = f"Expected upper threshold bound to be a float, but got {type(upper)}." + raise TypeError(msg) + + if upper <= lower: + msg = f"Expected the upper bound to be greater than the lower bound, but got {upper} <= {lower}." + raise ValueError(msg) + + +def is_anomaly_maps(anomaly_maps: Tensor) -> None: + if anomaly_maps.ndim != 3: + msg = f"Expected anomaly maps have 3 dimensions (N, H, W), but got {anomaly_maps.ndim} dimensions" + raise ValueError(msg) + + if not anomaly_maps.dtype.is_floating_point: + msg = ( + "Expected anomaly maps to be an floating Tensor with anomaly scores," + f" but got Tensor with dtype {anomaly_maps.dtype}" + ) + raise TypeError(msg) + + +def is_masks(masks: Tensor) -> None: + if masks.ndim != 3: + msg = f"Expected masks have 3 dimensions (N, H, W), but got {masks.ndim} dimensions" + raise ValueError(msg) + + if masks.dtype == torch.bool: + pass + elif masks.dtype.is_floating_point: + msg = ( + "Expected masks to be an integer or boolean Tensor with ground truth labels, " + f"but got Tensor with dtype {masks.dtype}" + ) + raise TypeError(msg) + else: + # assumes the type to be (signed or unsigned) integer + # this will change with the dataclass refactor + masks_unique_vals = torch.unique(masks) + if torch.any((masks_unique_vals != 0) & (masks_unique_vals != 1)): + msg = ( + "Expected masks to be a *binary* Tensor with ground truth labels, " + f"but got Tensor with unique values {sorted(masks_unique_vals)}" + ) + raise ValueError(msg) + + +def is_binclf_curves(binclf_curves: Tensor, valid_thresholds: Tensor | None) -> None: + if binclf_curves.ndim != 4: + msg = f"Expected binclf curves to be 4D, but got {binclf_curves.ndim}D" + raise ValueError(msg) + + if binclf_curves.shape[-2:] != (2, 2): + msg = f"Expected binclf curves to have shape (..., 2, 2), but got {binclf_curves.shape}" + raise ValueError(msg) + + if binclf_curves.dtype != torch.int64: + msg = f"Expected binclf curves to have dtype int64, but got {binclf_curves.dtype}." + raise TypeError(msg) + + if (binclf_curves < 0).any(): + msg = "Expected binclf curves to have non-negative values, but got negative values." + raise ValueError(msg) + + neg = binclf_curves[:, :, 0, :].sum(axis=-1) # (num_images, num_thresholds) + + if (neg != neg[:, :1]).any(): + msg = "Expected binclf curves to have the same number of negatives per image for every thresh." + raise ValueError(msg) + + pos = binclf_curves[:, :, 1, :].sum(axis=-1) # (num_images, num_thresholds) + + if (pos != pos[:, :1]).any(): + msg = "Expected binclf curves to have the same number of positives per image for every thresh." + raise ValueError(msg) + + if valid_thresholds is None: + return + + if binclf_curves.shape[1] != valid_thresholds.shape[0]: + msg = ( + "Expected the binclf curves to have as many confusion matrices as the thresholds sequence, " + f"but got {binclf_curves.shape[1]} and {valid_thresholds.shape[0]}" + ) + raise RuntimeError(msg) + + +def is_images_classes(images_classes: Tensor) -> None: + if images_classes.ndim != 1: + msg = f"Expected image classes to be 1D, but got {images_classes.ndim}D." + raise ValueError(msg) + + if images_classes.dtype == torch.bool: + pass + elif images_classes.dtype.is_floating_point: + msg = ( + "Expected image classes to be an integer or boolean Tensor with ground truth labels, " + f"but got Tensor with dtype {images_classes.dtype}" + ) + raise TypeError(msg) + else: + # assumes the type to be (signed or unsigned) integer + # this will change with the dataclass refactor + unique_vals = torch.unique(images_classes) + if torch.any((unique_vals != 0) & (unique_vals != 1)): + msg = ( + "Expected image classes to be a *binary* Tensor with ground truth labels, " + f"but got Tensor with unique values {sorted(unique_vals)}" + ) + raise ValueError(msg) + + +def is_rates(rates: Tensor, nan_allowed: bool) -> None: + if rates.ndim != 1: + msg = f"Expected rates to be 1D, but got {rates.ndim}D." + raise ValueError(msg) + + if not rates.dtype.is_floating_point: + msg = f"Expected rates to have dtype of float type, but got {rates.dtype}." + raise ValueError(msg) + + isnan_mask = torch.isnan(rates) + if nan_allowed: + # if they are all nan, then there is nothing to validate + if isnan_mask.all(): + return + valid_values = rates[~isnan_mask] + elif isnan_mask.any(): + msg = "Expected rates to not contain NaN values, but got NaN values." + raise ValueError(msg) + else: + valid_values = rates + + if (valid_values < 0).any(): + msg = "Expected rates to have values in the interval [0, 1], but got values < 0." + raise ValueError(msg) + + if (valid_values > 1).any(): + msg = "Expected rates to have values in the interval [0, 1], but got values > 1." + raise ValueError(msg) + + +def is_rate_curve(rate_curve: Tensor, nan_allowed: bool, decreasing: bool) -> None: + is_rates(rate_curve, nan_allowed=nan_allowed) + + diffs = torch.diff(rate_curve) + diffs_valid = diffs[~torch.isnan(diffs)] if nan_allowed else diffs + + if decreasing and (diffs_valid > 0).any(): + msg = "Expected rate curve to be monotonically decreasing, but got non-monotonically decreasing values." + raise ValueError(msg) + + if not decreasing and (diffs_valid < 0).any(): + msg = "Expected rate curve to be monotonically increasing, but got non-monotonically increasing values." + raise ValueError(msg) + + +def is_per_image_rate_curves(rate_curves: Tensor, nan_allowed: bool, decreasing: bool | None) -> None: + if rate_curves.ndim != 2: + msg = f"Expected per-image rate curves to be 2D, but got {rate_curves.ndim}D." + raise ValueError(msg) + + if not rate_curves.dtype.is_floating_point: + msg = f"Expected per-image rate curves to have dtype of float type, but got {rate_curves.dtype}." + raise ValueError(msg) + + isnan_mask = torch.isnan(rate_curves) + if nan_allowed: + # if they are all nan, then there is nothing to validate + if isnan_mask.all(): + return + valid_values = rate_curves[~isnan_mask] + elif isnan_mask.any(): + msg = "Expected per-image rate curves to not contain NaN values, but got NaN values." + raise ValueError(msg) + else: + valid_values = rate_curves + + if (valid_values < 0).any(): + msg = "Expected per-image rate curves to have values in the interval [0, 1], but got values < 0." + raise ValueError(msg) + + if (valid_values > 1).any(): + msg = "Expected per-image rate curves to have values in the interval [0, 1], but got values > 1." + raise ValueError(msg) + + if decreasing is None: + return + + diffs = torch.diff(rate_curves, axis=1) + diffs_valid = diffs[~torch.isnan(diffs)] if nan_allowed else diffs + + if decreasing and (diffs_valid > 0).any(): + msg = ( + "Expected per-image rate curves to be monotonically decreasing, " + "but got non-monotonically decreasing values." + ) + raise ValueError(msg) + + if not decreasing and (diffs_valid < 0).any(): + msg = ( + "Expected per-image rate curves to be monotonically increasing, " + "but got non-monotonically increasing values." + ) + raise ValueError(msg) + + +def is_scores_batch(scores_batch: torch.Tensor) -> None: + """scores_batch (torch.Tensor): floating (N, D).""" + if not isinstance(scores_batch, torch.Tensor): + msg = f"Expected `scores_batch` to be an torch.Tensor, but got {type(scores_batch)}" + raise TypeError(msg) + + if not scores_batch.dtype.is_floating_point: + msg = ( + "Expected `scores_batch` to be an floating torch.Tensor with anomaly scores_batch," + f" but got torch.Tensor with dtype {scores_batch.dtype}" + ) + raise TypeError(msg) + + if scores_batch.ndim != 2: + msg = f"Expected `scores_batch` to be 2D, but got {scores_batch.ndim}" + raise ValueError(msg) + + +def is_gts_batch(gts_batch: torch.Tensor) -> None: + """gts_batch (torch.Tensor): boolean (N, D).""" + if not isinstance(gts_batch, torch.Tensor): + msg = f"Expected `gts_batch` to be an torch.Tensor, but got {type(gts_batch)}" + raise TypeError(msg) + + if gts_batch.dtype != torch.bool: + msg = ( + "Expected `gts_batch` to be an boolean torch.Tensor with anomaly scores_batch," + f" but got torch.Tensor with dtype {gts_batch.dtype}" + ) + raise TypeError(msg) + + if gts_batch.ndim != 2: + msg = f"Expected `gts_batch` to be 2D, but got {gts_batch.ndim}" + raise ValueError(msg) + + +def has_at_least_one_anomalous_image(masks: torch.Tensor) -> None: + is_masks(masks) + image_classes = images_classes_from_masks(masks) + if (image_classes == 1).sum() == 0: + msg = "Expected at least one ANOMALOUS image, but found none." + raise ValueError(msg) + + +def has_at_least_one_normal_image(masks: torch.Tensor) -> None: + is_masks(masks) + image_classes = images_classes_from_masks(masks) + if (image_classes == 0).sum() == 0: + msg = "Expected at least one NORMAL image, but found none." + raise ValueError(msg) + + +def joint_validate_thresholds_shared_fpr(thresholds: torch.Tensor, shared_fpr: torch.Tensor) -> None: + if thresholds.shape[0] != shared_fpr.shape[0]: + msg = ( + "Expected `thresholds` and `shared_fpr` to have the same number of elements, " + f"but got {thresholds.shape[0]} != {shared_fpr.shape[0]}" + ) + raise ValueError(msg) + + +def is_per_image_tprs(per_image_tprs: torch.Tensor, image_classes: torch.Tensor) -> None: + is_images_classes(image_classes) + # general validations + is_per_image_rate_curves( + per_image_tprs, + nan_allowed=True, # normal images have NaN TPRs + decreasing=None, # not checked here + ) + + # specific to anomalous images + is_per_image_rate_curves( + per_image_tprs[image_classes == 1], + nan_allowed=False, + decreasing=True, + ) + + # specific to normal images + normal_images_tprs = per_image_tprs[image_classes == 0] + if not normal_images_tprs.isnan().all(): + msg = "Expected all normal images to have NaN TPRs, but some have non-NaN values." + raise ValueError(msg) + + +def is_per_image_scores(per_image_scores: torch.Tensor) -> None: + if per_image_scores.ndim != 1: + msg = f"Expected per-image scores to be 1D, but got {per_image_scores.ndim}D." + raise ValueError(msg) + + +def is_image_class(image_class: int) -> None: + if image_class not in {0, 1}: + msg = f"Expected image class to be either 0 for 'normal' or 1 for 'anomalous', but got {image_class}." + raise ValueError(msg) diff --git a/src/anomalib/metrics/pimo/binary_classification_curve.py b/src/anomalib/metrics/pimo/binary_classification_curve.py new file mode 100644 index 0000000000..1a80944041 --- /dev/null +++ b/src/anomalib/metrics/pimo/binary_classification_curve.py @@ -0,0 +1,334 @@ +"""Binary classification curve (numpy-only implementation). + +A binary classification (binclf) matrix (TP, FP, FN, TN) is evaluated at multiple thresholds. + +The thresholds are shared by all instances/images, but their binclf are computed independently for each instance/image. +""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import itertools +import logging +from enum import Enum +from functools import partial + +import numpy as np +import torch + +from . import _validate + +logger = logging.getLogger(__name__) + + +class ThresholdMethod(Enum): + """Sequence of thresholds to use.""" + + GIVEN: str = "given" + MINMAX_LINSPACE: str = "minmax-linspace" + MEAN_FPR_OPTIMIZED: str = "mean-fpr-optimized" + + +def _binary_classification_curve(scores: np.ndarray, gts: np.ndarray, thresholds: np.ndarray) -> np.ndarray: + """One binary classification matrix at each threshold. + + In the case where the thresholds are given (i.e. not considering all possible thresholds based on the scores), + this weird-looking function is faster than the two options in `torchmetrics` on the CPU: + - `_binary_precision_recall_curve_update_vectorized` + - `_binary_precision_recall_curve_update_loop` + (both in module `torchmetrics.functional.classification.precision_recall_curve` in `torchmetrics==1.1.0`). + Note: VALIDATION IS NOT DONE HERE. Make sure to validate the arguments before calling this function. + + Args: + scores (np.ndarray): Anomaly scores (D,). + gts (np.ndarray): Binary (bool) ground truth of shape (D,). + thresholds (np.ndarray): Sequence of thresholds in ascending order (K,). + + Returns: + np.ndarray: Binary classification matrix curve (K, 2, 2) + Details: `anomalib.metrics.per_image.binclf_curve_numpy.binclf_multiple_curves`. + """ + num_th = len(thresholds) + + # POSITIVES + scores_positives = scores[gts] + # the sorting is very important for the algorithm to work and the speedup + scores_positives = np.sort(scores_positives) + # variable updated in the loop; start counting with lowest thresh ==> everything is predicted as positive + num_pos = current_count_tp = scores_positives.size + tps = np.empty((num_th,), dtype=np.int64) + + # NEGATIVES + # same thing but for the negative samples + scores_negatives = scores[~gts] + scores_negatives = np.sort(scores_negatives) + num_neg = current_count_fp = scores_negatives.size + fps = np.empty((num_th,), dtype=np.int64) + + def score_less_than_thresh(score: float, thresh: float) -> bool: + return score < thresh + + # it will progressively drop the scores that are below the current thresh + for thresh_idx, thresh in enumerate(thresholds): + # UPDATE POSITIVES + # < becasue it is the same as ~(>=) + num_drop = sum(1 for _ in itertools.takewhile(partial(score_less_than_thresh, thresh=thresh), scores_positives)) + scores_positives = scores_positives[num_drop:] + current_count_tp -= num_drop + tps[thresh_idx] = current_count_tp + + # UPDATE NEGATIVES + # same with the negatives + num_drop = sum(1 for _ in itertools.takewhile(partial(score_less_than_thresh, thresh=thresh), scores_negatives)) + scores_negatives = scores_negatives[num_drop:] + current_count_fp -= num_drop + fps[thresh_idx] = current_count_fp + + # deduce the rest of the matrix counts + fns = num_pos * np.ones((num_th,), dtype=np.int64) - tps + tns = num_neg * np.ones((num_th,), dtype=np.int64) - fps + + # sequence of dimensions is (thresholds, true class, predicted class) (see docstring) + return np.stack( + [ + np.stack([tns, fps], axis=-1), + np.stack([fns, tps], axis=-1), + ], + axis=-1, + ).transpose(0, 2, 1) + + +def binary_classification_curve( + scores_batch: torch.Tensor, + gts_batch: torch.Tensor, + thresholds: torch.Tensor, +) -> torch.Tensor: + """Returns a binary classification matrix at each threshold for each image in the batch. + + This is a wrapper around `_binary_classification_curve`. + Validation of the arguments is done here (not in the actual implementation functions). + + Note: predicted as positive condition is `score >= thresh`. + + Args: + scores_batch (torch.Tensor): Anomaly scores (N, D,). + gts_batch (torch.Tensor): Binary (bool) ground truth of shape (N, D,). + thresholds (torch.Tensor): Sequence of thresholds in ascending order (K,). + + Returns: + torch.Tensor: Binary classification matrix curves (N, K, 2, 2) + + The last two dimensions are the confusion matrix (ground truth, predictions) + So for each thresh it gives: + - `tp`: `[... , 1, 1]` + - `fp`: `[... , 0, 1]` + - `fn`: `[... , 1, 0]` + - `tn`: `[... , 0, 0]` + + `t` is for `true` and `f` is for `false`, `p` is for `positive` and `n` is for `negative`, so: + - `tp` stands for `true positive` + - `fp` stands for `false positive` + - `fn` stands for `false negative` + - `tn` stands for `true negative` + + The numbers in each confusion matrix are the counts (not the ratios). + + Counts are relative to each instance (i.e. from 0 to D, e.g. the total is the number of pixels in the image). + + Thresholds are shared across all instances, so all confusion matrices, for instance, + at position [:, 0, :, :] are relative to the 1st threshold in `thresholds`. + + Thresholds are sorted in ascending order. + """ + _validate.is_scores_batch(scores_batch) + _validate.is_gts_batch(gts_batch) + _validate.is_same_shape(scores_batch, gts_batch) + _validate.is_valid_threshold(thresholds) + # TODO(ashwinvaidya17): this is kept as numpy for now because it is much faster. + # TEMP-0 + result = np.vectorize(_binary_classification_curve, signature="(n),(n),(k)->(k,2,2)")( + scores_batch.detach().cpu().numpy(), + gts_batch.detach().cpu().numpy(), + thresholds.detach().cpu().numpy(), + ) + return torch.from_numpy(result).to(scores_batch.device) + + +def _get_linspaced_thresholds(anomaly_maps: torch.Tensor, num_thresholds: int) -> torch.Tensor: + """Get thresholds linearly spaced between the min and max of the anomaly maps.""" + _validate.is_num_thresholds_gte2(num_thresholds) + # this operation can be a bit expensive + thresh_low, thresh_high = thresh_bounds = (anomaly_maps.min().item(), anomaly_maps.max().item()) + try: + _validate.validate_threshold_bounds(thresh_bounds) + except ValueError as ex: + msg = f"Invalid threshold bounds computed from the given anomaly maps. Cause: {ex}" + raise ValueError(msg) from ex + return torch.linspace(thresh_low, thresh_high, num_thresholds, dtype=anomaly_maps.dtype) + + +def threshold_and_binary_classification_curve( + anomaly_maps: torch.Tensor, + masks: torch.Tensor, + threshold_choice: ThresholdMethod | str = ThresholdMethod.MINMAX_LINSPACE, + thresholds: torch.Tensor | None = None, + num_thresholds: int | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """Return thresholds and binary classification matrix at each threshold for each image in the batch. + + Args: + anomaly_maps (torch.Tensor): Anomaly score maps of shape (N, H, W) + masks (torch.Tensor): Binary ground truth masks of shape (N, H, W) + threshold_choice (str, optional): Sequence of thresholds to use. Defaults to THRESH_SEQUENCE_MINMAX_LINSPACE. + thresholds (torch.Tensor, optional): Sequence of thresholds to use. + Only applicable when threshold_choice is THRESH_SEQUENCE_GIVEN. + num_thresholds (int, optional): Number of thresholds between the min and max of the anomaly maps. + Only applicable when threshold_choice is THRESH_SEQUENCE_MINMAX_LINSPACE. + + Returns: + tuple[torch.Tensor, torch.Tensor]: + [0] Thresholds of shape (K,) and dtype is the same as `anomaly_maps.dtype`. + + [1] Binary classification matrices of shape (N, K, 2, 2) + + N: number of images/instances + K: number of thresholds + + The last two dimensions are the confusion matrix (ground truth, predictions) + So for each thresh it gives: + - `tp`: `[... , 1, 1]` + - `fp`: `[... , 0, 1]` + - `fn`: `[... , 1, 0]` + - `tn`: `[... , 0, 0]` + + `t` is for `true` and `f` is for `false`, `p` is for `positive` and `n` is for `negative`, so: + - `tp` stands for `true positive` + - `fp` stands for `false positive` + - `fn` stands for `false negative` + - `tn` stands for `true negative` + + The numbers in each confusion matrix are the counts of pixels in the image (not the ratios). + + Thresholds are shared across all images, so all confusion matrices, for instance, + at position [:, 0, :, :] are relative to the 1st threshold in `thresholds`. + + Thresholds are sorted in ascending order. + """ + threshold_choice = ThresholdMethod(threshold_choice) + _validate.is_anomaly_maps(anomaly_maps) + _validate.is_masks(masks) + _validate.is_same_shape(anomaly_maps, masks) + + if threshold_choice == ThresholdMethod.GIVEN: + assert thresholds is not None + _validate.is_valid_threshold(thresholds) + if num_thresholds is not None: + logger.warning( + "Argument `num_thresholds` was given, " + f"but it is ignored because `thresholds_choice` is '{threshold_choice.value}'.", + ) + thresholds = thresholds.to(anomaly_maps.dtype) + + elif threshold_choice == ThresholdMethod.MINMAX_LINSPACE: + assert num_thresholds is not None + if thresholds is not None: + logger.warning( + "Argument `thresholds_given` was given, " + f"but it is ignored because `thresholds_choice` is '{threshold_choice.value}'.", + ) + # `num_thresholds` is validated in the function below + thresholds = _get_linspaced_thresholds(anomaly_maps, num_thresholds) + + elif threshold_choice == ThresholdMethod.MEAN_FPR_OPTIMIZED: + raise NotImplementedError(f"TODO implement {threshold_choice.value}") # noqa: EM102 + + else: + msg = ( + f"Expected `threshs_choice` to be from {list(ThresholdMethod.__members__)}," + f" but got '{threshold_choice.value}'" + ) + raise NotImplementedError(msg) + + # keep the batch dimension and flatten the rest + scores_batch = anomaly_maps.reshape(anomaly_maps.shape[0], -1) + gts_batch = masks.reshape(masks.shape[0], -1).to(bool) # make sure it is boolean + + binclf_curves = binary_classification_curve(scores_batch, gts_batch, thresholds) + + num_images = anomaly_maps.shape[0] + + try: + _validate.is_binclf_curves(binclf_curves, valid_thresholds=thresholds) + + # these two validations cannot be done in `_validate.binclf_curves` because it does not have access to the + # original shapes of `anomaly_maps` + if binclf_curves.shape[0] != num_images: + msg = ( + "Expected `binclf_curves` to have the same number of images as `anomaly_maps`, " + f"but got {binclf_curves.shape[0]} and {anomaly_maps.shape[0]}" + ) + raise RuntimeError(msg) + + except (TypeError, ValueError) as ex: + msg = f"Invalid `binclf_curves` was computed. Cause: {ex}" + raise RuntimeError(msg) from ex + + return thresholds, binclf_curves + + +def per_image_tpr(binclf_curves: torch.Tensor) -> torch.Tensor: + """True positive rates (TPR) for image for each thresh. + + TPR = TP / P = TP / (TP + FN) + + TP: true positives + FM: false negatives + P: positives (TP + FN) + + Args: + binclf_curves (torch.Tensor): Binary classification matrix curves (N, K, 2, 2). See `per_image_binclf_curve`. + + Returns: + torch.Tensor: shape (N, K), dtype float64 + N: number of images + K: number of thresholds + + Thresholds are sorted in ascending order, so TPR is in descending order. + """ + # shape: (num images, num thresholds) + tps = binclf_curves[..., 1, 1] + pos = binclf_curves[..., 1, :].sum(axis=2) # 2 was the 3 originally + + # tprs will be nan if pos == 0 (normal image), which is expected + return tps.to(torch.float64) / pos.to(torch.float64) + + +def per_image_fpr(binclf_curves: torch.Tensor) -> torch.Tensor: + """False positive rates (TPR) for image for each thresh. + + FPR = FP / N = FP / (FP + TN) + + FP: false positives + TN: true negatives + N: negatives (FP + TN) + + Args: + binclf_curves (torch.Tensor): Binary classification matrix curves (N, K, 2, 2). See `per_image_binclf_curve`. + + Returns: + torch.Tensor: shape (N, K), dtype float64 + N: number of images + K: number of thresholds + + Thresholds are sorted in ascending order, so FPR is in descending order. + """ + # shape: (num images, num thresholds) + fps = binclf_curves[..., 0, 1] + neg = binclf_curves[..., 0, :].sum(axis=2) # 2 was the 3 originally + + # it can be `nan` if an anomalous image is fully covered by the mask + return fps.to(torch.float64) / neg.to(torch.float64) diff --git a/src/anomalib/metrics/pimo/dataclasses.py b/src/anomalib/metrics/pimo/dataclasses.py new file mode 100644 index 0000000000..0c5aeb025d --- /dev/null +++ b/src/anomalib/metrics/pimo/dataclasses.py @@ -0,0 +1,226 @@ +"""Dataclasses for PIMO metrics.""" + +# Based on the code: https://github.com/jpcbertoldo/aupimo +# +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +from dataclasses import dataclass, field + +import torch + +from . import _validate, functional + + +@dataclass +class PIMOResult: + """Per-Image Overlap (PIMO, pronounced pee-mo) curve. + + This interface gathers the PIMO curve data and metadata and provides several utility methods. + + Notation: + - N: number of images + - K: number of thresholds + - FPR: False Positive Rate + - TPR: True Positive Rate + + Attributes: + thresholds (torch.Tensor): sequence of K (monotonically increasing) thresholds used to compute the PIMO curve + shared_fpr (torch.Tensor): K values of the shared FPR metric at the corresponding thresholds + per_image_tprs (torch.Tensor): for each of the N images, the K values of in-image TPR at the corresponding + thresholds + """ + + # data + thresholds: torch.Tensor = field(repr=False) # shape => (K,) + shared_fpr: torch.Tensor = field(repr=False) # shape => (K,) + per_image_tprs: torch.Tensor = field(repr=False) # shape => (N, K) + + @property + def num_threshsholds(self) -> int: + """Number of thresholds.""" + return self.thresholds.shape[0] + + @property + def num_images(self) -> int: + """Number of images.""" + return self.per_image_tprs.shape[0] + + @property + def image_classes(self) -> torch.Tensor: + """Image classes (0: normal, 1: anomalous). + + Deduced from the per-image TPRs. + If any TPR value is not NaN, the image is considered anomalous. + """ + return (~torch.isnan(self.per_image_tprs)).any(dim=1).to(torch.int32) + + def __post_init__(self) -> None: + """Validate the inputs for the result object are consistent.""" + try: + _validate.is_valid_threshold(self.thresholds) + _validate.is_rate_curve(self.shared_fpr, nan_allowed=False, decreasing=True) # is_shared_apr + _validate.is_per_image_tprs(self.per_image_tprs, self.image_classes) + + except (TypeError, ValueError) as ex: + msg = f"Invalid inputs for {self.__class__.__name__} object. Cause: {ex}." + raise TypeError(msg) from ex + + if self.thresholds.shape != self.shared_fpr.shape: + msg = ( + f"Invalid {self.__class__.__name__} object. Attributes have inconsistent shapes: " + f"{self.thresholds.shape=} != {self.shared_fpr.shape=}." + ) + raise TypeError(msg) + + if self.thresholds.shape[0] != self.per_image_tprs.shape[1]: + msg = ( + f"Invalid {self.__class__.__name__} object. Attributes have inconsistent shapes: " + f"{self.thresholds.shape[0]=} != {self.per_image_tprs.shape[1]=}." + ) + raise TypeError(msg) + + def thresh_at(self, fpr_level: float) -> tuple[int, float, float]: + """Return the threshold at the given shared FPR. + + See `anomalib.metrics.per_image.pimo_numpy.thresh_at_shared_fpr_level` for details. + + Args: + fpr_level (float): shared FPR level + + Returns: + tuple[int, float, float]: + [0] index of the threshold + [1] threshold + [2] the actual shared FPR value at the returned threshold + """ + return functional.thresh_at_shared_fpr_level( + self.thresholds, + self.shared_fpr, + fpr_level, + ) + + +@dataclass +class AUPIMOResult: + """Area Under the Per-Image Overlap (AUPIMO, pronounced a-u-pee-mo) curve. + + This interface gathers the AUPIMO data and metadata and provides several utility methods. + + Attributes: + fpr_lower_bound (float): [metadata] LOWER bound of the FPR integration range + fpr_upper_bound (float): [metadata] UPPER bound of the FPR integration range + num_thresholds (int): [metadata] number of thresholds used to effectively compute AUPIMO; + should not be confused with the number of thresholds used to compute the PIMO curve + thresh_lower_bound (float): LOWER threshold bound --> corresponds to the UPPER FPR bound + thresh_upper_bound (float): UPPER threshold bound --> corresponds to the LOWER FPR bound + aupimos (torch.Tensor): values of AUPIMO scores (1 per image) + """ + + # metadata + fpr_lower_bound: float + fpr_upper_bound: float + num_thresholds: int + + # data + thresh_lower_bound: float = field(repr=False) + thresh_upper_bound: float = field(repr=False) + aupimos: torch.Tensor = field(repr=False) # shape => (N,) + + @property + def num_images(self) -> int: + """Number of images.""" + return self.aupimos.shape[0] + + @property + def num_normal_images(self) -> int: + """Number of normal images.""" + return int((self.image_classes == 0).sum()) + + @property + def num_anomalous_images(self) -> int: + """Number of anomalous images.""" + return int((self.image_classes == 1).sum()) + + @property + def image_classes(self) -> torch.Tensor: + """Image classes (0: normal, 1: anomalous).""" + # if an instance has `nan` aupimo it's because it's a normal image + return self.aupimos.isnan().to(torch.int32) + + @property + def fpr_bounds(self) -> tuple[float, float]: + """Lower and upper bounds of the FPR integration range.""" + return self.fpr_lower_bound, self.fpr_upper_bound + + @property + def thresh_bounds(self) -> tuple[float, float]: + """Lower and upper bounds of the threshold integration range. + + Recall: they correspond to the FPR bounds in reverse order. + I.e.: + fpr_lower_bound --> thresh_upper_bound + fpr_upper_bound --> thresh_lower_bound + """ + return self.thresh_lower_bound, self.thresh_upper_bound + + def __post_init__(self) -> None: + """Validate the inputs for the result object are consistent.""" + try: + _validate.is_rate_range((self.fpr_lower_bound, self.fpr_upper_bound)) + # TODO(jpcbertoldo): warn when it's too low (use parameters from the numpy code) # noqa: TD003 + _validate.is_num_thresholds_gte2(self.num_thresholds) + _validate.is_rates(self.aupimos, nan_allowed=True) # validate is_aupimos + + _validate.validate_threshold_bounds((self.thresh_lower_bound, self.thresh_upper_bound)) + + except (TypeError, ValueError) as ex: + msg = f"Invalid inputs for {self.__class__.__name__} object. Cause: {ex}." + raise TypeError(msg) from ex + + @classmethod + def from_pimo_result( + cls: type["AUPIMOResult"], + pimo_result: PIMOResult, + fpr_bounds: tuple[float, float], + num_thresholds_auc: int, + aupimos: torch.Tensor, + ) -> "AUPIMOResult": + """Return an AUPIMO result object from a PIMO result object. + + Args: + pimo_result: PIMO result object + fpr_bounds: lower and upper bounds of the FPR integration range + num_thresholds_auc: number of thresholds used to effectively compute AUPIMO; + NOT the number of thresholds used to compute the PIMO curve! + aupimos: AUPIMO scores + paths: paths to the source images to which the AUPIMO scores correspond. + """ + if pimo_result.per_image_tprs.shape[0] != aupimos.shape[0]: + msg = ( + f"Invalid {cls.__name__} object. Attributes have inconsistent shapes: " + f"there are {pimo_result.per_image_tprs.shape[0]} PIMO curves but {aupimos.shape[0]} AUPIMO scores." + ) + raise TypeError(msg) + + if not torch.isnan(aupimos[pimo_result.image_classes == 0]).all(): + msg = "Expected all normal images to have NaN AUPIMOs, but some have non-NaN values." + raise TypeError(msg) + + if torch.isnan(aupimos[pimo_result.image_classes == 1]).any(): + msg = "Expected all anomalous images to have valid AUPIMOs (not nan), but some have NaN values." + raise TypeError(msg) + + fpr_lower_bound, fpr_upper_bound = fpr_bounds + # recall: fpr upper/lower bounds are the same as the thresh lower/upper bounds + _, thresh_lower_bound, __ = pimo_result.thresh_at(fpr_upper_bound) + _, thresh_upper_bound, __ = pimo_result.thresh_at(fpr_lower_bound) + # `_` is the threshold's index, `__` is the actual fpr value + return cls( + fpr_lower_bound=fpr_lower_bound, + fpr_upper_bound=fpr_upper_bound, + num_thresholds=num_thresholds_auc, + thresh_lower_bound=float(thresh_lower_bound), + thresh_upper_bound=float(thresh_upper_bound), + aupimos=aupimos, + ) diff --git a/src/anomalib/metrics/pimo/functional.py b/src/anomalib/metrics/pimo/functional.py new file mode 100644 index 0000000000..7eac07b1bd --- /dev/null +++ b/src/anomalib/metrics/pimo/functional.py @@ -0,0 +1,355 @@ +"""Per-Image Overlap curve (PIMO, pronounced pee-mo) and its area under the curve (AUPIMO). + +Details: `anomalib.metrics.per_image.pimo`. +""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import numpy as np +import torch + +from . import _validate +from .binary_classification_curve import ( + ThresholdMethod, + _get_linspaced_thresholds, + per_image_fpr, + per_image_tpr, + threshold_and_binary_classification_curve, +) +from .utils import images_classes_from_masks + +logger = logging.getLogger(__name__) + + +def pimo_curves( + anomaly_maps: torch.Tensor, + masks: torch.Tensor, + num_thresholds: int, +) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]: + """Compute the Per-IMage Overlap (PIMO, pronounced pee-mo) curves. + + PIMO is a curve of True Positive Rate (TPR) values on each image across multiple anomaly score thresholds. + The anomaly score thresholds are indexed by a (cross-image shared) value of False Positive Rate (FPR) measure on + the normal images. + + Details: `anomalib.metrics.per_image.pimo`. + + Args' notation: + N: number of images + H: image height + W: image width + K: number of thresholds + + Args: + anomaly_maps: floating point anomaly score maps of shape (N, H, W) + masks: binary (bool or int) ground truth masks of shape (N, H, W) + num_thresholds: number of thresholds to compute (K) + + Returns: + tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]: + [0] thresholds of shape (K,) in ascending order + [1] shared FPR values of shape (K,) in descending order (indices correspond to the thresholds) + [2] per-image TPR curves of shape (N, K), axis 1 in descending order (indices correspond to the thresholds) + [3] image classes of shape (N,) with values 0 (normal) or 1 (anomalous) + """ + # validate the strings are valid + _validate.is_num_thresholds_gte2(num_thresholds) + _validate.is_anomaly_maps(anomaly_maps) + _validate.is_masks(masks) + _validate.is_same_shape(anomaly_maps, masks) + _validate.has_at_least_one_anomalous_image(masks) + _validate.has_at_least_one_normal_image(masks) + + image_classes = images_classes_from_masks(masks) + + # the thresholds are computed here so that they can be restrained to the normal images + # therefore getting a better resolution in terms of FPR quantization + # otherwise the function `binclf_curve_numpy.per_image_binclf_curve` would have the range of thresholds + # computed from all the images (normal + anomalous) + thresholds = _get_linspaced_thresholds( + anomaly_maps[image_classes == 0], + num_thresholds, + ) + + # N: number of images, K: number of thresholds + # shapes are (K,) and (N, K, 2, 2) + thresholds, binclf_curves = threshold_and_binary_classification_curve( + anomaly_maps=anomaly_maps, + masks=masks, + threshold_choice=ThresholdMethod.GIVEN.value, + thresholds=thresholds, + num_thresholds=None, + ) + + shared_fpr: torch.Tensor + # mean-per-image-fpr on normal images + # shape -> (N, K) + per_image_fprs_normals = per_image_fpr(binclf_curves[image_classes == 0]) + try: + _validate.is_per_image_rate_curves(per_image_fprs_normals, nan_allowed=False, decreasing=True) + except ValueError as ex: + msg = f"Cannot compute PIMO because the per-image FPR curves from normal images are invalid. Cause: {ex}" + raise RuntimeError(msg) from ex + + # shape -> (K,) + # this is the only shared FPR metric implemented so far, + # see note about shared FPR in Details: `anomalib.metrics.per_image.pimo`. + shared_fpr = per_image_fprs_normals.mean(axis=0) + + # shape -> (N, K) + per_image_tprs = per_image_tpr(binclf_curves) + + return thresholds, shared_fpr, per_image_tprs, image_classes + + +# =========================================== AUPIMO =========================================== + + +def aupimo_scores( + anomaly_maps: torch.Tensor, + masks: torch.Tensor, + num_thresholds: int = 300_000, + fpr_bounds: tuple[float, float] = (1e-5, 1e-4), + force: bool = False, +) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, int]: + """Compute the PIMO curves and their Area Under the Curve (i.e. AUPIMO) scores. + + Scores are computed from the integration of the PIMO curves within the given FPR bounds, then normalized to [0, 1]. + It can be thought of as the average TPR of the PIMO curves within the given FPR bounds. + + Details: `anomalib.metrics.per_image.pimo`. + + Args' notation: + N: number of images + H: image height + W: image width + K: number of thresholds + + Args: + anomaly_maps: floating point anomaly score maps of shape (N, H, W) + masks: binary (bool or int) ground truth masks of shape (N, H, W) + num_thresholds: number of thresholds to compute (K) + fpr_bounds: lower and upper bounds of the FPR integration range + force: whether to force the computation despite bad conditions + + Returns: + tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]: + [0] thresholds of shape (K,) in ascending order + [1] shared FPR values of shape (K,) in descending order (indices correspond to the thresholds) + [2] per-image TPR curves of shape (N, K), axis 1 in descending order (indices correspond to the thresholds) + [3] image classes of shape (N,) with values 0 (normal) or 1 (anomalous) + [4] AUPIMO scores of shape (N,) in [0, 1] + [5] number of points used in the AUC integration + """ + _validate.is_rate_range(fpr_bounds) + + # other validations are done in the `pimo` function + thresholds, shared_fpr, per_image_tprs, image_classes = pimo_curves( + anomaly_maps=anomaly_maps, + masks=masks, + num_thresholds=num_thresholds, + ) + try: + _validate.is_valid_threshold(thresholds) + _validate.is_rate_curve(shared_fpr, nan_allowed=False, decreasing=True) + _validate.is_images_classes(image_classes) + _validate.is_per_image_rate_curves(per_image_tprs[image_classes == 1], nan_allowed=False, decreasing=True) + + except ValueError as ex: + msg = f"Cannot compute AUPIMO because the PIMO curves are invalid. Cause: {ex}" + raise RuntimeError(msg) from ex + + fpr_lower_bound, fpr_upper_bound = fpr_bounds + + # get the threshold indices where the fpr bounds are achieved + fpr_lower_bound_thresh_idx, _, fpr_lower_bound_defacto = thresh_at_shared_fpr_level( + thresholds, + shared_fpr, + fpr_lower_bound, + ) + fpr_upper_bound_thresh_idx, _, fpr_upper_bound_defacto = thresh_at_shared_fpr_level( + thresholds, + shared_fpr, + fpr_upper_bound, + ) + + if not torch.isclose( + fpr_lower_bound_defacto, + torch.tensor(fpr_lower_bound, dtype=fpr_lower_bound_defacto.dtype, device=fpr_lower_bound_defacto.device), + rtol=(rtol := 1e-2), + ): + logger.warning( + "The lower bound of the shared FPR integration range is not exactly achieved. " + f"Expected {fpr_lower_bound} but got {fpr_lower_bound_defacto}, which is not within {rtol=}.", + ) + + if not torch.isclose( + fpr_upper_bound_defacto, + torch.tensor(fpr_upper_bound, dtype=fpr_upper_bound_defacto.dtype, device=fpr_upper_bound_defacto.device), + rtol=rtol, + ): + logger.warning( + "The upper bound of the shared FPR integration range is not exactly achieved. " + f"Expected {fpr_upper_bound} but got {fpr_upper_bound_defacto}, which is not within {rtol=}.", + ) + + # reminder: fpr lower/upper bound is threshold upper/lower bound (reversed) + thresh_lower_bound_idx = fpr_upper_bound_thresh_idx + thresh_upper_bound_idx = fpr_lower_bound_thresh_idx + + # deal with edge cases + if thresh_lower_bound_idx >= thresh_upper_bound_idx: + msg = ( + "The thresholds corresponding to the given `fpr_bounds` are not valid because " + "they matched the same threshold or the are in the wrong order. " + f"FPR upper/lower = threshold lower/upper = {thresh_lower_bound_idx} and {thresh_upper_bound_idx}." + ) + raise RuntimeError(msg) + + # limit the curves to the integration range [lbound, ubound] + shared_fpr_bounded: torch.Tensor = shared_fpr[thresh_lower_bound_idx : (thresh_upper_bound_idx + 1)] + per_image_tprs_bounded: torch.Tensor = per_image_tprs[:, thresh_lower_bound_idx : (thresh_upper_bound_idx + 1)] + + # `shared_fpr` and `tprs` are in descending order; `flip()` reverts to ascending order + shared_fpr_bounded = torch.flip(shared_fpr_bounded, dims=[0]) + per_image_tprs_bounded = torch.flip(per_image_tprs_bounded, dims=[1]) + + # the log's base does not matter because it's a constant factor canceled by normalization factor + shared_fpr_bounded_log = torch.log(shared_fpr_bounded) + + # deal with edge cases + invalid_shared_fpr = ~torch.isfinite(shared_fpr_bounded_log) + + if invalid_shared_fpr.all(): + msg = ( + "Cannot compute AUPIMO because the shared fpr integration range is invalid). " + "Try increasing the number of thresholds." + ) + raise RuntimeError(msg) + + if invalid_shared_fpr.any(): + logger.warning( + "Some values in the shared fpr integration range are nan. " + "The AUPIMO will be computed without these values.", + ) + + # get rid of nan values by removing them from the integration range + shared_fpr_bounded_log = shared_fpr_bounded_log[~invalid_shared_fpr] + per_image_tprs_bounded = per_image_tprs_bounded[:, ~invalid_shared_fpr] + + num_points_integral = int(shared_fpr_bounded_log.shape[0]) + + if num_points_integral <= 30: + msg = ( + "Cannot compute AUPIMO because the shared fpr integration range doesn't have enough points. " + f"Found {num_points_integral} points in the integration range. " + "Try increasing `num_thresholds`." + ) + if not force: + raise RuntimeError(msg) + msg += " Computation was forced!" + logger.warning(msg) + + if num_points_integral < 300: + logger.warning( + "The AUPIMO may be inaccurate because the shared fpr integration range doesn't have enough points. " + f"Found {num_points_integral} points in the integration range. " + "Try increasing `num_thresholds`.", + ) + + aucs: torch.Tensor = torch.trapezoid(per_image_tprs_bounded, x=shared_fpr_bounded_log, axis=1) + + # normalize, then clip(0, 1) makes sure that the values are in [0, 1] in case of numerical errors + normalization_factor = aupimo_normalizing_factor(fpr_bounds) + aucs = (aucs / normalization_factor).clip(0, 1) + + return thresholds, shared_fpr, per_image_tprs, image_classes, aucs, num_points_integral + + +# =========================================== AUX =========================================== + + +def thresh_at_shared_fpr_level( + thresholds: torch.Tensor, + shared_fpr: torch.Tensor, + fpr_level: float, +) -> tuple[int, float, torch.Tensor]: + """Return the threshold and its index at the given shared FPR level. + + Three cases are possible: + - fpr_level == 0: the lowest threshold that achieves 0 FPR is returned + - fpr_level == 1: the highest threshold that achieves 1 FPR is returned + - 0 < fpr_level < 1: the threshold that achieves the closest (higher or lower) FPR to `fpr_level` is returned + + Args: + thresholds: thresholds at which the shared FPR was computed. + shared_fpr: shared FPR values. + fpr_level: shared FPR value at which to get the threshold. + + Returns: + tuple[int, float, float]: + [0] index of the threshold + [1] threshold + [2] the actual shared FPR value at the returned threshold + """ + _validate.is_valid_threshold(thresholds) + _validate.is_rate_curve(shared_fpr, nan_allowed=False, decreasing=True) + _validate.joint_validate_thresholds_shared_fpr(thresholds, shared_fpr) + _validate.is_rate(fpr_level, zero_ok=True, one_ok=True) + + shared_fpr_min, shared_fpr_max = shared_fpr.min(), shared_fpr.max() + + if fpr_level < shared_fpr_min: + msg = ( + "Invalid `fpr_level` because it's out of the range of `shared_fpr` = " + f"[{shared_fpr_min}, {shared_fpr_max}], and got {fpr_level}." + ) + raise ValueError(msg) + + if fpr_level > shared_fpr_max: + msg = ( + "Invalid `fpr_level` because it's out of the range of `shared_fpr` = " + f"[{shared_fpr_min}, {shared_fpr_max}], and got {fpr_level}." + ) + raise ValueError(msg) + + # fpr_level == 0 or 1 are special case + # because there may be multiple solutions, and the chosen should their MINIMUM/MAXIMUM respectively + if fpr_level == 0.0: + index = torch.min(torch.where(shared_fpr == fpr_level)[0]) + + elif fpr_level == 1.0: + index = torch.max(torch.where(shared_fpr == fpr_level)[0]) + + else: + index = torch.argmin(torch.abs(shared_fpr - fpr_level)) + + index = int(index) + fpr_level_defacto = shared_fpr[index] + thresh = thresholds[index] + return index, thresh, fpr_level_defacto + + +def aupimo_normalizing_factor(fpr_bounds: tuple[float, float]) -> float: + """Constant that normalizes the AUPIMO integral to 0-1 range. + + It is the maximum possible value from the integral in AUPIMO's definition. + It corresponds to assuming a constant function T_i: thresh --> 1. + + Args: + fpr_bounds: lower and upper bounds of the FPR integration range. + + Returns: + float: the normalization factor (>0). + """ + _validate.is_rate_range(fpr_bounds) + fpr_lower_bound, fpr_upper_bound = fpr_bounds + # the log's base must be the same as the one used in the integration! + return float(np.log(fpr_upper_bound / fpr_lower_bound)) diff --git a/src/anomalib/metrics/pimo/pimo.py b/src/anomalib/metrics/pimo/pimo.py new file mode 100644 index 0000000000..9703b60b59 --- /dev/null +++ b/src/anomalib/metrics/pimo/pimo.py @@ -0,0 +1,296 @@ +"""Per-Image Overlap curve (PIMO, pronounced pee-mo) and its area under the curve (AUPIMO). + +# PIMO + +PIMO is a curve of True Positive Rate (TPR) values on each image across multiple anomaly score thresholds. +The anomaly score thresholds are indexed by a (shared) valued of False Positive Rate (FPR) measure on the normal images. + +Each *anomalous* image has its own curve such that the X-axis is shared by all of them. + +At a given threshold: + X-axis: Shared FPR (may vary) + 1. Log of the Average of per-image FPR on normal images. + SEE NOTE BELOW. + Y-axis: per-image TP Rate (TPR), or "Overlap" between the ground truth and the predicted masks. + +*** Note about other shared FPR alternatives *** +The shared FPR metric can be made harder by using the cross-image max (or high-percentile) FPRs instead of the mean. +Rationale: this will further punish models that have exceptional FPs in normal images. +So far there is only one shared FPR metric implemented but others will be added in the future. + +# AUPIMO + +`AUPIMO` is the area under each `PIMO` curve with bounded integration range in terms of shared FPR. + +# Disclaimer + +This module implements torch interfaces to access the numpy code in `pimo_numpy.py`. +Tensors are converted to numpy arrays and then passed and validated in the numpy code. +The results are converted back to tensors and eventually wrapped in an dataclass object. + +Validations will preferably happen in ndarray so the numpy code can be reused without torch, +so often times the Tensor arguments will be converted to ndarray and then validated. +""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import torch +from torchmetrics import Metric + +from . import _validate, functional +from .dataclasses import AUPIMOResult, PIMOResult + +logger = logging.getLogger(__name__) + + +class PIMO(Metric): + """Per-IMage Overlap (PIMO, pronounced pee-mo) curves. + + This torchmetrics interface is a wrapper around the functional interface, which is a wrapper around the numpy code. + The tensors are converted to numpy arrays and then passed and validated in the numpy code. + The results are converted back to tensors and wrapped in an dataclass object. + + PIMO is a curve of True Positive Rate (TPR) values on each image across multiple anomaly score thresholds. + The anomaly score thresholds are indexed by a (cross-image shared) value of False Positive Rate (FPR) measure on + the normal images. + + Details: `anomalib.metrics.per_image.pimo`. + + Notation: + N: number of images + H: image height + W: image width + K: number of thresholds + + Attributes: + anomaly_maps: floating point anomaly score maps of shape (N, H, W) + masks: binary (bool or int) ground truth masks of shape (N, H, W) + + Args: + num_thresholds: number of thresholds to compute (K) + binclf_algorithm: algorithm to compute the binary classifier curve (see `binclf_curve_numpy.Algorithm`) + + Returns: + PIMOResult: PIMO curves dataclass object. See `PIMOResult` for details. + """ + + is_differentiable: bool = False + higher_is_better: bool | None = None + full_state_update: bool = False + + num_thresholds: int + binclf_algorithm: str + + anomaly_maps: list[torch.Tensor] + masks: list[torch.Tensor] + + @property + def _is_empty(self) -> bool: + """Return True if the metric has not been updated yet.""" + return len(self.anomaly_maps) == 0 + + @property + def num_images(self) -> int: + """Number of images.""" + return sum(am.shape[0] for am in self.anomaly_maps) + + @property + def image_classes(self) -> torch.Tensor: + """Image classes (0: normal, 1: anomalous).""" + return functional.images_classes_from_masks(self.masks) + + def __init__(self, num_thresholds: int) -> None: + """Per-Image Overlap (PIMO) curve. + + Args: + num_thresholds: number of thresholds used to compute the PIMO curve (K) + """ + super().__init__() + + logger.warning( + f"Metric `{self.__class__.__name__}` will save all targets and predictions in buffer." + " For large datasets this may lead to large memory footprint.", + ) + + # the options below are, redundantly, validated here to avoid reaching + # an error later in the execution + + _validate.is_num_thresholds_gte2(num_thresholds) + self.num_thresholds = num_thresholds + + self.add_state("anomaly_maps", default=[], dist_reduce_fx="cat") + self.add_state("masks", default=[], dist_reduce_fx="cat") + + def update(self, anomaly_maps: torch.Tensor, masks: torch.Tensor) -> None: + """Update lists of anomaly maps and masks. + + Args: + anomaly_maps (torch.Tensor): predictions of the model (ndim == 2, float) + masks (torch.Tensor): ground truth masks (ndim == 2, binary) + """ + _validate.is_anomaly_maps(anomaly_maps) + _validate.is_masks(masks) + _validate.is_same_shape(anomaly_maps, masks) + self.anomaly_maps.append(anomaly_maps) + self.masks.append(masks) + + def compute(self) -> PIMOResult: + """Compute the PIMO curves. + + Call the functional interface `pimo_curves()`, which is a wrapper around the numpy code. + + Returns: + PIMOResult: PIMO curves dataclass object. See `PIMOResult` for details. + """ + if self._is_empty: + msg = "No anomaly maps and masks have been added yet. Please call `update()` first." + raise RuntimeError(msg) + anomaly_maps = torch.concat(self.anomaly_maps, dim=0) + masks = torch.concat(self.masks, dim=0) + + thresholds, shared_fpr, per_image_tprs, _ = functional.pimo_curves( + anomaly_maps, + masks, + self.num_thresholds, + ) + return PIMOResult( + thresholds=thresholds, + shared_fpr=shared_fpr, + per_image_tprs=per_image_tprs, + ) + + +class AUPIMO(PIMO): + """Area Under the Per-Image Overlap (PIMO) curve. + + This torchmetrics interface is a wrapper around the functional interface, which is a wrapper around the numpy code. + The tensors are converted to numpy arrays and then passed and validated in the numpy code. + The results are converted back to tensors and wrapped in an dataclass object. + + Scores are computed from the integration of the PIMO curves within the given FPR bounds, then normalized to [0, 1]. + It can be thought of as the average TPR of the PIMO curves within the given FPR bounds. + + Details: `anomalib.metrics.per_image.pimo`. + + Notation: + N: number of images + H: image height + W: image width + K: number of thresholds + + Attributes: + anomaly_maps: floating point anomaly score maps of shape (N, H, W) + masks: binary (bool or int) ground truth masks of shape (N, H, W) + + Args: + num_thresholds: number of thresholds to compute (K) + fpr_bounds: lower and upper bounds of the FPR integration range + force: whether to force the computation despite bad conditions + + Returns: + tuple[PIMOResult, AUPIMOResult]: PIMO and AUPIMO results dataclass objects. See `PIMOResult` and `AUPIMOResult`. + """ + + fpr_bounds: tuple[float, float] + return_average: bool + force: bool + + @staticmethod + def normalizing_factor(fpr_bounds: tuple[float, float]) -> float: + """Constant that normalizes the AUPIMO integral to 0-1 range. + + It is the maximum possible value from the integral in AUPIMO's definition. + It corresponds to assuming a constant function T_i: thresh --> 1. + + Args: + fpr_bounds: lower and upper bounds of the FPR integration range. + + Returns: + float: the normalization factor (>0). + """ + return functional.aupimo_normalizing_factor(fpr_bounds) + + def __repr__(self) -> str: + """Show the metric name and its integration bounds.""" + lower, upper = self.fpr_bounds + return f"{self.__class__.__name__}([{lower:.2g}, {upper:.2g}])" + + def __init__( + self, + num_thresholds: int = 300_000, + fpr_bounds: tuple[float, float] = (1e-5, 1e-4), + return_average: bool = True, + force: bool = False, + ) -> None: + """Area Under the Per-Image Overlap (PIMO) curve. + + Args: + num_thresholds: [passed to parent `PIMO`] number of thresholds used to compute the PIMO curve + fpr_bounds: lower and upper bounds of the FPR integration range + return_average: if True, return the average AUPIMO score; if False, return all the individual AUPIMO scores + force: if True, force the computation of the AUPIMO scores even in bad conditions (e.g. few points) + """ + super().__init__(num_thresholds=num_thresholds) + + # other validations are done in PIMO.__init__() + + _validate.is_rate_range(fpr_bounds) + self.fpr_bounds = fpr_bounds + self.return_average = return_average + self.force = force + + def compute(self, force: bool | None = None) -> tuple[PIMOResult, AUPIMOResult]: # type: ignore[override] + """Compute the PIMO curves and their Area Under the curve (AUPIMO) scores. + + Call the functional interface `aupimo_scores()`, which is a wrapper around the numpy code. + + Args: + force: if given (not None), override the `force` attribute. + + Returns: + tuple[PIMOResult, AUPIMOResult]: PIMO curves and AUPIMO scores dataclass objects. + See `PIMOResult` and `AUPIMOResult` for details. + """ + if self._is_empty: + msg = "No anomaly maps and masks have been added yet. Please call `update()` first." + raise RuntimeError(msg) + anomaly_maps = torch.concat(self.anomaly_maps, dim=0) + masks = torch.concat(self.masks, dim=0) + force = force if force is not None else self.force + + # other validations are done in the numpy code + + thresholds, shared_fpr, per_image_tprs, _, aupimos, num_thresholds_auc = functional.aupimo_scores( + anomaly_maps, + masks, + self.num_thresholds, + fpr_bounds=self.fpr_bounds, + force=force, + ) + + pimo_result = PIMOResult( + thresholds=thresholds, + shared_fpr=shared_fpr, + per_image_tprs=per_image_tprs, + ) + aupimo_result = AUPIMOResult.from_pimo_result( + pimo_result, + fpr_bounds=self.fpr_bounds, + # not `num_thresholds`! + # `num_thresholds` is the number of thresholds used to compute the PIMO curve + # this is the number of thresholds used to compute the AUPIMO integral + num_thresholds_auc=num_thresholds_auc, + aupimos=aupimos, + ) + if self.return_average: + # normal images have NaN AUPIMO scores + is_nan = torch.isnan(aupimo_result.aupimos) + return aupimo_result.aupimos[~is_nan].mean() + return pimo_result, aupimo_result diff --git a/src/anomalib/metrics/pimo/utils.py b/src/anomalib/metrics/pimo/utils.py new file mode 100644 index 0000000000..f0cac45657 --- /dev/null +++ b/src/anomalib/metrics/pimo/utils.py @@ -0,0 +1,19 @@ +"""Torch-oriented interfaces for `utils.py`.""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import torch + +logger = logging.getLogger(__name__) + + +def images_classes_from_masks(masks: torch.Tensor) -> torch.Tensor: + """Deduce the image classes from the masks.""" + return (masks == 1).any(axis=(1, 2)).to(torch.int32) diff --git a/src/anomalib/metrics/threshold/__init__.py b/src/anomalib/metrics/threshold/__init__.py index 5cfa996cac..13d3bf3288 100644 --- a/src/anomalib/metrics/threshold/__init__.py +++ b/src/anomalib/metrics/threshold/__init__.py @@ -3,8 +3,8 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from .base import BaseThreshold +from .base import BaseThreshold, Threshold from .f1_adaptive_threshold import F1AdaptiveThreshold from .manual_threshold import ManualThreshold -__all__ = ["BaseThreshold", "F1AdaptiveThreshold", "ManualThreshold"] +__all__ = ["BaseThreshold", "Threshold", "F1AdaptiveThreshold", "ManualThreshold"] diff --git a/src/anomalib/metrics/threshold/base.py b/src/anomalib/metrics/threshold/base.py index 6bee389b3c..eef57789cd 100644 --- a/src/anomalib/metrics/threshold/base.py +++ b/src/anomalib/metrics/threshold/base.py @@ -3,33 +3,53 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from abc import ABC +import warnings import torch from torchmetrics import Metric -class BaseThreshold(Metric, ABC): - """Base class for thresholding metrics.""" +class Threshold(Metric): + """Base class for thresholding metrics. + + This class serves as the foundation for all threshold-based metrics in the system. + It inherits from torchmetrics.Metric and provides a common interface for + threshold computation and updates. + + Subclasses should implement the `compute` and `update` methods to define + specific threshold calculation logic. + """ def __init__(self, **kwargs) -> None: super().__init__(**kwargs) - def compute(self) -> torch.Tensor: + def compute(self) -> torch.Tensor: # noqa: PLR6301 """Compute the threshold. Returns: Value of the optimal threshold. """ - msg = "Subclass of BaseAnomalyScoreThreshold must implement the compute method" + msg = "Subclass of Threshold must implement the compute method" raise NotImplementedError(msg) - def update(self, *args, **kwargs) -> None: # noqa: ARG002 + def update(self, *args, **kwargs) -> None: # noqa: ARG002, PLR6301 """Update the metric state. Args: *args: Any positional arguments. **kwargs: Any keyword arguments. """ - msg = "Subclass of BaseAnomalyScoreThreshold must implement the update method" + msg = "Subclass of Threshold must implement the update method" raise NotImplementedError(msg) + + +class BaseThreshold(Threshold): + """Alias for Threshold class for backward compatibility.""" + + def __init__(self, **kwargs) -> None: + warnings.warn( + "BaseThreshold is deprecated and will be removed in a future version. Use Threshold instead.", + DeprecationWarning, + stacklevel=2, + ) + super().__init__(**kwargs) diff --git a/src/anomalib/metrics/threshold/f1_adaptive_threshold.py b/src/anomalib/metrics/threshold/f1_adaptive_threshold.py index 64b31a4dcc..cb2ba1cd19 100644 --- a/src/anomalib/metrics/threshold/f1_adaptive_threshold.py +++ b/src/anomalib/metrics/threshold/f1_adaptive_threshold.py @@ -9,12 +9,12 @@ from anomalib.metrics.precision_recall_curve import BinaryPrecisionRecallCurve -from .base import BaseThreshold +from .base import Threshold logger = logging.getLogger(__name__) -class F1AdaptiveThreshold(BinaryPrecisionRecallCurve, BaseThreshold): +class F1AdaptiveThreshold(BinaryPrecisionRecallCurve, Threshold): """Anomaly Score Threshold. This class computes/stores the threshold that determines the anomalous label diff --git a/src/anomalib/metrics/threshold/manual_threshold.py b/src/anomalib/metrics/threshold/manual_threshold.py index e10abaa154..e42860db01 100644 --- a/src/anomalib/metrics/threshold/manual_threshold.py +++ b/src/anomalib/metrics/threshold/manual_threshold.py @@ -5,10 +5,10 @@ import torch -from .base import BaseThreshold +from .base import Threshold -class ManualThreshold(BaseThreshold): +class ManualThreshold(Threshold): """Initialize Manual Threshold. Args: @@ -56,7 +56,8 @@ def compute(self) -> torch.Tensor: """ return self.value - def update(self, *args, **kwargs) -> None: + @staticmethod + def update(*args, **kwargs) -> None: """Do nothing. Args: diff --git a/src/anomalib/models/components/base/anomaly_module.py b/src/anomalib/models/components/base/anomaly_module.py index 7e2d9479cf..963ce485a3 100644 --- a/src/anomalib/models/components/base/anomaly_module.py +++ b/src/anomalib/models/components/base/anomaly_module.py @@ -20,7 +20,7 @@ from anomalib import LearningType from anomalib.metrics import AnomalibMetricCollection -from anomalib.metrics.threshold import BaseThreshold +from anomalib.metrics.threshold import Threshold from .export_mixin import ExportMixin @@ -46,8 +46,8 @@ def __init__(self) -> None: self.loss: nn.Module self.callbacks: list[Callback] - self.image_threshold: BaseThreshold - self.pixel_threshold: BaseThreshold + self.image_threshold: Threshold + self.pixel_threshold: Threshold self.normalization_metrics: MetricCollection @@ -168,20 +168,19 @@ def load_state_dict(self, state_dict: OrderedDict[str, Any], strict: bool = True if "pixel_threshold_class" in state_dict: self.pixel_threshold = self._get_instance(state_dict, "pixel_threshold_class") - if "anomaly_maps_normalization_class" in state_dict: - self.anomaly_maps_normalization_metrics = self._get_instance(state_dict, "anomaly_maps_normalization_class") - if "box_scores_normalization_class" in state_dict: - self.box_scores_normalization_metrics = self._get_instance(state_dict, "box_scores_normalization_class") + # check only for pred score normalization metrics, because if this one is present, all others are too if "pred_scores_normalization_class" in state_dict: + self.box_scores_normalization_metrics = self._get_instance(state_dict, "box_scores_normalization_class") + self.anomaly_maps_normalization_metrics = self._get_instance(state_dict, "anomaly_maps_normalization_class") self.pred_scores_normalization_metrics = self._get_instance(state_dict, "pred_scores_normalization_class") - self.normalization_metrics = MetricCollection( - { - "anomaly_maps": self.anomaly_maps_normalization_metrics, - "box_scores": self.box_scores_normalization_metrics, - "pred_scores": self.pred_scores_normalization_metrics, - }, - ) + self.normalization_metrics = MetricCollection( + { + "anomaly_maps": self.anomaly_maps_normalization_metrics, + "box_scores": self.box_scores_normalization_metrics, + "pred_scores": self.pred_scores_normalization_metrics, + }, + ) # Used to load metrics if there is any related data in state_dict self._load_metrics(state_dict) @@ -215,7 +214,8 @@ def _add_metrics(self, name: str, state_dict: OrderedDict[str, torch.Tensor]) -> logger.info("Loading %s metrics from state dict", class_name) metrics.add_metrics(metrics_cls()) - def _get_instance(self, state_dict: OrderedDict[str, Any], dict_key: str) -> BaseThreshold: + @staticmethod + def _get_instance(state_dict: OrderedDict[str, Any], dict_key: str) -> Threshold: """Get the threshold class from the ``state_dict``.""" class_path = state_dict.pop(dict_key) module = importlib.import_module(".".join(class_path.split(".")[:-1])) @@ -240,7 +240,7 @@ def set_transform(self, transform: Transform) -> None: """Update the transform linked to the model instance.""" self._transform = transform - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: # noqa: PLR6301 """Default transforms. The default transform is resize to 256x256 and normalize to ImageNet stats. Individual models can override @@ -339,7 +339,7 @@ def from_config( model_parser.add_argument("--task", type=TaskType | str, default=TaskType.SEGMENTATION) model_parser.add_argument("--metrics.image", type=list[str] | str | None, default=["F1Score", "AUROC"]) model_parser.add_argument("--metrics.pixel", type=list[str] | str | None, default=None, required=False) - model_parser.add_argument("--metrics.threshold", type=BaseThreshold | str, default="F1AdaptiveThreshold") + model_parser.add_argument("--metrics.threshold", type=Threshold | str, default="F1AdaptiveThreshold") model_parser.add_class_arguments(Trainer, "trainer", fail_untyped=False, instantiate=False, sub_configs=True) args = ["--config", str(config_path)] for key, value in kwargs.items(): diff --git a/src/anomalib/models/components/base/export_mixin.py b/src/anomalib/models/components/base/export_mixin.py index 561136f70b..5e7e5e9481 100644 --- a/src/anomalib/models/components/base/export_mixin.py +++ b/src/anomalib/models/components/base/export_mixin.py @@ -142,7 +142,9 @@ def to_onnx( export_root = _create_export_root(export_root, ExportType.ONNX) input_shape = torch.zeros((1, 3, *input_size)) if input_size else torch.zeros((1, 3, 1, 1)) dynamic_axes = ( - None if input_size else {"input": {0: "batch_size", 2: "height", 3: "weight"}, "output": {0: "batch_size"}} + {"input": {0: "batch_size"}, "output": {0: "batch_size"}} + if input_size + else {"input": {0: "batch_size", 2: "height", 3: "weight"}, "output": {0: "batch_size"}} ) _write_metadata_to_json(self._get_metadata(task), export_root) onnx_path = export_root / "model.onnx" @@ -310,8 +312,8 @@ def _compress_ov_model( return model + @staticmethod def _post_training_quantization_ov( - self, model: "CompiledModel", datamodule: AnomalibDataModule | None = None, ) -> "CompiledModel": @@ -330,13 +332,14 @@ def _post_training_quantization_ov( if datamodule is None: msg = "Datamodule must be provided for OpenVINO INT8_PTQ compression" raise ValueError(msg) + datamodule.setup("fit") model_input = model.input(0) if model_input.partial_shape[0].is_static: datamodule.train_batch_size = model_input.shape[0] - dataloader = datamodule.train_dataloader() + dataloader = datamodule.val_dataloader() if len(dataloader.dataset) < 300: logger.warning( f">300 images recommended for INT8 quantization, found only {len(dataloader.dataset)} images", @@ -345,8 +348,8 @@ def _post_training_quantization_ov( calibration_dataset = nncf.Dataset(dataloader, lambda x: x["image"]) return nncf.quantize(model, calibration_dataset) + @staticmethod def _accuracy_control_quantization_ov( - self, model: "CompiledModel", datamodule: AnomalibDataModule | None = None, metric: Metric | str | None = None, @@ -373,6 +376,8 @@ def _accuracy_control_quantization_ov( if datamodule is None: msg = "Datamodule must be provided for OpenVINO INT8_PTQ compression" raise ValueError(msg) + datamodule.setup("fit") + if metric is None: msg = "Metric must be provided for OpenVINO INT8_ACQ compression" raise ValueError(msg) @@ -383,14 +388,14 @@ def _accuracy_control_quantization_ov( datamodule.train_batch_size = model_input.shape[0] datamodule.eval_batch_size = model_input.shape[0] - dataloader = datamodule.train_dataloader() + dataloader = datamodule.val_dataloader() if len(dataloader.dataset) < 300: logger.warning( f">300 images recommended for INT8 quantization, found only {len(dataloader.dataset)} images", ) calibration_dataset = nncf.Dataset(dataloader, lambda x: x["image"]) - validation_dataset = nncf.Dataset(datamodule.val_dataloader()) + validation_dataset = nncf.Dataset(datamodule.test_dataloader()) if isinstance(metric, str): metric = create_metric_collection([metric])[metric] diff --git a/src/anomalib/models/components/classification/__init__.py b/src/anomalib/models/components/classification/__init__.py index 7767cb466e..253db6aee6 100644 --- a/src/anomalib/models/components/classification/__init__.py +++ b/src/anomalib/models/components/classification/__init__.py @@ -1,5 +1,8 @@ """Classification modules.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + from .kde_classifier import FeatureScalingMethod, KDEClassifier __all__ = ["KDEClassifier", "FeatureScalingMethod"] diff --git a/src/anomalib/models/components/dimensionality_reduction/random_projection.py b/src/anomalib/models/components/dimensionality_reduction/random_projection.py index 3b5d1e9bf8..cfa6ecad30 100644 --- a/src/anomalib/models/components/dimensionality_reduction/random_projection.py +++ b/src/anomalib/models/components/dimensionality_reduction/random_projection.py @@ -98,7 +98,8 @@ def _sparse_random_matrix(self, n_features: int) -> torch.Tensor: return components - def _johnson_lindenstrauss_min_dim(self, n_samples: int, eps: float = 0.1) -> int | np.integer: + @staticmethod + def _johnson_lindenstrauss_min_dim(n_samples: int, eps: float = 0.1) -> int | np.integer: """Find a 'safe' number of components to randomly project to. Ref eqn 2.1 https://cseweb.ucsd.edu/~dasgupta/papers/jl.pdf diff --git a/src/anomalib/models/components/filters/__init__.py b/src/anomalib/models/components/filters/__init__.py index 2878948759..340daa47f2 100644 --- a/src/anomalib/models/components/filters/__init__.py +++ b/src/anomalib/models/components/filters/__init__.py @@ -1,5 +1,8 @@ """Implements filters used by models.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + from .blur import GaussianBlur2d __all__ = ["GaussianBlur2d"] diff --git a/src/anomalib/models/components/flow/all_in_one_block.py b/src/anomalib/models/components/flow/all_in_one_block.py index 3aa0460ae1..6c6713add8 100644 --- a/src/anomalib/models/components/flow/all_in_one_block.py +++ b/src/anomalib/models/components/flow/all_in_one_block.py @@ -330,7 +330,8 @@ def forward( return (x_out,), log_jac_det - def output_dims(self, input_dims: list[tuple[int]]) -> list[tuple[int]]: + @staticmethod + def output_dims(input_dims: list[tuple[int]]) -> list[tuple[int]]: """Output dimensions of the layer. Args: diff --git a/src/anomalib/models/components/sampling/k_center_greedy.py b/src/anomalib/models/components/sampling/k_center_greedy.py index 2b0f495d28..d7ca314f33 100644 --- a/src/anomalib/models/components/sampling/k_center_greedy.py +++ b/src/anomalib/models/components/sampling/k_center_greedy.py @@ -9,9 +9,9 @@ import torch from torch.nn import functional as F # noqa: N812 +from tqdm import tqdm from anomalib.models.components.dimensionality_reduction import SparseRandomProjection -from anomalib.utils.rich import safe_track class KCenterGreedy: @@ -98,7 +98,7 @@ def select_coreset_idxs(self, selected_idxs: list[int] | None = None) -> list[in selected_coreset_idxs: list[int] = [] idx = int(torch.randint(high=self.n_observations, size=(1,)).item()) - for _ in safe_track(sequence=range(self.coreset_size), description="Selecting Coreset Indices."): + for _ in tqdm(range(self.coreset_size), desc="Selecting Coreset Indices."): self.update_distances(cluster_centers=[idx]) idx = self.get_new_idx() if idx in selected_idxs: diff --git a/src/anomalib/models/image/cfa/lightning_model.py b/src/anomalib/models/image/cfa/lightning_model.py index 39838c096f..05d38689a0 100644 --- a/src/anomalib/models/image/cfa/lightning_model.py +++ b/src/anomalib/models/image/cfa/lightning_model.py @@ -104,7 +104,8 @@ def validation_step(self, batch: dict[str, str | torch.Tensor], *args, **kwargs) batch["anomaly_maps"] = self.model(batch["image"]) return batch - def backward(self, loss: torch.Tensor, *args, **kwargs) -> None: + @staticmethod + def backward(loss: torch.Tensor, *args, **kwargs) -> None: """Perform backward-pass for the CFA model. Args: diff --git a/src/anomalib/models/image/cfa/torch_model.py b/src/anomalib/models/image/cfa/torch_model.py index fc94f2cfdd..5a6c490fac 100644 --- a/src/anomalib/models/image/cfa/torch_model.py +++ b/src/anomalib/models/image/cfa/torch_model.py @@ -47,7 +47,7 @@ def get_return_nodes(backbone: str) -> list[str]: raise NotImplementedError(msg) return_nodes: list[str] - if backbone in ("resnet18", "wide_resnet50_2"): + if backbone in {"resnet18", "wide_resnet50_2"}: return_nodes = ["layer1", "layer2", "layer3"] elif backbone == "vgg19_bn": return_nodes = ["features.25", "features.38", "features.52"] diff --git a/src/anomalib/models/image/csflow/loss.py b/src/anomalib/models/image/csflow/loss.py index 4e7809be7a..2e5d1da8ff 100644 --- a/src/anomalib/models/image/csflow/loss.py +++ b/src/anomalib/models/image/csflow/loss.py @@ -10,7 +10,8 @@ class CsFlowLoss(nn.Module): """Loss function for the CS-Flow Model Implementation.""" - def forward(self, z_dist: torch.Tensor, jacobians: torch.Tensor) -> torch.Tensor: + @staticmethod + def forward(z_dist: torch.Tensor, jacobians: torch.Tensor) -> torch.Tensor: """Compute the loss CS-Flow. Args: diff --git a/src/anomalib/models/image/csflow/torch_model.py b/src/anomalib/models/image/csflow/torch_model.py index 08c9106a3c..6569c7a0dd 100644 --- a/src/anomalib/models/image/csflow/torch_model.py +++ b/src/anomalib/models/image/csflow/torch_model.py @@ -271,7 +271,8 @@ def forward( return [input_tensor[i][:, self.perm_inv[i]] for i in range(self.n_inputs)], 0.0 - def output_dims(self, input_dims: list[tuple[int]]) -> list[tuple[int]]: + @staticmethod + def output_dims(input_dims: list[tuple[int]]) -> list[tuple[int]]: """Return the output dimensions of the module.""" return input_dims @@ -402,7 +403,8 @@ def forward( # Since Jacobians are only used for computing loss and summed in the loss, the idea is to sum them here return [z_dist0, z_dist1, z_dist2], torch.stack([jac0, jac1, jac2], dim=1).sum() - def output_dims(self, input_dims: list[tuple[int]]) -> list[tuple[int]]: + @staticmethod + def output_dims(input_dims: list[tuple[int]]) -> list[tuple[int]]: """Output dimensions of the module.""" return input_dims @@ -591,7 +593,8 @@ def forward(self, images: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: output = {"anomaly_map": anomaly_maps, "pred_score": anomaly_scores} return output - def _compute_anomaly_scores(self, z_dists: torch.Tensor) -> torch.Tensor: + @staticmethod + def _compute_anomaly_scores(z_dists: torch.Tensor) -> torch.Tensor: """Get anomaly scores from the latent distribution. Args: diff --git a/src/anomalib/models/image/draem/lightning_model.py b/src/anomalib/models/image/draem/lightning_model.py index f33bff6538..6eb0e197fc 100644 --- a/src/anomalib/models/image/draem/lightning_model.py +++ b/src/anomalib/models/image/draem/lightning_model.py @@ -12,6 +12,7 @@ import torch from lightning.pytorch.utilities.types import STEP_OUTPUT from torch import nn +from torchvision.transforms.v2 import Compose, Resize, Transform from anomalib import LearningType from anomalib.data.utils import Augmenter @@ -150,3 +151,13 @@ def learning_type(self) -> LearningType: LearningType: Learning type of the model. """ return LearningType.ONE_CLASS + + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: + """Default transform for DRAEM. Normalization is not needed as the images are scaled to [0, 1] in Dataset.""" + image_size = image_size or (256, 256) + return Compose( + [ + Resize(image_size, antialias=True), + ], + ) diff --git a/src/anomalib/models/image/dsr/lightning_model.py b/src/anomalib/models/image/dsr/lightning_model.py index e9eb4d2693..8381fce73d 100644 --- a/src/anomalib/models/image/dsr/lightning_model.py +++ b/src/anomalib/models/image/dsr/lightning_model.py @@ -13,6 +13,7 @@ import torch from lightning.pytorch.utilities.types import STEP_OUTPUT, OptimizerLRScheduler from torch import Tensor +from torchvision.transforms.v2 import Compose, Resize, Transform from anomalib import LearningType from anomalib.data.utils import DownloadInfo, download_and_extract @@ -55,7 +56,8 @@ def __init__(self, latent_anomaly_strength: float = 0.2, upsampling_train_ratio: self.second_phase: int - def prepare_pretrained_model(self) -> Path: + @staticmethod + def prepare_pretrained_model() -> Path: """Download pre-trained models if they don't exist.""" pretrained_models_dir = Path("./pre_trained/") if not (pretrained_models_dir / "vq_model_pretrained_128_4096.pckl").is_file(): @@ -190,3 +192,13 @@ def learning_type(self) -> LearningType: LearningType: Learning type of the model. """ return LearningType.ONE_CLASS + + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: + """Default transform for DSR. Normalization is not needed as the images are scaled to [0, 1] in Dataset.""" + image_size = image_size or (256, 256) + return Compose( + [ + Resize(image_size, antialias=True), + ], + ) diff --git a/src/anomalib/models/image/dsr/torch_model.py b/src/anomalib/models/image/dsr/torch_model.py index 34bc9b915d..395c1d2b5d 100644 --- a/src/anomalib/models/image/dsr/torch_model.py +++ b/src/anomalib/models/image/dsr/torch_model.py @@ -1093,8 +1093,8 @@ def vq_vae_bot(self) -> VectorQuantizer: """Return ``self._vq_vae_bot``.""" return self._vq_vae_bot + @staticmethod def generate_fake_anomalies_joined( - self, features: torch.Tensor, embeddings: torch.Tensor, memory_torch_original: torch.Tensor, diff --git a/src/anomalib/models/image/efficient_ad/lightning_model.py b/src/anomalib/models/image/efficient_ad/lightning_model.py index 9d1e23a06c..216ab418bf 100644 --- a/src/anomalib/models/image/efficient_ad/lightning_model.py +++ b/src/anomalib/models/image/efficient_ad/lightning_model.py @@ -321,7 +321,8 @@ def learning_type(self) -> LearningType: """ return LearningType.ONE_CLASS - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: """Default transform for EfficientAd. Imagenet normalization applied in forward.""" image_size = image_size or (256, 256) return Compose( diff --git a/src/anomalib/models/image/efficient_ad/torch_model.py b/src/anomalib/models/image/efficient_ad/torch_model.py index ee43879155..12f320e263 100644 --- a/src/anomalib/models/image/efficient_ad/torch_model.py +++ b/src/anomalib/models/image/efficient_ad/torch_model.py @@ -319,7 +319,8 @@ def __init__( }, ) - def is_set(self, p_dic: nn.ParameterDict) -> bool: + @staticmethod + def is_set(p_dic: nn.ParameterDict) -> bool: """Check if any of the parameters in the parameter dictionary is set. Args: @@ -330,7 +331,8 @@ def is_set(self, p_dic: nn.ParameterDict) -> bool: """ return any(value.sum() != 0 for _, value in p_dic.items()) - def choose_random_aug_image(self, image: torch.Tensor) -> torch.Tensor: + @staticmethod + def choose_random_aug_image(image: torch.Tensor) -> torch.Tensor: """Choose a random augmentation function and apply it to the input image. Args: diff --git a/src/anomalib/models/image/fastflow/loss.py b/src/anomalib/models/image/fastflow/loss.py index b29e6159cf..a47f49df88 100644 --- a/src/anomalib/models/image/fastflow/loss.py +++ b/src/anomalib/models/image/fastflow/loss.py @@ -10,7 +10,8 @@ class FastflowLoss(nn.Module): """FastFlow Loss.""" - def forward(self, hidden_variables: list[torch.Tensor], jacobians: list[torch.Tensor]) -> torch.Tensor: + @staticmethod + def forward(hidden_variables: list[torch.Tensor], jacobians: list[torch.Tensor]) -> torch.Tensor: """Calculate the Fastflow loss. Args: diff --git a/src/anomalib/models/image/fastflow/torch_model.py b/src/anomalib/models/image/fastflow/torch_model.py index 3e61112402..379416a8f3 100644 --- a/src/anomalib/models/image/fastflow/torch_model.py +++ b/src/anomalib/models/image/fastflow/torch_model.py @@ -124,11 +124,11 @@ def __init__( self.input_size = input_size - if backbone in ("cait_m48_448", "deit_base_distilled_patch16_384"): + if backbone in {"cait_m48_448", "deit_base_distilled_patch16_384"}: self.feature_extractor = timm.create_model(backbone, pretrained=pre_trained) channels = [768] scales = [16] - elif backbone in ("resnet18", "wide_resnet50_2"): + elif backbone in {"resnet18", "wide_resnet50_2"}: self.feature_extractor = timm.create_model( backbone, pretrained=pre_trained, diff --git a/src/anomalib/models/image/padim/anomaly_map.py b/src/anomalib/models/image/padim/anomaly_map.py index af43363629..054a930664 100644 --- a/src/anomalib/models/image/padim/anomaly_map.py +++ b/src/anomalib/models/image/padim/anomaly_map.py @@ -48,7 +48,8 @@ def compute_distance(embedding: torch.Tensor, stats: list[torch.Tensor]) -> torc distances = distances.reshape(batch, 1, height, width) return distances.clamp(0).sqrt() - def up_sample(self, distance: torch.Tensor, image_size: tuple[int, int] | torch.Size) -> torch.Tensor: + @staticmethod + def up_sample(distance: torch.Tensor, image_size: tuple[int, int] | torch.Size) -> torch.Tensor: """Up sample anomaly score to match the input image size. Args: diff --git a/src/anomalib/models/image/padim/lightning_model.py b/src/anomalib/models/image/padim/lightning_model.py index 4912553291..c232403852 100644 --- a/src/anomalib/models/image/padim/lightning_model.py +++ b/src/anomalib/models/image/padim/lightning_model.py @@ -122,7 +122,8 @@ def learning_type(self) -> LearningType: """ return LearningType.ONE_CLASS - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: """Default transform for Padim.""" image_size = image_size or (256, 256) return Compose( diff --git a/src/anomalib/models/image/patchcore/lightning_model.py b/src/anomalib/models/image/patchcore/lightning_model.py index ca0b2081d4..3f471a159c 100644 --- a/src/anomalib/models/image/patchcore/lightning_model.py +++ b/src/anomalib/models/image/patchcore/lightning_model.py @@ -57,7 +57,8 @@ def __init__( self.coreset_sampling_ratio = coreset_sampling_ratio self.embeddings: list[torch.Tensor] = [] - def configure_optimizers(self) -> None: + @staticmethod + def configure_optimizers() -> None: """Configure optimizers. Returns: @@ -126,7 +127,8 @@ def learning_type(self) -> LearningType: """ return LearningType.ONE_CLASS - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: """Default transform for Padim.""" image_size = image_size or (256, 256) # scale center crop size proportional to image size diff --git a/src/anomalib/models/image/reverse_distillation/anomaly_map.py b/src/anomalib/models/image/reverse_distillation/anomaly_map.py index bcc59f3d17..74dc19e1df 100644 --- a/src/anomalib/models/image/reverse_distillation/anomaly_map.py +++ b/src/anomalib/models/image/reverse_distillation/anomaly_map.py @@ -52,7 +52,7 @@ def __init__( self.sigma = sigma self.kernel_size = 2 * int(4.0 * sigma + 0.5) + 1 - if mode not in (AnomalyMapGenerationMode.ADD, AnomalyMapGenerationMode.MULTIPLY): + if mode not in {AnomalyMapGenerationMode.ADD, AnomalyMapGenerationMode.MULTIPLY}: msg = f"Found mode {mode}. Only multiply and add are supported." raise ValueError(msg) self.mode = mode diff --git a/src/anomalib/models/image/reverse_distillation/components/__init__.py b/src/anomalib/models/image/reverse_distillation/components/__init__.py index 631eba439a..b3f4796605 100644 --- a/src/anomalib/models/image/reverse_distillation/components/__init__.py +++ b/src/anomalib/models/image/reverse_distillation/components/__init__.py @@ -1,18 +1,7 @@ """PyTorch modules for Reverse Distillation.""" # Copyright (C) 2022-2024 Intel Corporation -# -# 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. +# SPDX-License-Identifier: Apache-2.0 from .bottleneck import get_bottleneck_layer from .de_resnet import get_decoder diff --git a/src/anomalib/models/image/reverse_distillation/components/bottleneck.py b/src/anomalib/models/image/reverse_distillation/components/bottleneck.py index 6949368410..220fc1d670 100644 --- a/src/anomalib/models/image/reverse_distillation/components/bottleneck.py +++ b/src/anomalib/models/image/reverse_distillation/components/bottleneck.py @@ -163,4 +163,4 @@ def get_bottleneck_layer(backbone: str, **kwargs) -> OCBE: Returns: Bottleneck_layer: One-Class Bottleneck Embedding module. """ - return OCBE(BasicBlock, 2, **kwargs) if backbone in ("resnet18", "resnet34") else OCBE(Bottleneck, 3, **kwargs) + return OCBE(BasicBlock, 2, **kwargs) if backbone in {"resnet18", "resnet34"} else OCBE(Bottleneck, 3, **kwargs) diff --git a/src/anomalib/models/image/reverse_distillation/components/de_resnet.py b/src/anomalib/models/image/reverse_distillation/components/de_resnet.py index 7c7ca25ebe..3bb8886e8b 100644 --- a/src/anomalib/models/image/reverse_distillation/components/de_resnet.py +++ b/src/anomalib/models/image/reverse_distillation/components/de_resnet.py @@ -336,7 +336,7 @@ def get_decoder(name: str) -> ResNet: Returns: ResNet: Decoder ResNet architecture. """ - if name in ( + if name in { "resnet18", "resnet34", "resnet50", @@ -346,7 +346,7 @@ def get_decoder(name: str) -> ResNet: "resnext101_32x8d", "wide_resnet50_2", "wide_resnet101_2", - ): + }: decoder = globals()[f"de_{name}"] else: msg = f"Decoder with architecture {name} not supported" diff --git a/src/anomalib/models/image/reverse_distillation/loss.py b/src/anomalib/models/image/reverse_distillation/loss.py index 03d2107829..3d563238ff 100644 --- a/src/anomalib/models/image/reverse_distillation/loss.py +++ b/src/anomalib/models/image/reverse_distillation/loss.py @@ -10,7 +10,8 @@ class ReverseDistillationLoss(nn.Module): """Loss function for Reverse Distillation.""" - def forward(self, encoder_features: list[torch.Tensor], decoder_features: list[torch.Tensor]) -> torch.Tensor: + @staticmethod + def forward(encoder_features: list[torch.Tensor], decoder_features: list[torch.Tensor]) -> torch.Tensor: """Compute cosine similarity loss based on features from encoder and decoder. Based on the official code: diff --git a/src/anomalib/models/image/rkde/lightning_model.py b/src/anomalib/models/image/rkde/lightning_model.py index 02ad6c2564..f8b6af6d7a 100644 --- a/src/anomalib/models/image/rkde/lightning_model.py +++ b/src/anomalib/models/image/rkde/lightning_model.py @@ -11,6 +11,7 @@ import torch from lightning.pytorch.utilities.types import STEP_OUTPUT +from torchvision.transforms.v2 import Compose, Resize, Transform from anomalib import LearningType from anomalib.models.components import AnomalyModule, MemoryBankMixin @@ -143,3 +144,13 @@ def learning_type(self) -> LearningType: LearningType: Learning type of the model. """ return LearningType.ONE_CLASS + + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: + """Default transform for RKDE.""" + image_size = image_size or (240, 360) + return Compose( + [ + Resize(image_size, antialias=True), + ], + ) diff --git a/src/anomalib/models/image/stfpm/anomaly_map.py b/src/anomalib/models/image/stfpm/anomaly_map.py index ee3f2ccee3..9cd7887fea 100644 --- a/src/anomalib/models/image/stfpm/anomaly_map.py +++ b/src/anomalib/models/image/stfpm/anomaly_map.py @@ -15,8 +15,8 @@ def __init__(self) -> None: super().__init__() self.distance = torch.nn.PairwiseDistance(p=2, keepdim=True) + @staticmethod def compute_layer_map( - self, teacher_features: torch.Tensor, student_features: torch.Tensor, image_size: tuple[int, int] | torch.Size, diff --git a/src/anomalib/models/image/uflow/feature_extraction.py b/src/anomalib/models/image/uflow/feature_extraction.py index 1e6385fc4d..50cd2ba5e3 100644 --- a/src/anomalib/models/image/uflow/feature_extraction.py +++ b/src/anomalib/models/image/uflow/feature_extraction.py @@ -33,7 +33,7 @@ def get_feature_extractor(backbone: str, input_size: tuple[int, int] = (256, 256 raise ValueError(msg) feature_extractor: nn.Module - if backbone in ["resnet18", "wide_resnet50_2"]: + if backbone in {"resnet18", "wide_resnet50_2"}: feature_extractor = FeatureExtractor(backbone, input_size, layers=("layer1", "layer2", "layer3")).eval() if backbone == "mcait": feature_extractor = MCaitFeatureExtractor().eval() diff --git a/src/anomalib/models/image/uflow/lightning_model.py b/src/anomalib/models/image/uflow/lightning_model.py index cbc24e2717..06ed9b9eeb 100644 --- a/src/anomalib/models/image/uflow/lightning_model.py +++ b/src/anomalib/models/image/uflow/lightning_model.py @@ -118,7 +118,8 @@ def learning_type(self) -> LearningType: """ return LearningType.ONE_CLASS - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: """Default transform for Padim.""" if image_size is not None: logger.warning("Image size is not used in UFlow. The input image size is determined by the model.") diff --git a/src/anomalib/models/image/uflow/loss.py b/src/anomalib/models/image/uflow/loss.py index 7afe8a1fc2..08f2dfbe31 100644 --- a/src/anomalib/models/image/uflow/loss.py +++ b/src/anomalib/models/image/uflow/loss.py @@ -10,7 +10,8 @@ class UFlowLoss(nn.Module): """UFlow Loss.""" - def forward(self, hidden_variables: list[Tensor], jacobians: list[Tensor]) -> Tensor: + @staticmethod + def forward(hidden_variables: list[Tensor], jacobians: list[Tensor]) -> Tensor: """Calculate the UFlow loss. Args: diff --git a/src/anomalib/models/image/winclip/lightning_model.py b/src/anomalib/models/image/winclip/lightning_model.py index 0d86697faf..6a405969fd 100644 --- a/src/anomalib/models/image/winclip/lightning_model.py +++ b/src/anomalib/models/image/winclip/lightning_model.py @@ -168,7 +168,8 @@ def load_state_dict(self, state_dict: OrderedDict[str, Any], strict: bool = True state_dict.update(restore_dict) return super().load_state_dict(state_dict, strict) - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: """Configure the default transforms used by the model.""" if image_size is not None: logger.warning("Image size is not used in WinCLIP. The input image size is determined by the model.") diff --git a/src/anomalib/models/video/ai_vad/clip/clip.py b/src/anomalib/models/video/ai_vad/clip/clip.py index 553f55bf7d..905e07fc35 100644 --- a/src/anomalib/models/video/ai_vad/clip/clip.py +++ b/src/anomalib/models/video/ai_vad/clip/clip.py @@ -104,15 +104,13 @@ def _convert_image_to_rgb(image): def _transform(n_px): - return Compose( - [ - Resize(n_px, interpolation=BICUBIC), - CenterCrop(n_px), - _convert_image_to_rgb, - ToTensor(), - Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), - ] - ) + return Compose([ + Resize(n_px, interpolation=BICUBIC), + CenterCrop(n_px), + _convert_image_to_rgb, + ToTensor(), + Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), + ]) def available_models() -> List[str]: diff --git a/src/anomalib/models/video/ai_vad/clip/model.py b/src/anomalib/models/video/ai_vad/clip/model.py index 9f23afa8fc..06ee36922e 100644 --- a/src/anomalib/models/video/ai_vad/clip/model.py +++ b/src/anomalib/models/video/ai_vad/clip/model.py @@ -45,13 +45,11 @@ def __init__(self, inplanes, planes, stride=1): if stride > 1 or inplanes != planes * Bottleneck.expansion: # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1 self.downsample = nn.Sequential( - OrderedDict( - [ - ("-1", nn.AvgPool2d(stride)), - ("0", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)), - ("1", nn.BatchNorm2d(planes * self.expansion)), - ] - ) + OrderedDict([ + ("-1", nn.AvgPool2d(stride)), + ("0", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)), + ("1", nn.BatchNorm2d(planes * self.expansion)), + ]) ) def forward(self, x: torch.Tensor): @@ -192,13 +190,11 @@ def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): self.attn = nn.MultiheadAttention(d_model, n_head) self.ln_1 = LayerNorm(d_model) self.mlp = nn.Sequential( - OrderedDict( - [ - ("c_fc", nn.Linear(d_model, d_model * 4)), - ("gelu", QuickGELU()), - ("c_proj", nn.Linear(d_model * 4, d_model)), - ] - ) + OrderedDict([ + ("c_fc", nn.Linear(d_model, d_model * 4)), + ("gelu", QuickGELU()), + ("c_proj", nn.Linear(d_model * 4, d_model)), + ]) ) self.ln_2 = LayerNorm(d_model) self.attn_mask = attn_mask @@ -430,9 +426,9 @@ def build_model(state_dict: dict): if vit: vision_width = state_dict["visual.conv1.weight"].shape[0] - vision_layers = len( - [k for k in state_dict.keys() if k.startswith("visual.") and k.endswith(".attn.in_proj_weight")] - ) + vision_layers = len([ + k for k in state_dict.keys() if k.startswith("visual.") and k.endswith(".attn.in_proj_weight") + ]) vision_patch_size = state_dict["visual.conv1.weight"].shape[-1] grid_size = round((state_dict["visual.positional_embedding"].shape[0] - 1) ** 0.5) image_resolution = vision_patch_size * grid_size diff --git a/src/anomalib/models/video/ai_vad/lightning_model.py b/src/anomalib/models/video/ai_vad/lightning_model.py index dde0149b3b..40f6d50b8b 100644 --- a/src/anomalib/models/video/ai_vad/lightning_model.py +++ b/src/anomalib/models/video/ai_vad/lightning_model.py @@ -159,7 +159,8 @@ def learning_type(self) -> LearningType: """ return LearningType.ONE_CLASS - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform | None: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform | None: """AI-VAD does not need a transform, as the region- and feature-extractors apply their own transforms.""" del image_size return None diff --git a/src/anomalib/models/video/ai_vad/regions.py b/src/anomalib/models/video/ai_vad/regions.py index 165de0091a..441af32493 100644 --- a/src/anomalib/models/video/ai_vad/regions.py +++ b/src/anomalib/models/video/ai_vad/regions.py @@ -73,18 +73,18 @@ def forward(self, first_frame: torch.Tensor, last_frame: torch.Tensor) -> list[d regions = self.backbone(last_frame) if self.enable_foreground_detections: - regions = self.add_foreground_boxes( - regions, - first_frame, - last_frame, - self.foreground_kernel_size, - self.foreground_binary_threshold, + regions = self._add_foreground_boxes( + regions=regions, + first_frame=first_frame, + last_frame=last_frame, + kernel_size=self.foreground_kernel_size, + binary_threshold=self.foreground_binary_threshold, ) return self.post_process_bbox_detections(regions) - def add_foreground_boxes( - self, + @staticmethod + def _add_foreground_boxes( regions: list[dict[str, torch.Tensor]], first_frame: torch.Tensor, last_frame: torch.Tensor, diff --git a/src/anomalib/pipelines/benchmark/pipeline.py b/src/anomalib/pipelines/benchmark/pipeline.py index b4410f8094..730b3ecccc 100644 --- a/src/anomalib/pipelines/benchmark/pipeline.py +++ b/src/anomalib/pipelines/benchmark/pipeline.py @@ -14,7 +14,8 @@ class Benchmark(Pipeline): """Benchmarking pipeline.""" - def _setup_runners(self, args: dict) -> list[Runner]: + @staticmethod + def _setup_runners(args: dict) -> list[Runner]: """Setup the runners for the pipeline.""" accelerators = args["accelerator"] if isinstance(args["accelerator"], list) else [args["accelerator"]] runners: list[Runner] = [] diff --git a/src/anomalib/pipelines/components/base/pipeline.py b/src/anomalib/pipelines/components/base/pipeline.py index 49328c62e0..850c64afcb 100644 --- a/src/anomalib/pipelines/components/base/pipeline.py +++ b/src/anomalib/pipelines/components/base/pipeline.py @@ -10,7 +10,7 @@ import yaml from jsonargparse import ArgumentParser, Namespace -from rich import print, traceback +from rich import traceback from anomalib.utils.logging import redirect_logs @@ -41,7 +41,7 @@ def _get_args(self, args: Namespace) -> dict: parser = self.get_parser() args = parser.parse_args() - with Path(args.config).open() as file: + with Path(args.config).open(encoding="utf-8") as file: return yaml.safe_load(file) @abstractmethod @@ -66,9 +66,9 @@ def run(self, args: Namespace | None = None) -> None: except Exception: # noqa: PERF203 catch all exception and allow try-catch in loop logger.exception("An error occurred when running the runner.") print( - f"There were some errors when running [red]{runner.generator.job_class.name}[/red] with" - f" [green]{runner.__class__.__name__}[/green]." - f" Please check [magenta]{log_file}[/magenta] for more details.", + f"There were some errors when running {runner.generator.job_class.name} with" + f" {runner.__class__.__name__}." + f" Please check {log_file} for more details.", ) @staticmethod diff --git a/src/anomalib/pipelines/components/runners/parallel.py b/src/anomalib/pipelines/components/runners/parallel.py index 03d1e6fde6..148980a6c2 100644 --- a/src/anomalib/pipelines/components/runners/parallel.py +++ b/src/anomalib/pipelines/components/runners/parallel.py @@ -8,9 +8,6 @@ from concurrent.futures import ProcessPoolExecutor from typing import TYPE_CHECKING -from rich import print -from rich.progress import Progress, TaskID - from anomalib.pipelines.components.base import JobGenerator, Runner from anomalib.pipelines.types import GATHERED_RESULTS, PREV_STAGE_RESULT @@ -51,16 +48,12 @@ def __init__(self, generator: JobGenerator, n_jobs: int) -> None: super().__init__(generator) self.n_jobs = n_jobs self.processes: dict[int, Future | None] = {} - self.progress = Progress() - self.task_id: TaskID self.results: list[dict] = [] self.failures = False def run(self, args: dict, prev_stage_results: PREV_STAGE_RESULT = None) -> GATHERED_RESULTS: """Run the job in parallel.""" - self.task_id = self.progress.add_task(self.generator.job_class.name, total=None) - self.progress.start() - self.processes = {i: None for i in range(self.n_jobs)} + self.processes = dict.fromkeys(range(self.n_jobs)) with ProcessPoolExecutor(max_workers=self.n_jobs, mp_context=multiprocessing.get_context("spawn")) as executor: for job in self.generator(args, prev_stage_results): @@ -71,12 +64,10 @@ def run(self, args: dict, prev_stage_results: PREV_STAGE_RESULT = None) -> GATHE self.processes[index] = executor.submit(job.run, task_id=index) self._await_cleanup_processes(blocking=True) - self.progress.update(self.task_id, completed=1, total=1) - self.progress.stop() gathered_result = self.generator.job_class.collect(self.results) self.generator.job_class.save(gathered_result) if self.failures: - msg = f"[bold red]There were some errors with job {self.generator.job_class.name}[/bold red]" + msg = f"There were some errors with job {self.generator.job_class.name}" print(msg) logger.error(msg) raise ParallelExecutionError(msg) @@ -97,4 +88,3 @@ def _await_cleanup_processes(self, blocking: bool = False) -> None: logger.exception("An exception occurred while getting the process result.") self.failures = True self.processes[index] = None - self.progress.update(self.task_id, advance=1) diff --git a/src/anomalib/pipelines/components/runners/serial.py b/src/anomalib/pipelines/components/runners/serial.py index a72f75a5c7..86cc3533ea 100644 --- a/src/anomalib/pipelines/components/runners/serial.py +++ b/src/anomalib/pipelines/components/runners/serial.py @@ -5,8 +5,7 @@ import logging -from rich import print -from rich.progress import track +from tqdm import tqdm from anomalib.pipelines.components.base import JobGenerator, Runner from anomalib.pipelines.types import GATHERED_RESULTS, PREV_STAGE_RESULT @@ -29,7 +28,7 @@ def run(self, args: dict, prev_stage_results: PREV_STAGE_RESULT = None) -> GATHE results = [] failures = False logger.info(f"Running job {self.generator.job_class.name}") - for job in track(self.generator(args, prev_stage_results), description=self.generator.job_class.name): + for job in tqdm(self.generator(args, prev_stage_results), desc=self.generator.job_class.name): try: results.append(job.run()) except Exception: # noqa: PERF203 @@ -38,7 +37,7 @@ def run(self, args: dict, prev_stage_results: PREV_STAGE_RESULT = None) -> GATHE gathered_result = self.generator.job_class.collect(results) self.generator.job_class.save(gathered_result) if failures: - msg = f"[bold red]There were some errors with job {self.generator.job_class.name}[/bold red]" + msg = f"There were some errors with job {self.generator.job_class.name}" print(msg) logger.error(msg) raise SerialExecutionError(msg) diff --git a/src/anomalib/utils/post_processing.py b/src/anomalib/utils/post_processing.py index 46456502c6..27c5f95073 100644 --- a/src/anomalib/utils/post_processing.py +++ b/src/anomalib/utils/post_processing.py @@ -35,7 +35,7 @@ def add_label( img_height, img_width, _ = image.shape font = cv2.FONT_HERSHEY_PLAIN - text = label_name if confidence is None else f"{label_name} ({confidence*100:.0f}%)" + text = label_name if confidence is None else f"{label_name} ({confidence * 100:.0f}%)" # get font sizing font_scale = min(img_width, img_height) * font_scale diff --git a/src/anomalib/utils/rich.py b/src/anomalib/utils/rich.py deleted file mode 100644 index fb61e78caa..0000000000 --- a/src/anomalib/utils/rich.py +++ /dev/null @@ -1,47 +0,0 @@ -"""Custom rich methods.""" - -# Copyright (C) 2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -from collections.abc import Generator, Iterable -from typing import TYPE_CHECKING, Any - -from rich import get_console -from rich.progress import track - -if TYPE_CHECKING: - from rich.live import Live - - -class CacheRichLiveState: - """Cache the live state of the console. - - Note: This is a bit dangerous as it accesses private attributes of the console. - Use this with caution. - """ - - def __init__(self) -> None: - self.console = get_console() - self.live: Live | None = None - - def __enter__(self) -> None: - """Save the live state of the console.""" - # Need to access private attribute to get the live state - with self.console._lock: # noqa: SLF001 - self.live = self.console._live # noqa: SLF001 - self.console.clear_live() - - def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: # noqa: ANN401 - """Restore the live state of the console.""" - if self.live: - self.console.clear_live() - self.console.set_live(self.live) - - -def safe_track(*args, **kwargs) -> Generator[Iterable, Any, Any]: - """Wraps ``rich.progress.track`` with a context manager to cache the live state. - - For parameters look at ``rich.progress.track``. - """ - with CacheRichLiveState(): - yield from track(*args, **kwargs) diff --git a/src/anomalib/utils/types/__init__.py b/src/anomalib/utils/types/__init__.py index a706626a40..a220571bc0 100644 --- a/src/anomalib/utils/types/__init__.py +++ b/src/anomalib/utils/types/__init__.py @@ -8,10 +8,10 @@ from lightning.pytorch import Callback from omegaconf import DictConfig, ListConfig -from anomalib.metrics.threshold import BaseThreshold +from anomalib.metrics.threshold import Threshold from anomalib.utils.normalization import NormalizationMethod NORMALIZATION: TypeAlias = NormalizationMethod | DictConfig | Callback | str THRESHOLD: TypeAlias = ( - BaseThreshold | tuple[BaseThreshold, BaseThreshold] | DictConfig | ListConfig | list[dict[str, str | float]] | str + Threshold | tuple[Threshold, Threshold] | DictConfig | ListConfig | list[dict[str, str | float]] | str ) diff --git a/src/anomalib/utils/visualization/metrics.py b/src/anomalib/utils/visualization/metrics.py index a7a1ebcb2b..48f426ea11 100644 --- a/src/anomalib/utils/visualization/metrics.py +++ b/src/anomalib/utils/visualization/metrics.py @@ -18,7 +18,8 @@ class MetricsVisualizer(BaseVisualizer): def __init__(self) -> None: super().__init__(VisualizationStep.STAGE_END) - def generate(self, **kwargs) -> Iterator[GeneratorResult]: + @staticmethod + def generate(**kwargs) -> Iterator[GeneratorResult]: """Generate metric plots and return them as an iterator.""" pl_module: AnomalyModule = kwargs.get("pl_module", None) if pl_module is None: diff --git a/tests/helpers/data.py b/tests/helpers/data.py index 51b683acab..0ad699fb2f 100644 --- a/tests/helpers/data.py +++ b/tests/helpers/data.py @@ -104,7 +104,8 @@ def generate_image( return image, mask - def save_image(self, filename: Path | str, image: np.ndarray, check_contrast: bool = False) -> None: + @staticmethod + def save_image(filename: Path | str, image: np.ndarray, check_contrast: bool = False) -> None: """Save image to filesystem. Args: @@ -503,7 +504,7 @@ def _generate_dummy_avenue_dataset( train_path = self.dataset_root / train_dir train_path.mkdir(exist_ok=True, parents=True) for clip_idx in range(self.num_train): - clip_path = train_path / f"{clip_idx+1:02}.avi" + clip_path = train_path / f"{clip_idx + 1:02}.avi" frames, _ = self.video_generator.generate_video(length=32, first_label=LabelName.NORMAL, p_state_switch=0) fourcc = cv2.VideoWriter_fourcc("F", "M", "P", "4") writer = cv2.VideoWriter(str(clip_path), fourcc, 30, self.frame_shape) @@ -517,8 +518,8 @@ def _generate_dummy_avenue_dataset( gt_path = self.dataset_root / ground_truth_dir / "testing_label_mask" for clip_idx in range(self.num_test): - clip_path = test_path / f"{clip_idx+1:02}.avi" - mask_path = gt_path / f"{clip_idx+1}_label" + clip_path = test_path / f"{clip_idx + 1:02}.avi" + mask_path = gt_path / f"{clip_idx + 1}_label" mask_path.mkdir(exist_ok=True, parents=True) frames, masks = self.video_generator.generate_video(length=32, p_state_switch=0.2) fourcc = cv2.VideoWriter_fourcc("F", "M", "P", "4") diff --git a/tests/integration/model/test_models.py b/tests/integration/model/test_models.py index 09a4749b84..e743cd52f2 100644 --- a/tests/integration/model/test_models.py +++ b/tests/integration/model/test_models.py @@ -159,8 +159,8 @@ def test_export( export_type=export_type, ) + @staticmethod def _get_objects( - self, model_name: str, dataset_path: Path, project_path: Path, @@ -177,9 +177,9 @@ def _get_objects( and engine """ # select task type - if model_name in ("rkde", "ai_vad"): + if model_name in {"rkde", "ai_vad"}: task_type = TaskType.DETECTION - elif model_name in ("ganomaly", "dfkde"): + elif model_name in {"ganomaly", "dfkde"}: task_type = TaskType.CLASSIFICATION else: task_type = TaskType.SEGMENTATION @@ -189,7 +189,7 @@ def _get_objects( # https://github.com/openvinotoolkit/anomalib/issues/1478 extra_args = {} - if model_name in ("rkde", "dfkde"): + if model_name in {"rkde", "dfkde"}: extra_args["n_pca_components"] = 2 if model_name == "ai_vad": pytest.skip("Revisit AI-VAD test") diff --git a/tests/integration/tools/test_gradio_entrypoint.py b/tests/integration/tools/test_gradio_entrypoint.py index ad34f0cfa1..25b0d7de5f 100644 --- a/tests/integration/tools/test_gradio_entrypoint.py +++ b/tests/integration/tools/test_gradio_entrypoint.py @@ -24,7 +24,8 @@ class TestGradioInferenceEntrypoint: """ @pytest.fixture() - def get_functions(self) -> tuple[Callable, Callable]: + @staticmethod + def get_functions() -> tuple[Callable, Callable]: """Get functions from Gradio_inference.py.""" if find_spec("gradio_inference") is not None: from tools.inference.gradio_inference import get_inferencer, get_parser @@ -33,8 +34,8 @@ def get_functions(self) -> tuple[Callable, Callable]: raise ImportError(msg) return get_parser, get_inferencer + @staticmethod def test_torch_inference( - self, get_functions: tuple[Callable, Callable], ckpt_path: Callable[[str], Path], ) -> None: @@ -57,8 +58,8 @@ def test_torch_inference( ) assert isinstance(inferencer(arguments.weights, arguments.metadata), TorchInferencer) + @staticmethod def test_openvino_inference( - self, get_functions: tuple[Callable, Callable], ckpt_path: Callable[[str], Path], ) -> None: diff --git a/tests/integration/tools/test_lightning_entrypoint.py b/tests/integration/tools/test_lightning_entrypoint.py index 51c93fbcb5..aa239e7c8d 100644 --- a/tests/integration/tools/test_lightning_entrypoint.py +++ b/tests/integration/tools/test_lightning_entrypoint.py @@ -17,7 +17,8 @@ class TestLightningInferenceEntrypoint: """This tests whether the entrypoints run without errors without quantitative measure of the outputs.""" @pytest.fixture() - def get_functions(self) -> tuple[Callable, Callable]: + @staticmethod + def get_functions() -> tuple[Callable, Callable]: """Get functions from lightning_inference.py.""" if find_spec("lightning_inference") is not None: from tools.inference.lightning_inference import get_parser, infer @@ -26,8 +27,8 @@ def get_functions(self) -> tuple[Callable, Callable]: raise ImportError(msg) return get_parser, infer + @staticmethod def test_lightning_inference( - self, get_functions: tuple[Callable, Callable], project_path: Path, get_dummy_inference_image: str, diff --git a/tests/integration/tools/test_openvino_entrypoint.py b/tests/integration/tools/test_openvino_entrypoint.py index dbbe214e62..5883a49957 100644 --- a/tests/integration/tools/test_openvino_entrypoint.py +++ b/tests/integration/tools/test_openvino_entrypoint.py @@ -20,7 +20,8 @@ class TestOpenVINOInferenceEntrypoint: """This tests whether the entrypoints run without errors without quantitative measure of the outputs.""" @pytest.fixture(scope="module") - def get_functions(self) -> tuple[Callable, Callable]: + @staticmethod + def get_functions() -> tuple[Callable, Callable]: """Get functions from openvino_inference.py.""" if find_spec("openvino_inference") is not None: from tools.inference.openvino_inference import get_parser, infer @@ -29,8 +30,8 @@ def get_functions(self) -> tuple[Callable, Callable]: raise ImportError(msg) return get_parser, infer + @staticmethod def test_openvino_inference( - self, get_functions: tuple[Callable, Callable], ckpt_path: Callable[[str], Path], get_dummy_inference_image: str, diff --git a/tests/integration/tools/test_torch_entrypoint.py b/tests/integration/tools/test_torch_entrypoint.py index 3980026122..7d81093cec 100644 --- a/tests/integration/tools/test_torch_entrypoint.py +++ b/tests/integration/tools/test_torch_entrypoint.py @@ -20,7 +20,8 @@ class TestTorchInferenceEntrypoint: """This tests whether the entrypoints run without errors without quantitative measure of the outputs.""" @pytest.fixture() - def get_functions(self) -> tuple[Callable, Callable]: + @staticmethod + def get_functions() -> tuple[Callable, Callable]: """Get functions from torch_inference.py.""" if find_spec("torch_inference") is not None: from tools.inference.torch_inference import get_parser, infer @@ -29,8 +30,8 @@ def get_functions(self) -> tuple[Callable, Callable]: raise ImportError(msg) return get_parser, infer + @staticmethod def test_torch_inference( - self, get_functions: tuple[Callable, Callable], project_path: Path, ckpt_path: Callable[[str], Path], diff --git a/tests/integration/tools/upgrade/test_config.py b/tests/integration/tools/upgrade/test_config.py index a7a8dc5569..548baad060 100644 --- a/tests/integration/tools/upgrade/test_config.py +++ b/tests/integration/tools/upgrade/test_config.py @@ -17,7 +17,8 @@ class TestConfigAdapter: and comparing it to the expected v1 config. """ - def test_config_adapter(self, project_path: Path) -> None: + @staticmethod + def test_config_adapter(project_path: Path) -> None: """Test the ConfigAdapter upgrade_all method. Test the ConfigAdapter class by upgrading and saving a v0 config to v1, diff --git a/tests/unit/callbacks/metrics_configuration_callback/test_metrics_configuration_callback.py b/tests/unit/callbacks/metrics_configuration_callback/test_metrics_configuration_callback.py index a57622cf3b..e8c52f13f5 100644 --- a/tests/unit/callbacks/metrics_configuration_callback/test_metrics_configuration_callback.py +++ b/tests/unit/callbacks/metrics_configuration_callback/test_metrics_configuration_callback.py @@ -29,16 +29,20 @@ def __init__(self) -> None: self.image_threshold = F1AdaptiveThreshold() self.pixel_threshold = F1AdaptiveThreshold() - def test_step(self, **_kwdargs) -> None: + @staticmethod + def test_step(**_kwdargs) -> None: return None - def validation_epoch_end(self, **_kwdargs) -> None: + @staticmethod + def validation_epoch_end(**_kwdargs) -> None: return None - def test_epoch_end(self, **_kwdargs) -> None: + @staticmethod + def test_epoch_end(**_kwdargs) -> None: return None - def configure_optimizers(self) -> None: + @staticmethod + def configure_optimizers() -> None: return None @property diff --git a/tests/unit/cli/test_help_formatter.py b/tests/unit/cli/test_help_formatter.py index 83278903fa..fb9713866d 100644 --- a/tests/unit/cli/test_help_formatter.py +++ b/tests/unit/cli/test_help_formatter.py @@ -86,7 +86,8 @@ class TestCustomHelpFormatter: """Test Custom Help Formatter.""" @pytest.fixture() - def mock_parser(self) -> ArgumentParser: + @staticmethod + def mock_parser() -> ArgumentParser: """Mock ArgumentParser.""" parser = ArgumentParser(formatter_class=CustomHelpFormatter) parser.formatter_class.subcommand = "fit" @@ -103,7 +104,8 @@ def mock_parser(self) -> ArgumentParser: ) return parser - def test_verbose_0(self, capfd: "pytest.CaptureFixture", mock_parser: ArgumentParser) -> None: + @staticmethod + def test_verbose_0(capfd: "pytest.CaptureFixture", mock_parser: ArgumentParser) -> None: """Test verbose level 0.""" argv = ["anomalib", "fit", "-h"] assert mock_parser.formatter_class == CustomHelpFormatter @@ -114,7 +116,8 @@ def test_verbose_0(self, capfd: "pytest.CaptureFixture", mock_parser: ArgumentPa assert "Quick-Start" in out assert "Arguments" not in out - def test_verbose_1(self, capfd: "pytest.CaptureFixture", mock_parser: ArgumentParser) -> None: + @staticmethod + def test_verbose_1(capfd: "pytest.CaptureFixture", mock_parser: ArgumentParser) -> None: """Test verbose level 1.""" argv = ["anomalib", "fit", "-h", "-v"] assert mock_parser.formatter_class == CustomHelpFormatter @@ -125,7 +128,8 @@ def test_verbose_1(self, capfd: "pytest.CaptureFixture", mock_parser: ArgumentPa assert "Quick-Start" in out assert "Arguments" in out - def test_verbose_2(self, capfd: "pytest.CaptureFixture", mock_parser: ArgumentParser) -> None: + @staticmethod + def test_verbose_2(capfd: "pytest.CaptureFixture", mock_parser: ArgumentParser) -> None: """Test verbose level 2.""" argv = ["anomalib", "fit", "-h", "-vv"] assert mock_parser.formatter_class == CustomHelpFormatter diff --git a/tests/unit/cli/test_installation.py b/tests/unit/cli/test_installation.py index ff2f0b5184..6a34017639 100644 --- a/tests/unit/cli/test_installation.py +++ b/tests/unit/cli/test_installation.py @@ -26,7 +26,7 @@ def requirements_file() -> Path: """Create a temporary requirements file with some example requirements.""" requirements = ["numpy==1.19.5", "opencv-python-headless>=4.5.1.48"] - with tempfile.NamedTemporaryFile(mode="w", delete=False) as f: + with tempfile.NamedTemporaryFile(mode="w", delete=False, encoding="utf-8") as f: f.write("\n".join(requirements)) return Path(f.name) diff --git a/tests/unit/data/base/base.py b/tests/unit/data/base/base.py index 86f7dd59e4..9e44c11fb4 100644 --- a/tests/unit/data/base/base.py +++ b/tests/unit/data/base/base.py @@ -17,14 +17,16 @@ class _TestAnomalibDataModule: test class is not meant to be used directly. """ + @staticmethod @pytest.mark.parametrize("subset", ["train", "val", "test"]) - def test_datamodule_has_dataloader_attributes(self, datamodule: AnomalibDataModule, subset: str) -> None: + def test_datamodule_has_dataloader_attributes(datamodule: AnomalibDataModule, subset: str) -> None: """Test that the datamodule has the correct dataloader attributes.""" dataloader = f"{subset}_dataloader" assert hasattr(datamodule, dataloader) assert isinstance(getattr(datamodule, dataloader)(), DataLoader) - def test_datamodule_from_config(self, fxt_data_config_path: str) -> None: + @staticmethod + def test_datamodule_from_config(fxt_data_config_path: str) -> None: # 1. Wrong file path: with pytest.raises(FileNotFoundError): AnomalibDataModule.from_config(config_path="wrong_configs.yaml") diff --git a/tests/unit/data/base/depth.py b/tests/unit/data/base/depth.py index 4747314591..3e1a6bde9f 100644 --- a/tests/unit/data/base/depth.py +++ b/tests/unit/data/base/depth.py @@ -11,8 +11,9 @@ class _TestAnomalibDepthDatamodule(_TestAnomalibDataModule): + @staticmethod @pytest.mark.parametrize("subset", ["train", "val", "test"]) - def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibDataModule, subset: str) -> None: + def test_get_item_returns_correct_keys_and_shapes(subset: str, datamodule: AnomalibDataModule) -> None: """Test that the datamodule __getitem__ returns the correct keys and shapes.""" # Get the dataloader. dataloader = getattr(datamodule, f"{subset}_dataloader")() @@ -23,7 +24,7 @@ def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibData # Check that the batch has the correct keys. expected_keys = {"image_path", "depth_path", "label", "image", "depth_image"} - if dataloader.dataset.task in ("detection", "segmentation"): + if dataloader.dataset.task in {"detection", "segmentation"}: expected_keys |= {"mask_path", "mask"} if dataloader.dataset.task == "detection": @@ -38,5 +39,5 @@ def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibData assert batch["depth_image"].shape == (4, 3, 256, 256) assert batch["label"].shape == (4,) - if dataloader.dataset.task in ("detection", "segmentation"): + if dataloader.dataset.task in {"detection", "segmentation"}: assert batch["mask"].shape == (4, 256, 256) diff --git a/tests/unit/data/base/image.py b/tests/unit/data/base/image.py index 261ee19739..d5b1a59f8c 100644 --- a/tests/unit/data/base/image.py +++ b/tests/unit/data/base/image.py @@ -14,8 +14,9 @@ class _TestAnomalibImageDatamodule(_TestAnomalibDataModule): # 1. Test if the image datasets are correctly created. + @staticmethod @pytest.mark.parametrize("subset", ["train", "val", "test"]) - def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibDataModule, subset: str) -> None: + def test_get_item_returns_correct_keys_and_shapes(subset: str, datamodule: AnomalibDataModule) -> None: """Test that the datamodule __getitem__ returns image, mask, label and boxes.""" # Get the dataloader. dataloader = getattr(datamodule, f"{subset}_dataloader")() @@ -27,10 +28,11 @@ def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibData assert batch["image"].shape == (4, 3, 256, 256) assert batch["label"].shape == (4,) - if dataloader.dataset.task in ("detection", "segmentation"): + if dataloader.dataset.task in {"detection", "segmentation"}: assert batch["mask"].shape == (4, 256, 256) - def test_non_overlapping_splits(self, datamodule: AnomalibDataModule) -> None: + @staticmethod + def test_non_overlapping_splits(datamodule: AnomalibDataModule) -> None: """This test ensures that all splits are non-overlapping when split mode == from_test.""" if datamodule.val_split_mode == "from_test": assert ( @@ -50,7 +52,8 @@ def test_non_overlapping_splits(self, datamodule: AnomalibDataModule) -> None: == 0 ), "Found train and test split contamination" - def test_equal_splits(self, datamodule: AnomalibDataModule) -> None: + @staticmethod + def test_equal_splits(datamodule: AnomalibDataModule) -> None: """This test ensures that val and test split are equal when split mode == same_as_test.""" if datamodule.val_split_mode == "same_as_test": assert np.array_equal( diff --git a/tests/unit/data/base/video.py b/tests/unit/data/base/video.py index d42768bd6c..ef14fc50db 100644 --- a/tests/unit/data/base/video.py +++ b/tests/unit/data/base/video.py @@ -12,8 +12,9 @@ class _TestAnomalibVideoDatamodule(_TestAnomalibDataModule): + @staticmethod @pytest.mark.parametrize("subset", ["train", "val", "test"]) - def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibDataModule, subset: str) -> None: + def test_get_item_returns_correct_keys_and_shapes(datamodule: AnomalibDataModule, subset: str) -> None: """Test that the datamodule __getitem__ returns image, mask, label and boxes.""" # Get the dataloader. dataloader = getattr(datamodule, f"{subset}_dataloader")() @@ -42,13 +43,14 @@ def test_get_item_returns_correct_keys_and_shapes(self, datamodule: AnomalibData # We don't know the shape of the original image, so we only check that it is a list of 4 images. assert batch["original_image"].shape[0] == 4 - if subset in ("val", "test"): + if subset in {"val", "test"}: assert len(batch["label"]) == 4 assert batch["mask"].shape == (4, 256, 256) assert batch["mask"].shape == (4, 256, 256) + @staticmethod @pytest.mark.parametrize("subset", ["train", "val", "test"]) - def test_item_dtype(self, datamodule: AnomalibDataModule, subset: str) -> None: + def test_item_dtype(subset: str, datamodule: AnomalibDataModule) -> None: """Test that the input tensor is of float type and scaled between 0-1.""" # Get the dataloader. dataloader = getattr(datamodule, f"{subset}_dataloader")() @@ -60,8 +62,9 @@ def test_item_dtype(self, datamodule: AnomalibDataModule, subset: str) -> None: assert clip.min() >= 0 assert clip.max() <= 1 + @staticmethod @pytest.mark.parametrize("clip_length_in_frames", [1]) - def test_single_frame_squeezed(self, datamodule: AnomalibDataModule) -> None: + def test_single_frame_squeezed(datamodule: AnomalibDataModule) -> None: """Test that the temporal dimension is squeezed when the clip lenght is 1.""" # Get the dataloader. dataloader = datamodule.train_dataloader() diff --git a/tests/unit/data/image/test_btech.py b/tests/unit/data/image/test_btech.py index 91abf35cc0..02ec81b889 100644 --- a/tests/unit/data/image/test_btech.py +++ b/tests/unit/data/image/test_btech.py @@ -16,7 +16,8 @@ class TestBTech(_TestAnomalibImageDatamodule): """MVTec Datamodule Unit Tests.""" @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> BTech: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> BTech: """Create and return a BTech datamodule.""" _datamodule = BTech( root=dataset_path / "btech", @@ -33,6 +34,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> BTech: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/btech.yaml" diff --git a/tests/unit/data/image/test_folder.py b/tests/unit/data/image/test_folder.py index 48cd7ff0b3..61cb2fd0c3 100644 --- a/tests/unit/data/image/test_folder.py +++ b/tests/unit/data/image/test_folder.py @@ -19,7 +19,8 @@ class TestFolder(_TestAnomalibImageDatamodule): """ @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> Folder: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> Folder: """Create and return a Folder datamodule.""" # Make sure to use a mask directory for segmentation. Folder datamodule # expects a relative directory to the root. @@ -43,6 +44,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> Folder: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/folder.yaml" diff --git a/tests/unit/data/image/test_folder_3d.py b/tests/unit/data/image/test_folder_3d.py index 1fb4a7edda..c3d1dd6991 100644 --- a/tests/unit/data/image/test_folder_3d.py +++ b/tests/unit/data/image/test_folder_3d.py @@ -16,7 +16,8 @@ class TestFolder3D(_TestAnomalibDepthDatamodule): """Folder3D Datamodule Unit Tests.""" @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> Folder3D: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> Folder3D: """Create and return a Folder 3D datamodule.""" _datamodule = Folder3D( name="dummy", @@ -40,11 +41,13 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> Folder3D: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/folder_3d.yaml" - def test_datamodule_from_config(self, fxt_data_config_path: str) -> None: + @staticmethod + def test_datamodule_from_config(fxt_data_config_path: str) -> None: """Test method to create a datamodule from a configuration file. Args: diff --git a/tests/unit/data/image/test_kolektor.py b/tests/unit/data/image/test_kolektor.py index 4ba9e5ccd2..f2b86253d6 100644 --- a/tests/unit/data/image/test_kolektor.py +++ b/tests/unit/data/image/test_kolektor.py @@ -16,7 +16,8 @@ class TestKolektor(_TestAnomalibImageDatamodule): """Kolektor Datamodule Unit Tests.""" @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> Kolektor: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> Kolektor: """Create and return a BTech datamodule.""" _datamodule = Kolektor( root=dataset_path / "kolektor", @@ -32,6 +33,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> Kolektor: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/kolektor.yaml" diff --git a/tests/unit/data/image/test_mvtec.py b/tests/unit/data/image/test_mvtec.py index 2cfe8ed9cf..d4c6852563 100644 --- a/tests/unit/data/image/test_mvtec.py +++ b/tests/unit/data/image/test_mvtec.py @@ -16,7 +16,8 @@ class TestMVTec(_TestAnomalibImageDatamodule): """MVTec Datamodule Unit Tests.""" @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> MVTec: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> MVTec: """Create and return a MVTec datamodule.""" _datamodule = MVTec( root=dataset_path / "mvtec", @@ -31,6 +32,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> MVTec: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/mvtec.yaml" diff --git a/tests/unit/data/image/test_mvtec_3d.py b/tests/unit/data/image/test_mvtec_3d.py index 1e5c0ccb01..1e50c61795 100644 --- a/tests/unit/data/image/test_mvtec_3d.py +++ b/tests/unit/data/image/test_mvtec_3d.py @@ -16,7 +16,8 @@ class TestMVTec3D(_TestAnomalibDepthDatamodule): """MVTec Datamodule Unit Tests.""" @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> MVTec3D: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> MVTec3D: """Create and return a Folder 3D datamodule.""" _datamodule = MVTec3D( root=dataset_path / "mvtec_3d", @@ -33,6 +34,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> MVTec3D: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/mvtec_3d.yaml" diff --git a/tests/unit/data/image/test_visa.py b/tests/unit/data/image/test_visa.py index 5028aa066d..1bb251b00c 100644 --- a/tests/unit/data/image/test_visa.py +++ b/tests/unit/data/image/test_visa.py @@ -16,7 +16,8 @@ class TestVisa(_TestAnomalibImageDatamodule): """Visa Datamodule Unit Tests.""" @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType) -> Visa: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType) -> Visa: """Create and return a Avenue datamodule.""" _datamodule = Visa( root=dataset_path, @@ -33,6 +34,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType) -> Visa: return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/visa.yaml" diff --git a/tests/unit/data/test_inference.py b/tests/unit/data/test_inference.py index 1152457592..0ac049db18 100644 --- a/tests/unit/data/test_inference.py +++ b/tests/unit/data/test_inference.py @@ -20,7 +20,8 @@ def predict_dataset_path(dataset_path: Path) -> Path: class TestPredictDataset: """Test PredictDataset class.""" - def test_inference_dataset(self, predict_dataset_path: Path) -> None: + @staticmethod + def test_inference_dataset(predict_dataset_path: Path) -> None: """Test the PredictDataset class.""" # Use the bad images from the dummy MVTec AD dataset. dataset = PredictDataset(path=predict_dataset_path, image_size=(256, 256)) @@ -36,7 +37,8 @@ def test_inference_dataset(self, predict_dataset_path: Path) -> None: assert sample["image"].shape == (3, 256, 256) assert Path(sample["image_path"]).suffix == ".png" - def test_transforms_applied(self, predict_dataset_path: Path) -> None: + @staticmethod + def test_transforms_applied(predict_dataset_path: Path) -> None: """Test whether the transforms are applied to the images.""" # Create a transform that resizes the image to 512x512. transform = v2.Compose([v2.Resize(512)]) diff --git a/tests/unit/data/utils/test_image.py b/tests/unit/data/utils/test_image.py index b18b0107b1..00cff13edd 100644 --- a/tests/unit/data/utils/test_image.py +++ b/tests/unit/data/utils/test_image.py @@ -13,30 +13,35 @@ class TestGetImageFilenames: """Tests for ``get_image_filenames`` function.""" - def test_existing_image_file(self, dataset_path: Path) -> None: + @staticmethod + def test_existing_image_file(dataset_path: Path) -> None: """Test ``get_image_filenames`` returns the correct path for an existing image file.""" image_path = dataset_path / "mvtec/dummy/train/good/000.png" image_filenames = get_image_filenames(image_path) assert image_filenames == [image_path.resolve()] - def test_existing_image_directory(self, dataset_path: Path) -> None: + @staticmethod + def test_existing_image_directory(dataset_path: Path) -> None: """Test ``get_image_filenames`` returns the correct image filenames from an existing directory.""" directory_path = dataset_path / "mvtec/dummy/train/good" image_filenames = get_image_filenames(directory_path) expected_filenames = [(directory_path / f"{i:03d}.png").resolve() for i in range(5)] assert set(image_filenames) == set(expected_filenames) - def test_nonexistent_image_file(self) -> None: + @staticmethod + def test_nonexistent_image_file() -> None: """Test ``get_image_filenames`` raises FileNotFoundError for a nonexistent image file.""" with pytest.raises(FileNotFoundError): get_image_filenames("009.tiff") - def test_nonexistent_image_directory(self) -> None: + @staticmethod + def test_nonexistent_image_directory() -> None: """Test ``get_image_filenames`` raises FileNotFoundError for a nonexistent image directory.""" with pytest.raises(FileNotFoundError): get_image_filenames("nonexistent_directory") - def test_non_image_file(self, dataset_path: Path) -> None: + @staticmethod + def test_non_image_file(dataset_path: Path) -> None: """Test ``get_image_filenames`` raises ValueError for a non-image file.""" filename = dataset_path / "avenue/ground_truth_demo/testing_label_mask/1_label.mat" with pytest.raises(ValueError, match=r"``filename`` is not an image file*"): diff --git a/tests/unit/data/utils/test_path.py b/tests/unit/data/utils/test_path.py index 2230157079..09f88496ad 100644 --- a/tests/unit/data/utils/test_path.py +++ b/tests/unit/data/utils/test_path.py @@ -14,44 +14,52 @@ class TestValidatePath: """Tests for ``validate_path`` function.""" - def test_invalid_path_type(self) -> None: + @staticmethod + def test_invalid_path_type() -> None: """Test ``validate_path`` raises TypeError for an invalid path type.""" with pytest.raises(TypeError, match=r"Expected str, bytes or os.PathLike object, not*"): validate_path(123) - def test_is_path_too_long(self) -> None: + @staticmethod + def test_is_path_too_long() -> None: """Test ``validate_path`` raises ValueError for a path that is too long.""" with pytest.raises(ValueError, match=r"Path is too long: *"): validate_path("/" * 1000) - def test_contains_non_printable_characters(self) -> None: + @staticmethod + def test_contains_non_printable_characters() -> None: """Test ``validate_path`` raises ValueError for a path that contains non-printable characters.""" with pytest.raises(ValueError, match=r"Path contains non-printable characters: *"): validate_path("/\x00") - def test_existing_file_within_base_dir(self, dataset_path: Path) -> None: + @staticmethod + def test_existing_file_within_base_dir(dataset_path: Path) -> None: """Test ``validate_path`` returns the validated path for an existing file within the base directory.""" file_path = dataset_path / "mvtec/dummy/train/good/000.png" validated_path = validate_path(file_path, base_dir=dataset_path) assert validated_path == file_path.resolve() - def test_existing_directory_within_base_dir(self, dataset_path: Path) -> None: + @staticmethod + def test_existing_directory_within_base_dir(dataset_path: Path) -> None: """Test ``validate_path`` returns the validated path for an existing directory within the base directory.""" directory_path = dataset_path / "mvtec/dummy/train/good" validated_path = validate_path(directory_path, base_dir=dataset_path) assert validated_path == directory_path.resolve() - def test_nonexistent_file(self, dataset_path: Path) -> None: + @staticmethod + def test_nonexistent_file(dataset_path: Path) -> None: """Test ``validate_path`` raises FileNotFoundError for a nonexistent file.""" with pytest.raises(FileNotFoundError): validate_path(dataset_path / "nonexistent/file.png") - def test_nonexistent_directory(self, dataset_path: Path) -> None: + @staticmethod + def test_nonexistent_directory(dataset_path: Path) -> None: """Test ``validate_path`` raises FileNotFoundError for a nonexistent directory.""" with pytest.raises(FileNotFoundError): validate_path(dataset_path / "nonexistent/directory") - def test_no_read_permission(self) -> None: + @staticmethod + def test_no_read_permission() -> None: """Test ``validate_path`` raises PermissionError for a file without read permission.""" with TemporaryDirectory() as tmp_dir: file_path = Path(tmp_dir) / "test.txt" @@ -61,9 +69,16 @@ def test_no_read_permission(self) -> None: with pytest.raises(PermissionError, match=r"Read or execute permissions denied for the path:*"): validate_path(file_path, base_dir=Path(tmp_dir)) - def test_no_read_execute_permission(self) -> None: + @staticmethod + def test_no_read_execute_permission() -> None: """Test ``validate_path`` raises PermissionError for a directory without read and execute permission.""" with TemporaryDirectory() as tmp_dir: Path(tmp_dir).chmod(0o222) # Remove read and execute permission with pytest.raises(PermissionError, match=r"Read or execute permissions denied for the path:*"): validate_path(tmp_dir, base_dir=Path(tmp_dir)) + + @staticmethod + def test_file_wrongsuffix() -> None: + """Test ``validate_path`` raises ValueError for a file with wrong suffix.""" + with pytest.raises(ValueError, match="Path extension is not accepted."): + validate_path("file.png", should_exist=False, extensions=(".json", ".txt")) diff --git a/tests/unit/data/utils/test_synthetic.py b/tests/unit/data/utils/test_synthetic.py index 599cf5cc68..4d6ab0a3c7 100644 --- a/tests/unit/data/utils/test_synthetic.py +++ b/tests/unit/data/utils/test_synthetic.py @@ -47,24 +47,28 @@ def synthetic_dataset_from_samples(folder_dataset: FolderDataset) -> SyntheticAn class TestSyntheticAnomalyDataset: """Test SyntheticAnomalyDataset class.""" - def test_create_synthetic_dataset(self, synthetic_dataset: SyntheticAnomalyDataset) -> None: + @staticmethod + def test_create_synthetic_dataset(synthetic_dataset: SyntheticAnomalyDataset) -> None: """Tests if the image and mask files listed in the synthetic dataset exist.""" assert all(Path(path).exists() for path in synthetic_dataset.samples.image_path) assert all(Path(path).exists() for path in synthetic_dataset.samples.mask_path) - def test_create_from_dataset(self, synthetic_dataset_from_samples: SyntheticAnomalyDataset) -> None: + @staticmethod + def test_create_from_dataset(synthetic_dataset_from_samples: SyntheticAnomalyDataset) -> None: """Test if the synthetic dataset is instantiated correctly from samples df.""" assert all(Path(path).exists() for path in synthetic_dataset_from_samples.samples.image_path) assert all(Path(path).exists() for path in synthetic_dataset_from_samples.samples.mask_path) - def test_copy(self, synthetic_dataset: SyntheticAnomalyDataset) -> None: + @staticmethod + def test_copy(synthetic_dataset: SyntheticAnomalyDataset) -> None: """Tests if the dataset is copied correctly, and files still exist after original instance is deleted.""" synthetic_dataset_cp = copy(synthetic_dataset) assert all(synthetic_dataset.samples == synthetic_dataset_cp.samples) del synthetic_dataset assert synthetic_dataset_cp.root.exists() - def test_cleanup(self, folder_dataset: FolderDataset) -> None: + @staticmethod + def test_cleanup(folder_dataset: FolderDataset) -> None: """Tests if the temporary directory is cleaned up when the instance is deleted.""" synthetic_dataset = SyntheticAnomalyDataset.from_dataset(folder_dataset) root = synthetic_dataset.root diff --git a/tests/unit/data/utils/test_tiler.py b/tests/unit/data/utils/test_tiler.py index 51fbbd6562..5ed3fc8427 100644 --- a/tests/unit/data/utils/test_tiler.py +++ b/tests/unit/data/utils/test_tiler.py @@ -1,5 +1,8 @@ """Image Tiling Tests.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import pytest import torch from omegaconf import ListConfig diff --git a/tests/unit/data/video/test_avenue.py b/tests/unit/data/video/test_avenue.py index d5dab87946..6c098b5026 100644 --- a/tests/unit/data/video/test_avenue.py +++ b/tests/unit/data/video/test_avenue.py @@ -16,12 +16,14 @@ class TestAvenue(_TestAnomalibVideoDatamodule): """Avenue Datamodule Unit Tests.""" @pytest.fixture() - def clip_length_in_frames(self) -> int: + @staticmethod + def clip_length_in_frames() -> int: """Return the number of frames in each clip.""" return 2 @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType, clip_length_in_frames: int) -> Avenue: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType, clip_length_in_frames: int) -> Avenue: """Create and return a Avenue datamodule.""" _datamodule = Avenue( root=dataset_path / "avenue", @@ -40,6 +42,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType, clip_length_in_fra return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/avenue.yaml" diff --git a/tests/unit/data/video/test_shanghaitech.py b/tests/unit/data/video/test_shanghaitech.py index ec7a6cbc9f..1ebbc2c537 100644 --- a/tests/unit/data/video/test_shanghaitech.py +++ b/tests/unit/data/video/test_shanghaitech.py @@ -16,12 +16,14 @@ class TestShanghaiTech(_TestAnomalibVideoDatamodule): """ShanghaiTech Datamodule Unit Tests.""" @pytest.fixture() - def clip_length_in_frames(self) -> int: + @staticmethod + def clip_length_in_frames() -> int: """Return the number of frames in each clip.""" return 2 @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType, clip_length_in_frames: int) -> ShanghaiTech: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType, clip_length_in_frames: int) -> ShanghaiTech: """Create and return a Shanghai datamodule.""" _datamodule = ShanghaiTech( root=dataset_path / "shanghaitech", @@ -40,6 +42,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType, clip_length_in_fra return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" - return "configs/data/shanghaitec.yaml" + return "configs/data/shanghaitech.yaml" diff --git a/tests/unit/data/video/test_ucsdped.py b/tests/unit/data/video/test_ucsdped.py index 55857addc2..64411bfc84 100644 --- a/tests/unit/data/video/test_ucsdped.py +++ b/tests/unit/data/video/test_ucsdped.py @@ -16,12 +16,14 @@ class TestUCSDped(_TestAnomalibVideoDatamodule): """UCSDped Datamodule Unit Tests.""" @pytest.fixture() - def clip_length_in_frames(self) -> int: + @staticmethod + def clip_length_in_frames() -> int: """Return the number of frames in each clip.""" return 2 @pytest.fixture() - def datamodule(self, dataset_path: Path, task_type: TaskType, clip_length_in_frames: int) -> UCSDped: + @staticmethod + def datamodule(dataset_path: Path, task_type: TaskType, clip_length_in_frames: int) -> UCSDped: """Create and return a UCSDped datamodule.""" _datamodule = UCSDped( root=dataset_path / "ucsdped", @@ -39,6 +41,7 @@ def datamodule(self, dataset_path: Path, task_type: TaskType, clip_length_in_fra return _datamodule @pytest.fixture() - def fxt_data_config_path(self) -> str: + @staticmethod + def fxt_data_config_path() -> str: """Return the path to the test data config.""" return "configs/data/ucsd_ped.yaml" diff --git a/tests/unit/engine/test_engine.py b/tests/unit/engine/test_engine.py index 5f7e0fd2a2..412268cfd5 100644 --- a/tests/unit/engine/test_engine.py +++ b/tests/unit/engine/test_engine.py @@ -18,7 +18,8 @@ class TestEngine: """Test Engine.""" @pytest.fixture() - def fxt_full_config_path(self, tmp_path: Path) -> Path: + @staticmethod + def fxt_full_config_path(tmp_path: Path) -> Path: """Fixture full configuration examples.""" config_str = """ seed_everything: true @@ -118,7 +119,8 @@ def fxt_full_config_path(self, tmp_path: Path) -> Path: yaml.dump(config_dict, file) return config_file - def test_from_config(self, fxt_full_config_path: Path) -> None: + @staticmethod + def test_from_config(fxt_full_config_path: Path) -> None: """Test Engine.from_config.""" with pytest.raises(FileNotFoundError): Engine.from_config(config_path="wrong_configs.yaml") diff --git a/tests/unit/engine/test_setup_transform.py b/tests/unit/engine/test_setup_transform.py index 47255aba98..f1a7ce9ee7 100644 --- a/tests/unit/engine/test_setup_transform.py +++ b/tests/unit/engine/test_setup_transform.py @@ -41,17 +41,20 @@ def __init__(self) -> None: super().__init__() self.model = torch.nn.Linear(10, 10) - def configure_transforms(self, image_size: tuple[int, int] | None = None) -> Transform: + @staticmethod + def configure_transforms(image_size: tuple[int, int] | None = None) -> Transform: """Return a Resize transform.""" if image_size is None: image_size = (256, 256) return Resize(image_size) - def trainer_arguments(self) -> dict: + @staticmethod + def trainer_arguments() -> dict: """Return an empty dictionary.""" return {} - def learning_type(self) -> LearningType: + @staticmethod + def learning_type() -> LearningType: """Return the learning type.""" return LearningType.ZERO_SHOT @@ -107,7 +110,8 @@ class TestSetupTransform: """Tests for the `_setup_transform` method of the Anomalib Engine.""" # test update single dataloader - def test_single_dataloader_default_transform(self) -> None: + @staticmethod + def test_single_dataloader_default_transform() -> None: """Tests if the default model transform is used when no transform is passed to the dataloader.""" dataset = DummyDataset() dataloader = DataLoader(dataset, batch_size=1) @@ -119,7 +123,8 @@ def test_single_dataloader_default_transform(self) -> None: assert dataset.transform is not None # test update multiple dataloaders - def test_multiple_dataloaders_default_transform(self) -> None: + @staticmethod + def test_multiple_dataloaders_default_transform() -> None: """Tests if the default model transform is used when no transform is passed to the dataloader.""" dataset = DummyDataset() dataloader = DataLoader(dataset, batch_size=1) @@ -130,7 +135,8 @@ def test_multiple_dataloaders_default_transform(self) -> None: # after the setup_transform is called, the dataset should have the default transform from the model assert dataset.transform is not None - def test_single_dataloader_custom_transform(self) -> None: + @staticmethod + def test_single_dataloader_custom_transform() -> None: """Tests if the user-specified transform is used when passed to the dataloader.""" transform = Transform() dataset = DummyDataset(transform=transform) @@ -143,7 +149,8 @@ def test_single_dataloader_custom_transform(self) -> None: assert model.transform == transform # test if the user-specified transform is used when passed to the datamodule - def test_custom_transform(self) -> None: + @staticmethod + def test_custom_transform() -> None: """Tests if the user-specified transform is used when passed to the datamodule.""" transform = Transform() datamodule = DummyDataModule(transform=transform) @@ -157,7 +164,8 @@ def test_custom_transform(self) -> None: assert model.transform == transform # test if the user-specified transform is used when passed to the datamodule - def test_custom_train_transform(self) -> None: + @staticmethod + def test_custom_train_transform() -> None: """Tests if the user-specified transform is used when passed to the datamodule as train_transform.""" model = DummyModel() transform = Transform() @@ -173,7 +181,8 @@ def test_custom_train_transform(self) -> None: assert model.transform is not None # test if the user-specified transform is used when passed to the datamodule - def test_custom_eval_transform(self) -> None: + @staticmethod + def test_custom_eval_transform() -> None: """Tests if the user-specified transform is used when passed to the datamodule as eval_transform.""" model = DummyModel() transform = Transform() @@ -188,7 +197,8 @@ def test_custom_eval_transform(self) -> None: assert model.transform == transform # test update datamodule - def test_datamodule_default_transform(self) -> None: + @staticmethod + def test_datamodule_default_transform() -> None: """Tests if the default model transform is used when no transform is passed to the datamodule.""" datamodule = DummyDataModule() model = DummyModel() @@ -197,7 +207,8 @@ def test_datamodule_default_transform(self) -> None: assert isinstance(model.transform, Transform) # test if image size is taken from datamodule - def test_datamodule_image_size(self) -> None: + @staticmethod + def test_datamodule_image_size() -> None: """Tests if the image size that is passed to the datamodule overwrites the default size from the model.""" datamodule = DummyDataModule(image_size=(100, 100)) model = DummyModel() @@ -206,14 +217,16 @@ def test_datamodule_image_size(self) -> None: assert isinstance(model.transform, Resize) assert model.transform.size == [100, 100] - def test_transform_from_checkpoint(self, checkpoint_path: Path) -> None: + @staticmethod + def test_transform_from_checkpoint(checkpoint_path: Path) -> None: """Tests if the transform from the checkpoint is used.""" model = DummyModel() Engine._setup_transform(model, ckpt_path=checkpoint_path) # noqa: SLF001 assert isinstance(model.transform, Resize) assert model.transform.size == [50, 50] - def test_precendence_datamodule(self, checkpoint_path: Path) -> None: + @staticmethod + def test_precendence_datamodule(checkpoint_path: Path) -> None: """Tests if transform from the datamodule goes first if both checkpoint and datamodule are provided.""" transform = Transform() datamodule = DummyDataModule(transform=transform) @@ -221,7 +234,8 @@ def test_precendence_datamodule(self, checkpoint_path: Path) -> None: Engine._setup_transform(model, ckpt_path=checkpoint_path, datamodule=datamodule) # noqa: SLF001 assert model.transform == transform - def test_transform_already_assigned(self) -> None: + @staticmethod + def test_transform_already_assigned() -> None: """Tests if the transform from the model is used when the model already has a transform assigned.""" transform = Transform() model = DummyModel() diff --git a/tests/unit/metrics/aupro/aupro_reference.py b/tests/unit/metrics/aupro/aupro_reference.py index df217c817d..f1d1d085e9 100644 --- a/tests/unit/metrics/aupro/aupro_reference.py +++ b/tests/unit/metrics/aupro/aupro_reference.py @@ -1,5 +1,3 @@ -# REMARK: CODE WAS TAKEN FROM https://github.com/eliahuhorwitz/3D-ADS/blob/main/utils/au_pro_util.py - """Utils for testing AUPRO metric. Code based on the official MVTec 3D-AD evaluation code found at @@ -9,6 +7,11 @@ The PRO curve can also be integrated up to a constant integration limit. """ +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# Original code was taken from https://github.com/eliahuhorwitz/3D-ADS/blob/main/utils/au_pro_util.py + import logging from bisect import bisect diff --git a/tests/unit/metrics/pimo/__init__.py b/tests/unit/metrics/pimo/__init__.py new file mode 100644 index 0000000000..555d67a102 --- /dev/null +++ b/tests/unit/metrics/pimo/__init__.py @@ -0,0 +1,8 @@ +"""Per-Image Metrics Tests.""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 diff --git a/tests/unit/metrics/pimo/test_binary_classification_curve.py b/tests/unit/metrics/pimo/test_binary_classification_curve.py new file mode 100644 index 0000000000..5459d08a14 --- /dev/null +++ b/tests/unit/metrics/pimo/test_binary_classification_curve.py @@ -0,0 +1,423 @@ +"""Tests for per-image binary classification curves using numpy version.""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# ruff: noqa: SLF001, PT011 + +import pytest +import torch + +from anomalib.metrics.pimo.binary_classification_curve import ( + _binary_classification_curve, + binary_classification_curve, + per_image_fpr, + per_image_tpr, + threshold_and_binary_classification_curve, +) + + +def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: + """Generate test cases.""" + pred = torch.arange(1, 5, dtype=torch.float32) + thresholds = torch.arange(1, 5, dtype=torch.float32) + + gt_norm = torch.zeros(4).to(bool) + gt_anom = torch.concatenate([torch.zeros(2), torch.ones(2)]).to(bool) + + # in the case where thresholds are all unique values in the predictions + expected_norm = torch.stack( + [ + torch.tensor([[0, 4], [0, 0]]), + torch.tensor([[1, 3], [0, 0]]), + torch.tensor([[2, 2], [0, 0]]), + torch.tensor([[3, 1], [0, 0]]), + ], + axis=0, + ).to(int) + expected_anom = torch.stack( + [ + torch.tensor([[0, 2], [0, 2]]), + torch.tensor([[1, 1], [0, 2]]), + torch.tensor([[2, 0], [0, 2]]), + torch.tensor([[2, 0], [1, 1]]), + ], + axis=0, + ).to(int) + + expected_tprs_norm = torch.tensor([torch.nan, torch.nan, torch.nan, torch.nan]) + expected_tprs_anom = torch.tensor([1.0, 1.0, 1.0, 0.5]) + expected_tprs = torch.stack([expected_tprs_anom, expected_tprs_norm], axis=0).to(torch.float64) + + expected_fprs_norm = torch.tensor([1.0, 0.75, 0.5, 0.25]) + expected_fprs_anom = torch.tensor([1.0, 0.5, 0.0, 0.0]) + expected_fprs = torch.stack([expected_fprs_anom, expected_fprs_norm], axis=0).to(torch.float64) + + # in the case where all thresholds are higher than the highest prediction + expected_norm_thresholds_too_high = torch.stack( + [ + torch.tensor([[4, 0], [0, 0]]), + torch.tensor([[4, 0], [0, 0]]), + torch.tensor([[4, 0], [0, 0]]), + torch.tensor([[4, 0], [0, 0]]), + ], + axis=0, + ).to(int) + expected_anom_thresholds_too_high = torch.stack( + [ + torch.tensor([[2, 0], [2, 0]]), + torch.tensor([[2, 0], [2, 0]]), + torch.tensor([[2, 0], [2, 0]]), + torch.tensor([[2, 0], [2, 0]]), + ], + axis=0, + ).to(int) + + # in the case where all thresholds are lower than the lowest prediction + expected_norm_thresholds_too_low = torch.stack( + [ + torch.tensor([[0, 4], [0, 0]]), + torch.tensor([[0, 4], [0, 0]]), + torch.tensor([[0, 4], [0, 0]]), + torch.tensor([[0, 4], [0, 0]]), + ], + axis=0, + ).to(int) + expected_anom_thresholds_too_low = torch.stack( + [ + torch.tensor([[0, 2], [0, 2]]), + torch.tensor([[0, 2], [0, 2]]), + torch.tensor([[0, 2], [0, 2]]), + torch.tensor([[0, 2], [0, 2]]), + ], + axis=0, + ).to(int) + + if metafunc.function is test__binclf_one_curve: + metafunc.parametrize( + argnames=("pred", "gt", "thresholds", "expected"), + argvalues=[ + (pred, gt_anom, thresholds[:3], expected_anom[:3]), + (pred, gt_anom, thresholds, expected_anom), + (pred, gt_norm, thresholds, expected_norm), + (pred, gt_norm, 10 * thresholds, expected_norm_thresholds_too_high), + (pred, gt_anom, 10 * thresholds, expected_anom_thresholds_too_high), + (pred, gt_norm, 0.001 * thresholds, expected_norm_thresholds_too_low), + (pred, gt_anom, 0.001 * thresholds, expected_anom_thresholds_too_low), + ], + ) + + preds = torch.stack([pred, pred], axis=0) + gts = torch.stack([gt_anom, gt_norm], axis=0) + binclf_curves = torch.stack([expected_anom, expected_norm], axis=0) + binclf_curves_thresholds_too_high = torch.stack( + [expected_anom_thresholds_too_high, expected_norm_thresholds_too_high], + axis=0, + ) + binclf_curves_thresholds_too_low = torch.stack( + [expected_anom_thresholds_too_low, expected_norm_thresholds_too_low], + axis=0, + ) + + if metafunc.function is test__binclf_multiple_curves: + metafunc.parametrize( + argnames=("preds", "gts", "thresholds", "expecteds"), + argvalues=[ + (preds, gts, thresholds[:3], binclf_curves[:, :3]), + (preds, gts, thresholds, binclf_curves), + ], + ) + + if metafunc.function is test_binclf_multiple_curves: + metafunc.parametrize( + argnames=( + "preds", + "gts", + "thresholds", + "expected_binclf_curves", + ), + argvalues=[ + (preds[:1], gts[:1], thresholds, binclf_curves[:1]), + (preds, gts, thresholds, binclf_curves), + (10 * preds, gts, 10 * thresholds, binclf_curves), + ], + ) + + if metafunc.function is test_binclf_multiple_curves_validations: + metafunc.parametrize( + argnames=("args", "kwargs", "exception"), + argvalues=[ + # `scores` and `gts` must be 2D + ([preds.reshape(2, 2, 2), gts, thresholds], {}, ValueError), + ([preds, gts.flatten(), thresholds], {}, ValueError), + # `thresholds` must be 1D + ([preds, gts, thresholds.reshape(2, 2)], {}, ValueError), + # `scores` and `gts` must have the same shape + ([preds, gts[:1], thresholds], {}, ValueError), + ([preds[:, :2], gts, thresholds], {}, ValueError), + # `scores` be of type float + ([preds.to(int), gts, thresholds], {}, TypeError), + # `gts` be of type bool + ([preds, gts.to(int), thresholds], {}, TypeError), + # `thresholds` be of type float + ([preds, gts, thresholds.to(int)], {}, TypeError), + # `thresholds` must be sorted in ascending order + ([preds, gts, torch.flip(thresholds, dims=[0])], {}, ValueError), + ([preds, gts, torch.concatenate([thresholds[-2:], thresholds[:2]])], {}, ValueError), + # `thresholds` must be unique + ([preds, gts, torch.sort(torch.concatenate([thresholds, thresholds]))[0]], {}, ValueError), + ], + ) + + # the following tests are for `per_image_binclf_curve()`, which expects + # inputs in image spatial format, i.e. (height, width) + preds = preds.reshape(2, 2, 2) + gts = gts.reshape(2, 2, 2) + + per_image_binclf_curves_argvalues = [ + # `thresholds_choice` = "given" + ( + preds, + gts, + "given", + thresholds, + None, + thresholds, + binclf_curves, + ), + ( + preds, + gts, + "given", + 10 * thresholds, + 2, + 10 * thresholds, + binclf_curves_thresholds_too_high, + ), + ( + preds, + gts, + "given", + 0.01 * thresholds, + None, + 0.01 * thresholds, + binclf_curves_thresholds_too_low, + ), + # `thresholds_choice` = 'minmax-linspace'" + ( + preds, + gts, + "minmax-linspace", + None, + len(thresholds), + thresholds, + binclf_curves, + ), + ( + 2 * preds, + gts.to(int), # this is ok + "minmax-linspace", + None, + len(thresholds), + 2 * thresholds, + binclf_curves, + ), + ] + + if metafunc.function is test_per_image_binclf_curve: + metafunc.parametrize( + argnames=( + "anomaly_maps", + "masks", + "threshold_choice", + "thresholds", + "num_thresholds", + "expected_thresholds", + "expected_binclf_curves", + ), + argvalues=per_image_binclf_curves_argvalues, + ) + + if metafunc.function is test_per_image_binclf_curve_validations: + metafunc.parametrize( + argnames=("args", "exception"), + argvalues=[ + # `scores` and `gts` must be 3D + ([preds.reshape(2, 2, 2, 1), gts], ValueError), + ([preds, gts.flatten()], ValueError), + # `scores` and `gts` must have the same shape + ([preds, gts[:1]], ValueError), + ([preds[:, :1], gts], ValueError), + # `scores` be of type float + ([preds.to(int), gts], TypeError), + # `gts` be of type bool or int + ([preds, gts.to(float)], TypeError), + # `thresholds` be of type float + ([preds, gts, thresholds.to(int)], TypeError), + ], + ) + metafunc.parametrize( + argnames=("kwargs",), + argvalues=[ + ( + { + "threshold_choice": "minmax-linspace", + "thresholds": None, + "num_thresholds": len(thresholds), + }, + ), + ], + ) + + # same as above but testing other validations + if metafunc.function is test_per_image_binclf_curve_validations_alt: + metafunc.parametrize( + argnames=("args", "kwargs", "exception"), + argvalues=[ + # invalid `thresholds_choice` + ( + [preds, gts], + {"threshold_choice": "glfrb", "thresholds": thresholds, "num_thresholds": None}, + ValueError, + ), + ], + ) + + if metafunc.function is test_rate_metrics: + metafunc.parametrize( + argnames=("binclf_curves", "expected_fprs", "expected_tprs"), + argvalues=[ + (binclf_curves, expected_fprs, expected_tprs), + (10 * binclf_curves, expected_fprs, expected_tprs), + ], + ) + + +# ================================================================================================== +# LOW-LEVEL FUNCTIONS (PYTHON) + + +def test__binclf_one_curve( + pred: torch.Tensor, + gt: torch.Tensor, + thresholds: torch.Tensor, + expected: torch.Tensor, +) -> None: + """Test if `_binclf_one_curve()` returns the expected values.""" + computed = _binary_classification_curve(pred, gt, thresholds) + assert computed.shape == (thresholds.numel(), 2, 2) + assert (computed == expected.numpy()).all() + + +def test__binclf_multiple_curves( + preds: torch.Tensor, + gts: torch.Tensor, + thresholds: torch.Tensor, + expecteds: torch.Tensor, +) -> None: + """Test if `_binclf_multiple_curves()` returns the expected values.""" + computed = binary_classification_curve(preds, gts, thresholds) + assert computed.shape == (preds.shape[0], thresholds.numel(), 2, 2) + assert (computed == expecteds).all() + + +# ================================================================================================== +# API FUNCTIONS (NUMPY) + + +def test_binclf_multiple_curves( + preds: torch.Tensor, + gts: torch.Tensor, + thresholds: torch.Tensor, + expected_binclf_curves: torch.Tensor, +) -> None: + """Test if `binclf_multiple_curves()` returns the expected values.""" + computed = binary_classification_curve( + preds, + gts, + thresholds, + ) + assert computed.shape == expected_binclf_curves.shape + assert (computed == expected_binclf_curves).all() + + # it's ok to have the threhsholds beyond the range of the preds + binary_classification_curve(preds, gts, 2 * thresholds) + + # or inside the bounds without reaching them + binary_classification_curve(preds, gts, 0.5 * thresholds) + + # it's also ok to have more thresholds than unique values in the preds + # add the values in between the thresholds + thresholds_unncessary = 0.5 * (thresholds[:-1] + thresholds[1:]) + thresholds_unncessary = torch.concatenate([thresholds_unncessary, thresholds]) + thresholds_unncessary = torch.sort(thresholds_unncessary)[0] + binary_classification_curve(preds, gts, thresholds_unncessary) + + # or less + binary_classification_curve(preds, gts, thresholds[1:3]) + + +def test_binclf_multiple_curves_validations(args: list, kwargs: dict, exception: Exception) -> None: + """Test if `_binclf_multiple_curves_python()` raises the expected errors.""" + with pytest.raises(exception): + binary_classification_curve(*args, **kwargs) + + +def test_per_image_binclf_curve( + anomaly_maps: torch.Tensor, + masks: torch.Tensor, + threshold_choice: str, + thresholds: torch.Tensor | None, + num_thresholds: int | None, + expected_thresholds: torch.Tensor, + expected_binclf_curves: torch.Tensor, +) -> None: + """Test if `per_image_binclf_curve()` returns the expected values.""" + computed_thresholds, computed_binclf_curves = threshold_and_binary_classification_curve( + anomaly_maps, + masks, + threshold_choice=threshold_choice, + thresholds=thresholds, + num_thresholds=num_thresholds, + ) + + # thresholds + assert computed_thresholds.shape == expected_thresholds.shape + assert computed_thresholds.dtype == computed_thresholds.dtype + assert (computed_thresholds == expected_thresholds).all() + + # binclf_curves + assert computed_binclf_curves.shape == expected_binclf_curves.shape + assert computed_binclf_curves.dtype == expected_binclf_curves.dtype + assert (computed_binclf_curves == expected_binclf_curves).all() + + +def test_per_image_binclf_curve_validations(args: list, kwargs: dict, exception: Exception) -> None: + """Test if `per_image_binclf_curve()` raises the expected errors.""" + with pytest.raises(exception): + threshold_and_binary_classification_curve(*args, **kwargs) + + +def test_per_image_binclf_curve_validations_alt(args: list, kwargs: dict, exception: Exception) -> None: + """Test if `per_image_binclf_curve()` raises the expected errors.""" + test_per_image_binclf_curve_validations(args, kwargs, exception) + + +def test_rate_metrics( + binclf_curves: torch.Tensor, + expected_fprs: torch.Tensor, + expected_tprs: torch.Tensor, +) -> None: + """Test if rate metrics are computed correctly.""" + tprs = per_image_tpr(binclf_curves) + fprs = per_image_fpr(binclf_curves) + + assert tprs.shape == expected_tprs.shape + assert fprs.shape == expected_fprs.shape + + assert torch.allclose(tprs, expected_tprs, equal_nan=True) + assert torch.allclose(fprs, expected_fprs, equal_nan=True) diff --git a/tests/unit/metrics/pimo/test_pimo.py b/tests/unit/metrics/pimo/test_pimo.py new file mode 100644 index 0000000000..81bafe4c8e --- /dev/null +++ b/tests/unit/metrics/pimo/test_pimo.py @@ -0,0 +1,368 @@ +"""Test `anomalib.metrics.per_image.functional`.""" + +# Original Code +# https://github.com/jpcbertoldo/aupimo +# +# Modified +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import logging + +import pytest +import torch +from torch import Tensor + +from anomalib.metrics.pimo import AUPIMOResult, PIMOResult, functional, pimo + + +def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: + """Generate tests for all functions in this module. + + All functions are parametrized with the same setting: 1 normal and 2 anomalous images. + The anomaly maps are the same for all functions, but the masks are different. + """ + expected_thresholds = torch.arange(1, 7 + 1, dtype=torch.float32) + shape = (1000, 1000) # (H, W), 1 million pixels + + # --- normal --- + # histogram of scores: + # value: 7 6 5 4 3 2 1 + # count: 1 9 90 900 9k 90k 900k + # cumsum: 1 10 100 1k 10k 100k 1M + pred_norm = torch.ones(1_000_000, dtype=torch.float32) + pred_norm[:100_000] += 1 + pred_norm[:10_000] += 1 + pred_norm[:1_000] += 1 + pred_norm[:100] += 1 + pred_norm[:10] += 1 + pred_norm[:1] += 1 + pred_norm = pred_norm.reshape(shape) + mask_norm = torch.zeros_like(pred_norm, dtype=torch.int32) + + expected_fpr_norm = torch.tensor([1.0, 1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6], dtype=torch.float64) + expected_tpr_norm = torch.full((7,), torch.nan, dtype=torch.float64) + + # --- anomalous --- + pred_anom1 = pred_norm.clone() + mask_anom1 = torch.ones_like(pred_anom1, dtype=torch.int32) + expected_tpr_anom1 = expected_fpr_norm.clone() + + # only the first 100_000 pixels are anomalous + # which corresponds to the first 100_000 highest scores (2 to 7) + pred_anom2 = pred_norm.clone() + mask_anom2 = torch.concatenate([torch.ones(100_000), torch.zeros(900_000)]).reshape(shape).to(torch.int32) + expected_tpr_anom2 = (10 * expected_fpr_norm).clip(0, 1) + + anomaly_maps = torch.stack([pred_norm, pred_anom1, pred_anom2], axis=0) + masks = torch.stack([mask_norm, mask_anom1, mask_anom2], axis=0) + + expected_shared_fpr = expected_fpr_norm + expected_per_image_tprs = torch.stack([expected_tpr_norm, expected_tpr_anom1, expected_tpr_anom2], axis=0) + expected_image_classes = torch.tensor([0, 1, 1], dtype=torch.int32) + + if metafunc.function is test_pimo or metafunc.function is test_aupimo_values: + argvalues_tensors = [ + ( + anomaly_maps, + masks, + expected_thresholds, + expected_shared_fpr, + expected_per_image_tprs, + expected_image_classes, + ), + ( + 10 * anomaly_maps, + masks, + 10 * expected_thresholds, + expected_shared_fpr, + expected_per_image_tprs, + expected_image_classes, + ), + ] + metafunc.parametrize( + argnames=( + "anomaly_maps", + "masks", + "expected_thresholds", + "expected_shared_fpr", + "expected_per_image_tprs", + "expected_image_classes", + ), + argvalues=argvalues_tensors, + ) + + if metafunc.function is test_aupimo_values: + argvalues_tensors = [ + ( + (1e-1, 1.0), + torch.tensor( + [ + torch.nan, + # recall: trapezium area = (a + b) * h / 2 + (0.10 + 1.0) * 1 / 2, + (1.0 + 1.0) * 1 / 2, + ], + dtype=torch.float64, + ), + ), + ( + (1e-3, 1e-1), + torch.tensor( + [ + torch.nan, + # average of two trapezium areas / 2 (normalizing factor) + (((1e-3 + 1e-2) * 1 / 2) + ((1e-2 + 1e-1) * 1 / 2)) / 2, + (((1e-2 + 1e-1) * 1 / 2) + ((1e-1 + 1.0) * 1 / 2)) / 2, + ], + dtype=torch.float64, + ), + ), + ( + (1e-5, 1e-4), + torch.tensor( + [ + torch.nan, + (1e-5 + 1e-4) * 1 / 2, + (1e-4 + 1e-3) * 1 / 2, + ], + dtype=torch.float64, + ), + ), + ] + metafunc.parametrize( + argnames=( + "fpr_bounds", + "expected_aupimos", # trapezoid surfaces + ), + argvalues=argvalues_tensors, + ) + + if metafunc.function is test_aupimo_edge: + metafunc.parametrize( + argnames=( + "anomaly_maps", + "masks", + ), + argvalues=[ + ( + anomaly_maps, + masks, + ), + ( + 10 * anomaly_maps, + masks, + ), + ], + ) + metafunc.parametrize( + argnames=("fpr_bounds",), + argvalues=[ + ((1e-1, 1.0),), + ((1e-3, 1e-2),), + ((1e-5, 1e-4),), + (None,), + ], + ) + + +def _do_test_pimo_outputs( + thresholds: Tensor, + shared_fpr: Tensor, + per_image_tprs: Tensor, + image_classes: Tensor, + expected_thresholds: Tensor, + expected_shared_fpr: Tensor, + expected_per_image_tprs: Tensor, + expected_image_classes: Tensor, +) -> None: + """Test if the outputs of any of the PIMO interfaces are correct.""" + assert isinstance(shared_fpr, Tensor) + assert isinstance(per_image_tprs, Tensor) + assert isinstance(image_classes, Tensor) + assert isinstance(expected_thresholds, Tensor) + assert isinstance(expected_shared_fpr, Tensor) + assert isinstance(expected_per_image_tprs, Tensor) + assert isinstance(expected_image_classes, Tensor) + allclose = torch.allclose + + assert thresholds.ndim == 1 + assert shared_fpr.ndim == 1 + assert per_image_tprs.ndim == 2 + assert tuple(image_classes.shape) == (3,) + + assert allclose(thresholds, expected_thresholds) + assert allclose(shared_fpr, expected_shared_fpr) + assert allclose(per_image_tprs, expected_per_image_tprs, equal_nan=True) + assert (image_classes == expected_image_classes).all() + + +def test_pimo( + anomaly_maps: Tensor, + masks: Tensor, + expected_thresholds: Tensor, + expected_shared_fpr: Tensor, + expected_per_image_tprs: Tensor, + expected_image_classes: Tensor, +) -> None: + """Test if `pimo()` returns the expected values.""" + + def do_assertions(pimo_result: PIMOResult) -> None: + thresholds = pimo_result.thresholds + shared_fpr = pimo_result.shared_fpr + per_image_tprs = pimo_result.per_image_tprs + image_classes = pimo_result.image_classes + _do_test_pimo_outputs( + thresholds, + shared_fpr, + per_image_tprs, + image_classes, + expected_thresholds, + expected_shared_fpr, + expected_per_image_tprs, + expected_image_classes, + ) + + # metric interface + metric = pimo.PIMO( + num_thresholds=7, + ) + metric.update(anomaly_maps, masks) + pimo_result = metric.compute() + do_assertions(pimo_result) + + +def _do_test_aupimo_outputs( + thresholds: Tensor, + shared_fpr: Tensor, + per_image_tprs: Tensor, + image_classes: Tensor, + aupimos: Tensor, + expected_thresholds: Tensor, + expected_shared_fpr: Tensor, + expected_per_image_tprs: Tensor, + expected_image_classes: Tensor, + expected_aupimos: Tensor, +) -> None: + _do_test_pimo_outputs( + thresholds, + shared_fpr, + per_image_tprs, + image_classes, + expected_thresholds, + expected_shared_fpr, + expected_per_image_tprs, + expected_image_classes, + ) + assert isinstance(aupimos, Tensor) + assert isinstance(expected_aupimos, Tensor) + allclose = torch.allclose + assert tuple(aupimos.shape) == (3,) + assert allclose(aupimos, expected_aupimos, equal_nan=True) + + +def test_aupimo_values( + anomaly_maps: torch.Tensor, + masks: torch.Tensor, + fpr_bounds: tuple[float, float], + expected_thresholds: torch.Tensor, + expected_shared_fpr: torch.Tensor, + expected_per_image_tprs: torch.Tensor, + expected_image_classes: torch.Tensor, + expected_aupimos: torch.Tensor, +) -> None: + """Test if `aupimo()` returns the expected values.""" + + def do_assertions(pimo_result: PIMOResult, aupimo_result: AUPIMOResult) -> None: + # test metadata + assert aupimo_result.fpr_bounds == fpr_bounds + # recall: this one is not the same as the number of thresholds in the curve + # this is the number of thresholds used to compute the integral in `aupimo()` + # always less because of the integration bounds + assert aupimo_result.num_thresholds < 7 + + # test data + # from pimo result + thresholds = pimo_result.thresholds + shared_fpr = pimo_result.shared_fpr + per_image_tprs = pimo_result.per_image_tprs + image_classes = pimo_result.image_classes + # from aupimo result + aupimos = aupimo_result.aupimos + _do_test_aupimo_outputs( + thresholds, + shared_fpr, + per_image_tprs, + image_classes, + aupimos, + expected_thresholds, + expected_shared_fpr, + expected_per_image_tprs, + expected_image_classes, + expected_aupimos, + ) + thresh_lower_bound = aupimo_result.thresh_lower_bound + thresh_upper_bound = aupimo_result.thresh_upper_bound + assert anomaly_maps.min() <= thresh_lower_bound < thresh_upper_bound <= anomaly_maps.max() + + # metric interface + metric = pimo.AUPIMO( + num_thresholds=7, + fpr_bounds=fpr_bounds, + return_average=False, + force=True, + ) + metric.update(anomaly_maps, masks) + pimo_result_from_metric, aupimo_result_from_metric = metric.compute() + do_assertions(pimo_result_from_metric, aupimo_result_from_metric) + + # metric interface + metric = pimo.AUPIMO( + num_thresholds=7, + fpr_bounds=fpr_bounds, + return_average=True, # only return the average AUPIMO + force=True, + ) + metric.update(anomaly_maps, masks) + metric.compute() + + +def test_aupimo_edge( + anomaly_maps: torch.Tensor, + masks: torch.Tensor, + fpr_bounds: tuple[float, float], + caplog: pytest.LogCaptureFixture, +) -> None: + """Test some edge cases.""" + # None is the case of testing the default bounds + fpr_bounds = {"fpr_bounds": fpr_bounds} if fpr_bounds is not None else {} + + # not enough points on the curve + # 10 thresholds / 6 decades = 1.6 thresholds per decade < 3 + with pytest.raises(RuntimeError): # force=False --> raise error + functional.aupimo_scores( + anomaly_maps, + masks, + num_thresholds=10, + force=False, + **fpr_bounds, + ) + + with caplog.at_level(logging.WARNING): # force=True --> warn + functional.aupimo_scores( + anomaly_maps, + masks, + num_thresholds=10, + force=True, + **fpr_bounds, + ) + assert "Computation was forced!" in caplog.text + + # default number of points on the curve (300k thresholds) should be enough + torch.manual_seed(42) + functional.aupimo_scores( + anomaly_maps * torch.FloatTensor(anomaly_maps.shape).uniform_(1.0, 1.1), + masks, + force=False, + **fpr_bounds, + ) diff --git a/tests/unit/metrics/threshold/test_threshold.py b/tests/unit/metrics/threshold/test_threshold.py new file mode 100644 index 0000000000..918e850c23 --- /dev/null +++ b/tests/unit/metrics/threshold/test_threshold.py @@ -0,0 +1,60 @@ +"""Test Threshold metric.""" + +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import pytest +from torchmetrics import Metric + +from anomalib.metrics.threshold import BaseThreshold, Threshold + + +class TestThreshold: + """Test cases for the Threshold class.""" + + @staticmethod + def test_threshold_abstract_methods() -> None: + """Test that Threshold class raises NotImplementedError for abstract methods.""" + threshold = Threshold() + + with pytest.raises(NotImplementedError, match="Subclass of Threshold must implement the compute method"): + threshold.compute() + + with pytest.raises(NotImplementedError, match="Subclass of Threshold must implement the update method"): + threshold.update() + + @staticmethod + def test_threshold_initialization() -> None: + """Test that Threshold can be initialized without errors.""" + threshold = Threshold() + assert isinstance(threshold, Metric) + + +class TestBaseThreshold: + """Test cases for the BaseThreshold class.""" + + @staticmethod + def test_base_threshold_deprecation_warning() -> None: + """Test that BaseThreshold class raises a DeprecationWarning.""" + with pytest.warns( + DeprecationWarning, + match="BaseThreshold is deprecated and will be removed in a future version. Use Threshold instead.", + ): + BaseThreshold() + + @staticmethod + def test_base_threshold_inheritance() -> None: + """Test that BaseThreshold inherits from Threshold.""" + base_threshold = BaseThreshold() + assert isinstance(base_threshold, Threshold) + + @staticmethod + def test_base_threshold_abstract_methods() -> None: + """Test that BaseThreshold class raises NotImplementedError for abstract methods.""" + base_threshold = BaseThreshold() + + with pytest.raises(NotImplementedError, match="Subclass of Threshold must implement the compute method"): + base_threshold.compute() + + with pytest.raises(NotImplementedError, match="Subclass of Threshold must implement the update method"): + base_threshold.update() diff --git a/tests/unit/models/components/__init__.py b/tests/unit/models/components/__init__.py index b0d0d58d06..90c8fb6953 100644 --- a/tests/unit/models/components/__init__.py +++ b/tests/unit/models/components/__init__.py @@ -1 +1,4 @@ """Test individual components.""" + +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 diff --git a/tests/unit/models/components/base/test_anomaly_module.py b/tests/unit/models/components/base/test_anomaly_module.py index 17e401cc6f..c77ab7c212 100644 --- a/tests/unit/models/components/base/test_anomaly_module.py +++ b/tests/unit/models/components/base/test_anomaly_module.py @@ -10,15 +10,22 @@ from anomalib.models.components.base import AnomalyModule +@pytest.fixture(scope="class") +def model_config_folder_path() -> str: + """Fixture that returns model config folder path.""" + return "configs/model" + + class TestAnomalyModule: """Test AnomalyModule.""" - @pytest.fixture() - def fxt_model_config_folder_path(self) -> str: - """Fixture that returns model config folder path.""" - return "configs/model" + @pytest.fixture(autouse=True) + def setup(self, model_config_folder_path: str) -> None: + """Setup test AnomalyModule.""" + self.model_config_folder_path = model_config_folder_path - def test_from_config_with_wrong_config_path(self) -> None: + @staticmethod + def test_from_config_with_wrong_config_path() -> None: """Test AnomalyModule.from_config with wrong model name.""" with pytest.raises(FileNotFoundError): AnomalyModule.from_config(config_path="wrong_configs.yaml") @@ -45,9 +52,9 @@ def test_from_config_with_wrong_config_path(self) -> None: "uflow", ], ) - def test_from_config(self, model_name: str, fxt_model_config_folder_path: str) -> None: + def test_from_config(self, model_name: str) -> None: """Test AnomalyModule.from_config.""" - config_path = Path(fxt_model_config_folder_path) / f"{model_name}.yaml" + config_path = Path(self.model_config_folder_path) / f"{model_name}.yaml" model = AnomalyModule.from_config(config_path=config_path) assert model is not None assert isinstance(model, AnomalyModule) diff --git a/tests/unit/models/components/base/test_buffer_list_mixin.py b/tests/unit/models/components/base/test_buffer_list_mixin.py index 9c573521b1..82cbaf6794 100644 --- a/tests/unit/models/components/base/test_buffer_list_mixin.py +++ b/tests/unit/models/components/base/test_buffer_list_mixin.py @@ -35,25 +35,29 @@ def module() -> BufferListModule: class TestBufferListMixin: """Test the BufferListMixin module.""" - def test_get_buffer_list(self, module: BufferListModule) -> None: + @staticmethod + def test_get_buffer_list(module: BufferListModule) -> None: """Test retrieving the tensor_list.""" assert isinstance(module.tensor_list, list) assert all(isinstance(tensor, torch.Tensor) for tensor in module.tensor_list) - def test_set_buffer_list(self, module: BufferListModule) -> None: + @staticmethod + def test_set_buffer_list(module: BufferListModule) -> None: """Test setting/updating the tensor_list.""" tensor_list = [torch.rand(3) for _ in range(3)] module.tensor_list = tensor_list assert tensor_lists_are_equal(module.tensor_list, tensor_list) - def test_buffer_list_device_placement(self, module: BufferListModule) -> None: + @staticmethod + def test_buffer_list_device_placement(module: BufferListModule) -> None: """Test if the device of the buffer list is updated with the module.""" module.cuda() assert all(tensor.is_cuda for tensor in module.tensor_list) module.cpu() assert all(tensor.is_cpu for tensor in module.tensor_list) - def test_persistent_buffer_list(self) -> None: + @staticmethod + def test_persistent_buffer_list(module: BufferListModule) -> None: """Test if the buffer_list is persistent when re-loading the state dict.""" # create a module, assign the buffer list and get the state dict module = BufferListModule() @@ -66,7 +70,8 @@ def test_persistent_buffer_list(self) -> None: # assert that the previously set buffer list has been restored assert tensor_lists_are_equal(module.tensor_list, tensor_list) - def test_non_persistent_buffer_list(self) -> None: + @staticmethod + def test_non_persistent_buffer_list(module: BufferListModule) -> None: """Test if the buffer_list is persistent when re-loading the state dict.""" # create a module, assign the buffer list and get the state dict module = BufferListModule() diff --git a/tests/unit/models/components/base/test_dynamic_buffer_mixin.py b/tests/unit/models/components/base/test_dynamic_buffer_mixin.py index 6fc108196f..5953abba03 100644 --- a/tests/unit/models/components/base/test_dynamic_buffer_mixin.py +++ b/tests/unit/models/components/base/test_dynamic_buffer_mixin.py @@ -41,18 +41,21 @@ def module() -> DynamicBufferModule: class TestDynamicBufferMixin: """Test the DynamicBufferMixin.""" - def test_get_tensor_attribute_tensor(self, module: DynamicBufferModule) -> None: + @staticmethod + def test_get_tensor_attribute_tensor(module: DynamicBufferModule) -> None: """Test the get_tensor_attribute method with a tensor field.""" tensor_attribute = module.get_tensor_attribute("tensor_attribute") assert isinstance(tensor_attribute, torch.Tensor) assert torch.equal(tensor_attribute, module.tensor_attribute) - def test_get_tensor_attribute_non_tensor(self, module: DynamicBufferModule) -> None: + @staticmethod + def test_get_tensor_attribute_non_tensor(module: DynamicBufferModule) -> None: """Test the get_tensor_attribute method with a non-tensor field.""" with pytest.raises(ValueError, match="Attribute with name 'non_tensor_attribute' is not a torch Tensor"): module.get_tensor_attribute("non_tensor_attribute") - def test_load_from_state_dict(self, module: DynamicBufferModule) -> None: + @staticmethod + def test_load_from_state_dict(module: DynamicBufferModule) -> None: """Test updating the buffers from a state_dict.""" state_dict = { "prefix_first_buffer": torch.zeros(5, 5), diff --git a/tests/unit/models/components/clustering/__init__.py b/tests/unit/models/components/clustering/__init__.py index 48f2e342e8..eedbb37347 100644 --- a/tests/unit/models/components/clustering/__init__.py +++ b/tests/unit/models/components/clustering/__init__.py @@ -1 +1,4 @@ """Tests for clustering components.""" + +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 diff --git a/tests/unit/models/components/clustering/test_gmm.py b/tests/unit/models/components/clustering/test_gmm.py index 197c3bf861..18b9de2747 100644 --- a/tests/unit/models/components/clustering/test_gmm.py +++ b/tests/unit/models/components/clustering/test_gmm.py @@ -1,5 +1,8 @@ """Unit tests for Anomalib's Gaussian Mixture Model.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import logging import torch diff --git a/tests/unit/models/components/test_blur.py b/tests/unit/models/components/test_blur.py index 61f3d79a7b..305df7e20a 100644 --- a/tests/unit/models/components/test_blur.py +++ b/tests/unit/models/components/test_blur.py @@ -1,5 +1,8 @@ """Test if our implementation produces same result as kornia.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + import pytest import torch from kornia.filters import GaussianBlur2d as korniaGaussianBlur2d diff --git a/tests/unit/models/image/winclip/test_prompting.py b/tests/unit/models/image/winclip/test_prompting.py index 61b9c2956e..6c4584f0dc 100644 --- a/tests/unit/models/image/winclip/test_prompting.py +++ b/tests/unit/models/image/winclip/test_prompting.py @@ -1,24 +1,30 @@ """Unit tests for WinCLIP's compositional prompt ensemble.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + from anomalib.models.image.winclip.prompting import create_prompt_ensemble class TestCreatePromptEnsemble: """Test the create_prompt_ensemble function.""" - def test_length(self) -> None: + @staticmethod + def test_length() -> None: """Test if the correct number of normal and anomalous prompts are created.""" normal_prompts, anomalous_prompts = create_prompt_ensemble("object") assert len(normal_prompts) == 147 assert len(anomalous_prompts) == 84 - def test_class_name_in_every_prompt(self) -> None: + @staticmethod + def test_class_name_in_every_prompt() -> None: """Test prompt ensemble creation.""" normal_prompts, anomalous_prompts = create_prompt_ensemble("item") assert all("item" in prompt for prompt in normal_prompts) assert all("item" in prompt for prompt in anomalous_prompts) - def test_called_without_class_name(self) -> None: + @staticmethod + def test_called_without_class_name() -> None: """Test prompt ensemble creation without class name.""" normal_prompts, anomalous_prompts = create_prompt_ensemble() assert all("object" in prompt for prompt in normal_prompts) diff --git a/tests/unit/models/image/winclip/test_torch_model.py b/tests/unit/models/image/winclip/test_torch_model.py index e36c91f0f1..0ecfd79203 100644 --- a/tests/unit/models/image/winclip/test_torch_model.py +++ b/tests/unit/models/image/winclip/test_torch_model.py @@ -12,21 +12,24 @@ class TestSetupWinClipModel: """Test the WinCLIP torch model.""" - def test_zero_shot_from_init(self) -> None: + @staticmethod + def test_zero_shot_from_init() -> None: """Test WinCLIP initialization from init method in zero-shot mode.""" model = WinClipModel(class_name="item") assert model.k_shot == 0 assert getattr(model, "text_embeddings", None) is not None - def test_zero_shot_from_setup(self) -> None: + @staticmethod + def test_zero_shot_from_setup() -> None: """Test WinCLIP initialization from setup method in zero-shot mode.""" model = WinClipModel() model.setup(class_name="item") assert model.k_shot == 0 assert getattr(model, "text_embeddings", None) is not None + @staticmethod @pytest.mark.parametrize("apply_transform", [True, False]) - def test_few_shot_from_init(self, apply_transform: bool) -> None: + def test_few_shot_from_init(apply_transform: bool) -> None: """Test WinCLIP initialization from init in few-shot mode.""" ref_images = torch.rand(2, 3, 240, 240) model = WinClipModel(class_name="item", reference_images=ref_images, apply_transform=apply_transform) @@ -34,8 +37,9 @@ def test_few_shot_from_init(self, apply_transform: bool) -> None: assert getattr(model, "text_embeddings", None) is not None assert getattr(model, "visual_embeddings", None) is not None + @staticmethod @pytest.mark.parametrize("apply_transform", [True, False]) - def test_few_shot_from_setup(self, apply_transform: bool) -> None: + def test_few_shot_from_setup(apply_transform: bool) -> None: """Test WinCLIP initialization from setup method in few-shot mode.""" ref_images = torch.rand(2, 3, 240, 240) model = WinClipModel(apply_transform=apply_transform) @@ -44,7 +48,8 @@ def test_few_shot_from_setup(self, apply_transform: bool) -> None: assert getattr(model, "text_embeddings", None) is not None assert getattr(model, "visual_embeddings", None) is not None - def test_raises_error_when_not_initialized(self) -> None: + @staticmethod + def test_raises_error_when_not_initialized() -> None: """Test if an error is raised when trying to access un-initialized attributes.""" model = WinClipModel() with pytest.raises(RuntimeError): diff --git a/tests/unit/models/image/winclip/test_utils.py b/tests/unit/models/image/winclip/test_utils.py index a828eec07a..b41f2be893 100644 --- a/tests/unit/models/image/winclip/test_utils.py +++ b/tests/unit/models/image/winclip/test_utils.py @@ -18,37 +18,43 @@ class TestCosineSimilarity: """Unit tests for cosine similarity computation.""" - def test_computation(self) -> None: + @staticmethod + def test_computation() -> None: """Test cosine similarity computation.""" input1 = torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) input2 = torch.tensor([[0.0, 1.0, 0.0], [1.0, 1.0, 0.0]]) assert torch.allclose(cosine_similarity(input1, input2), torch.tensor([[[0.0000, 0.7071], [1.0000, 0.7071]]])) - def test_single_batch(self) -> None: + @staticmethod + def test_single_batch() -> None: """Test cosine similarity with single batch inputs.""" input1 = torch.randn(1, 100, 128) input2 = torch.randn(1, 200, 128) assert cosine_similarity(input1, input2).shape == torch.Size([1, 100, 200]) - def test_multi_batch(self) -> None: + @staticmethod + def test_multi_batch() -> None: """Test cosine similarity with multiple batch inputs.""" input1 = torch.randn(10, 100, 128) input2 = torch.randn(10, 200, 128) assert cosine_similarity(input1, input2).shape == torch.Size([10, 100, 200]) - def test_2d(self) -> None: + @staticmethod + def test_2d() -> None: """Test cosine similarity with 2D input.""" input1 = torch.randn(100, 128) input2 = torch.randn(200, 128) assert cosine_similarity(input1, input2).shape == torch.Size([100, 200]) - def test_2d_3d(self) -> None: + @staticmethod + def test_2d_3d() -> None: """Test cosine similarity with 2D and 3D input.""" input1 = torch.randn(100, 128) input2 = torch.randn(1, 200, 128) assert cosine_similarity(input1, input2).shape == torch.Size([100, 200]) - def test_3d_2d(self) -> None: + @staticmethod + def test_3d_2d() -> None: """Test cosine similarity with 3D and 2D input.""" input1 = torch.randn(10, 100, 128) input2 = torch.randn(200, 128) @@ -58,14 +64,16 @@ def test_3d_2d(self) -> None: class TestClassScores: """Unit tests for CLIP class score computation.""" - def test_computation(self) -> None: + @staticmethod + def test_computation() -> None: """Test CLIP class score computation.""" input1 = torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) input2 = torch.tensor([[0.0, 1.0, 0.0], [1.0, 1.0, 0.0]]) target = torch.tensor([[0.3302, 0.6698], [0.5727, 0.4273]]) assert torch.allclose(class_scores(input1, input2), target, atol=1e-4) - def test_called_with_target(self) -> None: + @staticmethod + def test_called_with_target() -> None: """Test CLIP class score computation without target.""" input1 = torch.randn(100, 128) input2 = torch.randn(200, 128) @@ -75,7 +83,8 @@ def test_called_with_target(self) -> None: class TestHarmonicAggregation: """Unit tests for harmonic aggregation computation.""" - def test_3x3_grid(self) -> None: + @staticmethod + def test_3x3_grid() -> None: """Test harmonic aggregation computation.""" # example for a 3x3 patch grid with 4 sliding windows of size 2x2 window_scores = torch.tensor([[1.0, 0.75, 0.5, 0.25]]) @@ -85,7 +94,8 @@ def test_3x3_grid(self) -> None: output = harmonic_aggregation(window_scores, output_size, masks) assert torch.allclose(output, target, atol=1e-4) - def test_multi_batch(self) -> None: + @staticmethod + def test_multi_batch() -> None: """Test harmonic aggregation computation with multiple batches.""" window_scores = torch.randn(2, 4) output_size = (3, 3) @@ -97,14 +107,16 @@ def test_multi_batch(self) -> None: class TestVisualAssociationScore: """Unit tests for visual association score computation.""" - def test_computation(self) -> None: + @staticmethod + def test_computation() -> None: """Test visual association score computation.""" embeddings = torch.tensor([[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]]) reference_embeddings = torch.tensor([[[0.0, 1.0, 0.0], [1.0, 1.0, 0.0]]]) target = torch.tensor([[0.1464, 0.0000]]) assert torch.allclose(visual_association_score(embeddings, reference_embeddings), target, atol=1e-4) - def test_multi_batch(self) -> None: + @staticmethod + def test_multi_batch() -> None: """Test visual association score computation with multiple batches.""" embeddings = torch.randn(10, 100, 128) reference_embeddings = torch.randn(2, 100, 128) @@ -114,13 +126,15 @@ def test_multi_batch(self) -> None: class TestMakeMasks: """Unit tests for mask generation.""" - def test_produces_correct_indices(self) -> None: + @staticmethod + def test_produces_correct_indices() -> None: """Test mask generation.""" patch_grid_size = (3, 3) kernel_size = 2 target = torch.tensor([[0, 1, 3, 4], [1, 2, 4, 5], [3, 4, 6, 7], [4, 5, 7, 8]]) assert torch.equal(make_masks(patch_grid_size, kernel_size), target) + @staticmethod @pytest.mark.parametrize( ("grid_size", "kernel_size", "stride", "target"), [ @@ -131,10 +145,11 @@ def test_produces_correct_indices(self) -> None: ((4, 4), 2, 2, (4, 4)), ], ) - def test_shapes(self, grid_size: tuple[int, int], kernel_size: int, stride: int, target: tuple[int, int]) -> None: + def test_shapes(grid_size: tuple[int, int], kernel_size: int, stride: int, target: tuple[int, int]) -> None: """Test mask generation for different grid sizes and kernel sizes.""" assert make_masks(grid_size, kernel_size, stride).shape == target + @staticmethod @pytest.mark.parametrize( ("grid_size", "kernel_size"), [ @@ -144,7 +159,6 @@ def test_shapes(self, grid_size: tuple[int, int], kernel_size: int, stride: int, ], ) def test_raises_error_when_window_size_larger_than_grid_size( - self, grid_size: tuple[int, int], kernel_size: int, ) -> None: diff --git a/tests/unit/models/test_feature_extractor.py b/tests/unit/models/test_feature_extractor.py index 6234ebe9f4..1faa3e7b78 100644 --- a/tests/unit/models/test_feature_extractor.py +++ b/tests/unit/models/test_feature_extractor.py @@ -1,5 +1,8 @@ """Test feature extractors.""" +# Copyright (C) 2022-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + from tempfile import TemporaryDirectory import pytest @@ -18,15 +21,10 @@ class TestFeatureExtractor: """Test the feature extractor.""" - @pytest.mark.parametrize( - "backbone", - ["resnet18", "wide_resnet50_2"], - ) - @pytest.mark.parametrize( - "pretrained", - [True, False], - ) - def test_timm_feature_extraction(self, backbone: str, pretrained: bool) -> None: + @staticmethod + @pytest.mark.parametrize("backbone", ["resnet18", "wide_resnet50_2"]) + @pytest.mark.parametrize("pretrained", [True, False]) + def test_timm_feature_extraction(backbone: str, pretrained: bool) -> None: """Test if the feature extractor can be instantiated and if the output is as expected.""" layers = ["layer1", "layer2", "layer3"] model = TimmFeatureExtractor(backbone=backbone, layers=layers, pre_trained=pretrained) @@ -48,7 +46,8 @@ def test_timm_feature_extraction(self, backbone: str, pretrained: bool) -> None: else: pass - def test_torchfx_feature_extraction(self) -> None: + @staticmethod + def test_torchfx_feature_extraction() -> None: """Test types of inputs for instantiating the feature extractor.""" model = TorchFXFeatureExtractor("resnet18", ["layer1", "layer2", "layer3"]) test_input = torch.rand((32, 3, 256, 256)) @@ -98,14 +97,8 @@ def test_torchfx_feature_extraction(self) -> None: assert features["layer3"].shape == torch.Size((32, 256, 16, 16)) -@pytest.mark.parametrize( - "backbone", - ["resnet18", "wide_resnet50_2"], -) -@pytest.mark.parametrize( - "input_size", - [(256, 256), (224, 224), (128, 128)], -) +@pytest.mark.parametrize("backbone", ["resnet18", "wide_resnet50_2"]) +@pytest.mark.parametrize("input_size", [(256, 256), (224, 224), (128, 128)]) def test_dryrun_find_featuremap_dims(backbone: str, input_size: tuple[int, int]) -> None: """Use the function and check the expected output format.""" layers = ["layer1", "layer2", "layer3"] diff --git a/tests/unit/models/test_model_utils.py b/tests/unit/models/test_model_utils.py index d52b30cc3c..2389ab882e 100644 --- a/tests/unit/models/test_model_utils.py +++ b/tests/unit/models/test_model_utils.py @@ -13,7 +13,8 @@ class TestGetModel: """Test the `get_model` method.""" - def test_get_model_by_name(self) -> None: + @staticmethod + def test_get_model_by_name() -> None: """Test get_model by name.""" model = get_model("Padim") assert isinstance(model, Padim) @@ -27,29 +28,34 @@ def test_get_model_by_name(self) -> None: model = get_model("efficientad") assert isinstance(model, EfficientAd) - def test_get_model_by_name_with_init_args(self) -> None: + @staticmethod + def test_get_model_by_name_with_init_args() -> None: """Test get_model by name with init args.""" model = get_model("Patchcore", backbone="wide_resnet50_2") assert isinstance(model, Patchcore) - def test_get_model_by_dict(self) -> None: + @staticmethod + def test_get_model_by_dict() -> None: """Test get_model by dict.""" model = get_model({"class_path": "Padim"}) assert isinstance(model, Padim) - def test_get_model_by_dict_with_init_args(self) -> None: + @staticmethod + def test_get_model_by_dict_with_init_args() -> None: """Test get_model by dict with init args.""" model = get_model({"class_path": "Padim", "init_args": {"backbone": "wide_resnet50_2"}}) assert isinstance(model, Padim) model = get_model({"class_path": "Patchcore"}, backbone="wide_resnet50_2") assert isinstance(model, Patchcore) - def test_get_model_by_dict_with_full_class_path(self) -> None: + @staticmethod + def test_get_model_by_dict_with_full_class_path() -> None: """Test get_model by dict with full class path.""" model = get_model({"class_path": "anomalib.models.Padim", "init_args": {"backbone": "wide_resnet50_2"}}) assert isinstance(model, Padim) - def test_get_model_by_namespace(self) -> None: + @staticmethod + def test_get_model_by_namespace() -> None: """Test get_model by namespace.""" config = OmegaConf.create({"class_path": "Padim"}) namespace = Namespace(**config) @@ -69,7 +75,8 @@ def test_get_model_by_namespace(self) -> None: model = get_model(namespace) assert isinstance(model, Padim) - def test_get_model_by_dict_config(self) -> None: + @staticmethod + def test_get_model_by_dict_config() -> None: """Test get_model by dict config.""" config = OmegaConf.create({"class_path": "Padim"}) model = get_model(config) @@ -78,17 +85,20 @@ def test_get_model_by_dict_config(self) -> None: model = get_model(config) assert isinstance(model, Padim) - def test_get_unknown_model(self) -> None: + @staticmethod + def test_get_unknown_model() -> None: """Test get_model with unknown model.""" with pytest.raises(UnknownModelError): get_model("UnimplementedModel") - def test_get_model_with_invalid_type(self) -> None: + @staticmethod + def test_get_model_with_invalid_type() -> None: """Test get_model with invalid type.""" with pytest.raises(TypeError): get_model(OmegaConf.create([{"class_path": "Padim"}])) - def test_get_model_with_invalid_class_path(self) -> None: + @staticmethod + def test_get_model_with_invalid_class_path() -> None: """Test get_model with invalid class path.""" with pytest.raises(UnknownModelError): get_model({"class_path": "anomalib.models.InvalidModel"}) diff --git a/tests/unit/models/video/test_ai_vad.py b/tests/unit/models/video/test_ai_vad.py index 899f8af905..e9ddb050dd 100644 --- a/tests/unit/models/video/test_ai_vad.py +++ b/tests/unit/models/video/test_ai_vad.py @@ -11,7 +11,8 @@ class TestAiVadFeatureExtractor: """Test if the different feature extractors of the AiVad model can handle edge case without bbox detections.""" - def test_velocity_extractor(self) -> None: + @staticmethod + def test_velocity_extractor() -> None: """Test velocity extractor submodule.""" pl_module = AiVad() velocity_feature_extractor = pl_module.model.feature_extractor.velocity_extractor @@ -24,7 +25,8 @@ def test_velocity_extractor(self) -> None: # features should be empty because there are no boxes assert velocity_features.numel() == 0 - def test_deep_feature_extractor(self) -> None: + @staticmethod + def test_deep_feature_extractor() -> None: """Test deep feature extractor submodule.""" pl_module = AiVad() deep_feature_extractor = pl_module.model.feature_extractor.deep_extractor @@ -38,7 +40,8 @@ def test_deep_feature_extractor(self) -> None: # features should be empty because there are no boxes assert deep_features.numel() == 0 - def test_pose_feature_extractor(self) -> None: + @staticmethod + def test_pose_feature_extractor() -> None: """Test pose feature extractor submodule.""" pl_module = AiVad() pose_feature_extractor = pl_module.model.feature_extractor.pose_extractor diff --git a/tests/unit/utils/test_visualizer.py b/tests/unit/utils/test_visualizer.py index 19a905e558..4df882a7f1 100644 --- a/tests/unit/utils/test_visualizer.py +++ b/tests/unit/utils/test_visualizer.py @@ -38,9 +38,9 @@ def test_visualize_fully_defected_masks() -> None: class TestVisualizer: """Test visualization callback for test and predict with different task types.""" + @staticmethod @pytest.mark.parametrize("task", [TaskType.CLASSIFICATION, TaskType.SEGMENTATION, TaskType.DETECTION]) def test_model_visualizer_mode( - self, ckpt_path: Callable[[str], Path], project_path: Path, dataset_path: Path, diff --git a/third-party-programs.txt b/third-party-programs.txt index 3155b2a930..5eeaca8ea9 100644 --- a/third-party-programs.txt +++ b/third-party-programs.txt @@ -42,3 +42,7 @@ terms are listed below. 7. CLIP neural network used for deep feature extraction in AI-VAD model Copyright (c) 2022 @openai, https://github.com/openai/CLIP. SPDX-License-Identifier: MIT + +8. AUPIMO metric implementation is based on the original code + Copyright (c) 2023 @jpcbertoldo, https://github.com/jpcbertoldo/aupimo + SPDX-License-Identifier: MIT diff --git a/tools/inference/gradio_inference.py b/tools/inference/gradio_inference.py index 36bc46f02e..89cf5f14ec 100644 --- a/tools/inference/gradio_inference.py +++ b/tools/inference/gradio_inference.py @@ -53,18 +53,17 @@ def get_inferencer(weight_path: Path, metadata: Path | None = None) -> Inference extension = weight_path.suffix inferencer: Inferencer module = import_module("anomalib.deploy") - if extension in (".pt", ".pth", ".ckpt"): + if extension in {".pt", ".pth", ".ckpt"}: torch_inferencer = module.TorchInferencer inferencer = torch_inferencer(path=weight_path) - elif extension in (".onnx", ".bin", ".xml"): + elif extension in {".onnx", ".bin", ".xml"}: if metadata is None: msg = "When using OpenVINO Inferencer, the following arguments are required: --metadata" raise ValueError(msg) openvino_inferencer = module.OpenVINOInferencer inferencer = openvino_inferencer(path=weight_path, metadata=metadata) - else: msg = ( "Model extension is not supported. " diff --git a/tools/upgrade/config.py b/tools/upgrade/config.py index d03f21d752..71bf17a4b5 100644 --- a/tools/upgrade/config.py +++ b/tools/upgrade/config.py @@ -119,7 +119,7 @@ def __init__(self, config: str | Path | dict[str, Any]) -> None: @staticmethod def safe_load(path: str | Path) -> dict: """Load a yaml file and return the content as a dictionary.""" - with Path(path).open("r") as f: + with Path(path).open("r", encoding="utf-8") as f: return yaml.safe_load(f) def upgrade_data_config(self) -> dict[str, Any]: @@ -248,7 +248,8 @@ def add_seed_config(self) -> dict[str, Any]: """Create seed everything field in v1 config.""" return {"seed_everything": bool(self.old_config["project"]["seed"])} - def add_ckpt_path_config(self) -> dict[str, Any]: + @staticmethod + def add_ckpt_path_config() -> dict[str, Any]: """Create checkpoint path directory in v1 config.""" return {"ckpt_path": None} @@ -311,7 +312,7 @@ def save_config(config: dict, path: str | Path) -> None: Returns: None """ - with Path(path).open("w") as file: + with Path(path).open("w", encoding="utf-8") as file: yaml.safe_dump(config, file, sort_keys=False)