From bd39a99f822fce5112ba3fd69b723a50260dcfaa Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2026 07:22:12 +0000 Subject: [PATCH 1/7] Extend documentation with technical concepts and Mermaid diagrams - Add docs/concepts.md explaining internal architecture, class hierarchy, and execution flow. - Include Mermaid class and sequence diagrams. - Add sphinxcontrib-mermaid to documentation dependencies and configuration. - Update docs/_toc.yml to include the new concepts page. Co-authored-by: jan-janssen <3854739+jan-janssen@users.noreply.github.com> --- .ci_support/environment-docs.yml | 1 + docs/_config.yml | 1 + docs/_toc.yml | 1 + docs/concepts.md | 104 +++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 docs/concepts.md diff --git a/.ci_support/environment-docs.yml b/.ci_support/environment-docs.yml index 965c2454..a740ba35 100644 --- a/.ci_support/environment-docs.yml +++ b/.ci_support/environment-docs.yml @@ -9,6 +9,7 @@ dependencies: - numpy - openmpi - sphinx +- sphinxcontrib-mermaid - sphinx_rtd_theme - cloudpickle =3.1.2 - h5py =3.16.0 diff --git a/docs/_config.yml b/docs/_config.yml index 3399770c..bfbe62d3 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -15,6 +15,7 @@ launch_buttons: sphinx: extra_extensions: + - 'sphinxcontrib-mermaid' - 'sphinx.ext.autodoc' - 'sphinx.ext.napoleon' - 'sphinx.ext.viewcode' diff --git a/docs/_toc.yml b/docs/_toc.yml index 5abb79fb..4bb0661f 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -2,6 +2,7 @@ format: jb-book root: README chapters: - file: installation.md +- file: concepts.md - file: 1-single-node.ipynb - file: 2-hpc-cluster.ipynb - file: 3-hpc-job.ipynb diff --git a/docs/concepts.md b/docs/concepts.md new file mode 100644 index 00000000..ef2ca6e4 --- /dev/null +++ b/docs/concepts.md @@ -0,0 +1,104 @@ +# Technical Concepts + +The `executorlib` package is designed to up-scale Python functions for High Performance Computing (HPC) by extending the standard Python `Executor` interface. This document explains the underlying technical concepts and the internal architecture of `executorlib`. + +## Internal Architecture + +The `executorlib` library is structured into four primary modules: + +* **`executor`**: Defines the user-facing `Executor` classes (e.g., `SingleNodeExecutor`, `SlurmClusterExecutor`, `SlurmJobExecutor`, `FluxClusterExecutor`, `FluxJobExecutor`). These classes provide the primary interface for users to submit tasks. +* **`task_scheduler`**: Manages the distribution and scheduling of tasks. It handles task queues, resource allocation, and coordinates with spawners. +* **`standalone`**: Contains utility functions and classes that do not depend on other internal modules. This includes serialization (using `cloudpickle`), ZMQ-based communication (`SocketInterface`), and input validation. +* **`backend`**: Contains the code executed by the worker processes to perform the actual function calls. + +## Class Hierarchy and Coupling + +The following diagram illustrates the relationship between the main classes in `executorlib`. + +```{mermaid} +classDiagram + class FutureExecutor { + <> + } + class BaseExecutor { + -_task_scheduler: TaskSchedulerBase + +submit(fn, *args, **kwargs) Future + +shutdown(wait) + } + class TaskSchedulerBase { + -_future_queue: Queue + -_process: Thread + +submit(fn, *args, **kwargs) Future + } + class BaseSpawner { + <> + +bootup(command_lst) + +shutdown(wait) + } + class SocketInterface { + +send_dict(input_dict) + +receive_dict() dict + } + + FutureExecutor <|-- BaseExecutor + BaseExecutor o-- TaskSchedulerBase + TaskSchedulerBase <|-- OneProcessTaskScheduler + TaskSchedulerBase <|-- BlockAllocationTaskScheduler + TaskSchedulerBase <|-- DependencyTaskScheduler + TaskSchedulerBase <|-- FileTaskScheduler + + OneProcessTaskScheduler o-- BaseSpawner + BaseSpawner <|-- MpiExecSpawner + BaseSpawner <|-- SrunSpawner + BaseSpawner <|-- FluxPythonSpawner + + OneProcessTaskScheduler ..> SocketInterface : uses +``` + +## Execution Flow + +When a user submits a function to an executor, several steps occur in the background to ensure the task is executed with the requested resources and the result is returned. + +```{mermaid} +sequenceDiagram + participant User + participant Executor + participant TaskScheduler + participant Spawner + participant Backend + + User->>Executor: submit(fn, args, resource_dict) + Executor->>TaskScheduler: submit(fn, args, resource_dict) + TaskScheduler->>TaskScheduler: Add to _future_queue + TaskScheduler-->>User: Return Future object + + Note over TaskScheduler, Spawner: Task loop in background thread + + TaskScheduler->>Spawner: bootup(command) + Spawner->>Backend: Start worker process + TaskScheduler->>Backend: Send function and arguments (ZMQ/File) + Backend->>Backend: Execute function + Backend->>TaskScheduler: Send result (ZMQ/File) + TaskScheduler->>User: Update Future with result +``` + +## Communication Modes + +`executorlib` supports two primary communication modes between the main process and the worker processes: + +### Interactive Communication (ZMQ-based) +Used by `SingleNodeExecutor` and `HPC Job Executor`. It leverages [ZeroMQ (ZMQ)](https://zeromq.org) and [cloudpickle](https://github.com/cloudpipe/cloudpickle) for high-performance, in-memory communication of Python objects. This mode is ideal for low-latency task distribution within an allocation. + +### File-based Communication +Used by the `HPC Cluster Executor`. It uses the filesystem to communicate between the main process and the individual HPC jobs. This mode is necessary when tasks are submitted as independent jobs to a scheduler like SLURM or Flux, where direct network communication between the login node and compute nodes might be restricted. + +## Resource Management + +One of the key features of `executorlib` is the ability to specify resources on a per-function-call basis using the `resource_dict`. + +* **`cores`**: Number of MPI ranks or CPU cores. +* **`threads_per_core`**: Number of OpenMP threads. +* **`gpus_per_core`**: Number of GPUs. +* **`cwd`**: Working directory for the task. + +The `TaskScheduler` ensures that these resource requirements are translated into appropriate commands for the `Spawner` (e.g., `mpiexec`, `srun`, or `flux run`). From a1f61a233e9dd215c1e48d699ca8200590f93a87 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Apr 2026 09:45:24 +0200 Subject: [PATCH 2/7] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/concepts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/concepts.md b/docs/concepts.md index ef2ca6e4..a2429a36 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -87,10 +87,10 @@ sequenceDiagram `executorlib` supports two primary communication modes between the main process and the worker processes: ### Interactive Communication (ZMQ-based) -Used by `SingleNodeExecutor` and `HPC Job Executor`. It leverages [ZeroMQ (ZMQ)](https://zeromq.org) and [cloudpickle](https://github.com/cloudpipe/cloudpickle) for high-performance, in-memory communication of Python objects. This mode is ideal for low-latency task distribution within an allocation. +Used by `SingleNodeExecutor`, `SlurmJobExecutor`, and `FluxJobExecutor`. It leverages [ZeroMQ (ZMQ)](https://zeromq.org) and [cloudpickle](https://github.com/cloudpipe/cloudpickle) for high-performance, in-memory communication of Python objects. This mode is ideal for low-latency task distribution within an allocation. ### File-based Communication -Used by the `HPC Cluster Executor`. It uses the filesystem to communicate between the main process and the individual HPC jobs. This mode is necessary when tasks are submitted as independent jobs to a scheduler like SLURM or Flux, where direct network communication between the login node and compute nodes might be restricted. +Used by `SlurmClusterExecutor` and `FluxClusterExecutor`. It uses the filesystem to communicate between the main process and the individual HPC jobs. This mode is necessary when tasks are submitted as independent jobs to a scheduler like SLURM or Flux, where direct network communication between the login node and compute nodes might be restricted. ## Resource Management From 8a03d632af0c6e5109185e0b5cfa2ff766899775 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Apr 2026 09:54:17 +0200 Subject: [PATCH 3/7] Fix sphinxcontrib-mermaid extension import path --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index bfbe62d3..faa7a683 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -15,7 +15,7 @@ launch_buttons: sphinx: extra_extensions: - - 'sphinxcontrib-mermaid' + - 'sphinxcontrib.mermaid' - 'sphinx.ext.autodoc' - 'sphinx.ext.napoleon' - 'sphinx.ext.viewcode' From 51b2f549835a8154b87af90e8f3ca5fbcf7f655e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Apr 2026 11:40:32 +0200 Subject: [PATCH 4/7] Documentation in jupyter notebook --- docs/_toc.yml | 1 - docs/concepts.md | 104 ---------- notebooks/5-developer.ipynb | 389 +----------------------------------- 3 files changed, 1 insertion(+), 493 deletions(-) delete mode 100644 docs/concepts.md diff --git a/docs/_toc.yml b/docs/_toc.yml index 854dc7d4..ca7887a9 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -2,7 +2,6 @@ format: jb-book root: README chapters: - file: installation.md -- file: concepts.md - file: 1-single-node.ipynb - file: 2-hpc-cluster.ipynb - file: 3-hpc-job.ipynb diff --git a/docs/concepts.md b/docs/concepts.md deleted file mode 100644 index a2429a36..00000000 --- a/docs/concepts.md +++ /dev/null @@ -1,104 +0,0 @@ -# Technical Concepts - -The `executorlib` package is designed to up-scale Python functions for High Performance Computing (HPC) by extending the standard Python `Executor` interface. This document explains the underlying technical concepts and the internal architecture of `executorlib`. - -## Internal Architecture - -The `executorlib` library is structured into four primary modules: - -* **`executor`**: Defines the user-facing `Executor` classes (e.g., `SingleNodeExecutor`, `SlurmClusterExecutor`, `SlurmJobExecutor`, `FluxClusterExecutor`, `FluxJobExecutor`). These classes provide the primary interface for users to submit tasks. -* **`task_scheduler`**: Manages the distribution and scheduling of tasks. It handles task queues, resource allocation, and coordinates with spawners. -* **`standalone`**: Contains utility functions and classes that do not depend on other internal modules. This includes serialization (using `cloudpickle`), ZMQ-based communication (`SocketInterface`), and input validation. -* **`backend`**: Contains the code executed by the worker processes to perform the actual function calls. - -## Class Hierarchy and Coupling - -The following diagram illustrates the relationship between the main classes in `executorlib`. - -```{mermaid} -classDiagram - class FutureExecutor { - <> - } - class BaseExecutor { - -_task_scheduler: TaskSchedulerBase - +submit(fn, *args, **kwargs) Future - +shutdown(wait) - } - class TaskSchedulerBase { - -_future_queue: Queue - -_process: Thread - +submit(fn, *args, **kwargs) Future - } - class BaseSpawner { - <> - +bootup(command_lst) - +shutdown(wait) - } - class SocketInterface { - +send_dict(input_dict) - +receive_dict() dict - } - - FutureExecutor <|-- BaseExecutor - BaseExecutor o-- TaskSchedulerBase - TaskSchedulerBase <|-- OneProcessTaskScheduler - TaskSchedulerBase <|-- BlockAllocationTaskScheduler - TaskSchedulerBase <|-- DependencyTaskScheduler - TaskSchedulerBase <|-- FileTaskScheduler - - OneProcessTaskScheduler o-- BaseSpawner - BaseSpawner <|-- MpiExecSpawner - BaseSpawner <|-- SrunSpawner - BaseSpawner <|-- FluxPythonSpawner - - OneProcessTaskScheduler ..> SocketInterface : uses -``` - -## Execution Flow - -When a user submits a function to an executor, several steps occur in the background to ensure the task is executed with the requested resources and the result is returned. - -```{mermaid} -sequenceDiagram - participant User - participant Executor - participant TaskScheduler - participant Spawner - participant Backend - - User->>Executor: submit(fn, args, resource_dict) - Executor->>TaskScheduler: submit(fn, args, resource_dict) - TaskScheduler->>TaskScheduler: Add to _future_queue - TaskScheduler-->>User: Return Future object - - Note over TaskScheduler, Spawner: Task loop in background thread - - TaskScheduler->>Spawner: bootup(command) - Spawner->>Backend: Start worker process - TaskScheduler->>Backend: Send function and arguments (ZMQ/File) - Backend->>Backend: Execute function - Backend->>TaskScheduler: Send result (ZMQ/File) - TaskScheduler->>User: Update Future with result -``` - -## Communication Modes - -`executorlib` supports two primary communication modes between the main process and the worker processes: - -### Interactive Communication (ZMQ-based) -Used by `SingleNodeExecutor`, `SlurmJobExecutor`, and `FluxJobExecutor`. It leverages [ZeroMQ (ZMQ)](https://zeromq.org) and [cloudpickle](https://github.com/cloudpipe/cloudpickle) for high-performance, in-memory communication of Python objects. This mode is ideal for low-latency task distribution within an allocation. - -### File-based Communication -Used by `SlurmClusterExecutor` and `FluxClusterExecutor`. It uses the filesystem to communicate between the main process and the individual HPC jobs. This mode is necessary when tasks are submitted as independent jobs to a scheduler like SLURM or Flux, where direct network communication between the login node and compute nodes might be restricted. - -## Resource Management - -One of the key features of `executorlib` is the ability to specify resources on a per-function-call basis using the `resource_dict`. - -* **`cores`**: Number of MPI ranks or CPU cores. -* **`threads_per_core`**: Number of OpenMP threads. -* **`gpus_per_core`**: Number of GPUs. -* **`cwd`**: Working directory for the task. - -The `TaskScheduler` ensures that these resource requirements are translated into appropriate commands for the `Spawner` (e.g., `mpiexec`, `srun`, or `flux run`). diff --git a/notebooks/5-developer.ipynb b/notebooks/5-developer.ipynb index 3fd4baec..9a371e88 100644 --- a/notebooks/5-developer.ipynb +++ b/notebooks/5-developer.ipynb @@ -1,388 +1 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "511b34e0-12af-4437-8915-79f033fe7cda", - "metadata": {}, - "source": [ - "# Support & Contribution\n", - "The executorlib open-source software package is developed by scientists for scientists. We are open for any contribution, from feedback about spelling mistakes in the documentation, to [raising issues](https://github.com/pyiron/executorlib/issues) about functionality which is insufficiently explained in the documentation or simply requesting support to suggesting new features or opening [pull requests](https://github.com/pyiron/executorlib/pulls). Our [Github repository](https://github.com/pyiron/executorlib) is the easiest way to get in contact with the developers. \n", - "\n", - "## Issues\n", - "The easiest way for us as developers to help in solving an issue is to provide us with sufficient information about how to reproduce the issue. The simpler the test case which causes the issue the easier it is to identify the part of the code which is causing the issue. As a general rule of thumb, everything that works with the [ProcessPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#processpoolexecutor) \n", - "or the [ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#threadpoolexecutor) should also work with the different Executor classes provided by executorlib. If this is not the case, then it is most likely a bug and worth reporting. \n", - "\n", - "## Pull Requests\n", - "Reviewing a pull request is easier when the changes are clearly lined out, covered by tests and following the automated formatting using black. Still when you decide to work on a new feature it can also be helpful to open a pull request early on and mark it as draft, this gives other developers the opportunity to see what you are working on. \n", - "\n", - "## License\n", - "```\n", - "BSD 3-Clause License\n", - "\n", - "Copyright (c) 2022, Jan Janssen\n", - "All rights reserved.\n", - "\n", - "Redistribution and use in source and binary forms, with or without\n", - "modification, are permitted provided that the following conditions are met:\n", - "\n", - "* Redistributions of source code must retain the above copyright notice, this\n", - " list of conditions and the following disclaimer.\n", - "\n", - "* Redistributions in binary form must reproduce the above copyright notice,\n", - " this list of conditions and the following disclaimer in the documentation\n", - " and/or other materials provided with the distribution.\n", - "\n", - "* Neither the name of the copyright holder nor the names of its\n", - " contributors may be used to endorse or promote products derived from\n", - " this software without specific prior written permission.\n", - "\n", - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n", - "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", - "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n", - "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n", - "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n", - "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n", - "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n", - "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n", - "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n", - "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "```\n", - "\n", - "## Modules\n", - "While it is not recommended to link to specific internal components of executorlib in external Python packages but rather only the `Executor` classes should be used as central interfaces to executorlib, the internal architecture is briefly outlined below. \n", - "* `backend` - the backend module contains the functionality for the Python processes created by executorlib to execute the submitted Python functions.\n", - "* `executor` - the executor module defines the different `Executor` classes, namely `SingleNodeExecutor`, `SlurmClusterExecutor`, `SlurmJobExecutor`, `FluxClusterExecutor` and `FluxJobExecutor`. These are the interfaces the user interacts with.\n", - "* `standalone` - the standalone module contains a number of utility functions which only depend on external libraries and do not have any internal dependency to other parts of `executorlib`. This includes the functionality to generate executable commands, the [h5py](https://www.h5py.org) based interface for caching, a number of input checks, routines to plot the dependencies of a number of future objects, functionality to interact with the [queues defined in the Python standard library](https://docs.python.org/3/library/queue.html), the interface for serialization based on [cloudpickle](https://github.com/cloudpipe/cloudpickle) and finally an extension to the [threading](https://docs.python.org/3/library/threading.html) of the Python standard library.\n", - "* `task_scheduler` - the internal task scheduler module defines the task schedulers, namely `BlockAllocationTaskScheduler`, `DependencyTaskScheduler`, `FileTaskScheduler` and `OneProcessTaskScheduler`. They are divided into two sub modules:\n", - " * `file` - the file based task scheduler module defines the file based communication for the [HPC Cluster Executor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html).\n", - " * `interactive` - the interactive task scheduler module defines the [zero message queue](https://zeromq.org) based communication for the [Single Node Executor](https://executorlib.readthedocs.io/en/latest/1-single-node.html) and the [HPC Job Executor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html).\n", - "\n", - "Given the level of separation the integration of submodules from the standalone module in external software packages should be the easiest way to benefit from the developments in executorlib beyond just using the `Executor` class. \n", - "\n", - "## Interface Class Hierarchy\n", - "executorlib provides five different interfaces, namely `SingleNodeExecutor`, `SlurmClusterExecutor`, `SlurmJobExecutor`, `FluxClusterExecutor` and `FluxJobExecutor`, internally these are mapped to four types of task schedulers, namely `BlockAllocationTaskScheduler`, `DependencyTaskScheduler`, `FileTaskScheduler` and `OneProcessTaskScheduler` depending on which options are selected. Finally, the task schedulers are connected to spawners to start new processes, namely the `MpiExecSpawner`, `SrunSpawner` and `FluxPythonSpawner`. The dependence is illustrated in the following table:\n", - "\n", - "| | `BlockAllocationTaskScheduler` | `DependencyTaskScheduler` | `FileTaskScheduler` | `OneProcessTaskScheduler` |\n", - "|-------------------------------------------------------------------------|--------------------------------|---------------------------|---------------------|---------------------------|\n", - "| `SingleNodeExecutor(disable_dependencies=False)` | | with `MpiExecSpawner` | | |\n", - "| `SingleNodeExecutor(disable_dependencies=True, block_allocation=False)` | | | | with `MpiExecSpawner` |\n", - "| `SingleNodeExecutor(disable_dependencies=True, block_allocation=True)` | with `MpiExecSpawner` | | | |\n", - "| `SlurmClusterExecutor(plot_dependency_graph=False)` | | | with `pysqa` | |\n", - "| `SlurmClusterExecutor(plot_dependency_graph=True)` | | with `SrunSpawner` | | |\n", - "| `SlurmJobExecutor(disable_dependencies=False)` | | with `SrunSpawner` | | |\n", - "| `SlurmJobExecutor(disable_dependencies=True, block_allocation=False)` | | | | with `SrunSpawner` |\n", - "| `SlurmJobExecutor(disable_dependencies=True, block_allocation=True)` | with `SrunSpawner` | | | |\n", - "| `FluxClusterExecutor(plot_dependency_graph=False)` | | | with `pysqa` | |\n", - "| `FluxClusterExecutor(plot_dependency_graph=True)` | | with `FluxPythonSpawner` | | |\n", - "| `FluxJobExecutor(disable_dependencies=False)` | | with `FluxPythonSpawner` | | |\n", - "| `FluxJobExecutor(disable_dependencies=True, block_allocation=False)` | | | | with `FluxPythonSpawner` |\n", - "| `FluxJobExecutor(disable_dependencies=True, block_allocation=True)` | with `FluxPythonSpawner` | | | |\n", - "\n", - "In addition, the following UML diagrams give an overview of the class hierarchy of executorlib:\n", - "![uml_executor](images/uml_executor.png)\n", - "\n", - "![uml_spawner](images/uml_spawner.png)" - ] - }, - { - "cell_type": "markdown", - "id": "c9df5ba2-9036-422c-b9af-a5d05944aa1f", - "metadata": {}, - "source": [ - "## Test Environment\n", - "The test environment of the executorlib library consists of three components - they are all available in the executorlib [Github repository](https://github.com/pyiron/executorlib):\n", - "* The [Jupyter Notebooks](https://github.com/pyiron/executorlib/tree/main/notebooks) in the executorlib Github repository demonstrate the usage of executorlib. These notebooks are used as examples for new users, as documentation available on [readthedocs.org](https://executorlib.readthedocs.io) and as integration tests.\n", - "* The [likelihood benchmark](https://github.com/pyiron/executorlib/blob/main/tests/benchmark/llh.py) to compare the performance on a single compute node to the built-in interfaces in the standard library. The benchmark can be run with the following parameters `python llh.py static`. Here `static` refers to single process execution, `process` refers to the `ProcessPoolExecutor` from the standard library, `thread` refers to the `ThreadPoolExecutor` from the standard library, `executorlib` refers to the `SingleNodeExecutor` in executorlib and `block_allocation` to the `SingleNodeExecutor` in `executorlib` with block allocation enabled. Finally, for comparison to `mpi4py` the test can be executed with `mpiexec -n 4 python -m mpi4py.futures llh.py mpi4py`.\n", - "* The [unit tests](https://github.com/pyiron/executorlib/tree/main/tests) these can be executed with `python -m unittest discover .` in the `tests` directory. The tests are structured based on the internal structure of executorlib. Tests for the `SingleNodeExecutor` are named `test_singlenodeexecutor_*.py` and correspondingly for the other modules. " - ] - }, - { - "cell_type": "markdown", - "id": "7bc073aa-6036-48e7-9696-37af050d438a", - "metadata": {}, - "source": [ - "## Communication\n", - "The key functionality of the executorlib package is the up-scaling of python functions with thread based parallelism, MPI based parallelism or by assigning GPUs to individual python functions. In the background this is realized using a combination of the [zero message queue](https://zeromq.org) and [cloudpickle](https://github.com/cloudpipe/cloudpickle)\n", - "to communicate binary python objects. The `executorlib.standalone.interactive.communication.SocketInterface` is an abstraction of this \n", - "interface, which is used in the other classes inside `executorlib` and might also be helpful for other projects. It comes with a series of utility functions:\n", - "\n", - "* `executorlib.standalone.interactive.communication.interface_bootup()`: To initialize the interface\n", - "* `executorlib.standalone.interactive.communication.interface_connect()`: To connect the interface to another instance\n", - "* `executorlib.standalone.interactive.communication.interface_send()`: To send messages via this interface \n", - "* `executorlib.standalone.interactive.communication.interface_receive()`: To receive messages via this interface \n", - "* `executorlib.standalone.interactive.communication.interface_shutdown()`: To shutdown the interface\n", - "\n", - "While executorlib was initially designed for up-scaling python functions for HPC, the same functionality can be\n", - "leveraged to up-scale any executable independent of the programming language it is developed in.\n", - "\n", - "## External Libraries\n", - "For external libraries executorlib provides a standardized interface for a subset of its internal functionality, which is designed to remain stable with minor version updates. Developers can import the following functionality from `executorlib.api`:\n", - "* `cancel_items_in_queue()` - Cancel items which are still waiting in the Python standard library queue - `queue.queue`.\n", - "* `cloudpickle_register()` - Cloudpickle can either pickle by value or pickle by reference. The functions which are communicated have to be pickled by value rather than by reference, so the module which calls the map function is pickled by value.\n", - "* `get_command_path()` - Get path of the backend executable script `executorlib.backend`.\n", - "* `interface_bootup()` - Start interface for ZMQ communication.\n", - "* `interface_connect()` - Connect to an existing `SocketInterface` instance by providing the hostname and the port as strings.\n", - "* `interface_receive()` - Receive instructions from a `SocketInterface` instance.\n", - "* `interface_send()` - Send results to a `SocketInterface` instance.\n", - "* `interface_shutdown()` - Close the connection to a `SocketInterface` instance.\n", - "* `MpiExecSpawner` - Subprocess interface to start `mpi4py` parallel process.\n", - "* `SocketInterface` - The `SocketInterface` is an abstraction layer on top of the zero message queue.\n", - "* `SubprocessSpawner` - Subprocess interface to start serial Python process.\n", - "\n", - "It is not recommended to import components from other parts of executorlib in other libraries, only the interfaces in `executorlib` and `executorlib.api` are designed to be stable. All other classes and functions are considered for internal use only." - ] - }, - { - "cell_type": "markdown", - "id": "8754df33-fa95-4ca6-ae02-6669967cf4e7", - "metadata": {}, - "source": [ - "## External Executables\n", - "On extension beyond the submission of Python functions is the communication with an external executable. This could be any kind of program written in any programming language which does not provide Python bindings so it cannot be represented in Python functions. " - ] - }, - { - "cell_type": "markdown", - "id": "75af1f8a-7ad7-441f-80a2-5c337484097f", - "metadata": {}, - "source": [ - "### Subprocess\n", - "If the external executable is called only once, then the call to the external executable can be represented in a Python function with the [subprocess](https://docs.python.org/3/library/subprocess.html) module of the Python standard library. In the example below the shell command `echo test` is submitted to the `execute_shell_command()` function, which itself is submitted to the `Executor` class." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "83515b16-c4d5-4b02-acd7-9e1eb57fd335", - "metadata": {}, - "outputs": [], - "source": [ - "from executorlib import SingleNodeExecutor" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f1ecee94-24a6-4bf9-8a3d-d50eba994367", - "metadata": {}, - "outputs": [], - "source": [ - "def execute_shell_command(\n", - " command: list, universal_newlines: bool = True, shell: bool = False\n", - "):\n", - " import subprocess\n", - "\n", - " return subprocess.check_output(\n", - " command, universal_newlines=universal_newlines, shell=shell\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "32ef5b63-3245-4336-ac0e-b4a6673ee362", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "test\n", - "\n" - ] - } - ], - "source": [ - "with SingleNodeExecutor() as exe:\n", - " future = exe.submit(\n", - " execute_shell_command,\n", - " [\"echo\", \"test\"],\n", - " universal_newlines=True,\n", - " shell=False,\n", - " )\n", - " print(future.result())" - ] - }, - { - "cell_type": "markdown", - "id": "54837938-01e0-4dd3-b989-1133d3318929", - "metadata": {}, - "source": [ - "### Interactive\n", - "The more complex case is the interaction with an external executable during the run time of the executable. This can be implemented with executorlib using the block allocation `block_allocation=True` feature. The external executable is started as part of the initialization function `init_function` and then the indivdual functions submitted to the `Executor` class interact with the process which is connected to the external executable. \n", - "\n", - "Starting with the definition of the executable, in this example it is a simple script which just increases a counter. The script is written in the file `count.py` so it behaves like an external executable, which could also use any other progamming language. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "dedf138f-3003-4a91-9f92-03983ac7de08", - "metadata": {}, - "outputs": [], - "source": [ - "count_script = \"\"\"\\\n", - "def count(iterations):\n", - " for i in range(int(iterations)):\n", - " print(i)\n", - " print(\"done\")\n", - "\n", - "\n", - "if __name__ == \"__main__\":\n", - " while True:\n", - " user_input = input()\n", - " if \"shutdown\" in user_input:\n", - " break\n", - " else:\n", - " count(iterations=int(user_input))\n", - "\"\"\"\n", - "\n", - "with open(\"count.py\", \"w\") as f:\n", - " f.writelines(count_script)" - ] - }, - { - "cell_type": "markdown", - "id": "771b5b84-48f0-4989-a2c8-c8dcb4462781", - "metadata": {}, - "source": [ - "The connection to the external executable is established in the initialization function `init_function` of the `Executor` class. By using the [subprocess](https://docs.python.org/3/library/subprocess.html) module from the standard library two process pipes are created to communicate with the external executable. One process pipe is connected to the standard input `stdin` and the other is connected to the standard output `stdout`. " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "8fe76668-0f18-40b7-9719-de47dacb0911", - "metadata": {}, - "outputs": [], - "source": [ - "def init_process():\n", - " import subprocess\n", - "\n", - " return {\n", - " \"process\": subprocess.Popen(\n", - " [\"python\", \"count.py\"],\n", - " stdin=subprocess.PIPE,\n", - " stdout=subprocess.PIPE,\n", - " universal_newlines=True,\n", - " shell=False,\n", - " )\n", - " }" - ] - }, - { - "cell_type": "markdown", - "id": "09dde7a1-2b43-4be7-ba36-38200b9fddf0", - "metadata": {}, - "source": [ - "The interaction function handles the data conversion from the Python datatypes to the strings which can be communicated to the external executable. It is important to always add a new line `\\n` to each command send via the standard input `stdin` to the external executable and afterwards flush the pipe by calling `flush()` on the standard input pipe `stdin`. " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "7556f2bd-176f-4275-a87d-b5c940267888", - "metadata": {}, - "outputs": [], - "source": [ - "def interact(shell_input, process, lines_to_read=None, stop_read_pattern=None):\n", - " process.stdin.write(shell_input)\n", - " process.stdin.flush()\n", - " lines_count = 0\n", - " output = \"\"\n", - " while True:\n", - " output_current = process.stdout.readline()\n", - " output += output_current\n", - " lines_count += 1\n", - " if stop_read_pattern is not None and stop_read_pattern in output_current:\n", - " break\n", - " elif lines_to_read is not None and lines_to_read == lines_count:\n", - " break\n", - " return output" - ] - }, - { - "cell_type": "markdown", - "id": "5484b98b-546f-4f2c-8db1-919ce215e228", - "metadata": {}, - "source": [ - "Finally, to close the process after the external executable is no longer required it is recommended to define a shutdown function, which communicates to the external executable that it should shutdown. In the case of the `count.py` script defined above this is achieved by sending the keyword `shutdown`. " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "d5344d2b-cb53-4d38-8cae-621e3b98bb56", - "metadata": {}, - "outputs": [], - "source": [ - "def shutdown(process):\n", - " process.stdin.write(\"shutdown\\n\")\n", - " process.stdin.flush()" - ] - }, - { - "cell_type": "markdown", - "id": "3899467c-dc54-41cb-b05e-b60f5cf97e46", - "metadata": {}, - "source": [ - "With these utility functions is to possible to communicate with any kind of external executable. Still for the specific implementation of the external executable it might be necessary to adjust the corresponding Python functions. Therefore this functionality is currently limited to developers and not considered a general feature of executorlib. " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "747c1b78-4804-467b-9ac8-8144d8031da3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "done\n", - "\n", - "None\n" - ] - } - ], - "source": [ - "with SingleNodeExecutor(\n", - " max_workers=1,\n", - " init_function=init_process,\n", - " block_allocation=True,\n", - ") as exe:\n", - " future = exe.submit(\n", - " interact, shell_input=\"4\\n\", lines_to_read=5, stop_read_pattern=None\n", - " )\n", - " print(future.result())\n", - " future_shutdown = exe.submit(shutdown)\n", - " print(future_shutdown.result())" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.12.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} +{"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.13.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"511b34e0-12af-4437-8915-79f033fe7cda","cell_type":"markdown","source":"# Support & Contribution\nThe executorlib open-source software package is developed by scientists for scientists. We are open for any contribution, from feedback about spelling mistakes in the documentation, to [raising issues](https://github.com/pyiron/executorlib/issues) about functionality which is insufficiently explained in the documentation or simply requesting support to suggesting new features or opening [pull requests](https://github.com/pyiron/executorlib/pulls). Our [Github repository](https://github.com/pyiron/executorlib) is the easiest way to get in contact with the developers. \n\n## Issues\nThe easiest way for us as developers to help in solving an issue is to provide us with sufficient information about how to reproduce the issue. The simpler the test case which causes the issue the easier it is to identify the part of the code which is causing the issue. As a general rule of thumb, everything that works with the [ProcessPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#processpoolexecutor) \nor the [ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#threadpoolexecutor) should also work with the different Executor classes provided by executorlib. If this is not the case, then it is most likely a bug and worth reporting. \n\n## Pull Requests\nReviewing a pull request is easier when the changes are clearly lined out, covered by tests and following the automated formatting using black. Still when you decide to work on a new feature it can also be helpful to open a pull request early on and mark it as draft, this gives other developers the opportunity to see what you are working on. \n\n## License\n```\nBSD 3-Clause License\n\nCopyright (c) 2022, Jan Janssen\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```\n\n## Modules\nWhile it is not recommended to link to specific internal components of executorlib in external Python packages but rather only the `Executor` classes should be used as central interfaces to executorlib, the internal architecture is briefly outlined below. \n* `backend` - the backend module contains the functionality for the Python processes created by executorlib to execute the submitted Python functions.\n* `executor` - the executor module defines the different `Executor` classes, namely `SingleNodeExecutor`, `SlurmClusterExecutor`, `SlurmJobExecutor`, `FluxClusterExecutor` and `FluxJobExecutor`. These are the interfaces the user interacts with.\n* `standalone` - the standalone module contains a number of utility functions which only depend on external libraries and do not have any internal dependency to other parts of `executorlib`. This includes the functionality to generate executable commands, the [h5py](https://www.h5py.org) based interface for caching, a number of input checks, routines to plot the dependencies of a number of future objects, functionality to interact with the [queues defined in the Python standard library](https://docs.python.org/3/library/queue.html), the interface for serialization based on [cloudpickle](https://github.com/cloudpipe/cloudpickle) and finally an extension to the [threading](https://docs.python.org/3/library/threading.html) of the Python standard library.\n* `task_scheduler` - the internal task scheduler module defines the task schedulers, namely `BlockAllocationTaskScheduler`, `DependencyTaskScheduler`, `FileTaskScheduler` and `OneProcessTaskScheduler`. They are divided into two sub modules:\n * `file` - the file based task scheduler module defines the file based communication for the [HPC Cluster Executor](https://executorlib.readthedocs.io/en/latest/2-hpc-cluster.html).\n * `interactive` - the interactive task scheduler module defines the [zero message queue](https://zeromq.org) based communication for the [Single Node Executor](https://executorlib.readthedocs.io/en/latest/1-single-node.html) and the [HPC Job Executor](https://executorlib.readthedocs.io/en/latest/3-hpc-job.html).\n\nGiven the level of separation the integration of submodules from the standalone module in external software packages should be the easiest way to benefit from the developments in executorlib beyond just using the `Executor` class. \n\n## Interface Class Hierarchy\nexecutorlib provides five different interfaces, namely `SingleNodeExecutor`, `SlurmClusterExecutor`, `SlurmJobExecutor`, `FluxClusterExecutor` and `FluxJobExecutor`, internally these are mapped to four types of task schedulers, namely `BlockAllocationTaskScheduler`, `DependencyTaskScheduler`, `FileTaskScheduler` and `OneProcessTaskScheduler` depending on which options are selected. Finally, the task schedulers are connected to spawners to start new processes, namely the `MpiExecSpawner`, `SrunSpawner` and `FluxPythonSpawner`. The dependence is illustrated in the following table:\n\n| | `BlockAllocationTaskScheduler` | `DependencyTaskScheduler` | `FileTaskScheduler` | `OneProcessTaskScheduler` |\n|-------------------------------------------------------------------------|--------------------------------|---------------------------|---------------------|---------------------------|\n| `SingleNodeExecutor(disable_dependencies=False)` | | with `MpiExecSpawner` | | |\n| `SingleNodeExecutor(disable_dependencies=True, block_allocation=False)` | | | | with `MpiExecSpawner` |\n| `SingleNodeExecutor(disable_dependencies=True, block_allocation=True)` | with `MpiExecSpawner` | | | |\n| `SlurmClusterExecutor(plot_dependency_graph=False)` | | | with `pysqa` | |\n| `SlurmClusterExecutor(plot_dependency_graph=True)` | | with `SrunSpawner` | | |\n| `SlurmJobExecutor(disable_dependencies=False)` | | with `SrunSpawner` | | |\n| `SlurmJobExecutor(disable_dependencies=True, block_allocation=False)` | | | | with `SrunSpawner` |\n| `SlurmJobExecutor(disable_dependencies=True, block_allocation=True)` | with `SrunSpawner` | | | |\n| `FluxClusterExecutor(plot_dependency_graph=False)` | | | with `pysqa` | |\n| `FluxClusterExecutor(plot_dependency_graph=True)` | | with `FluxPythonSpawner` | | |\n| `FluxJobExecutor(disable_dependencies=False)` | | with `FluxPythonSpawner` | | |\n| `FluxJobExecutor(disable_dependencies=True, block_allocation=False)` | | | | with `FluxPythonSpawner` |\n| `FluxJobExecutor(disable_dependencies=True, block_allocation=True)` | with `FluxPythonSpawner` | | | |\n\nThe following diagram illustrates the relationship between the main classes in `executorlib`.\n\n```{mermaid}\nclassDiagram\n class FutureExecutor {\n <>\n }\n class BaseExecutor {\n -_task_scheduler: TaskSchedulerBase\n +submit(fn, *args, **kwargs) Future\n +shutdown(wait)\n }\n class TaskSchedulerBase {\n -_future_queue: Queue\n -_process: Thread\n +submit(fn, *args, **kwargs) Future\n }\n class BaseSpawner {\n <>\n +bootup(command_lst)\n +shutdown(wait)\n }\n class SocketInterface {\n +send_dict(input_dict)\n +receive_dict() dict\n }\n\n FutureExecutor <|-- BaseExecutor\n BaseExecutor o-- TaskSchedulerBase\n TaskSchedulerBase <|-- OneProcessTaskScheduler\n TaskSchedulerBase <|-- BlockAllocationTaskScheduler\n TaskSchedulerBase <|-- DependencyTaskScheduler\n TaskSchedulerBase <|-- FileTaskScheduler\n\n OneProcessTaskScheduler o-- BaseSpawner\n BaseSpawner <|-- MpiExecSpawner\n BaseSpawner <|-- SrunSpawner\n BaseSpawner <|-- FluxPythonSpawner\n\n OneProcessTaskScheduler ..> SocketInterface : uses\n```\n\n## Execution Flow\n\nWhen a user submits a function to an executor, several steps occur in the background to ensure the task is executed with the requested resources and the result is returned.\n\n```{mermaid}\nsequenceDiagram\n participant User\n participant Executor\n participant TaskScheduler\n participant Spawner\n participant Backend\n\n User->>Executor: submit(fn, args, resource_dict)\n Executor->>TaskScheduler: submit(fn, args, resource_dict)\n TaskScheduler->>TaskScheduler: Add to _future_queue\n TaskScheduler-->>User: Return Future object\n\n Note over TaskScheduler, Spawner: Task loop in background thread\n\n TaskScheduler->>Spawner: bootup(command)\n Spawner->>Backend: Start worker process\n TaskScheduler->>Backend: Send function and arguments (ZMQ/File)\n Backend->>Backend: Execute function\n Backend->>TaskScheduler: Send result (ZMQ/File)\n TaskScheduler->>User: Update Future with result\n```","metadata":{}},{"id":"c9df5ba2-9036-422c-b9af-a5d05944aa1f","cell_type":"markdown","source":"## Test Environment\nThe test environment of the executorlib library consists of three components - they are all available in the executorlib [Github repository](https://github.com/pyiron/executorlib):\n* The [Jupyter Notebooks](https://github.com/pyiron/executorlib/tree/main/notebooks) in the executorlib Github repository demonstrate the usage of executorlib. These notebooks are used as examples for new users, as documentation available on [readthedocs.org](https://executorlib.readthedocs.io) and as integration tests.\n* The [likelihood benchmark](https://github.com/pyiron/executorlib/blob/main/tests/benchmark/llh.py) to compare the performance on a single compute node to the built-in interfaces in the standard library. The benchmark can be run with the following parameters `python llh.py static`. Here `static` refers to single process execution, `process` refers to the `ProcessPoolExecutor` from the standard library, `thread` refers to the `ThreadPoolExecutor` from the standard library, `executorlib` refers to the `SingleNodeExecutor` in executorlib and `block_allocation` to the `SingleNodeExecutor` in `executorlib` with block allocation enabled. Finally, for comparison to `mpi4py` the test can be executed with `mpiexec -n 4 python -m mpi4py.futures llh.py mpi4py`.\n* The [unit tests](https://github.com/pyiron/executorlib/tree/main/tests) these can be executed with `python -m unittest discover .` in the `tests` directory. The tests are structured based on the internal structure of executorlib. Tests for the `SingleNodeExecutor` are named `test_singlenodeexecutor_*.py` and correspondingly for the other modules. ","metadata":{}},{"id":"7bc073aa-6036-48e7-9696-37af050d438a","cell_type":"markdown","source":"## Communication\n### Interactive Communication\nThe key functionality of the executorlib package is the up-scaling of python functions with thread based parallelism, MPI based parallelism or by assigning GPUs to individual python functions. In the background this is realized using a combination of the [zero message queue](https://zeromq.org) and [cloudpickle](https://github.com/cloudpipe/cloudpickle)\nto communicate binary python objects. The `executorlib.standalone.interactive.communication.SocketInterface` is an abstraction of this \ninterface, which is used in the other classes inside `executorlib` and might also be helpful for other projects. It comes with a series of utility functions:\n\n* `executorlib.standalone.interactive.communication.interface_bootup()`: To initialize the interface\n* `executorlib.standalone.interactive.communication.interface_connect()`: To connect the interface to another instance\n* `executorlib.standalone.interactive.communication.interface_send()`: To send messages via this interface \n* `executorlib.standalone.interactive.communication.interface_receive()`: To receive messages via this interface \n* `executorlib.standalone.interactive.communication.interface_shutdown()`: To shutdown the interface\n\nWhile executorlib was initially designed for up-scaling python functions for HPC, the same functionality can be\nleveraged to up-scale any executable independent of the programming language it is developed in.\n\n### File-based Communication\nUsed by `FluxClusterExecutor`, `SlurmClusterExecutor` and `TestClusterExecutor`. It uses the filesystem to communicate between the main process and the individual HPC jobs. This mode is necessary when tasks are submitted as independent jobs to a scheduler like SLURM or Flux, where direct network communication between the login node and compute nodes might be restricted.\n\n## External Libraries\nFor external libraries executorlib provides a standardized interface for a subset of its internal functionality, which is designed to remain stable with minor version updates. Developers can import the following functionality from `executorlib.api`:\n* `cancel_items_in_queue()` - Cancel items which are still waiting in the Python standard library queue - `queue.queue`.\n* `cloudpickle_register()` - Cloudpickle can either pickle by value or pickle by reference. The functions which are communicated have to be pickled by value rather than by reference, so the module which calls the map function is pickled by value.\n* `get_command_path()` - Get path of the backend executable script `executorlib.backend`.\n* `interface_bootup()` - Start interface for ZMQ communication.\n* `interface_connect()` - Connect to an existing `SocketInterface` instance by providing the hostname and the port as strings.\n* `interface_receive()` - Receive instructions from a `SocketInterface` instance.\n* `interface_send()` - Send results to a `SocketInterface` instance.\n* `interface_shutdown()` - Close the connection to a `SocketInterface` instance.\n* `MpiExecSpawner` - Subprocess interface to start `mpi4py` parallel process.\n* `SocketInterface` - The `SocketInterface` is an abstraction layer on top of the zero message queue.\n* `SubprocessSpawner` - Subprocess interface to start serial Python process.\n\nIt is not recommended to import components from other parts of executorlib in other libraries, only the interfaces in `executorlib` and `executorlib.api` are designed to be stable. All other classes and functions are considered for internal use only.","metadata":{}},{"id":"8754df33-fa95-4ca6-ae02-6669967cf4e7","cell_type":"markdown","source":"## External Executables\nOn extension beyond the submission of Python functions is the communication with an external executable. This could be any kind of program written in any programming language which does not provide Python bindings so it cannot be represented in Python functions. ","metadata":{}},{"id":"75af1f8a-7ad7-441f-80a2-5c337484097f","cell_type":"markdown","source":"### Subprocess\nIf the external executable is called only once, then the call to the external executable can be represented in a Python function with the [subprocess](https://docs.python.org/3/library/subprocess.html) module of the Python standard library. In the example below the shell command `echo test` is submitted to the `execute_shell_command()` function, which itself is submitted to the `Executor` class.","metadata":{}},{"id":"83515b16-c4d5-4b02-acd7-9e1eb57fd335","cell_type":"code","source":"from executorlib import SingleNodeExecutor","metadata":{"trusted":true},"outputs":[],"execution_count":1},{"id":"f1ecee94-24a6-4bf9-8a3d-d50eba994367","cell_type":"code","source":"def execute_shell_command(\n command: list, universal_newlines: bool = True, shell: bool = False\n):\n import subprocess\n\n return subprocess.check_output(\n command, universal_newlines=universal_newlines, shell=shell\n )","metadata":{"trusted":true},"outputs":[],"execution_count":2},{"id":"32ef5b63-3245-4336-ac0e-b4a6673ee362","cell_type":"code","source":"with SingleNodeExecutor() as exe:\n future = exe.submit(\n execute_shell_command,\n [\"echo\", \"test\"],\n universal_newlines=True,\n shell=False,\n )\n print(future.result())","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"test\n\n"}],"execution_count":3},{"id":"54837938-01e0-4dd3-b989-1133d3318929","cell_type":"markdown","source":"### Interactive\nThe more complex case is the interaction with an external executable during the run time of the executable. This can be implemented with executorlib using the block allocation `block_allocation=True` feature. The external executable is started as part of the initialization function `init_function` and then the indivdual functions submitted to the `Executor` class interact with the process which is connected to the external executable. \n\nStarting with the definition of the executable, in this example it is a simple script which just increases a counter. The script is written in the file `count.py` so it behaves like an external executable, which could also use any other progamming language. ","metadata":{}},{"id":"dedf138f-3003-4a91-9f92-03983ac7de08","cell_type":"code","source":"count_script = \"\"\"\\\ndef count(iterations):\n for i in range(int(iterations)):\n print(i)\n print(\"done\")\n\n\nif __name__ == \"__main__\":\n while True:\n user_input = input()\n if \"shutdown\" in user_input:\n break\n else:\n count(iterations=int(user_input))\n\"\"\"\n\nwith open(\"count.py\", \"w\") as f:\n f.writelines(count_script)","metadata":{"trusted":true},"outputs":[],"execution_count":4},{"id":"771b5b84-48f0-4989-a2c8-c8dcb4462781","cell_type":"markdown","source":"The connection to the external executable is established in the initialization function `init_function` of the `Executor` class. By using the [subprocess](https://docs.python.org/3/library/subprocess.html) module from the standard library two process pipes are created to communicate with the external executable. One process pipe is connected to the standard input `stdin` and the other is connected to the standard output `stdout`. ","metadata":{}},{"id":"8fe76668-0f18-40b7-9719-de47dacb0911","cell_type":"code","source":"def init_process():\n import subprocess\n\n return {\n \"process\": subprocess.Popen(\n [\"python\", \"count.py\"],\n stdin=subprocess.PIPE,\n stdout=subprocess.PIPE,\n universal_newlines=True,\n shell=False,\n )\n }","metadata":{"trusted":true},"outputs":[],"execution_count":5},{"id":"09dde7a1-2b43-4be7-ba36-38200b9fddf0","cell_type":"markdown","source":"The interaction function handles the data conversion from the Python datatypes to the strings which can be communicated to the external executable. It is important to always add a new line `\\n` to each command send via the standard input `stdin` to the external executable and afterwards flush the pipe by calling `flush()` on the standard input pipe `stdin`. ","metadata":{}},{"id":"7556f2bd-176f-4275-a87d-b5c940267888","cell_type":"code","source":"def interact(shell_input, process, lines_to_read=None, stop_read_pattern=None):\n process.stdin.write(shell_input)\n process.stdin.flush()\n lines_count = 0\n output = \"\"\n while True:\n output_current = process.stdout.readline()\n output += output_current\n lines_count += 1\n if stop_read_pattern is not None and stop_read_pattern in output_current:\n break\n elif lines_to_read is not None and lines_to_read == lines_count:\n break\n return output","metadata":{"trusted":true},"outputs":[],"execution_count":6},{"id":"5484b98b-546f-4f2c-8db1-919ce215e228","cell_type":"markdown","source":"Finally, to close the process after the external executable is no longer required it is recommended to define a shutdown function, which communicates to the external executable that it should shutdown. In the case of the `count.py` script defined above this is achieved by sending the keyword `shutdown`. ","metadata":{}},{"id":"d5344d2b-cb53-4d38-8cae-621e3b98bb56","cell_type":"code","source":"def shutdown(process):\n process.stdin.write(\"shutdown\\n\")\n process.stdin.flush()","metadata":{"trusted":true},"outputs":[],"execution_count":7},{"id":"3899467c-dc54-41cb-b05e-b60f5cf97e46","cell_type":"markdown","source":"With these utility functions is to possible to communicate with any kind of external executable. Still for the specific implementation of the external executable it might be necessary to adjust the corresponding Python functions. Therefore this functionality is currently limited to developers and not considered a general feature of executorlib. ","metadata":{}},{"id":"747c1b78-4804-467b-9ac8-8144d8031da3","cell_type":"code","source":"with SingleNodeExecutor(\n max_workers=1,\n init_function=init_process,\n block_allocation=True,\n) as exe:\n future = exe.submit(\n interact, shell_input=\"4\\n\", lines_to_read=5, stop_read_pattern=None\n )\n print(future.result())\n future_shutdown = exe.submit(shutdown)\n print(future_shutdown.result())","metadata":{"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"0\n1\n2\n3\ndone\n\nNone\n"}],"execution_count":8}]} \ No newline at end of file From 58bcd39f77315e599847bad9bf60b627aeede8a3 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Apr 2026 11:41:40 +0200 Subject: [PATCH 5/7] Remove unused images --- notebooks/images/uml_executor.png | Bin 130762 -> 0 bytes notebooks/images/uml_spawner.png | Bin 90591 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 notebooks/images/uml_executor.png delete mode 100644 notebooks/images/uml_spawner.png diff --git a/notebooks/images/uml_executor.png b/notebooks/images/uml_executor.png deleted file mode 100644 index 2ca2e18e34987e5e11978937253abff650bbc3a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130762 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 diff --git a/notebooks/images/uml_spawner.png b/notebooks/images/uml_spawner.png deleted file mode 100644 index 6b140458f3ce4816a4a458dc84d2ca5ba30d215a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90591 zcmeEuXINC((sk2-5)4EU6=@NXj3R=HK%<}_ph!lN3Mhz8&bh&akr5CD1tckA1Cn!4 zL4uNVmLNIj)cw_&kudi%&z(Qtzt?%5vF&iqK6}@$TD5A`_EElgeml(`8Wak(U0zN` z1%;x5m*`NcE%4W3A9p|eMR8MFNg9Rv^o(}-8YTQ2V<@MhghDxUp-`T8;9KyPCw$ND z2nscL6@@zW5`|*1e4TmuG<=|JtR;U#NeRUZuc=UIG6obmyds1DQ1?wy6o0-(q2NmJ zhdhjI{nIe?>ZeqwF!I&c=uqT~TC<~dFvw%3YFf5hN{XipEpUR@j4ZAj3p(N~kuRW5 zJD!4_%9D`i<+I0&%TL}&hfmOWlV9#<~A@iNl~$* zr~kaoe|@q(&<(%TTK}c+5s?!cf4bqL|NQA$i`y2~s+QLbjU`v_w&AS}-$n+0>XNmo zG0Z74bI8~K>%HIKKP`kz>xOCmYYqQ=7Zy>H=Csh7K}gbY1YPJrp|B`<8EG{~vf(!B z>?d`^ZxbCy{T^Tbb-mP2=FZ1as`=Opg{H!I z{;&VVT*2sl7?pT)9z{k$hy7pwJB&r4q$vKy7b!ktJyD)V9DTNt{hRBeQS;mX_gJYg zbX(9As5=D;MpXae(WvN9`4<1{iI8W(AECpbFx&Jw&i>B{fUkR^Q10aa=Jt2+C^FQw zaRyfOzgY+h)cD?ib9>A-3Mv$pcVIEy|6VQ%crMS5|78MyKFc)>7KPoNEpzXGS`6}a zGSu>xe{*{(axygPbLS!9e`PaNs7|qeb9?M=SX#O*LVq0iH#P$%oA+;Q@c&E}P4#~! zOZR^!`+r`R4*P#z*7N_o?EgPtfW3EQH~Bi+=;Bm9$0nhf(+`_z z&%X%A_#OuMaz>=nj(-E5Tlf{+d5g#1b#dC%WwPWj;dWEv z>}b~5m4(S(0fiU*8t;`4Wc7u(-2VRZC{MlE{>Pg?D3va9vq#icY-<*VsiG8#(N8wH z+%Rg9xALNY>m3FA`95wuO|xqEa*xp96KwqogC5sY z5JMzfS|g_wgmQYgDsu>^(|ZY@8%l}cvX3$Y2Eo#jJXVGbW=GOGn!PA#vu~xERB*LD}_RGc;+K zxUZJI5U{DJ?#XGcUwJ0E_?Ei`dqnT)&xgY;t?0-~i7)M8W$*Q-bN)xUhp zmD!k#ihodHWpQStr^HXxgSecpFzNz(a|CA6o|PO-+TIQ_i8cD6I?_`kGS+pXkVWvUXReuX4%hhcKSIF4 zk=!TSds3?FU1VdM@|GtRG~*!(yf}D%M_PQ2%A(olHooRP*eKaYyNCp;Yys+Xk9Yr! z!!;!qx)sf8_Lc@HvC{fG8_4P~d{s+EOQxIb;{~K)6FR{fVV*u!F0MD|Va%vpb%zA= zV4iZTF7Y8VUo*^tE*(tH-qsh?VjZqYu`J7h!bd4~Q67FzapRcW`#R%5y$lOvltKbQZ?ix|`|< zIt|f^uewy`)_$oS%i(p) zydKLF_m{R2hw|~{1@D#_N%|P9>$jKSH&s);ou+=hY9@gNF2^nhuyuk@7j>Dvore3Y z=g`*cwXb|gX5Xc+4ZKf(sH~aV-=F8XJVZ7luU|)3(E2#CFmR}wm3G9wCM-9uTrB^9T~7LOxs z&lT!$Un027Mk@s`zf0lJXB<2laNMjuy~bHXQI?e&{YaReUpw)u@XhkuX|2|evU+9? z3K~u~t6U+~yt~xmNk%?gAw^2wYmr^0H&`3vH`PQ zyTFSw8b`6;x&Hv4W}NQTq-gcUv-h@r8fi%jPNeJKAGI>p_$i{d#P3^(+ia7`Opf=f zV>g?VO>2fB)WwnXGHpLexXh-{#$``l&=klutW^@wNfn72Z-Nw=v0z-NiDsP_o$S{pDKlAs{|9g4yob(UISI#$*e(5Vc|7FUw>S(Cg$dste z7}CHIyse2jG9nM&zAe&L@k?3I@mSNY%!_YM)n_?a#HvI+%nQ=!*vWRPHaXm_ul$W5 zw)5Uzb4#9;v8*vkj~saTSH$d@dL8o=Vk)j>7?2kdW;N3+I&$qHGgul5m2jzVckJFC zeB_#!X-Xb?XYvov=HaS{`%+q1vD@w0O*ei7^`a@5?u1dh8gp}BNq&F)c4K92YVOuu zPYi3{UyjC6`3GQGDVQjfqZL_eUQhtMn$vt%u^S@qXx=3^HYxXPTw7*cT<+p6(!yN3 zO9c{fi{@Z6ELIEwxYO1}c{`}QBF`l*nz3Mh8go>plnG{ir@Y+nqD$~-?zC>`TH;C%%!-@mZFk2j%~@c#5# zInF7jWNO*KNchdqnDvdm@s;l{O5sQ+GSr6q$%SD7tO@Y)^5PwA_O9)u zzwbETbhHslPWRH4f5Pb-E{Mg*BC|tpzyIOiFR~7PH@w1jAwe=dBzX;!ZMHPO-@`rx z>eiQI`1G2guTRf^y~2NGF7{3TQMG6Fndq9)u^NO#u;KgmhX>f;ZMv;^*pXVWue+7~ zcsEYe>Ih9`F;ESuF1^Zn`1fTZarg%h9wcwi@2AINhAEm;%x;1s+nHr`6tkA2tZqZd zqVG`ql3}iyx2`5vF>0L?-`ElC99i97gM*)RdZ2}JrmIOi<~N-J&r3+jV9W2p`9@RR zs(pWra3$q}s^N_Uc!Ur%yX&~LX9#DdjJ|)}cC}RDa$ScfGG%JHUpTipJ{3$eE zb4jXcqWfDLcB-!e$p*HOq>r8Xr(xpNcwlTFTyeImWWjTVFo&`BRMQ%+mQRNFpX@&R zd2xEcPxsl5rao857zOFV&pp|5pygX_>!-8#cW6U&TRH1E^+SvRUYXcU>(-R*l+*^n zp2*AYKL3`PSFPCNb*q6&qSVsdSXyy$vB}x};`Sc{Aa82Uh?LaIu#S?L_{vzdKj~@# zy3C))Pe4Drk%NQdqx;HYRh-Qx3k7KU3}qu4^VYic{_kyLdZsg}LUQWTdwrLY6rNMR zfTU?e%q>Vw$%lcN*%(YWnT&jkR#mvHYB;TF*Q=(an`wCRt<322HvHP`o1H+mzof; zaw@vp{N3;HGtxqaP2W?E6r+;oqoMBt^_@%3J=@PVvS;gty|M0SIAs7H-Fa`db9ImN zkWr#c!Ub=Zzvek*J`3TGEVUJ+*mTUc$Z_Pie$CmN@6i9GiaZXdw(`J93$gi7T zDQe#Ovhy)RNmWIp`#s_-_vxzhZK7n5Y{*?OZ$7t)SC=D)a%3bv@H^e_NC9?#p(zK~ zBC5JbA}#kx)o0k;jMe%SF7E#GE(;QSkBY_-$eYtFEE;reo~VCND}h+J$83=JsP4^a zr^Ggwv7A)nvR&eKgZ@i#-S0x(nt5!p5bX8a6ShY&h@nzEF>5$Sze! zcK4rHb*dXo8EZmiMD@hHl6KWbFd~#98FA{B=b!HTq@Uy5)hC&^Wj4(;7+4?<8}je0K`Vkz7?vz;&|v9a zhi#3LxtIQSUAsEB5HHOe;_{POEZ@QU9f=TV>?ZYJIMk$6dR;p@z$ zm=f5y*U}6!i|RfZo>$ER=w&PLgH@G8lhT5{ydW-+~a^w5UpJ?Xf z1{ZM7A1{SUzBr`tLI(G3=s^fUZH72gm+kWKL?4xcMfI5*@;Y+Y82YNFOh~IaRlEj_JrTlS)h$ zFl9N{3KwJY_u?*vdF)@B8DcS$5M1908(vu+B@;&JDn1xm3q6$n_6D+KDB4~82{4*A z^X!RpHSN7YA|BuuzXaG_>7v76ZAl%EPU=UX_r9mR6ww4n&-*5Q$Bc?Qn~PtcOp1*d*)9@N z^klCNq;YK&p9HtDOSbAYaLz*7ux}`2dXFEPM(zBH$_vyhZa+_9X2-(VG@HJQEOZCh zDJj(AberI(eIHEG9-aAk!7?vl#_Z+EvgmEp4sCXUwC?i_c|>Daj+6su?=?>LmbE1z z;kDxQ)Z>yOKA*a$%{5vyEP}Tq&OJ$7oEZvEJj_iO4gsQyYtTD1rjt^spZDb%#=^1e zsi$q0U$)y%_Q=Nvk51(-jV1x>FsCQIkA|s=GrK78WpA)Wt`#G3Qq%XL*EWCaT!<^? z)&>>4S_xrOa~i!;OT$T{T4P_Awtoom5&{P72Cz}}*RmB70^AMt<-fZ-^X z7Ur{r1cDU{8Su$^bcMu~C2w}N?oVFVl9}@}?S`&rm&>niz`r@2E?(>w&-4qIS4m1p z)4ATOi@XX3NSr4P+aE!<=CXNQYAIe<3eZ<@@jkXn&0Al9`_K9UTvS%Yd~Mx!eaxA0 ziaay^&dgL^D*j+moHb)(L7)10!x~-^_y@`HU8-38!_?EtRbO*2gq(J2z1e91DBX(h z#c`f^`D^hecG<$ahTC&m-b@ab-1znVmHzRp?x*6dcha~bQqbAA>OPc@E{)|m*!6t$ zabQ*o=X)v5H<7~N2GlKaYO;#g+1RK!fG?1zSbD5erKO6TN#-p9^Q$7%LiQokgw!#Y z*yz?d~^<9<$Lc!RvTrZnRf|X>EWudGoKx95(}%A>mA5u*y^{cY;hejo@G``WVw`>oS2f3WMB! zs|5AV?LJKv`S#>_hwG1_Jq$JVoubOreoCBgVzw2GlO?%2k-its>>u0=mtpAmeFf(! zzO9EN5@Y4pNoGympO>;od3?V@Md~hGWhRVkn0DmmENxp>@XOg+N;IbQCFSdVJwf1dH-pGpH|Esrw&4kidQ9tlyN6wtu32xwBBaxW*EAtq(3+ zC!FfRAB=#PNTEM??rUG_i8`h4?nSftk&fp&?NQF=g%6qaq8~Ia(z&*m71O(h7;bK| z2Q7)#A@i+DdaEB}9#i^%(Btbr?)1@TFyDH4-f9W3LThf@g`JSHUuTZ8+$jj)&F0;O zK*15oZdFZ}6pPmMDy90ZX+vyg;RdlEyyr~jgm+VHMfGQU(Sw&CIsTIb4F02~(Gl7) z0;-|M3Z|@=@OWo-oXEmrL{}ZH;=!@HnQ|w)?5V}+(YbObX{t|eq#(v>9&f&Rd&W?l zz458ARL}QUH6iYcrb`3wLUlXuC!$T*T>|o_XYf0Jgi3jIzLl!vNWd9CQ}!vTSklX& z@fmM0d?s-N0EShIhKbqT!MfP25&mRZ>G84d>(5jz9|((b%EGoUs?Upbycc-`+@W)F>`6h{Hp`hhO_z7ep%9+! zI$&OhBy)U}EIzjwRL%7!mI>P2KdSdACPa8AMId0!OjUiIf(F$^N610VkI&_iRxE0k zhC1@{bYw~S?lZuq|uk9Uety@m!au)BDkE=(7h8j*O5- znJtcIXguD!OX(?JoeL1him?RsF4cyXZ@E`eZjI_w?%#LP`m0-mL8;m}c%7`-mBVfZ zA|)v?U?6yD37;{x1xE5)Z~)l6GLcEd5RN3&SX%ctf$!~KbGPT5(% z6H>DPhBEFV5IEk!R6gBR5$CgN7a%jko6?fwg2N_sxiJUh*zzWd_UhGvGYxf6xIVTu zzJvrAE2CossxyXei_=FXG+*t%w~e){BjgO*gs^~PY&BpfQv?fE3>m7tmV4^X_3c=f zSwt9S#e#xzb*(ohUU&t_v^rI$(^-Ch`uR$}LTG&5QjpPHDLkS@sN3u-3BZ8n9F5`~ zP`R3$nW~VQyO<$g2N3O*Muyq-Hk}E!(9HIbiKq(!)+4t#W@lS0=A_PQ)2OAIw+)W< z0Yj~5TCRRQ=)DHYvpT)v<dYgDjSbiq?U6TBi-={ZdW1H9PL0sq?8UOi(_-l5wZ75Ylxt@kH*|BhM zQYv@l*cmc@yfo)xn}}Kc_w4Vx+TDC6UcFp-Opq#>c-$DmR^voTZL08x@^&wun2Oh% zks4H&$vQkLBi8Vc>6!ewc*D!Nwxd@2V=bOda~mu!y@zVixdjcy^9w4u=Z~AWo+uT& zyr(Y5Wsck6;j9U6fomZGfsp}F34MPv#EI)xW5Tt|xjs|xA*7xc&`#tmuI zaIj(KIv`%(1GqR@Dn`%NTXux5w~UIeH~9Or`qUlm?n}4^qNahHUHfr^3r-C$gb2?5 z7RR0Zg}Sk7<*!dhxZ-K52DjA5f`Gu^LdT1{t-I_Yon2=>nMWHe(YXaLn${^^^$$!l z<6m}WnJEQ{_)HofwCn>6yQh~{!?MpJqxZ%8>xB<9rgE>|=QhZ{D;}yfvhTFxk33@&=!lgD@^D|`-S3A*24eHwwP@!arnq!`S>Pp5P=Qh?RlXbEalS-UVJ#D$N&9wsZAsYuS4JkLq z!MJBo8>i~8^2p<=KjzhuM%139-0^1a^w?KITKnLlEs*?U{!6b<+C+;>L7By*Psko~ ztYYN4UB=T*h%H}H3Jwv)4iBx!HJiC66vkZMT#*ATtks?&K$l89lWvSr=24kX1NP|g zbOvZhMRx@oIhfW5q#E!=yD?_|3g#3UIk{iAOI4F~Yi+d3)DqWdg#z2A)C7f6TzAovU$piK0D82bUh187 z>)pjS)`s==s6hqA-paRUkwmfP1$C)Lr?EIy+)!Q3lCptY0lMmgE6}=C!rS{ZQ>Df! z*kCJti#jdOlvap*{g%@9Wt4aQ}Gw& z4z*FnWjBb@e_+@0zgEC<`)V$Re9nF5Bb&H=In^pDsVQ^i zHwc9;eBPut&*FJU7So98SgRO*%>7#~2BpeH72iLXiUcYB>x(#-nd?K(gm!;M*xvY{ zrCKSoMLp+Um8AvX=QAf3&?wz4(Jz$vYWks& z@|P8xhz@Jl3lMZ-CBf^?x1L+W7aPJV{>U!itR5Q(p8f3~@crnC?WhOt4)gnRAdeEX z%i|&*|HO- z8AyeCz`_#n-{de}0bJ9;(PK z_`*jlI#AAQWjEHA8%?zCy+E4sPCBL-Ec&B1&mwn$tKE-OBC#W6l}%blnjjK7ML`Vw zcFb-%P=Ebqy5ac%f^ULmLfm36K3zm7*VQTTIuX*W#|n0XoZ;B9_MA3RI+j~11AP#c zoZj-9{t9yMHgKJgO`ZUK$&qF&>wPBTkAZ6%M+#zL8 zpOyIndOil?mqJc|nmq_(^C4lc$ZS~3)j%m%gT77X8*L!v{adh(_h)L% zw2S@mM!W&|Ktr9>+Y=6OPyM@$hcBkPKw2?&5u9EL;fSQoug99bUZFs`93}K@T0Z!5 z+usQUKL6*8BeZgrm_)i#d`L-BYTgb_jH6S;0n!}U5Ac5}%I7a~9?K)mrhQ@A6zBoXj!#AeNX^b2k9YlktTT$8ATdb#sGW2L3fSQ@{HarK#2r%o z4qwW|p@og+$ILG_B^oEO9=p*9u|oHTr^$A!brAI*uY7MHSLk`S1@h&rEvWvHa#ko>C6!_tkC{`5?(s_2dH zyO)6Rjz}pa+k`Xv(~)AE5d}Ri`{p^H-;NdNKniz&A4p0%S^=sG69868%L`LF;LHR7 zHP>-fRDw5)9KD}WVGkBb!cCeX7d9^o6iNdTNfQ*|Z>6<6$Jzlaf@GoU$DAdsq}RD$?e%d0ewzI!rJ_}U;bM7x1Y*rgL7N?`M!ON+{W-Mnpkkq#V);J)yXXS6 z;Xrj%5`c;p5EkeiM8qPaZCP2=j!~`bryUc-Ng(aXxJ0=P#Ce&E2qpGs#0FvusR5>) zA_4Pe(>EO`R>l6B3==&?!*RlOKB0`a(*ko(2y|A7q3(+%P%&iwqJDAHToy5*J4uM) zFWa-OmXJ6fdUEvy%#uP}Mt$l-%44{V^ByKrx~|ML*neYlm_JNvqwFvMlGfhf_{lNm zlvsZvGoQxv#f*xVB?1hIQayie`(db*UC8mVX&Yyg$fegJ)wXDzXyly zqUMguBZ}afYyIgl3H{lB@(_LgJgTiXK_}7%j0DgGR`-Ehn+vU%@qkC<2R$3nW|5(0 z0ogUDXm+P7PsD|uupZ)F~zN>dep#wP*Zv5Ee-~uJJ3bS8e zxDV`c069j}t$R!R>e|w+BE&UgR1VE$IE?And?0pClRmwvcz)(DlV@^S1%7X)ud3MC3H67&1f1L7AfmiJj)Mo=`ao0kQ<9dM*H*s` zra03kt;0QQX&O!IMUJ{IZUAQH&;cs5ax?MqJ8|zWg|-7WVQ~x^`{&zY;kF{<&sjNs z-)B9x%)caNnyCm$!*7bLM=i(T|Nw{RjTXWJB-HPX%MS--GmZLdiyv@t&vDm=z=<}!zX`W|-x`j5Q+?b)pjMPLa092}qZRI`w6^Fcj! zacEHCcAuRAxRBdmAiMTG?mQkQKv|mxH6f>W^P5GIKR2b^S%koU8~8(cmB4pL-`~NO z2#?>iNAz~T#wg!*4`4b7a({3{n*j^<39$71-W-r34woDbO-2}c^UMLRK-Msr4Max* z0X+q_!FL1ASCmXx-(xo~?mc?_t87K=nP>YYhQUOB;Uqfq21t3_Wu9nCwP*j>rR6(I z!4d9yXk>dZ{qNKndxfd8XCBe7{Ru~ji0Gk*1o_hlJ8AyDjvfhon>N%0^ae?ddrn&S zJis+36cEPamEU>+yL~YA!-Ql9kl#r8Yz4A`7r+{lR!V8Yu;hB|$8J0(oi+fk=}L*1 zUuX2C(EYjIMn;?2(*y&C9Gji~epQ5NDvuqQSBF*jC5e>wz(;0u_T=&2Quly;LjVni zs@)Wa8Fn}C`k6;V#X-?pVVCCjCeG#v+H`#k>9Get^3RkONX{N~r+!=XEm z??ic?Xnzq|XWdthLo|`V?pGk5IV7rsgPjZfSWeD@ycs zBi*}9fh)~AEX`eddVX@-KVFlG0RrmXPAC4~m%J00 z4=axY64kz^n4S-C&hu^NFu${lL-8#TE4o{WPpTPHnPG$oK*Z{@nV{C3(?SH1uydBY3s)_M zp*%tP)fBY_C1WOXXD5iFZ-b2_1EJCkN;0<35>aNGZ5aUUWazco#M9F5lW?x}e@X=L zt!+#*_!U#IlLUlR$hyop5@e)Fmk+L@?co3@{+ievTCaggk2k27&VX;u>fXjGoIXT+ zlq&?4zhoq|gG9+NP|yBVj2@wjRN+B11ecYxQ*u6E9kQ7$Q{z<4i=mRZ=7(3|{kWY- zu>}0$tJEFu)nc9xXcriR#xyQ|ujuUrc*Z8A>IRu!GE^(GK0vODXuY$>AiooPayS9T zQy7&n$M0XHU!iH*5cdYkmeo)L=+2Whhe~wT-Y?+7Tc?ssB@--~FZ_fwb+$j^+2WXj zkC0fKt>3`T!qzNhQB=;Dpk5~SAAH{dUQ40}<&LVS)dH(ihB-t50_0JyC2`yStB42< zD7#X9w;6RrA1|PnSvy!y7|M+DnFj4qRyQL1^0A;q^J^vKBg!V0)5;);)713qp=A*i zA#gSfT2oR{ynxF4%US)oazx{YXq+?*%&HCMKKS#hm$IW0paNwEYWx-0UxIe-K(&k@ zst>3M)jV`oD%#3Iuq1txBK{1qX~Ctv;_3kvfdwQk$xt%XLYPJ)qFH>-4H`OSODqJ| zl^@(nd0v#Dhr9;qs#Tx51uWStRQa_bslN?iG%gQ9PR0trrt&it0uW8jTw2quW`Wpi z$s^7Pd1TRq6bA~0#&*9^Q!dDMn#w*qw=kSkkr_tGhE&5evg~nLz)ZFs$9)ScxfKs( z|0bsNx8Y`pvX6%@0*go2N6Is14StBt{xI5>gGlPSvqm$^v}1D@V>`D6K!&pv8jra* zf8)lu6sGeL|F7~lW{9A1Z(e&0%VT=wA2U|K&7?X_-C*$#$1xzm5iNxt8p!fG(se~_ zUVm&JCd#3J-8qc{<;c6a+?dW8qV1h_@wew!{Wu32;m;ZSgDQ~<4Ro7fKN3a3gtJU+DwRLnb#bD=oa;*firq%`qz0}N-Lc%?xk!yr!gq^7|9$)IA5te|1dBi@>m5UFr2sVUG0&;kyq zZ*Uok)w7L;&oW9}g;1T~A)~1s1HkHC(tEp!s3e+%A;nROMGEfLzPbRlHxV z!{iqL@@CCNP86n?Si3=aOz?q>^xjD!-Sh;PG5v9`W|dhgO3i+;s*l>oRDW%yyjHA> zqqq_L;8Gjyj4JCM|6Xabqnj5X=&1A%>CjwT<+0zJPVO2R5al1npgb=-BoEAcE5%rV zrv8A`7^19b4PI`LwdfK}-yZLNRj;mrX8fhbu*;11;Yqt^8nK|WnG-yQPeeN&f<##` zzq5lxbV!yoWzgrFO%cFa2CYDbmDvIXMQRgfi)~kaj0FG$4JwMq(WA*xwkrsUfGF`} zZ#AEhwqrVS)Up#Rwh;fwx;B*@FA5USBTB7&bO#bl7;>Q{!ThuSQe`Y#yomxuN<@h{ zrL>899-7_%lXT0@?CENSxIx%krjK?BSijnvT}yO+!9@g6sgG3B^{(FMs;?0T z3;@D5bBZRh5lTt4o>Z-w`LXXj$tlfDTJAyIbbKeY81s>q=Av@gol=lN^e66Vbzd4W z-%CZQ#_b{lp-WFn9k_or{~YPO?Z(HHcWp5id2mUup;(rvqOnD2sX+FFHS6zim2%8X z4~6>cEP#!=J0Lt%`0u9_VT7>h}spb`8yN=VdWqawV*Ba=> z>SiR8o`Mo9SfiOwAa`+}mYRXA->m)w8kOziPKa!HxN_96=w&J=)wXR~dG0v`owRZ# z6_+_P#UK+9jphtJa?oc*0gPk$@e5$(Xd>57Zw2TmY17zpp<_%*hL5oTp!*2GV_O_$ z^ol0NtEfK!;zq_*l*Ob$-*F-+Lox_#l1szK;s+18TBf&39yf6Cx#OCcw{h8_Y}NC1sgf+OD| zLXkV3D#}MGg_x=6*?AuxKK?V#$BFQ(0$O~MQ*Fc4JDbfhmh206X<0Iz@r*y)pJdsO zSR0V5Hn@++s*3XBwdu0$ zy}k|bE)plb_W9$nvV4mvY+qC_N%RU+bMN&mg?(`wX15A0JiR|zz^f=;fX)Bs)i8@F z5`qvUO85Kjmdzu_$%nZYzH=3ey(S1qV`C{A1TzLn zOOBST_a$0NM6=102`1L5=@yq}I^|sm)AhWTO8w9w(3T=B6+L^rAfBP7=hI@OEvZ0z zi~kLSC>bAy(PQKB#$_)uzT}rU6DAvIY$#FOHu*>@6G{TH`n&I2E|kRgnTUHL4LVAR zTT=&=07njVpXHYRO3Zq@v|19#(yHcKCnaa#BMLqA zE2=0``LFY4*2kzGR;|Y`O!Wm<&+;Afei+DxEg&lxAla?Jm_>2oVc${BqSDg)N>Srb z)a|!^tpMboo?eAJU~XcE?CZTgZ^P5{WI7L7#F7hPzPbd`q*4jCpB!`89hzByE40l9 zI%f*4as9)$ldJgb?@X=SNeCq>fD@q8?FgorO{K5wnR(;TJ}^3yN;w|Vd;Gl` zkw#0I+B_bzfzf3!kWR^*JkSQ>kXq$ZgITP1emHE?m+U94BNfud^rq0LWEz84boX|! z4eD8kUO67eyinj)DN8BJUAO|xBfs(vLpG(6VQt(3o}Z*U&LW}E3w+ygW0T@wv3T)% z@v2?hpm#8ppq*57CH3||xr>LB_HHImdM!0E$-<4Y6j4-Qzwb6-8PqU>7;0grtwQ(yd( zTdATn3pABICD8nX{2W68{4Nzf5X-Xa)}|?vKac=wn?GMbG)jJTP&zuMRBaZJrIF=Q z80H-60>o8P;bY60eWZEI#X>ztBgSm9omR5)p=$t?wp$<( z8G-hSPc7zIKi<@Q&GsTgdXf;eDYRx4Bjs(45;G1xzF}|GF+}%dUY&jZ+5R{QCC{C^ zkK{*=luF;R4R9;Fp!|& zOcXVat^1|l=}r1f^0-`yg*L&~RC4_zo`R;vx%~ci(sBCHQ(ps;ddgm}0HKUn-S6G#sPWBZeQtWQn>Q>=Z8< zypZy~4)zqd9DXO*b-O+#0YZdH1#te!m-}CHy-`mD3UZ_w3YV=iIT}8E2lJunQuiE+ z;Hg=4%g&-Y?Pf&?LXD@zyCEHadx)aA=J}SIoFJ5by5-v(=o-~XGuNx>nE?q80TjGd z8jV9-O54n?>&F%&)gBhku&ZQm5Z!2ATfWe(^NimiE1^C;5)yl~6zexxAlqF(lTZ9m z4zXuhl!lJ#J37pN89E}xlw_bAZKyyg)6jTNgGU>*8;gMy{p;dZ&0H- zx^lVmE}FeI&WnGV7$j!lu8;9Xlc!pAjHY6hQ^{5?7CmFPDD~_Fz0-cC&`f=)Y!`B= z8J#N89s0j~^37cT!GTvoe+?n?ARj#{MKk3yLfL>QS(Q0#fRyt5(jd-{JMz(4=_`2sK)3C?e} zZCPbFsMrxXP(8ZYCFHp<8fi5p80582f>u_Tt@9t6Md*aU5qA~J8m|rth3{eFR(r2( zE&22&CAB}FreOcJ`+AQcO%j`5^DiPCD@U6^ ziIvOSe`>X|=_7Ci)Z{JcR)*Kb6kOo9*hJcXk1}4h_rAjwz4*;8_LdKB*q^)Cd6nGv z;a7%oXG_90? zsM{D#pG)Fq2`F7ubl6bjmGjMyQGLfREL^Sc)XU5VY6Y+6&ggXNe$tKPTXm&KZvZ5e zh#>Ve2i zA`#l#G@#x9InPVuV&4Lgne};*T}d;?QPMEU*>%7Dvf1oV-N{5PoH)C(y-I3*=@oWC zIpj{t?WSrlnwy$>cFcaHK>j^xTcFMIhEU#eV(fC|*`3B%IuP|C*No2-Fj`O| z*+*!Toml}unFbBVjj$b%_H)=LlxfGkQ>oKOGlx{_=KELq&%b-ux17MZDm(9;UN8S) zE>mWgkRUxTClDKGYzY_MafV`LWbQm+6R)=)YsW!pAQ9RaUve$ljUpuv*y1{EnRabf zKoSsu@I`bNui9DHFZef1({&ikZ8`h>li%e{AoMO!fGZUGlOqB)Jr%kyYkDSu2!!G* ze(qh^Bcx>kBse#~%}&oDBp-DUeP#o^}9>#x_39%YSN{9qF7Oao?i~F+f40Y%jy2hW{nANR{*La z4c?$9O(j2J+3CqFa7AQhJMT8|mF?4Ql-Zex#!`Rt&2y zY~v#W2TF&syv824mgrJNa^QhM(}G9C0g;pHIB^|moyeQJK#C8yo%Z*q_gw*yGXm7_ z(^O_p=PBe+1n3S%4w29Z!{Yr1Fqbyz=7X9>0Nl#A)Bw}A9wO%BJvE-1O?p7Xr1@kX zNV%&_+@a#-pt!};gulcc0mh98FhDR5Qc&zeNJ3=aBmM0#ouxbWpME*K(zU5?qPpXa zlv2lcv68Ruao-|JByEK*R-}ob5d>Yv1%9Ni%Ue7_zK9Tp)#)0gI}CKl9)r2!D92lE zDw?1Kcn$PT34rOEpmp)aUNLiUG#{Fv)Tf#naeC7;CGcv9qLSCu)OM9?falN5-^%WK zb*Ld8IgCIDWO)d`QpGp_lnIqTNSe}8>5-Y}DjX?fF-S&?7SXOlNins=?{Ev!!BM(J z85|G`-4P&R<}Rv6`fc94_Yb#@cqVxZn#5B8v^7J|#VFU}66iF*$IWTh?m{(thcN6x zBYjXHe9xrzP$Kq0A;*s2qCH#mX8Atgq+jNYf2OU63Ps={jEJ+6(54%O3WtzaODmP) z>!y2xhKWbz>j--uFuAdMS*cI>i_e~X2t721 zn;Gp0n(_LGp(Cw`v#Oo!rpkj2&dE%xl+(*KcE@ zQwHkM1;|YSsO{Ph*76{7T42~`=!nO%gEru|%-L)KMKC@GeQKqs3BZ$ZL_sI$Ij z($kUMX)d#U{SnnTk3bi>PL@4k`~K67BggU#zwL18#BWuMEiFO$KGg3aIm|rdi%Y1G zT>37uAayk#WmXgYgiX@*#LV_P`!`kO`ffw|M7J32$FF-jS2VPPCquch1-4tbgqmLw zn8)ncarP08tube=LJhVaI&zREIVdgsn2zJwG$dihrJx;Uxx&k0{o@#2EMK7};fnDk ziJ4lbgC(H+^CR`eM8+{9t^Nq}1U=MdNaX zgFHtIQrZzHiz?;bpNuqOIpH$un!WDQP929VQYRE!@IM7)RW2sNs#4`!(`heM?(xLfq+WY?IL!|+* z_Lgya!(p2sBi72ajd6o)RP<`Tr-JD{7uB~|fT6cxug~`QU22vhPV5|N%}4@@%^=2- zbA!j&5Q^{$ED+tJ_ExVSVu_`p6)~yI2L`Z@%S$z#@3bT(uKMz zbN{d~8jQIJ=($~Ji3r-iU2fI#ISJs#<%bkj`=?;#h9>`yX ziy>kM1kfT7=9K;LZq?)E>o{P;73p@N2R>hC+J;`A&>z$vVe>#?&Ja4G6odAPlRwSE zLLM?wCX|;9(V%iPd+H*x_-{^Fag1(P-n0c6uZF-Zwduru-ZewbC;izl4JE5%IC46A z`iVSR*Rz;icqo>FBDn1%kb6jHXcinHWf)Upy5_6ah6c8!@(w(iN}o$a!|JqSgLXB7 zvIePtz{v~RT%?+5p#$#T7Hyd+Zcs{ian$f!7SxY%P&Jz{^K4%I+3G_5ITv@*VYLnr zz54gB4|V~KB-#N&2JIlUwj;`xV=T$=h;~YV3>q(QA<-2n_X3k-hZj#@Jp}D${S-Y<1CFHmo^GOfTN7m=MxhT@fCFFxSeT23nL* zQg)E2S~TZJ`q49B0*HtRh)<;9 z8rcGT`q_^B$4{;!=Jou*6Kg_~aGO`8gEnXVR17MH#uT$aQ!kBJ(yQg2pMM^?Ofj0f zWR3`Gz(_wMU44+vDf!!*QfxG))p2ifU|jwoY8c+vxXeM`q1u?5Ln&W=Q0dAcN}W^? z+nRxKL0o$*Kqh#n@c1T%iuYxNmG^ZyWJ|SnLyT4@D6x{BA5v(Bz5fwduivLhw0n@; z(hea9G2lSGsF85BfYWKmlTDp9^yNad;+Jn;@1&O#CL<6lpuh_YbEqUl`U@2WEmFe; z=ENBKj}t&#(+t{4?^w&t{hu6Y9qCl!z023V0tM}GTUGF(qIX=L_%`xor&Kaf zD9CYQe!Z_wQ{Z1xBp(9geEKRRSUHI777liz`zNpEdmWjEqs|)+bF(~(ho-$|paVyI z4u@QwBwg3iy<`pN^&pLGOAw~oUZ9|s=k#34Z|nM#Zg@qMayb<$m0FlNe z&kLcXnrq}HxbrMV6p!F&z_}lxW5!&;6KS~zmEHB&a;LS2Tw8M34A0deWjE^mb#2`< zSTUcl?f1=rntMGo&6L4GS-KVx`_b}(zHk~6vi}i*Ig;NYxzk8nmRLz>8TqQMZoD>K z`b+RzER0>J);t9qlJOY8Dl~2z0Wwznqi;%?LXfL6;`~lfbZ3mTW=xS9vlvh8jV0l` z4W6sGR`teqwE~8H6HswoBH;(kZ9{U4mhBDyiR8QTl*c6P) zX_9fFBKd>@)zbb-Xgc-hbu)8XOFG8N#wc!Ab_0m2h%9kdaZ zILo^AuVY-fGoI8a`F!7Xr{U{_2Jv6Q(g&z}h)?Y)2%x9B-04Lt=nLyriWtfZ6u`t? zZJ)h1_ul7djcgQ4`yW|LY*^Xn3@1Py2SSevw&Mnxs(y6E7tl~WcriQDQU)B45$Kjw zkYHBp+Pv8bD87Z14^X~^7MLGvc=Ngv_AH5A%3T+fL+x5adsckN@q3Qnk~?$83p$v! z_lTHakZpLR@6-PO#w)NMp)q z`ol=T>Ka3*NHtJRuO!_vdwv9qmCfG2x4snXJHlu?83)Sf$&w7;>N4Wf>0SyOKkVOy zg1o~(cRKK5Q5+V)Y$SAZAw39t>BC@iB%0PlH;x>U*sQVY0S&CZOd&3eetkRanI%EN z;1AeNh*AJ0jp3p|&iiSC7zA{qG{{A`VHqFzxK~kcScld9fbVCzipJWuvs_u@55K<2 zhjW*Dpm)I^`lG+;bqrYErUh-9GDxj?fhO<=^-i&pSQ{s}#|I-9Yt|FL_05G>q%XcP z8*MAxTdKR^ycs-+`t=E`GlCgC3>mP0jhE*q(lK;NXebE$p<|vQ3z9+sIBm%fq@G`I z8w~7T+n4JR99u+7M~3PCk+G_#1q|w$57>$y5I_JZ#3)@q>rh-*z^0K^3Xp+B;SkvV z4F%7}%$(^pMt5!P>56S(MvWE)!pK%<6zfXcKS(+p>Z$^HF&ESruelmlE~V1}dF$K8 zaCN-1z#4E-87{4j>;6vmr;l=L7c=4Pew1Ezqz_R>oZD5A*=y*$~yF;ZvDg4Xb>?a#*&~$X1|3b zA-J#T85T&KLkA8>)9m8sh8XJ))>L?@Z(tokZJ5fhlrK?qRw}&fn}SOHDuk3t0NN!G zOy~xA{Lf;3Q9NW35`@l*-2NA+J=-IIhp`6P=*ywQZ0itWeMaRx5a8lr7`F~O=wv#f zVr~ujkOD+$V}L!<7kuwxm#MR%q!Uhm6ix}?2Y?X(t5wL3me?$JkxN0*qg0f>`K&Gz z3T;aN5^7F}C|=mMzcN|vO9sp)7PJFKz+pWXv(N{B^3=qC8*;Mm`dC(9y`=#&QsXII zhxIaw`BwX4uB3cW`>6E?S^0w)mCO9pa5$^VemMNXX)xwp4|JOZ@Tf)?pX__hsGt`q zwApnBF!>aow%Di(>+9Y_3EVOU6r&)#T#(^~+K=lsNmrWrap8&KU4B-)iD|E3$2QMA=Dx`(g(0#*W zkel7c5C#DzY<)26ufBdlF`~NWf7RHnJ~rkcCB!sNpg4R%;%?MqoUsdiR44&RC*+8O z;pP+tedmEgrjQ$cpL?}qGwe&jQoR3kuK&vWONQ zdM!#o&ddo3nlJb%ZGa+&K|qe()QomOG^V>R_C|2cW?2O)LFf+SeBcVJ!|G-lcOR=u z4JG=sqZxhsV}MnL`pS9O=**fc?~?v|17Wif_ud|gT70%@S&>PeafyE2= z|NreFDiT+uq=66`C=H~cDU>vk_TGCaDWnt)O{qjVC+&T*ZfR)mozgs&#yRRVey?{| zaqrjfk9!|+uj6w*@Av!le!ZTr=kxi3I2mQ*f(ew;-n2);{hI6C$Udv$@BR>|WWh*> zAJ7m(?dx@aD5E*!s32^rI7OFkyysnqGr)PM0Qgjp?eai&@L+SPXawvPSY#;lMA*up z$&v(8(?2hF1}yi@AKw}_N+HfHYN)sOOD@laZIMS*_-aeWR$0!Y)XZg#&T@2$@ z8tgE`J_S3M3W%Lu!7jf_+F$WKU?1c)AM0w8_}5oYN{Bw&s#mvk;oI(d3o>{&N>2W{ zAG5qI>FZ#xzXAXlE)K952{d9{{DUIkV+IhE?HrxCJ^JgpS^%BgmR`{qu-A6uM=e8fv)vsH#w&D%hD&6Keb@QC}5we>DA`KgP z6sIc{xYdZE(`=mj9iWU0Dj$sLDd@PjIfLm`68IRY;XFN}Km@)0sP?H#yH5Q2uwOrA zK7!TH{8EybyzxH6ne)Nc#XP{Kn}!oeoSKO>Lfd?tcgV@fg`hkcs(q9v+csa-_#{Z{ z@rOsv%myDtgV9deuN%4N$XbnG{Y+Q^I%9wLdD(ZfUH6p=r2wEW0xl7GV7ev&Gw6Ld znY`NfKM*UJ=P9Jg0v5HTDK|bceZMs%vQdjk99%>d=T1II**Ht}ho_-4sQ@?8P`gq5Q?aRH!DrDIJE57f%Ljm% zYohieoTx{lMFFY|zNiNGKUE*hN~n9M1b8cEMC_{cN&aa;m^&rUCdj%WsTfc(gji8hh_(qyQa5@C7)Q5|N z1}Q3LIbG<9QDho?-nI*T?I5@+qQeZPG8!{{-~X71rJ%NaN-qW5dUir*;Nb&7stR~0 zgHSt%ftQ`wxKqGhPHzCfAd^5wIu(%io8W5AnqLo*9#XEKoecm9)UG4jI3c(1X1cy{ zUmKkEkzDz49--R1P8iVnu4+zB*6UNL?Jx$0G<1P=K#!y35)sw!3HVzCc z4)=11!e9QJVLNyoTGA(MB?p&a&jRpyhrD_Ja}B9KRt)xA^(mwZGt@SA2s4QSY(4T~ zC*X`uIEC-!@|NQA5&UxMJaDY`0gpPadq)D;{>{KK;W;GxEA3jpIAOK^riaz~nqIJx z12YREm0c*D&x;^E;Q=D!@kRkrkc0Fy2$?iU!>!5<5?Zx1^&>8DSA4+w39hfl`W1?9 z0xm9i0|Cd>V4?qc-^_Xx(5nrHe=f#LcnqX{odbdOolV;XbhV+L*w1uk+8dOH=fNnM z3v$RU*TWV6v|r~~D!xTN@oc{Q3%i#}ryr5%O;(7=^>v5Uxt}vx&jBawMHz6Mk^!$( z1Fl3AlmU>l9}g0?{e|TG_7YMda?xGAZ@a!+WEARsFgzfS-wg_d2XycqLge~DLlFUp zS||Q2*p3{5Oh6{_gu$OSQ&KQ&riSvT*Eix|`Xk`4`S7zu!$Ek; zA}Nqm4+3R9Ly}+AX|g(;%!DtQ=6}CACpX+yejlYbE7gxm9s0z)5XGMGWAe{Iq8gUF>Gba3SN-Qs;FO1_<(B{OTVGb! z2fEktFh_t%ebw#KDH$@K5UPvehY!L6Jr$eGKMySwW4>+60Qm2VRru{&u0I)>PaSpU zY2LfKF`>T}>H7g|a1kj089_2+C?~)X!I?Xu7U)s?eBd3+0ZNnvM2-_+sSP!mqMvCB z+s4QJ_S9Tt)0=-SW72_XAb?Z?W@rGkjf3IIXq$w@lp#0+n*MK5xd-EA0qVwAad;eI*fem=-;|s)28hrIKF7tVj@WYez@VCpQdCP2X&o&9O$9G%>(@6o4 z(XixF$)z0{-bj^yeI}PVdD-QSXvG1z_?C zxHK!m5`CzRvL-*cktzTBp3ab>_Py(4-gpsZdQuvz8tKXsy-kO$)=LMh@y8_0q#=A~HOz@f81_$eoc}KQ9z}&oONJ6*&Aml2e4yVWdkWk;0L22bT^@a`O zU`|^K)Q@$u0WMg#B_(sgvsY+O(W#U{IROpX6J{-k4_?nUc4k#wH;w%*NC)hP(q;#Z8S6V&!)aqMeYc4Cw)-X2LTWn+RQ-o>#QIfbv%CP58z8?2FfP; zqh%X6Lf#y+Go*gEq12uMGw~GJ`6kq+@;d?=b>Vg}1raiBl7lDQ_cNour^CeeYjbY= z^!BI}mG?E=hq-lIMP|Co2~aE}@J17!H_}LL4|-NFAAsS`0&KK@G0POTy;_po<2l>` zjbBB{#!s06D4VVbN<@2R?GBKVp+gjS|CSZtiX{X8bC-=g22m{hj$}X!x`?L?MyTuu zhuqvS^7j}&mfv3G&rkLF3t^<2d#)62q?$?UkloUR0*g}-i;8RAd=h$YsW{30bCuf zfE@J*U=zxAI#fX|^@huEO z%b?GX#Zk4v3yiu z{qdQl6Tk++cDnCud&Z6PAu6BIpUU+2hBboME$xMYX(Kv_cPq@MvVp3vA4fQObSO8a z2)MFApfR}Zg9=*&Izm0s0P4;3F4hiIgI@CivYb3%T7wS-zl6Z8CkI*e<3E%r1E?=z zV-r2fz5bLT*-{{QxeY+Bh`S@e_n}8C_~^LzArHJN$kU@gzBJe$a+(4Px5sc#RX{dr zkVjn+qi%f_?GXYsLgW`O{Qg3GMwlzMvezWA{#wSUebeyfDj>@l0@J}AG^>JN89)9l z>_x(#+y&|igq?j69Zzo?*12q#)I$i0lgs@Y+Oi!z0)5fqlvyv6dwEyJYZpANNV*^aObgIUzGKu8DIg(Z~&g9Ftzbt;>*C; z=MaD`dA{m!`sRl0(7JrQQ-(0y7G6LjGP@B-JcsYpIHaC_pm07=nW~QXN(o8OQ9am# z(c#wv8Mt-U;l^lbzA`6StRb0{aPZ#DNKR73=pG}zFqlpmUE06fqsh@ z?o0Zh004L4SM1lhQ%9-L4qALD3D!s_oTv5m;vI&(05V7dXcY1i+>e@te!w>zMo9yt;b4fP2ph`8QbSry?$Mte$% z#F62;^oIsBQ-BmuGkq`Z%6C9?s-Sl|1X8RJAc4q3elz$;Y%*le=@nA%1nA2vfyazD zfjT}6ly;v%7S7k}J{uGRvtR-%%{qs{qqs`XvHdoo@cJs0DT9DtLSk$J-%ev<7_#Ir zFz5=v#I3^LlMHn0#MbMc8dahQ>(df}lD9My1!vf4Fww9TUI)iU}dmb<^L~OuY7uWg`G~RR%dK^Xm2je(ss*v1GqM%;841>>19*pnU3ZFS! zbPr5l!vSQLLG5|q$%XB<%-=U6a`<`My;=8s{P0F#`Wa&+s8?3KzJG7`a{W(KWTvDL zRqX~A=mK066Z-a0a!!y<0dzllGIiWB2f!{zEpNyvDv@5#@PXyNW3Z>|-PyaC!r@il zru|z0y0N3}SugWj3xWAR2+Ks+&i=49mGXKmT$s`?tRc6RhoqY|dkI1fKcsZb?5UoB zKMX<^p3SlYId*7yLMoW68|$3l+Y0U%2?$qPB;ff0SKEF>11u8S!S)RM+2=Nxrt=~1 z6PBI!eI#UYeA~gy4`uqWqREi@5;8wA> zWf~QG{H`DEBJIGW<(fdr(lQ33XF^n++0pCSa`tsAa75>X-C)EUYE_~Bi!@(=kY!gJ z5zWst0RGJk&`}m==6dw(>n{)_AP-O~CQhSl3wV_ZfHzHux4O>nLIwDgyEt8QkCu~d z?LEDr;{Rj^0V?Ezv$5+bA^F-^$7Yx+2mV^WNpK0@g7+NJq18N-jhYqgLN@f?GAStd46wc1`eB5v=z<$<(Zlt6e7Lp znNHQ*WVqVug#6_R2>FDeq9LV7w_zl892!5HG4ssp9reyrhM!7q@p6o4MQ4knT2@@- z68(e&c;QUrR8~m{_V09OStyH`3h#!(R6vCZFyyZ>F5jXa1s>I(t>G*cZ{6%pdb%5i z2GyMO?G@1@CB#7u4&0b}Kv;$ma5F>WK7lQL?l958)5Vo3>vq+*$j{WJOR)V#q3`DS zS_3;-)#$5=?+#OQmFTi9<_ft)0W(6Zs|TMyEZo!j`%Cv>rV1d_U!hg`ca&ld*h0SL z>k7D6wblKA{hq^LDts8{-`iSSy&Bfog$4w+J?-teFQi?}yM>h_GP~HniI_52$+cekG%t;n{=L9UDBmpLZWwM zZqg}&rQfz3r!Y&BDr5`wBU>#S+_t|iaeGwCJMZpX^4kaw+J)^G0gc4>;i1U*l4&NyU=f|V9VmDK$&&1XNL`z<(e+vcH<79l6o}DQvxWPUGC%MPG~n0 zQBVS!IS<<*z4NQ%Ni^M#Qh5^Ad<@3#RI8|U%f&UOG!GDuTxn$xC{{%htje6g799G9pe>6q(%@*X2)(e`-PdC*`Rq%8}$i9qazde7T z{wr`53e0riy4NzwOZ4==ITiN;D=*H`b7Ieb(3g)`C>IBaJ&ktjInh5Eogo$Kt`)^E zLRg4QRS{L~0ER-<0zaSOR^0K7#8pZ+&?!&P_ z6H~&$tIND=eG@13d8G!S@7jrsg%0kj<;}R^sMII=4L&Ou{F$ zSmYou8o*WH$XYD3)ft9UB*EAn$GauU83$n4sJM8OEo>c2QkRcAv81$61oKoBP4R#U zJnVm~P5SY4m_^^?3@~+3vk#l~ziC&N^n9 z|K;rQBJEqrC_q$%QYCwHf}_flVMZ$CG+b{~*l@-=3tKEAhKd}u@Me|3&c*5lnK3sRQQ>^k zxHpb*WvZ*-G6EL00CnDrf+{FUm5@-#&4T?{>vq%AN1~sRQie@7eR6;>mgz9AjsPj- ztC^_9lkWirlf7R2n|@rju&2iPue1s{J;j0dt}!hFEm1y=&YK1GR@JMSRt{=sQwg8d zKmJcG^DmqYT6A@K{^LFG3fVH@zAV*yRD|PhZH3!yQJs)uT>pM$K&uMP)Z2CLW!m>_ zb{~9GvrFNCY9|z?c17_vu0nDjmR|?y%6{OGJ>PIOKr}L$lCC2cS~8taE$v%1X~k=c)vB zbPPJvo_CgmT#SDf)(Bm=YY81BUyC!{l(G5=zO|MYUlnT|ofZZP$qCmvW2CRwsqqA0 zKx+_Y*Vw|Hk4!NPV5+TSMvsLt%8(sq0;0NI6h^^ zkM@>4vv2TO(K%z)bB5Hj{2`XP-%^R$^fYnFdMesY_W%aW3*YVqi?+P5JzaM5&qPmi zUaNe({~qMRpOv%g_~C?QBmnOm&6JX}>3;G5KO+F|TU z=Uzdw{>Wn$uS_dpcPJ z@g)ppdZhVuD$+;0Tv6Jt`l1VNao%;Y#E2#&7Pz#$T0M$t8LcPW>cx1aOT;HzvGIBy zle-1Ke*wTS^_F^unBh#sEnc7YLM1uZynv}@trkU3>*`8JSv^XeUd1NZ615eZyFa)>itC8G z)g9j!ZNF+Nc;FV%uI1`;ZYm+$yO^$KkGlP_LLc+}-?y-Sf~@zU{e06ssWu8kA?NRK zNG|q&jT;PAKqZNM%L_?C9QYN(j(ZZ6l-Mf(aMJA4*3?7btoj)22|J6SN&R5gT&5PS zalV^if0+cy(7M&>(OzS*>OqR4JK7(h%O3h;WUbeYN)cMx0+|;**y5JHB`_P z-q#s#syGD=nO8xoVcMD&!7|nLIF36!%k$orUivg`$x!gC0bE_=Dv^<{3oYz!RMobv zm~cPSFMS?vH_kL)diN{z2|D*057LNhkg$4-f>qrsXV)%UOB>SbT5lQQV=UrJGm;B~ zEJe+JD{f`cce+0SYqO1%xav90TM|x`NHX9^pB#*1n#wsP!zoUUW>k}`9>7GCq~Y7C z|LQBf2lPuua~*V-irHi=*AK;tDiU1pUJ6#<#GX`7PiA=GMz+ZDoA`$1bceDF=jmv9 z*|krkUH&9(PPY_5L?w1L!$?`G=iO&>Mky=H{YsW?ZYKrWJim)hWAvW$zWI^RJ;^Rr?br>W$+f@dB(ZoUCr8BZizX)@tNuIv2^2#`XDUn)tJ%sn&@o-Zg7g%tp z9e6U<;)pcHA`~CccqxteQWr=nmS^mFUSKSn5he9_{|o#=;hoDGu4BSs7m?wPPSi6o zCriY9>3w~*dt9?~N~y;UntrW4QzUmm0X2ttX z4&#;HnFCyDM0!EIFcmEkwtk9#qU{@52xl6@5;3nsvt(!X`eYWaLkW~AY+S8MqU4-S zb6{`SadrqQ^&WwTrR~0L{+C;oexA%Y3*yrk}y6Xy!+r#fRBqWKP(YGvuJZ zlG|ySHFVk3H@AHPXZ`@q*?mI{Ou_mq_bOqac?_U;gnJzP|y|L?4(Fk- zIrz*Bvz0xGDLmT?ZlEmVe8&E~R|R~s2|rq*J03EzTNBcogqz$_ z_N9TgSHO_TTuX8PR-m0!_sHtpH6hfl!3=0{F3ANV4gMo-to8G-W7R9438iLY)w+$2 zRn#R+{RF-7U844>4o&o|9acHbpAWfOb<^+C)ymS#9O=VZ+SvesucH<6+j0p$%lI{F z7}vf8$@ne{s=47efGe$-Kl~^>@Rm{g>vv3}(SHs_2356$-TF$?F&`rth1=lFjyV?22P&Bziv=uMekD=h* zC%=4yJ=7Y320M!y)^!77*_V46YerMXE|@wMNl)`g^M>U(s;1pP)g)xyqDf~LJTOsZ z$27N8wv^N{8F!235ni~uEaxjeepl1m1;dQ?Bc^(gAehbSK?xWa*Cu!^Hp=kNd zrE6A45mvnJr+7{8+~U>#G4mep1vip;w_!%F#=WR3eTY+Xd@ExN6wr{j6)Htq$;O{Q zDGpvhkD{vkN`poy9JMxr!DJF3OgWVV!T{7_|1fFwQTz}CjcbOw_0`g*v+kELuKJH;{37qK)S>|Q)M&^B<5|H7Z1|O0Muok!6sjp7#bl(z>?Id>&QV!igdZNo42w~Lf#d|7w3G=p1M?-rmli=Qr{-ufks)`di*=# zJ3tt@*I6tjFU|8V;cD!voEfNEEOL)!aKKo%hd{|vMC^0u!_CE6@?8L1S}7QAX2C~^ z2()v1UBikJd!vVQ8~wiIwF9XzTz0REwEZ@3-6FtsO67MMDv%wA_oEU4!qs+TTG4_5 za1F?Wc`Cc_N_E;mgmVt6J%F-4(X zL4l?TXxf0XeW~HdYtPuf68Kkzsc=P=dVFLf-1Ie#fq#KVK&bn|4E3A+PZV2~@|>(Y z2R)kc>;M7pzIgS??-<_iN9d+Z+3LxzKVXwF=5@m#?Vj!JwJL7bB0fxpr z9djHJb}%DjpKeK|=^13~0yL#Nnw{{Lv0>bFsVr$9QTQBEjef$1NGSk2A|zy1g9TId@0~0CP%g_Wf2orgA0+E;=m)7;7V#?o!K<&IfKgSgr2?`I zS>UBcMWA){};5FkB|)vh^z~V)OOT0 zHzEh%BatB?`sefYTt|~d(%mw$9Ih^*(HN2)Q1H~KDHFy z5ATbfPdHd#$G-H1aUq+k+ILDZjh+(N>#?7hRIGlT^jAIF^K7!cP5Jv;{Bn3#!FEh5;Qfh^#J z`wwfe3SF>7F~i<=c<*g_B*6m=gff8!(X0CnRv<@L(6AbDq)8Uy*5D4^ZoFwMxs{M& zZQ-EitDIiv_JV~WdlhO!R*xMyHEi9_;YY%@cVjKX7jbfrS?i3BAGjqN*U%~gX{O-O_7Cn zW7if31F2pk(ZBGFGhl_MCA7JSv0_Xrn^9;yVIIgg9>XJK7|fDW7-LE>w970hkwE5T zXUi*xS{Sj*7(MbDQeMKJtYxc;n-)ida20Q3Eep-H|6djL$Xdms!hT1o8MI510af0>kP z8O!`Uj9;kZ&NH(g9w=B=Dt_s%g^?s?oZ&?Mc$4#yFpHmN+%ByPaRXq@VGa@3E!B$wa@ni|Vo z4<(CL;fp@XEp-;`LfgD$;_K*lLeM8RbEI2(?49S23swG7KeaD5a_eZ4mgxx9V-UVj z1*LBt9lyl!lY$|A&szrHAde9Ze6rqtSzEArM9mw?XUbkv;&4_{4cJgfJ?Xwm8fM2FZ4Dq?EMXx7D~2z|R!8v<5~O4l$?8%$QRS|m_G;75D3z!w#dmLP z@EouxW_1$RcLiMY-+4pCdqfqz){~}ED(H(2J{U|$TM^dwC}vzKZ;gGK_j4Dmrv>Z3 z1mW9Y0PbkxddoO~kG#8F_d~N;fLr$==w4EPZ}PyEVt@l-e>a!6``Ha>izap+9jUb5 zpz;3CN4D&QqO%2eZ*D!PglDCgS0ck{nv3)Vh`_Bq|KXeRif}HWLiJk&Fg+iD1?pptD zKjZkXU%uTRBJNmtPUVk@(|?kw06j!qn<{xZ{OiyEzds%4hQbMxJ)z6c&<#w@@WZL$9dQqpfiS4h^ayC$orXwTftcBRDsj~#hBm*ep4YzoiL0El zDY~%_{&@uEAqr9E^J|T)fb_L%$YxIgc&Hh?_oILO=FEc@N1#EOK=z5)lwd0sdcke$ za?Me-qyP`XUbl(kyF|>dUEA^~cUUBuU_a4z3D_71pnM5~Tlj8st15%jNZnb$IM_|U z2SgwP5Bze|efSQCAOz3oe1*>K6X>Jg4+k&3z!--X&C=Ra|5*$v&T#b7s+=N9*AUet zO?{B-nqYi4t$mwBtps4@I(kn-zc_Ti?6;+zuOPcl;ze)h>Xy-4Gc>E4sko#-^cF18>GUPB5Jnt&Eaxs-?dXV zaFsI$Clst9um}zCddRQ~xf>vK>>L<8TLc!M@ zwR@yLxPkn?Kn+HrM*-|;#bHfMQmy3W<_?gNsat+0Jjz*I+KL6Eh)x0M`M^l%hVVw! z<(?%-FT1`K%@@R*u%qEvptU&G?)e7#CH@CnC8$%%Jkga%SU^V|MrtnJrwwN?v;*5x zoTGqlaU155Iex< zcP+1AqF4jKV5h-2*2gs<=DK46ij!l95?IQT9B|*|maG^iE zGmyAu-+B^_{-`wq!C)e4R7?jYP%O5I5lT!H~-aV*shT$!Cu^A4~$p^#0&&yJ9&Z` z;Hr*gV5K)e*fYgpDM_=1jT=&%r_hm<$SBiW zMqr@jc%pATw1xA0Ul+dC)$n2h(G{8w=rDZ}QzV_6vl7-EKBgRw&~ZU;rQg)Bu2KT?JZfjt=U4MMrKMo40T9 zRc^B8lk{`dJut-8{v`<$vA4A@eyeD~1q+8`dVCB(?>YL4m%FlcYIp2`e=e2ZqB-YY zBv@r~ijw$^Tgd#00-E%5W;$R`b76L6nW$HELPt^?OpK3w#l#Wf64F|P3vPF{s#dy= z2hP1^jB~r3;W_F^@$AkPxuRv``oz0=Y;Nh7$kvAROoTJ!;R?CBqwUY#O(}C{w{A}2 zAMs5to9Swq>(O0aaK0^*X?y2*}v7&OAFrFqEY%=BCBpFUD#FBq*Y3pCd&+=&)&*XlG#$%of z+Yzo~1;l;FBy*;O*}#?BU7utP^7?D%@gJbYikA*=YS}$Hi!Mr=AfUmWRNDTo6xVQN z-@2pwMuG(k2n_Fm=<|*1UmGD&w9o`(s<^g)_6+d9UQrPLBfQB@5K{AenG|2WrSA;0;#wH>fv)!WB!Z3Fj?z8#RW5n-Z zc)6GH_Qy(O@QGy?DE*O$orEuYYUGfOp3h6zdR<7-F6+aK)1f zLAZ&_T>Klrq4mBt}39 z?|FE^?Id)vwp;XF_ogzf8-0Sq%ZG)_3uTvq>FxeW_|Ms=X0dY6&DOO zd=*}Mp>(Z~>51EpCP(H+k9dr6ocfkQ?%D@N*pIX0DH+&vUTcs z3C42^@Qy)eeS0=+@qDK+NWbcv%jM@4G<;8jv;ob4rQb8>Nc!HOAn+OTQoJJ_n}hyX z(<{de7r^fc4VDF}=Aou$hC^n(!lSbo8Buv4oRo$D$2GY?9wK@cOj?{xHiU|-JNf2RSl&NwyZLXo&%pY2W7}+VkxLMoiY?~dI^Z~SucMycx)HsDKBc} z;B>`+=ArX=7}p-b{P9S6SNw@+Qcvfpt2obP^HM?<^r9cpUx+uyRr^r_kzvPlQA#QOge-U*unQ(kAUY7% zT)!a6d~Vop9D@ZL?Wb?bH=iO6>Dko?i|EClw_1QKt8GcH`4;b`Q@jKIFH&4p(3h9R zTF~H^F=@mDugpxNi!GW;^FJ$=S|j3Wxj9om;y@CnlF?X$<1CEs!y_JBc&H`vbS0N} z-R9kTT0_?*`4*SxDa2L;U-Z7nz|D`M+6FW{F4jhS#*Z&YAG>j<*Tu&w)HFD1q;EWW zd|;)MTMaM7a$rIj#Olm#hxyc6>56+hBH*M**3WlsUUpNhiVPI84EF$jvk|*s{olt~ z6qaUOKp6daYhAnp`27bf-fmh4Mc0axty?Qnaw1o`!+!3Vvi%ACA~gaz%jXEL63R0f z0IMasNzgJ3#SF@iPW$X~X0|{!VvWxUPtuyMW`EoH{REWk(rz3t-9>oR_9vtn&wGMv z)|rXM#>Fm~MHhwF;)Z2ctEtFH=6Ad0?asmG0TdR$$yShD%9St?^=u4(`m@gdu8YFk z3o$=>fk8TTrCa&@hik2A8Y)6u=T6CMJd36$YXBcjYh{L4>6kVVUqYgm8WQFv+1)It z^B{Kf8BVug#!j+4KR5PT=42h~G+WS}lFIX3FI0Iqjo|DM!DRJ~5U?N=%|EZ|U0>a+ z4f#+|(hc6QHYTChfAd6W-+Xb;InVgVYSyW9pjzFe4d5lAcL!U}z5n7sJILy7IE<

~lF;%FKJ0r(-#(vf&-|`*9qA+keiuLVH^_LGA^FIx!lYMu$a=7!Lrx!GV z0h%=&wcF>|eFErUUf`9v-hDvY&g%4+PEtGcUo;y!XoD3L7D<8s6p;q<^CZc;i6xO5j_Q?mP0FUbt$=W$Gn^Q16MXql5%{mvm!vr`4WUtjlksncA&%?V ztMo(VT9$Wj5ed-?B{NeX5xkG_Zm|aqd<7+V`~`O}&IQp|9ftjci&X8NfikbN1nWCL z4x2r@wN9^a{Qg({&-i;7PNC;-Klyp?VDT5d zK7R6hoST+BKMO>i3gGEX9J1EoF+L|z^s?QqnE$WKTESY+X|Ab>b(1uS<1NkikfJd% znkW4ER=J$p&Kgfp6ps-F^DUQsv*qzgU8 ze7E}LPqbUuo~YSK)N)bqX5*H{zC!AhofbJiyp!I?cxPQI*J85#YWIsv3MWp$*H8rQ z;nulO#6a^39_t-7B;8B6UGdB2>Ytp0a|g1odEoR^Vh!LhD3pS1cQ3cN>1N!@>di#600Sjlp*Q+* zA}Hp7-iL2sAgm7j!~?wyv$V>vbU$hr{dR)dtIIlNwVh>iEuu?vZDaEmthOSK;1M&)b~ zyPtAQ-LXDVYmUe+GZ=-}!}x7X@P!s1aPS4|OX|)JAZs|l8YcR%?XXHOu{!HC~?^-Rvc zKp8R$8$SINU&Wu)Zyz#pLF0)?ukBQWDNDIv2J>jw8EZ%sziIpcK5X_p^45%y1fguS zk>^=_49u*Iuu^a96h+f2BYo_nIg~ZU-=&8;RhwGq#rn|7dswPFiNRn3ro)rQxTaf> zEqKOLkGDcaYoRF^Fr=a0o4!m~H+=tWD<5IMKa9|i>GAehPF!?duupC&pd!KUvWws*0> ztp<|!!cP`a02PVx-t@jja3>BG!m)vE3y&kiXs-@X_Up+Q`NsqJa zL{{3QF-ImYhb?bv@xDYOA2w*=RU+QCn>@*s;NztDWDD+$$F0QsZMkED+msvJ64td0 zxk`%{*H_`k);h0VNQ=&RiYlu7mUvcBfI#mUj{Yb6fLWe=mWYddr;R)0kc{=uXk{fB zO0{|#($wP9q7LhypDW@UF}>71tgS&bt?*Rpf8qc&XBy^yQw2@W_H;eALpota6t!AC z5Yif27rU+`NRbycXn*K2vqiOf%X7%59p_7~TIq~p@iuv)bxbu$WJN>X{(35hl9Tre z)(IFU=w_=}Hspd&Q4c1u_1Nk=HNa;)+D!r5Vy_R_TKLpA+FrOc1uFeQO~O1fdgHoq z|Hn}Bd{ESroBMg4vDi)-V*`IkfbMFS5N?B?v&hUHHfhlduVX*w@QY(?fE&Ab^py-- zqUe+9Ro75UuLQkG;xjB4<8Rg3Z>0|BBm!57!DM7>yZrHvI&nNoRdA*b$Fylx9HcZp zyd3u)Kw~&*zjs;p^soSkVATuqW#RP99#Jk2bM+h&{swlQmY^_ePvOTqMTRRS5;Q;b z)ADY)g=HZt9#YGsPd|Ttn_C!TarD#g2&c2k9sClj1$qtKnW^aPrWY(^LfmgBYcV&< zgtLn*&nCF-H*2tI7L zQHli3w!e_cK^Jrs)eb$RCvzPI>0G-tk$0Qaq3fYb2OpaoscBpcHj4~kkk>hy{7<^NOhwly1fT*D?b~y>fYQ;2^6R_GLYL92EpH^Jn~U;X`;2%M zUG&2}INAhQYx*-s;eiF@B@TRnOH+6LPljFtI2W?`K>H$fldkD6T|=2_byX!iCdl) zcYPXR9FdHwm?k1TQVb$Q$e0Zi&NRTXbS$H4j2;@YPZ0&y&LPxi zQUGZ|NV=MC z5^gvD9VFEk&hY7P?AfR#nV`9qu|bAB0n0Ez-3IoiEH-za)TK=-k&}2IxnslD?EiN3sOJgUU-<02+0SbJ83l~y2myq# zmN9c&KNS;d30NGG=-CUef@UZQhC9vxnUf^i2KHD*97~{JF+TssEYhKy!xMUoj(vKx zgYyxXXHaVoA!Zj~n@?eid8Y{L0oAfxS;@vE777@0bOe=G;NEc&y6Hy5@YVoIB)k*^xc!rE<(`2fw-^3`tT!{Q~p3J4uV+_AX%pnUT(M3}wG1M>dz0q`jnDiN6e2 z9l3cdSseh@ZsJy_x4ejd60~w>5zfQ*Hwulng2j1(G7}D{eif*I^u1iLEGOo6e(Z>N zaI{cP*K^@^eKS(TVQZ|w(D@1U>$v8Pb%39rjVy)0wc}=xaL0Ra1sH;cL2gjtg)+#C z1t3e+sWUSr<&=nSm2LzSWn$JEOta*W|0>k{8IP%9w9-BRPIDjg%&m;R)s?L+8Mx0s z=)c=CW0;S4k66%5f5;W1ELtyOOae6r51K=WdgwhbVUNm#&EEw+L+8u3wb2rkz!ND6 zx^Dw)hbo|GPKq~Aoq9zW$vO!WLU5#XkK)mkXs#AzoIh1@px=cIqpL4OQ(f}qaO0Q)H!x|I z(_x}~;n^w^(F!cqSx5kD-pJgmaDO^nyLM z0KjH5#a<7Y;sJ~z_F$e-J=uz!EA(iDtc5-t6x+uZFurE*Hl9Ph* zKYDWY?RBbMKK=O)JUP4HOBP6gWKzyvpYzFfWlbHER6Y4*xU$=>5_@VLSUoR7Z9cAH zD^D8;2#duF=8=!I5FVAD6ZR+D!dQD1TWSY2{if9|I@SOhBQ z^=uy#92Dnkvm0Mtde0!R*`-dRU|5Ooz=+1hg9QZc+sO_xCoa@7eDy^<>kCfml#V;$x4$mVz6ipHN39*Iq7u3BZw-P-wX2<0hcqNr%br z@AtLi-u{a6_xtt4bxt=KAj_|ddfe$0V@}okKevL0-j+NLj*^rJO`Sd%|FSjKyssOx ze?KXS@~*4La>LboJxQGk#w4M|^ZoDdmT=gBegCDy3H1(NU@AuutLpZXVJZ7Uc#zNL zExx};iM#$o?(D+>YT76NGiCGPrWR_#F-k+A)Iiguf)Pc^z-5ZIP<8?6-uuDGK*hoN zx|PSCdwdDRBgt5>UiQ;4*&G3mLshqbO!p_ck;^K$f*Z_)Ba@|@P+|pyf9~*etK+33 zg|=DHPH~Jzy|F9yi67u>!@z#Z zy37d^hXm%kgQWA`R>X?sfsw}tORs@&C%wy;^Zesmj_BGy*rwC|rZrm9tMrX6Fu@w& zQaGqnn2pzZrIw70#|cKS+-m&%sN5c*n$7p)^?RP93znObEiBtrbyWarC7!|pW5)O| zJV-1%EpFMv{Q6=is92#n(Hahnf@f31uE(r&9;dmzP0N#^U6^ZB83J9Jr7oTy1b;-smkXydg1%427^)unEgL5T`;cR# zPmlkF#y(oueVQ`@k$9w9SnJ|V7PF3sHz59L_$;zM!G(gVj-u$9;{zfL&uO zOh{-y?mGyzXzsj4SAM-l>@F%Nz#{r1eH_cB|9U$F6hwR^Jyq^RzRg$n+w)SrX7M%N zI6=55$`x3oAdNf zbmr9_r_^~AmERWw?O$c23D{*>fTp2Up}rW*(+QphZH1_zcMtL`Trzbm$?-zKK7JN7 z%Y%_e^!H@l^|ylrR?JYf^&1w(-4wuJfEe(Ndyi%GUq%W>f^TYX0H2p-zFGL2?vkXEYtMsK+{GE$MM1f#sHlVi{vXhr?JNd*MB9|p zvP+`N;%t@T-r1*(zJsOl^Rs}upEf)ZAZXIC`qqh~?-HvSWqGeu$RYNm7Zhq#smGk7s#+_GbsQkzm{ zJ0X6U-i-k5azoE7`j99WqvFyME8D9aC7&}P5sEE&`0@42`2q_VT2f*@&iOX(`H-eX z0N&`;yrRb&-IBsl%1#5W^2Tp%B2k~0x|w(FGQs(0#d7I>S@j|=2hSPl%}x1|dM_~k z#tmVfP65wb^VKZ4{WltV-ck*lz|P=9s;1AwKE}KT3Wg--UH|Rqvc4h zt%a|XA%7rvbk|FB*FDY3edi3G!v&f)R^3KJ6z$eHBwNAmK_ZP%6Em%10y^B22JIaDH# zy_2@KHuv2dFX`12qxN;=^NAFJ#Hs+T-n=-%h3c32UWTxB5+4W64L_C1s2kZ2evK!4 zS0^K8dSePp9^fO+9M5(6p1nt7fh8*rQ`u_Q<1C{sscX0^6a#hQkH) zEWZHgSuy&|{{ae-ZR&Qoc40ypJ&{)4Fq)!#oJS#C z$O;Em$>ohUd&~1I-?A10@5S!(4yAoE;eZhZ&Y$6rSJn=QLvdbN(`64(yH0H*i{_&qu(KovR(i(`liICmw)?Rx^v`a z$tjq_!EyG%_>s>$UiZY9Lhe4IpZ2vCrIDD^lL!Bgx$lmr`u*SMWHy!3Ldps$h03Z! z2!&E8qcn&jD$3@xx6GuB?6OtJZW<*kWNRWN8Ik$D?$dI-Kaa=n-`{_|-|Bds`*q*< z^ZC4<*Ymn;8yC5Kd?2|${bA%OCxeT&wLm2wT(onpN_8;XVwl-6*`+>>H9EJN>7J}( zoBg(Bw(pG7cU45leJUOPKmHAQdeU^DlvNiLSk80^4R^-R1n{?uzi%?;mp1 zXVwDF7VAGVcb8P?ff4uW^TH^vzeg@j`lNl)+4=qal#yi)b6*UOY6Z(b$VwMl8oFj` zxMAVKQjOSSz4G0Ebpc6Sfy@&p(`fyg*MEiGFs~gpCz)+Dfmy%cY~7EWCtMF*J@%n+ z&o0b+9ejM?5XaZH-L^S>2A78#T_R5Csr4GB&6@FD4LoQ z^)&IOtl1ZMuuMPl@g7@bLZ)0(>x_bsK^MK&jCJW4-oCJPJM!F;hcKQj$l$r2vhPzy zclq3Rvwt)mJytch`oTc%!Tmm%unKA=CUttyxoF3vuv`6%xQ2|}&;-RMSA1iUXVQu* z(WVdHzTeHm`KYaHkH{HiJw?IXudV+KiIA&x*@Cq>aAIuBZzB*8Sd>Jvo!{AC>&cE{D&2PYbzo>OJOt?l;x#b|`h!CbQt7 z_okD&^GE9_v|8e~@#lyfuQlLfhvcu9V)yye=g!?6TzfX=czjr=VN#KiX1p&u$OZ>q z2_J97jM2ejz<~))4#OMRrExFX=nFog9NVwPJ-f-Kcc`}ECyY8=O5SIzqoOxo96pw~|L;FF0)Wa|&%+`W$wCppz z+%Z&J{63*3GWLL;;*)KmkPs{;wXDJExw_x_Wjyre31J0o*8CiYi&6#b2)kjeo0>NL z|Eic!J-&Zg%bfr2{MYPVHByBrt^Cm7zR^|bti!HuZ~GDA2A_=y@3)1Uh*bu<#URNSKn>oS$pdN~CGR=UkRRg%CR^5cy0ndjb`{eGma*pTg1=_(1{ zGJdlVD5ej_7H+cj>KNLYlm~T#@Y`=hHwT8sHzKAZX6g zhlAMC`ur=EZYX3g6eAe<*)Wx~E81dM&XKkEK+vdlkGj0;K=RKUcalPcjNg2U1xa{g ztxD0xT7$#twQOAx)~Cw0rkxj!Ry2M(E9TuO;%zJ@(bWCL^~HZ!9m`AGnTOe2%fwo?s^C}kY;V8xKTWrmY)+G;4Jzw_x_wpm z5QMg-6;0PEMOEHh;x>42VVf6W`)$YcS9s=$Z~W$$*vwW`!s*;Lqm&jvxcKVr&5Mlk zFfXH4%eFECT;VqR1HGcFg_U#1MnW9= zhpH=clN(HP>K+f)50wr!7_CC4OaTOo|t^T%#*awTE#FBFmMi|WCI)5Z<+Ed)tqH&hRTzO zloFeW%c(YTw5Ms0xA$Jpv}WZxb&i`u;F>CBLFyPF=%da-hfVhyvx)-*mO3@2vnrc& zKMict3!{zoK_fvg@c9>Lwy1mY+x&=Yf}l?PwAXH%9L(~0mK#~WH8TeVIpvc>|6?eJ zstPi_QK^ytx~ap_1D$s@_B#6+zivSZ8WG%|&bwA1-L^RZ#QROSk4obD?!7kbd-sq- zDB4rX8w0)0luMo#{}f`4992d10INQ!+ES5f8~QhJE%{*MqAg9c@r@_%xntcyQ7+mu@^)uIYmx6p8J6t#hLAB+ln|PEwC2vXf;-cV79C2? zgV;_t@H$NlM9zAvnJe}@ivC&l*00uJ5HeZ7sWxqj}?3ufx)O#J2QRyi1Ijq z&PJV82VXCpFJpNPK0#0UqkHkp-l%;qjZ%(*gzvMg)}!@f`{YLug9v=ILaCa@t6Pa$ z^ra*zEBg#g&%_oLFFd5aoZQd5W|c`YiRgxWiK^HT_Xc15jKL`@NeVwl*T`FDo}J^L z3@4Vdt0hlx8guj1-!2KBV;pUsZlDg`5(j{^Nb~0E1fl>0bIpgpArOC@}Yvt!;21`->%(% ziQnwwu`IJy;~2Q(DnI(K@@$5JW4>+H*^Bg|kmYVZsQV@cjSH;vn!~c+mxO$9$XU*ISGNP2=)#B%S$O=&G6ZazCK6A20+`zkCqU3h2VZ+>X@sGirr>tGj# zRr-xMcCJ7JYiObOZv@hd1&W`-NTJh-)&5qBL_hjL4H2O z)(&w#5t4u+kUd{|$75`?0yfCRZwJYRI&_yM+y;ABa#O+&xPxjM9=ht=K85uVlf1L@ zUNjjrBS4pZ()7LB!SaOc`HY7NaYUJkwuPtdO-e*tfF#;?vc?Z$&m3+{wQtuW9Eb~3 zrLg<9h=hL~S8D&=MefVc8*K2I0_WnMykH<|c7VC+SR*nVJ`reHQn z^Io88HwU2B4Gk>e&Pig^$cx-ULupH{-IvED6NAcdnM)th>iGjU{{98O<4qTF_Z&D> zx@86VA2iQdZ?J!eh0Jo33<2<|qzWLm`rT0TBEnbR`2I ziCXXR{8>g(3HQP^hh_GR%6`a;^OHWHQ+{3&T}L~I+V{t5l6KE+d@KwF)eF@Ywu6oh z)WhSE)Za&mtLp+T0N2N_HqdYJlloNlW0*bvcA`WA6xR7>6&DfZU&SBo%hJ+Yj5V51 z-|WmoC})CJ&*bFF@bG{#%oh^bO_RN}BRFZX+gs3V3RHZ;hLx)m*0u0g-;XT_vb2OwEHm z_Tv&3m0e*Vs_3whQD8Fm6MsKFZ5z>oE7}G>s+jD-Xi&mF-SQVzKRa|Q!)++72olg2 z*B&#f0iLewk_!>RjbNGxs)k@ zeo}u$Hfq_F{lGKT7ospe{EE!neCmU4&ZjE*Z;q$bIm+zcK4vBHF-FV3_`?Ve;=AmE z%n*omuI+hvY$Z17%G8}UmvnFDv~x#<-};|>%$OV&o0=^v$A9?^E$Ae#TySvON#j%R zss-{Kn!d9g>Qcaly&BWF?iDb%@etYttEcZXx(*?@r18#G-D$_3?v)N^uOu(c9hLLNy zS7n0$eX;WZpCweDUH+WE(`U~7j2t9#vpZb;UG7of#Ntij{7o;rIBUbcH*leyUj|Wz zNMrMBoXnf3{Yks;TY9%m9s+`auY-tC1PP6&Mzu`{HDpTfVjhwI$$pYbWoK zw+3Cg>%dzJ0gKFvDrxF{xZ5~`i2qMK;VtV)(Gr>)CPM$wVu3A@8Z)KCqLP|6gVq%? zU+7r>e1!Nlea;xWYs`6;)SUy=+rm6~I#u*}v5D@&m`SJP2cjokEBB3Yn>pg%;RdJg z&5NF`dHPUaM`btOElD1bcg{6Uu{pC!x2-2*y$lO62w!3XIUkMQ)(Cas8!PvnoyxEH zW_sA|{_87tFNfQa4{mp2ofb*##Lzo0=M+2k>E%i%*;$x=@#0gc&aPQSYSEP7bpA4k z1OCJz+K-yJS}evecz@W(gX;<+xgUmyhpUP%dFCI!es@Q_`N4%a%5H~M+}_<)sQF*{ z0cE4W%O5Z9#^&EyF8fQdLcof}UicuQT1nW|H6d>zHMynD5+t;@A+K)p(zw1nnAkZ3 zl=!%{Hj`rT?IA9djr~7Y-Al~G%wi@PU?hIYq59^y_eeFmZEk_q)ASX*FYFYn-K$0_ zzRkVc@SWe5x4^)wuuy}0i7C5@tT?5}gT=mUkc_7iGLCZ;nIe<-)?n|%W;>GpqNYee zeoK(4 z2z1RLd;VY1%ym8{9|yQ3-vzyf_d8YIHAKgaIV@3$jluZ|np2Tk!fMQXdN5{jS6vdf zQ?E2A&>M$%B!S}28u>}wsP6SqTOM3oFmBNNZ=!$Nhw8XgHX!X+5zu18+?eN#5sPl@ z?wkH2#Dfl?koc>D&&9RavO!hRs0pv5j;-tY_9o>?Zc_HytWL=AJUl);aO4I$x^mE4 zyfXZL(U?>LNb@WA+=nFUzRzX}Pc;LU-Dq1^b+sL*hgdrXDJO!~RdL$pL^l7(jt!Y0 z(kQ$C{5bbs^MmRK&|dvvE#ESP?oVyALbYN4=a98W!tEi84LfF=?)cq#yGVLiniS_F z+kMi1v@gk{2tC(DaaTTN9sPLmd-)?d(?;v4)75GTuQyK;zSE8{_W>ER1*;v9M?X;d~Cj?a-1XOP&VjCU^Gr_Ca<=X68Z}>xVy{0bl7zJwMbJ{9cp)>E!=am=Oxy}I%34oXl{;@Ah~&gwmbeXXhPwlSD)+Y+Rr^uNNR%69lI zEUx=5LsuLW_)bp(;kCSSQX?c7Z}KV}e>s)Ey=4$3s>wP#%-&lNt)zS8{w6+IC8O2l z(gkT=!*Ikl`Q+uE_uhr?btlBq{g#^=*?ay#JcBWnkQFZEh8&lgm2o2jPiCz51Acm` zvohgrE77@QyBVh+_vwDk5D~72w)v{X_rI>GpKhOeGNi^W3(caGnga?Ve4A^s_dUOy zQg7+#VYnKy#%JbRR+lxDZ&T?wiiutBVw3cfWx202fu%Q}7ON@ZF89^9ZJg2I8+q#T z=g;kFQ;5S9U*zl3t2(pqz{HqSH}Q5cpKq31OuwT~&G-4`UJ0XRMchIxCY&%kYTjH| z-Zd7~D;-gevxA@6)o!@%oY%x7)`q5j{sy=Q_ zb9){9>d^c&ONvfw?-j{RDuFNe-tv;nv$(Gkwhy4oBC*j9o{q^hk*zV3$O9$Ucg^78(Zlu+4I`nL5< z*-Cl*Ppjq{o&AySUTy6wc&qc$S8Y_HSB9Y45}ZoB4g4xWdKz-l9em}RJ;;=BPBQ4! z$j+GdgBjV+lJcBi@dLVl-;r>dcQPqcQsbZ0VBQ4k^=mFR5E%P9!eJy520e z&49ITdSi&dZO!@z;BA!aml-8y75%W?oTANtq__#V%stst>SvO*1y# zL$dp_9%KG>?ndl`vL?BbpJ{S2r-m1(WFaZ}lmm#jC{3k#>W+E?pPT*VW9JV?xEwol z^nN+bPTS~&q1a*vsFBurWonG6jwt-pXQhw-*6>R{OqD zV6(((!<#5cpw2A0+lMUw2J=qCRmfvcIMjVT7Sg%KBTu<@pt|4)6NqV{Yx-(v9&RD( zlgji*GdH?HKVm<~P$KgADCqZ^jwG>WY`c!KCGdb+bAQvV`y<}hGT)@BO3j=JR}Ztn zDxSn<@#^f)VGomhY!q0pd!-H5q^viwuwUDLC42DU_C;|Xy!-`!{ZRkBxj(Peb1tjN z*pD}tW<*;4O3zQ~n>{^0vm2S)`LoZ*fS-zGo%puemzjXMXfbJRxhK2IGtTaFW<`^J z#iL_~q;@31tfN*{uq^pYnwz{DyQPD_V=wqc>*azgj*?+Q-!XiceP*<+%opN~?wdYpJgXyxx5YrVFJM`msqAj=#X3DB;$<6b;CbeMnD?syKS1#|L!XB+Q!)Kl-xMkcySVuY_0@N~U3pSOtif=c#~-e6HD zzR>ygDb>2ZRqInezE}KjTKQ{102Sa(9#NuW0aSt0to9UQUKz|1pZt^4R5I~xn*-A* zwD#^@&x7U8L+8G`BRTJt2~XO|A$e@~*x+>x=4@4e%8a zqgqYx()oJ;j}}NluImdg$6}m_D7&|hEuM|So`@KjhM#H;vVS&8jLeB)fzudhpoL(p z9muu!aN^ruBLg8;>DVSqat>zpcPal z+T8nb-DGl}NvdDiHiQ~4NdB`b3m?<5%@AMmA&`gj=MjSn4JM;bq&JelBXS+;vY!`- zAlui2qaL@7vLL@|(m5X9&`e7?qddY4AaN*1eb1JKeAiw_8neK-vSMCa8rxO3yEfMF zWGb3#xZ5%qn2n`D4`T5yl-2t?kMtE_wS<-|dE6VLBVJZGt1gC=HQw_`A&HlEov_N? zvqarm5AP~)ZaY0`B)$#fTfD}a>kH&pK3SFgs^_9-3X~1CpPs|*BM2ML=vNPn(9b|LSUc21- zs^)P=&l=i!#DA`#5`;*WVBgKXvMgf#6I7D(4Y!*74@s(qSsW)M=HB>SytL#}GJU=w zXS0wpGOTDV_J1*zw<9e3?2Z$g<-6XBTkSf;)%@KV@~b7(F-)kxWV%0n_;XkZ61vSA zZUx!Sia;>wsU9^;X93Z*a5Gb8Pe+qkfXv`oH)iT%G<}6MS7hk`X!UBlBVtgqZ^Bo7 z`PrB+mT(ba8DFq@-uV#2<^#okMb-*oaSH%>bo!Ztj%g8oYPxHNR!E(tF%S)_G~Tk~ z>bl<(fc2P0qOSR&e1b2mf|EJ3(KAlJFr{k9-R-vV;x^T(!Lcnm6`Z{CJE=p&1=K=M z1)~eZvs4e0eDl;CD^7%bsB+HG0`9vC<2aT4X-sy)PvtyjmtD}8XNp@t!{MlYvgnn| z;afM_FWJ_c7wU8O>w+RxQDwQqh7qOHqjJk6jqO(jt52!0oC=<~mbiP!e{GqSmvLDP zo!PXVE8Q#l7g3FC1+!^Y6S&v&CUJikzkD-$d071d%Xx=PweOZs*U05A)0l~(eGNA^ zF+Xh9KP_6oRaUef)2(;veYN+_<|^R4A|7786cc01z)x`Gm3x1p=pqwQMY(4r?;iEk z-O!aiIDvy{@ZLtjSQeFv3;X4*w8laX!QG)*UoO{ertt>c&Y7~Bm}J=Z;!|JGk*W>s zqkZ32j;s?$##htvcoKn4pUy7h*e&m^AECm4vgWU6@%gz?Hum>eFd$_Q+L8CqZ+x8` z0{#?HxE!AH?iCAXTN)?G6|234=MC#}39k`sk!8NZ>$^m4@;&qOHT)`%_&MRE_%%{y)vn9KhDyBnmFnU{Tw7@DuDe3FB;*r70CbkwDr4t9 zi{|$nCsKdbhT+BzmTPx-(tW?5m^UoGcWrNJ76%E0#3p#cvh&xb!&rpDWk3_9FXQGnvS4|oUMAI*@9RDYb8 z1awt)=oL0#-F*q0y8F?=&R%mowIdenC{5j!Fo+s`TW<*SB(^s%cICQ0+%}3ELLq1O zgM<3FRvRc2RCsY~RlOEx!lf$qgVmTRAQqP|)1;A{BonhX^z!#86f~0=K z*C{T_{QQ=SK35B4x=_kN0y2D1N|R6*>+B77@D+7Ra52gG+^UuSqFiG&LuLLe0~WXq zY(^tipnrTp?O8w}$tyT^JLz`t5Y)OfcSR6%B>fY)olT+;PK^-?g~_$-+E-;5&P}oJ zyWbQC&a;+cC zV=r+M#1;c$PSd@1^!BO8pi+7R#?^u>)(4#Z@VBkFXO}8D_e!vXLCLn5wGnT9Kk&&PLycb*avu3+|6qT5P;(p-Lm#f$HA~Q?)IOm}e~o88dyxwJhiDXhlR~ zAXdZ{siqpcgF}lG5b?xR(c*^)9Dzk_M!KfTiIcj}FXM({`g!K^N|ehb2J=ALl07wy z?w|C`DQBnii4!w8LP1EZu8ADVSr6Y9;&guF0-M3kAX4&Mq&@;yDIR7S%E(N#w=)kF zjq$CmYs(?}wo`B79=h28ll$}TF5$1$A|_jIXYVWLm?l5-J%A2>G}SZ#!d^b`y!Eus z`7+K0)lWH2yeQ+Gy KMMA9F`#_yyta_4YL;2_WT*4>){ZFO$^Q|513g>?6v%5^ zlsg&vuwJY%61QPH(g7YP+e?RMnIetsrtIdX!qa|!3$(9-`H%m%g#Bk?Ye-JFJ4vEA zA_i@Q8{5h;pP^|JCnDj+PwYo5^mAp!sP*CHtnppF3&b92$!9bHa_UH^JY;_pZ1A9t ztE)5ToD?zSp4;oH@;Q9c=z<#pz+8;{l>C?Ntl%Y6=0A>c$~m?MpV(}FYMtAlh`u^^jIf}mUN&P_YSMKRE)s`(TI8F0c7GD9}v1%dW2>a_w~#Wb?dI z2HTKW$^NQ9pF1XB;!f$ia4G)Q|CmI5N4$P-DVi{d1=w=7g?!H}&6%D`hL$YKvM@Md z;W2btu`*~Lm)nv@cz6?@xJgwh!iQR#gE(3Ozab;NYFm;bTWC8?T)`rl?Fz|})+c;C zWY2s>#_nggd3jlPwYZ0=x5xYE(?BSW;!J2p;VvC}IIs4}DU@eH3J_E3?0$6`dv`S% zbb|ovewERU>gqvTM!*G~R{u@sV%&;`hwIZ669=0<3m#hHiNsB_>CNX4j=P3bMYaF% z-NrQ-X{Sjoa{FWhgJn4Xl(vvBNVig&4IxJ~ACwi$x#@uCbAZk3>s%$pWVX!GTXOI1 zThXC-+uP(E;Zk!bRb*-#H7)UM&Gz)eracF3Sk0P-zj>jZt&l5Q0AYLCB&0hRj+DqB z_?WV)%`-2NiC*xnv2F50iXOBHx5eDxmtp11b|SsqX5 zB-sQ|4v0X`)R%}#^6D$UCtM1MGnOA7Y98ZpsL32d>blClt!!TD`3_YRx7+XG(yQ;?!lDjJ=Q zQ|}+jv9HRV&NE}4RQ?wi+p2B-2{ks%GVKRl8~5$nhI{I3Tu+~KrhWTMr;!LmgH@1( zCYYVoG1Boy08MYLp$+4%sPF0jT=in=>l5&en%dpLLg5>ziIjK>U8wz^@9ybzNZt{e zuxA)BxmCAf&r4~GC8u)Br8+SabRC4*B5V@j-MOxM5EkHmzFUwV4djA`_XFqB%7g5p zxmkF9`;@bW255UKi!=4KR-hVXh$%iU>KmCyY~ zz*`RbIz?vCQ%BYA%Qn8ibUiG)ll`hQhehqs;qBnLo`eqln$r0S$KxL+{*Y(hFr*@C z!Mo0N2b3Q6gtpzj0l4f$k9yL%!`^0YXA>?S%6Y9ibe2Kq=GT4}+D;la-2JQfZEo|; z_>*`(EkTyOX{OjqzBb#RfGDt?B%Vg}FWJI>j58D2uXMhORw);qCi_ z-yIR<^KF=ed!x#a*!%GQ;YQLwY*>Btw#=cy z%fm6sWbz-_d2IIi%a?mgFK(3>m*T1HzyQPIhMzKjY{Id+D61?%V%p2Iap(9?{I^mq zx2Ze)B%K^*)G~rMS)Pfb3hu)hBTDQXEUBLEAw+Z!^0#%Bn zlR_ryW*pM+=jt*Mz=0*xMWwbM80V)hVty+7vDWQz4|4h{6%3b;xD#dsvsG4v%`TH% z26Evt2$}i-Z79NJO$cWk#c35wnzH$79{x<(hV^o($J)4!SI|Wx~P$$)O2G`eNb8Q&IAe{ zHH_p3TU@R>kFU0{-5rI9kDVr}SRs6yZm?(q%Q~PK8-S!;6SwnztOB{3AE&rPYJD2u zAeG?JPcN-RLfQ^=VrFu+ubzEZ9>_*|Ky`@HG5j)XGV*sofXiS~wEOgE>tGVWg%icw4R z*l0Q?nww4!5X!FxztM;MSFym5*S$SMeQU z34v&SqNwfM7`08QxU zxlOzSlWS7*g0vP=wub?~BZi_s5#@!TMtl@WyclLKO|l)!UDZJxs?nY2D`y@9$FHXjWcr=SW;ElEAlXcKx2wJ0OaFH}0l)MCCaeLdf$SHbb#Bgg zz@g#n-wmB0F?i9p6(5>K$>k};Ts9f;B%ayDxbElC-`Hh7Nc`h(vlZ&wC}V2J=T1%{LI1C5Lx2c z8g-1Fa$yA=Nx<^3d_0CpV;yi)Ej$W=W<(KwDx|%C!iHIR=PHVP-I0kB_I9(-L*!=1 z;10tkN{DNB zQH%A`1QmhlG;|4q+U5c!^#9vvf8QwhiSMIq}#B!El9uZ!sYKk_q0;?v$$V2z8c4HD^a^R zyVgHy>DXq(SXi(`<>MekA+U+Oe%N{9Rg1@#d<9wqzEioq5@<}lpGRZR?qJV9iGr%<6yyk!J@Ka>v$^*5HM6(bV3wi zceULcFR2KqAz_X$t~eTW!Ly%*a4sbb;-$Q0WKt2YrL+5`v>5L(uC6=O4BgOIPbPc~ zu7S{e!jAn0_JDMp zXI?K$ALBizvcs%0TDt<8Lfp}=I3nFJi#(gmroAy=fr4D$q6`9&@kF)=H|Iq>x4Mt8 zAT{#D#-`UMf3yIeiZRXuXgD*Ep1a=rNpU9Qy5}pKjSm0ROWLJ`d4>zMp|>7+u=7rz z*>#c%m2h+9psU;l?TJY_65skMy0e$(NF_p z1lKTAA;e`#NWch)Aj4UUw3y_%D{+Pt3r@K6vL(5A%r`Z;b9|g|tq8O%4I7)ohcT{U z5HY+71_Jdgz7@w%+-eHh5km-nTj z^u>U`7!gwF)X^-xcf1r$i7w;-FHlsy{5*!p68JtcfmwIL#@1MdjV%-)^l?JQ{ZtIZ z0ai4IF7mFmqtZ3O4pv>1UO#sxRiK@P%<0UWIkWqvbZOwX5*!<$#wSh_NITSUP83b$ zOT{=CzlXqT8sKOx9PW=e=&4vj2=CZi@00`hx^9*RsGEetjig?bjBOKL*^RPqQy8vi z7){OL@cMS8VH~ZVzSf=!6e7naV_8P+ZY^Drd3P;{L7ffi{20flQ8CD6jsQ-$w%}@K zk?9>Gje07mYr?hzqXLhOGWgzsXi_XNGylaaYE>`++!8YFcv$Q4e zoag?H`2`d*td5rB%>*Wl6D`J!=Z_;-94C-#@<&jn*{xqZF(+|c78Z8~iOn){SO|9- zhedJusfE~j{SNCpDWD`fQ6a5)^czll5E-*H$sWNZyuW4jz$1^xhcE+%q_ zK-15X6QdC~l*drJ-q2(Mp+5jj15G4hx27iOQWE}vZ}jE$nAPI3fAsaj*Nj$X985HT zWI_I8q!Wt#Luz0VlbiaSnO)IT^l|BF7$!Y}E+|9ADQ3;0jkOat^AU2mr}HkKurt<9 zArpV{I3`50lH~q4Cby)!kQS@xg<-ZT752Qf50Axw;$(;>6u-~(3CVcZ1A_DY%$%jj zfHvcp<+1kWT}{gQ5rk;^{PX}g=GRBE9>2y%yDqVV(1bLz04@#Uph|R&bU#1(H6Hfo zK+v|3GAQp@Be@L>Hq7xwP7ov2=iIB??7wce%Zk5c`N07_hJ>n<-E}(pb8x z%z|Ot=8KYu!hM{d(VUj$Y(A2pNK7uILWups`SWI7>!mWU7%gepMgu9n2)V5=H1qYq zFDA!Dx8n(8`a;`+`jWb|Z?z4>+hkGXT8p`^?QsU$WbCXKMnQx;dnyY|7s~Br*TlAo z5Yb$WaGFB2OBg$Hy7}}v#<>(Bl92jb4q|6~cQiq}FKNX^a3%S#b4LhT;#kg)N2hXJDm$HCzCq!EQzD$_#6C$!EU3Tu09}hIDI{eubB%TKzuVQ;OAx4oSOr^>)=NZpHicyvT!9&L4vB5y1!@%GIm@niG_e* z$uPo?4&Dhjl8}kO&c~O+SQz#U6OB4|9w{W?1Xq#g;eigF$f+?})9u%bnAgt%4xWN* zL=7BtG3cA!B8&`oqiuK3Fx)*X(d3-4T2$SUWn3sQ20EK^=;O3+Gl*$B0@h|rZ+cs{ z!LS7k5nNIr`vQ-{=DMwMToUxx+P`mC8V z_v8}Ugn7^O*vQsNqrwJcKg<bqW0ipn<==MeUKYzf#w;7`kM@8j3r7vV9e}>O-Lowq`aLmf@y4~ zk?D22dQ^NX-=>3wb0hHCHXic4DWp$e4t7d6Bgi83~agPpP0 z1tK~NZUs>s6REdppbSgm`kZ# zW^zz$l~mluZ*nH)6&wiE#qse~T=kh1tFc*kIZjq10gaP;9#VCbMyAkrS&lLMI3jiM z_{q;c{m0uM(q~)#q!cQeo@2^q^lU4UnfyB}9GWze5MfLy5|Nt}BW#r_-P@=UGdXyf z8z&23eJm;}a85oz&tXr6UW@&r-_u{eKX=g-p`PzOP7^XQaJ<#8@>>0<;+Hb>1g-1R zBaanE+hiylLLpQjR{LR}m5&q$sNty$S=;oY2a`)Mz^wwC)#!V zDo_P3uo8k7t^|B6%8&WOx_dqNkzHR9-2&i~P*jD{T=;!D%-+q>(PY>ZR4&pW;ZX2L zi2wIBsBM!?a-8)KR>zBBH_^8&8r>>$PX$2ybPER@-#20QM}&3q>}x3Zi;>=(3OAKu z+*(~{apPy-*1Ey)`#fi`;BSlK`t(KDF7Qz*s`sHV9z`-0q2WqHlnv6Gi- zQ==b`NKIeD&nC8*KQVE>9|HlqT$iXZR;M&#u)*6#XZ))x{K;nwrNS8~q3t=KU?kf#k z$&cT8kN7LnWs*md=MVSaOuW4W5;-gs0{@_tErze<%hJanWl8_H(jJ53oTo?sj0u;M z$z(Dm^yQS2Sw0g6JlQ06n~ER7%R6aGO+?~$vo?fVk*f=Ba&cZolFg!MTW+n*I*~*+2r)Ed zpU%tC%~Pq!u;20@U>BQY+3_$`6I~KCWI0+$Dae27-)Na6E{q(t>4yn90UU7y~ylZBQ zhvKe1QCk?l&?p5?aDHU)0Bm#uE=)Ce7V4uw_9c;FAT0=pNC=Xd%4N{aM#Xk&D#Lz5 z3$y5Cs=mx0Ywcgl1#Ju>)#DZiBUJ&|NgxBK4tXCG^z`)Ll(BxZCGBvdc;|}&Pm1zg`O+KKyOpBkOqeIa{1YxeV+0M|3Kt~3xXd;l0t?Y{dUFm^En}atQ*_;w@g3 z8SqI)-k}A)sw7T|5A;!f?vtHR|F)#yWGjliXJcIdw-mz6d>eyeL=;IU(HRuV-l9c+ zMRvy2bmjph6p;wyL>Gsc7}oduFhZw5PwYGr=JhdR{SXZ44?T=f;SU>jD>qE)Sn$0W&7$ndW;L4`#N!zWe#%kMR`CHB8_m5kQX&A;U22`>P$M71ebCN5%8ZQo^ z7p8W*32TTzT&f;6X{eUbBF=aFws^clFZR+5U?g4Vc7;u6_@y8(tOI~wO|Z9}P=7#A zZ2i)D%?Rv!n%V3ONF%+5hg`1%`p~3(Z)PoGGk!DB1h@r0?Z4)*wB+~T*RR+z#)S#- zi^LO?G!+5TP8}WEm`>Ne%eSFH&AO1lQxM(&=YLLZ#*v8s?mU02wX1OHvGLJWz>;8Y zl7vwMYDW+}ZGKr!aVXMAzKK}B%hWr{DcKL8{wh&GikZl|3n34#c>{11XXBR+J#*F1<-LdQFr13=RP)a zqTmJZ_=5}>9l_gE_oov%ynpj?mek*e<>i+tN|2Z*gl3^l&pqx@9_rpvAfJ7e3I&n< zxWA9K&bWGzG76O5D<<^=H`seLDG*vWOk{zU`0!AZjJin}6p0 z=w#7J4As z6He`6r>1K`^wvfGQ{X-$-KYHjK81s8UReGc=1$ua<35_>vLg+GEbG1|KbdZY^Vben zTJ0p4#twDY8*{FaH8YwEitOgWAL)6)0chvg7cM>*36_KqpU3cbv9u`+pFb7P&bFa; z<=-dA?@XhVw=5ErORqZ^XO9Xy8h(-XZvxbwlP_&%$Fi5l6FT~l@ECh?v0f%Gvo9ucm3fXJnnz4W7WY1=)FC|ZK>Nk?obVUu=n$^bq}&N$?kYS zap`<`AhWwzqSE}jX@G*a5(ZTs*t+Qa-f;AtaFwHtscfdfg;~E>8V@dYi&flTD+q<# zt^z{a(M5N5(-g@MdAd)2-YQnWikwwxnY3ttnu+dxCD#1L>U!&Yy|1_FPE%XW>pSlG zwhBo_XQb%QSNo{Hef*O5igkgF6a&4Y^}+bw?S9*IG>1B~Y(u~2(4U-zN2n`*(u_#S zv^Ps~@ciup$rkoS{x3|qArvyGZ8X3Ch(nhIv2{-^-?+kp4)_cC9UCDf^HZKJ(wI zQp2pUH-e&Pd5>ElZ}Bda!%@>#zY!=2QBpwZC6Rz?U+_U}u^M?x8$$# zO9oyVbL^FzXhQPi$yV^b)Iev`QXYdo#ySPl$8Tv%AuO@roci%QdJcv7Hq{*|;Hxw` zl;FQS2im6}d^TOZcvM1&JlWKQ{J@p_D$;ZN5_&(a$&=$dTDbTjcRv39bsnR_{lObt zEO`IzY@37Oe)T;AAWlusecssRZ>>N zi`+t)g+*|$rE`3F*c#G)H!e}j(Bz2PE}u{M&yIljBKC2M{$vZ4-E)s)#r_-P-sULh zc5#0h;DNmlOWl_9p{>wq-bNh3?ML~F0RySQyUf3^)JVK^^3#5BD zgLUQP{L$aA0+>?;9Nn^HHc~?TH?$y=CDILXD;-gv(-JT)&(gnD&$c{!ImZ zCrpei7yCLNKW~!yZwsHzL9Xy*bhh}v-AC?w^oEY`i#>$@Pz>yjq@QtU(dd6+>H*rR z>GDg-S^qis1JWEZa2JyRW`B6?T+OC&yR7Y+XXj(Slm5%bEy}4Cc8@tlBe5dFprgCD zV^%5m`PifNtXDP2qw~!=f7K=>vcwBr_w1)7#Bb=fpk~0o2cx}R7B(s0Zkb%xyzvB<@{{GbyNq9LLF{Zak(trB8ffmILuYSjt521qn@e=d@J}&J!Wpr-Yn`Z{& zmuhoM!?99rp-|4@R!lF(iP&FjMD=X6K58pfveUsUO ze7H>HMU#;TMhzS~u_ce5KFjcAAorBNbf`wz~9$Bnfgx9SozE%Jz5Gvl zNK2eE@A9Bp4bQIUzpgrgDa&LE3y!TFx43^dB*P!VCQ;;>?3wg^#=Yi0JD1@vnkADB zVSS`vT;}!f%#VKsd|ZeOlVW|weds$Nm+O%KK z8#XsO5bUtPV(H-w%!0LBK?avZ<;~zX*vw0+y+TS7{;!Lsefr3ei}F+H8^6=Vvig2`R)$zvJXAk9O6>Zt|cgZ=Xp7os1SWBJ-X*_=8 z05a;@j_(m$-OuqI*O(&tI^^yVdy%#8FH7IOGM2-i@n|8k9%Do8u`zr@Vbc?h4r21s zuUC(5tS-2+@cQ0QEWd7PE=%neG}d1#s7~^*dGBFug1@+}_DJ%B?Fx%ru%sDpg_>=}k&ddPh3Kp$K9`KqNpA-6B1*rAkwf zCM6;uASEgUlxn0&jnYC3NC|;J$ejh2z3+3*bN}Dx_$z7%D{IYs^R{p1*Y))Ye=o)a zibHA!w1iBSWl!Ya6@| z?=;_Rr81YuDr}W1aFxLqAqMg3BkwQhX#a8(uPxzWXgKekufcw7cN2?hrBdz;hh2*} z^V(I$652dpKPUCJCAeZ1<3YxZi*j=m1sSx~-vQ|CV>XL_#qf|o>2HbpHg*Ui(w0tf zrcDWfN{BsoLH0(nUEKf?=>hM$!Rg?4PwkNGNn`}Ii8*!m(0sISEUW{NibwK_>tOBE z0Re~BR6eOe?~ai3JnCtVVSj=yH7YbsJy8AqL-A6*|9V{d#UWyBX=r_1I!C&8J_-U6 zy@1iL)CUM2!!2dOOfiEmEPNV=KL%0<6CC^9G!fw8-f$fh_AXTa1GZ zOMECLRPrmM1D=2;BZ+o!#Li#CD?qReAKeL+caE{`P7mv`0b^pTeJ?>T5tTX2f@v6g zfRF?)y3Ycw^Q_GWHEh0uXYUiPha#}RisXS{suF#amt~}n|M=7y&=v26=IeP@!Kaa{ zzX-NNy%X&Zp`EOFOVPmZ_xW{@e$7_51{TuI76ZW{-(yZO4h&!1+TgY6!g4*Z@w?Ly z8zmah@1@+j*v7DFw^-PeP@L8&h&)uHjpVJ~0}Bb9=f~;R%%iOg(enpLPCePN*d@@V zHkv>PhEK_qWw*xSbf!U*l%Dj!O||go=Y}qSYwd$>^ zhrZ#x-;36pO9EVlj)63wgv!uoeR28Y;x`iY!I2h?t>31SFX#`So&`66vdIBsFaakA zgBbKlFy(dm=@XhARYR1bsn+FN2^C2^^MbaS%+mRSg?+fbkd3~;G>{JT27B~mgR`lm zh)ghI6+rRE;uj3~hn=ZSV%QWV#%g;G*!fai`bE%$8ow3@E$e~Zd~RYUJRKE>`Mf_} zoCKA*X-sD3Wu1|vYW=IdEW?O3Fe}OH3J5`jpkFLd5N>E=YiVvnLlfy{EgP%tLD`1` zzV5hISk~Pn-2s(A1+h9UvBFq1cpOWYlomJ}F;0KDsY%{d*TkGHJV(Jd1EDJY{u@;uv!4tb#Q3e?XF8&zPZ4BCAu2Unyi?a2o&zLZ-;{t9VSz2RV7i4EgJnEcvmBp0!dKZ#1%w%^zE|aMOAk6 zDf5nYupaldRtlOQRy zIsFqoj2{(7yfz8nr+JER*Y-NYuRd6Rn=FoP@g=qcv90N(;cSmGVSFoDiy&hgNPp5( zooytEHn&UA58u5|Jr{3v!@>`6l&01=hu*td1YkV0`wtn5aMk7aW8`Nmco;yVcyU84 zT|F(FbBCxVkEc2Y7bVq~`wDCjmq0)%ut~r6LTQWy4A~AyV!?sD#YU0wb1Ybnc{>rr zEQuOEw)4dte%T?`W(>dvB*p`b>N{B+e_Ro{k!@biF8xUi?^@jip03>>n|`>(c2Vx@ zFE6%fu1nMtfktYx3M!_Rh#c2aC^yU!E+!{Cx)hEGag+O22}Y?&I46%Np7lc)8GmVA z3w~5Ji{qFD^f5^+qWjO38f=JhDZiMr0lYmfV^NLbqaf0*ADiRKoLB4ncH5rOfC29g z-7b&9#O`d~ZoK5jF7NQR-Ep7_=g|6&ZXc8|@Lv9iGfe%EL(>p4$&%&S1)(4mYHMM_S6Eq$n8oRTX^=&ABo$ZuGoeCT7u8M+7-_I z)=zY8zeI%qzHDE+vY0L&DYgdzjB-3cj-Qofjk5CbmBk>AG2JxL-F%m7}EEMY4Aifs@ zs&1L)>C%pD&64%vJIZ#$7vDB2Ef*^|6yJVstHaJShRNFAM~Frh?|v-V^)mSjVmOJCPPb8P-mrj!7H1&hMLw!}0I59-I;c zK>Z{GB2QzcuZY7~J1C8kbPb`Z5Cgbz`yu%mgFqOf`LMU#>J?Q1=VQWZ;_r@@?Ci2V z+DxS-&t3WabYj5Z^yBd8gh`;kwqi$6Rw21w>Zw9g+nufeaM&R?UGP|5;?koD4M=&NA8;omI!z4>-vDC0h7`OJ&EMkB2k+ zG}AtXEt&=$_*-e{+}~1l-+~d{^Lsr(gsQ;%6a#0y(wh&GJdI_$Uq-ak=c&~oIFLsTCks*k{OTvex? z-*~z^1hOV@ks?!$`vw!wDXZ!zTk|`l4z9SfIy*$^l{J zmQd)#D9gcJp0(T$T+ikm#P4lcKNlY&tR|K{rZmqXy|yKseTr1^Mu;J*Nw~ywN^-UM zBNqr3Fs^0C)zrREVeUF)8fC0__{|l&bYWsdquJu1RjR<}aFhvW#*Vj;+=yK?WDh+Q z!LkARpK_pW*L{~Gz+Z=H{JeWdQ2e|{69AU6J{*d=47V~W5~_ctUi_zu_mR*nHaB^% zarN+^Cn7#T(z@gN=>NEoDQ$vBE!(rFo4!T;bBii`(Nfrg-}M0v z{SZ-fN3l##PUH z-G@~c26a*e7FbjHhUNHq1*WFuJqNM+LQ_nHNtoQpjXA~!5;gJc;paWdEALo&cMGO~ z%DY;OwFrK4Cg@~mt{yY*k&HA`al5m2HCf6eF_$mOzlZd00dOm~eeL~aH`=f4tv8_p z1Jqs)Y!bD&m+ESOJOxCS9gDgnwt8y(9bd}@*OzjXTRVo3C9P75f63FAIu;Kw!8N{* zCnM8xmSElGbMV%H;_kpVfJQB@!FACdp@wAON;2YxXx-)Gtt`?vh8sI;%Z%q5lR;#o zDadZ+J^QVJE7=0s2c(| zo6EkwLB(P9Prwd(L+jn4;9?VkrqV*pz}0ikOrf-9pfSf})H0uED=6!>TqF}`LLewC zJE*~CaT4~;1V_|IFFaPzz9^RZ$5hAnO$T6;nW=0NHHpiUKM}}Y?-~{H9n8}uQkI!M z7n3kCu4RG~4o`Y2WO+Nr8cS*9y@YK7Hw1b@uIyitC$8$z2pDuM#7F`h*8u>zoDLiZ zx6HA!dm{}&v1Gu9X69{mO#Q+7V49PS>1AfKx?Zf{geHI90lznUK7Cc^4P#@?e}><9 zvRf~TAK4&Wo%llL{f#PeJpVM~T7!5zQ>cMEH#UfpZ--Z_Gmr>oZa%KQCnPaSK-JqQ z)F+}H5ZUS=GOFR=QOmatH{H6uw_Wy2-X!-+%%O*TfyHTv@t8k>C~oYdzYhO?r3TiaZHB7P~X!I zv}~muUfw;;a;o)WE_=R!y~zEqWA!tWdJKC)ogM+BHfFxAHAA1l!0L~GYh_TRJRxqkLDhNJE3IcAfJc>@6A>lilnGZr zRO>&H6oG`rGQxuH3M9iQgVSz=h^2ObVBV?=h}6Q2XxzV3x#6y3$Sx02)y;@^hnbO&@bJr~1S2y`E@3;G754DJkuMSE>HF zQeA&=UB*@{n{us@^p&_lCcd)L`%zK8GWOSts~3ywcV5U4?B{YXh+(twCJd}718*jP zECYz`;_EM`iflYn!`~oUo*eDLS4cGaWJ}f4mh3hb5*Dv(7O(5`kO06dXd6E26Y<3t zw1KpAO!wq)Qo<4g1&Sg(Q)F!G)4|cMwq`k90X^eqxF!V)E7~+&Y9@FpGws6yGeOQOz8}aaJ=Sx{ivG7H zyebv>xRWGu*Wn`uoh%t`ufW63@vR==_3LCnj(i7ZY(Gl7im=)gL;vk;0Ik$f{!#YH zU*l@;fl8GDCgiDlVQQ`FfO_;br_5lP?Cz*ClH-dF8e-h_do&Jl^`c)m_Y4pXZ)0pg zl8C{F9nl!zL9#l8+?^0+HXdwP+92feAM7P?K1H|o0W+YKOFFwV3UPnJgqe3A;CQh( z0Ff&l>mZSkyERi#qdubHfm6IiwiF6OYE9JG@d0cmlOoSqzxT}tugC!m_ZTG6VV2zN z0;a8qO}u-CcL#WcCeLY$7psRmO7E*lO`m9CNoAP=fS@MJCOvx-_MCmQ%Rx4MC1RS$ z>pKv`-Jf}brDuFXrUGop%=8*s`qSitFb4s%gKPNYXD!Hyd5 z-15qpA3(TELe6}fahT700NX+K0h_1;Oxa{^f;;AD$%=a8`-w~JyoWM79IewcH;(xv zBaSZ|F?R&jc4FHinVY@{WdR^TKD1c7;WqaJ?{y0vdZ46&wav z&fo412_Rd#E}4zPSSQc)ns3JE9}0B{PDKY<3HDye0ihFlKs4Rza4K3VPt&)<9pC;T zl=4V3tMQ=s)py%l*sh=49ejgL*yUnaOeOiy6g!zMjxTtYEfldnA;VE}NFzrzm?@Yb z_UR)HKVfQmYxB2$x?=yVA=%?^p2;tn_Mb089z&MkmuP_MTO^_UfnacoS$XSpaIu<)FddqvI%3anqB(77t*yT5Qv1^6oaD z+Pnq!U-l(t_*f(`OU=qW@+-{gQP5@j?y?Bs{b~^*4W&DL`$;mx+n*@n!Xk zCO^OaKYnPpF|fzpb>9BFW%l!#{(893i%-XawlB9+%;NVm|HuFTy5zHo+a32T+W)-X z1IodzQvKqPr@G=~9liB+gVBGikHLZ_d(ee5&(VbN_=?TXvR~PM06}+H5fj{NoTw_O-r4g0pp$9 zGR0$r&T>#9Vsf(8H{bR&2zoB*$uCj9!6AP!*;?CejbIcm=T=Q|lYz5joI!=<)6)Gj93_{Ee5V4<C@L zDMJaH!x7&@*ALtV_GLrB>YaH!yO$JLoT@hkLlB8NENqox>^7<(U?P81;1gT0GxpjP zyT`ZL^D)lt8ky=L3vwMEtA;pNZ$uxiFgdl~&Qj!uTuFxPFy8Rbzw9Rt!|lxyRo7pb zh;C|I*fH9)9pj1Az|A@+sg(r=YeCPQA&x|q^Q4S&!2%FZSXF>j#2O9GPV)Yyb_lW! zEyR~U2dO7-aXUz@lL~A19d&tG2QZ(ZBAQNhh75@EA(VT#3}dBHnU;E?O@zBaHX4T_ zq3il$n1Z+Mm-Ny##&MkWGX6u-O9G|sda);IXnDGGdDoaGU6r0;lU`Fh2f3*?B*vU60QZ82s8$gy_v&?b<>M7ai{EoKBb>h>VdL1SNLPo*Iwx9@C*a zETzo7qbXsQr_*To>bXw)!0~Zj!uhSKXrH@tAdg4Xukly?1!+Fzwchs65I~mzU8hSx zwR8RwuhvkdEuf^IsaU;ShSjxOZ8HD7Z4b{QCGgg4NR9Up`ZjRe2;@&bo!&-?kh-Xq z{qXLzt=1H~qS6uDA73_877Oy^o3-{D6(Ph#uR344aOt z4|(G^-3q`>b9}ljgz%wxv`^`!jXWpxxG9t*jl^ zdcZ2I0S2colommOW}g?AI~%P6=J8(DU`HuM=?aZ{#1Q<1bhp;QIe>2@2LXMXoC{+3 z%K@(0kqj~lOOS2^rEn)fSjCZYg{+mM^OBQ+XuLjNVzgEXkflb4TYh2u`{(6n!I>VC zp2PLmZTNGBzErN@<^oHI{bubNH9=xn9Jq?Hb_Vy*_mBVykjtfe14%CjY?P%W)G9qRk55|PAcCrA4i)qyPj{%>f5bVa5XC$d(9v(95w!V>V<9#I;lGo$FVF}qs z{K9%5`j+L&+|sxKl8n}?9qAjfc8pOWgYx5_#k#!;SW^#*g5!h&#sH%(V3qb1)o6Us1R^39y};vL_p?pOtw^ZkiCWY^bxG-07ob6luS_^>7NlUpDQ3Z%P4f>d zDsKa}(n`z^YWoOhD$+DXyUKm@jdz&n49S zMo0i=2ULnEL%h3nQe7>Ola{>9j$6T>3**Ch8lU4@0in7FeEkek(1s9y)$4Z>CziVG zzqk#dcwWAXn0U$j8ffT@fH}UvB|_IBCZ}ph_E^OCgQ@Msg@3c$Mb(;9JFHmx=1f|^ z`1$mYp1^#=Qon3K&NMO|a4-y+d@0A2v5?prV1`;7Xdt~zOgfQ}x9sH)yrwY^0_St3 z*oHQ|LXuuugrDZ*nnfn}(!8II>$3-^`K8C1rI5%q;MP`O z#G(luxUOj{JDlbeJHw@4OEC*vny)3@;a@!z6k6LqsA~c>)aL$TdPreyp{l3J2U{D> zo|k90G;~=pfHuOjc7a>Y0_Q4qcz6rc5l(a7tVE=ReN5YqX4F*~X)ejv!j1&yT2p_MOc_hJtv|Uh z!Ef@x7Xw^P;xU27e8t0M^4*P?Q#>a+k;quRAbRp@!P0VNRQop&e6Y6qb6r6xfyKe^ zAFyAtFFGGu2?QCpGd z^K<;#4yE#?=hJJ(3Xe8UkjqQU6*`eHoLzC}B~F=yBa3`{rW9aVv*_-Aq}nLB$wQUK zxE1C7l!(|)3TgxQw4C^8XbQDhYg(x6PP)+LgG4ieZ9zpHm-Z-idfFECxio5vLvUC_ zd7qws!X`+08_KoM<7;H z{<0SBh`3O)wl5Gb7Ju$T692{KBC!d~^HSxuU26a|P0gEClX&RGUWOwfy#oyzd=AU{1uf<6Uc5 z)7w{+*qdFSLkdyh>7L>h2s`m)mJ>faKWmyZhnJ|9R2>ku6*@3=zBA16Kxd^AW{~y< zOS}fkiA!Pi>rzYXlLXav7bnzy8l5bb=5D#zBT0$a=qi&p?3rHGbtRh$p{K2yFM1X4 z5ll~&X;8uXPqBkBwR>t{z_9+r*2t9;0hCV2Crfve(jt;ndR@(jaHRcY>ZpDb?t=#DO@}uC9vK%)__QHq7nB$5xHHbHA)gKU zi6M)m&lR<*+08d4Q=Nv~sM8^&LR$G>q*|qNu)-(7@}RUWat%OZIii0cXAfdlEX^y% zD3kaILCWYZRc?12{SMj|(=pU$yNz?;SWwg^+UKWzdWbsN(?hM)tUpx45gBl(0dDy% zY|h+UR1}w9IMYw8xPSF5N8@e8}k+?DU|M-BBLLunc=(-#MC4;tep=#1R`G(NxdALGy#r05P{7f+RMak%_l zP1o9+uSqqxAVyXIHnd3MbL=WSVEm7Bf`<(c2fRER_)+~JwpwOK!_s>Rn}i68gIf;elR_$Y~x2r?G# z<0PkQ&}Z4sjvX*-NP@j*M!I(4;%1h?e3nFm;nSXAB5t^8%^h=p+)lNfBw4p;c65dS z&}1C8eB>HL79h!pGPshqnZp6gn=a_#F`fNtTnmb9Wn@QQS~PqCPF$}uoG$>PfFI&VF86yq!Z2J{%yxzXlG$ z&;fnA_Gu^9!C4oV!GS?{>J)U-6l9S&s8cW*Emx!toc91rIn?fR32Lx` zb3y0kv}P0DuJSYH`DI~F)li08--}OBL=Z__X^=K5uwejoUJ_sWZji&0g3LM)rBv?e z^&MJcQ6M@pt}TkVuZec>3#T0t$SU@N^II8nTPm{ap6b(le#MIFqP%87>nCo+GbCzP zhP}aj%F>nUJqepPob3Z^+;9Nd-A)^BIt4imw-R0}y%tLkbaFczP3W0-Cq@vnR(O+v zPD*xe<3JF7-2~zU+hn+Cft^z;Wc-uPx7Id%-^$l}$f+fhG(AMx~*(|3$~4 zr4nS&7A}1nu``@+@h391R|szzi`7pY#>Oe`wVr+_e+odM1Wv zot3QtwY5<57UaHQvZzJqebzV+IxbhM?G%8A z9|r=Ib* z5J+wUu@oB-x$7oR<_{4Ucsrz`)f;IuBBVkl~!Xq9ctMZ1rO59Dv6tQHWS!M%k7Em4K)zI&TwBd{wK8TosYi zZcS)+$PP;}samk`cK+BXEN9-DfWOU~xlzSFPQhiB?I8lXeJd?ITCyxz3`$C5O}HA1 z$XQUnw5>9Vj?;Z+gDdZ{&)WbLE6B#2AB4=ev+mhZ6gO=(Q}L82NQvm45-D8i38FSl zhtV`fAj$!>oXV>(OgFRgC#*DQ^oRPH$}g<-&tSoeEVGid24Gmdt)Y$J;MO-u}d%r|6#!- za=R|DeE(`-@SU>-eHl=9Odf~GV<^*P5?R61rV-=2-R3wL0I=tvwNADW&;h@szluJ@ z>Uc-p1>x(IeVmgo!Hb8%r`86 zz?ons82(I#dmVV^lWq%_R94R>7XPxj!#SkE8HE&{>BSdlL)b9o5-X?#VJ<$S33;(~1fiWvPzR}Kx3T_o zQPmCFLIN%YN=~u}cU7M7c=hpgZ!uPob-FDZ^bOTwg@**sp4b(jj2OLUnk&IF(Qt~X z6V^xl_I<5aNn0dJVH*(>%SAg=7}_;AL;f9V7Cs&9IX7Il_A1abO=x?2NOGd z;F_%D%wZASec#HvbD9b10=<+Jwv zyqI6&-~W1%X$aJB!kzB8zjdqq+Y3OXy#2yreqz@TT-GQ05*Qoh7Zk&OUUMfbVD~?T zU=$5Y>&wg~>sZ4JNEWvVG{zCCXn#R#f8CwLCMf6i1 z4ZnBHXiJs3?3!?|bv>+XZifZo7aI z&{O~IP5k}FSx7;ZZ@X{(Q+xbRpZ(vD{O`T|4`U?wzk}#M+?n6=?7tK8zm@3U-+}*! cvu9md?!n@=dzUNhnZTdR8hYwQs`mH(2W-2%1ONa4 From 149010e7e0c2031053a62fc400fedad90adc50c1 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Apr 2026 11:45:15 +0200 Subject: [PATCH 6/7] no more images --- .readthedocs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 6f1b0343..2c9f00b2 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -15,7 +15,6 @@ build: - pip install . --no-deps --no-build-isolation - "cp README.md docs" - "cp notebooks/*.ipynb docs" - - "cp -r notebooks/images docs" - "jupyter-book config sphinx docs/" # Build documentation in the docs/ directory with Sphinx From 836bc987c4ef0f62951118d12598152e2899f871 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Thu, 16 Apr 2026 11:50:19 +0200 Subject: [PATCH 7/7] Add execution flow in table of contents --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8c3c93e9..ae16c29c 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ as hierarchical job scheduler within the allocations. * [License](https://executorlib.readthedocs.io/en/latest/5-developer.html#license) * [Modules](https://executorlib.readthedocs.io/en/latest/5-developer.html#modules) * [Interface Class Hierarchy](https://executorlib.readthedocs.io/en/latest/5-developer.html#interface-class-hierarchy) + * [Execution Flow](https://executorlib.readthedocs.io/en/latest/5-developer.html#execution-flow) * [Test Environment](https://executorlib.readthedocs.io/en/latest/5-developer.html#test-environment) * [Communication](https://executorlib.readthedocs.io/en/latest/5-developer.html#communication) * [External Libraries](https://executorlib.readthedocs.io/en/latest/5-developer.html#external-libraries)