From 7d8bfa87fd122e7797c9670cdcebc335bc14df88 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Mon, 22 Dec 2025 15:32:21 +0100 Subject: [PATCH] fix: documentation --- README.fr.md | 27 ++++++ README.md | 27 +++++- locale/fr/LC_MESSAGES/rougail_cli.po | 91 ++++++++++++++++-- locale/rougail_cli.pot | 66 +++++++++++-- src/rougail/cli/__main__.py | 2 +- src/rougail/cli/config.py | 21 ++-- .../cli/locale/fr/LC_MESSAGES/rougail_cli.mo | Bin 1158 -> 3269 bytes 7 files changed, 208 insertions(+), 26 deletions(-) create mode 100644 README.fr.md diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 0000000..b8c1979 --- /dev/null +++ b/README.fr.md @@ -0,0 +1,27 @@ +--- +gitea: none +include_toc: true +--- +[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md) + +## Options de la ligne de commande + +> [!NOTE] +> +> **Chemin** : cli + +| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------| +| **cli.config_file**
**Variable d'environnement** : CLI.CONFIG_FILE | Charger les paramètres de la ligne de commande depuis un fichier. | • .rougailcli.yml | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | | • le nom de fichier peut ĂŞtre une chemin relatif
• type de fichier autorisĂ©: "fichier" et "rĂ©pertoire". | +| **cli.debug**
**Ligne de commande** :
• --cli.debug
• --cli.no-debug
**Variable d'environnement** : CLI.DEBUG | Afficher les informations de debug. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | | +| **cli.warnings**
**Ligne de commande** :
• --cli.warnings
• --cli.no-warnings
**Variable d'environnement** : CLI.WARNINGS | Afficher les avertissements de chargement des options de la ligne de commande. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | | +| **cli.versions**
**Ligne de commande** :
• --cli.versions
• --cli.no-versions
**Variable d'environnement** : CLI.VERSIONS | Afficher la version de Rougail et de tous ces composants. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | | +| **cli.invalid_user_data_error**
**Ligne de commande** :
• --cli.invalid_user_data_error
• --cli.no-invalid_user_data_error
**Variable d'environnement** : CLI.INVALID_USER_DATA_ERROR | Les valeurs invalides dans les données utilisateur ne sont pas autorisées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | | +| **cli.unknown_user_data_error**
**Ligne de commande** :
• --cli.unknown_user_data_error
• --cli.no-unknown_user_data_error
**Variable d'environnement** : CLI.UNKNOWN_USER_DATA_ERROR | Les variables inconnues dans les données utilisateur ne sont pas autorisées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | | +| **cli.layers**
**Ligne de commande** :
• --cli.layers
• --cli.no-layers
**Variable d'environnement** : CLI.LAYERS | Charger chaque données utilisateurs dans des couches séparées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | *`cachée`*
**Cachée** : si seulement un type de données utilisateur est renseigné dans "[Sélection pour données utilisateur](#step.user_data)" | | +| **cli.read_write**
**Ligne de commande** :
• --cli.read_write
• --cli.no-read_write
**Variable d'environnement** : CLI.READ_WRITE | La configuration dans l'état de sortie est dans mode lecture-écriture. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | | +| **cli.description_type**
**Ligne de commande** : --cli.description_type
**Variable d'environnement** : CLI.DESCRIPTION_TYPE | Type de description des variables.
Pour identifier les différentes variables, on utilise la description de la variable. Il y a quatre type de descriptions:
- name_and_description : qui contient le nom de la variable suivi de sa description - path : le chemin de la variable - name : le nom de la variable - description : la description de la variable. | description | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | **Choix** :
• name_and_description
• path
• name
• description | +| **cli.inaccessible_read_write_modes**
**Ligne de commande** : --cli.inaccessible_read_write_modes
**Variable d'environnement** : CLI.INACCESSIBLE_READ_WRITE_MODES | Modes quoi doivent être inaccessible en mode lecture-écriture. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`désactivé`*
**Désactivé** : si aucun mode n'est défini dans "[Tous les niveaux de modes valides](#modes_level)" | `unique`
Un mode doit exister dans "[Tous les niveaux de modes valides](#modes_level)". | +| **cli.inaccessible_modes**
**Ligne de commande** : --cli.inaccessible_modes
**Variable d'environnement** : CLI.INACCESSIBLE_MODES | Modes quoi doivent être inaccessible. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`désactivé`*
**Désactivé** : si aucun mode n'est défini dans "[Tous les niveaux de modes valides](#modes_level)" | `unique`
Un mode doit exister dans "[Tous les niveaux de modes valides](#modes_level)". | + + diff --git a/README.md b/README.md index 302b615..8af073d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,27 @@ -# rougail-cli +--- +gitea: none +include_toc: true +--- +[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md) + +## Command line options + +> [!NOTE] +> +> **Path**: cli + +| Variable | Description | Default value | Type | Access control | Validator | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------| +| **cli.config_file**
**Environment variable**: CLI.CONFIG_FILE | Loads command line parameters from a file. | • .rougailcli.yml | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | | • this filename could be a relative path
• file type allowed: "directory" and "file". | +| **cli.debug**
**Command line**:
• --cli.debug
• --cli.no-debug
**Environment variable**: CLI.DEBUG | Displays debug informations. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | | +| **cli.warnings**
**Command line**:
• --cli.warnings
• --cli.no-warnings
**Environment variable**: CLI.WARNINGS | Displays command line option warnings informations. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | | +| **cli.versions**
**Command line**:
• --cli.versions
• --cli.no-versions
**Environment variable**: CLI.VERSIONS | Displays Rougail version and all its components. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | | +| **cli.invalid_user_data_error**
**Command line**:
• --cli.invalid_user_data_error
• --cli.no-invalid_user_data_error
**Environment variable**: CLI.INVALID_USER_DATA_ERROR | Invalid value in user data is not allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | | +| **cli.unknown_user_data_error**
**Command line**:
• --cli.unknown_user_data_error
• --cli.no-unknown_user_data_error
**Environment variable**: CLI.UNKNOWN_USER_DATA_ERROR | Unknown variable in user data is not allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | | +| **cli.layers**
**Command line**:
• --cli.layers
• --cli.no-layers
**Environment variable**: CLI.LAYERS | Open each user data in separate layers. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | *`hidden`*
**Hidden**: if only one user data is set in "[Select for user datas](#step.user_data)" | | +| **cli.read_write**
**Command line**:
• --cli.read_write
• --cli.no-read_write
**Environment variable**: CLI.READ_WRITE | Configuration in output step is in read_write mode. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | | +| **cli.description_type**
**Command line**: --cli.description_type
**Environment variable**: CLI.DESCRIPTION_TYPE | Type of variables description.
To identify different variables, we use the variable description. There are four types of description:
- name_and_description: which contains the variable name followed by its description - path: the variable's path - name: the variable name - description: the variable's description. | description | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | **Choices**:
• name_and_description
• path
• name
• description | +| **cli.inaccessible_read_write_modes**
**Command line**: --cli.inaccessible_read_write_modes
**Environment variable**: CLI.INACCESSIBLE_READ_WRITE_MODES | Modes that should not be accessible in read_write mode. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`disabled`*
**Disabled**: if any mode is set in "[All modes level available](#modes_level)" | `unique`
Mode must exists in "[All modes level available](#modes_level)". | +| **cli.inaccessible_modes**
**Command line**: --cli.inaccessible_modes
**Environment variable**: CLI.INACCESSIBLE_MODES | Modes that should not be accessible. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`disabled`*
**Disabled**: if any mode is set in "[All modes level available](#modes_level)" | `unique`
Mode must exists in "[All modes level available](#modes_level)". | + diff --git a/locale/fr/LC_MESSAGES/rougail_cli.po b/locale/fr/LC_MESSAGES/rougail_cli.po index 800fee5..e0181cd 100644 --- a/locale/fr/LC_MESSAGES/rougail_cli.po +++ b/locale/fr/LC_MESSAGES/rougail_cli.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2025-05-14 08:22+0200\n" -"PO-Revision-Date: 2025-05-14 08:22+0200\n" +"POT-Creation-Date: 2025-12-22 15:24+0100\n" +"PO-Revision-Date: 2025-12-22 15:28+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -14,17 +14,25 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 3.5\n" +"X-Generator: Poedit 3.8\n" -#: src/rougail/cli/__main__.py:170 +#: src/rougail/cli/__main__.py:237 msgid "cannot find \"user_data\" module \"{0}\"" msgstr "ne peut trouve le module \"user_data\" \"{0}\"" -#: src/rougail/cli/__main__.py:214 +#: src/rougail/cli/__main__.py:245 +msgid "" +"interactive user data \"{0}\" is loader before uninteractive user data " +"\"{1}\"" +msgstr "" +"Les données utilisateur interactifs \"{0}\" sont chargées avant les données " +"utilisateur non interactif \"{1}\"" + +#: src/rougail/cli/__main__.py:281 msgid "cannot find cli file for \"output_name\" module \"{0}\"" msgstr "ne peut trouve le fichier cli pour le module \"output_name\" \"{0}\"" -#: src/rougail/cli/__main__.py:240 +#: src/rougail/cli/__main__.py:306 msgid "ERROR: {0}" msgstr "ERREUR : {0}" @@ -40,14 +48,79 @@ msgstr "Charger les paramètres de la ligne de commande depuis un fichier" msgid "Displays debug informations" msgstr "Afficher les informations de debug" -#: src/rougail/cli/config.py:43 +#: src/rougail/cli/config.py:41 msgid "Displays command line option warnings informations" -msgstr "Afficher les avertissements de chargement des options de la ligne de commande" +msgstr "" +"Afficher les avertissements de chargement des options de la ligne de commande" -#: src/rougail/cli/config.py:47 +#: src/rougail/cli/config.py:43 msgid "Displays Rougail version and all its components" msgstr "Afficher la version de Rougail et de tous ces composants" +#: src/rougail/cli/config.py:45 +msgid "Invalid value in user data is not allowed" +msgstr "" +"Les valeurs invalides dans les données utilisateur ne sont pas autorisées" + +#: src/rougail/cli/config.py:47 +msgid "Unknown variable in user data is not allowed" +msgstr "" +"Les variables inconnues dans les données utilisateur ne sont pas autorisées" + +#: src/rougail/cli/config.py:50 +msgid "Open each user data in separate layers" +msgstr "Charger chaque données utilisateurs dans des couches séparées" + +#: src/rougail/cli/config.py:56 +msgid "if only one user data is set in \"__.step.user_data\"" +msgstr "" +"si seulement un type de données utilisateur est renseigné dans " +"\"__.step.user_data\"" + +#: src/rougail/cli/config.py:62 +msgid "Configuration in output step is in read_write mode" +msgstr "La configuration dans l'état de sortie est dans mode lecture-écriture" + +#: src/rougail/cli/config.py:65 +msgid "Type of variables description" +msgstr "Type de description des variables" + +#: src/rougail/cli/config.py:67 +msgid "" +"To identify different variables, we use the variable description. There are " +"four types of description:\n" +"\n" +" - name_and_description: which contains the variable name followed by " +"its description\n" +" - path: the variable's path\n" +" - name: the variable name\n" +" - description: the variable's description" +msgstr "" +"Pour identifier les différentes variables, on utilise la description de la " +"variable. Il y a quatre type de descriptions:\n" +"\n" +" - name_and_description : qui contient le nom de la variable suivi de sa " +"description\n" +" - path : le chemin de la variable\n" +" - name : le nom de la variable\n" +" - description : la description de la variable" + +#: src/rougail/cli/config.py:81 +msgid "Modes that should not be accessible in read_write mode" +msgstr "Modes quoi doivent être inaccessible en mode lecture-écriture" + +#: src/rougail/cli/config.py:88 src/rougail/cli/config.py:105 +msgid "if any mode is set in \"modes_level\"" +msgstr "si aucun mode n'est défini dans \"modes_level\"" + +#: src/rougail/cli/config.py:95 src/rougail/cli/config.py:112 +msgid "mode must exists in \"modes_level\"" +msgstr "un mode doit exister dans \"modes_level\"" + +#: src/rougail/cli/config.py:98 +msgid "Modes that should not be accessible" +msgstr "Modes quoi doivent être inaccessible" + #~ msgid "do not display debug informations" #~ msgstr "ne pas afficher les informations de debug" diff --git a/locale/rougail_cli.pot b/locale/rougail_cli.pot index d192443..2604ae3 100644 --- a/locale/rougail_cli.pot +++ b/locale/rougail_cli.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2025-05-14 08:25+0200\n" +"POT-Creation-Date: 2025-12-22 15:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,15 +15,19 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: src/rougail/cli/__main__.py:170 +#: src/rougail/cli/__main__.py:237 msgid "cannot find \"user_data\" module \"{0}\"" msgstr "" -#: src/rougail/cli/__main__.py:214 +#: src/rougail/cli/__main__.py:245 +msgid "interactive user data \"{0}\" is loader before uninteractive user data \"{1}\"" +msgstr "" + +#: src/rougail/cli/__main__.py:281 msgid "cannot find cli file for \"output_name\" module \"{0}\"" msgstr "" -#: src/rougail/cli/__main__.py:240 +#: src/rougail/cli/__main__.py:306 msgid "ERROR: {0}" msgstr "" @@ -39,11 +43,61 @@ msgstr "" msgid "Displays debug informations" msgstr "" -#: src/rougail/cli/config.py:43 +#: src/rougail/cli/config.py:41 msgid "Displays command line option warnings informations" msgstr "" -#: src/rougail/cli/config.py:47 +#: src/rougail/cli/config.py:43 msgid "Displays Rougail version and all its components" msgstr "" +#: src/rougail/cli/config.py:45 +msgid "Invalid value in user data is not allowed" +msgstr "" + +#: src/rougail/cli/config.py:47 +msgid "Unknown variable in user data is not allowed" +msgstr "" + +#: src/rougail/cli/config.py:50 +msgid "Open each user data in separate layers" +msgstr "" + +#: src/rougail/cli/config.py:56 +msgid "if only one user data is set in \"__.step.user_data\"" +msgstr "" + +#: src/rougail/cli/config.py:62 +msgid "Configuration in output step is in read_write mode" +msgstr "" + +#: src/rougail/cli/config.py:65 +msgid "Type of variables description" +msgstr "" + +#: src/rougail/cli/config.py:67 +msgid "" +"To identify different variables, we use the variable description. There are four types of description:\n" +"\n" +" - name_and_description: which contains the variable name followed by its description\n" +" - path: the variable's path\n" +" - name: the variable name\n" +" - description: the variable's description" +msgstr "" + +#: src/rougail/cli/config.py:81 +msgid "Modes that should not be accessible in read_write mode" +msgstr "" + +#: src/rougail/cli/config.py:88 src/rougail/cli/config.py:105 +msgid "if any mode is set in \"modes_level\"" +msgstr "" + +#: src/rougail/cli/config.py:95 src/rougail/cli/config.py:112 +msgid "mode must exists in \"modes_level\"" +msgstr "" + +#: src/rougail/cli/config.py:98 +msgid "Modes that should not be accessible" +msgstr "" + diff --git a/src/rougail/cli/__main__.py b/src/rougail/cli/__main__.py index 63fd277..0dd2a36 100644 --- a/src/rougail/cli/__main__.py +++ b/src/rougail/cli/__main__.py @@ -242,7 +242,7 @@ def load_user_data(rougailconfig): interactive_user_data.setdefault(layer_name, {})[user_data_name] = rougail_user_data continue elif interactive_user_data: - raise Exception(_(f'interactive user datas "{0}" is loader before uninteractive user datas "{1}"').format(list(interactive_user_data), user_data_name)) + raise Exception(_('interactive user data "{0}" is loader before uninteractive user data "{1}"').format(list(interactive_user_data), user_data_name)) for ud in rougail_user_data( subconfig, rougailconfig=rougailconfig, diff --git a/src/rougail/cli/config.py b/src/rougail/cli/config.py index 19f1c53..2c892bb 100644 --- a/src/rougail/cli/config.py +++ b/src/rougail/cli/config.py @@ -42,17 +42,18 @@ cli: versions: false # {_('Displays Rougail version and all its components')} - invalid_user_data_error: false # {_("Invalid value in user datas is not allowed")} + invalid_user_data_error: false # {_("Invalid value in user data is not allowed")} - unknown_user_data_error: false # {_("Unknown variable in user datas is not allowed")} + unknown_user_data_error: false # {_("Unknown variable in user data is not allowed")} layers: - description: {_('Open each user datas in separate layers')} + description: {_('Open each user data in separate layers')} default: false hidden: jinja: |- {{{{ __.step.user_data is propertyerror or __.step.user_data | length < 2 }}}} return_type: boolean + description: {_('if only one user data is set in "__.step.user_data"')} load_config: default: true @@ -82,15 +83,16 @@ cli: mandatory: false disabled: jinja: | - {{% if not modes_level %}} - No mode - {{% endif %}} + {{{{ not modes_level }}}} + return_type: boolean + description: {_('if any mode is set in "modes_level"')} validators: - type: jinja jinja: | {{% if _.inaccessible_read_write_modes not in modes_level %}} not in modes_level ({{modes_level}}) {{% endif %}} + description: {_('mode must exists in "modes_level"')} inaccessible_modes: description: {_('Modes that should not be accessible')} @@ -98,15 +100,16 @@ cli: mandatory: false disabled: jinja: | - {{% if not modes_level %}} - No mode - {{% endif %}} + {{{{ not modes_level }}}} + return_type: boolean + description: {_('if any mode is set in "modes_level"')} validators: - type: jinja jinja: | {{% if _.inaccessible_modes not in modes_level %}} not in modes_level ({{modes_level}}) {{% endif %}} + description: {_('mode must exists in "modes_level"')} """ return { "options": options, diff --git a/src/rougail/cli/locale/fr/LC_MESSAGES/rougail_cli.mo b/src/rougail/cli/locale/fr/LC_MESSAGES/rougail_cli.mo index 0ae6d5c6065bbfbe1698e9306e38f09efa62e015..84363d0b81a0b688db0409e021c32c07ea202129 100644 GIT binary patch literal 3269 zcmbVO&u<$=6ds_Z)ch{x1cZ;vr{0r)fUdEm+8j9mgYfMPg0S z;pY%Y`~83*$=)Bp7lBtEEaYwi8(4n@Yy*D+4uBW2*%I&zAk6p+uKMd#iBAAwo;_Bs z5t`2>`AHW{F{FhdRqRpRbRisnJ&fN+%IC*{aND03((cccT{DA$&=F6RmfWOH8Ex@W z$EufSf|guqZgQ9Aj$0>Ft}MODq=-5PnR1d3OeEQLWz$3qE#EPDPpE|N%gmBC85c>y zm9soFgVboLot??!-C+m#fylJdJ=!QX*}%I|QHf+X@6CT(+u7OLY4H!1KV<8AUnDBx z_{}A`np>IiNH{^RYvafrb08zOVMOGenmLe)Obn!h?>x@TfD0b0M6ykUXu0bPaV#?|5M!nU zHn$h}fg}U)QBL1-I2~rnA8LcQ`_SP6cWm;EyJ3ouOk5Re)oR>d0oO=F2WQu**l6*C zzJjBn(M~8$38`#G8ZcetmUoB##4FlU)2VR%)|~E=<@9nYL8j&#lxZn*%-l`mePT3QeUGE0lAcDyl;jRj1<56UpnSygI82g^BXDgOp^v zUNlgL0z0ImVzkK6HxbpRm5%(VQ&ZVaBKKudXOJ;E8REwu@~oOC(w$C&db2Tej46#O z7NJx7RUPjq?USJP(H30^_aK0FTP(hUu*era$gSh@ma^#MBMxq7=B5l?upR~P6n)>~ zwe787NA4?Pf#5nyxy75y&C9_`GiWyX%H>vb_5AY6@^WoMSQoT2p=~0Z$)LF*bT1b@ z8MLJsRMsstWo>hPb8WWEN@KYOx^n1-fQ}pWAaA*g;3B18#-VI6t@^Rb9NI8C~v07tW z1#P0Z(5+z79*zmmC9_GkA*f|4j2dBoo-B<=4uk?pYci)Km&maH74 zaOSL48JcW)Zf2n4wcQx<4utRdN5j#M|jAcN|Z(Z!A{7a#i@c8 z;BbzrP?luaHSa1i0C~^V?@g-RKAxRg`LqH*kt@AY{0c6 zWPTSZ4(7hYQBC|r0q$W6EsC*B0cAWiInEW$KOP|{ALur5bjkQ|+Xqa%KOPbBLw3q( z7eEVT?tBs|1X!kJBHG~V2_Isn?d5_ZrV&6Q6%Bir5r8Az%N3O~3KppY^=XXBBK?zn zxXsl*(u*?`RpV3sCbEYmC?o6v*koRRD(6Rvmpi)2RH))T*__+)kl|t=%tuTP&XUQB zVlAgCY66k!91{PpTv5iU#2+V@nH)TffKe}gUd))foE=9+%ZlYRNm43@iu&9#o16=DJEk7+S1YDcn#y0a48HXfDc77QKA-lAGZ vBFpg-!w;I3MSBxJ_k8n|3fD>V1nk-Bv$lsIhxQY3qt(|Z}npw z9oOO#-`S7D>S<;K+B9dHnJx8msWzO>L6n?dTvejpbsV>&Snr*sk?5Hl>fHU%7w=YY G3XfYP^&&O^