From 33998bc245f46a0218bf9e0052c95b11d69694e4 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Thu, 8 Jan 2026 20:23:09 +0100 Subject: [PATCH] [tutorial v1.1_098] A variable in avanced mode (config and doc) --- README.md | 110 ++++++++++++++++++++++++------------------- config/01/cmd_ro.txt | 2 +- config/02/cmd_ro.txt | 2 +- config/03/cmd_ro.txt | 2 +- config/04/cmd_ro.txt | 2 +- tree.html | 18 +++---- 6 files changed, 74 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index f4e2f78..145bff1 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ - [Summary](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/branch/1.1/README.md) -- [[tutorial v1.1_096] A boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_096/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_096~1..v1.1_096)) +- [[tutorial v1.1_097] A Jinja conditional disabled boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_097/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_097~1..v1.1_097)) -# [tutorial v1.1_097] A Jinja conditional disabled boolean variable +# [tutorial v1.1_098] A variable in avanced mode -[View the diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_097~1..v1.1_097) +[View the diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_098~1..v1.1_098) -[Read the documentation](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/calculation.html#a-jinja-conditional-disabled-boolean-variable) +[Read the documentation](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/calculation.html#a-variable-in-avanced-mode) ## Screenshot @@ -31,7 +31,7 @@ pip install rougail-cli rougail-output-exporter rougail-output-doc rougail-user- Then switch to the tutorial page: ```shell -git switch --detach v1.1_097 +git switch --detach v1.1_098 ``` ## Structure @@ -39,15 +39,15 @@ git switch --detach v1.1_097

-.
- └── firefox
-     ├── 00-proxy.yml
-     ├── 10-manual.yml
-     ├── 20-manual.yml
-     ├── 30-auto.yml
-     ├── 40-no_proxy.yml
-     ├── 50-prompt_authentication.yml
-     └── 55-proxy_dns_socks5.yml
+.
+ └── firefox
+     ├── 00-proxy.yml
+     ├── 10-manual.yml
+     ├── 20-manual.yml
+     ├── 30-auto.yml
+     ├── 40-no_proxy.yml
+     ├── 50-prompt_authentication.yml
+     └── 55-proxy_dns_socks5.yml


Contents of the firefox/55-proxy_dns_socks5.yml file @@ -59,6 +59,7 @@ version: 1.1 proxy_dns_socks5: description: Use proxy DNS when using SOCKS v5 + mode: advanced default: false disabled: jinja: |- @@ -78,34 +79,35 @@ proxy_dns_socks5: ### Let's generate the documentation ```shell -rougail -m firefox/ -o doc +rougail -m firefox/ --modes_level basic standard advanced -o doc ``` -| Variable | Description | -|------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **proxy_mode**
[`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | Configure Proxy Access to the Internet.
**Choices**:
• No proxy **← (default)**
• Auto-detect proxy settings for this network
• Use system proxy settings
• Manual proxy configuration
• Automatic proxy configuration URL | +| Variable | Description | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **proxy_mode**
[`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | Configure Proxy Access to the Internet.
**Choices**:
• No proxy **← (default)**
• Auto-detect proxy settings for this network
• Use system proxy settings
• Manual proxy configuration
• Automatic proxy configuration URL | #### Manual proxy configuration > [!NOTE] > > **Path**: manual\ -> *`disabled`*\ +> `basic` *`disabled`*\ > **Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" hasn't the value "Manual proxy configuration" ##### HTTP Proxy > [!NOTE] > -> **Path**: manual.http_proxy +> **Path**: manual.http_proxy\ +> `basic` -| Variable | Description | -|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **manual.http_proxy.address**
[`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | HTTP address.
**Validators**:
• type domainname
• the domain name can be an IP | -| **manual.http_proxy.port**
[`port`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | HTTP Port.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• private ports (greater than 49152) are allowed
**Default**: 8080 | +| Variable | Description | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **manual.http_proxy.address**
[`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | HTTP address.
**Validators**:
• type domainname
• the domain name can be an IP | +| **manual.http_proxy.port**
[`port`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | HTTP Port.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• private ports (greater than 49152) are allowed
**Default**: 8080 | -| Variable | Description | -|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------| -| **manual.use_for_https**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | Also use this proxy for HTTPS.
**Default**: true | +| Variable | Description | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------| +| **manual.use_for_https**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | Also use this proxy for HTTPS.
**Default**: true | ##### *HTTPS* Proxy or *SOCKS* Proxy @@ -115,37 +117,47 @@ rougail -m firefox/ -o doc > **Path**: > - manual.*https*_proxy > - manual.*socks*_proxy\ -> *`hidden`*\ +> `standard` *`hidden`*\ > **Hidden**: in HTTPS case if "[Also use this proxy for HTTPS](#manual.use_for_https)" is set to "true"\ > **Identifiers**: > - HTTPS > - SOCKS -| Variable | Description | -|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **manual.*https*_proxy.address**
**manual.*socks*_proxy.address**
[`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | *HTTPS* or *SOCKS* address.
**Validators**:
• type domainname
• the domain name can be an IP
**Default**: the value of the variable "[HTTP address](#manual.http_proxy.address)" | -| **manual.*https*_proxy.port**
**manual.*socks*_proxy.port**
[`port`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | *HTTPS* or *SOCKS* port.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• private ports (greater than 49152) are allowed
**Default**: the value of the variable "[HTTP Port](#manual.http_proxy.port)" | -| **manual.*https*_proxy.version**
**manual.*socks*_proxy.version**
[`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` *`disabled`* | SOCKS host version used by proxy.
**Choices**:
• v4
• v5 **← (default)**
**Disabled**: when the identifier is "HTTPS" | +| Variable | Description | +|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **manual.*https*_proxy.address**
**manual.*socks*_proxy.address**
[`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | *HTTPS* or *SOCKS* address.
**Validators**:
• type domainname
• the domain name can be an IP
**Default**: the value of the variable "[HTTP address](#manual.http_proxy.address)" | +| **manual.*https*_proxy.port**
**manual.*socks*_proxy.port**
[`port`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | *HTTPS* or *SOCKS* port.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• private ports (greater than 49152) are allowed
**Default**: the value of the variable "[HTTP Port](#manual.http_proxy.port)" | +| **manual.*https*_proxy.version**
**manual.*socks*_proxy.version**
[`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* | SOCKS host version used by proxy.
**Choices**:
• v4
• v5 **← (default)**
**Disabled**: when the identifier is "HTTPS" | -| Variable | Description | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **auto**
[`web address`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` *`disabled`* | Automatic proxy configuration URL.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• type domainname
• the domain name can be a hostname
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" hasn't the value "Automatic proxy configuration URL" | -| **no_proxy**
[`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` *`disabled`* `unique` | Address for which proxy will be desactivated.
Connections to localhost, 127.0.0.1/8 and ::1 are never proxied.
**Validators**:
• type domainname
• the domain name can starts by a dot
• the domain name can be a hostname
• the domain name can be an IP
• the domain name can be network in CIDR format
**Examples**:
• .mozilla.org
• .net.nz
• 192.168.1.0/24
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" has the value "No proxy" | -| **prompt_authentication**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` *`disabled`* | Prompt for authentication if password is saved.
**Default**: true
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" has the value "No proxy" | -| **proxy_dns_socks5**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` *`disabled`* | Use proxy DNS when using SOCKS v5.
**Default**: false
**Disabled**: if "firefox.proxy_mode" is not "Manual proxy configuration"
or "firefox.manual.socks_proxy.version" is "v4" | +| Variable | Description | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **auto**
[`web address`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` *`disabled`* | Automatic proxy configuration URL.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• type domainname
• the domain name can be a hostname
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" hasn't the value "Automatic proxy configuration URL" | +| **no_proxy**
[`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` `standard` *`disabled`* `unique` | Address for which proxy will be desactivated.
Connections to localhost, 127.0.0.1/8 and ::1 are never proxied.
**Validators**:
• type domainname
• the domain name can starts by a dot
• the domain name can be a hostname
• the domain name can be an IP
• the domain name can be network in CIDR format
**Examples**:
• .mozilla.org
• .net.nz
• 192.168.1.0/24
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" has the value "No proxy" | +| **prompt_authentication**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* | Prompt for authentication if password is saved.
**Default**: true
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" has the value "No proxy" | +| **proxy_dns_socks5**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `advanced` `mandatory` *`disabled`* | Use proxy DNS when using SOCKS v5.
**Default**: false
**Disabled**: if "firefox.proxy_mode" is not "Manual proxy configuration"
or "firefox.manual.socks_proxy.version" is "v4" | *** ### Let's generate the changelog ```shell -rougail -m firefox/ -o doc --doc.contents changelog +rougail -m firefox/ --modes_level basic standard advanced -o doc --doc.contents changelog ``` -#### Modified variable +#### Modified variables -| Variable | Description | -|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **proxy_dns_socks5**
[`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` *`disabled`* | Use proxy DNS when using SOCKS v5.
**Default**: false
**Disabled**: if "firefox.proxy_mode" is not "Manual proxy configuration"
or "firefox.manual.socks_proxy.version" is "v4"
| +| Variable | Description | +|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **proxy_mode**
~~`(None, [], ['standard'])`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | Configure Proxy Access to the Internet.
**Choices**:
• No proxy **← (default)**
• Auto-detect proxy settings for this network
• Use system proxy settings
• Manual proxy configuration
• Automatic proxy configuration URL | +| **manual.http_proxy.address**
~~`(None, [], ['basic'])`~~ [`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` | HTTP address.
**Validators**:
• type domainname
• the domain name can be an IP | +| **manual.http_proxy.port**
~~`(None, [], ['standard'])`~~ [`port`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | HTTP Port.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• private ports (greater than 49152) are allowed
**Default**: 8080 | +| **manual.use_for_https**
~~`(None, [], ['standard'])`~~ [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | Also use this proxy for HTTPS.
**Default**: true | +| **manual.*https*_proxy.address**
**manual.*socks*_proxy.address**
~~`(None, [], ['standard'])`~~ [`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | *HTTPS* or *SOCKS* address.
**Validators**:
• type domainname
• the domain name can be an IP
**Default**: the value of the variable "[HTTP address](#manual.http_proxy.address)" | +| **manual.*https*_proxy.port**
**manual.*socks*_proxy.port**
~~`(None, [], ['standard'])`~~ [`port`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | *HTTPS* or *SOCKS* port.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• private ports (greater than 49152) are allowed
**Default**: the value of the variable "[HTTP Port](#manual.http_proxy.port)" | +| **manual.*https*_proxy.version**
**manual.*socks*_proxy.version**
~~`(None, [], ['standard'])`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* | SOCKS host version used by proxy.
**Choices**:
• v4
• v5 **← (default)**
**Disabled**: when the identifier is "HTTPS" | +| **auto**
~~`(None, [], ['basic'])`~~ [`web address`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `basic` `mandatory` *`disabled`* | Automatic proxy configuration URL.
**Validators**:
• well-known ports (1 to 1023) are allowed
• registred ports (1024 to 49151) are allowed
• type domainname
• the domain name can be a hostname
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" hasn't the value "Automatic proxy configuration URL" | +| **no_proxy**
~~`(None, [], ['standard'])`~~ [`domainname`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` `standard` *`disabled`* `unique` | Address for which proxy will be desactivated.
Connections to localhost, 127.0.0.1/8 and ::1 are never proxied.
**Validators**:
• type domainname
• the domain name can starts by a dot
• the domain name can be a hostname
• the domain name can be an IP
• the domain name can be network in CIDR format
**Examples**:
• .mozilla.org
• .net.nz
• 192.168.1.0/24
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" has the value "No proxy" | +| **prompt_authentication**
~~`(None, [], ['standard'])`~~ [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` *`disabled`* | Prompt for authentication if password is saved.
**Default**: true
**Disabled**: when the variable "[Configure Proxy Access to the Internet](#proxy_mode)" has the value "No proxy" | +| **proxy_dns_socks5**
~~`(None, [], ['advanced'])`~~ [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `advanced` `mandatory` *`disabled`* | Use proxy DNS when using SOCKS v5.
**Default**: false
**Disabled**: if "firefox.proxy_mode" is not "Manual proxy configuration"
or "firefox.manual.socks_proxy.version" is "v4" | *** @@ -164,7 +176,7 @@ rougail -m firefox/ -o doc --doc.contents changelog #### Output ```shell -rougail -m firefox/ -u yaml -yf config/01/config.yml +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/01/config.yml ``` > [!NOTE] > @@ -193,7 +205,7 @@ manual: #### Output ```shell -rougail -m firefox/ -u yaml -yf config/02/config.yml +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/02/config.yml ``` > [!NOTE] > @@ -237,7 +249,7 @@ proxy_dns_socks5: true #### Output ```shell -rougail -m firefox/ -u yaml -yf config/03/config.yml +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/03/config.yml ``` > [!NOTE] > @@ -282,7 +294,7 @@ manual: #### Output ```shell -rougail -m firefox/ -u yaml -yf config/04/config.yml +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/04/config.yml ``` > [!NOTE] > @@ -309,4 +321,4 @@ Variables: *** -- [[tutorial v1.1_098] A variable in avanced mode](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_098/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_098~1..v1.1_098)) +- [[tutorial v1.1_100] A boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_100/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_100~1..v1.1_100)) diff --git a/config/01/cmd_ro.txt b/config/01/cmd_ro.txt index d46f944..9cdee2b 100644 --- a/config/01/cmd_ro.txt +++ b/config/01/cmd_ro.txt @@ -1 +1 @@ -rougail -m firefox/ -u yaml -yf config/01/config.yml \ No newline at end of file +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/01/config.yml \ No newline at end of file diff --git a/config/02/cmd_ro.txt b/config/02/cmd_ro.txt index 772ebbe..b9994d9 100644 --- a/config/02/cmd_ro.txt +++ b/config/02/cmd_ro.txt @@ -1 +1 @@ -rougail -m firefox/ -u yaml -yf config/02/config.yml \ No newline at end of file +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/02/config.yml \ No newline at end of file diff --git a/config/03/cmd_ro.txt b/config/03/cmd_ro.txt index fc8085e..0c8e904 100644 --- a/config/03/cmd_ro.txt +++ b/config/03/cmd_ro.txt @@ -1 +1 @@ -rougail -m firefox/ -u yaml -yf config/03/config.yml \ No newline at end of file +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/03/config.yml \ No newline at end of file diff --git a/config/04/cmd_ro.txt b/config/04/cmd_ro.txt index 4d43eae..84818e5 100644 --- a/config/04/cmd_ro.txt +++ b/config/04/cmd_ro.txt @@ -1 +1 @@ -rougail -m firefox/ -u yaml -yf config/04/config.yml \ No newline at end of file +rougail -m firefox/ --modes_level basic standard advanced -u yaml -yf config/04/config.yml \ No newline at end of file diff --git a/tree.html b/tree.html index ef1e6e5..997e292 100644 --- a/tree.html +++ b/tree.html @@ -1,11 +1,11 @@

-.
- └── firefox
-     ├── 00-proxy.yml
-     ├── 10-manual.yml
-     ├── 20-manual.yml
-     ├── 30-auto.yml
-     ├── 40-no_proxy.yml
-     ├── 50-prompt_authentication.yml
-     └── 55-proxy_dns_socks5.yml
+.
+ └── firefox
+     ├── 00-proxy.yml
+     ├── 10-manual.yml
+     ├── 20-manual.yml
+     ├── 30-auto.yml
+     ├── 40-no_proxy.yml
+     ├── 50-prompt_authentication.yml
+     └── 55-proxy_dns_socks5.yml


\ No newline at end of file