From b39ec79d3779bffb20e62b691995ce032b105108 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Tue, 10 Dec 2024 16:40:17 +0100 Subject: [PATCH 01/21] first commit to hav something to iterate on --- doc/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/installation.rst b/doc/installation.rst index d0517efa..78e8c22d 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -1,7 +1,7 @@ .. _installation-page: =================================================== -Installing Copernicus Marine toolbox +Installing Copernicus Marine Toolbox =================================================== There are several ways to install or use the Copernicus Marine toolbox: From ea9e33a4755fe924e6d4cf61b7c9bd5e51c9a5bd Mon Sep 17 00:00:00 2001 From: uriii3 Date: Tue, 10 Dec 2024 17:07:28 +0100 Subject: [PATCH 02/21] Toolbox in upercase --- doc/changelog/v2.0.0a4.rst | 4 ++-- doc/conf.py | 2 +- doc/index.rst | 4 ++-- doc/installation.rst | 10 +++++----- doc/response-types.rst | 2 +- doc/usage/login-usage.rst | 4 ++-- doc/usage/network-configuration.rst | 14 +++++++------- doc/usage/quickoverview.ipynb | 18 +++++++++--------- doc/usage/shared-options.rst | 2 +- doc/usage/subset-usage.rst | 6 +++--- 10 files changed, 33 insertions(+), 33 deletions(-) diff --git a/doc/changelog/v2.0.0a4.rst b/doc/changelog/v2.0.0a4.rst index 6a78bc5b..074da61a 100644 --- a/doc/changelog/v2.0.0a4.rst +++ b/doc/changelog/v2.0.0a4.rst @@ -4,7 +4,7 @@ Pre-release 2.0.0a4 Changes starting with **B** might introduce breaking changes. .. warning:: - This is a pre-release version of the Copernicus Marine toolbox. + This is a pre-release version of the Copernicus Marine Toolbox. It is not recommended for production use. General @@ -53,5 +53,5 @@ Subset Login '''''' -* Now support the new Copernicus Marine authentication system. The toolbox will try to connect to the new system then fallback to the old one if needed. +* Now support the new Copernicus Marine authentication system. The Toolbox will try to connect to the new system then fallback to the old one if needed. * Rename ``--overwrite``, ``--overwrite-configuration-file`` to ``--force-overwrite``. diff --git a/doc/conf.py b/doc/conf.py index 44009802..1a2bd514 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -8,7 +8,7 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -project = "Copernicus Marine toolbox" +project = "Copernicus Marine Toolbox" copyright = "2024, Mercator Ocean International" author = "Mercator Ocean International" diff --git a/doc/index.rst b/doc/index.rst index 51302e9b..7b89727e 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,9 +1,9 @@ -.. Copernicus Marine toolbox documentation master file, created by +.. Copernicus Marine Toolbox documentation master file, created by sphinx-quickstart on Wed Aug 21 14:04:51 2024. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Copernicus Marine toolbox documentation +Copernicus Marine Toolbox documentation ======================================= The ``copernicusmarine`` Python library offers capabilities through both **command line interface (CLI)** and **Python API**: diff --git a/doc/installation.rst b/doc/installation.rst index 78e8c22d..35fa0e5b 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -4,7 +4,7 @@ Installing Copernicus Marine Toolbox =================================================== -There are several ways to install or use the Copernicus Marine toolbox: +There are several ways to install or use the Copernicus Marine Toolbox: * via pip (see `PyPI repository `_) * via mamba | conda (see `conda-forge channel `_) @@ -85,7 +85,7 @@ To be able to download Copernicus Marine data, you need to have an account on th -Use the Copernicus Marine toolbox binaries +Use the Copernicus Marine Toolbox binaries *********************************************** In the `release page `_ you can access the binaries of the latest releases. @@ -99,7 +99,7 @@ To download directly the latest stable releases: - Windows: `copernicusmarine `_ -Once downloaded for the specific platform, you can use the toolbox by running the binary as follows: +Once downloaded for the specific platform, you can use the Toolbox by running the binary as follows: In mac-os or linux: @@ -158,13 +158,13 @@ The Copernicus Marine toolbox has the following dependencies: - `h5netcdf `__ (1.4.0 or later) -The Copernicus Marine toolbox uses the xarray library to handle the data when using the ``subset`` command. +The Copernicus Marine Toolbox uses the xarray library to handle the data when using the ``subset`` command. There are some compatibility issues with the latest versions of xarray and numpy: - ``xarray<2024.7.0`` with ``numpy>=2.0.0`` leads to inconsistent results. See this issue: `xarray issue 1 `_. - ``xarray<2024.10.0`` with ``numpy>=2.0.0`` leads to some time overhead. See this issue: `xarray issue 2 `_. -Also to convert subsetted data to NetCDF format the toolbox uses the `xarray.Dataset.to_netcdf `_ +Also to convert subsetted data to NetCDF format the Toolbox uses the `xarray.Dataset.to_netcdf `_ and ``h5netcdf`` library as the backend. The ``h5netcdf`` library is not compatible with the NetCDF3 format. diff --git a/doc/response-types.rst b/doc/response-types.rst index 96fb24df..cd61f7d0 100644 --- a/doc/response-types.rst +++ b/doc/response-types.rst @@ -4,7 +4,7 @@ Response types ================= -The Copernicus Marine toolbox commands return some information when downloading. +The Copernicus Marine Toolbox commands return some information when downloading. It can contain useful metadata for the user. For the :ref:`command line interface `, all the returned data will diff --git a/doc/usage/login-usage.rst b/doc/usage/login-usage.rst index 9ccde001..30be0eb5 100644 --- a/doc/usage/login-usage.rst +++ b/doc/usage/login-usage.rst @@ -20,8 +20,8 @@ If the ``.copernicusmarine-credentials`` file already exists, the system will as New Copernius Marine authentication system ------------------------------------------- -A new Copernius Marine authentication system will be released in the following months after the release of the Copernicus Marine toolbox version 2.0.0. -From 2.0.0, the toolbox should be able to handle both the old and the new authentication systems. +A new Copernius Marine authentication system will be released in the following months after the release of the Copernicus Marine Toolbox version 2.0.0. +From 2.0.0, the Toolbox should be able to handle both the old and the new authentication systems. If you are blocking some domains, you will need to authorize the domain ``auth.marine.copernicus.eu`` to be able to connect when the old system is decomissioned. diff --git a/doc/usage/network-configuration.rst b/doc/usage/network-configuration.rst index 5c3cebc1..39cf2773 100644 --- a/doc/usage/network-configuration.rst +++ b/doc/usage/network-configuration.rst @@ -7,7 +7,7 @@ Disable SSL A global SSL context is used when making HTTP calls using the ``copernicusmarine`` Toolbox. For some reason, it can lead to unexpected behavior depending on your network configuration. You can set the ``COPERNICUSMARINE_DISABLE_SSL_CONTEXT`` environment variable to any value -to globally disable the usage of SSL in the toolbox: +to globally disable the usage of SSL in the Toolbox: - on **UNIX** platforms: ``export COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` - on **Windows** platforms: ``set COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` @@ -15,13 +15,13 @@ to globally disable the usage of SSL in the toolbox: ``trust_env`` for Python libraries ------------------------------------ -To do HTTP calls, the Copernicus Marine toolbox uses the ``requests`` library. +To do HTTP calls, the Copernicus Marine Toolbox uses the ``requests`` library. By default, this library will have ``trust_env`` values set to ``True``. If you want to deactivate this, you can set ``COPERNICUSMARINE_TRUST_ENV=False`` (default ``True``). This can be useful, for example, if you don't want those libraries to read your ``.netrc`` file as it has been reported that having a ``.netrc`` with a line: "default login anonymous password user@site" is incompatible -with S3 connection required by the toolbox. +with S3 connection required by the Toolbox. Using a custom certificate path ------------------------------- @@ -40,14 +40,14 @@ you can use two options: - set the ``HTTPS_PROXY`` variable. For example: ``HTTPS_PROXY="http://user:pass@some.proxy.com"``. It should work even with ``COPERNICUSMARINE_TRUST_ENV=False``. - use a ``.netrc`` file but be aware that having a line: "default login anonymous password user@site" is incompatible - with S3 connection required by the toolbox. Also note that if you have ``COPERNICUSMARINE_TRUST_ENV=True`` (the default value) + with S3 connection required by the Toolbox. Also note that if you have ``COPERNICUSMARINE_TRUST_ENV=True`` (the default value) then if ``NETRC`` environment variable is set with a specified location, the ``.netrc`` file will be read from the specified location there rather than from ``~/.netrc``. Number of concurrent requests ----------------------------- -The toolbox makes many requests to STAC to be able to parse the full marine data store STAC catalog. +The Toolbox makes many requests to STAC to be able to parse the full marine data store STAC catalog. For that, it uses concurrent calls on one thread. It also uses this when downloading files for the get command. It can be problematic to do too many requests at the same time. Or you might want to boost the download. @@ -62,12 +62,12 @@ The default value is ``15`` and minimum value is ``1``. Connection timeout and retries ------------------------------- -The toolbox uses the ``requests`` library to make HTTP calls. By default, the connection timeout is set to 60 seconds. +The Toolbox uses the ``requests`` library to make HTTP calls. By default, the connection timeout is set to 60 seconds. It's the timeout argument that is being set. Please refer to `requests documentation on timeouts `_ for more information. You can set the ``COPERNICUSMARINE_HTTPS_TIMEOUT`` environment variable to a custom value in seconds. The default value is ``60``. Accepted values are positive floats. -The toolbox also set retries on http connections by default. You can set the ``COPERNICUSMARINE_HTTPS_RETRIES`` environment variable to a custom value. +The Toolbox also set retries on http connections by default. You can set the ``COPERNICUSMARINE_HTTPS_RETRIES`` environment variable to a custom value. The default value is ``5``. Accepted values are integers. diff --git a/doc/usage/quickoverview.ipynb b/doc/usage/quickoverview.ipynb index ea5cb632..9e5a3870 100644 --- a/doc/usage/quickoverview.ipynb +++ b/doc/usage/quickoverview.ipynb @@ -16,11 +16,11 @@ }, "source": [ "## Introduction\n", - "The Copernicus Marine toolbox is a tool developed to connect users with marine data available at the [Copernicus Marine Data Store](https://data.marine.copernicus.eu/products). There, you can find products with relevant data for users.\n", + "The Copernicus Marine Toolbox is a tool developed to connect users with marine data available at the [Copernicus Marine Data Store](https://data.marine.copernicus.eu/products). There, you can find products with relevant data for users.\n", "\n", "One way to access this data is through the more visual tool [My Ocean Pro](https://data.marine.copernicus.eu/viewer/expert).\n", "\n", - "The Copernicus Marine toolbox allows access to this data programmatically and in an automated way, facilitating the download and distribution:\n", + "The Copernicus Marine Toolbox allows access to this data programmatically and in an automated way, facilitating the download and distribution:\n", "- [GitHub](https://github.com/mercator-ocean/copernicus-marine-toolbox)\n", "- [Documentation](https://toolbox-docs.marine.copernicus.eu/)\n", "- [Help Center](https://help.marine.copernicus.eu/en/)\n" @@ -47,7 +47,7 @@ "source": [ "## Installation\n", "\n", - "There are different ways to use the Copernicus Marine toolbox, using the **`pip`** command, **`mamba | conda`**, the docker image or the binaries. You can see more information in the [installation page](installation-page) of the documentation." + "There are different ways to use the Copernicus Marine Toolbox, using the **`pip`** command, **`mamba | conda`**, the docker image or the binaries. You can see more information in the [installation page](installation-page) of the documentation." ] }, { @@ -80,7 +80,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Once the package is installed, we can start to explore everything the toolbox has to offer." + "Once the package is installed, we can start to explore everything the Toolbox has to offer." ] }, { @@ -89,7 +89,7 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "## Copernicus Marine toolbox - Login\n", + "## Copernicus Marine Toolbox - Login\n", "\n", "To register, you can obtain credentials for free by creating an account at [Copernicus Marine website](https://data.marine.copernicus.eu/register?redirect=%2Fproducts).\n", "\n", @@ -145,7 +145,7 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "## Copernicus Marine toolbox - Describe\n", + "## Copernicus Marine Toolbox - Describe\n", "\n", "To explore the catalogue of products and datasets available in Copernicus Marine service. \n", "In the Python interface, it returns the {class}`copernicusmarine.CopernicusMarineCatalogue` object.\n", @@ -424,7 +424,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Copernicus Marine toolbox - Subset\n", + "## Copernicus Marine Toolbox - Subset\n", "\n", "For more information, see the [page about subset](subset-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-subset) or the {func}`Python interface `.\n", "\n", @@ -553,7 +553,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Copernicus Marine toolbox - Open Dataset & Read Dataframe\n", + "## Copernicus Marine Toolbox - Open Dataset & Read Dataframe\n", "\n", "Although the four main functions (`login`, `describe`, `subset`, and `get`) are available in the CLI and the API, the Python package also offers a series of additional functions: \n", "- `open_dataset()`: provides the ability to explore and retrieve data from Copernicus Marine services **remotely**, allowing users to specify various parameters to customize the returned object.\n", @@ -1673,7 +1673,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Copernicus Marine toolbox - Get\n", + "## Copernicus Marine Toolbox - Get\n", "\n", "To download the original data (or native data), you can use the **`get`** command.\n", "\n", diff --git a/doc/usage/shared-options.rst b/doc/usage/shared-options.rst index 2ab345d6..7f01a07a 100644 --- a/doc/usage/shared-options.rst +++ b/doc/usage/shared-options.rst @@ -206,7 +206,7 @@ Option ``--dry-run`` This option allows you to simulate the command without actually executing it. It is useful for checking the command's behavior before running it and to be able to access some metadata about the request. -When used, the toolbox will by default, send the full return response of the command. +When used, the Toolbox will by default, send the full return response of the command. **Example:** diff --git a/doc/usage/subset-usage.rst b/doc/usage/subset-usage.rst index dd6cce8a..27f017d3 100644 --- a/doc/usage/subset-usage.rst +++ b/doc/usage/subset-usage.rst @@ -58,7 +58,7 @@ About ``--netcdf-compression-level`` options If writing data to a NetCDF file (the default format), the ``--netcdf-compression-level`` option can be set to compress the downloaded file. This reduces file size but increases writing time. Without this option, the file is written faster but with a larger size. For Zarr format ('.zarr' extension), the default compression of the Copernicus Marine Data Store is applied, making the download fast and compressed without using ``--netcdf-compression-level``. -Default NetCDF compression settings for the toolbox are: +Default NetCDF compression settings for the Toolbox are: .. code-block:: text @@ -117,7 +117,7 @@ About ``--chunk-size-limit`` option .. warning:: This option might help for some very specific cases but it is still experimental and might not work as expected in all cases. -The Copernicus Marine toolbox uses ``xarray`` to open and subset datasets. +The Copernicus Marine Toolbox uses ``xarray`` to open and subset datasets. In the backend, it uses ``dask`` to handle large datasets. Those are powerful tools for handling large datasets and will work directly in most cases. You can read more about it on the `xarray documentation page `_. @@ -127,7 +127,7 @@ the Copernicus Marine ARCO datasets are organised in chunks of around 1MB. This might create a lot of overhead if you are working with a lot of small chunks and ``dask``. Please see the `dask documentation `_ for the details. -Hence, by default the Copernicus Marine toolbox will try to optimise the chunk size and +Hence, by default the Copernicus Marine Toolbox will try to optimise the chunk size and will use a chunk size of 100 times the original chunk size. So approximately 100MB. If the subset is small enough it won't even use ``dask`` at all. From 46cbbaa7f1f3cc38d67f63e21412fcb924278c0a Mon Sep 17 00:00:00 2001 From: uriii3 Date: Tue, 10 Dec 2024 17:20:23 +0100 Subject: [PATCH 03/21] correcting a bit more --- doc/installation.rst | 2 +- doc/usage/quickoverview.ipynb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/installation.rst b/doc/installation.rst index 35fa0e5b..264ebfff 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -168,7 +168,7 @@ Also to convert subsetted data to NetCDF format the Toolbox uses the `xarray.Dat and ``h5netcdf`` library as the backend. The ``h5netcdf`` library is not compatible with the NetCDF3 format. -If you want to use it please make sure to install the ``netcdf4`` library: +If you need to save files in NetCDF3 format please just manually install ``netcdf4`` library: .. code-block:: bash diff --git a/doc/usage/quickoverview.ipynb b/doc/usage/quickoverview.ipynb index 9e5a3870..4290a13c 100644 --- a/doc/usage/quickoverview.ipynb +++ b/doc/usage/quickoverview.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Quick Overview\n", + "# Quick overview\n", "\n", "Most of the code presented here is for the Python interface. Transposing the examples to bash should be quite straighforward since commands, options and functionalities should be almost identical between the command line interface and the Python interface. " ] @@ -16,9 +16,9 @@ }, "source": [ "## Introduction\n", - "The Copernicus Marine Toolbox is a tool developed to connect users with marine data available at the [Copernicus Marine Data Store](https://data.marine.copernicus.eu/products). There, you can find products with relevant data for users.\n", + "The Copernicus Marine Toolbox is a free, user-friendly tool designed to facilitate seamless interaction with the [Copernicus Marine Data Store](https://data.marine.copernicus.eu/products). It offers both a Command Line Interface (CLI) and a Python Application Programming Interface (API), enabling users to efficiently access and manipulate marine data.\n", "\n", - "One way to access this data is through the more visual tool [My Ocean Pro](https://data.marine.copernicus.eu/viewer/expert).\n", + "One way to access this data is through a visualization tool: [My Ocean Pro](https://data.marine.copernicus.eu/viewer/expert).\n", "\n", "The Copernicus Marine Toolbox allows access to this data programmatically and in an automated way, facilitating the download and distribution:\n", "- [GitHub](https://github.com/mercator-ocean/copernicus-marine-toolbox)\n", From dc9631afeff8ebd2da6371261376c04ce680c80d Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 12:12:11 +0100 Subject: [PATCH 04/21] toolbox in lower case if alone --- CONTRIBUTION.md | 2 +- README.md | 2 +- copernicusmarine/catalogue_parser/models.py | 4 ++-- doc/changelog/v2.0.0a4.rst | 2 +- doc/installation.rst | 8 ++++---- doc/usage/get-usage.rst | 2 +- doc/usage/login-usage.rst | 2 +- doc/usage/network-configuration.rst | 10 +++++----- doc/usage/shared-options.rst | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index 863fbdf7..14a9a291 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -17,7 +17,7 @@ After any implementation: ## Release Process -The Copernicus Marine toolbox might maintain several versions at the same time. To this end, we create a branch that will be used for bug fixes and maintenance of the older versions: `release/*`. This branch is created when the development of the new major version starts. +The Copernicus Marine Toolbox might maintain several versions at the same time. To this end, we create a branch that will be used for bug fixes and maintenance of the older versions: `release/*`. This branch is created when the development of the new major version starts. Please be aware when you do a fork and create a pull request which of the branch is relevant: `main` or any of `release/*`. diff --git a/README.md b/README.md index d2bba14e..42f77443 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## Features -The Copernicus Marine toolbox offers capabilities through both **Command Line Interface (CLI)** and **Python API**: +The Copernicus Marine Toolbox offers capabilities through both **Command Line Interface (CLI)** and **Python API**: - **Metadata Information**: List and retrieve metadata information on all products, datasets, variables. - **Subset Datasets**: Subset datasets to extract only the parts of interest, in preferred format, such as Analysis-Ready Cloud-Optimized (ARCO) Zarr or NetCDF file format. diff --git a/copernicusmarine/catalogue_parser/models.py b/copernicusmarine/catalogue_parser/models.py index 76ef4f4d..0433c8bc 100644 --- a/copernicusmarine/catalogue_parser/models.py +++ b/copernicusmarine/catalogue_parser/models.py @@ -19,7 +19,7 @@ class CopernicusMarineServiceNames(str, Enum): """ - Services parsed by the Copernicus Marine toolbox. + Services parsed by the Copernicus Marine Toolbox. """ GEOSERIES = "arco-geo-series" @@ -32,7 +32,7 @@ class CopernicusMarineServiceNames(str, Enum): class CoperniusMarineServiceShortNames(str, Enum): """ - Short names or the services parsed by the Copernicus Marine toolbox. + Short names or the services parsed by the Copernicus Marine Toolbox. Also accepted when a service is requested. """ diff --git a/doc/changelog/v2.0.0a4.rst b/doc/changelog/v2.0.0a4.rst index 074da61a..30c17d91 100644 --- a/doc/changelog/v2.0.0a4.rst +++ b/doc/changelog/v2.0.0a4.rst @@ -53,5 +53,5 @@ Subset Login '''''' -* Now support the new Copernicus Marine authentication system. The Toolbox will try to connect to the new system then fallback to the old one if needed. +* Now support the new Copernicus Marine authentication system. The toolbox will try to connect to the new system then fallback to the old one if needed. * Rename ``--overwrite``, ``--overwrite-configuration-file`` to ``--force-overwrite``. diff --git a/doc/installation.rst b/doc/installation.rst index 264ebfff..6fd95d83 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -48,7 +48,7 @@ You can install it using ``mamba`` (or conda) through the ``conda-forge`` channe mamba install conda-forge::copernicusmarine --yes -To upgrade the Toolbox with mamba (or conda): +To upgrade the toolbox with mamba (or conda): .. code-block:: bash @@ -164,7 +164,7 @@ There are some compatibility issues with the latest versions of xarray and numpy - ``xarray<2024.7.0`` with ``numpy>=2.0.0`` leads to inconsistent results. See this issue: `xarray issue 1 `_. - ``xarray<2024.10.0`` with ``numpy>=2.0.0`` leads to some time overhead. See this issue: `xarray issue 2 `_. -Also to convert subsetted data to NetCDF format the Toolbox uses the `xarray.Dataset.to_netcdf `_ +Also to convert subsetted data to NetCDF format the toolbox uses the `xarray.Dataset.to_netcdf `_ and ``h5netcdf`` library as the backend. The ``h5netcdf`` library is not compatible with the NetCDF3 format. @@ -179,9 +179,9 @@ If you need to save files in NetCDF3 format please just manually install ``netcd The image of the toolbox should already have the ``netcdf4`` library installed. -Domains required by the Copernicus Marine toolbox +Domains required by the Copernicus Marine Toolbox ******************************************************** -To be able to use the Copernicus Marine services, you need to be able to access those domains: +To be able to use the Copernicus Marine Services, you need to be able to access those domains: - ``https://cmems-cas.cls.fr``: for the old authentication process. - ``https://auth.marine.copernicus.eu``: for the new authentication process. diff --git a/doc/usage/get-usage.rst b/doc/usage/get-usage.rst index 06e3b645..e8f6c261 100644 --- a/doc/usage/get-usage.rst +++ b/doc/usage/get-usage.rst @@ -69,7 +69,7 @@ The content of ``selected_files_for_2021.csv`` would be: About ``--sync`` option ------------------------ -The ``--sync`` option downloads original files only if they do not exist or are not up to date. The Toolbox checks the destination folder against the source folder and can be combined with filters. If set with ``--overwrite``, the latter will be ignored. The ``--sync-delete`` option works like ``--sync`` but also deletes any local files not found on the remote server. +The ``--sync`` option downloads original files only if they do not exist or are not up to date. The toolbox checks the destination folder against the source folder and can be combined with filters. If set with ``--overwrite``, the latter will be ignored. The ``--sync-delete`` option works like ``--sync`` but also deletes any local files not found on the remote server. **Limitations:** diff --git a/doc/usage/login-usage.rst b/doc/usage/login-usage.rst index 30be0eb5..8d1491bd 100644 --- a/doc/usage/login-usage.rst +++ b/doc/usage/login-usage.rst @@ -21,7 +21,7 @@ New Copernius Marine authentication system ------------------------------------------- A new Copernius Marine authentication system will be released in the following months after the release of the Copernicus Marine Toolbox version 2.0.0. -From 2.0.0, the Toolbox should be able to handle both the old and the new authentication systems. +From 2.0.0, the toolbox should be able to handle both the old and the new authentication systems. If you are blocking some domains, you will need to authorize the domain ``auth.marine.copernicus.eu`` to be able to connect when the old system is decomissioned. diff --git a/doc/usage/network-configuration.rst b/doc/usage/network-configuration.rst index 39cf2773..ea83ad8a 100644 --- a/doc/usage/network-configuration.rst +++ b/doc/usage/network-configuration.rst @@ -7,7 +7,7 @@ Disable SSL A global SSL context is used when making HTTP calls using the ``copernicusmarine`` Toolbox. For some reason, it can lead to unexpected behavior depending on your network configuration. You can set the ``COPERNICUSMARINE_DISABLE_SSL_CONTEXT`` environment variable to any value -to globally disable the usage of SSL in the Toolbox: +to globally disable the usage of SSL in the toolbox: - on **UNIX** platforms: ``export COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` - on **Windows** platforms: ``set COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` @@ -40,14 +40,14 @@ you can use two options: - set the ``HTTPS_PROXY`` variable. For example: ``HTTPS_PROXY="http://user:pass@some.proxy.com"``. It should work even with ``COPERNICUSMARINE_TRUST_ENV=False``. - use a ``.netrc`` file but be aware that having a line: "default login anonymous password user@site" is incompatible - with S3 connection required by the Toolbox. Also note that if you have ``COPERNICUSMARINE_TRUST_ENV=True`` (the default value) + with S3 connection required by the toolbox. Also note that if you have ``COPERNICUSMARINE_TRUST_ENV=True`` (the default value) then if ``NETRC`` environment variable is set with a specified location, the ``.netrc`` file will be read from the specified location there rather than from ``~/.netrc``. Number of concurrent requests ----------------------------- -The Toolbox makes many requests to STAC to be able to parse the full marine data store STAC catalog. +The toolbox makes many requests to STAC to be able to parse the full marine data store STAC catalog. For that, it uses concurrent calls on one thread. It also uses this when downloading files for the get command. It can be problematic to do too many requests at the same time. Or you might want to boost the download. @@ -62,12 +62,12 @@ The default value is ``15`` and minimum value is ``1``. Connection timeout and retries ------------------------------- -The Toolbox uses the ``requests`` library to make HTTP calls. By default, the connection timeout is set to 60 seconds. +The toolbox uses the ``requests`` library to make HTTP calls. By default, the connection timeout is set to 60 seconds. It's the timeout argument that is being set. Please refer to `requests documentation on timeouts `_ for more information. You can set the ``COPERNICUSMARINE_HTTPS_TIMEOUT`` environment variable to a custom value in seconds. The default value is ``60``. Accepted values are positive floats. -The Toolbox also set retries on http connections by default. You can set the ``COPERNICUSMARINE_HTTPS_RETRIES`` environment variable to a custom value. +The toolbox also set retries on http connections by default. You can set the ``COPERNICUSMARINE_HTTPS_RETRIES`` environment variable to a custom value. The default value is ``5``. Accepted values are integers. diff --git a/doc/usage/shared-options.rst b/doc/usage/shared-options.rst index 7f01a07a..2ab345d6 100644 --- a/doc/usage/shared-options.rst +++ b/doc/usage/shared-options.rst @@ -206,7 +206,7 @@ Option ``--dry-run`` This option allows you to simulate the command without actually executing it. It is useful for checking the command's behavior before running it and to be able to access some metadata about the request. -When used, the Toolbox will by default, send the full return response of the command. +When used, the toolbox will by default, send the full return response of the command. **Example:** From da099a49fe9e09b4dba32f932d33480a72ea8b32 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 12:17:06 +0100 Subject: [PATCH 05/21] update describe usage --- doc/usage/describe-usage.rst | 51 ++++++++++++++---------------------- 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/doc/usage/describe-usage.rst b/doc/usage/describe-usage.rst index 2061bec7..03fac7fa 100644 --- a/doc/usage/describe-usage.rst +++ b/doc/usage/describe-usage.rst @@ -126,55 +126,42 @@ If you want, for example, the ``cmems_obs-ins_glo_phy-temp-sal_my_cora_irr`` dat .. code-block:: bash - copernicusmarine describe --include-datasets --contains cmems_obs-ins_glo_phy-temp-sal_my_cora_irr + copernicusmarine describe --return-fields datasets --contains cmems_obs-ins_glo_phy-temp-sal_my_cora_irr The output will be something like this: .. code-block:: json { - "products": [ - { - "title": "Global Ocean- CORA- In-situ Observations Yearly Delivery in Delayed Mode", - "product_id": "INSITU_GLO_PHY_TS_DISCRETE_MY_013_001", - "thumbnail_url": "https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/INSITU_GLO_PHY_TS_DISCRETE_MY_013_001.jpg", - "digital_object_identifier": "10.17882/46219", - "sources": [ - "In-situ observations" - ], - "processing_level": "Level 2", - "production_center": "OceanScope (France)", - "datasets": [ + "products": [ { - "dataset_id": "cmems_obs-ins_glo_phy-temp-sal_my_cora_irr", - "dataset_name": "cmems_obs-ins_glo_phy-temp-sal_my_cora_irr_202311", - "versions": [ + "datasets": [ { - "label": "202311", - "parts": [ + "dataset_id": "cmems_obs-ins_glo_phy-temp-sal_my_cora_irr", + "dataset_name": "cmems_obs-ins_glo_phy-temp-sal_my_cora_irr_202311", + "versions": [ { - "name": "default", - "services": [ + "label": "202411", + "parts": [ { - "service_type": { + "name": "default", + "services": [ + { "service_name": "original-files", - "short_name": "files" - }, - "service_format": null, - "uri": "https://s3.waw3-1.cloudferro.com/mdl-native-03/native/INSITU_GLO_PHY_TS_DISCRETE_MY_013_001/cmems_obs-ins_glo_phy-temp-sal_my_cora_irr_202311", - "variables": [] + "service_short_name": "files", + "uri": "https://s3.waw3-1.cloudferro.com/mdl-native-03/native/INSITU_GLO_PHY_TS_DISCRETE_MY_013_001/cmems_obs-ins_glo_phy-temp-sal_my_cora_irr_202411", + "variables": [] + } + ], + "released_date": "2024-11-26T13:00:00.000Z" } - ], - "retired_date": null, - "released_date": "2023-11-30T11:00:00.000Z" + ] } ] } ] } ] - } - ] } @@ -187,7 +174,7 @@ You can either use the ``--dataset_id`` option, the ``--product_id`` option or b **Example:** -Let's filter to returned values for simplicity. +Let's filter to exclude services and return only datasets and product_id for simplicity. .. code-block:: bash From 6190cbe733346c6763187181093457d72e265b47 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 12:41:56 +0100 Subject: [PATCH 06/21] error page checks --- copernicusmarine/catalogue_parser/models.py | 17 ++++++++++------- .../core_functions/credentials_utils.py | 8 ++++---- copernicusmarine/core_functions/exceptions.py | 4 ++-- .../core_functions/services_utils.py | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/copernicusmarine/catalogue_parser/models.py b/copernicusmarine/catalogue_parser/models.py index 0433c8bc..8284b3a3 100644 --- a/copernicusmarine/catalogue_parser/models.py +++ b/copernicusmarine/catalogue_parser/models.py @@ -613,8 +613,9 @@ class DatasetVersionPartNotFound(Exception): Please verifiy that the requested part can be found in the result of the :func:`~copernicusmarine.describe` command - for this specific dataset version and dataset id. - If yes, please contact user support. + for this specific dataset version and datasetID. + If yes, please contact the User Support, (widget chat on + `Copernicus Marine website _`). """ def __init__(self, version: CopernicusMarineVersion): @@ -629,7 +630,8 @@ class DatasetVersionNotFound(Exception): Please verifiy that the requested version can be found in the result of the :func:`~copernicusmarine.describe` command for this specific dataset. - If yes, please contact user support. + If yes, please contact the User Support, (widget chat on + `Copernicus Marine website _`). """ def __init__(self, dataset: CopernicusMarineDataset): @@ -643,12 +645,13 @@ class DatasetNotFound(Exception): Possible reasons: - - The dataset id is incorrect and not present in the catalog. + - The datasetID is incorrect and not present in the catalogue. - The dataset has been retired. - Please verifiy that the dataset id is can be found in + Please verifiy that the datasetID is can be found in the result of the :func:`~copernicusmarine.describe` command. - If yes, please contact user support. + If yes, please contact the User Support, (widget chat on + `Copernicus Marine website _`). """ def __init__(self, dataset_id: str): @@ -696,5 +699,5 @@ def get_version_and_part_from_full_dataset_id( dataset_name = match.group(1) version = match.group(2) or VERSION_DEFAULT else: - raise Exception(f"Could not parse dataset id: {full_dataset_id}") + raise Exception(f"Could not parse datasetID: {full_dataset_id}") return dataset_name, version, part diff --git a/copernicusmarine/core_functions/credentials_utils.py b/copernicusmarine/core_functions/credentials_utils.py index 3eaf47ab..1d9de93a 100644 --- a/copernicusmarine/core_functions/credentials_utils.py +++ b/copernicusmarine/core_functions/credentials_utils.py @@ -77,8 +77,8 @@ class CredentialsCannotBeNone(Exception): To use the Copernicus Marine Service, you need to provide a username and a password. You can set them as environment variables or pass them as arguments to the function or use the :func:`~copernicusmarine.login` command. - To register and create your valid credentials, please visit: - `copernicusmarine registration page `_ + To register and create your valid credentials, please visit the + Copernicus Marine `registration page `_ """ pass @@ -89,7 +89,7 @@ class InvalidUsernameOrPassword(Exception): Exception raised when the username or password are invalid. To register and create your valid credentials, please visit: - `copernicusmarine registration page `_ + Copernicus Marine `registration page `_ """ pass @@ -102,7 +102,7 @@ class CouldNotConnectToAuthenticationSystem(Exception): Please check the following common problems: - Check your internet connection - - make sure to authorize ``cmems-cas.cls.fr`` and/or ``auth.marine.copernicus.eu`` domains + - Make sure to authorize ``cmems-cas.cls.fr`` and/or ``auth.marine.copernicus.eu`` domains If none of this worked, maybe the authentication system is down, please try again later. """ # noqa diff --git a/copernicusmarine/core_functions/exceptions.py b/copernicusmarine/core_functions/exceptions.py index 5a1fb945..3e4df2c3 100644 --- a/copernicusmarine/core_functions/exceptions.py +++ b/copernicusmarine/core_functions/exceptions.py @@ -64,7 +64,7 @@ class NetCDFCompressionNotAvailable(Exception): Exception raised when the NetCDF compression is not available. Please make sure the NetCDF compression is available - with the current python libraries. + with the current Python libraries. """ pass @@ -77,7 +77,7 @@ class WrongDatetimeFormat(Exception): Supported formats are: * the string "now" - * all formats supported by dateutil python library + * all formats supported by dateutil Python library see `dateutil documentation page `_. """ # noqa diff --git a/copernicusmarine/core_functions/services_utils.py b/copernicusmarine/core_functions/services_utils.py index 145f1a87..c6c8e553 100644 --- a/copernicusmarine/core_functions/services_utils.py +++ b/copernicusmarine/core_functions/services_utils.py @@ -285,7 +285,7 @@ def get_retrieval_service( if not dataset_metadata: raise KeyError( f"The requested dataset '{dataset_id}' was not found in the catalogue," - " you can use 'copernicusmarine describe --include-datasets " + " you can use 'copernicusmarine describe -r datasets " "--contains ' to find datasets" ) force_service_name: Optional[CopernicusMarineServiceNames] = ( From 52c490294535e8dbf30fdcb64aeb6e28c5c0e4d6 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 13:16:11 +0100 Subject: [PATCH 07/21] making the urls right --- copernicusmarine/catalogue_parser/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/copernicusmarine/catalogue_parser/models.py b/copernicusmarine/catalogue_parser/models.py index 8284b3a3..849f3e91 100644 --- a/copernicusmarine/catalogue_parser/models.py +++ b/copernicusmarine/catalogue_parser/models.py @@ -615,7 +615,7 @@ class DatasetVersionPartNotFound(Exception): the result of the :func:`~copernicusmarine.describe` command for this specific dataset version and datasetID. If yes, please contact the User Support, (widget chat on - `Copernicus Marine website _`). + `Copernicus Marine website `_). """ def __init__(self, version: CopernicusMarineVersion): @@ -631,7 +631,7 @@ class DatasetVersionNotFound(Exception): the result of the :func:`~copernicusmarine.describe` command for this specific dataset. If yes, please contact the User Support, (widget chat on - `Copernicus Marine website _`). + `Copernicus Marine website `_). """ def __init__(self, dataset: CopernicusMarineDataset): @@ -651,7 +651,7 @@ class DatasetNotFound(Exception): Please verifiy that the datasetID is can be found in the result of the :func:`~copernicusmarine.describe` command. If yes, please contact the User Support, (widget chat on - `Copernicus Marine website _`). + `Copernicus Marine website `_). """ def __init__(self, dataset_id: str): From 82ff02fbac48ca961bdcbb9723206f2bed1020fa Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 13:28:12 +0100 Subject: [PATCH 08/21] finishing commandline interface --- copernicusmarine/command_line_interface/group_describe.py | 2 +- copernicusmarine/core_functions/documentation_utils.py | 5 ++--- copernicusmarine/python_interface/subset.py | 2 +- tests/__snapshots__/test_help_command_interface.ambr | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/copernicusmarine/command_line_interface/group_describe.py b/copernicusmarine/command_line_interface/group_describe.py index 6f0d1c43..4fa5337e 100644 --- a/copernicusmarine/command_line_interface/group_describe.py +++ b/copernicusmarine/command_line_interface/group_describe.py @@ -30,7 +30,7 @@ def cli_describe() -> None: @cli_describe.command( "describe", cls=CustomClickOptionsCommand, - short_help="Print Copernicus Marine catalogue as JSON.", + short_help="Print products metadata of Copernicus Marine catalogue as JSON.", help=documentation_utils.DESCRIBE["DESCRIBE_DESCRIPTION_HELP"] + " \n\nReturns\n " + documentation_utils.DESCRIBE["DESCRIBE_RESPONSE_HELP"], # noqa diff --git a/copernicusmarine/core_functions/documentation_utils.py b/copernicusmarine/core_functions/documentation_utils.py index 2af3b93a..ee2fa9ed 100644 --- a/copernicusmarine/core_functions/documentation_utils.py +++ b/copernicusmarine/core_functions/documentation_utils.py @@ -56,8 +56,7 @@ " under the ``$HOME/.copernicusmarine`` directory." ), "LOGIN_RESPONSE_HELP": ( - "Exit code\n 0 exit code if the login was successfully " - "completed, 1 otherwise." + "Exit code\n 0 if the login was successfully completed, 1 otherwise." ), "CONFIGURATION_FILE_DIRECTORY_HELP": ( "Path to the directory where the configuration file will be stored." @@ -123,7 +122,7 @@ SUBSET: dict[str, str] = { "SUBSET_DESCRIPTION_HELP": ( - "Extracts a subset of data from a specified dataset using given parameters." + "Extract a subset of data from a specified dataset using given parameters." "\n\nThe datasetID is required and can be found via the ``describe`` " "command. " # has some hardcoding in CLI and python API ), diff --git a/copernicusmarine/python_interface/subset.py b/copernicusmarine/python_interface/subset.py index 991a4997..22583d64 100644 --- a/copernicusmarine/python_interface/subset.py +++ b/copernicusmarine/python_interface/subset.py @@ -63,7 +63,7 @@ def subset( chunk_size_limit: int = 100, ) -> ResponseSubset: """ - Extracts a subset of data from a specified dataset using given parameters. + Extract a subset of data from a specified dataset using given parameters. The datasetID is required and can be found via the ``describe`` command. diff --git a/tests/__snapshots__/test_help_command_interface.ambr b/tests/__snapshots__/test_help_command_interface.ambr index 562a574e..81446c3c 100644 --- a/tests/__snapshots__/test_help_command_interface.ambr +++ b/tests/__snapshots__/test_help_command_interface.ambr @@ -252,7 +252,7 @@ list([ 'CompletedProcess(args=[\'copernicusmarine\', \'subset\', \'--help\'], returncode=0, stdout=b"Usage: copernicusmarine subset [OPTIONS]', '', - ' Extracts a subset of data from a specified dataset using given parameters.', + ' Extract a subset of data from a specified dataset using given parameters.', '', ' The datasetID is required and can be found via the ``describe`` command. See', ' :ref:`describe `.', From 21593b71b635820aed36a56a13fd1200202ac7b7 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 16:05:00 +0100 Subject: [PATCH 09/21] jupyter quick overview updates --- doc/usage/quickoverview.ipynb | 90 +++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/doc/usage/quickoverview.ipynb b/doc/usage/quickoverview.ipynb index 4290a13c..ce1470d0 100644 --- a/doc/usage/quickoverview.ipynb +++ b/doc/usage/quickoverview.ipynb @@ -20,10 +20,10 @@ "\n", "One way to access this data is through a visualization tool: [My Ocean Pro](https://data.marine.copernicus.eu/viewer/expert).\n", "\n", - "The Copernicus Marine Toolbox allows access to this data programmatically and in an automated way, facilitating the download and distribution:\n", - "- [GitHub](https://github.com/mercator-ocean/copernicus-marine-toolbox)\n", - "- [Documentation](https://toolbox-docs.marine.copernicus.eu/)\n", - "- [Help Center](https://help.marine.copernicus.eu/en/)\n" + "The Copernicus Marine Toolbox allows access to this data programmatically and in an automated way, facilitating the download and distribution. Three of the main resources available are these ones:\n", + "- [GitHub](https://github.com/mercator-ocean/copernicus-marine-toolbox): the package repository\n", + "- [Documentation](https://toolbox-docs.marine.copernicus.eu/): self-versioned documentation\n", + "- [Help Center](https://help.marine.copernicus.eu/en/collections/9080063-copernicus-marine-toolbox): additional information and use cases\n" ] }, { @@ -33,10 +33,10 @@ "The main functions are:\n", "- **Login**: for authentication\n", "- **Describe**: to get metadata from the Data Store\n", - "- **Get**: to download the native data\n", - "- **Subset**: to download specific (spatiotemporal) regions of interest\n", + "- **Get**: to download original data\n", + "- **Subset**: to extract specific portions of datasets by defining variables, geographical areas, time ranges and depth ranges\n", "\n", - "These four commands are available from the terminal (command line interface) and/or from a Python API (from scripts to notebooks!)\n" + "These four commands are available in a terminal (Command Line Interface) or within a script/notebook (Python API).\n" ] }, { @@ -47,14 +47,14 @@ "source": [ "## Installation\n", "\n", - "There are different ways to use the Copernicus Marine Toolbox, using the **`pip`** command, **`mamba | conda`**, the docker image or the binaries. You can see more information in the [installation page](installation-page) of the documentation." + "There are different ways to install the Copernicus Marine Toolbox, using the **`pip`** command, **`mamba | conda`**, the docker image or the binaries. You can see more information in the [installation page](installation-page) of the documentation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Check the Installation\n", + "### Check the installation\n", "To verify that it has been installed correctly, we can import the package from Python (or from the CLI) and see if it works properly." ] }, @@ -91,7 +91,9 @@ "source": [ "## Copernicus Marine Toolbox - Login\n", "\n", - "To register, you can obtain credentials for free by creating an account at [Copernicus Marine website](https://data.marine.copernicus.eu/register?redirect=%2Fproducts).\n", + "The `login` function allows to save credentials and needs to be run only once. Then you can use the rest of the functionalities without specifying your credentials anymore.\n", + "\n", + "To register, you can obtain credentials for free by creating an account at [Copernicus Marine website](https://data.marine.copernicus.eu/register).\n", "\n", "For more information, see the [page about login](login-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-login) or the {func}`Python interface `." ] @@ -100,7 +102,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "One of the ways to **save the credentials** (and then use the rest of the functionalities without having to think about it anymore) is with the `login` function. Indeed your credentials will be encoded and saved at `~/.copernicusmarine/.copernicusmarine-credentials`. You can change the folder using the `configuration_file_directory` argument." + "Your credentials will be encoded and saved at `~/.copernicusmarine/.copernicusmarine-credentials`. You can change the folder using the `configuration_file_directory` argument." ] }, { @@ -109,6 +111,7 @@ "metadata": {}, "outputs": [], "source": [ + "# With the Python interface\n", "copernicusmarine.login(username='', password='')" ] }, @@ -116,7 +119,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You can also set environment variables for your processes, they are gonna be read by the `copernicusmarine.get` and `copernicusmarine.subset` automatically." + "You can also set environment variables for your processes, they are going be read by the `copernicusmarine.get` and `copernicusmarine.subset` automatically." ] }, { @@ -147,7 +150,7 @@ "source": [ "## Copernicus Marine Toolbox - Describe\n", "\n", - "To explore the catalogue of products and datasets available in Copernicus Marine service. \n", + "The `describe` function allows to explore the catalogue of products and datasets available in Copernicus Marine service. \n", "In the Python interface, it returns the {class}`copernicusmarine.CopernicusMarineCatalogue` object.\n", "\n", "For more information, see the [page about describe](describe-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-describe) or the {func}`Python interface `." @@ -265,7 +268,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -323,30 +326,30 @@ ], "source": [ "# For a little more advanced search...\n", - "var_name = [\"chl\", \"o2\"]\n", + "variables = [\"chl\", \"o2\"]\n", "regions = [\"Iberian Biscay\"]\n", "\n", "# We find the products that offer the variables we are interested in:\n", - "describe_var = copernicusmarine.describe(contains=[var_name[0], var_name[1]])\n", - "prod_var = []\n", - "for product in describe_var.products:\n", - " prod_var.append(product.product_id)\n", - "print(f\"Products that offer the variables {var_name}: {len(prod_var)}\")\n", + "describe_varriable = copernicusmarine.describe(contains=[variables[0], variables[1]])\n", + "prod_variable = []\n", + "for product in describe_varriable.products:\n", + " prod_variable.append(product.product_id)\n", + "print(f\"Products that offer the variables {variables}: {len(prod_variable)}\")\n", "\n", "# We save the products that offer the region we are interested in:\n", - "describe_loc = copernicusmarine.describe(contains=[regions[0]])\n", - "prod_loc = []\n", - "for product in describe_loc.products:\n", - " prod_loc.append(product.product_id)\n", - "print(f\"Products in the region {regions}: {len(prod_loc)}\")\n", + "describe_location = copernicusmarine.describe(contains=[regions[0]])\n", + "prod_location = []\n", + "for product in describe_location.products:\n", + " prod_location.append(product.product_id)\n", + "print(f\"Products in the region {regions}: {len(prod_location)}\")\n", "\n", "# And we search the intersection of both lists:\n", - "products = [prod_var, prod_loc]\n", + "products = [prod_variable, prod_location]\n", "final_selected_products = set.intersection(*map(set,products))\n", "\n", "pairs_dataset_step = {}\n", "\n", - "for product in describe_loc.products:\n", + "for product in describe_location.products:\n", " # We add a filter to clarify specific products, in this case the \"OMI\" (Ocean Monitoring Indicators)\n", " if product.product_id in final_selected_products and \"OMI_\" not in product.product_id:\n", " for dataset in product.datasets:\n", @@ -357,7 +360,7 @@ " # And we filter the datasets that can be subsetted:\n", " if 'arco-' in service.service_name and 'zarr' == service.service_format:\n", " for variable in service.variables:\n", - " if (variable.short_name == var_name[0], variable.short_name == var_name[1]) and variable.coordinates != []:\n", + " if (variable.short_name == variables[0], variable.short_name == variables[1]) and variable.coordinates != []:\n", " pairs_dataset_step[dataset.dataset_id] = (product.product_id, variable.coordinates[2].step)\n", "\n", "for key, value in pairs_dataset_step.items():\n", @@ -377,7 +380,7 @@ "\n", "Both products offer daily (`P1D`) and monthly (`P1M`) data. \n", "\n", - "Now that we know the productID that are of interest to us, we can directly use describe for this product. The process will be way faster since we do not have to parse the whole catalogue. " + "Now that we know the productID that are of interest to us, we can directly use `describe` for this product. The process will be way faster since we do not have to parse the whole catalogue. " ] }, { @@ -426,9 +429,15 @@ "source": [ "## Copernicus Marine Toolbox - Subset\n", "\n", + "The `subset` function allows to retrieve an extract of the dataset of interest, selecting specific variables, geographical areas, time ranges and depth ranges.\n", + "\n", "For more information, see the [page about subset](subset-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-subset) or the {func}`Python interface `.\n", "\n", - "The subset is a powerful tool that allows you to benefit from the power the Copernicus Marine services. Indeed, not only do you have access to the whole catalogue but you also can pinpoint the data that interest you thanks to the two services: \"arco-geo-series\" and \"arco-time-series\". They are respectively optimised for retieving maps (short time spam, wide area) and time series (long time span, small area). " + "The `subset` feature is a powerful tool that leverages the capabilities of Copernicus Marine services. It provides access to the entire catalogue and enables precise data selection through two optimized services:\n", + "- ARCO Geo Series: ideal for retrieving spatial data over broad areas within short time frames\n", + "- ARCO Time Series: suited for extracting temporal data over extended periods in specific, localized regions\n", + "\n", + "These services enhance data retrieval efficiency by tailoring the process to your specific spatial and temporal requirements.\n" ] }, { @@ -490,7 +499,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's try to use the other service to see the difference:" + "Let’s try to use the other service `arco-geo-series` to see the difference:" ] }, { @@ -544,7 +553,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This downloaded file will be stored in the indicated local directory (or in the default one if none is specified). It can be downloaded in '.nc' or '.zarr' format. \n", + "This downloaded file will be stored in the indicated local directory (or in the default one if none is specified). It can be downloaded in NetCDF (`.nc`) or Zarr (`.zarr`) format (more info in [this article](https://help.marine.copernicus.eu/en/articles/8176692-how-to-choose-between-netcdf-and-zarr-format-using-the-toolbox)).\n", "\n", "It can then be opened and used with the preferred method (in Python, Matlab, etc.) or software, such as [Panoply](https://www.giss.nasa.gov/tools/panoply/) and [QGIS](https://qgis.org/)." ] @@ -554,11 +563,9 @@ "metadata": {}, "source": [ "## Copernicus Marine Toolbox - Open Dataset & Read Dataframe\n", - "\n", - "Although the four main functions (`login`, `describe`, `subset`, and `get`) are available in the CLI and the API, the Python package also offers a series of additional functions: \n", - "- `open_dataset()`: provides the ability to explore and retrieve data from Copernicus Marine services **remotely**, allowing users to specify various parameters to customize the returned object.\n", - "\n", - "- `open_dataframe()`: facilitates **remote** manipulation and local extraction of data from Copernicus Marine using dataframes (e.g., CSV).\n", + "While the four primary functions —`login`, `describe`, `subset`, and `get`— are accessible via both the Command Line Interface (CLI) and the Python API, the Python package further enhances functionality by offering additional features:\n", + "- `open_dataset()`: facilitates the loading of xarray datasets using lazy-loading mode, optimizing memory usage by loading data only upon computation\n", + "- `read_dataframe()`: enables immediate loading of data into a Pandas dataframe, allowing for efficient data manipulation and analysis\n", "\n", "For more information, you can check the dedicated pages for the {func}`open_dataset ` function or the {func}`read_dataframe ` function.\n" ] @@ -1083,7 +1090,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `open_dataset` function uses a lot of the subset functionalities to help you select the data directly and open lazily a dataset. If you want to process the data using directly xarray yourself you can, see [xarray's documentation](https://docs.xarray.dev/en/stable/)." + "The `open_dataset` function uses a lot of the subset functionalities to help you select the data directly and open lazily a dataset. You can also process the data using directly xarray (cf. [xarray documentation](https://docs.xarray.dev/en/stable/))." ] }, { @@ -1641,7 +1648,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's use `xarray` and `matplotlib` to plot our data." + "Let's use `xarray` and `matplotlib` to plot our data:" ] }, { @@ -1675,7 +1682,8 @@ "source": [ "## Copernicus Marine Toolbox - Get\n", "\n", - "To download the original data (or native data), you can use the **`get`** command.\n", + "The **`get`** function allows to download the original data (i.e. as originally produced).\n", + "\n", "\n", "For more information, see the [page about get](get-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-get) or the {func}`Python interface `.\n", "\n" @@ -1782,7 +1790,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now if you have downloaded this data, but you want to check if your data is up to date you can use the `sync` option. " + "Now if you have downloaded this data, but you want to check if your data is up to date you can use the `sync` option:" ] }, { From 8e5d3b131b352daa41b024738b3804dc4555b0cd Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 16:32:29 +0100 Subject: [PATCH 10/21] changelog and shared options --- doc/changelog/v2.0.0a4.rst | 2 +- doc/usage/shared-options.rst | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/changelog/v2.0.0a4.rst b/doc/changelog/v2.0.0a4.rst index 30c17d91..191fc932 100644 --- a/doc/changelog/v2.0.0a4.rst +++ b/doc/changelog/v2.0.0a4.rst @@ -1,7 +1,7 @@ Pre-release 2.0.0a4 ==================== -Changes starting with **B** might introduce breaking changes. +Changes starting with **B** introduce breaking changes. .. warning:: This is a pre-release version of the Copernicus Marine Toolbox. diff --git a/doc/usage/shared-options.rst b/doc/usage/shared-options.rst index 2ab345d6..2062dd04 100644 --- a/doc/usage/shared-options.rst +++ b/doc/usage/shared-options.rst @@ -1,7 +1,7 @@ Shared options ========================= -Both ``subset`` and ``get`` (and also some concern other options) commands provide these options: +Both ``subset`` and ``get`` commands provide these options. Some options are available in other functions as well, in the latter it will be indicated: Option ``--overwrite`` and ``--skip-existing`` ************************************************ @@ -257,6 +257,8 @@ Option ``--log-level`` Set the level of detail printed to the console by the command, based on the standard logging library. Available values are: ``[DEBUG|INFO|WARN|ERROR|CRITICAL|QUIET]``. +Also available for the ``login`` and the ``describe`` function. + All logs of the library are by default logged in stderr. The outputs of the commands which details can be found in :ref:`the response types documentation `, are sent to stdout. .. note:: From 0d10d31ec9c20713fdbd299256979913684aa763 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 16:43:09 +0100 Subject: [PATCH 11/21] changelog --- doc/changelog/v2.0.0a4.rst | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/changelog/v2.0.0a4.rst b/doc/changelog/v2.0.0a4.rst index 191fc932..0e6084d3 100644 --- a/doc/changelog/v2.0.0a4.rst +++ b/doc/changelog/v2.0.0a4.rst @@ -11,13 +11,13 @@ General '''''''' * Quick overview notebook to provide a quick start guide and more examples especially for the Python interface. -* Updated the reponse types especially :class:`copernicusmarine.ResponseGet` and :class:`copernicusmarine.ResponseSubset`. Especially a status code has been added to the response. +* Updated the response types especially :class:`copernicusmarine.ResponseGet` and :class:`copernicusmarine.ResponseSubset`. Also a status code has been added to the response. * Added a new linux binary to cover more linux distributions. See the :ref:`installation page ` for more information. -* ``numpy>=2.0.0`` is supported -* ``python>=3.13`` is now supported +* ``numpy>=2.0.0`` is now supported. +* ``python>=3.13`` is now supported. * Use the ``h5netcdf`` library to read and write NetCDF files. If you need to save files in NetCDF3 format please just manually install ``netcdf4``. * **B** ``--force-download`` has been removed. Please use the ``--dry-run`` option if you do not want to download the files. See the :ref:`documentation about dry-run option ` for more information. -* ``--skip-existing`` allow you to skip the download of files that already exist at the output destination. +* ``--skip-existing`` allows to skip the download of files that already exist at the output destination. * ``--overwrite-output-data`` has been removed in favor of ``--overwrite``. @@ -33,8 +33,8 @@ Describe command got a lot of new features and changes: * Added options ``--return-fields`` and ``--exclude-fields`` to filter the fields returned by the describe command in the command line interface. * **B** "service_type" in the output of the describe command has been removed. The "service_name" is directly displayed in the output. * **B** ``--include-dataset``, ``--include-keywords``, ``--include-description`` and ``--include-all`` have been removed in favor of the more flexible ``--return-fields`` and ``--exclude-fields``. -* **B** "unit" for coordinates has be renamed to "coordinate_unit" see :class:`copernicusmarine.CopernicusMarineCoordinate`. -* **B** Rename ``--include-versions`` to ``--show-all-versions`` option. +* **B** "unit" for coordinates has be renamed to "coordinate_unit". See :class:`copernicusmarine.CopernicusMarineCoordinate`. +* **B** Renamed ``--include-versions`` to ``--show-all-versions`` option. Get ''''' @@ -45,13 +45,13 @@ Subset '''''''' * Added ``--response-fields`` to filter the fields returned by the subset command in the command line interface. -* Included "variables" in the ResponseSubset object. -* Rename ``--vertical-dimension-output`` to ``--vertical-axis``. -* Improve dask chunk size handling. The default chunk size is bigger and should be more optimal. Please refer to the :ref:`paragraph about chunk size limit ` for more information. +* Included "variables" in the :class:`copernicusmarine.ResponseSubset` object. +* Renamed ``--vertical-dimension-output`` to ``--vertical-axis``. +* Improved ``dask`` chunk size handling. The default chunk size is bigger and should be more optimal. Please refer to the :ref:`paragraph about chunk size limit ` for more information. * ``--motu-api-request`` has been deprecated. Please contact user support if you need to translate legacy motu requests. Login '''''' -* Now support the new Copernicus Marine authentication system. The toolbox will try to connect to the new system then fallback to the old one if needed. -* Rename ``--overwrite``, ``--overwrite-configuration-file`` to ``--force-overwrite``. +* Now supports the new Copernicus Marine authentication system. The toolbox will try to connect to the new system then fallback to the old one if needed. +* Renamed ``--overwrite``, ``--overwrite-configuration-file`` to ``--force-overwrite``. From 31a34b534f56d919421e3961004d7bc5c6db4d98 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 16:51:29 +0100 Subject: [PATCH 12/21] trying badges --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 42f77443..b6138130 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,12 @@ PyPI Supported Versions Supported Platforms Licence + Supported Platforms +[![Docs](https://toolbox-docs.marine.copernicus.eu/en/)](https://toolbox-docs.marine.copernicus.eu/en/) +[![Formatted with black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black) + ![Copernicus Marine Service and Mercator Ocean international logos](https://www.mercator-ocean.eu/wp-content/uploads/2022/05/Cartouche_CMEMS_poisson_MOi.png) ## Features From 902a8b092fe6ba6d8b0ddc61728e105096928c8d Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 16:52:52 +0100 Subject: [PATCH 13/21] trying badges again --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b6138130..a0a421ef 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,10 @@ PyPI Supported Versions Supported Platforms Licence - Supported Platforms + Documentation + Code Style -[![Docs](https://toolbox-docs.marine.copernicus.eu/en/)](https://toolbox-docs.marine.copernicus.eu/en/) -[![Formatted with black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black) - ![Copernicus Marine Service and Mercator Ocean international logos](https://www.mercator-ocean.eu/wp-content/uploads/2022/05/Cartouche_CMEMS_poisson_MOi.png) ## Features From 6ddd41ac9e64c71b051ad484e02065237572e5e5 Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 20:37:19 +0100 Subject: [PATCH 14/21] playing with badges --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a0a421ef..d90419d8 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@

Copernicus Marine Service Toolbox (CLI & Python)

- PyPI - PyPI Supported Versions - Supported Platforms - Licence - Documentation - Code Style + PyPI + PyPI Supported Versions + Supported Platforms + Licence + Documentation + Code Style
![Copernicus Marine Service and Mercator Ocean international logos](https://www.mercator-ocean.eu/wp-content/uploads/2022/05/Cartouche_CMEMS_poisson_MOi.png) From 3413048a1de927e8bccd934617c508df558d942e Mon Sep 17 00:00:00 2001 From: uriii3 Date: Wed, 11 Dec 2024 20:44:59 +0100 Subject: [PATCH 15/21] now i think badges are good --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d90419d8..77a93dae 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ PyPI Supported Versions Supported Platforms Licence - Documentation - Code Style + Documentation + Code Style ![Copernicus Marine Service and Mercator Ocean international logos](https://www.mercator-ocean.eu/wp-content/uploads/2022/05/Cartouche_CMEMS_poisson_MOi.png) From c7bb0b294f7b7842c3a9a325cd9143aacb683301 Mon Sep 17 00:00:00 2001 From: renaudjester Date: Fri, 13 Dec 2024 15:43:46 +0100 Subject: [PATCH 16/21] doc: add env var page and some improvments --- .github/workflows/dependencies-tests.yml | 2 +- .../core_functions/documentation_utils.py | 10 +- .../core_functions/environment_variables.py | 2 +- copernicusmarine/core_functions/sessions.py | 15 ++- copernicusmarine/python_interface/get.py | 4 +- copernicusmarine/python_interface/login.py | 4 +- .../python_interface/open_dataset.py | 4 +- copernicusmarine/python_interface/subset.py | 4 +- doc/installation.rst | 32 ++++- doc/usage/environment-variables.rst | 114 ++++++++++++++++++ doc/usage/network-configuration.rst | 16 +++ doc/usage/quickoverview.ipynb | 2 + doc/usage/usage.rst | 1 + .../test_help_command_interface.ambr | 33 +++-- 14 files changed, 217 insertions(+), 26 deletions(-) create mode 100644 doc/usage/environment-variables.rst diff --git a/.github/workflows/dependencies-tests.yml b/.github/workflows/dependencies-tests.yml index 2575f644..8dd9285f 100644 --- a/.github/workflows/dependencies-tests.yml +++ b/.github/workflows/dependencies-tests.yml @@ -19,7 +19,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install Copernicus Marine toolbox + - name: Install Copernicus Marine Toolbox run: pip install . - name: Install nox diff --git a/copernicusmarine/core_functions/documentation_utils.py b/copernicusmarine/core_functions/documentation_utils.py index ee2fa9ed..912aabfd 100644 --- a/copernicusmarine/core_functions/documentation_utils.py +++ b/copernicusmarine/core_functions/documentation_utils.py @@ -3,10 +3,10 @@ SHARED: dict[str, str] = { "OVERWRITE_HELP": "If specified and if the file already exists on destination, then it will be overwritten. By default, the toolbox creates a new file with a new index (eg 'filename_(1).nc').", # noqa: E501 "USERNAME_HELP": ( - "The username for authentication." + "If not set, search for environment variable COPERNICUSMARINE_SERVICE_USERNAME, then search for a credentials file, else ask for user input." # noqa ), # a little hardcoding in Python API "PASSWORD_HELP": ( - "The password for authentication." + "If not set, search for environment variable COPERNICUSMARINE_SERVICE_PASSWORD, then search for a credentials file, else ask for user input." # noqa ), # a little hardcoding in Python API "LOG_LEVEL_HELP": ( "Set the details printed to console by the command " @@ -58,6 +58,12 @@ "LOGIN_RESPONSE_HELP": ( "Exit code\n 0 if the login was successfully completed, 1 otherwise." ), + "USERNAME_HELP": ( + "If not set, search for environment variable COPERNICUSMARINE_SERVICE_USERNAME, else ask for user input." # noqa + ), + "PASSWORD_HELP": ( + "If not set, search for environment variable COPERNICUSMARINE_SERVICE_PASSWORD, else ask for user input." # noqa + ), "CONFIGURATION_FILE_DIRECTORY_HELP": ( "Path to the directory where the configuration file will be stored." ), diff --git a/copernicusmarine/core_functions/environment_variables.py b/copernicusmarine/core_functions/environment_variables.py index cb0f9416..9561cbcc 100644 --- a/copernicusmarine/core_functions/environment_variables.py +++ b/copernicusmarine/core_functions/environment_variables.py @@ -25,7 +25,7 @@ ) COPERNICUSMARINE_DISABLE_SSL_CONTEXT = os.getenv( - "COPERNICUSMARINE_DISABLE_SSL_CONTEXT" + "COPERNICUSMARINE_DISABLE_SSL_CONTEXT", "False" ) COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH = os.getenv( diff --git a/copernicusmarine/core_functions/sessions.py b/copernicusmarine/core_functions/sessions.py index 997fb201..c065f787 100644 --- a/copernicusmarine/core_functions/sessions.py +++ b/copernicusmarine/core_functions/sessions.py @@ -43,8 +43,12 @@ def get_ssl_context() -> Optional[ssl.SSLContext]: - if COPERNICUSMARINE_DISABLE_SSL_CONTEXT is not None: + if COPERNICUSMARINE_DISABLE_SSL_CONTEXT == "True": return None + if COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH: + return ssl.create_default_context( + capath=COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH + ) return ssl.create_default_context(cafile=certifi.where()) @@ -89,9 +93,12 @@ class ConfiguredRequestsSession(requests.Session): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.trust_env = TRUST_ENV - self.verify = ( - COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH or certifi.where() - ) + if COPERNICUSMARINE_DISABLE_SSL_CONTEXT == "True": + self.verify = False + else: + self.verify = ( + COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH or certifi.where() + ) self.proxies = PROXIES if HTTPS_RETRIES: self.mount( diff --git a/copernicusmarine/python_interface/get.py b/copernicusmarine/python_interface/get.py index fda9d065..883e7e47 100644 --- a/copernicusmarine/python_interface/get.py +++ b/copernicusmarine/python_interface/get.py @@ -55,9 +55,9 @@ def get( dataset_part : str, optional Force the selection of a specific dataset part. username : str, optional - The username for authentication. + If not set, search for environment variable COPERNICUSMARINE_SERVICE_USERNAME, then search for a credentials file, else ask for user input. See also :func:`~copernicusmarine.login` password : str, optional - The password for authentication. + If not set, search for environment variable COPERNICUSMARINE_SERVICE_PASSWORD, then search for a credentials file, else ask for user input. See also :func:`~copernicusmarine.login` no_directories : bool, optional If True, downloaded files will not be organized into directories. output_directory : Union[pathlib.Path, str], optional diff --git a/copernicusmarine/python_interface/login.py b/copernicusmarine/python_interface/login.py index f964af04..6a282396 100644 --- a/copernicusmarine/python_interface/login.py +++ b/copernicusmarine/python_interface/login.py @@ -21,9 +21,9 @@ def login( Parameters ---------- username : str, optional - The username for authentication. + If not set, search for environment variable COPERNICUSMARINE_SERVICE_USERNAME, else ask for user input. password : str, optional - The password for authentication. + If not set, search for environment variable COPERNICUSMARINE_SERVICE_PASSWORD, else ask for user input. configuration_file_directory : Union[pathlib.Path, str] Path to the directory where the configuration file will be stored. force_overwrite : bool diff --git a/copernicusmarine/python_interface/open_dataset.py b/copernicusmarine/python_interface/open_dataset.py index b5e0c3e1..273e453e 100644 --- a/copernicusmarine/python_interface/open_dataset.py +++ b/copernicusmarine/python_interface/open_dataset.py @@ -75,9 +75,9 @@ def open_dataset( dataset_part : str, optional Force the selection of a specific dataset part. username : str, optional - The username for authentication. + If not set, search for environment variable COPERNICUSMARINE_SERVICE_USERNAME, then search for a credentials file, else ask for user input. See also :func:`~copernicusmarine.login` password : str, optional - The password for authentication. + If not set, search for environment variable COPERNICUSMARINE_SERVICE_PASSWORD, then search for a credentials file, else ask for user input. See also :func:`~copernicusmarine.login` variables : List[str], optional List of variable names to extract. minimum_longitude : float, optional diff --git a/copernicusmarine/python_interface/subset.py b/copernicusmarine/python_interface/subset.py index 22583d64..14d35106 100644 --- a/copernicusmarine/python_interface/subset.py +++ b/copernicusmarine/python_interface/subset.py @@ -76,9 +76,9 @@ def subset( dataset_part : str, optional Force the selection of a specific dataset part. username : str, optional - The username for authentication. See also :func:`~copernicusmarine.login` + If not set, search for environment variable COPERNICUSMARINE_SERVICE_USERNAME, then search for a credentials file, else ask for user input. See also :func:`~copernicusmarine.login` password : str, optional - The password for authentication. See also :func:`~copernicusmarine.login` + If not set, search for environment variable COPERNICUSMARINE_SERVICE_PASSWORD, then search for a credentials file, else ask for user input. See also :func:`~copernicusmarine.login` variables : List[str], optional List of variable names to extract. minimum_longitude : float, optional diff --git a/doc/installation.rst b/doc/installation.rst index 6fd95d83..fe583641 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -139,7 +139,7 @@ And from a Windows os (cmd): Dependencies ************** -The Copernicus Marine toolbox has the following dependencies: +The Copernicus Marine Toolbox has the following dependencies: - `Python `__ (3.9 or later) - `click `__ (8.0.4 or later) @@ -186,3 +186,33 @@ To be able to use the Copernicus Marine Services, you need to be able to access - ``https://cmems-cas.cls.fr``: for the old authentication process. - ``https://auth.marine.copernicus.eu``: for the new authentication process. - ``https://s3.waw3-1.cloudferro.com``: for the data. + +To check if you are able to access ``https://s3.waw3-1.cloudferro.com`` the way the toolbox is doing it you can do the following steps. + +First, open a Python console in the same environment as you would run your script: + +.. code-block:: bash + + python + +Then, run a requests and check that the result is as expected: + +.. code-block:: python + + import requests + + # you can pass here proxies and ssl configuration if needed + response = requests.get( + "https://s3.waw3-1.cloudferro.com/mdl-metadata/mdsVersions.json" + ) + response.raise_for_status() + + print(response.json()) + + # you should get something like: + # {'systemVersions': {'mds': '1.0.0', [..] 'mds/serverlessArco/meta': '>=1.2.2'}} + + +For the authentication, check that you can run the login command. +If you have an error related to HTTP calls or internet connection, +please check with your IT support. diff --git a/doc/usage/environment-variables.rst b/doc/usage/environment-variables.rst new file mode 100644 index 00000000..cf4a7696 --- /dev/null +++ b/doc/usage/environment-variables.rst @@ -0,0 +1,114 @@ +Environment variables +======================= + +This page list all the environment variables read by the toolbox +with a short description. + +We also provide an example on how to set the environment variables, +but it can be done in many ways. + +Some of those variables are more extensively described +in the :ref:`network configuration page `. + +``COPERNICUSMARINE_SERVICE_USERNAME`` +--------------------------------------- + +This will be read as the username to authenticate the Copernicus Marine Services. +It has precedence over configuration files. See :ref:`login usage page `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_SERVICE_USERNAME=`` +- on **Windows** platforms: ``set COPERNICUSMARINE_SERVICE_USERNAME=`` + +``COPERNICUSMARINE_SERVICE_PASSWORD`` +-------------------------------------- + +This will be read as the password to authenticate the Copernicus Marine Services. +It has precedence over configuration files. See :ref:`login usage page `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_SERVICE_PASSWORD=`` +- on **Windows** platforms: ``set COPERNICUSMARINE_SERVICE_PASSWORD=`` + +``COPERNICUSMARINE_CREDENTIALS_DIRECTORY`` +------------------------------------------- + +The toolbox will always look for a credentials file +in the directory set here. By default, the toolbox looks +into the home directory (``$HOME/.copernicusmarine``). +See :ref:`login usage page `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_CREDENTIALS_DIRECTORY=path/to/directory`` +- on **Windows** platforms: ``set COPERNICUSMARINE_CREDENTIALS_DIRECTORY=path\to\directory`` + +``COPERNICUSMARINE_DISABLE_SSL_CONTEXT`` +----------------------------------------- + +If set to "True", this will disable the SSL context for the toolbox HTTP calls. Default is "False". +See :ref:`network configuration page about disabling ssl `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` +- on **Windows** platforms: ``set COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` + +``COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH`` +---------------------------------------------- + +This will set the path to a custom SSL certificate. +Note that ``COPERNICUSMARINE_DISABLE_SSL_CONTEXT`` takes precedence over ``COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH``. +See :ref:`network configuration page about ssl certificate `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH=path/to/file.pem`` +- on **Windows** platforms: ``set COPERNICUSMARINE_SET_SSL_CERTIFICATE_PATH=path\to\file.pem`` + +``COPERNICUSMARINE_TRUST_ENV`` +------------------------------- + +If set to "False", this will deactivate the ``trust_env`` value for the ``requests`` library. +"True" by default. See :ref:`network configuration page about trust_env `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_TRUST_ENV=False`` +- on **Windows** platforms: ``set COPERNICUSMARINE_TRUST_ENV=False`` + +``COPERNICUSMARINE_HTTPS_TIMEOUT`` +---------------------------------- + +This will set the timeout in seconds for the HTTP calls. Default is ``60``. +See :ref:`network configuration page about timeout `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_HTTPS_TIMEOUT=120`` +- on **Windows** platforms: ``set COPERNICUSMARINE_HTTPS_TIMEOUT=120`` + +``COPERNICUSMARINE_HTTPS_RETRIES`` +---------------------------------- + +This will set the number of retries for the HTTP calls. Default is ``5``. +If set to ``0``, the toolbox won't retry failed HTTP calls. +See :ref:`network configuration page about retries `. + +It can be set this way: + +- on **UNIX** platforms: ``export COPERNICUSMARINE_HTTPS_RETRIES=5`` +- on **Windows** platforms: ``set COPERNICUSMARINE_HTTPS_RETRIES=5`` + +``PROXY_HTTPS`` and ``PROXY_HTTP`` +----------------------------------- + +These allow you to pass a proxy to the toolbox. +See :ref:`network configuration page about proxy `. + +It can be set this way: + +- on **UNIX** platforms: ``export PROXY_HTTPS="http://user"`` +- on **Windows** platforms: ``set PROXY_HTTPS="http://user"`` diff --git a/doc/usage/network-configuration.rst b/doc/usage/network-configuration.rst index ea83ad8a..6e9cd374 100644 --- a/doc/usage/network-configuration.rst +++ b/doc/usage/network-configuration.rst @@ -1,6 +1,10 @@ +.. _network-configuration: + Network configuration ====================== +.. _disable-ssl: + Disable SSL ----------- @@ -9,9 +13,13 @@ For some reason, it can lead to unexpected behavior depending on your network co You can set the ``COPERNICUSMARINE_DISABLE_SSL_CONTEXT`` environment variable to any value to globally disable the usage of SSL in the toolbox: +Please see `requests documentation page `_ for more information. + - on **UNIX** platforms: ``export COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` - on **Windows** platforms: ``set COPERNICUSMARINE_DISABLE_SSL_CONTEXT=True`` +.. _trust-env: + ``trust_env`` for Python libraries ------------------------------------ @@ -23,6 +31,8 @@ This can be useful, for example, if you don't want those libraries to read your reported that having a ``.netrc`` with a line: "default login anonymous password user@site" is incompatible with S3 connection required by the Toolbox. +.. _ssl-certificate-path: + Using a custom certificate path ------------------------------- @@ -31,6 +41,10 @@ Some users reported issues with SSL certificates. You can precise a custom path It might be useful if you want to use the global certificate instead of the one created by your conda environment for example. +Please see `requests documentation page `_ for more information. + +.. _http-proxy: + Proxy ----- @@ -59,6 +73,8 @@ The default value is ``15`` and minimum value is ``1``. For the ``get`` command, you can set the environment variable to ``0`` if you don't want to use the ``concurrent.futures.ThreadPoolExecutor`` at all; the download will be used only through ``boto3``. +.. _http-connection-timeout-retries: + Connection timeout and retries ------------------------------- diff --git a/doc/usage/quickoverview.ipynb b/doc/usage/quickoverview.ipynb index ce1470d0..1ab0a145 100644 --- a/doc/usage/quickoverview.ipynb +++ b/doc/usage/quickoverview.ipynb @@ -499,6 +499,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "The toolbox tries to select the optimal service for the request to be as efficient as possible. In this case for example, `arco-time-series` has been used by default.\n", + "\n", "Let’s try to use the other service `arco-geo-series` to see the difference:" ] }, diff --git a/doc/usage/usage.rst b/doc/usage/usage.rst index 1f82fcc6..2301b905 100644 --- a/doc/usage/usage.rst +++ b/doc/usage/usage.rst @@ -11,3 +11,4 @@ Usage and technical details shared-options network-configuration errors + environment-variables diff --git a/tests/__snapshots__/test_help_command_interface.ambr b/tests/__snapshots__/test_help_command_interface.ambr index 81446c3c..1ac2c79d 100644 --- a/tests/__snapshots__/test_help_command_interface.ambr +++ b/tests/__snapshots__/test_help_command_interface.ambr @@ -8,7 +8,7 @@ ' -h, --help Show this message and exit.', '', 'Commands:', - ' describe Print Copernicus Marine catalogue as JSON.', + ' describe Print products metadata of Copernicus Marine catalogue as JSON.', ' get Download originally produced data files.', ' login Create a configuration file with your Copernicus Marine', ' credentials.', @@ -87,8 +87,14 @@ ' version.', ' --dataset-part TEXT Force the selection of a specific dataset', ' part.', - ' --username TEXT The username for authentication.', - ' --password TEXT The password for authentication.', + ' --username TEXT If not set, search for environment variable', + ' COPERNICUSMARINE_SERVICE_USERNAME, then', + ' search for a credentials file, else ask for', + ' user input.', + ' --password TEXT If not set, search for environment variable', + ' COPERNICUSMARINE_SERVICE_PASSWORD, then', + ' search for a credentials file, else ask for', + ' user input.', ' -nd, --no-directories If True, downloaded files will not be', ' organized into directories. NOTE: This', ' argument is mutually exclusive with', @@ -192,12 +198,15 @@ ' Create a configuration file with your Copernicus Marine credentials under', ' the ``$HOME/.copernicusmarine`` directory.', '', - ' Returns Exit code 0 exit code if the login was successfully completed, 1', - ' otherwise.', + ' Returns Exit code 0 if the login was successfully completed, 1 otherwise.', '', 'Options:', - ' --username TEXT The username for authentication.', - ' --password TEXT The password for authentication.', + ' --username TEXT If not set, search for environment variable', + ' COPERNICUSMARINE_SERVICE_USERNAME, else ask', + ' for user input.', + ' --password TEXT If not set, search for environment variable', + ' COPERNICUSMARINE_SERVICE_PASSWORD, else ask', + ' for user input.', ' --configuration-file-directory PATH', ' Path to the directory where the', ' configuration file will be stored.', @@ -266,8 +275,14 @@ ' version.', ' --dataset-part TEXT Force the selection of a specific dataset', ' part.', - ' --username TEXT The username for authentication.', - ' --password TEXT The password for authentication.', + ' --username TEXT If not set, search for environment variable', + ' COPERNICUSMARINE_SERVICE_USERNAME, then', + ' search for a credentials file, else ask for', + ' user input.', + ' --password TEXT If not set, search for environment variable', + ' COPERNICUSMARINE_SERVICE_PASSWORD, then', + ' search for a credentials file, else ask for', + ' user input.', ' -v, --variable TEXT Specify dataset variable. Can be used', ' multiple times.', ' -x, --minimum-longitude FLOAT Minimum longitude for the subset. The value', From bcb772a3fab939b37ca7f8cadd83cfe73af46d33 Mon Sep 17 00:00:00 2001 From: renaudjester Date: Mon, 16 Dec 2024 16:53:09 +0100 Subject: [PATCH 17/21] doc: update badges --- README.md | 10 +++++++--- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 77a93dae..703b84cb 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ -

Copernicus Marine Service Toolbox (CLI & Python)

PyPI + conda-forge +
+
PyPI Supported Versions Supported Platforms - Licence - Documentation + Docker + Documentation Code Style + Licence + Downloads
![Copernicus Marine Service and Mercator Ocean international logos](https://www.mercator-ocean.eu/wp-content/uploads/2022/05/Cartouche_CMEMS_poisson_MOi.png) diff --git a/pyproject.toml b/pyproject.toml index 934c6df9..000782e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "copernicusmarine" version = "1.3.4" -description = "" +description = "Command line interface and Python API for accessing Copernicus Marine data and related services." authors = ["Copernicus Marine User Support "] readme = "README.md" packages = [{include = "copernicusmarine"}] From 8bbc4008bb2aeae5448d297003205997e9599051 Mon Sep 17 00:00:00 2001 From: renaudjester Date: Mon, 16 Dec 2024 16:58:15 +0100 Subject: [PATCH 18/21] test: create binaries --- .github/workflows/binaries.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/binaries.yml b/.github/workflows/binaries.yml index 8d32c601..8f5f612e 100644 --- a/.github/workflows/binaries.yml +++ b/.github/workflows/binaries.yml @@ -7,6 +7,7 @@ on: - "release/**" - "pre-releases/**" - "!release/v1" + - "documentation-review" jobs: From 384793e1e6b633146a138eb3262547950c070e09 Mon Sep 17 00:00:00 2001 From: renaudjester Date: Mon, 16 Dec 2024 16:58:57 +0100 Subject: [PATCH 19/21] test: create binaries --- .github/workflows/binaries.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/binaries.yml b/.github/workflows/binaries.yml index 8f5f612e..96fcba65 100644 --- a/.github/workflows/binaries.yml +++ b/.github/workflows/binaries.yml @@ -12,7 +12,6 @@ on: jobs: build: - if: startsWith(github.event.head_commit.message, 'Copernicus Marine Release') || startsWith(github.event.head_commit.message, 'Copernicus Marine Pre-Release') strategy: fail-fast: false matrix: From 6476c0c2b2bc9bce2e3611e05caa1ac591793742 Mon Sep 17 00:00:00 2001 From: renaudjester Date: Mon, 16 Dec 2024 17:07:34 +0100 Subject: [PATCH 20/21] test: create binaries --- .github/workflows/binaries.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/binaries.yml b/.github/workflows/binaries.yml index 96fcba65..8d32c601 100644 --- a/.github/workflows/binaries.yml +++ b/.github/workflows/binaries.yml @@ -7,11 +7,11 @@ on: - "release/**" - "pre-releases/**" - "!release/v1" - - "documentation-review" jobs: build: + if: startsWith(github.event.head_commit.message, 'Copernicus Marine Release') || startsWith(github.event.head_commit.message, 'Copernicus Marine Pre-Release') strategy: fail-fast: false matrix: From 48c53cc095b8fee41313f424c53bd0da22752a8f Mon Sep 17 00:00:00 2001 From: renaudjester Date: Mon, 16 Dec 2024 18:07:10 +0100 Subject: [PATCH 21/21] doc: update overview --- doc/usage/quickoverview.ipynb | 3099 ++++++++++++++++++++++++++++++--- doc/usage/shared-options.rst | 8 +- 2 files changed, 2815 insertions(+), 292 deletions(-) diff --git a/doc/usage/quickoverview.ipynb b/doc/usage/quickoverview.ipynb index 1ab0a145..3faf4c22 100644 --- a/doc/usage/quickoverview.ipynb +++ b/doc/usage/quickoverview.ipynb @@ -449,25 +449,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO - 2024-10-23T08:34:04Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", - "INFO - 2024-10-23T08:34:04Z - Dataset part was not specified, the first one was selected: \"default\"\n", - "INFO - 2024-10-23T08:34:06Z - Service was not specified, the default one was selected: \"arco-time-series\"\n", - "INFO - 2024-10-23T08:34:07Z - Downloading using service arco-time-series...\n", - "INFO - 2024-10-23T08:34:09Z - Estimated size of the dataset file is 61.855 MB\n", - "Estimated size of the data that needs to be downloaded to obtain the result: 2814 MB\n", - "This is a very rough estimate that is generally higher than the actual size of the data that needs to be downloaded.\n", - "INFO - 2024-10-23T08:34:09Z - Writing to local storage. Please wait...\n" + "INFO - 2024-12-16T16:55:21Z - Selected dataset version: \"202411\"\n", + "INFO - 2024-12-16T16:55:21Z - Selected dataset part: \"default\"\n", + "INFO - 2024-12-16T16:55:24Z - Starting download. Please wait...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "75e8924847e84564b05b12724c9701a6", + "model_id": "09291c6edeb9405aa4f36d804004491e", "version_major": 2, "version_minor": 0 }, "text/plain": [ - " 0%| | 0/2802 [00:00
<xarray.Dataset>\n",
-       "Dimensions:    (depth: 50, latitude: 1081, longitude: 865, time: 1303)\n",
+       "Dimensions:    (depth: 50, latitude: 1078, longitude: 871, time: 760)\n",
        "Coordinates:\n",
        "  * depth      (depth) float32 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n",
-       "  * latitude   (latitude) float32 26.0 26.03 26.06 26.08 ... 55.94 55.97 56.0\n",
-       "  * longitude  (longitude) float32 -19.0 -18.97 -18.94 ... 4.944 4.972 5.0\n",
-       "  * time       (time) datetime64[ns] 2021-04-03 2021-04-04 ... 2024-10-26\n",
+       "  * latitude   (latitude) float64 26.17 26.19 26.22 26.25 ... 56.03 56.06 56.08\n",
+       "  * longitude  (longitude) float64 -19.08 -19.06 -19.03 ... 5.029 5.057 5.085\n",
+       "  * time       (time) datetime64[ns] 2022-11-23 2022-11-24 ... 2024-12-21\n",
        "Data variables: (12/14)\n",
-       "    chl        (time, depth, latitude, longitude) float32 ...\n",
-       "    dissic     (time, depth, latitude, longitude) float32 ...\n",
-       "    fe         (time, depth, latitude, longitude) float32 ...\n",
-       "    nh4        (time, depth, latitude, longitude) float32 ...\n",
-       "    no3        (time, depth, latitude, longitude) float32 ...\n",
-       "    nppv       (time, depth, latitude, longitude) float32 ...\n",
+       "    chl        (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    dissic     (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    fe         (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    nh4        (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    no3        (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    nppv       (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
        "    ...         ...\n",
-       "    phyc       (time, depth, latitude, longitude) float32 ...\n",
-       "    po4        (time, depth, latitude, longitude) float32 ...\n",
-       "    si         (time, depth, latitude, longitude) float32 ...\n",
-       "    spco2      (time, latitude, longitude) float32 ...\n",
-       "    zeu        (time, latitude, longitude) float32 ...\n",
-       "    zooc       (time, depth, latitude, longitude) float32 ...\n",
+       "    phyc       (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    po4        (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    si         (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
+       "    spco2      (time, latitude, longitude) float32 dask.array<chunksize=(50, 1078, 871), meta=np.ndarray>\n",
+       "    zeu        (time, latitude, longitude) float32 dask.array<chunksize=(50, 1078, 871), meta=np.ndarray>\n",
+       "    zooc       (time, depth, latitude, longitude) float32 dask.array<chunksize=(50, 1, 1078, 871), meta=np.ndarray>\n",
        "Attributes:\n",
-       "    source:       NEMO3.6-PISCES3.6\n",
-       "    institution:  Nologin (Spain)\n",
        "    title:        Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n",
-       "    contact:      mailto: servicedesk.cmems@mercator-ocean.eu\n",
-       "    Conventions:  CF-1.0\n",
-       "    references:   http://marine.copernicus.eu/
  • title :
    Biogeochemical 3D daily mean fields for the Iberia-Biscay-Ireland (IBI) region
    comment :
    references :
    http://marine.copernicus.eu/
    institution :
    NOW Systems (Spain)
    contact :
    https://marine.copernicus.eu/contact
    source :
    NEMO3.6-PISCES3.6
    Conventions :
    CF-1.8
  • " ], "text/plain": [ "\n", - "Dimensions: (depth: 50, latitude: 1081, longitude: 865, time: 1303)\n", + "Dimensions: (depth: 50, latitude: 1078, longitude: 871, time: 760)\n", "Coordinates:\n", " * depth (depth) float32 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n", - " * latitude (latitude) float32 26.0 26.03 26.06 26.08 ... 55.94 55.97 56.0\n", - " * longitude (longitude) float32 -19.0 -18.97 -18.94 ... 4.944 4.972 5.0\n", - " * time (time) datetime64[ns] 2021-04-03 2021-04-04 ... 2024-10-26\n", + " * latitude (latitude) float64 26.17 26.19 26.22 26.25 ... 56.03 56.06 56.08\n", + " * longitude (longitude) float64 -19.08 -19.06 -19.03 ... 5.029 5.057 5.085\n", + " * time (time) datetime64[ns] 2022-11-23 2022-11-24 ... 2024-12-21\n", "Data variables: (12/14)\n", - " chl (time, depth, latitude, longitude) float32 ...\n", - " dissic (time, depth, latitude, longitude) float32 ...\n", - " fe (time, depth, latitude, longitude) float32 ...\n", - " nh4 (time, depth, latitude, longitude) float32 ...\n", - " no3 (time, depth, latitude, longitude) float32 ...\n", - " nppv (time, depth, latitude, longitude) float32 ...\n", + " chl (time, depth, latitude, longitude) float32 dask.array\n", + " dissic (time, depth, latitude, longitude) float32 dask.array\n", + " fe (time, depth, latitude, longitude) float32 dask.array\n", + " nh4 (time, depth, latitude, longitude) float32 dask.array\n", + " no3 (time, depth, latitude, longitude) float32 dask.array\n", + " nppv (time, depth, latitude, longitude) float32 dask.array\n", " ... ...\n", - " phyc (time, depth, latitude, longitude) float32 ...\n", - " po4 (time, depth, latitude, longitude) float32 ...\n", - " si (time, depth, latitude, longitude) float32 ...\n", - " spco2 (time, latitude, longitude) float32 ...\n", - " zeu (time, latitude, longitude) float32 ...\n", - " zooc (time, depth, latitude, longitude) float32 ...\n", + " phyc (time, depth, latitude, longitude) float32 dask.array\n", + " po4 (time, depth, latitude, longitude) float32 dask.array\n", + " si (time, depth, latitude, longitude) float32 dask.array\n", + " spco2 (time, latitude, longitude) float32 dask.array\n", + " zeu (time, latitude, longitude) float32 dask.array\n", + " zooc (time, depth, latitude, longitude) float32 dask.array\n", "Attributes:\n", - " source: NEMO3.6-PISCES3.6\n", - " institution: Nologin (Spain)\n", " title: Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n", - " contact: mailto: servicedesk.cmems@mercator-ocean.eu\n", - " Conventions: CF-1.0\n", - " references: http://marine.copernicus.eu/" + " comment: \n", + " references: http://marine.copernicus.eu/\n", + " institution: NOW Systems (Spain)\n", + " contact: https://marine.copernicus.eu/contact\n", + " source: NEMO3.6-PISCES3.6\n", + " Conventions: CF-1.8" ] }, - "execution_count": 14, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -1097,16 +3355,15 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO - 2024-10-18T16:08:46Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", - "INFO - 2024-10-18T16:08:46Z - Dataset part was not specified, the first one was selected: \"default\"\n", - "INFO - 2024-10-18T16:08:47Z - Service was not specified, the default one was selected: \"arco-time-series\"\n" + "INFO - 2024-12-16T16:57:24Z - Selected dataset version: \"202411\"\n", + "INFO - 2024-12-16T16:57:24Z - Selected dataset part: \"default\"\n" ] }, { @@ -1143,7 +3400,6 @@ "}\n", "\n", "html[theme=dark],\n", - "html[data-theme=dark],\n", "body[data-theme=dark],\n", "body.vscode-dark {\n", " --xr-font-color0: rgba(255, 255, 255, 1);\n", @@ -1476,23 +3732,24 @@ " stroke: currentColor;\n", " fill: currentColor;\n", "}\n", - "
    <xarray.Dataset> Size: 13MB\n",
    -       "Dimensions:    (depth: 50, latitude: 37, longitude: 73, time: 6)\n",
    +       "
    <xarray.Dataset>\n",
    +       "Dimensions:    (depth: 50, latitude: 36, longitude: 72, time: 6)\n",
            "Coordinates:\n",
    -       "  * depth      (depth) float32 200B 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n",
    -       "  * latitude   (latitude) float32 148B 43.0 43.03 43.06 ... 43.94 43.97 44.0\n",
    -       "  * longitude  (longitude) float32 292B -5.0 -4.972 -4.944 ... -3.028 -3.0\n",
    -       "  * time       (time) datetime64[ns] 48B 2024-10-17 2024-10-18 ... 2024-10-22\n",
    +       "  * depth      (depth) float32 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n",
    +       "  * latitude   (latitude) float64 43.03 43.05 43.08 43.11 ... 43.94 43.97 44.0\n",
    +       "  * longitude  (longitude) float64 -4.999 -4.971 -4.944 ... -3.082 -3.055 -3.027\n",
    +       "  * time       (time) datetime64[ns] 2024-12-15 2024-12-16 ... 2024-12-20\n",
            "Data variables:\n",
    -       "    chl        (time, depth, latitude, longitude) float64 6MB ...\n",
    -       "    o2         (time, depth, latitude, longitude) float64 6MB ...\n",
    +       "    chl        (time, depth, latitude, longitude) float32 dask.array<chunksize=(6, 2, 36, 5), meta=np.ndarray>\n",
    +       "    o2         (time, depth, latitude, longitude) float32 dask.array<chunksize=(6, 2, 36, 5), meta=np.ndarray>\n",
            "Attributes:\n",
    -       "    institution:  Nologin (Spain)\n",
    -       "    contact:      mailto: servicedesk.cmems@mercator-ocean.eu\n",
    -       "    Conventions:  CF-1.0\n",
            "    title:        Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n",
    +       "    comment:      \n",
            "    references:   http://marine.copernicus.eu/\n",
    -       "    source:       NEMO3.6-PISCES3.6
  • latitude
    (latitude)
    float64
    43.03 43.05 43.08 ... 43.97 44.0
    axis :
    Y
    unit_long :
    Degrees North
    long_name :
    Latitude
    units :
    degrees_north
    standard_name :
    latitude
    array([43.026986, 43.054764, 43.082543, 43.110322, 43.1381  , 43.165879,\n",
    +       "       43.193657, 43.221436, 43.249215, 43.276993, 43.304772, 43.332551,\n",
    +       "       43.360329, 43.388108, 43.415886, 43.443665, 43.471444, 43.499222,\n",
    +       "       43.527001, 43.55478 , 43.582558, 43.610337, 43.638116, 43.665894,\n",
    +       "       43.693673, 43.721451, 43.74923 , 43.777009, 43.804787, 43.832566,\n",
    +       "       43.860345, 43.888123, 43.915902, 43.94368 , 43.971459, 43.999238])
  • longitude
    (longitude)
    float64
    -4.999 -4.971 ... -3.055 -3.027
    axis :
    X
    unit_long :
    Degrees East
    long_name :
    Longitude
    units :
    degrees_east
    standard_name :
    longitude
    array([-4.999076, -4.971297, -4.943518, -4.91574 , -4.887961, -4.860183,\n",
    +       "       -4.832404, -4.804625, -4.776847, -4.749068, -4.721289, -4.693511,\n",
    +       "       -4.665732, -4.637954, -4.610175, -4.582396, -4.554618, -4.526839,\n",
    +       "       -4.49906 , -4.471282, -4.443503, -4.415724, -4.387946, -4.360167,\n",
    +       "       -4.332389, -4.30461 , -4.276831, -4.249053, -4.221274, -4.193495,\n",
    +       "       -4.165717, -4.137938, -4.11016 , -4.082381, -4.054602, -4.026824,\n",
    +       "       -3.999045, -3.971266, -3.943488, -3.915709, -3.88793 , -3.860152,\n",
    +       "       -3.832373, -3.804595, -3.776816, -3.749037, -3.721259, -3.69348 ,\n",
    +       "       -3.665701, -3.637923, -3.610144, -3.582366, -3.554587, -3.526808,\n",
    +       "       -3.49903 , -3.471251, -3.443472, -3.415694, -3.387915, -3.360137,\n",
    +       "       -3.332358, -3.304579, -3.276801, -3.249022, -3.221243, -3.193465,\n",
    +       "       -3.165686, -3.137907, -3.110129, -3.08235 , -3.054572, -3.026793])
  • time
    (time)
    datetime64[ns]
    2024-12-15 ... 2024-12-20
    axis :
    T
    unit_long :
    Hours Since 1950-01-01
    long_name :
    Time
    standard_name :
    time
    array(['2024-12-15T00:00:00.000000000', '2024-12-16T00:00:00.000000000',\n",
    +       "       '2024-12-17T00:00:00.000000000', '2024-12-18T00:00:00.000000000',\n",
    +       "       '2024-12-19T00:00:00.000000000', '2024-12-20T00:00:00.000000000'],\n",
    +       "      dtype='datetime64[ns]')
    • chl
      (time, depth, latitude, longitude)
      float32
      dask.array<chunksize=(6, 2, 36, 5), meta=np.ndarray>
      unit_long :
      milligrams of chlorophyll per cubic meter
      long_name :
      Mass Concentration of Chlorophyll in Sea Water
      valid_min :
      0
      units :
      mg.m-3
      standard_name :
      mass_concentration_of_chlorophyll_a_in_sea_water
      valid_max :
      20000
      \n", + " \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      Array Chunk
      Bytes 2.97 MiB 113.06 kiB
      Shape (6, 50, 36, 72) (6, 2, 36, 67)
      Dask graph 50 chunks in 6 graph layers
      Data type float32 numpy.ndarray
      \n", + "
      \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " 6\n", + " 1\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " 72\n", + " 36\n", + " 50\n", + "\n", + "
    • o2
      (time, depth, latitude, longitude)
      float32
      dask.array<chunksize=(6, 2, 36, 5), meta=np.ndarray>
      unit_long :
      millimoles of Oxygen per cubic meter
      long_name :
      Mole Concentration of Dissolved Oxygen in Sea Water
      valid_min :
      0
      units :
      mmol.m-3
      standard_name :
      mole_concentration_of_dissolved_molecular_oxygen_in_sea_water
      valid_max :
      3200
      \n", + " \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      Array Chunk
      Bytes 2.97 MiB 113.06 kiB
      Shape (6, 50, 36, 72) (6, 2, 36, 67)
      Dask graph 50 chunks in 6 graph layers
      Data type float32 numpy.ndarray
      \n", + "
      \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " 6\n", + " 1\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " 72\n", + " 36\n", + " 50\n", + "\n", + "
    • depth
      PandasIndex
      PandasIndex(Index([0.4940253794193268, 1.5413753986358643, 2.6456685066223145,\n",
      +       "       3.8194947242736816,  5.078223705291748,  6.440614223480225,\n",
      +       "         7.92956018447876,  9.572997093200684,  11.40500259399414,\n",
      +       "       13.467138290405273, 15.810072898864746, 18.495559692382812,\n",
      +       "        21.59881591796875, 25.211408615112305,  29.44472885131836,\n",
      +       "        34.43415451049805, 40.344051361083984, 47.373687744140625,\n",
      +       "        55.76428985595703,   65.8072738647461,  77.85385131835938,\n",
      +       "         92.3260726928711, 109.72927856445312, 130.66598510742188,\n",
      +       "       155.85072326660156,  186.1255645751953,  222.4751739501953,\n",
      +       "        266.0402526855469,    318.12744140625,  380.2130126953125,\n",
      +       "         453.937744140625,  541.0889282226562,  643.5668334960938,\n",
      +       "        763.3330688476562,  902.3392944335938,  1062.439697265625,\n",
      +       "       1245.2911376953125,    1452.2509765625,  1684.284423828125,\n",
      +       "       1941.8934326171875,  2225.077880859375,  2533.336181640625,\n",
      +       "         2865.70263671875,       3220.8203125,  3597.031982421875,\n",
      +       "         3992.48388671875,   4405.22412109375,   4833.29052734375,\n",
      +       "          5274.7841796875,   5727.91650390625],\n",
      +       "      dtype='float32', name='depth'))
    • latitude
      PandasIndex
      PandasIndex(Index([       43.02698567,         43.0547643,        43.08254293,\n",
      +       "       43.110321559999996, 43.138100189999996, 43.165878819999996,\n",
      +       "       43.193657449999996,        43.22143608,        43.24921471,\n",
      +       "              43.27699334,        43.30477197,         43.3325506,\n",
      +       "              43.36032923,        43.38810786,        43.41588649,\n",
      +       "              43.44366512,        43.47144375,        43.49922238,\n",
      +       "              43.52700101,        43.55477964,        43.58255827,\n",
      +       "               43.6103369,        43.63811553,        43.66589416,\n",
      +       "              43.69367279,        43.72145142,        43.74923005,\n",
      +       "              43.77700868,        43.80478731,        43.83256594,\n",
      +       "              43.86034457, 43.888123199999995, 43.915901829999996,\n",
      +       "       43.943680459999996, 43.971459089999996, 43.999237719999996],\n",
      +       "      dtype='float64', name='latitude'))
    • longitude
      PandasIndex
      PandasIndex(Index([ -4.999075690000001,         -4.97129706,  -4.943518430000001,\n",
      +       "        -4.915739800000001, -4.8879611700000005,         -4.86018254,\n",
      +       "        -4.832403910000001,  -4.804625280000001,         -4.77684665,\n",
      +       "        -4.749068020000001,  -4.721289390000001,  -4.693510760000001,\n",
      +       "               -4.66573213,  -4.637953500000001,  -4.610174870000001,\n",
      +       "       -4.5823962400000005,  -4.554617610000001,  -4.526838980000001,\n",
      +       "        -4.499060350000001,         -4.47128172,  -4.443503090000001,\n",
      +       "        -4.415724460000001, -4.3879458300000005,  -4.360167200000001,\n",
      +       "        -4.332388570000001,  -4.304609940000001,         -4.27683131,\n",
      +       "        -4.249052680000001,  -4.221274050000001, -4.1934954200000005,\n",
      +       "               -4.16571679,  -4.137938160000001,  -4.110159530000001,\n",
      +       "                -4.0823809,  -4.054602270000001,  -4.026823640000001,\n",
      +       "       -3.9990450100000006, -3.9712663800000008, -3.9434877500000005,\n",
      +       "       -3.9157091200000007,  -3.887930490000001, -3.8601518600000007,\n",
      +       "        -3.832373230000001, -3.8045946000000006,  -3.776815970000001,\n",
      +       "       -3.7490373400000006, -3.7212587100000007, -3.6934800800000005,\n",
      +       "       -3.6657014500000007,  -3.637922820000001, -3.6101441900000006,\n",
      +       "        -3.582365560000001, -3.5545869300000006,  -3.526808300000001,\n",
      +       "       -3.4990296700000005, -3.4712510400000007,  -3.443472410000001,\n",
      +       "       -3.4156937800000007,  -3.387915150000001, -3.3601365200000006,\n",
      +       "        -3.332357890000001, -3.3045792600000006, -3.2768006300000008,\n",
      +       "        -3.249022000000001, -3.2212433700000007,  -3.193464740000001,\n",
      +       "       -3.1656861100000007,  -3.137907480000001, -3.1101288500000006,\n",
      +       "        -3.082350220000001, -3.0545715900000006, -3.0267929600000008],\n",
      +       "      dtype='float64', name='longitude'))
    • time
      PandasIndex
      PandasIndex(DatetimeIndex(['2024-12-15', '2024-12-16', '2024-12-17', '2024-12-18',\n",
      +       "               '2024-12-19', '2024-12-20'],\n",
      +       "              dtype='datetime64[ns]', name='time', freq=None))
  • title :
    Biogeochemical 3D daily mean fields for the Iberia-Biscay-Ireland (IBI) region
    comment :
    references :
    http://marine.copernicus.eu/
    institution :
    NOW Systems (Spain)
    contact :
    https://marine.copernicus.eu/contact
    source :
    NEMO3.6-PISCES3.6
    Conventions :
    CF-1.8
  • " ], "text/plain": [ - " Size: 13MB\n", - "Dimensions: (depth: 50, latitude: 37, longitude: 73, time: 6)\n", + "\n", + "Dimensions: (depth: 50, latitude: 36, longitude: 72, time: 6)\n", "Coordinates:\n", - " * depth (depth) float32 200B 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n", - " * latitude (latitude) float32 148B 43.0 43.03 43.06 ... 43.94 43.97 44.0\n", - " * longitude (longitude) float32 292B -5.0 -4.972 -4.944 ... -3.028 -3.0\n", - " * time (time) datetime64[ns] 48B 2024-10-17 2024-10-18 ... 2024-10-22\n", + " * depth (depth) float32 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n", + " * latitude (latitude) float64 43.03 43.05 43.08 43.11 ... 43.94 43.97 44.0\n", + " * longitude (longitude) float64 -4.999 -4.971 -4.944 ... -3.082 -3.055 -3.027\n", + " * time (time) datetime64[ns] 2024-12-15 2024-12-16 ... 2024-12-20\n", "Data variables:\n", - " chl (time, depth, latitude, longitude) float64 6MB ...\n", - " o2 (time, depth, latitude, longitude) float64 6MB ...\n", + " chl (time, depth, latitude, longitude) float32 dask.array\n", + " o2 (time, depth, latitude, longitude) float32 dask.array\n", "Attributes:\n", - " institution: Nologin (Spain)\n", - " contact: mailto: servicedesk.cmems@mercator-ocean.eu\n", - " Conventions: CF-1.0\n", " title: Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n", + " comment: \n", " references: http://marine.copernicus.eu/\n", - " source: NEMO3.6-PISCES3.6" + " institution: NOW Systems (Spain)\n", + " contact: https://marine.copernicus.eu/contact\n", + " source: NEMO3.6-PISCES3.6\n", + " Conventions: CF-1.8" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -1623,19 +4165,19 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array(['2024-10-17T00:00:00.000000000', '2024-10-18T00:00:00.000000000',\n", - " '2024-10-19T00:00:00.000000000', '2024-10-20T00:00:00.000000000',\n", - " '2024-10-21T00:00:00.000000000', '2024-10-22T00:00:00.000000000'],\n", + "array(['2024-12-15T00:00:00.000000000', '2024-12-16T00:00:00.000000000',\n", + " '2024-12-17T00:00:00.000000000', '2024-12-18T00:00:00.000000000',\n", + " '2024-12-19T00:00:00.000000000', '2024-12-20T00:00:00.000000000'],\n", " dtype='datetime64[ns]')" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1655,12 +4197,12 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA74AAALUCAYAAAAsZu6JAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD3eElEQVR4nOzdeXjUxP8H8He6vU8oFEoRSjkLcosgiBxyg4iAoNgfIHh/UUFEEZVLwSKiAqKAqICIFg/AC9EKlENuCoqggFBohXIJtLSl1+78/iibndDNHm2Xttv363nyNE0mk0k2k+xsks8oQggBIiIiIiIiIjflUdoFICIiIiIiInIlNnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIKpCTJ09CURQoioJly5aVdnFKVUJCgrovEhISSrs4AKCWZ9q0aaVdFKKb5tq1a5g+fTpatGiBgIAAtR6MGzeutItGRG7Es7QLQERlx8mTJxEVFVXsfIQQJVAaIiJyd3l5eejevTu2b99e2kUhIjfHO75EREQuVKdOHSiKgocffri0i1LucN+5v6+++kpt9D788MPYtGkTDh48iIMHD+Kll14q5dIRkTvhHV8iUtWsWRMHDx7Und+sWTMAQJs2bbB06dKbVSyiCoNPS1BF8+uvvwIAwsPD8dFHH8FgMJRyiYjIXbHhS0QqLy8vNG3a1G66gIAAh9IRERHZcvr0aQBA3bp12eglIpfio85EREREVCpycnIAFPzwSkTkSmz4ElGJSkxMxJNPPolGjRohMDAQAQEBaNSoEZ566ikcPXpUd7lly5apkTxPnjyJ3NxcvPPOO2jTpg1CQkIQGhqKLl264Mcff9Qsd/XqVcyePRutWrVCcHAwKlWqhB49emDDhg2667oxmq/JZMKSJUvQoUMHhIaGIiAgAC1atEBsbCyys7PtbnNGRgZmzZqF9u3bIzQ0FD4+Prjllltw//3344cffrC5bJcuXaAoCrp06QIAOHbsGJ5++mk0aNAA/v7+6v4wS01NxQcffID7778fDRo0QEBAAHx8fFCzZk0MGDAAq1atgslkslvmkrJ27VoMGTIEtWvXhq+vLypVqoQ2bdpg+vTpuHz5cqH0p06dgoeHBxRFwSuvvGI3/y+++EL9rNatW2c1zffff4/7778ft9xyC3x8fFClShW0b98es2bNQkZGRpG37cbPRs+0adPUMlpb/tSpUwCA5cuXq+nMw415OxLV2WQy4bPPPkPfvn0RHh4Ob29vhIWFoWvXrvjggw+Qm5vrcFmzs7Px1ltvoXXr1ggKCkJQUBDatm2LBQsWID8/3+Z225OZmYlVq1bh0UcfRcuWLRESEgIvLy+EhYWhc+fOmDNnju7nU5R954js7GzMnz8fXbp0QVhYGLy8vBAaGopGjRqhT58+eOeddzT17UZGoxHLly/HPffcg4iICPV469ixI9555x1cu3ZNd1mTyYSNGzdiwoQJuPPOO1G1alV4eXmhUqVKaNmyJSZMmIDk5GSnt8majRs3YtiwYYiKioKfnx/8/f0RGRmJO+64AxMmTMDGjRsLLaN3HN/IXjR0R89p5jw2b94MANi8ebPm861Tp44m3z///BMzZsxAr1691LoeGBiIBg0aYOTIkdi5c6fD++e3337Do48+ikaNGiE4OBje3t645ZZbcM899+D999/HlStXdJf9559/8Nxzz6FZs2YICQmBn58f6tati4cffhh79+51uAxEVAoEEZGDAAgAonPnzoXmGY1G8dxzzwlFUdR0Nw6enp5i8eLFVvNeunSpmu73338X7dq1083nnXfeEUIIcerUKXHrrbdaTaMoivjss8+srmvTpk1qup9//ln07t1bd11NmjQRqampuvskMTFRRERE6C4PQAwaNEhcu3bN6vKdO3dW9+natWtFQEBAoeWTkpKEEELk5+cLDw8Pm+sCIHr06CGuXr1qdX1JSUlquqVLl+pulz2XLl0Sd999t81yVKtWTezYsaPQsh07dhQARFRUlN319OvXTwAQYWFhIi8vTzPv2rVrYuDAgTbLEBERIfbv3281b/k42LRpU6H58mdjy9SpU9V8rC1va7gxb/P0qVOnWl3Xf//9J+68806beTZu3FicPHnSblnPnj0rWrZsqZtP//79hdFotLnttjiy/VFRUeKvv/4q0rL2PpcbnTlzRjRp0sRuvs8//7zV5U+dOiVatGhhc9n69euLI0eOWF1e3vd6g7+/v1i9erVT23WjcePG2V1PlSpVbJbPFmfqja1zmr0yRkZGWl2nreGll16yWfasrCwxbNgwu/no1b+33npLeHl56S6nKIqYPHmyzTIQUenhO75EVCKeeeYZfPDBBwCATp064eGHH0bdunXh7++P33//HXPnzsWhQ4fwxBNPIDw8HPfee69uXo8//jj27duH//3vfxg4cCAqV66MAwcOYMqUKThz5gwmTJiAHj164OGHH8aJEyfw0ksvoXfv3ggICMBvv/2GqVOnIi0tDU899RR69OiBatWq6a7r1VdfxZ49e9CzZ0889dRTqFWrFlJSUvDBBx8gPj4ehw8fRv/+/bFz585C75+dPn0a3bp1w+XLl9XIsw8++CCqVKmCw4cP4+2338bvv/+O1atX4+GHH0ZcXJxuOZKTk/F///d/8Pf3x+TJk3HXXXfBYDBgz549CAwMBAA18NHdd9+NPn36oFmzZggLC8PVq1dx4sQJLFmyBDt27EB8fDzGjBmD5cuXO/z5OSMnJwfdu3dHYmIiDAYDHnroIfTt2xdRUVHIy8vDli1b8M477+D8+fPo27cv9u/fj8jISHX5mJgYbNu2DUlJSdi+fTs6dOhgdT3//fcffvnlFwDA0KFD4empvWSNHDkSa9asAQC0aNECzz//PBo3boxLly4hLi4Oy5Ytw5kzZ9CtWzf88ccfqFmzpkv2h56lS5ciMzMTvXr1wpkzZzBgwADMmDFDkyYgIMDh/IxGI+655x7s2LEDANC5c2c8/fTTiIqKwpkzZ/DJJ59g7dq1+Ouvv9CtWzccOHBAPXasGTRoEA4fPoxnn30W/fv3R2hoKI4cOYLXX38df/31F77//nssWbIETzzxRJG2Pz8/H82aNcO9996LNm3aICIiAkIInDp1CmvWrMGXX36JpKQk3HfffThw4AB8fX3VZUt63wEF56jDhw8DAP7v//4PgwYNQkREBAwGA1JTU7F37158++23Vpf977//0LFjR6SkpMDHxwePPfYYOnfujDp16iAjIwO//PIL5s2bh3/++Qd9+vRBYmIiQkJCCu2PGjVqYODAgWjfvj3q1q0LX19fpKSkYPv27fjggw+QkZGBhx56CImJiWjcuLFT2wcAP/zwA+bOnQsAaN68OZ566ik0btwYISEhuHLlCg4dOoRff/0Vu3fvdjpvZ9k6pwUEBKiBFEeNGoW9e/cWCpro7e2tjufn5yMgIAD9+vXD3XffjejoaAQHB+P8+fM4dOgQ5s+fj1OnTmHWrFlo2LAhRo0aVag8JpMJAwYMQHx8PACgQYMG+N///oc2bdrA398fqamp2L59O7788kur2/PWW2/hxRdfBGDZtw0aNEClSpVw5MgRLFiwADt27MDrr7+OqlWr4tlnny2xfUlEJaS0W95EVH5A507LL7/8os776KOPrC577do19Q5hZGRkobt38h1fRVHEmjVrCuXx+++/q3c8w8LChI+Pj9i5c2ehdD/++KOal/nusOzGuwePP/641TI/8sgjapr333+/0Pz777/f5nZnZ2eLrl27qmnWrVtXKI18ZysiIkKcOnXKalmEEMJkMoljx47pzhdCiClTpqj78OjRo4Xml8Qd35dfflkAEJUqVRJ79+61mubkyZOiRo0aAoB46KGHNPMuXryo3jUZM2aM7noWLlyolnX79u2aeT/88IM6r1u3biInJ6fQ8h9++KGaZujQoYXmu/qOr1lkZKQAIEaOHGkzHyFs3/FdsGCBOn/EiBHCZDIVSmP+bACIF1980WZZvby8rG73f//9J6pXry4AiObNm9stsx5rx58sPj5erc965w1n9p0t165dU485vTu6Zv/991+haQ899JB67jpx4oTV5RITE9W7my+//HKh+UlJSSI3N1d3vSkpKaJmzZoCgPi///s/O1tk3fDhw9Vy6j31IYT1bSzpO76OnNPk9Lbq2YULF8Tly5d15+fk5IgePXqo256fn18ozbx589RyDRw4UGRnZ1vNy2g0in///Vcz7dChQ+rxM3XqVKt1z2g0iv/7v/8TAERgYKC4dOmSbnmJqHSw4UtEDtNr+JobtIMHD7a5/OHDh9U8fvnlF808ueH7wAMP6ObRqVMnNd3EiRN105m/MA8cOLDQPPmLW/Xq1UVmZqbVPK5evSrCwsIEAHHrrbdq5p0+fVoYDAYBQPTu3Vu3HElJScLT01MAEH379i00X/6S+Omnn+rm46j8/HxRtWpVAUDMmTPHanmK0/C9evWqCAkJEQDEe++9ZzPtBx98oDawMjIyNPP69++v/oBx448gZuZHouvWrVtoXp8+fdS8k5OTdcvQvXt3ARQ8Zn/mzBnNvPLW8G3cuLG6z9LT060un5eXJ6KjowUAUbly5UJf7uWyjh8/XrccL730kvoDypUrV+yWu6juu+8+AUDcc889VueXVMP39OnT6nZ/++23Ti2blJSk1vXvv//eZtoXX3xRbfAVxdy5cwUA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ivr16yMoKAheXl6oXr06evbsiUWLFuHAgQOFHgE2Cw8Px5YtW/DDDz8gJiZGDbLm5eWFsLAwdOjQAc8//zw2b95s9b3/UaNGYevWrbjvvvsQFhamHku9e/fGqlWrEBcXV+wugDZt2oR58+Zh8ODBaNasGcLCwuDp6Yng4GC0atUKEyZMwOHDh/Hwww9bXb569erYtWsXJk6ciAYNGsDHxwehoaHo1KkTPvvsM3zxxRcl2k2Ro1q2bIkDBw7gySefRGRkJLy8vBAaGoq2bdtizpw52L17t0OvMvj7++Orr77Cxo0bMXz4cERFRcHPzw/e3t6oVasW+vfvj8WLF+u+/vLYY4/hxIkTmD59Ou68805UrVoVnp6eCAgIQMOGDTF48GAsWrQIp0+fRv369Ut6NxBRMSlCuKCjRyKiMiwhIQFdu3YFUPBF0dmgR0RERERUvvCOLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjVGciIiIiIiJya7zjS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPi6oYSEBCiKgitXrpR2UYjIhVjXiSoG1nUiouJjw7ec69KlC8aNG6eZ1qFDB6SmpiIkJKR0ClVEly5dwjPPPINGjRrBz88PtWvXxrPPPou0tDRNuuTkZPTr1w/+/v6oVq0aXnjhBeTn56vzV69ejR49eiAsLAzBwcFo3749fv75Z931zpo1C4qiFNqP1sycORMdOnSAv78/KlWqZDWNvfJZc+jQIQwePBh16tSBoiiYO3duoTTmeTcOY8aMsVtuKv9Y1ytOXTcajZg8eTKioqLg5+eHevXq4fXXX4cQwm65qfxjXa84df3q1asYN24cIiMj4efnhw4dOmDPnj12y0xERcOGrxvy9vZGeHg4FEUp7aI45cyZMzhz5gzmzJmDP//8E8uWLcP69evx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06ZNddOdPXsW1atX10yrXr06zp49q843T9NLUxHxUWciIiIiIqISlJKSguDgYPV/Hx8fu8uMGTMGf/75J7Zt2+bKolVYbPgSEREREVGFUZToy87kDQDBwcGahq89Tz/9NH744Qds2bIFt9xyi8204eHhOHfunGbauXPnEB4ers43T6tRo4YmTcuWLR0uk7spM486z5o1C4qiYNy4ceq0J554AvXq1YOfnx/CwsIwYMAA/P333zbzycjIwNNPP41bbrkFfn5+aNKkCRYtWlRyBdUL5y51d6DpvsXTUx00IfiLGt7fld0kuMBN6zKB9MldE+TnWwa5WwypCyPFx8cy6HTfo+kqRf7MpHXd2K1RmWalyya7pO6ONN2aaLo+sV5fS6M7DpfURb1ujhzo/kgPuyopGZrPT6r3Is8yaLo6k4/V68eybv0vp5TgICghwVACAyyDr486wMvTMujRu9brdP3mUiVU5xzKsySUs+8v7kJzPpfrv/x9wGiyDHrkLv7KazeFZZQQAk8//TTWrFmDjRs3Iioqyu4y7du3x4YNGzTT4uPj0b59ewBAVFQUwsPDNWnS09Oxa9cuNU1FVCbu+O7ZsweLFy9G8+bNNdNvu+02xMTEoHbt2rh06RKmTZuGnj17IikpCQadi8v48eOxceNGfPbZZ6hTpw5++eUX/O9//0NERATuvffem7E5RERERERURhmFB4zCRVGdnbx3M2bMGHz++ef49ttvERQUpL6DGxISAj8/PwDAiBEjULNmTfU94bFjx6Jz5854++230a9fP8TFxWHv3r348MMPAUC9mThjxgw0aNAAUVFRmDx5MiIiInDfffeV2LaWN6X+U01GRgZiYmKwZMkSVK5cWTPv8ccfR6dOnVCnTh20bt0aM2bMQEpKCk6ePKmb3/bt2zFy5Eh06dIFderUweOPP44WLVpg9+7dLt4SIiIiIiIixy1cuBBpaWno0qULatSooQ6rVq1S0yQnJyM1NVX9v0OHDvj888/x4YcfokWLFvj666+xdu1aTUCsF198Ec888wwef/xx3H777cjIyMD69evh6+t7U7evLCn1O75jxoxBv3790L17d8yYMUM3XWZmJpYuXYqoqCjUqlVLN12HDh3w3XffYfTo0YiIiEBCQgKOHj2Kd999V3eZnJwcTYjx9PT0om0MEZVprOtE7o/1nIjsMUGByUX3/0xw7pavEPbTJyQkFJo2ZMgQDBkyRHcZRVHw2muv4bXXXnOqPO6sVO/4xsXFITEx0WZ47w8++ACBgYEIDAzETz/9hPj4eHh7e+umf++999CkSRPccsst8Pb2Ru/evfH+++/rdgANALGxsZpw47Ya1kRUfrGuE7k/1nMiIrKm1Bq+KSkpGDt2LFauXGnzlntMTAz279+PzZs3o2HDhhg6dCiys7N107/33nvYuXMnvvvuO+zbtw9vv/02xowZg19//VV3mUmTJiEtLU0dUlJSirVtRFQ2sa4TuT/WcyKyxxzV2VUDlU2l9qjzvn37cP78ebRu3VqdZjQasWXLFixYsAA5OTkwGAzqL7YNGjTAHXfcgcqVK2PNmjUYNmxYoTyvXbuGl19+GWvWrEG/fv0AAM2bN8eBAwcwZ84cdO/e3WpZfHx8HOpby2Gelt2qGI2W6XL0O3O02/x8dZKQ0zpCjoyoE3VRjozKSMkVh+azliMrS8ebki8db9IxC28vSxqpXsjHssjNlVdmGZeP4esB6MyRnUVJRQYtBr26rgT4Q/HwAa5ZflSTy2seV6Q6J48LOdietA8UOTqsvP/kz8fF+6Uk6r0jebgiCrO1PHkec55mn0l1V3N8ytcnz+vHs3wukI9f6TFia3W+tOnV8/yIKoCnLwxZ0j7ItNR5JVvaLvkcJ+0/zXlMUayOa6+79q/TLuXAOh2r3w6U3V605jJwDajw5OuafIzLx6+c3qBzzTN/Z+BnSuVMqTV8u3XrhoMHD2qmjRo1CtHR0Zg4caLVqM1CCAghNO/uyPLy8pCXlwePG8KrGwwGmMpLtypEREREROQyro3qzB9oy6pSa/gGBQVpIo8BQEBAAKpUqYKmTZvixIkTWLVqFXr27ImwsDD8+++/mDVrFvz8/NC3b191mejoaMTGxmLgwIEIDg5G586d8cILL8DPzw+RkZHYvHkzPv30U7zzzjs3exOJiIiIiIioDCj1qM56fH19sXXrVsydOxeXL19G9erV0alTJ2zfvh3VqlVT0x05cgRpaWnq/3FxcZg0aRJiYmJw6dIlREZGYubMmXjyySdLYzOIiIiIiKgMKYjq7Jp3cV2VLxVfmWr4yqG6IyIisG7dOrvL3BgCPDw8HEuXLi3pohEREREREVE5VaYavkRERERERK5kggeMZaQfX7p52PB1NS/ru1gxR1GUA3FJEfZ0o77qRdDTi6bIiHtuTRP1Vo447EiEXTngm/zkhJclkiv8LF2NaSKUyxFedcbNkVDVyLFlONiDKawSTAYfeKRlqdOUrGuWBLl5tjOQ9rciB+aTtlnIUTPlfaEX7VlWDuoxoy2XYcJ6ZHeRJ0V597RyrZKuT7oRyuX05ull9HjNDvOBp5cPPLMs5zjPDG913HDVUueVTOsRnpUc6Tot1XX5jCvvE0Xe36abf50uqXqpl4/mWlMC2yGvR+86xnNN0Wn3nXS9lo5TOTq75jOQIzyb/5rKRiR3Ikex4UtERERERBUGozpXTK75xImIiIiIiIjKCN7xJSIiIiKiCsMED5j4jm+Fwzu+RERERERE5NZ4x5eIiIiIiCoMo1BgFK7pb9dV+VLxseFri6JoorUWIkfHk6O6yhGW9Za/HghPyMvJ8+WomVLkTd2oifJ0ef2aSL/2Iy4yWmLZZTXCpV4kZylCqxxlWNGL/i1HY5YjjftYIp4qesEacizRT4UU/dR8TJqPXyGMKKuu1fCHp5cvfLwt+83zinR6vJpZ8FeOvG7U2R6D9SiXmqjYDkR71tT7YkRtNx8XrNsE3HAcyPVVvhb5Xo/mLp8LvKVzgXTM4lq2JW91pGzWdaO3BxQvDwiDpfxGP8s2egZI9f+qjzrucdVyjpOjvcvjmkjO0rhmum40d2k/l9GI2HpceV7hOcu1dM8FOhRvqccHc4RnvWsTURnFhi8REREREVUYRhf242vkO75lFn+qISIiIiIiIrfGO75ERERERFRhmIQHTC7qx9fEfnzLLN7xJSIiIiIiIrfGO75ERERERFRh8B3fiol3fImIiIiIiMit8Y6vDYriUdD9i50uiawsKKUxWJ9unuQlhYeXuqBBvqUrE8XTMi6k6druEKRfl4rRHYLVLnNuzJ+KTG//6nUJoElvrZscuSsceb7chZGXdFzJx5h8PBqlY8YgjcvL+vlKi0rL6h0z5u4RzMdjGe6mIzfYAKO3AYrJ0oWJvF0Gr4L9qaRnqtMUuRsXub7qdGek182RpispeVzex1L+mrqoON4NinwssT4TAE23WpC7zzLkFfyVujCCp/VrmeZ4v961mWLyACw9/ZQZnjkmeJpMkLvYlLsUzAuwbIvRy3K+8/KxnAcNGZZxD+n6renaKNtybtCcHeX9Le83nXOAWk9L6JrOek96HOraSO7yzLP8Nx9McF1/u2X32w7xji8RERERERG5tfL/kw0REREREZGDTPCAyUX3/1yVLxUfPxkiIiIiIiJya7zjS0REREREFYZReMDoon58XZUvFR8/GSIiIiIiInJrvONri4dSOGKtExGbC/KQflswSOPmaKzCegRdJV+K8uhriban5OWp40KK/qjkWp8u5EidMiejRLo0MqQjZdGJeuws83Y4sg3ORrh2JGKzbhopQqIiHzPycXX9+NBEUdWL0qw3bu0YvJG8fXK0Zzmqa6C/JRtvKbKpVB5xPcqpKTvn+pSy+zubyQAoBiA3UCqj0bJdXtcnGzwt8z3Spc9MiugKqS5qzh865w7FKK9T2sdyvcjTiQArR4nVi/JuLT83oVuf9BcomRUXcV/ezKi6mn3jyDlIOpbM1xD5eqM5fuXzjlz/r48rphzgchEK7WJe6Xnw9DRotkV4WsZNUv2Wb9jkBVq21+hjqYuefpao14Y06XyQJi2ck6OOytdm+Tyr6H2vMKe3V7cLZlifXo45Xb/1Myp+HqW0f0sjErduhGf5+PUp6AFBCJ0I0OWACQpMcFVUZ9fkS8VXdr+JEhEREREREZUA3vElIiIiIqIKg+/4Vkz8ZIiIiIiIiMit8Y4vERERERFVGEZ4wOii+3+uypeKj58MERERERERuTXe8bXF0xPw8NRGspM5G0VXjtaoptX5COSomXLkVm9LFEklX4rY7GuyOl3IaXQiP+tGjNSJYlhikRZVVvZLwYqKvn5r+xpQPxtF3qd6Ebl1yKk1EZitrKdQWXTKrhupWZ5ujp4qRf8WeuuX8xZORoXUSy9HfZXX6yMdk3Jkcj9fAIDhesRjYcoFLjpXlJvFI78gALvJy/L55AUVPoaE9PkZpM/GIG03rmZaxuWouHrkz1sO0i1/DnIUaFPh6LsANPVYXlaYrtdjaZqic05zpP6XGEcirZrL4Mi5wIEo+7oR04tDp76o+11evyNRuHX2u5zGoXOgXiRn+Viyt8/k8srbI5dRvoZ5XT9HGctmhGGvtBx4GgBhkKI6S/tASFGdTd5ShGcvy7hRGs8NsUS09vAPtqwn0FcdN6RZIr4r8rlBipYr9K4Lpuv7Vr6Oaz4H68eTTHPcGDQzrKYvEQ7Ubae/R+gcqw5dg53N3xq974EyJ84FhdLrfs8sWhTvkooGLecjTJbj0HwdMgkHrnFllEkoMAkXRXV2Ub5UfLzjS0RERERERG6Nd3yJiIiIiKjCMLnwHV8T7yuWWfxkiIiIiIiIyK3xji8REREREVUYJuEBk4v623VVvlR8/GSIiIiIiIjIrfGOLxERERERVRhGKDDCNdGXXZUvFR8bvrYoiu2Q+HrdvjgSRt+cRq/rI0fI6TVh8aUuZeRuJfykbg3k8PoOdHMEO92jaDjbPZCzXYzodA+kyF0oyF0l6HUtZG+d8nRnuz/SSy+Pa7qxkbrU8JG6K/K2jJt8CrrOkLvW0OsGQ9N1jdQdgUee9LkbdY4HTbc3Ot0t6PXOIJUX18fN3RrBmFNmuzOCUjCYpMND+Mr79voMTTco0ucgdYNi8JK6i0mXuy/R6fZB7/iQycet/PnIx5nc5Ymc/fVzgHCg+xL5WHGo+w6Zs91m6RbCyj5wtkswvTpfUl0YyXS2W12TznlUk4Wmbul8BtbOwTby1BZGp/sX6RykWNvHnjpfEeTriqHoXcPdbErmNSgeJs0+EHJXZHLdzZfPw9K+kU+hPpZ88v2lLo/8LN0ZeQZaujzyumzp+s0jLcuyrmvZlkzlemz+bDX1XyqAA8eKI5+IXnc7Dl2b7XUDpHeN1kmjLYCT63TkXOpKcl2UPwNNd1Q65wCdz1Vx5Pxhrcs6OUExuk7TYz5nCeHkdYKolLHhS0REREREFQbf8a2YyswnM2vWLCiKgnHjxqnTnnjiCdSrVw9+fn4ICwvDgAED8Pfff9vN66+//sK9996LkJAQBAQE4Pbbb0dycrILS09ERERERERlVZlo+O7ZsweLFy9G8+bNNdNvu+02LF26FH/99Rd+/vlnCCHQs2dPGG08gnf8+HF07NgR0dHRSEhIwB9//IHJkyfD19dXdxkiIiIiIqoYjLC851vyA5VVpf6oc0ZGBmJiYrBkyRLMmDFDM+/xxx9Xx+vUqYMZM2agRYsWOHnyJOrVq2c1v1deeQV9+/bF7Nmz1Wl6ac1ycnKQk5Oj/p+enl6UTSGiMo51ncj9sZ4TkT181LliKvVPZsyYMejXrx+6d+9uM11mZiaWLl2KqKgo1KpVy2oak8mEH3/8EQ0bNkSvXr1QrVo1tGvXDmvXrrWZd2xsLEJCQtRBL38iKt9Y14ncH+s5ERFZU+Q7vlu3bsXixYtx/PhxfP3116hZsyZWrFiBqKgodOzY0aE84uLikJiYiD179uim+eCDD/Diiy8iMzMTjRo1Qnx8PLy9va2mPX/+PDIyMjBr1izMmDEDb775JtavX49BgwZh06ZN6Ny5s9XlJk2ahPHjx6v/p6enF1wo8/IAD0UbcVOiiZgsR1jWicCqiYRpjpYpL6eXnxSdUMjROb0ciDqs6IXflaZ7W6JOarZJL0KhvSiizkaDdYReZFa9cWmboIliWpCPMOhEfPTQ+S1IJ+qlHOFT0dlfQs5Tihpq8rYeNdToI497SOmV6/nJ22y9WJAPB01UZzmSsyWNR67lH498y7giRYGWIz8reZbPWBP52cpxaI70rFePbibdun6dovk8LeOm63Ut31f6LDWRL62fSg1yfc24ZpmRk2sZdyQ6uuZ8oHOMetk+nWvqtp7iRGZ2RVRnqxGedbbfkajung5Egy0p1vaHzvlVs3ahE6k3X6pz8vlIL+qrXmRWRyLem6fL5y69a5zV47R0f1PXq+ciwA/C4KNJKzTll8Yd2AT5HOEhd4ggXZtzgyz10ujtr457+1quUYbL0jU4SzpP5F2PBixFBVbkgsmft3zNc5LiSJTkok53pL6WFEeiQ+ueVwsvqzk2nCyu7nVRPgfI11Sduq73PUyu9+p3D6nOOxslWo7sreidgyTmyM+KMAHWOxQo84zCA0YX3Zl1Vb5UfEX6ZL755hv06tULfn5+2L9/v/pIUVpaGt544w2H8khJScHYsWOxcuVKm+/fxsTEYP/+/di8eTMaNmyIoUOHIjs722pa0/WKO2DAADz33HNo2bIlXnrpJdxzzz1YtGiR7jp8fHwQHBysGYjI/bCuE7k/1nMiIrKmSA3fGTNmYNGiRViyZAm8vCy/Mt55551ITEx0KI99+/bh/PnzaN26NTw9PeHp6YnNmzdj/vz58PT0VANYhYSEoEGDBujUqRO+/vpr/P3331izZo3VPKtWrQpPT080adJEM71x48aM6kxERERERBBQYHLRIBzqQZtKQ5EedT5y5Ag6depUaHpISAiuXLniUB7dunXDwYMHNdNGjRqF6OhoTJw4EQYrj94IISCE0AStkHl7e+P222/HkSNHNNOPHj2KyMhIh8pFRERERERE7qVId3zDw8Pxzz//FJq+bds21K1b16E8goKC0LRpU80QEBCAKlWqoGnTpjhx4gRiY2Oxb98+JCcnY/v27RgyZAj8/PzQt29fNZ/o6GjNHeAXXngBq1atwpIlS/DPP/9gwYIF+P777/G///2vKJtKRERERERuxPyOr6sGZ2zZsgX9+/dHREQEFEWxG5T34YcfhqIohYZbb71VTTNt2rRC86Ojo4uyq9xKkRq+jz32GMaOHYtdu3ZBURScOXMGK1euxIQJE/DUU0+VSMF8fX2xdetW9O3bF/Xr18cDDzyAoKAgbN++HdWqVVPTHTlyBGlpaer/AwcOxKJFizB79mw0a9YMH330Eb755huHA24RERERERHdDJmZmWjRogXef/99h9LPmzcPqamp6pCSkoLQ0FAMGTJEk+7WW2/VpNu2bZsril+uFOlR55deegkmkwndunVDVlYWOnXqBB8fH0yYMAHPPPNMkQuTkJCgjkdERGDdunV2lxFWImeOHj0ao0ePLnI51LxzciAUoRsxWWiiN8vR+eRwuTrRBM0R9PSiZpqsR81U9CISyvTSaCJ+ytN1oknL9CJOW02rEyFSj17EWjkCqzQuR2QWnlJkZClisvCUoiH7yJGUC6abdKI6y1E65WjImijJmv0oTZf2kfCyrN/oJX/GlvXKH7EcqVnRCcZq/gFRTiv/qKgZN+ikkQ9HeZukCJSe2ZZxQ7Zlmwxy5OccS6RHjzzr0Z5h1G6IcEXk3BIilIJBjswq7xNDbsG4R74UIVszbj36tYYcdVU+tvLyilhq3HB+sXM699LZ/45EY9aLGu/qSM7Xzw2ayOjy6UeeLp+bpfqvHZfOBZ5SeqmOao5TBw5ZTX20kl7vnKIZz7c+3SNXityam299XDr21CjAgPPR9a1Fxda7Pun0NIDr+7osRHC35lrNQHh63RBMU/c8L02WP1f58Pe0/dnfmF6O0p8bYjkfeBkC1HHPNMsxqmReD+SZLb3epXd+KYkIzID96/uNnPluIJO/dzibh/zdSzpGhRzZXqcHBc01WKr3Jq/CPT6YvKyP616vNb1fWCbL9Vs+xuRriPy9Qtubgt55Qkpz/RygORfIUZ9zpPOCHDFauvYo8nVI/i6j26tJwXQP4QFctZqkzDMJBSbdilv8vIHCfYj7+PjAx8enUPo+ffqgT58+Dudv7qrNbO3atbh8+TJGjRqlSefp6Ynw8HBniu72inTHV1EUvPLKK7h06RL+/PNP7Ny5ExcuXMDrr79e0uUjIiIiIiIqV2rVqqXpUzw2NtYl6/n444/RvXv3QvGMjh07hoiICNStWxcxMTEM9Iti9OMLFASTujGCMhERERERUVllhAeMLupz3JxvSkqKpjs1a3d7i+vMmTP46aef8Pnnn2umt2vXDsuWLUOjRo2QmpqK6dOn46677sKff/6JoKCgEi9HeeFww3fQoEEOZ7p69eoiFYaIiIiIiKi8uxn9iC9fvhyVKlXCfffdp5kuPzrdvHlztGvXDpGRkfjyyy/xyCOPuLRMZZnDDV/5WXIhBNasWYOQkBC0adMGQEG/vFeuXHGqgUxERERERHQz3Yx3fF1NCIFPPvkEw4cPh7e3t820lSpVQsOGDa32ylORONzwXbp0qTo+ceJEDB06FIsWLVL72zUajfjf//7n8l82iIiIiIiIKrLNmzfjn3/+cegObkZGBo4fP47hw4ffhJKVXUV6uP2TTz7BhAkT1EYvABgMBowfPx6ffPJJiRWOiIiIiIioJJng4dLBGRkZGThw4AAOHDgAAEhKSsKBAwfUYFSTJk3CiBEjCi338ccfo127dmjatGmheRMmTMDmzZtx8uRJbN++HQMHDoTBYMCwYcOc31lupEjBrfLz8/H333+jUaNGmul///03THqh9suh/GZ1AU9feEih4BWpGxdNtyVyGHm5iw9N9xJW9o2HI/1l6HQloseR7gA0ZZH71dHpnsRgZbqmGwgHuiPQ6apI+FkezzD5WLp4kLshMfpZDlW5SwiTt9y9lGU839cybvQu3CWB3MWPSeplRkPudkCK9O8hdXMjd4skpN2YJUWPl6crJp1x6TDxyLWMG6T1el4zz7f+Gcnbb5TiJ8jbp9+nutzVlrT+XEvhPa9Z1uudYRn3ypK6PMqSuzm63t3B9a4ZRL60kWXMtaoKDD4KDFKvIYYcyz4xb7tXprSt0vJy9xMe2dL5IkvKUKcbCU2d06t/8rlGt4sZK93RFIdeF0N6aRyh1yWO3L2YoXC3ZHJ3JHIXMkZfy3STdF6Q67x8LpDHtV2VwOq4fA6Qq4h8PsgLkKbLh7h5WXkXyR+jpussy7hBrv851rsZ85S6GfOU6pwh01IAjxypqxK5+yOjzvnD2mfp6cDnZaUbKVN+2ezO6EpdTxh8PDX7W++cLNN0WSN/hpouzaTpUv4eeXIXNFI23pZ9mxcgHd+Kpbslz+v72UP+bPS6NtI7d+hN1+uWrDhdUZmX1ctD6n5Qs36560KD9a4chb/loiZ/TzBJ3w3yAuVxSz5GH73zgWVVpuuLCqmImu8J0lOk8jVaU+flY0maLB9v0Pk4ZHKeBul6r/0eIpenII1BOtY8cqRrlTx+zfo5wuOalHmudO7IkTbWVLi7JMVUfrszKkv27t2Lrl27qv+PHz8eADBy5EgsW7YMqamphSIyp6Wl4ZtvvsG8efOs5vnvv/9i2LBh+O+//xAWFoaOHTti586dCAsLc92GlANFaviOGjUKjzzyCI4fP462bdsCAHbt2oVZs2YV6kOKiIiIiIiorDAKBUYXvYvrbL5dunSB0PuRCsCyZcsKTQsJCUFWVpbuMnFxcU6VoaIoUsN3zpw5CA8Px9tvv43U1FQAQI0aNfDCCy/g+eefL9ECEhERERERERVHkRq+Hh4eePHFF/Hiiy8iPT0dABjUioiIiIiIyjx3iOpMzitSw1fGBi8RERERERGVZUVq+EZFRUGxEdTkxIkTRS4QERERERGRqwjhAZN+xM9i501lU5EavuPGjdP8n5eXh/3792P9+vV44YUXSqJcZcLpTn4w+PjCcM0yTRNVT468JwVa9JKi33plWKLgeWVK0Tezr0fEkyJsKnKkZZ3Im8WiVw/lyIk6P2goViLPKvnWy6vovKAvR2Y1+UoRF+XIrFLEVuElR1+UImD6y9GL5ejNlnXlS5FW5ajK5siNcuTWnHA5wq4lP00kT3nc27Ldtzc8CWu+6rDQ6nRH1Fk4x1KGfEt5PHILxr0ypDLqBUqWP0Y5OrUcjVIv0qR0nBilqJeaSLl+csRjaTzbQ5pesLPNkSbzpd1c1uRUBgy+N0TUzraMm/e9IUSOcm3ZVq8syzHsnWY5EL2vWMYNVy0nEuWaTpRWKfK1kCKjKnoRmzWRUXUiplqb5kjkdb316ERj1Zw7pGjAQopCLbwKR2wumC5HapejMxeMy5Hc8wIs49mVpcjM0uYb/S3j+dJ4bphUYaS6JR//isn69OCoK+p4RpYlwuw/Q19FUTSY9a46Ll9X5Mi/HnlS3cqUxrPkY8+yT70yLTvB85p07EmRXA1SzwS61xlz9ppIztLnJUV1lj8v0/XPtKwGcBceBYN8/tfubzmx/fzkyODysnJ0XbleyFGg5fXK1zqTt+XzNF3v8UDzPUEuQJ71SLyaqMry9VjqiUEInRDWDtCcj2TmY8SgE6XZ11Jv5N4c5POC/D0ht5IlTU5lKY30PSEvwDJ+rZplVdlhel0oWC+6+VorvOT9ZRk9+b8J1hd0QL0570hFkY8HSxr5euOZCavp5XOc5rp+/TptyJXy9rV+XZbrq0G6hhmkz0DJsVQQxcfyGSiaY+z6zjHJ/RsQlX1FaviOHTvW6vT3338fe/fuLVaBiIiIiIiIXMUIBUa9X0JKIG8qm0r0XnyfPn3wzTfflGSWRERERERERMVS7OBWsq+//hqhoaElmSUREREREVGJMQnXRV82ueBtRSoZRWr4tmrVShPcSgiBs2fP4sKFC/jggw9KrHBERERERERExVWkhu+AAQM0DV8PDw+EhYWhS5cuiI6OLrHCERERERERlSSTC6M6uypfKr4iNXynTZtWwsUom/ZNGlOkforrzpMi+OVZDn6fK5bod77/Ffz1TpeiPmdZno3wyLVMlyNBajjyKIX0FIfJIEd1lSIFykH59LqpkiJDqtGANZGcpaRyFjrrMXnJkVshjUtRmqWohHl+UhopSmueFL05r7IUydLXMn7y4YkoT04+ZTt6ZPPvp6jjWVLk1ryrUhTXTMvO9six7EdDtjQuBRPWRHvWiVyuiSIpBw2VPuN8K1GgzWmNuWU3+uP+Cc7XdTkqr2eWZR94X7Ec276XLadY3yuWiKZe6ZadbMiwfBAeWZYPQpGjPefJ0YilcTliqxzh1Vo9lqOrmuRQttIFWoooCy9L2TURmKWoq/K4XKdNmiitckRR+XxgPTq7HKU1//o5IC/IUqzMW6SyB1q2+eTI8lXPj730nN00dT58Sx33umTZ1z6XLGk0EZY95QjLUl2X9q9HriUfRRPNWor4ez2it3wu10QeltcpTTfXeWNuib5FVWJ2vlG0a/qtEy113UuKuOt91cp18UY6vRwIKWq6kD4I7edZMK5IPR94SPkpcnR2uX7L0Xflui4vK0d+Nuicm/WiuXtJYbF9Ldcdk5/X9b+WaUYfuQcHS3nz/S3TcwMteedUksYrS0WXDqmjL9uvO2XJ8Qnj7aZp8ooU5V06xecFWsZz5UNX/jp3/bou90AiR3j2yrR87t5SrxBy20yOrO/hI33/lM8Xcr02B3U2ls26TqSnSD9JGAwGnD9/vtD0//77Dwa9EygREREREVEpM0Fx6UBlU5EavkLnF8ycnBx4e3tbnUdERERERERUGpx6RmH+/PkAAEVR8NFHHyEw0PIMhtFoxJYtW/iOLxERERERlVlGocDooqjOrsqXis+phu+77xa8gyCEwKJFizSPNXt7e6NOnTpYtGhRyZaQiIiIiIiIqBicavgmJSUBALp27YrVq1ejcuXKdpYgIiIiIiIqOxjVuWIqUji2TZs2lXQ5iIiIiIiIiFzC4Ybv+PHj8frrryMgIADjx9sOzf7OO+/YnO/uToy1H7q+3vV95POf1PWJ1EWFV6ZlumK0HkxMkXopUKSeCRS93o/kVw7kbioc+mHK9vsKchcMcn5yF0ZCGpe7LcqXuirKk8L151a2bKAp2BLfv7x1T1TS/uj/mjr++T/t1PFTuVXU8W0X66vj5zMt7+L/d8UynpMtVf9sqduti9IrDFcsSeRuPAy5crcYluma7hGujxuvZ6fX20d55Uh3NC2ftnRRIXfx4+Vv2VFeWZauQTxyLMe8IdtyzHtkW/aeR65lupIrd3Oks4evd3mi6ZLIx7JOY4D1rkdMPnKXY4W7GAK0XebI9Vvv9SaTXr2Xu+yoZDm2jo8vX92WlLSTj7+gjg/f9ag6fibLcqJM3llLHfc7b/087JVl+cdgkOqudA2RmZeVu9yRu52TP3e5KypzdyvGHPd6v+3Qm/aPww4PvK2Om0qohxdxve6avK33lqF4yhdbywekSAFIhdwNkXydls5HwmD9S4DcRVl+oGWj8qTzV56/lWNB7kZR2hdy94NGqf7/PbVi13MAODzTsg/qzrV8h/aQuiXy+c+SXt5/5npsknqZksflrqjkOi8U6biSu9eSxuXu6JS8wsdhvl53m+WACQpMLnoXl1Gdyy6HT8/79+9H3vV+IhMTE6Ho9fdKREREREREVIY43PCVH29OSEhwRVmIiIiIiIhcSriwv13BO75lVpHevh49ejSuXr1aaHpmZiZGjx5d7EIRERERERERlZQiNXyXL1+Oa9euFZp+7do1fPrpp8UuFBERERERkSuYhOLSgcomp0IwpKenQwgBIQSuXr0KX19fdZ7RaMS6detQrVq1Ei8kERERERERUVE51fCtVKkSFEWBoiho2LBhofmKomD69OklVjh3dtxOZOz6sy3RYBWj5ZcjQ64ljSFbWkBYH/fItz6uiQJtJ7InoI0QaI7eqhdBUJNWyiM/0FIwk59UGF9LAU6OqNgRm531UP1ddtNcOWOJ+hrsYQkFuS/XcjBtymisjn91qpU6fiHF0le39wXL6cI7TTom5eNQkn89gqc5eq8xu+L9Anpggf1opbdOstR1SHXR85olSqshxzLdQ47yLo0qOucA86tGcvRdObpqvr+0eumKoDl3SOcdvfOFPD0vSM5fqvfelnFHot+TxYp2H1mf0dUy2mXDBHX8zOUQdTz3vKXee6VJUdvTLMt6Sg9xma8P8vnbaPmdW/P55oRZLiY+1bIK0mZlAwusF9ddbV/1vN00zcZb6rpcv7yvSufTPMt0Q464nlaqmMJ+FF25lwU5AnN2Zcv0nFBLevn7gM8V63kafaRx6VjQXPvNxZRO9UdfZsRmZ50YZ//cWOeDOeq4X2pBnZbrsxw13yvDeiR3vZ42NA+DmqTjzdeyQE5IwXi+dLyWN+zHt2JyquG7adMmCCFw991345tvvkFoqOXM6e3tjcjISERERJR4IYmIiIiIiIiKyqmGb+fOnQEASUlJqFWrFjw8+IsGERERERGVH658F5fv+JZdRWq5RkZGwsPDA1lZWfj777/xxx9/aIaimDVrFhRFwbhx49RpTzzxBOrVqwc/Pz+EhYVhwIAB+Pvvvx3O88knn4SiKJg7d26RykRERERERETln1N3fM0uXLiAUaNG4aeffrI632g0Wp2uZ8+ePVi8eDGaN2+umX7bbbchJiYGtWvXxqVLlzBt2jT07NkTSUlJMBgMOrkVWLNmDXbu3MlHr4mIiIiISGVyYT++rsqXiq9Id3zHjRuHK1euYNeuXfDz88P69euxfPlyNGjQAN99951TeWVkZCAmJgZLlixB5cqVNfMef/xxdOrUCXXq1EHr1q0xY8YMpKSk4OTJkzbzPH36NJ555hmsXLkSXl5eNtMSERERERGReyvSHd+NGzfi22+/RZs2beDh4YHIyEj06NEDwcHBiI2NRb9+/RzOa8yYMejXrx+6d++OGTNm6KbLzMzE0qVLERUVhVq1aummM5lMGD58OF544QXceuutDpUhJycHOTmWsKnp6ekOl99V/nmRkRCpZFSKSLE6/Xad8fuDa6jjiyI6quM/JFnq09X/LKGAlRzp97NAS6hSxaMgGmTS/00CUFCvQmJfdqboJa4s1vVDsazrVDISus2xn0jy2p/3quO/p9+ijp++WhAR2miy3LXw87aEb72tiuWcUsf3ojo+NvpXANfrOmKdKktJKov1HAAOvsO6TiXj5P8m2E90XYOvLN+tDYcsIf0N16S7ktJlXI7ybbJ0LgCjNH5kSsGxnJ6ejpAvX3G4LGUJ3/GtmIp0xzczM1Ptr7dy5cq4cOECAKBZs2ZITEx0OJ+4uDgkJiYiNlb/AvnBBx8gMDAQgYGB+OmnnxAfHw9vb2/d9G+++SY8PT3x7LPPOlyO2NhYhISEqIOthjURlV+s60Tuj/WciIisKVLDt1GjRjhy5AgAoEWLFli8eDFOnz6NRYsWoUaNGnaWLpCSkoKxY8di5cqV8PX11U0XExOD/fv3Y/PmzWjYsCGGDh2K7GzrHYfu27cP8+bNw7Jly6Aojv/aMmnSJKSlpalDSor1O2REVL6xrhO5P9ZzIrLHfMfXVQOVTUV61Hns2LFITU0FAEydOhW9e/fGZ599Bm9vbyxfvtyhPPbt24fz58+jdevW6jSj0YgtW7ZgwYIFyMnJgcFgUH+xbdCgAe644w5UrlwZa9aswbBhwwrluXXrVpw/fx61a9fW5Pn8889j7ty5uu8G+/j4wMfHx+o8InIfrOtE7o/1nIiIrClSw/f//u//1PHbbrsNp06dwt9//43atWujatWqDuXRrVs3HDx4UDNt1KhRiI6OxsSJE61GbRZCQAiheXdHNnz4cHTv3l0zrVevXhg+fDhGjRrlULmIiIiIiMh98R3fisnhhu/48eMdzvSdd96xmyYoKAhNmzbVTAsICECVKlXQtGlTnDhxAqtWrULPnj0RFhaGf//9F7NmzYKfnx/69u2rLhMdHY3Y2FgMHDgQVapUQZUqVTR5enl5ITw8HI0aNXK4/EREREREROQ+HG747t+/36F0zrxba4uvry+2bt2KuXPn4vLly6hevTo6deqE7du3q4G1AODIkSNIS0srkXUSEREREZF74x3fisnhhu+mTZtcWQ4AQEJCgjoeERGBdevW2V1GCGFzvr0+f4lIq+4tqer4bEsPJxgeavmnWa1/b2aRiMgFpjT9zur0sfsLYmjMa/XFzSwOEbnAsSGvWv4ZYhlt/8tL6viOnrNuYomISk+R3vElIiIiIiIqjwQAE1xzZ9b2LTkqTUXqzoiIiIiIiIiovOAdXyIiIiIiqjD4jm/FxDu+RERERERE5NZ4x5eIiIiIiCoM3vGtmNjwJSKHMJIzUcXAaM5E7o+RnKkiYsOXiIiIiIgqDN7xrZj4ji8RERERERG5Nd7xJSIiIiKiCoN3fCsm3vElIiIiIiIit8Y7vkREREREVGEIoUC46M6sq/Kl4uMdXyIiIiIiInJrbPgSEREREVGFYYLi0sEZW7ZsQf/+/REREQFFUbB27Vqb6RMSEqAoSqHh7NmzmnTvv/8+6tSpA19fX7Rr1w67d+92dje5HTZ8iYiIiIiISkFmZiZatGiB999/36nljhw5gtTUVHWoVq2aOm/VqlUYP348pk6disTERLRo0QK9evXC+fPnS7r45Qrf8SUiIiIiogqjLEV17tOnD/r06eP0eqpVq4ZKlSpZnffOO+/gsccew6hRowAAixYtwo8//ohPPvkEL730ktPrche840tERERERFSC0tPTNUNOTk6J5t+yZUvUqFEDPXr0wG+//aZOz83Nxb59+9C9e3d1moeHB7p3744dO3aUaBnKGzZ8iYiIiIiowjBHdXbVAAC1atVCSEiIOsTGxpZI2WvUqIFFixbhm2++wTfffINatWqhS5cuSExMBABcvHgRRqMR1atX1yxXvXr1Qu8BVzR81JmIiIiIiKgEpaSkIDg4WP3fx8enRPJt1KgRGjVqpP7foUMHHD9+HO+++y5WrFhRIutwV2z4EhERERFRhXEz3vENDg7WNHxdqW3btti2bRsAoGrVqjAYDDh37pwmzblz5xAeHn5TylNW8VFnIiIiIiKicurAgQOoUaMGAMDb2xu33XYbNmzYoM43mUzYsGED2rdvX1pFLBN4x5eIiIiIiCoM+V1cV+TtjIyMDPzzzz/q/0lJSThw4ABCQ0NRu3ZtTJo0CadPn8ann34KAJg7dy6ioqJw6623Ijs7Gx999BE2btyIX375Rc1j/PjxGDlyJNq0aYO2bdti7ty5yMzMVKM8V1Rs+BIREREREZWCvXv3omvXrur/48ePBwCMHDkSy5YtQ2pqKpKTk9X5ubm5eP7553H69Gn4+/ujefPm+PXXXzV5PPDAA7hw4QKmTJmCs2fPomXLlli/fn2hgFcVjSKEEKVdiLImPT0dISEhSEtLu2nP5hO5u7JYr8pimYjKu7JWr8paeYjcRXmsW+Yyt/56PAwBJRNs6kbGzBwk3v9OudovFQXf8SUiIiIiIqJiy8/Px6effloouFZZwIYvERERERFVGAKAEC4aSnvjSpmnpyeefPJJZGdnl3ZRCmHDl4iIiIiIiEpE27ZtceDAgdIuRiEMbkVERERERBWGCQoUuKgfXxflW57873//w/jx45GSkoLbbrsNAQEBmvnNmzcvlXKx4UtEREREREQl4sEHHwQAPPvss+o0RVEghICiKDAajaVSLjZ8iYiIiIiowihL/fi6o6SkpNIuglVs+BIREREREVGJiIyMLO0iWMXgVkREREREVGGYhOLSgYAVK1bgzjvvREREBE6dOgUAmDt3Lr799ttSKxMbvkRERERERBXYoEGDkJ6eDgD49NNPkZOTU+S8Fi5ciPHjx6Nv3764cuWK+k5vpUqVMHfu3JIobpGw4UtERERERBWGy/rwvT6URz/88AMyMzMBAKNGjUJaWlqR83rvvfewZMkSvPLKKzAYDOr0Nm3a4ODBg8Uua1HxHV8iIiIiIqIKLDo6GpMmTULXrl0hhMCXX36J4OBgq2lHjBhhM6+kpCS0atWq0HQfHx+1cV0a2PAlIiIiIqIKg1GdC1u0aBHGjx+PH3/8EYqi4NVXX4WiFN4WRVHsNnyjoqJw4MCBQkGu1q9fj8aNG5douZ1RZh51njVrFhRFwbhx49RpTzzxBOrVqwc/Pz+EhYVhwIAB+Pvvv3XzyMvLw8SJE9GsWTMEBAQgIiICI0aMwJkzZ27CFhAREREREZU/HTp0wM6dO3HhwgUIIXD06FFcvny50HDp0iW7eY0fPx5jxozBqlWrIITA7t27MXPmTEyaNAkvvvjiTdga68rEHd89e/Zg8eLFaN68uWb6bbfdhpiYGNSuXRuXLl3CtGnT0LNnTyQlJWmeFzfLyspCYmIiJk+ejBYtWuDy5csYO3Ys7r33Xuzdu/dmbQ4REREREZVRvONrW1JSEsLCwoq8/KOPPgo/Pz+8+uqryMrKwkMPPYSIiAjMmzcPDz74YAmW1Dml3vDNyMhATEwMlixZghkzZmjmPf744+p4nTp1MGPGDLRo0QInT55EvXr1CuUVEhKC+Ph4zbQFCxagbdu2SE5ORu3ata2WIScnRxO5zBzRjIjcC+s6kftjPSciKp7IyEhcuXIFH3/8Mf766y8AQJMmTfDII48gJCTEoTxiYmIQExODrKwsZGRkoFq1aq4sskNK/VHnMWPGoF+/fujevbvNdJmZmVi6dCmioqJQq1Yth/NPS0uDoiioVKmSbprY2FiEhISogzP5E1H5wbpO5P5Yz4nIHvbja9vevXtRr149vPvuu7h06RIuXbqEd999F/Xq1UNiYqLd5e+++25cuXIFAODv7682etPT03H33Xe7sug2lWrDNy4uDomJiYiNjdVN88EHHyAwMBCBgYH46aefEB8fD29vb4fyz87OxsSJEzFs2DDdqGQAMGnSJKSlpalDSkqK09tCRGUf6zqR+2M9JyIqnueeew733nsvTp48idWrV2P16tVISkrCPffco4nHpCchIQG5ubmFpmdnZ2Pr1q0uKLFjSu1R55SUFIwdOxbx8fHw9fXVTRcTE4MePXogNTUVc+bMwdChQ/Hbb7/ZXAYoCHQ1dOhQCCGwcOFCm2l9fHzg4+NTpO0govKDdZ3I/bGeE5E9ruxvt7z24yvbu3cvlixZAk9PS1PR09MTL774Itq0aaO73B9//KGOHz58GGfPnlX/NxqNWL9+PWrWrOmaQjug1Bq++/btw/nz59G6dWt1mtFoxJYtW7BgwQLk5OTAYDCojyo1aNAAd9xxBypXrow1a9Zg2LBhunmbG72nTp3Cxo0bbd7tJSIiIiIiogLBwcFITk5GdHS0ZnpKSgqCgoJ0l2vZsiUURYGiKFYfafbz88N7771X4uV1VKk1fLt164aDBw9qpo0aNQrR0dGYOHGi1ajNQggIITRBK25kbvQeO3YMmzZtQpUqVUq87EREREREVD4V3PF1VVRnl2R7Uz3wwAN45JFHMGfOHHTo0AEA8Ntvv+GFF16wefMxKSkJQgjUrVsXu3fv1kSG9vb2RrVq1ay28W6WUmv4BgUFoWnTppppAQEBqFKlCpo2bYoTJ05g1apV6NmzJ8LCwvDvv/9i1qxZ8PPzQ9++fdVloqOjERsbi4EDByIvLw/3338/EhMT8cMPP8BoNKq32ENDQx1+N5iIiIiIiKgimjNnDhRFwYgRI5Cfnw8A8PLywlNPPYVZs2bpLhcZGQkAMJlMN6Wczir17oz0+Pr6YuvWrZg7dy4uX76M6tWro1OnTti+fbsmHPaRI0eQlpYGADh9+jS+++47AAW32mWbNm1Cly5dblbxiYiIiIioDGI/vrZ5e3tj3rx5iI2NxfHjxwEA9erVg7+/v1P5HD58GMnJyYUCXd17770lVlZnlKmGb0JCgjoeERGBdevW2V1GSM8T1KlTR/M/EREREREROc/f3x/NmjVzerkTJ05g4MCBOHjwIBRFUdtnilLwo4DRaCzRcjqq1PvxJSIiIiIiulmEi4eKbuzYsYiKisL58+fh7++PQ4cOYcuWLWjTpo3mRufNVqbu+BIREREREVH5tWPHDmzcuBFVq1aFh4cHPDw80LFjR8TGxuLZZ5/F/v37S6VcvONLREREREQVhvkdX1cNFZ3RaFS7PapatSrOnDkDoCD41ZEjR0qtXLzjS0RERERERCWiadOm+P333xEVFYV27dph9uzZ8Pb2xocffoi6deuWWrnY8CUiIiIioorDlS/juslLvseOHcOmTZtw/vz5Qt0TTZkyxeayr776KjIzMwEAr732Gu655x7cddddqFKlClatWuWyMtvDhi8REREREREBAJYsWYKnnnoKVatWRXh4uBqNGSiIzKzX8N20aRPuvPNO9OrVS51Wv359/P3337h06RIqV66syetmY8OXiIiIiIgqDle+i+sG7/jOmDEDM2fOxMSJE51arlu3bvD19cUdd9yBrl27omvXrrjjjjvg6emJ0NBQF5XWcQxuRURERERERACAy5cvY8iQIU4vl5SUhPfffx+1a9fGxx9/jE6dOqFSpUro1asXZs2ahV27dhV6bPpmYsOXiIiIiIgqDCFcO5R3Q4YMwS+//OL0cpGRkRg1ahSWLVuGkydP4p9//sH8+fNRvXp1LFy4EB06dCjVO7981JmIiIiIiCoMV3Y75A7dGdWvXx+TJ0/Gzp070axZM3h5eWnmP/vssw7lU7duXRgMBiiKAkVRsHbtWuTm5rqiyA5hw5eIiIiIiIgAAB9++CECAwOxefNmbN68WTNPURSbDd/k5GQkJCRg06ZNSEhIwMWLF9GhQwfcdddd+OGHH9CuXTtXF18XG75ERERERFRxCMV1Qajc4I5vUlJSkZarW7cuLl++jDvvvBOdOnXCE088gTZt2sDTs2w0OfmOLxERERERERUihIBw8MXla9euAQA8PDzg6ekJLy8vGAwGVxbPKWz4EhERERFRhcHgVvZ9+umnaNasGfz8/ODn54fmzZtjxYoVNpdJTU3Fjh070LdvX+zatQv9+vVD5cqVcc8992DOnDnYs2dPqUZ1Lhv3nYmIiIiIiKjUvfPOO5g8eTKefvpp3HnnnQCAbdu24cknn8TFixfx3HPP6S4bHR2N6OhoPPnkkwCAv/76S33fd8aMGQCAK1euuHwbrGHDl4iIiIiIKg5xfXBV3uXce++9h4ULF2LEiBHqtHvvvRe33norpk2bZrPhKzt37hz++OMP/PHHH/j999+Rnp4OHx8fVxXbLjZ8iYiIiIiICEDBI8sdOnQoNL1Dhw5ITU3VXe78+fNISEhQozofPXoUXl5eaNu2LR588EF07doV7du3d2XRbWLDl4iIiIiIKgz242tb/fr18eWXX+Lll1/WTF+1ahUaNGigu1x4eDi8vLzQpk0bDB48GF27dkWHDh3g5+fn6iI7hA1fIiIiIiIiAgBMnz4dDzzwALZs2aK+4/vbb79hw4YN+PLLL3WX++mnn9CxY0cEBATcrKI6hQ1fIiIiIiKqWNzgXVxXGTx4MHbt2oV3330Xa9euBQA0btwYu3fvRqtWrXSX69Wr100qYdGw4UtERERERESq2267DZ999llpF6NEseFLREREREQVBt/xLSw9PR3BwcHquC3mdOUNG75EREREREQVWOXKlZGamopq1aqhUqVKUJTCDXghBBRFgdFoLIUSFh8bvkREREREVHGwH99CNm7ciNDQUADApk2bSrk0rsGGLxERERERUQXWuXNndTwqKgq1atUqdNdXCIGUlBSH8svMzMTmzZuRnJyM3Nxczbxnn322+AUuAjZ8iYiIiIioAlGuD67Ku3yLiopSH3uWXbp0CVFRUXYfdd6/fz/69u2LrKwsZGZmIjQ0FBcvXoS/vz+qVatWag1fj1JZKxEREREREZU55nd5b5SRkQFfX1+7yz/33HPo378/Ll++DD8/P+zcuROnTp3Cbbfdhjlz5riiyA7hHV8iIiIiIqo4ytA7vlu2bMFbb72Fffv2ITU1FWvWrMF9992nm3716tVYuHAhDhw4gJycHNx6662YNm2apg/dadOmYfr06ZrlGjVqhL///ttmWcaPHw8AUBQFkydPhr+/vzrPaDRi165daNmypd1tOnDgABYvXgwPDw8YDAbk5OSgbt26mD17NkaOHIlBgwbZzcMV2PAlIiIiIiIqBZmZmWjRogVGjx7tUINwy5Yt6NGjB9544w1UqlQJS5cuRf/+/bFr1y60atVKTXfrrbfi119/Vf/39LTf7Nu/fz+Agju+Bw8ehLe3tzrP29sbLVq0wIQJE+zm4+XlBQ+PggeLq1WrhuTkZDRu3BghISEOvyPsCmz4EhERERFRxVGG7vj26dMHffr0cTj93LlzNf+/8cYb+Pbbb/H9999rGr6enp4IDw93qizmaM6jRo3CvHnzitxfb6tWrbBnzx40aNAAnTt3xpQpU3Dx4kWsWLECTZs2LVKeJYHv+BIREREREZWg9PR0zZCTk+OS9ZhMJly9elXtisjs2LFjiIiIQN26dRETE4Pk5GSH81y6dGmRG71AQWO8Ro0aAICZM2eicuXKeOqpp3DhwgV8+OGHRc63uHjHl4iIiIiIKg6hFAyuyhtArVq1NJOnTp2KadOmlfjq5syZg4yMDAwdOlSd1q5dOyxbtgyNGjVCamoqpk+fjrvuugt//vkngoKCHMp37969+PLLL612R7R69Wqby7Zp00Ydr1atGtavX+/EFrkOG75EREREREQlKCUlRXPX1MfHp8TX8fnnn2P69On49ttvNV0PyY9ON2/eHO3atUNkZCS+/PJLPPLII3bzjYuLw4gRI9CrVy/88ssv6NmzJ44ePYpz585h4MCBDpUtPz8fCQkJOH78OB566CEEBQXhzJkzCA4ORmBgoPMbWwLY8CUiIiIiogpDiILBVXkDQHBwcLEeF7YnLi4Ojz76KL766it0797dZtpKlSqhYcOG+OeffxzK+4033sC7776LMWPGICgoCPPmzUNUVBSeeOIJ9RFmW06dOoXevXsjOTkZOTk56NGjB4KCgvDmm28iJycHixYt0l22KBGfFy1aVKjPYWvKzDu+s2bNgqIoGDdunDrtiSeeQL169eDn54ewsDAMGDDAbhhuIQSmTJmCGjVqwM/PD927d8exY8dcXHoiIiIiIiLX++KLLzBq1Ch88cUX6Nevn930GRkZOH78uEONVgA4fvy4mq+3tzcyMzOhKAqee+45h97RHTt2LNq0aaP242s2cOBAbNiwweaya9euhbe3N0JCQhwafvzxR2RkZDi0XWXiju+ePXuwePFiNG/eXDP9tttuQ0xMDGrXro1Lly5h2rRp6NmzJ5KSkmAwGKzmNXv2bMyfPx/Lly9HVFQUJk+ejF69euHw4cMOdbhMRERERERurAxFdc7IyNDciU1KSsKBAwcQGhqK2rVrY9KkSTh9+jQ+/fRTAAWPN48cORLz5s1Du3btcPbsWQCAn58fQkJCAAATJkxA//79ERkZiTNnzmDq1KkwGAwYNmyYQ2WqXLkyrl69CgCoWbMm/vzzTzRr1gxXrlxBVlaW3eW3bt2K7du3a7pDAoA6derg9OnTdpefP3++Q3dwAeDrr792KB1QBu74ZmRkICYmBkuWLEHlypU18x5//HF06tQJderUQevWrTFjxgykpKTg5MmTVvMSQmDu3Ll49dVXMWDAADRv3hyffvopzpw5g7Vr17p+Y4iIiIiIiBy0d+9etGrVSu2KaPz48WjVqhWmTJkCAEhNTdVEZP7www+Rn5+PMWPGoEaNGuowduxYNc2///6LYcOGoVGjRhg6dCiqVKmCnTt3IiwszKEyderUCfHx8QCAIUOGYOzYsXjssccwbNgwdOvWze7yJpMJRqOx0PR///3XbnCtTZs2FYpQbctPP/2EmjVrOpS21O/4jhkzBv369UP37t0xY8YM3XSZmZlYunQpoqKiCkVJM0tKSsLZs2c1z7mHhISgXbt22LFjBx588EGry+Xk5GhCjKenpxdxa4ioLGNdJ3J/rOdEZNdNiOrsqC5dukDYeOF42bJlmv8TEhLs5hkXF+dUGW60YMECZGdnAwBeeeUVeHl5Yfv27Rg8eDBeffVVu8v37NkTc+fOVR+LVhQFGRkZmDp1Kvr27Wtz2c6dOztV1o4dOzqctlTv+MbFxSExMRGxsbG6aT744AMEBgYiMDAQP/30E+Lj4wvdNjcz3+qvXr26Znr16tXVedbExsZqnhXXa1gTUfnGuk7k/ljPiYiKLj8/Hz/88IP6WqmHhwdeeuklfPfdd3j77bcLPaFrzdtvv43ffvsNTZo0QXZ2Nh566CH1Mec333zT4bLceNd4165d2LJlC/Ly8pzbqOtKreGbkpKCsWPHYuXKlTbfvY2JicH+/fuxefNmNGzYEEOHDlV/gSgpkyZNQlpamjqkpKSUaP5EVDawrhO5P9ZzIrJHEa4dyjNPT088+eSTxWpv3XLLLfj999/xyiuv4LnnnkOrVq0wa9Ys7N+/36F3d1NTU9GxY0f4+Pigc+fOuHz5Mu655x60b98eXbp0QdOmTZGamup0uUrtUed9+/bh/PnzaN26tTrNaDRiy5YtWLBgAXJycmAwGNRfbBs0aIA77rgDlStXxpo1a6y+nB0eHg4AOHfunCZq2blz59CyZUvdsvj4+Gj61jI/bsDHo4hKjrk+2Xqcx9VY14lcr7TrOus50c1R2nWdXKdt27Y4cOAAIiMji5yHp6cnYmJiEBMT4/SyEydOhBACa9aswcqVK3HPPffAYDAgJSUFRqMRDz30EGbOnIkFCxY4VyanS1JCunXrhoMHD2qmjRo1CtHR0Zg4caLVqM1CCAghNO/uyKKiohAeHo4NGzaoDd309HTs2rULTz31lMNlM0cx4+NRRCXv6tWratTB0sa6TuQ6ZaWus54TuVZZqetOKUNRncui//3vfxg/fjxSUlJw2223ISAgQDP/xp54zI4ePYorV66gbdu26rQNGzZgxowZyMzMxH333YeXX37Z7vp//fVXrF69GnfccQfuvPNOVK1aFfHx8WoQq9deew2PPfaY09tVag3foKAgNG3aVDMtICAAVapUQdOmTXHixAmsWrUKPXv2RFhYGP7991/MmjULfn5+mpeio6OjERsbi4EDB6r9AM+YMQMNGjRQuzOKiIjAfffd53DZIiIicPjwYTRp0gQpKSku7Xz6ZkpPT0etWrW4TWWcO2/T4cOHERERUdrFUbGulx/cpvKhLNb1iIgIpKSkQAiB2rVru+X+5jaVbe62TebtSU5OhqIoZaauU8kxBwR+9tln1WmKokAIAUVRrEZsBgru1DZr1kxt+CYlJaF///6466670Lx5c8TGxsLf3x/jxo2zuf7Lly+rjdzQ0FD4+/tr7j7Xr1+/fD3qbI+vry+2bt2KuXPn4vLly6hevTo6deqE7du3a54NP3LkCNLS0tT/X3zxRWRmZuLxxx/HlStX0LFjR6xfv96pPnw9PDzUnR0cHOwWJykZt6l8cMdtqlmzJjw8Sr0XNRXrevnDbSofylJd9/DwwC233KI+lumO+5vbVD642zaFhISU3+0pQ1Gdy6KkpKQiLbd37168+OKL6v8rV65Ew4YN8fPPPwMouFP83nvv2W34VqtWDampqeqTOk8//bSmi6PLly8XugvtiDLV8JXDc0dERGDdunV2l7nxvQJFUfDaa6/htddeK+niERERERERubVTp06hQ4cO8PTUNhXz8/Oxfft23Xd/L168iFtuuUX9f9OmTejfv7/6f5cuXfD888/bXX/Lli2xY8cO9c7xrFmzNPO3bdum+7i1LWWq4UtERERERORSfMfXpq5duyI1NbVQBOa0tDR07dpV91Hn0NBQ9U6tyWTC3r17MX78eHV+bm6uQ8HQvv32W5vzb7/9dqf7+wVKuR/fsszHxwdTp07VRIYs77hN5QO36eYqy2UrKm5T+cBturnKctmKittUPrjbNrnb9lBh5nd5b/Tff//ZfMS4S5cueP3115GSkoK5c+fCZDKhS5cu6vzDhw+jTp06xS5f27ZtC8WKcoQiGIOciIiIiIjcXHp6OkJCQlDr7dfh4ed4/B9nmK5lI+X5yUhLSyt370APGjQIQMEd1969e2t+3DAajfjjjz/QqFEjrF+/3uryJ0+eRI8ePXD8+HEYDAbMnz9f07POfffdh6ioKLz77rtOly04OBgHDhxA3bp1nV7WjI86ExERERERVXDmbqmEEAgKCoKfn586z9vbG3fccYfNboTq1KmDv/76C4cOHUJYWFihiN/Tp0/XvAPsjJK4V8uGLxERERERVRx8x9eqpUuXAihowE6YMKFokZM9PdGiRQur8/Sm3yxs+BIREREREREAYOrUqaVdhEL+7//+r9iPjjO4FRERERERVRzmfnxdNZRz586dw/DhwxEREQFPT08YDAbNUBoWLlyIqlWrFisP3vElIiIiIiIiAMDDDz+M5ORkTJ48GTVq1LAa4flm2bNnDzZt2oTz58/DZDJp5r3zzjtO5cWGLxERERERVRiKKBhclXd5t23bNmzduhUtW7Ys1XK88cYbePXVV9GoUSNUr15d0wAvSmOcDV8iIiIiIiICANSqVavYUZSvXLmC3bt3W71TO2LECIfymDdvHj755BM8/PDDxSqLGRu+RERERERUcTCqs01z587FSy+9hMWLF6NOnTpOL//9998jJiYGGRkZCA4OLnSn1tGGr4eHB+68806n16+bX4nlREREREREROXaAw88gISEBNSrVw9BQUEIDQ3VDPY8//zzGD16NDIyMnDlyhVcvnxZHS5duuRwOZ577jm8//77xdkUDd7xJSIiIiIiIgAFd3yL4/Tp03j22Wfh7+9frHwmTJiAfv36oV69emjSpAm8vLw081evXu1Ufmz4EhEREREREQBg5MiRxVq+V69e2Lt3L+rWrVusfJ599lls2rQJXbt2RZUqVYodXZoNXyIiIiIiqjAUuDCqs2uyvemOHz+OpUuX4vjx45g3bx6qVauGn376CbVr18att95qc9l+/frhhRdewOHDh9GsWbNCd2rvvfdeh8qwfPlyfPPNN+jXr1+Rt0PGhi8REREREREBADZv3ow+ffrgzjvvxJYtWzBz5kxUq1YNv//+Oz7++GN8/fXXNpd/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69atMX78eLRp0wYAkJaWhqVLl8JkMuG1116rtv5x4EtERERERESVEhYWhn379mHcuHGYOXMmRMntGYqiIDY2FkuXLkVYWFi19Y8DXyIiIiIi8h684usyzZo1w9atW3H16lWcPn0aQgi0atUKISEh1d013uNLRERERERUnZYuXYrIyEgEBASgR48eOHjwoOay/fr1g6IoZR6DBw+2LPP000+Xeb68UkPOFhISgrvuugt33323Wwx6AV7xJSIiIiIiL+JuWZ03btyIyZMnIykpCT169MDixYsRGxuL9PR0NGrUqMzymzZtQoFU/eH3339Hp06d8Le//U213MCBA7F69WrL3/7+/o53zoNw4OsgzYNZunYupJTzQip5JHytB5s5sLhUgiHfWvrIcDPA+jq5N6zTBdayCkKj3Il2iQO5Y84tK+LqVPg1LdW+nvJLWmratjqk9LirotJaFSEUpfjhI8ertWyJZe9IcaYUWbdHyPNNUs0zuQyJSWMfy7ErlTxS8qX4LpTiXipnBKkcmnxusP06lXj/WUJIl8qcA6RGbM93cB940/vuMHk/aZQwUr3fvhr/VTJZl1HteaO0D6UShKrXkqnOH3LpsuJpzfiXY95GGSTADY4DNztunRKjleuAk5pxZDukzzLp/VUMLHPkajk5Oaq//f39NQeeCxcuxJgxYzBq1CgAQFJSEr7++musWrUKr7zySpnl69evr/p7w4YNqFWrVpmBr7+/P8LDwyuzGR6FP3UmIiIiIiLvIVz8ANCkSRMEBwdbHgkJCTa7UlBQgNTUVMTExFjmGQwGxMTEYP/+/bo2Z+XKlXjsscdQu3Zt1fyUlBQ0atQIbdq0wbhx4/D777/ras9T8YovERERERGRE2VkZCAoKMjyt9bV3itXrsBkMpXJdhwWFoa0tDS7r3Pw4EH897//xcqVK1XzBw4ciIceeghRUVE4c+YMXn31Vdx///3Yv38/jPKvUbwIB75EREREROQ1FCHUtwk6uW0ACAoKUg18XWXlypXo0KED7r77btX8xx57zDLdoUMHdOzYES1atEBKSgr69+/v8n65I/7UmYiIiIiIqBo0aNAARqMRWVlZqvlZWVl278/Ny8vDhg0b8Mwzz9h9nebNm6NBgwY4ffp0pfpbk3HgS0RERERE3qMK7vHVy8/PD926dUNycrJlntlsRnJyMnr27Fnu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z+PQwLdv374Ain833qRJExgMFbpFmIiIiIiIqFrI9+K6om1H+Pn5oVu3bkhOTsaDDz4IADCbzUhOTsb48eN1tWEymXDixAkMGjQIABAVFYXw8HAkJydbBro5OTk4cOAAxo0b51D/PEmFRq7NmjWDwWDAjRs3kJaWhuPHj6seFZGYmAhFUTBx4kTLvOeffx4tWrRAYGAgGjZsiKFDhyItLU13m2PHjoWiKFi8eHGF+kRERERERORKkydPxooVK7B27VqcOnUK48aNQ15eHkaNGgUAGDlyJGbOnGlZfu7cudi+fTvOnj2LI0eO4IknnsDPP/+MZ599FgAsY6r4+Hhs2bIFJ06cwMiRIxEREWEZXHsjh674lvrtt98watQofPPNNzafN5kcu5fv0KFDWL58OTp27Kia361bN8TFxaFp06b4448/8MYbb2DAgAE4d+4cjMbyb3TZvHkzfvjhB/70moiIiIiIrNysju+jjz6K3377DbNnz0ZmZiY6d+6Mbdu2WZJTXbhwQfVL26tXr2LMmDHIzMxESEgIunXrhn379qFdu3aWZaZPn468vDw899xzyM7Oxr333ott27Z5bQ1foIID34kTJyI7OxsHDhxAv379sHnzZmRlZSE+Ph4LFixwqK3c3FzExcVhxYoViI+PVz333HPPWaYjIyMRHx+PTp064fz582jRooVmm7/88gteeuklfPvttxg8eLBjG0dERERERFSFxo8fr/nT5pSUFNXfixYtwqJFi2wuW0pRFMydOxdz5851VhdrvAoNfL/77jt88cUX6N69OwwGA5o1a4a//vWvCAoKQkJCgkODzRdffBGDBw9GTExMmYGvLC8vD6tXr0ZUVBSaNGmiuZzZbMaTTz6JadOm4U9/+pOuPuTn56tqa+Xk5JSzdNU4spwZT8k50mc5dixFLptvmTbmW79d9L0hZROWftShyBlBbXzLuWtrcQbznJwcBAfPcagvzuaOsc5M5uQs/3tklkPLd936umX6jywpAUtJIBsDramHa9eyxk2T4GzL9NnfQy3T/xlWHN85OTkIXv6qQ31xJneMcwA49j5jnZxjY88k3csuT+9rmV5/8W7LdNa1upbpfCkLfGBda+y0Cf3dMj047IRl+oU2OwGUxDr098WtCKGqkuD0tsktVege37y8PEu93pCQEPz2228AgA4dOuDIkSO629mw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LxEREREReY8quMfXEY8++ih+++03zJ49G5mZmejcuTO2bdtmSXh14cIFGAzW65UffPABCgoK8Mgjj6jaKc0cbTQacfz4caxduxbZ2dmIiIjAgAED8NZbb2km2fIGHPgSERERERFVo/Hjx2P8+PE2n5NLvgLA+fPny20rMDAQ3377rZN65jk48CUiIiIiIu9hNgMwu7Btcke8x5eIiIiIiIg8Gq/4EhERERGR93Cze3ypavCKLxEREREREXk0XvElIiIiIiLvwSu+XolXfImIiIiIiMij8YovERERERF5D7MA4KIrs2Ze8XVXvOJLREREREREHo1XfImIiIiIyGsIYYYQrqm366p2qfJ4xZeIiIiIiIg8Gq/4EhERERGR9xDCdffiMquz2+IVXyIiIiIiIvJovOJLRERERETeQ7gwqzOv+LotXvElIiIiIiIij8YrvkRERERE5D3MZkBxUfZlZnV2W7ziS0RERERERB6NV3yJiIiIiMh78B5fr8QrvkREREREROTReMWXiIiIiIi8hjCbIVx0j6/gPb5ui1d8iYiIiIiIyKPxii8REREREXkP3uPrlXjFl4iIiIiIiDwar/gSEREREZH3MAtA4RVfb8MrvkREREREROTReMWXiIiIiIi8hxAAXJR9mVd83Rav+BIREREREZFH4xVfIiIiIiLyGsIsIFx0j6/gFV+35TZXfBMTE6EoCiZOnGiZ9/zzz6NFixYIDAxEw4YNMXToUKSlpZXbjhACs2fPRuPGjREYGIiYmBj89NNPLu49ERERERERuSu3GPgeOnQIy5cvR8eOHVXzu3XrhtWrV+PUqVP49ttvIYTAgAEDYDKZNNuaN28e3nvvPSQlJeHAgQOoXbs2YmNjcevWLVdvBhERERERuTthdu2D3FK1D3xzc3MRFxeHFStWICQkRPXcc889hz59+iAyMhJdu3ZFfHw8MjIycP78eZttCSGwePFivP766xg6dCg6duyIdevW4ddff8Xnn3/u+o0hIiIiIiIit1PtA98XX3wRgwcPRkxMTLnL5eXlYfXq1YiKikKTJk1sLnPu3DlkZmaq2goODkaPHj2wf/9+zbbz8/ORk5OjehCR52GsE3k+xjkR2SPMwqUPck/VOvDdsGEDjhw5goSEBM1lli1bhjp16qBOnTr45ptvsGPHDvj5+dlcNjMzEwAQFhammh8W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8+bhkUcewbZt2/DNN98gKCjIst6ECROQmJiIVq1aITo6GgsXLkR2drbl+bp162Lq1KmYNGkSzGYz7r33Xly7dg179+5FUFAQnnrqqQq9V0Q1FeOcyDsw1onIk/CKLznd6tWr0a1bNzzwwAPo2bMnhBDYunVrmZ9ClWfGjBkYMWIERo4ciZ49e6JOnTqIjY1FQECA5jpz587F+fPn0aJFCzRs2BBA8bfVy5Ytw9KlS9GpUyccPHhQlWkSAKZMmYInn3wSTz31FHr27Im6deti2LBhqmXeeustzJo1CwkJCWjbti0GDhyIr7/+GlFRUQ68M0Seg3FO5B0Y60TkKRThipswiJzMbDajbdu2GD58ON56663q7g4RuQDjnMg7MNaJqDrwp87kln7++Wds374dffv2RX5+PpYsWYJz587h8ccfr+6uEZGTMM6JvANjnYjcAX/qTG7JYDBgzZo1uOuuu9C7d2+cOHEC//73v9G2bdvq7hoROQnjnMg7MNaJyB3wp85ERERERETk0XjFl4iIiIiIiDwaB75ERERERETk0TjwJSIiIiIiIo/GgS8RERERERF5NA58iYiIiIiIyKNx4EtEREREREQejQNfIiIiIiIi8mgc+BIREREREZFH+/9XsYpcUMTc+AAAAABJRU5ErkJggg==", + "image/png": "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dKi6/1tvvVV89913Yu/evWLNmjVi8ODBAoDo0KGDxzoWpU/zZn2n0ymaNm2q60u//vprsXv3brFmzRpxxx13FDh37tqPw+EQPXv2VNdp0KCBmD9/vti6davYu3evWLt2rXj++edF/fr13W4/b948dduIiAjx1FNPqedn+/bt4qOPPhJPPPGEqF69ugAgDhw44NXxE1HZ4UCYiLzmaSDsdDrFjBkzhMViUdczeoWEhIiMjAzd9mU1EP7+++9Fr169DOvaqFEjcfLkScP97N27V8TGxno83kGDBonMzEy32xflQ+Ply5d1g2vXV1RUlPjxxx89llkSA2EhhEhNTdUNvDy9unXr5rGsP//8s8A2q1evLrQOmZmZYuDAgR73HRsbK/bt2+d2e28Ge1u2bBEhISFuyzabzWLBggWF3pP//POPOgBxfbleI08f5IXIG5DJH/jdvRo3biyOHTvmdvvSGggLIcSoUaMM62g2m8X8+fNL9Nx5ezyeXo0aNRJHjx51W0ZycrK46aabvCpn1KhRBbZ/9913hclkMtzmrrvuEj/88MNVnff8P9x4egUGBhq2/dOnT4v69esbbnv33XcXWseSHggLIcS+ffvUPzq6ezVr1kycOnWq0PaTnp6uDpw9vYy2f+utt0RwcHCh21utVvHnn396dfxEVHb41WgiKhGKouD555/HH3/8gUmTJqFNmzaIioqC2WxGWFgYmjRpgmHDhuG9995DcnKyGpG1rFmtVqxduxZvvPEGbrzxRkRGRiI4OBjNmjXDzJkzsXfvXrcBm/K1atUKR44cwaxZs9CuXTtERkbCarUiNjYWgwYNwldffYXPP/9c/a3j1YiIiMC2bdvw4osvolmzZggKCkJoaCgaN26MiRMn4pdffkHnzp2vej/eCAsLw+eff44tW7bggQceQMOGDREWFgaLxYKoqCjccMMNGD16NNauXVvob2jr1aunRvEF8n7bmv+bPE+CgoLwxRdf4KuvvsKgQYMQGxsLq9WKSpUqoV27dpg1axaOHDmCli1bFvs4O3XqhD179mD48OGIjY1FQEAAqlevjsGDB2Pz5s2GX1GW1ahRAzt37sT999+PevXqXdW9EBUVhc2bN+P999/HLbfcgmrVqiEgIACVK1dG165dsWjRIuzfvx9xcXHF3kdJeffdd/HBBx/gpptuQlhYGAIDAxEXF4fhw4dj+/btGDt2bKFllNS5u+mmm7Bp0yY888wz6NatG+rVq4ewsDAEBASgWrVq6NWrFxYvXoz9+/cX+MpwvpiYGGzevBnffPMNhg0bpgZtCwgIQHR0NDp06IAnn3wSP/74o9u4AaNGjcKWLVtw++23Izo6Wr2XbrnlFqxatQorV6686pRDGzduxIIFCzB48GA0a9YM0dHRsFgsCA8PR6tWrTBx4kQcOnQI9957r9vtq1Wrhh07dmDy5MmoX78+AgMDERUVhc6dO2PFihX4+OOPSzQtkrdatmyJ/fv345FHHkFcXBwCAgIQFRWFtm3bYs6cOdi5c6dXP30IDg7Gp59+ig0bNmD48OGIj4+HzWaD1WpFzZo10b9/fyxZssTw5zIPPvggjh49ihkzZqBjx46oUqUKLBYLQkJC0KBBAwwePBiLFy/GyZMnUa9evZI+DURUwhQhfJBokoioHNu0aRO6desGIO+DY1GDKBERERHRtY1PhImIiIiIiMivcCBMREREREREfoUDYSIiIiIiIvIrHAgTERERERGRX+FAmIiIiIiIiPwKo0YTERERERGRX+ETYSIiIiIiIvIrHAgTERERERGRX+FAmIiIiIiIiPwKB8JERERERETkVzgQJiIiIiIiIr/CgTARERERERH5FQ6EiYiIiIiIyK9wIExERERERER+hQNhIiIiIiIi8iscCBMREREREZFf4UCYiIiIiIiI/AoHwkRERERERORXOBAmIiIiIiIiv8KBMBEREREREfkVDoSJiIiIiIjIr3AgTERERERERH6FA2EiIiIiIiLyKxwIExERERERkV/hQJiIiIiIiIj8CgfCRERERERE5Fc4ECYiIiIiIiK/woEwERERERER+RUOhImIiIiIiMivcCBMREREREREfoUDYSIiIiIiIvIrHAgTERERERGRX+FAmIiIiIiIiPwKB8JERERERETkVzgQJiIiIiIiIr/CgTARERERERH5FQ6EiYiIiIiIyK9wIExERERERER+hQNhIiIiIiIi8iscCBMREREREZFf4UCYiIiIiIiI/AoHwkRERERERORXOBAmIiIiIiIiv8KBMBEREREREfkVDoSJiIiIiIjIr3AgTERERERERH6FA2EiIiIiIiLyKxwIExERERERkV/hQJiIiIiIiIj8CgfCRERERERE5Fc4ECYiIiIiIiK/woEwERERERER+RUOhImIiIiIiMivcCBMREREREREfoUDYSIiIiIiIvIrHAgTERERERGRX+FAmIiIiIiIiPwKB8JERERERETkVzgQJiIiIiIiIr/CgTARERERERH5FQ6EiYiIiIiIyK9wIExERERERER+hQNhIiIiIiIi8iscCBMREREREZFf4UCYiIiIiIiI/AoHwkRERERERORXOBAmIiIiIiIiv8KBMBEREREREfkVDoSJiIiIiIjIr3AgTERERERERH6FA2EiIiIiIiLyKxwIExERERERkV/hQJiIiIiIiIj8CgfCRERERERE5Fc4ECYiIiIiIiK/woEwERERERER+RUOhImIiIiIiMivcCBMREREREREfoUDYSIiIiIiIvIrHAgTERERERGRX+FAmIiIiIiIiPwKB8JERERERETkVzgQJiIiIiIiIr/CgTARERERERH5FQ6EiYiIiIiIyK9wIExERERERER+hQNhIiIiIiIi8iscCBMREREREZFf4UCYiIiIiIiI/AoHwkRERERERORXOBAmIiIiIiIiv8KBMBEREREREfkVDoSJiIiIiIjIr3AgTERERERERH6FA2EiIiIiIiLyKxwIExERERERkV/hQJiIiIiIiIj8CgfCRERERERE5Fc4ECYiIiIiIiK/woEwERERERER+RUOhImIiIiIiMivcCBMREREREREfoUDYSIiIiIiIvIrHAgTERERERGRX+FAmIiIiIiIiPwKB8JERERERETkVzgQJiIiIiIiIr/CgTARERERERH5FQ6EiYiIiIiIyK9wIExERERERER+hQNhIiIiIiIi8iscCBMREREREZFf4UDYj2zatAmKouDy5ctlXRUi8iG2dSL/wLZORFR8HAhXUF27dsW4ceN08zp06IDk5GRERESUTaWK6eLFi3jiiSfQsGFD2Gw21KpVC2PGjEFKSopuvRMnTqBfv34IDg5G1apV8dRTTyE3N1dd/sUXX6Bnz56Ijo5GeHg42rdvj++//95wv7Nnz4aiKAXOozsvvfQSOnTogODgYERGRhZY/ssvv2Do0KGoWbMmbDYbGjdujAULFhRa7sGDBzF48GDUrl0biqJg/vz5BdaZPn06FEXRvRo1alRo2VQxsK37T1sHgJMnT+Lf//43KleuDJvNhmbNmmH37t2Flk/XPrZ1/2nr+ctcX6NHjy60fCLy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/vOf/8BqteKtt95CnTp1yqxe5WogvGnTJnU6NjYWa9euLXQbOdZX7dq1UUaxv4iIiIiIqKLy8x8J5//s9OzZswXSIT3//PMet50yZQrS09MBAC+88AJuvfVW3HTTTahcuTJWrVrlszoXplwNhImIiIiIiKj8WLp0KR599FFUqVIFMTExarRnIC/ys9FAeOPGjejYsSN69+6tzqtXrx5+//13XLx4EZUqVdKVVdo4ECYiIiIiIvLEh78RRjn/jfDMmTPx0ksvYfLkyUXarnv37ggKCsKNN96Ibt26oVu3brjxxhthsVgQFRXlo9p6z1TWFSAiIiIiIqLy6dKlSxgyZEiRt0tMTMTrr7+OWrVq4Z133kHnzp0RGRmJ3r17Y/bs2dixY0eBr1mXJg6EiYiIiIiIPBDCt6/ybMiQIfjvf/9b5O3i4uIwatQoLF++HMeOHcNff/2FhQsXolq1anjzzTfRoUOHMn0yzK9GExEREREReVDe0ie9/vrreOWVV3D69Gm0aNECr732Gtq2bWu4/vz58/Hmm2/ixIkTqFKlCu644w7MmjULQUFBhe6rXr16mDp1Kn7++Wc0a9YMAQEBuuVjxozxqs516tSB2WyGoihQFAVr1qxBdna2V9v6AgfCRERERERE14hVq1ZhwoQJWLx4Mdq1a4f58+ejd+/eOHLkiC7NbL6PPvoITz/9NN5991106NABf/zxB+69914oioK5c+cWur+33noLoaGh+PHHH/Hjjz/qlimK4nEgfOLECWzatAkbN27Epk2bcP78eXTo0AE33XQTvvnmG7Rr167oJ6CEcCBMRERERETkiVB8F9SqiOXOnTsXDz74IEaNGgUAWLx4Mb799lu8++67ePrppwusv337dnTs2BH33HMPgLyUs0OHDsWOHTu82l9iYmKR6pevTp06uHTpEjp27IjOnTvj4YcfRps2bWCxlI8hKH8jTEREREREVMZSU1N1L7vdXmCd7Oxs7NmzBz169FDnmUwm9OjRAz/99JPbcjt06IA9e/Zg586dAICjR49i7dq16Nu3b5HrKISA8PJHzZmZmWr9LBYLAgICYDabi7xPX+FAmIiIiIiIyIPSCJZVs2ZNREREqK9Zs2YVqMf58+fhcDhQrVo13fxq1arh9OnTbut+zz334IUXXkCnTp0QEBCAunXromvXrnj22We9Pv73338fzZo1g81mg81mQ/PmzfHBBx943CY5ORk//fQT+vbtix07dqBfv36oVKkSbr31VsyZMwe7du0q06jR5eO5NBERERERkR9LSkpCeHi4+v/AwMASKXfTpk14+eWX8cYbb6Bdu3b466+/MHbsWLz44ouYOnVqodvPnTsXU6dOxeOPP46OHTsCALZu3YpHHnkE58+fx/jx4w23bdSoERo1aoRHHnkEAHD48GH198IzZ84EAFy+fPnqD7IYOBAmIiIiIiLyRPzv5auyAYSHh+sGwu5UqVIFZrMZZ86c0c0/c+YMYmJi3G4zdepUDB8+HA888AAAoFmzZkhPT8dDDz2E5557DiaT5y8Jv/baa3jzzTcxYsQIdd5tt92Gf/3rX5g+fbrHgbBrHX/99Vf8+uuv+OWXX5Camlpig/3i4FejiYiIiIiIrgFWqxXXX3891q9fr85zOp1Yv3492rdv73abjIyMAoPd/N/qevN73+TkZHTo0KHA/A4dOiA5Odlwu7Nnz+KTTz7BY489hsaNGyM2NhYjR47EoUOHcPfdd2PDhg1l9jQY4BNhIiIiIiIij8pTHuEJEyZg5MiRaNOmDdq2bYv58+cjPT1djSI9YsQI1KhRQ/2Ncf/+/TF37ly0atVK/Wr01KlT0b9/f6+CV9WrVw+ffPJJgd8Ur1q1CvXr1zfcLiYmBgEBAWjTpg0GDx6Mbt26oUOHDrDZbEU6Xl/hQJiIiIiIiOgacdddd+HcuXN4/vnncfr0abRs2RLr1q1TA2idOHFC9wR4ypQpUBQFU6ZMwcmTJxEdHY3+/fvjpZde8mp/M2bMwF133YXNmzervxHetm0b1q9fj08++cRwu++++w6dOnVCSEjIVRyt7yjC2/jXfiQ1NRURERFISUkp9Hv6ROQ7vm6LbOtEZY/tnMg/XKttMb/etd56HiZbkE/24czMwomHXijX52bPnj2YN28eDh8+DABo3LgxnnzySbRq1aqMa1Z8fCJMREREREREhq6//nqsWLGirKtRojgQJiIiIiIi8qA8/Ua4NKSmpqpPp1NTUz2uW16fYheGA2EiIiIiIiJSVapUCcnJyahatSoiIyOhKAUH60IIKIoCh8NRBjW8ehwIExEREREReVIKeYTLkw0bNiAqKgoAsHHjxjKujW9wIExERERERESqLl26qNPx8fGoWbNmgafCQggkJSV5VV56ejp+/PFHnDhxAtnZ2bplY8aMufoKFwMHwkRERERERB4p/3v5quzyKz4+Xv2atOzixYuIj48v9KvR+/btQ9++fZGRkYH09HRERUXh/PnzCA4ORtWqVctsIGwqfBUiIiIiIiLyR/m/BXaVlpaGoKDCU0qNHz8e/fv3x6VLl2Cz2fDzzz/j+PHjuP766zFnzhxfVNkrfCJMRERERETkiZ/9RhgAJkyYAABQFAVTp05FcHCwuszhcGDHjh1o2bJloeXs378fS5Ysgclkgtlsht1uR506dfCf//wHI0eOxKBBg3x1CB5xIExEREREREQ6+/btA5D3RPjAgQOwWq3qMqvVihYtWmDixImFlhMQEACTKe+LyFWrVsWJEyfQuHFjREREeP0bY1/gQJiIiIiIiMgTP3winB8tetSoUViwYEGx8wW3atUKu3btQv369dGlSxc8//zzOH/+PD744AM0bdq0JKtcJPyNMBEREREREbm1bNmyYg+CAeDll19G9erVAQAvvfQSKlWqhEcffRTnzp3DW2+9VVLVLDI+ESYiIiIiIvJEKHkvX5Vdzu3evRuffPKJ2/RHX3zxhcdt27Rpo05XrVoV69at80kdi4pPhImIiIiIiMitlStXokOHDjh8+DBWr16NnJwcHDx4EBs2bEBERIRXZeTm5uKHH37AkiVLcOXKFQDAqVOnkJaW5suqe8QnwkRERERERB4IkffyVdnl2csvv4x58+Zh9OjRCAsLw4IFCxAfH4+HH35Y/cqzJ8ePH8ctt9yCEydOwG63o2fPnggLC8P//d//wW63Y/HixYbbFiei9OLFiwvkPHaHT4SJiIiIiIjIrb///hv9+vUDkBctOj09HYqiYPz48V79xnfs2LFo06aNmkc438CBA7F+/XqP265ZswZWqxURERFevb799luvnzLziTAREREREZEnfhg1Ol+lSpXUrzPXqFEDv/32G5o1a4bLly8jIyOj0O23bNmC7du369IvAUDt2rVx8uTJQrdfuHChV094AeCzzz7zaj2AA2EiIiIiIiIy0LlzZyQkJKBZs2YYMmQIxo4diw0bNiAhIQHdu3cvdHun0wmHw1Fg/j///IOwsDCP227cuBFRUVFe1/W7775DjRo1vFqXA2EiIiIiIiJP/Dhq9KJFi5CVlQUAeO655xAQEIDt27dj8ODBmDJlSqHb9+rVC/Pn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jTfeiH379mnGjRgxAklJSZg0aRIcDgfq16/vL7+k9u/fj9///vcYPnw4ZsyYofnM6XSW+u+N2dnZRf4O4nA4/F9yKLSxrVeftl4oKioKUVFROH/+PD777DO88MILl1UeVQ1s66HT1l944QXMmDEDn332GTp37qz5rGnTpmjQoAE2bNjgv/DNyMjAN998g0ceeaRU9aTQtGDBArz44otIS0tDhw4d8Oqrr6JLly660/bu3RtffvllkfH9+/e39Hf+zMxMuFyuIuPDwsKQkZFR8sqXUnJysu54m82G8PBwtGjRAgMHDrT8IzMvhENUYmIivvnmGxw5cgTR0dFlEpQJAK688koMHToUw4YNw0svvYSrr74aZ86cwYYNG9C+ffsiJ6FCl/MXqoyMDPTt2xfZ2dl46623kJGR4W909erVg8PhQN++fdGmTRvcd999eOGFF5CWloannnoKo0aNgtvtBlDwt6nhw4fj5ZdfRteuXf3P2kRERCA2NhY1atRA27ZtNcuOiopCnTp1iowPdOzYMZw7dw7Hjh2D1+v1/wrcokULREdH47///S9+//vfo1+/fkhOTvYv2+FwoF69eobl5uXl4cCBA/7hEydOYO/evYiOjvafYP/whz9gxowZaNKkCa666irs2bMHc+bMwciRI0u4pakqYluvPm39s88+g6IoaNWqFX744QdMmDABSUlJGDFiRAm3NFVFbOuh0daff/55PP3003jnnXeQmJjon68wyFhhnuPp06ejZcuW/vRJ8fHxuP3220u8rakMVaI7witXrkRycjIWLlyIrl27Yt68eejXrx9SU1N1f9hZtWoV8vLy/O9//fVXdOjQAX/84x8tLa9du3ZYuXIlnn76ac34FStWaH6Ykr777jvL62M1rdmePXuwe/dueL1etGrVCgDw/fffw+FwICkpCa+99hoef/xxbNmyxbBeGhUdtpqCIzU1VbnuuuuUiIiIYtMsSFOnTlU6dOigGTd8+HBl4MCB/vd5eXnK008/rSQmJiphYWFKw4YNlUGDBinfffddUNalsN56r8OHD/unO3LkiHLLLbcoERERSt26dZXHH3/cn4ZBURSlV69eumUMHz7ccNlW0yzopbYA4E8/MXXqVN3PExISTMs9fPiw7ny9evXyT5ORkaGMGTNGadKkiRIeHq40a9ZMefLJJ03TS1DoYFuvPm19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1KnYvXs3OnTogH79+uH06dOm8x05cgTjx4/H7373u3KqaeXGC2EiIiIiIiIzviC/AGRkZGheubm5ulWZM2cOHnjgAYwYMQJt2rTBwoULERkZiTfeeMOw+l6vF0OHDsWzzz6LZs2aXdamCBW8ECYiIiIiIqpgjRs3RmxsrP+VkpJSZJq8vDzs2rULffr08Y+z2+3o06cPtm/fblj2tGnTUL9+fdx///1BqXtVxKjRREREREREJmyKAluQojsXlnv8+HHExMT4x7vd7iLTnj17Fl6vF3FxcZrxcXFxOHTokG75W7ZswZIlS7B3796yq3QI4IUwERERERFRBYuJidFcCJeFixcv4r777sPixYtRt27dMi27quOFMBERERERkZlKkke4bt26cDgcOHXqlGb8qVOn0KBBgyLT//jjjzhy5Aj+8Ic/+Mf5fAUPJTudTqSmpqJ58+alrHjVxmeEiYiIiIiIqgCXy4VOnTphw4YN/nE+nw8bNmxAt27dikyflJSEffv2Ye/evf7XbbfdhhtuuAF79+5F48aNy7P6lQrvCBMREREREZnxKYAtSHeEfSUrNzk5GcOHD0fnzp3RpUsXzJs3D1lZWRgxYgQAYNiwYWjUqBFSUlIQHh6Otm3bauavWbMmABQZX93wQpiIiIiIiKiKGDJkCM6cOYOnn34aaWlp6NixI9atW+cPoHXs2DHY7fzjb3F4IUxERERERGSmkjwjXGj06NEYPXq07mebNm0ynXfZsmUlXl4o4k8FREREREREVK3wjjAREREREZGpIN4RRrDKJTO8I0xERERERETVCu8IExERERERmalkzwjT5eMdYSIiIiIiIqpWKs2F8KxZs2Cz2TB27Fj/uIceegjNmzdHREQE6tWrh4EDB+LQoUOGZeTn52PSpElo164doqKiEB8fj2HDhuGXX34phzUgIiIiIqKQ5FOC+6JyVykuhHfu3IlFixahffv2mvGdOnXC0qVLcfDgQXz22WdQFAV9+/aF1+vVLSc7Oxu7d+/GlClTsHv3bqxatQqpqam47bbbymM1iIiIiIiIqAqo8GeEMzMzMXToUCxevBjTp0/XfPbggw/6hxMTEzF9+nR06NABR44cQfPmzYuUFRsbi/Xr12vGzZ8/H126dMGxY8fQpEmT4KwEERERERGFLsVX8ApW2VTuKvyO8KhRozBgwAD06dPHdLqsrCwsXboUTZs2RePGjS2Xn56eDpvNhpo1axpOk5ubi4yMDM2LiEIP2zpR6GM7JyIiKyr0QnjFihXYvXs3UlJSDKd57bXXEB0djejoaHz66adYv349XC6XpfJzcnIwadIk3H333YiJiTGcLiUlBbGxsf5XSS60iajqYFsnCn1s50QUFIVRo4P1onJXYRfCx48fx5gxY/D2228jPDzccLqhQ4diz549+PLLL3HllVdi8ODByMnJKbb8/Px8DB48GIqi4PXXXzeddvLkyUhPT/e/jh8/XuL1IaLKj22dKPSxnRMRkRUV9ozwrl27cPr0aVxzzTX+cV6vF5s3b8b8+fORm5sLh8Ph/0W3ZcuWuO6661CrVi2sXr0ad999t2HZhRfBR48exRdffGF6NxgA3G433G53ma0bEVVObOtEoY/tnIiCwqcACNKdW0aNrhAVdiF84403Yt++fZpxI0aMQFJSEiZNmgSHw1FkHkVRoCgKcnNzDcstvAj+3//+h40bN6JOnTplXnciIiIiIiKquirsQrhGjRpo27atZlxUVBTq1KmDtm3b4qeffsLKlSvRt29f1KtXDz///DNmzZqFiIgI9O/f3z9PUlISUlJSMGjQIOTn5+Ouu+7C7t278fHHH8Pr9SItLQ0AULt2bcvPFhMREREREfkF81lePiNcISo8fZKR8PBwfPXVV5g3bx7Onz+PuLg49OzZE9u2bUP9+vX906WmpiI9PR0AcOLECaxZswYA0LFjR015GzduRO/evcur+kRERERERFRJVaoL4U2bNvmH4+PjsXbt2mLnUcQvKImJiZr3REREREREl01BEO8IB6dYMlfheYSJiIiIiIiIylOluiNMRERERERU6fAZ4ZDDO8JERERERERUrfCOMBERERERkRmfD4AviGVTeeMdYSIiIiIiIqpWeEeYiIiIiIjIDJ8RDjm8I0xERERERETVCu8IExERERERmeEd4ZDDO8JERERERERUrfCOMBERERERkRmfAiBId259vCNcEXhHmIiIiIiIiKoV3hEmIiIiIiIyoSg+KEpw8v0Gq1wyxzvCREREREREVK3wjjAREREREZEZRQnes7yMGl0heEeYiIiIiIiIqhXeESYiIiIiIjKjBDFqNO8IVwjeESYiIiIiiF2UBgAAERVJREFUIqJqhXeEiYiIiIiIzPh8gC1I0Z0Z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3HCDf38kJiYqDz/8sPLzzz/7pwmlfRgMbOvacaFwnLCtb1QUpWrvw2Cobm091Nu5orCth8p+JKosQv4ZYSIiIiIiIiKJeYSJiIiIiIioWuGFMBEREREREVUrvBAmIiIiIiKiaoUXwkRERERERFSt8EKYiIiIiIiIqhVeCBMREREREVG1wgthIiIiIiIiqlZ4IUxERERERETVCi+EKah69+6NsWPHhswy//znP+P2228PStlEVRnbOlHoYzsnolDirOgKEJW1VatWISwszP8+MTERY8eOLfeTNxEFF9s6UehjOyeiYOGFMIWc2rVrV3QViKgcsK0ThT62cyIKFv41msrN+fPnMWzYMNSqVQuRkZG45ZZb8L///c//+bJly1CzZk189tlnaN26NaKjo3HzzTfj5MmT/mk8Hg8ee+wx1KxZE3Xq1MGkSZMwfPhwzV+b5N+oevfujaNHj2LcuHGw2Wyw2WwAgGeeeQYdO3bU1G/evHlITEz0v/d6vUhOTvYva+LEiVAURTOPz+dDSkoKmjZtioiICHTo0AHvvfde2WwwoiqKbZ0o9LGdE1FVxwthKjd//vOf8e2332LNmjXYvn07FEVB//79kZ+f758mOzsbs2fPxvLly7F582YcO3YM48eP93/+/PPP4+2338bSpUuxdetWZGRk4IMPPjBc5qpVq3DFFVdg2rRpOHnypOYEXJyXXnoJy5YtwxtvvIEtW7bg3LlzWL16tWaalJQUvPnmm1i4cCH279+PcePG4d5778WXX35pfcMQhRi2daLQx3ZORFWeQhREvXr1UsaMGaN8//33CgBl69at/s/Onj2rREREKO+++66iKIqydOlSBYDyww8/+KdZsGCBEhcX538fFxenvPjii/73Ho9HadKkiTJw4MAiyyyUkJCgzJ07V1OvqVOnKh06dNCMmzt3rpKQkOB/37BhQ+WFF17wv8/Pz1euuOIK/7JycnKUyMhIZdu2bZpy7r//fuXuu+823S5EoYZtnSj0sZ0TUSjhM8JULg4ePAin04muXbv6x9WpUwetWrXCwYMH/eMiIyPRvHlz//uGDRvi9OnTAID09HScOnUKXbp08X/ucDjQqVMn+Hy+Mq1veno6Tp48qamv0+lE586d/X+l+uGHH5CdnY2bbrpJM29eXh6uvvrqMq0PUVXBtk4U+tjOiSgU8EKYKhUZGRIAbDZbkWd4yoLdbi9Srvw7lxWZmZkAgE8++QSNGjXSfOZ2uy+vgkQhjm2dKPSxnRNRZcZnhKlctG7dGh6PB998841/3K+//orU1FS0adPGUhmxsbGIi4vDzp07/eO8Xi92795tOp/L5YLX69WMq1evHtLS0jQnzr1792qW1bBhQ019PR4Pdu3a5X/fpk0buN1uHDt2DC1atNC8GjdubGmdiEIN2zpR6GM7J6JQwDvCVC5atmyJgQMH4oEHHsCiRYtQo0YNPPHEE2jUqBEGDhxouZy//vWvSElJQYsWLZCUlIRXX30V58+f90eO1JOYmIjNmzfjT3/6E9xuN+rWrYvevXvjzJkzeOGFF3DXXXdh3bp1+PTTTxETE+Ofb8yYMZg1axZatmyJpKQkzJkzBxcuXPB/XqNGDYwfPx7jxo2Dz+fD9ddfj/T0dGzduhUxMTEYPnx4qbYVUVXGtk4U+tjOiSgU8I4wlZulS5eiU6dOuPXWW9GtWzcoioK1a9cW+euUmUmTJuHuu+/GsGHD0K1bN0RHR6Nfv34IDw83nGfatGk4cuQImjdvjnr16gEo+DX7tddew4IFC9ChQwfs2LFDE8kSAB5//HHcd999GD58OLp164YaNWpg0KBBmmmee+45TJkyBSkpKWjdujVuvvlmfPLJJ2jatGkJtgxRaGFbJwp9bOdEVNXZlGA8rEFUTnw+H1q3bo3Bgwfjueeeq+jqEFGQsK0ThT62cyIqT/xrNFUpR48exeeff45evXohNzcX8+fPx+HDh3HPPfdUdNWIqAyxrROFPrZzIqpI/Gs0VSl2ux3Lli3Dtddeix49emDfvn3497//jdatW1d01YioDLGtE4U+tnMiqkj8azQRERERERFVK7wjTERERERERNUKL4SJiIiIiIioWuGFMBEREREREVUrvBAmIiIiIiKiaoUXwkRERERERFSt8EKYiIiIiIiIqhVeCBMREREREVG1wgthIiIiIiIiqlb+H+/AgTtax1HuAAAAAElFTkSuQmCC", "text/plain": [ "
    " ] @@ -1671,7 +4213,6 @@ ], "source": [ "import matplotlib.pyplot as plt\n", - "import xarray\n", "\n", "response_bay[\"chl\"].isel(depth=10).plot(col=\"time\", col_wrap=3)\n", "plt.suptitle(\"Temporal evolution at sea surface\", fontsize=20, y=1.2)\n", @@ -1693,78 +4234,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO - 2024-10-18T14:48:09Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", - "INFO - 2024-10-18T14:48:09Z - Dataset part was not specified, the first one was selected: \"default\"\n", - "INFO - 2024-10-18T14:48:09Z - Service was not specified, the default one was selected: \"original-files\"\n", - "INFO - 2024-10-18T14:48:09Z - Downloading using service original-files...\n", - "INFO - 2024-10-18T14:48:10Z - Listing files on remote server...\n", - "1it [00:00, 1.09it/s]\n", - "INFO - 2024-10-18T14:48:11Z - You requested the download of the following files:\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221001_20221001_R20221017_AN04.nc - 82.48 MB - 2023-11-12T14:01:32.377000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221002_20221002_R20221017_AN05.nc - 82.77 MB - 2023-11-12T14:01:38.666000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221003_20221003_R20221017_AN06.nc - 82.81 MB - 2023-11-12T14:01:37.923000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221004_20221004_R20221017_AN07.nc - 82.64 MB - 2023-11-12T14:01:40.222000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221005_20221005_R20221024_AN01.nc - 82.31 MB - 2023-11-12T14:01:38.078000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221006_20221006_R20221024_AN02.nc - 82.45 MB - 2023-11-12T14:01:48.759000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221007_20221007_R20221024_AN03.nc - 82.41 MB - 2023-11-12T14:01:43.316000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221008_20221008_R20221024_AN04.nc - 82.48 MB - 2023-11-12T14:01:46.301000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221009_20221009_R20221024_AN05.nc - 82.24 MB - 2023-11-12T14:01:47.611000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221010_20221010_R20221024_AN06.nc - 82.04 MB - 2023-11-12T14:01:49.426000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221011_20221011_R20221024_AN07.nc - 82.18 MB - 2023-11-12T14:01:53.948000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221012_20221012_R20221031_AN01.nc - 82.30 MB - 2023-11-12T14:01:59.761000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221013_20221013_R20221031_AN02.nc - 82.36 MB - 2023-11-12T14:01:59.417000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221014_20221014_R20221031_AN03.nc - 82.37 MB - 2023-11-12T14:01:58.859000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221015_20221015_R20221031_AN04.nc - 82.11 MB - 2023-11-12T14:02:01.737000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221016_20221016_R20221031_AN05.nc - 82.03 MB - 2023-11-12T14:02:11.336000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221017_20221017_R20221031_AN06.nc - 81.82 MB - 2023-11-12T14:02:12.479000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221018_20221018_R20221031_AN07.nc - 81.89 MB - 2023-11-12T14:02:07.042000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221019_20221019_R20221107_AN01.nc - 81.66 MB - 2023-11-12T14:02:09.998000Z\n", - "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221020_20221020_R20221107_AN02.nc - 81.50 MB - 2023-11-12T14:02:13.928000Z\n", - "Printed 20 out of 757 files\n", - "\n", - "Total size of the download: 65.60 GB\n", - "\n", - "\n", - "Do you want to proceed with download? [Y/n]:" + "INFO - 2024-12-16T17:00:12Z - Selected dataset version: \"202411\"\n", + "INFO - 2024-12-16T17:00:12Z - Selected dataset part: \"default\"\n", + "INFO - 2024-12-16T17:00:12Z - Listing files on remote server...\n", + "1it [00:00, 2.30it/s]\n" ] } ], "source": [ "# Download all the files from a dataset\n", - "copernicusmarine.get(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\") " + "response_with_all_the_files = copernicusmarine.get(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\", dry_run=True) " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO - 2024-10-18T15:19:27Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", - "INFO - 2024-10-18T15:19:27Z - Dataset part was not specified, the first one was selected: \"default\"\n", - "INFO - 2024-10-18T15:19:27Z - Service was not specified, the default one was selected: \"original-files\"\n", - "INFO - 2024-10-18T15:19:27Z - Downloading using service original-files...\n", - "INFO - 2024-10-18T15:19:27Z - Listing files on remote server...\n", - "1it [00:00, 1.90it/s]\n", - "Downloading files: 100%|██████████| 2/2 [00:05<00:00, 2.75s/it]" + "INFO - 2024-12-16T17:01:44Z - Selected dataset version: \"202411\"\n", + "INFO - 2024-12-16T17:01:44Z - Selected dataset part: \"default\"\n", + "INFO - 2024-12-16T17:01:44Z - Listing files on remote server...\n", + "1it [00:00, 2.68it/s]\n", + "Downloading files: 100%|██████████| 2/2 [00:07<00:00, 3.50s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "data/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221001_20221001_R20221017_AN04.nc\n", - "data/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221003_20221003_R20221017_AN06.nc\n" + "data/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202411/2024/12/CMEMS_v8r1_IBI_BIO_NRT_NL_01dav_20241220_20241220_R20241212_FC09.nc\n", + "data/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202411/2024/12/CMEMS_v8r1_IBI_BIO_NRT_NL_01dav_20241221_20241221_R20241212_FC10.nc\n" ] }, { @@ -1778,8 +4288,8 @@ "source": [ "# You can combine the filter and regex argument (it will be as an \"OR\" condition)\n", "response = copernicusmarine.get(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\", \n", - " filter=\"*01dav_20221001_20221001_R20221017_AN04*\", \n", - " regex=\"01dav_20221003_20221003_R20221017_AN06\", \n", + " filter=\"*20241221_20241221_R20241212_FC10*\", \n", + " regex=\"20241220_20241220_R20241212_FC09\", \n", " output_directory=\"data\", # we can specify the output directory\n", " overwrite=True, # if files already exist, they will be overwritten\n", " )\n", @@ -1797,35 +4307,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO - 2024-10-18T15:20:33Z - You forced selection of dataset version \"202211\"\n", - "INFO - 2024-10-18T15:20:33Z - Dataset part was not specified, the first one was selected: \"default\"\n", - "INFO - 2024-10-18T15:20:33Z - Service was not specified, the default one was selected: \"original-files\"\n", - "INFO - 2024-10-18T15:20:33Z - Downloading using service original-files...\n", - "INFO - 2024-10-18T15:20:33Z - Listing files on remote server...\n", - "1it [00:00, 1.91it/s]\n", - "INFO - 2024-10-18T15:20:33Z - No data to download\n" + "INFO - 2024-12-16T17:06:33Z - Selected dataset version: \"202411\"\n", + "INFO - 2024-12-16T17:06:33Z - Selected dataset part: \"default\"\n", + "INFO - 2024-12-16T17:06:33Z - Listing files on remote server...\n", + "1it [00:00, 2.64it/s]\n", + "INFO - 2024-12-16T17:06:34Z - No data to download\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found CMEMS_v8r1_IBI_BIO_NRT_NL_01dav_20241220_20241220_R20241212_FC09.nc on server and it was IGNORED\n", + "Found CMEMS_v8r1_IBI_BIO_NRT_NL_01dav_20241221_20241221_R20241212_FC10.nc on server and it was IGNORED\n" ] } ], "source": [ - "response = copernicusmarine.get(\n", + "response_sync = copernicusmarine.get(\n", " dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\", \n", - " filter=\"*01dav_20221001_20221001_R20221017_AN04*\", \n", - " regex=\"01dav_20221003_20221003_R20221017_AN06\", \n", - " dataset_version=\"202211\", \n", + " filter=\"*20241221_20241221_R20241212_FC10*\", \n", + " regex=\"20241220_20241220_R20241212_FC09\", \n", + " dataset_version=\"202411\", \n", " output_directory=\"data\",\n", " sync=True,\n", " sync_delete=True, # delete the files that are not in the server\n", " max_concurrent_requests=0, # not in parallel\n", " # can be useful to be sure to not overload the process \n", - ")" + ")\n", + "\n", + "for file_metadata in response_sync.files:\n", + " print(f\"Found {file_metadata.filename} on server and it was {file_metadata.file_status}\")" ] }, { diff --git a/doc/usage/shared-options.rst b/doc/usage/shared-options.rst index 2062dd04..93771eda 100644 --- a/doc/usage/shared-options.rst +++ b/doc/usage/shared-options.rst @@ -6,12 +6,13 @@ Both ``subset`` and ``get`` commands provide these options. Some options are ava Option ``--overwrite`` and ``--skip-existing`` ************************************************ -By default, if the files already exist at the destination, new files will be created with a unique index (eg 'filename_(1).nc') if the file already exists. +By default, if the files already exist at the destination, new files will be created with a unique index (eg 'filename_(1).nc'). When ``--overwrite`` is specified, existing files will be overwritten. When ``--skip-existing`` is specified, the download of files that already exist at the output destination will be skipped. +The ``status`` and ``message`` in the response can indicate if the toolbox has overwritten or skipped a file. See in :ref:`Response types documentation ` the ``status`` and ``message`` fields for more information about request statuses. .. note:: @@ -20,7 +21,8 @@ See in :ref:`Response types documentation ` the ``status`` and ` Option ``--create-template`` ********************************* -This option creates a file in your current directory containing the request parameters. If specified, no other action will be performed. The file created will depend on the command used: +This option creates a file in your current directory containing the request parameters. +If specified, no other action will be performed. The file created will depend on the command used: - ``subset`` @@ -120,6 +122,8 @@ Option ``--credentials-file`` You can use the ``--credentials-file`` option to specify a credentials file. The file can be either ``.copernicusmarine-credentials``, ``motuclient-python.ini``, ``.netrc``, or ``_netrc``. +When using the option ``--check-credentials-valid`` with the ``login`` command, the ``--credentials-file`` option can be used the same way as with the ``subset`` and ``get`` commands. + .. _dataset version: Option ``--dataset-version``