From d902a90cae2e2d2b012bbdf98b3633fa12396230 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 24 Mar 2026 10:29:44 +0100 Subject: [PATCH 1/3] Fix JBang metadata generation to detect all commands The PrepareCamelJBangCommandsMojo was not discovering all commands because: - It searched for `new CommandLine(main)` but CamelJBangMain uses `new CommandLine(this)` - The SUBCOMMAND_PATTERN regex only matched `(main)` constructor arg, not `(this)` This caused several commands and options to be missing from generated docs: - Missing `wrapper` command, `dataweave` subcommand - Missing `bind` deprecation notice - Wrong description for `--skip-plugins` option Co-Authored-By: Claude Opus 4.6 --- .../jbang-commands/camel-jbang-bind.adoc | 5 +++- .../jbang-commands/camel-jbang-commands.adoc | 3 +- .../jbang-commands/camel-jbang-debug.adoc | 2 +- .../pages/jbang-commands/camel-jbang-run.adoc | 2 +- .../camel-jbang-transform-dataweave.adoc | 29 +++++++++++++++++++ .../jbang-commands/camel-jbang-transform.adoc | 1 + .../jbang-commands/camel-jbang-wrapper.adoc | 28 ++++++++++++++++++ .../camel-jbang-commands-metadata.json | 11 +++---- .../PrepareCamelJBangCommandsMojo.java | 7 +++-- 9 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform-dataweave.adoc create mode 100644 docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-bind.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-bind.adoc index ed22844f67e52..741b2066dce9b 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-bind.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-bind.adoc @@ -2,7 +2,10 @@ // AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE = camel bind -Bind source and sink Kamelets as a new Camel integration +DEPRECATED: Bind source and sink Kamelets as a new Camel integration + + +CAUTION: This command is deprecated. == Usage diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-commands.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-commands.adoc index edfd48586a310..8d9e0406c6a9f 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-commands.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-commands.adoc @@ -11,7 +11,7 @@ TIP: You can also use `camel --help` or `camel --help` to see availabl [cols="2,5",options="header"] |=== | Command | Description -| xref:jbang-commands/camel-jbang-bind.adoc[camel bind] | Bind source and sink Kamelets as a new Camel integration +| xref:jbang-commands/camel-jbang-bind.adoc[camel bind] | DEPRECATED: Bind source and sink Kamelets as a new Camel integration | xref:jbang-commands/camel-jbang-catalog.adoc[camel catalog] | List artifacts from Camel Catalog | xref:jbang-commands/camel-jbang-cmd.adoc[camel cmd] | Performs commands in the running Camel integrations, such as start/stop route, or change logging levels. | xref:jbang-commands/camel-jbang-completion.adoc[camel completion] | Generate completion script for bash/zsh @@ -43,4 +43,5 @@ TIP: You can also use `camel --help` or `camel --help` to see availabl | xref:jbang-commands/camel-jbang-transform.adoc[camel transform] | Transform message or Camel routes | xref:jbang-commands/camel-jbang-update.adoc[camel update] | Update Camel project | xref:jbang-commands/camel-jbang-version.adoc[camel version] | Manage Camel versions +| xref:jbang-commands/camel-jbang-wrapper.adoc[camel wrapper] | Install Camel wrapper scripts for version pinning |=== diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc index f7bcff1d740bf..e56d29f27a385 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc @@ -83,7 +83,7 @@ camel debug [options] | `--show-exchange-properties` | Show exchange properties in debug messages | false | boolean | `--show-exchange-variables` | Show exchange variables in debug messages | true | boolean | `--show-headers` | Show message headers in debug messages | true | boolean -| `--skip-plugins` | Skip plugins during export | false | boolean +| `--skip-plugins` | Skip resolving plugin dependencies | false | boolean | `--source` | Prefer to display source filename/code instead of IDs | | boolean | `--source-dir` | Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time. | | String | `--spring-boot-version` | Spring Boot version | RuntimeType.SPRING_BOOT_VERSION | String diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc index 51f62b4859820..8d5576320735b 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc @@ -71,7 +71,7 @@ camel run [options] | `--reload,--dev` | Enables dev mode (live reload when source files are updated and saved) | | boolean | `--repo,--repos` | Additional maven repositories (Use commas to separate multiple repositories) | | String | `--runtime` | Runtime () | camel-main | RuntimeType -| `--skip-plugins` | Skip plugins during export | false | boolean +| `--skip-plugins` | Skip resolving plugin dependencies | false | boolean | `--source-dir` | Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time. | | String | `--spring-boot-version` | Spring Boot version | RuntimeType.SPRING_BOOT_VERSION | String | `--stub` | Stubs all the matching endpoint uri with the given component name or pattern. Multiple names can be separated by comma. (all = stub all endpoints). | | String diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform-dataweave.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform-dataweave.adoc new file mode 100644 index 0000000000000..27ce882fc4026 --- /dev/null +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform-dataweave.adoc @@ -0,0 +1,29 @@ + +// AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE += camel transform dataweave + +Convert DataWeave scripts to DataSonnet format + + +== Usage + +[source,bash] +---- +camel transform dataweave [options] +---- + + + +== Options + +[cols="2,5,1,2",options="header"] +|=== +| Option | Description | Default | Type +| `--expression,-e` | Inline DataWeave expression to convert | | String +| `--include-comments` | Include conversion notes as comments in output | true | boolean +| `--input,-i` | Input .dwl file or directory containing .dwl files | | String +| `--output,-o` | Output .ds file or directory (defaults to stdout) | | String +| `-h,--help` | Display the help and sub-commands | | boolean +|=== + + diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform.adoc index 782e71c87cef2..79c46f128eead 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-transform.adoc @@ -18,6 +18,7 @@ camel transform [options] [cols="2,5",options="header"] |=== | Subcommand | Description +| xref:jbang-commands/camel-jbang-transform-dataweave.adoc[dataweave] | Convert DataWeave scripts to DataSonnet format | xref:jbang-commands/camel-jbang-transform-message.adoc[message] | Transform message from one format to another via an existing running Camel integration | xref:jbang-commands/camel-jbang-transform-route.adoc[route] | Transform Camel routes to XML or YAML format |=== diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc new file mode 100644 index 0000000000000..85299e1738df0 --- /dev/null +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc @@ -0,0 +1,28 @@ + +// AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE += camel wrapper + +Install Camel wrapper scripts for version pinning + + +== Usage + +[source,bash] +---- +camel wrapper [options] +---- + + + +== Options + +[cols="2,5,1,2",options="header"] +|=== +| Option | Description | Default | Type +| `--camel-version` | Camel version to pin (defaults to current version) | | String +| `--dir,--directory` | Directory where wrapper files will be created | . | String +| `--repo-url` | Maven repository URL for downloading the launcher | DEFAULT_REPO_URL | String +| `-h,--help` | Display the help and sub-commands | | boolean +|=== + + diff --git a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json index 98bf97804a909..9dc900fd33d4f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json +++ b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json @@ -1,11 +1,11 @@ { "commands": [ - { "name": "bind", "fullName": "bind", "description": "Bind source and sink Kamelets as a new Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.bind.Bind", "options": [ { "names": "--error-handler", "description": "Add error handler (none|log|sink:). Sink endpoints are expected in the format [[apigroup\/]version:]kind:[namespace\/]name, plain Camel URIs or Kamelet name.", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Output format generated by this command (supports: file, yaml or json).", "defaultValue": "file", "javaType": "java.lang.String", "type": "string" }, { "names": "--property", "description": "Adds a pipe property in the form of [source|sink|error-handler|step-].= where is the step number starting from 1", "javaType": "java.lang.String", "type": "string" }, { "names": "--sink", "description": "Sink (to) such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--source", "description": "Source (from) such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--step", "description": "Optional steps such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, + { "name": "bind", "fullName": "bind", "description": "DEPRECATED: Bind source and sink Kamelets as a new Camel integration", "deprecated": true, "sourceClass": "org.apache.camel.dsl.jbang.core.commands.bind.Bind", "options": [ { "names": "--error-handler", "description": "Add error handler (none|log|sink:). Sink endpoints are expected in the format [[apigroup\/]version:]kind:[namespace\/]name, plain Camel URIs or Kamelet name.", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Output format generated by this command (supports: file, yaml or json).", "defaultValue": "file", "javaType": "java.lang.String", "type": "string" }, { "names": "--property", "description": "Adds a pipe property in the form of [source|sink|error-handler|step-].= where is the step number starting from 1", "javaType": "java.lang.String", "type": "string" }, { "names": "--sink", "description": "Sink (to) such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--source", "description": "Source (from) such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--step", "description": "Optional steps such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "catalog", "fullName": "catalog", "description": "List artifacts from Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "component", "fullName": "catalog component", "description": "List components from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogComponent", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "dataformat", "fullName": "catalog dataformat", "description": "List data formats from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDataFormat", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "dev-console", "fullName": "catalog dev-console", "description": "List dev-consoles from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDevConsole", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "kamelet", "fullName": "catalog kamelet", "description": "List Kamelets from the Kamelet Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogKamelet", "options": [ { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, type, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "--type,--filter-type", "description": "Filter by type: source, sink, or action", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "language", "fullName": "catalog language", "description": "List expression languages from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogLanguage", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "other", "fullName": "catalog other", "description": "List miscellaneous components from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogOther", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "transformer", "fullName": "catalog transformer", "description": "List data type transformers from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogTransformer", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "cmd", "fullName": "cmd", "description": "Performs commands in the running Camel integrations, such as start\/stop route, or change logging levels.", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "browse", "fullName": "cmd browse", "description": "Browse pending messages on endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelBrowseAction", "options": [ { "names": "--body-max-chars", "description": "Maximum size of the message body to include in the dump", "javaType": "int", "type": "integer" }, { "names": "--dump", "description": "Whether to include message dumps", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--endpoint", "description": "Endpoint to browse messages from (can be uri, pattern, or refer to a route id)", "javaType": "java.lang.String", "type": "string" }, { "names": "--fresh-size", "description": "Whether to calculate fresh queue size information (performance overhead)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--limit", "description": "Limits the number of messages to dump per endpoint", "defaultValue": "100", "javaType": "int", "type": "integer" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--only-body", "description": "Show only message body in browsed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in browsed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in browsed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by uri, or size", "defaultValue": "uri", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of messages from the end (latest) to dump", "javaType": "int", "type": "integer" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "disable-processor", "fullName": "cmd disable-processor", "description": "Disable Camel processor", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelProcessorDisableAction", "options": [ { "names": "--id", "description": "Processor ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "enable-processor", "fullName": "cmd enable-processor", "description": "Enable Camel processor", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelProcessorEnableAction", "options": [ { "names": "--id", "description": "Processor ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "gc", "fullName": "cmd gc", "description": "Trigger Java Memory Garbage Collector", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelGCAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "load", "fullName": "cmd load", "description": "Loads new source files into an existing Camel", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelLoadAction", "options": [ { "names": "--restart", "description": "To force restart all routes after loading source files", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Source file(s) to load", "javaType": "java.util.List", "type": "array" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "logger", "fullName": "cmd logger", "description": "List or change logging levels", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.LoggerAction", "options": [ { "names": "--logger", "description": "The logger name", "defaultValue": "root", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-level", "description": "To change logging level ()", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "receive", "fullName": "cmd receive", "description": "Receive and dump messages from remote endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelReceiveAction", "options": [ { "names": "--action", "description": "Action to start, stop, clear, status, or dump messages", "defaultValue": "status", "javaType": "java.lang.String", "type": "string" }, { "names": "--compact", "description": "Compact output (no empty line separating messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--endpoint,--uri", "description": "Endpoint to receive messages from (can be uri or pattern to refer to existing endpoint)", "javaType": "java.lang.String", "type": "string" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--follow", "description": "Keep following and outputting new messages (press enter to exit).", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--grep", "description": "Filter messages to only output matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--only-body", "description": "Show only message body in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--output", "description": "Output format (text or json)", "javaType": "java.lang.String", "type": "string" }, { "names": "--prefix", "description": "Print prefix with running Camel integration name. auto=only prefix when running multiple integrations. true=always prefix. false=prefix off.", "defaultValue": "auto", "javaType": "java.lang.String", "type": "string" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties; override existing (only applicable when NOT using an existing running Camel)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (only applicable when NOT using an existing running Camel) (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in received messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in received messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--since", "description": "Return messages newer than a relative duration like 5s, 2m, or 1h. The value is in seconds if no unit specified.", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age for showing status of messages", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of messages from the end to show. Use -1 to read from the beginning. Use 0 to read only new lines. Defaults to showing all messages from beginning.", "defaultValue": "-1", "javaType": "int", "type": "integer" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be received", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "reload", "fullName": "cmd reload", "description": "Trigger reloading Camel", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelReloadAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "reset-stats", "fullName": "cmd reset-stats", "description": "Reset performance statistics", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelResetStatsAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "resume-route", "fullName": "cmd resume-route", "description": "Resume Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteResumeAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route-structure", "fullName": "cmd route-structure", "description": "Dump Camel route structure", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStructureAction", "options": [ { "names": "--brief", "description": "To show less detailed route structure", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter route by filename or route id (multiple names can be separated by comma)", "javaType": "java.lang.String", "type": "string" }, { "names": "--raw", "description": "To output raw without metadata", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort route by name or id", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "send", "fullName": "cmd send", "description": "Send messages to endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelSendAction", "options": [ { "names": "--body", "description": "Message body to send (prefix with file: to refer to loading message body from file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--endpoint,--uri", "description": "Endpoint where to send the message (can be uri, pattern, or refer to a route id)", "javaType": "java.lang.String", "type": "string" }, { "names": "--header", "description": "Message header (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--infra", "description": "Send to infrastructure service (e.g., nats, kafka)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--poll", "description": "Poll instead of sending a message. This can be used to receive latest message from a Kafka topic or JMS queue.", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print response message body (InOut) when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties; override existing (only applicable when NOT using an existing running Camel)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (only applicable when NOT using an existing running Camel) (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--reply", "description": "Whether to expect a reply message (InOut vs InOut messaging style)", "javaType": "boolean", "type": "boolean" }, { "names": "--reply-file", "description": "Saves reply message to the file with the given name (override if exists)", "javaType": "java.lang.String", "type": "string" }, { "names": "--show-body", "description": "Show message body from response message (InOut)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties from response message (InOut)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables from response message (InOut)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers from response message (InOut)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be sent (and reply message if InOut messaging)", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "start-group", "fullName": "cmd start-group", "description": "Start Camel route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteGroupStartAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "start-route", "fullName": "cmd start-route", "description": "Start Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStartAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop-group", "fullName": "cmd stop-group", "description": "Stop Camel route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteGroupStopAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop-route", "fullName": "cmd stop-route", "description": "Stop Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStopAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stub", "fullName": "cmd stub", "description": "Browse stub endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelStubAction", "options": [ { "names": "--browse", "description": "Whether to browse messages queued in the stub endpoints", "javaType": "boolean", "type": "boolean" }, { "names": "--compact", "description": "Compact output (no empty line separating browsed messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter endpoints by queue name", "javaType": "java.lang.String", "type": "string" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--grep", "description": "Filter browsing messages to only output trace matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--limit", "description": "Filter browsing queues by limiting to the given latest number of messages", "defaultValue": "10", "javaType": "int", "type": "integer" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by name, or total", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "--top", "description": "Whether to browse top (latest) messages queued in the stub endpoints", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "suspend-route", "fullName": "cmd suspend-route", "description": "Suspend Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteSuspendAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "thread-dump", "fullName": "cmd thread-dump", "description": "List threads in a running Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelThreadDump", "options": [ { "names": "--depth", "description": "Max depth of stack-trace", "defaultValue": "1", "javaType": "int", "type": "integer" }, { "names": "--filter", "description": "Filter thread names\/ids (use all to include all threads)", "defaultValue": "Camel", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by id, name or state", "defaultValue": "id", "javaType": "java.lang.String", "type": "string" }, { "names": "--state", "description": "To only show threads for a given state", "javaType": "java.lang.String", "type": "string" }, { "names": "--trace", "description": "Include stack-traces", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "completion", "fullName": "completion", "description": "Generate completion script for bash\/zsh", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Complete", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "config", "fullName": "config", "description": "Get and set user configuration values", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get", "fullName": "config get", "description": "Display user configuration value", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigGet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "list", "fullName": "config list", "description": "Displays user configuration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigList", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "set", "fullName": "config set", "description": "Set user configuration value", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigSet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "unset", "fullName": "config unset", "description": "Remove user configuration value", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigUnset", "options": [ { "names": "--global", "description": "Use global or local configurations", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, - { "name": "debug", "fullName": "debug", "description": "Debug local Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Debug", "options": [ { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names": "--background", "description": "Run in the background", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--background-wait", "description": "To wait for run in background to startup successfully, before returning", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--backlog-trace", "description": "Enables backlog tracing of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--breakpoint", "description": "To set breakpoint at the given node id (Multiple ids can be separated by comma). If no breakpoint is set, then the first route is automatic selected.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-spring-boot-version", "description": "To run using a different Camel Spring Boot version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--code", "description": "Run the given text or file as Java DSL routes", "javaType": "java.lang.String", "type": "string" }, { "names": "--console", "description": "Developer console at \/q\/dev on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--empty", "description": "Run an empty Camel without loading source files", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version (used during exporting)", "javaType": "java.lang.String", "type": "string" }, { "names": "--health", "description": "Deprecated: use --observe instead. Health check at \/q\/health on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr", "description": "Enables Java Flight Recorder saving recording to disk on exit", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr-profile", "description": "Java Flight Recorder profile to use (such as default or profile)", "javaType": "java.lang.String", "type": "string" }, { "names": "--jvm-debug", "description": "To enable JVM remote debugging on port 4004 by default. The supported values are true to enable the remote debugging, false to disable the remote debugging or a number to use a custom port", "javaType": "int", "type": "integer", "paramLabel": "" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory (or github link) for loading Kamelets (takes precedence). Multiple directories can be specified separated by comma.", "javaType": "java.lang.String", "type": "string" }, { "names": "--log-lines", "description": "Number of log lines to display on top of screen", "defaultValue": "10", "javaType": "int", "type": "integer" }, { "names": "--logging", "description": "Can be used to turn off logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-category", "description": "Used for individual logging levels (ex: org.apache.kafka=DEBUG)", "javaType": "java.util.List", "type": "array" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-config-path", "description": "Path to file with custom logging configuration", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-json", "description": "Use JSON logging (ECS Layout)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level ()", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management (use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--max-idle-seconds", "description": "For how long time in seconds Camel can be idle before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-messages", "description": "Max number of messages to process before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-seconds", "description": "Max seconds to run before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--metrics", "description": "Deprecated: use --observe instead. Metrics (Micrometer and Prometheus) at \/q\/metrics on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--modeline", "description": "Whether to support JBang style \/\/DEPS to specify additional dependencies", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The name of the Camel application", "defaultValue": "CamelJBang", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "File to store the current message body (will override). This allows for manual inspecting the message later.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port (port 8080 by default; use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--profile", "description": "Profile to run (dev, test, or prod).", "defaultValue": "dev", "javaType": "java.lang.String", "type": "string" }, { "names": "--prompt", "description": "Allow user to type in required parameters in prompt if not present in application", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties (override existing)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--reload,--dev", "description": "Enables dev mode (live reload when source files are updated and saved)", "javaType": "boolean", "type": "boolean" }, { "names": "--remote-attach", "description": "Attaches debugger remotely to an existing running Camel integration. (Add camel-cli-debug JAR to the existing Camel application and run before attaching this debugger)", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--show-body", "description": "Show message body in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in debug messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--skip-plugins", "description": "Skip plugins during export", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Prefer to display source filename\/code instead of IDs", "javaType": "boolean", "type": "boolean" }, { "names": "--source-dir", "description": "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.", "javaType": "java.lang.String", "type": "string" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--stop-on-exit", "description": "Whether to stop the running Camel on exit", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--stub", "description": "Stubs all the matching endpoint uri with the given component name or pattern. Multiple names can be separated by comma. (all = stub all endpoints).", "javaType": "java.lang.String", "type": "string" }, { "names": "--timestamp", "description": "Print timestamp.", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--trace", "description": "Enables trace logging of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, + { "name": "debug", "fullName": "debug", "description": "Debug local Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Debug", "options": [ { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names": "--background", "description": "Run in the background", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--background-wait", "description": "To wait for run in background to startup successfully, before returning", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--backlog-trace", "description": "Enables backlog tracing of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--breakpoint", "description": "To set breakpoint at the given node id (Multiple ids can be separated by comma). If no breakpoint is set, then the first route is automatic selected.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-spring-boot-version", "description": "To run using a different Camel Spring Boot version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--code", "description": "Run the given text or file as Java DSL routes", "javaType": "java.lang.String", "type": "string" }, { "names": "--console", "description": "Developer console at \/q\/dev on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--empty", "description": "Run an empty Camel without loading source files", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version (used during exporting)", "javaType": "java.lang.String", "type": "string" }, { "names": "--health", "description": "Deprecated: use --observe instead. Health check at \/q\/health on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr", "description": "Enables Java Flight Recorder saving recording to disk on exit", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr-profile", "description": "Java Flight Recorder profile to use (such as default or profile)", "javaType": "java.lang.String", "type": "string" }, { "names": "--jvm-debug", "description": "To enable JVM remote debugging on port 4004 by default. The supported values are true to enable the remote debugging, false to disable the remote debugging or a number to use a custom port", "javaType": "int", "type": "integer", "paramLabel": "" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory (or github link) for loading Kamelets (takes precedence). Multiple directories can be specified separated by comma.", "javaType": "java.lang.String", "type": "string" }, { "names": "--log-lines", "description": "Number of log lines to display on top of screen", "defaultValue": "10", "javaType": "int", "type": "integer" }, { "names": "--logging", "description": "Can be used to turn off logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-category", "description": "Used for individual logging levels (ex: org.apache.kafka=DEBUG)", "javaType": "java.util.List", "type": "array" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-config-path", "description": "Path to file with custom logging configuration", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-json", "description": "Use JSON logging (ECS Layout)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level ()", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management (use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--max-idle-seconds", "description": "For how long time in seconds Camel can be idle before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-messages", "description": "Max number of messages to process before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-seconds", "description": "Max seconds to run before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--metrics", "description": "Deprecated: use --observe instead. Metrics (Micrometer and Prometheus) at \/q\/metrics on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--modeline", "description": "Whether to support JBang style \/\/DEPS to specify additional dependencies", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The name of the Camel application", "defaultValue": "CamelJBang", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "File to store the current message body (will override). This allows for manual inspecting the message later.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port (port 8080 by default; use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--profile", "description": "Profile to run (dev, test, or prod).", "defaultValue": "dev", "javaType": "java.lang.String", "type": "string" }, { "names": "--prompt", "description": "Allow user to type in required parameters in prompt if not present in application", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties (override existing)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--reload,--dev", "description": "Enables dev mode (live reload when source files are updated and saved)", "javaType": "boolean", "type": "boolean" }, { "names": "--remote-attach", "description": "Attaches debugger remotely to an existing running Camel integration. (Add camel-cli-debug JAR to the existing Camel application and run before attaching this debugger)", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--show-body", "description": "Show message body in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in debug messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--skip-plugins", "description": "Skip resolving plugin dependencies", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Prefer to display source filename\/code instead of IDs", "javaType": "boolean", "type": "boolean" }, { "names": "--source-dir", "description": "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.", "javaType": "java.lang.String", "type": "string" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--stop-on-exit", "description": "Whether to stop the running Camel on exit", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--stub", "description": "Stubs all the matching endpoint uri with the given component name or pattern. Multiple names can be separated by comma. (all = stub all endpoints).", "javaType": "java.lang.String", "type": "string" }, { "names": "--timestamp", "description": "Print timestamp.", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--trace", "description": "Enables trace logging of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "dependency", "fullName": "dependency", "description": "Displays all Camel dependencies required to run", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.DependencyCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "copy", "fullName": "dependency copy", "description": "Copies all Camel dependencies required to run to a specific directory", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.DependencyCopy", "options": [ { "names": "--build-property", "description": "Maven build properties, ex. --build-property=prop1=foo", "javaType": "java.util.List", "type": "array" }, { "names": "--camel-spring-boot-version", "description": "Camel version to use with Spring Boot", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To export using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--clean-dir", "description": "If exporting to current directory (default) then all existing files are preserved. Enabling this option will force cleaning current directory including all sub dirs (use this with care)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--dir,--directory", "description": "Directory where the project will be exported", "defaultValue": ".", "javaType": "java.lang.String", "type": "string" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version", "javaType": "java.lang.String", "type": "string" }, { "names": "--groovy-pre-compiled", "description": "Whether to include pre-compiled Groovy classes in the export (only supported with runtime=camel-main)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio", "description": "Whether to include Hawtio web console (only available for exporting to Spring Boot or Quarkus)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio-version", "description": "Version of the Hawtio web console", "defaultValue": "HawtioVersion.HAWTIO_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--java-version", "description": "Java version (21, 25)", "defaultValue": "21", "javaType": "java.lang.String", "type": "string" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory for loading Kamelets (takes precedence)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging", "description": "Can be used to turn on logging to console (logs by default to file in \/.camel directory)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--main-classname", "description": "The class name of the Camel Main application class", "defaultValue": "CamelApplication", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management", "javaType": "int", "type": "integer" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-wrapper", "description": "Include Maven Wrapper files in exported project", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The integration name. Use this when the name should not get derived otherwise.", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Output format (gav, maven, jbang)", "defaultValue": "gav", "javaType": "java.lang.String", "type": "string" }, { "names": "--output-directory", "description": "Directory where dependencies should be copied", "defaultValue": "lib", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--package-name", "description": "For Java source files should they have the given package name. By default the package name is computed from the Maven GAV. Use false to turn off and not include package name in the Java source files.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port", "javaType": "int", "type": "integer" }, { "names": "--profile", "description": "Profile to export (dev, test, or prod).", "javaType": "java.lang.String", "type": "string" }, { "names": "--prop,--property", "description": "Camel application properties, ex. --property=prop1=foo", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--quiet", "description": "Will be quiet, only print when error occurs", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--skip-plugins", "description": "Skip plugins during export", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "list", "fullName": "dependency list", "description": "Displays all Camel dependencies required to run", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.DependencyList", "options": [ { "names": "--build-property", "description": "Maven build properties, ex. --build-property=prop1=foo", "javaType": "java.util.List", "type": "array" }, { "names": "--camel-spring-boot-version", "description": "Camel version to use with Spring Boot", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To export using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--clean-dir", "description": "If exporting to current directory (default) then all existing files are preserved. Enabling this option will force cleaning current directory including all sub dirs (use this with care)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--dir,--directory", "description": "Directory where the project will be exported", "defaultValue": ".", "javaType": "java.lang.String", "type": "string" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version", "javaType": "java.lang.String", "type": "string" }, { "names": "--groovy-pre-compiled", "description": "Whether to include pre-compiled Groovy classes in the export (only supported with runtime=camel-main)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio", "description": "Whether to include Hawtio web console (only available for exporting to Spring Boot or Quarkus)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio-version", "description": "Version of the Hawtio web console", "defaultValue": "HawtioVersion.HAWTIO_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--java-version", "description": "Java version (21, 25)", "defaultValue": "21", "javaType": "java.lang.String", "type": "string" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory for loading Kamelets (takes precedence)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging", "description": "Can be used to turn on logging to console (logs by default to file in \/.camel directory)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--main-classname", "description": "The class name of the Camel Main application class", "defaultValue": "CamelApplication", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management", "javaType": "int", "type": "integer" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-wrapper", "description": "Include Maven Wrapper files in exported project", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The integration name. Use this when the name should not get derived otherwise.", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Output format (gav, maven, jbang)", "defaultValue": "gav", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-name", "description": "For Java source files should they have the given package name. By default the package name is computed from the Maven GAV. Use false to turn off and not include package name in the Java source files.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port", "javaType": "int", "type": "integer" }, { "names": "--profile", "description": "Profile to export (dev, test, or prod).", "javaType": "java.lang.String", "type": "string" }, { "names": "--prop,--property", "description": "Camel application properties, ex. --property=prop1=foo", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--quiet", "description": "Will be quiet, only print when error occurs", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--skip-plugins", "description": "Skip plugins during export", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "runtime", "fullName": "dependency runtime", "description": "Display Camel runtime and version for given Maven project", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.DependencyRuntime", "options": [ { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "update", "fullName": "dependency update", "description": "Updates dependencies in Maven pom.xml or Java source file (JBang style)", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.DependencyUpdate", "options": [ { "names": "--build-property", "description": "Maven build properties, ex. --build-property=prop1=foo", "javaType": "java.util.List", "type": "array" }, { "names": "--camel-spring-boot-version", "description": "Camel version to use with Spring Boot", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To export using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--clean", "description": "Regenerate list of dependencies (do not keep existing dependencies). Not supported for pom.xml", "javaType": "boolean", "type": "boolean" }, { "names": "--clean-dir", "description": "If exporting to current directory (default) then all existing files are preserved. Enabling this option will force cleaning current directory including all sub dirs (use this with care)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--dir,--directory", "description": "Directory where the project will be exported", "defaultValue": ".", "javaType": "java.lang.String", "type": "string" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version", "javaType": "java.lang.String", "type": "string" }, { "names": "--groovy-pre-compiled", "description": "Whether to include pre-compiled Groovy classes in the export (only supported with runtime=camel-main)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio", "description": "Whether to include Hawtio web console (only available for exporting to Spring Boot or Quarkus)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio-version", "description": "Version of the Hawtio web console", "defaultValue": "HawtioVersion.HAWTIO_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--java-version", "description": "Java version (21, 25)", "defaultValue": "21", "javaType": "java.lang.String", "type": "string" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory for loading Kamelets (takes precedence)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging", "description": "Can be used to turn on logging to console (logs by default to file in \/.camel directory)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--main-classname", "description": "The class name of the Camel Main application class", "defaultValue": "CamelApplication", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management", "javaType": "int", "type": "integer" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-wrapper", "description": "Include Maven Wrapper files in exported project", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The integration name. Use this when the name should not get derived otherwise.", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Output format (gav, maven, jbang)", "defaultValue": "gav", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-name", "description": "For Java source files should they have the given package name. By default the package name is computed from the Maven GAV. Use false to turn off and not include package name in the Java source files.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port", "javaType": "int", "type": "integer" }, { "names": "--profile", "description": "Profile to export (dev, test, or prod).", "javaType": "java.lang.String", "type": "string" }, { "names": "--prop,--property", "description": "Camel application properties, ex. --property=prop1=foo", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--quiet", "description": "Will be quiet, only print when error occurs", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--skip-plugins", "description": "Skip plugins during export", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "dirty", "fullName": "dirty", "description": "Check if there are dirty files from previous Camel runs that did not terminate gracefully", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.Dirty", "options": [ { "names": "--clean", "description": "Clean dirty files which are no longer in use", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "doc", "fullName": "doc", "description": "Shows documentation for kamelet, component, and other Camel resources", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDoc", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter option listed in tables by name, description, or group", "javaType": "java.lang.String", "type": "string" }, { "names": "--header", "description": "Whether to display component message headers", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--open-url", "description": "Opens the online documentation form the Camel website in the web browser", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--url", "description": "Prints the link to the online documentation on the Camel website", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, @@ -22,15 +22,16 @@ { "name": "nano", "fullName": "nano", "description": "Nano editor to edit file", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Nano", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "plugin", "fullName": "plugin", "description": "Manage plugins that add sub-commands to this CLI", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "add", "fullName": "plugin add", "description": "Add new plugin", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.plugin.PluginAdd", "options": [ { "names": "--artifactId", "description": "Maven artifactId", "javaType": "java.lang.String", "type": "string" }, { "names": "--command", "description": "The command that the plugin uses", "javaType": "java.lang.String", "type": "string" }, { "names": "--description", "description": "A short description of the plugin", "javaType": "java.lang.String", "type": "string" }, { "names": "--first-version", "description": "First version of this plugin", "defaultValue": "", "javaType": "java.lang.String", "type": "string" }, { "names": "--gav", "description": "Maven group and artifact coordinates.", "javaType": "java.lang.String", "type": "string" }, { "names": "--groupId", "description": "Maven groupId", "defaultValue": "org.apache.camel", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories to use for downloading the plugin (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--version", "description": "Maven artifact version", "defaultValue": "", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "delete", "fullName": "plugin delete", "description": "Removes a plugin", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.plugin.PluginDelete", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "get", "fullName": "plugin get", "description": "Display available plugins", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.plugin.PluginGet", "options": [ { "names": "--all", "description": "Display all available plugins", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repos", "description": "Display maven repository column", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "ps", "fullName": "ps", "description": "List running Camel integrations", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.ListProcess", "options": [ { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--pid", "description": "List only pid in the output", "javaType": "boolean", "type": "boolean" }, { "names": "--remote", "description": "Break down counters into remote\/total pairs", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by pid, name or age", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, - { "name": "run", "fullName": "run", "description": "Run as local Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Run", "options": [ { "names": "--background", "description": "Run in the background", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--background-wait", "description": "To wait for run in background to startup successfully, before returning", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--backlog-trace", "description": "Enables backlog tracing of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--camel-spring-boot-version", "description": "To run using a different Camel Spring Boot version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--code", "description": "Run the given text or file as Java DSL routes", "javaType": "java.lang.String", "type": "string" }, { "names": "--console", "description": "Developer console at \/q\/dev on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--empty", "description": "Run an empty Camel without loading source files", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version (used during exporting)", "javaType": "java.lang.String", "type": "string" }, { "names": "--health", "description": "Deprecated: use --observe instead. Health check at \/q\/health on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr", "description": "Enables Java Flight Recorder saving recording to disk on exit", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr-profile", "description": "Java Flight Recorder profile to use (such as default or profile)", "javaType": "java.lang.String", "type": "string" }, { "names": "--jvm-debug", "description": "To enable JVM remote debugging on port 4004 by default. The supported values are true to enable the remote debugging, false to disable the remote debugging or a number to use a custom port", "javaType": "int", "type": "integer", "paramLabel": "" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory (or github link) for loading Kamelets (takes precedence). Multiple directories can be specified separated by comma.", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging", "description": "Can be used to turn off logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-category", "description": "Used for individual logging levels (ex: org.apache.kafka=DEBUG)", "javaType": "java.util.List", "type": "array" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-config-path", "description": "Path to file with custom logging configuration", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-json", "description": "Use JSON logging (ECS Layout)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level ()", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management (use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--max-idle-seconds", "description": "For how long time in seconds Camel can be idle before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-messages", "description": "Max number of messages to process before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-seconds", "description": "Max seconds to run before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--metrics", "description": "Deprecated: use --observe instead. Metrics (Micrometer and Prometheus) at \/q\/metrics on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--modeline", "description": "Whether to support JBang style \/\/DEPS to specify additional dependencies", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The name of the Camel application", "defaultValue": "CamelJBang", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port (port 8080 by default; use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--profile", "description": "Profile to run (dev, test, or prod).", "defaultValue": "dev", "javaType": "java.lang.String", "type": "string" }, { "names": "--prompt", "description": "Allow user to type in required parameters in prompt if not present in application", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties (override existing)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--reload,--dev", "description": "Enables dev mode (live reload when source files are updated and saved)", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--skip-plugins", "description": "Skip plugins during export", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--source-dir", "description": "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.", "javaType": "java.lang.String", "type": "string" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--stub", "description": "Stubs all the matching endpoint uri with the given component name or pattern. Multiple names can be separated by comma. (all = stub all endpoints).", "javaType": "java.lang.String", "type": "string" }, { "names": "--trace", "description": "Enables trace logging of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, + { "name": "run", "fullName": "run", "description": "Run as local Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Run", "options": [ { "names": "--background", "description": "Run in the background", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--background-wait", "description": "To wait for run in background to startup successfully, before returning", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--backlog-trace", "description": "Enables backlog tracing of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--camel-spring-boot-version", "description": "To run using a different Camel Spring Boot version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--code", "description": "Run the given text or file as Java DSL routes", "javaType": "java.lang.String", "type": "string" }, { "names": "--console", "description": "Developer console at \/q\/dev on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--empty", "description": "Run an empty Camel without loading source files", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version (used during exporting)", "javaType": "java.lang.String", "type": "string" }, { "names": "--health", "description": "Deprecated: use --observe instead. Health check at \/q\/health on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr", "description": "Enables Java Flight Recorder saving recording to disk on exit", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr-profile", "description": "Java Flight Recorder profile to use (such as default or profile)", "javaType": "java.lang.String", "type": "string" }, { "names": "--jvm-debug", "description": "To enable JVM remote debugging on port 4004 by default. The supported values are true to enable the remote debugging, false to disable the remote debugging or a number to use a custom port", "javaType": "int", "type": "integer", "paramLabel": "" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory (or github link) for loading Kamelets (takes precedence). Multiple directories can be specified separated by comma.", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging", "description": "Can be used to turn off logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-category", "description": "Used for individual logging levels (ex: org.apache.kafka=DEBUG)", "javaType": "java.util.List", "type": "array" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-config-path", "description": "Path to file with custom logging configuration", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-json", "description": "Use JSON logging (ECS Layout)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level ()", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management (use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--max-idle-seconds", "description": "For how long time in seconds Camel can be idle before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-messages", "description": "Max number of messages to process before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-seconds", "description": "Max seconds to run before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--metrics", "description": "Deprecated: use --observe instead. Metrics (Micrometer and Prometheus) at \/q\/metrics on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--modeline", "description": "Whether to support JBang style \/\/DEPS to specify additional dependencies", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The name of the Camel application", "defaultValue": "CamelJBang", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port (port 8080 by default; use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--profile", "description": "Profile to run (dev, test, or prod).", "defaultValue": "dev", "javaType": "java.lang.String", "type": "string" }, { "names": "--prompt", "description": "Allow user to type in required parameters in prompt if not present in application", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties (override existing)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--reload,--dev", "description": "Enables dev mode (live reload when source files are updated and saved)", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--skip-plugins", "description": "Skip resolving plugin dependencies", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--source-dir", "description": "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.", "javaType": "java.lang.String", "type": "string" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--stub", "description": "Stubs all the matching endpoint uri with the given component name or pattern. Multiple names can be separated by comma. (all = stub all endpoints).", "javaType": "java.lang.String", "type": "string" }, { "names": "--trace", "description": "Enables trace logging of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "sbom", "fullName": "sbom", "description": "Generate a CycloneDX or SPDX SBOM for a specific project", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.SBOMGenerator", "options": [ { "names": "--build-property", "description": "Maven build properties, ex. --build-property=prop1=foo", "javaType": "java.util.List", "type": "array" }, { "names": "--camel-spring-boot-version", "description": "Camel version to use with Spring Boot", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To export using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--clean-dir", "description": "If exporting to current directory (default) then all existing files are preserved. Enabling this option will force cleaning current directory including all sub dirs (use this with care)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--cyclonedx-plugin-version", "description": "The CycloneDX Maven Plugin version", "defaultValue": "2.9.1", "javaType": "java.lang.String", "type": "string" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--dir,--directory", "description": "Directory where the project will be exported", "defaultValue": ".", "javaType": "java.lang.String", "type": "string" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version", "javaType": "java.lang.String", "type": "string" }, { "names": "--groovy-pre-compiled", "description": "Whether to include pre-compiled Groovy classes in the export (only supported with runtime=camel-main)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio", "description": "Whether to include Hawtio web console (only available for exporting to Spring Boot or Quarkus)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--hawtio-version", "description": "Version of the Hawtio web console", "defaultValue": "HawtioVersion.HAWTIO_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--java-version", "description": "Java version (21, 25)", "defaultValue": "21", "javaType": "java.lang.String", "type": "string" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory for loading Kamelets (takes precedence)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging", "description": "Can be used to turn on logging to console (logs by default to file in \/.camel directory)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--main-classname", "description": "The class name of the Camel Main application class", "defaultValue": "CamelApplication", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management", "javaType": "int", "type": "integer" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-wrapper", "description": "Include Maven Wrapper files in exported project", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The integration name. Use this when the name should not get derived otherwise.", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output-directory", "description": "Directory where the SBOM will be saved", "defaultValue": ".", "javaType": "java.lang.String", "type": "string" }, { "names": "--output-name", "description": "Output name of the SBOM file", "defaultValue": "sbom", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-name", "description": "For Java source files should they have the given package name. By default the package name is computed from the Maven GAV. Use false to turn off and not include package name in the Java source files.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port", "javaType": "int", "type": "integer" }, { "names": "--profile", "description": "Profile to export (dev, test, or prod).", "javaType": "java.lang.String", "type": "string" }, { "names": "--prop,--property", "description": "Camel application properties, ex. --property=prop1=foo", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--quiet", "description": "Will be quiet, only print when error occurs", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--sbom-format", "description": "The SBOM format, possible values are cyclonedx or spdx", "defaultValue": "CYCLONEDX_FORMAT", "javaType": "java.lang.String", "type": "string" }, { "names": "--sbom-output-format", "description": "The SBOM output format, possible values are json or xml", "defaultValue": "SBOM_JSON_FORMAT", "javaType": "java.lang.String", "type": "string" }, { "names": "--skip-plugins", "description": "Skip plugins during export", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--spdx-plugin-version", "description": "The SPDX Maven Plugin version", "defaultValue": "0.7.4", "javaType": "java.lang.String", "type": "string" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "script", "fullName": "script", "description": "Run Camel integration as shell script for terminal scripting", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Script", "options": [ { "names": "--logging", "description": "Can be used to turn on logging (logs to file in \/.camel directory)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level ()", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--max-idle-seconds", "description": "For how long time in seconds Camel can be idle before stopping", "defaultValue": "1", "javaType": "int", "type": "integer" }, { "names": "--max-messages", "description": "Max number of messages to process before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-seconds", "description": "Max seconds to run before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--prop,--property", "description": "Additional properties (override existing)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "Load properties file for route placeholders (ex. \/path\/to\/file.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "shell", "fullName": "shell", "description": "Interactive Camel JBang shell.", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Shell", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop", "fullName": "stop", "description": "Shuts down running Camel integrations", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.StopProcess", "options": [ { "names": "--kill", "description": "To force killing the process (SIGKILL)", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "top", "fullName": "top", "description": "Top status of Camel integrations", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.CamelTop", "options": [ { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "context", "fullName": "top context", "description": "Top status of Camel integrations", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.CamelContextTop", "options": [ { "names": "--sort", "description": "Sort by pid, name, mem, or age", "defaultValue": "mem", "javaType": "java.lang.String", "type": "string" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "group", "fullName": "top group", "description": "Top performing route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.CamelRouteGroupTop", "options": [ { "names": "--filter", "description": "Filter groups by name", "javaType": "java.lang.String", "type": "string" }, { "names": "--filter-mean", "description": "Filter groups that must be slower than the given time (ms)", "javaType": "long", "type": "integer" }, { "names": "--limit", "description": "Filter groups by limiting to the given number of rows", "javaType": "int", "type": "integer" }, { "names": "--running", "description": "Only include running groups", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by pid, name, age or group", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "processor", "fullName": "top processor", "description": "Top performing processors", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.CamelProcessorTop", "options": [ { "names": "--description", "description": "Include description in the ID column (if available)", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter processors by id", "javaType": "java.lang.String", "type": "string" }, { "names": "--filter-mean", "description": "Filter processors that must be slower than the given time (ms)", "javaType": "long", "type": "integer" }, { "names": "--group", "description": "Filter processors by group", "javaType": "java.lang.String", "type": "string" }, { "names": "--limit", "description": "Filter routes by limiting to the given number of rows", "javaType": "int", "type": "integer" }, { "names": "--note", "description": "Include note in the ID column (if available)", "javaType": "boolean", "type": "boolean" }, { "names": "--remote", "description": "Break down counters into remote\/total pairs", "javaType": "boolean", "type": "boolean" }, { "names": "--running", "description": "Only include running processors", "javaType": "boolean", "type": "boolean" }, { "names": "--show-group", "description": "Include group column", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by pid or name", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--source", "description": "Prefer to display source filename\/code instead of IDs", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route", "fullName": "top route", "description": "Top performing routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.CamelRouteTop", "options": [ { "names": "--description", "description": "Include description in the ID column (if available)", "javaType": "boolean", "type": "boolean" }, { "names": "--error", "description": "Shows detailed information for routes that has error status", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter routes by id, or url", "javaType": "java.lang.String", "type": "string" }, { "names": "--filter-mean", "description": "Filter routes that must be slower than the given time (ms)", "javaType": "long", "type": "integer" }, { "names": "--group", "description": "Filter routes by group", "javaType": "java.lang.String", "type": "string" }, { "names": "--limit", "description": "Filter routes by limiting to the given number of rows", "javaType": "int", "type": "integer" }, { "names": "--note", "description": "Include note in the ID column (if available)", "javaType": "boolean", "type": "boolean" }, { "names": "--running", "description": "Only include running routes", "javaType": "boolean", "type": "boolean" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-group", "description": "Include group column", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by pid, name or age", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--source", "description": "Prefer to display source filename\/code instead of IDs", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "source", "fullName": "top source", "description": "List top processors (source) in a running Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelSourceTop", "options": [ { "names": "--filter-mean", "description": "Filter processors that must be slower than the given time (ms)", "javaType": "long", "type": "integer" }, { "names": "--limit", "description": "Filter processors by limiting to the given number of rows", "javaType": "int", "type": "integer" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "trace", "fullName": "trace", "description": "Tail message traces from running Camel integrations", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelTraceAction", "options": [ { "names": "--action", "description": "Action to start, stop, clear, list status, or dump traces", "defaultValue": "status", "javaType": "java.lang.String", "type": "string" }, { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names": "--compact", "description": "Compact output (no empty line separating traced messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--depth", "description": "Depth of tracing. 0=Created Completed. 1=All events on 1st route, 2=All events on 1st 2nd depth, and so on. 9 = all events on every depth.", "defaultValue": "9", "javaType": "int", "type": "integer" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--follow", "description": "Keep following and outputting new traces (press enter to exit).", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--grep", "description": "Filter traces to only output trace matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--latest", "description": "Only output traces from the latest (follow if necessary until complete and exit)", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--prefix", "description": "Print prefix with running Camel integration name. auto=only prefix when running multiple integrations. true=always prefix. false=prefix off.", "defaultValue": "auto", "javaType": "java.lang.String", "type": "string" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in traced messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--since", "description": "Return traces newer than a relative duration like 5s, 2m, or 1h. The value is in seconds if no unit specified.", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age for showing status of tracing", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--source", "description": "Prefer to display source filename\/code instead of IDs", "javaType": "boolean", "type": "boolean" }, { "names": "--tail", "description": "The number of traces from the end of the trace to show. Use -1 to read from the beginning. Use 0 to read only new lines. Defaults to showing all traces from beginning.", "defaultValue": "-1", "javaType": "int", "type": "integer" }, { "names": "--timestamp", "description": "Print timestamp.", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, - { "name": "transform", "fullName": "transform", "description": "Transform message or Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.TransformCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "message", "fullName": "transform message", "description": "Transform message from one format to another via an existing running Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.TransformMessageAction", "options": [ { "names": "--body", "description": "Message body to send (prefix with file: to refer to loading message body from file)", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--component", "description": "The component to use for message transformation", "javaType": "java.lang.String", "type": "string" }, { "names": "--dataformat", "description": "The dataformat to use for message transformation", "javaType": "java.lang.String", "type": "string" }, { "names": "--header", "description": "Message header (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--language", "description": "The language to use for message transformation", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--option", "description": "Option for additional configuration of the used language, component or dataformat (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--output", "description": "File to store output. If none provide then output is printed to console.", "javaType": "java.lang.String", "type": "string" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--show-body", "description": "Show message body from the output message", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed transformation", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties from the output message", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers from the output message", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Instead of using external template file then refer to an existing Camel route source with inlined Camel language expression in a route. (use :line-number or :id to refer to the exact location of the EIP to use)", "javaType": "java.lang.String", "type": "string" }, { "names": "--template", "description": "The template to use for message transformation (prefix with file: to refer to loading template from file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be transformed", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route", "fullName": "transform route", "description": "Transform Camel routes to XML or YAML format", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.TransformRoute", "options": [ { "names": "--format", "description": "Output format (xml or yaml), if only yaml files are provided, the format defaults to xml and vice versa", "javaType": "java.lang.String", "type": "string" }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "javaType": "boolean", "type": "boolean" }, { "names": "--output", "description": "File or directory to store transformed files. If none provide then output is printed to console. Use clipboard as name to copy content into clipboard.", "javaType": "java.lang.String", "type": "string" }, { "names": "--resolve-placeholders", "description": "Whether to resolve property placeholders in the dumped output", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--uri-as-parameters", "description": "Whether to expand URIs into separated key\/value parameters (only in use for YAML format)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, + { "name": "transform", "fullName": "transform", "description": "Transform message or Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.TransformCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "dataweave", "fullName": "transform dataweave", "description": "Convert DataWeave scripts to DataSonnet format", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.TransformDataWeave", "options": [ { "names": "--expression,-e", "description": "Inline DataWeave expression to convert", "javaType": "java.lang.String", "type": "string" }, { "names": "--include-comments", "description": "Include conversion notes as comments in output", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--input,-i", "description": "Input .dwl file or directory containing .dwl files", "javaType": "java.lang.String", "type": "string" }, { "names": "--output,-o", "description": "Output .ds file or directory (defaults to stdout)", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "message", "fullName": "transform message", "description": "Transform message from one format to another via an existing running Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.TransformMessageAction", "options": [ { "names": "--body", "description": "Message body to send (prefix with file: to refer to loading message body from file)", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--component", "description": "The component to use for message transformation", "javaType": "java.lang.String", "type": "string" }, { "names": "--dataformat", "description": "The dataformat to use for message transformation", "javaType": "java.lang.String", "type": "string" }, { "names": "--header", "description": "Message header (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--language", "description": "The language to use for message transformation", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--option", "description": "Option for additional configuration of the used language, component or dataformat (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--output", "description": "File to store output. If none provide then output is printed to console.", "javaType": "java.lang.String", "type": "string" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--show-body", "description": "Show message body from the output message", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed transformation", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties from the output message", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers from the output message", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Instead of using external template file then refer to an existing Camel route source with inlined Camel language expression in a route. (use :line-number or :id to refer to the exact location of the EIP to use)", "javaType": "java.lang.String", "type": "string" }, { "names": "--template", "description": "The template to use for message transformation (prefix with file: to refer to loading template from file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be transformed", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route", "fullName": "transform route", "description": "Transform Camel routes to XML or YAML format", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.TransformRoute", "options": [ { "names": "--format", "description": "Output format (xml or yaml), if only yaml files are provided, the format defaults to xml and vice versa", "javaType": "java.lang.String", "type": "string" }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "javaType": "boolean", "type": "boolean" }, { "names": "--output", "description": "File or directory to store transformed files. If none provide then output is printed to console. Use clipboard as name to copy content into clipboard.", "javaType": "java.lang.String", "type": "string" }, { "names": "--resolve-placeholders", "description": "Whether to resolve property placeholders in the dumped output", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--uri-as-parameters", "description": "Whether to expand URIs into separated key\/value parameters (only in use for YAML format)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "update", "fullName": "update", "description": "Update Camel project", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.update.UpdateCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "list", "fullName": "update list", "description": "List available update versions for Camel and its runtime variants", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.update.UpdateList", "options": [ { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--use-cache", "description": "Use Maven cache", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "run", "fullName": "update run", "description": "Update Camel project", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.update.UpdateRun", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, - { "name": "version", "fullName": "version", "description": "Manage Camel versions", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get", "fullName": "version get", "description": "Displays current Camel version", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionGet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "list", "fullName": "version list", "description": "Displays available Camel versions", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionList", "options": [ { "names": "--date-format", "description": "The format to show the date (such as dd-MM-yyyy)", "defaultValue": "DEFAULT_DATE_FORMAT", "javaType": "java.lang.String", "type": "string" }, { "names": "--days", "description": "Whether to include days since release", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--eol", "description": "Include releases that are end-of-life", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--from-date", "description": "Filter by release date (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--from-version", "description": "Filter by Camel version (inclusive). Will start from 4.0 if no version ranges provided.", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--lts", "description": "Only show LTS supported releases", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--patch", "description": "Whether to include patch releases (x.y.z)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--rc", "description": "Include also milestone or RC releases", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--sort", "description": "Sort by (version, date, or days)", "defaultValue": "version", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of lines from the end of the table to show.", "javaType": "int", "type": "integer" }, { "names": "--to-date", "description": "Filter by release date (exclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--to-version", "description": "Filter by Camel version (exclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--vendor", "description": "Vendor of Apache Camel distribution to use when filtering versions", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "set", "fullName": "version set", "description": "Set\/change current Camel version", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionSet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Maven repository for downloading the dependencies (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--reset", "description": "Reset by removing any custom version settings", "javaType": "boolean", "type": "boolean" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] } + { "name": "version", "fullName": "version", "description": "Manage Camel versions", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get", "fullName": "version get", "description": "Displays current Camel version", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionGet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "list", "fullName": "version list", "description": "Displays available Camel versions", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionList", "options": [ { "names": "--date-format", "description": "The format to show the date (such as dd-MM-yyyy)", "defaultValue": "DEFAULT_DATE_FORMAT", "javaType": "java.lang.String", "type": "string" }, { "names": "--days", "description": "Whether to include days since release", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--eol", "description": "Include releases that are end-of-life", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--from-date", "description": "Filter by release date (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--from-version", "description": "Filter by Camel version (inclusive). Will start from 4.0 if no version ranges provided.", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--lts", "description": "Only show LTS supported releases", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--patch", "description": "Whether to include patch releases (x.y.z)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--rc", "description": "Include also milestone or RC releases", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--sort", "description": "Sort by (version, date, or days)", "defaultValue": "version", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of lines from the end of the table to show.", "javaType": "int", "type": "integer" }, { "names": "--to-date", "description": "Filter by release date (exclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--to-version", "description": "Filter by Camel version (exclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--vendor", "description": "Vendor of Apache Camel distribution to use when filtering versions", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "set", "fullName": "version set", "description": "Set\/change current Camel version", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionSet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Maven repository for downloading the dependencies (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--reset", "description": "Reset by removing any custom version settings", "javaType": "boolean", "type": "boolean" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, + { "name": "wrapper", "fullName": "wrapper", "description": "Install Camel wrapper scripts for version pinning", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.WrapperCommand", "options": [ { "names": "--camel-version", "description": "Camel version to pin (defaults to current version)", "javaType": "java.lang.String", "type": "string" }, { "names": "--dir,--directory", "description": "Directory where wrapper files will be created", "defaultValue": ".", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo-url", "description": "Maven repository URL for downloading the launcher", "defaultValue": "DEFAULT_REPO_URL", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelJBangCommandsMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelJBangCommandsMojo.java index 078fccd7d1625..65d63110eb78f 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelJBangCommandsMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelJBangCommandsMojo.java @@ -56,9 +56,9 @@ requiresDependencyResolution = ResolutionScope.COMPILE) public class PrepareCamelJBangCommandsMojo extends AbstractGeneratorMojo { - // Pattern to match .addSubcommand("name", new CommandLine(new ClassName(main)) + // Pattern to match .addSubcommand("name", new CommandLine(new ClassName(this/main)) private static final Pattern SUBCOMMAND_PATTERN = Pattern.compile( - "\\.addSubcommand\\(\\s*\"([^\"]+)\"\\s*,\\s*new\\s+CommandLine\\(\\s*new\\s+([A-Za-z0-9_]+)\\s*\\(\\s*main\\s*\\)\\s*\\)"); + "\\.addSubcommand\\(\\s*\"([^\"]+)\"\\s*,\\s*new\\s+CommandLine\\(\\s*new\\s+([A-Za-z0-9_]+)\\s*\\(\\s*(?:this|main)\\s*\\)\\s*\\)"); @Parameter(defaultValue = "${project.basedir}/src/generated/resources") protected File outFolder; @@ -164,7 +164,8 @@ private void parseCommandHierarchy( // Find the start of the commandLine builder chain int startLine = -1; for (int i = 0; i < lines.size(); i++) { - if (lines.get(i).contains("commandLine = new CommandLine(main)")) { + if (lines.get(i).contains("commandLine = new CommandLine(this)") + || lines.get(i).contains("commandLine = new CommandLine(main)")) { startLine = i; break; } From 3445a17c1cf83f721f4b313754893f06a864de9a Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 24 Mar 2026 16:06:19 +0100 Subject: [PATCH 2/3] CAMEL-21975: Add route-diagram command to display Camel route diagrams in terminal Add a lightweight `camel cmd route-diagram` command that renders Camel route diagrams directly in the terminal using JLine 4's graphics protocol support (Kitty/Sixel/iTerm2 inline images). Features: - Tree-based layout with horizontal branching for EIPs (choice, multicast, doTry, etc.) - Merge lines showing branch convergence - Color-coded nodes by type (from, to, EIP, choice, default) - Customizable color themes via --theme/--colors option or DIAGRAM_COLORS env var - Built-in presets: dark, light, transparent - PNG file export via --output option - Fallback to text-based diagram for terminals without graphics support Co-Authored-By: Claude Opus 4.6 --- .../camel-jbang-cmd-route-diagram.adoc | 29 + .../pages/jbang-commands/camel-jbang-cmd.adoc | 1 + .../camel-jbang-commands-metadata.json | 2 +- .../jbang/core/commands/CamelJBangMain.java | 1 + .../action/CamelRouteDiagramAction.java | 750 ++++++++++++++++++ 5 files changed, 782 insertions(+), 1 deletion(-) create mode 100644 docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc create mode 100644 dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc new file mode 100644 index 0000000000000..73ac68717fde8 --- /dev/null +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd-route-diagram.adoc @@ -0,0 +1,29 @@ + +// AUTO-GENERATED by camel-package-maven-plugin - DO NOT EDIT THIS FILE += camel cmd route-diagram + +Display Camel route diagram in the terminal + + +== Usage + +[source,bash] +---- +camel cmd route-diagram [options] +---- + + + +== Options + +[cols="2,5,1,2",options="header"] +|=== +| Option | Description | Default | Type +| `--filter` | Filter route by filename or route id | | String +| `--output` | Save diagram to a PNG file instead of displaying in terminal | | String +| `--theme,--colors` | Color theme preset (dark, light, transparent) or custom colors (e.g. bg=#1e1e1e:from=#2e7d32:to=#1565c0). Use bg= for transparent. | dark | String +| `--width` | Image width in pixels | 0 | int +| `-h,--help` | Display the help and sub-commands | | boolean +|=== + + diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd.adoc index 0d0c1ec7544b8..5ce6c69d3117c 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-cmd.adoc @@ -28,6 +28,7 @@ camel cmd [options] | xref:jbang-commands/camel-jbang-cmd-reload.adoc[reload] | Trigger reloading Camel | xref:jbang-commands/camel-jbang-cmd-reset-stats.adoc[reset-stats] | Reset performance statistics | xref:jbang-commands/camel-jbang-cmd-resume-route.adoc[resume-route] | Resume Camel routes +| xref:jbang-commands/camel-jbang-cmd-route-diagram.adoc[route-diagram] | Display Camel route diagram in the terminal | xref:jbang-commands/camel-jbang-cmd-route-structure.adoc[route-structure] | Dump Camel route structure | xref:jbang-commands/camel-jbang-cmd-send.adoc[send] | Send messages to endpoints | xref:jbang-commands/camel-jbang-cmd-start-group.adoc[start-group] | Start Camel route groups diff --git a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json index 9dc900fd33d4f..773b795085d55 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json +++ b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json @@ -2,7 +2,7 @@ "commands": [ { "name": "bind", "fullName": "bind", "description": "DEPRECATED: Bind source and sink Kamelets as a new Camel integration", "deprecated": true, "sourceClass": "org.apache.camel.dsl.jbang.core.commands.bind.Bind", "options": [ { "names": "--error-handler", "description": "Add error handler (none|log|sink:). Sink endpoints are expected in the format [[apigroup\/]version:]kind:[namespace\/]name, plain Camel URIs or Kamelet name.", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Output format generated by this command (supports: file, yaml or json).", "defaultValue": "file", "javaType": "java.lang.String", "type": "string" }, { "names": "--property", "description": "Adds a pipe property in the form of [source|sink|error-handler|step-].= where is the step number starting from 1", "javaType": "java.lang.String", "type": "string" }, { "names": "--sink", "description": "Sink (to) such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--source", "description": "Source (from) such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string", "required": true }, { "names": "--step", "description": "Optional steps such as a Kamelet or Camel endpoint uri", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "catalog", "fullName": "catalog", "description": "List artifacts from Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "component", "fullName": "catalog component", "description": "List components from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogComponent", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "dataformat", "fullName": "catalog dataformat", "description": "List data formats from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDataFormat", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "dev-console", "fullName": "catalog dev-console", "description": "List dev-consoles from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDevConsole", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "kamelet", "fullName": "catalog kamelet", "description": "List Kamelets from the Kamelet Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogKamelet", "options": [ { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "defaultValue": "RuntimeType.KAMELETS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, type, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "--type,--filter-type", "description": "Filter by type: source, sink, or action", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "language", "fullName": "catalog language", "description": "List expression languages from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogLanguage", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "other", "fullName": "catalog other", "description": "List miscellaneous components from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogOther", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "transformer", "fullName": "catalog transformer", "description": "List data type transformers from the Camel Catalog", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.catalog.CatalogTransformer", "options": [ { "names": "--camel-version", "description": "To use a different Camel version than the default version", "javaType": "java.lang.String", "type": "string" }, { "names": "--display-gav", "description": "Display Maven GAV instead of name", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter by name or description", "javaType": "java.lang.String", "type": "string" }, { "names": "--json", "description": "Output in JSON Format", "javaType": "boolean", "type": "boolean" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--repo,--repos", "description": "Additional maven repositories for download on-demand (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--since-after", "description": "Filter by version more recent (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--since-before", "description": "Filter by version older (inclusive)", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by name, support-level, or description", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, - { "name": "cmd", "fullName": "cmd", "description": "Performs commands in the running Camel integrations, such as start\/stop route, or change logging levels.", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "browse", "fullName": "cmd browse", "description": "Browse pending messages on endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelBrowseAction", "options": [ { "names": "--body-max-chars", "description": "Maximum size of the message body to include in the dump", "javaType": "int", "type": "integer" }, { "names": "--dump", "description": "Whether to include message dumps", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--endpoint", "description": "Endpoint to browse messages from (can be uri, pattern, or refer to a route id)", "javaType": "java.lang.String", "type": "string" }, { "names": "--fresh-size", "description": "Whether to calculate fresh queue size information (performance overhead)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--limit", "description": "Limits the number of messages to dump per endpoint", "defaultValue": "100", "javaType": "int", "type": "integer" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--only-body", "description": "Show only message body in browsed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in browsed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in browsed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by uri, or size", "defaultValue": "uri", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of messages from the end (latest) to dump", "javaType": "int", "type": "integer" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "disable-processor", "fullName": "cmd disable-processor", "description": "Disable Camel processor", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelProcessorDisableAction", "options": [ { "names": "--id", "description": "Processor ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "enable-processor", "fullName": "cmd enable-processor", "description": "Enable Camel processor", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelProcessorEnableAction", "options": [ { "names": "--id", "description": "Processor ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "gc", "fullName": "cmd gc", "description": "Trigger Java Memory Garbage Collector", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelGCAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "load", "fullName": "cmd load", "description": "Loads new source files into an existing Camel", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelLoadAction", "options": [ { "names": "--restart", "description": "To force restart all routes after loading source files", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Source file(s) to load", "javaType": "java.util.List", "type": "array" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "logger", "fullName": "cmd logger", "description": "List or change logging levels", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.LoggerAction", "options": [ { "names": "--logger", "description": "The logger name", "defaultValue": "root", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-level", "description": "To change logging level ()", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "receive", "fullName": "cmd receive", "description": "Receive and dump messages from remote endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelReceiveAction", "options": [ { "names": "--action", "description": "Action to start, stop, clear, status, or dump messages", "defaultValue": "status", "javaType": "java.lang.String", "type": "string" }, { "names": "--compact", "description": "Compact output (no empty line separating messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--endpoint,--uri", "description": "Endpoint to receive messages from (can be uri or pattern to refer to existing endpoint)", "javaType": "java.lang.String", "type": "string" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--follow", "description": "Keep following and outputting new messages (press enter to exit).", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--grep", "description": "Filter messages to only output matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--only-body", "description": "Show only message body in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--output", "description": "Output format (text or json)", "javaType": "java.lang.String", "type": "string" }, { "names": "--prefix", "description": "Print prefix with running Camel integration name. auto=only prefix when running multiple integrations. true=always prefix. false=prefix off.", "defaultValue": "auto", "javaType": "java.lang.String", "type": "string" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties; override existing (only applicable when NOT using an existing running Camel)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (only applicable when NOT using an existing running Camel) (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in received messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in received messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--since", "description": "Return messages newer than a relative duration like 5s, 2m, or 1h. The value is in seconds if no unit specified.", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age for showing status of messages", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of messages from the end to show. Use -1 to read from the beginning. Use 0 to read only new lines. Defaults to showing all messages from beginning.", "defaultValue": "-1", "javaType": "int", "type": "integer" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be received", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "reload", "fullName": "cmd reload", "description": "Trigger reloading Camel", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelReloadAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "reset-stats", "fullName": "cmd reset-stats", "description": "Reset performance statistics", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelResetStatsAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "resume-route", "fullName": "cmd resume-route", "description": "Resume Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteResumeAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route-structure", "fullName": "cmd route-structure", "description": "Dump Camel route structure", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStructureAction", "options": [ { "names": "--brief", "description": "To show less detailed route structure", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter route by filename or route id (multiple names can be separated by comma)", "javaType": "java.lang.String", "type": "string" }, { "names": "--raw", "description": "To output raw without metadata", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort route by name or id", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "send", "fullName": "cmd send", "description": "Send messages to endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelSendAction", "options": [ { "names": "--body", "description": "Message body to send (prefix with file: to refer to loading message body from file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--endpoint,--uri", "description": "Endpoint where to send the message (can be uri, pattern, or refer to a route id)", "javaType": "java.lang.String", "type": "string" }, { "names": "--header", "description": "Message header (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--infra", "description": "Send to infrastructure service (e.g., nats, kafka)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--poll", "description": "Poll instead of sending a message. This can be used to receive latest message from a Kafka topic or JMS queue.", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print response message body (InOut) when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties; override existing (only applicable when NOT using an existing running Camel)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (only applicable when NOT using an existing running Camel) (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--reply", "description": "Whether to expect a reply message (InOut vs InOut messaging style)", "javaType": "boolean", "type": "boolean" }, { "names": "--reply-file", "description": "Saves reply message to the file with the given name (override if exists)", "javaType": "java.lang.String", "type": "string" }, { "names": "--show-body", "description": "Show message body from response message (InOut)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties from response message (InOut)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables from response message (InOut)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers from response message (InOut)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be sent (and reply message if InOut messaging)", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "start-group", "fullName": "cmd start-group", "description": "Start Camel route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteGroupStartAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "start-route", "fullName": "cmd start-route", "description": "Start Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStartAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop-group", "fullName": "cmd stop-group", "description": "Stop Camel route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteGroupStopAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop-route", "fullName": "cmd stop-route", "description": "Stop Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStopAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stub", "fullName": "cmd stub", "description": "Browse stub endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelStubAction", "options": [ { "names": "--browse", "description": "Whether to browse messages queued in the stub endpoints", "javaType": "boolean", "type": "boolean" }, { "names": "--compact", "description": "Compact output (no empty line separating browsed messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter endpoints by queue name", "javaType": "java.lang.String", "type": "string" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--grep", "description": "Filter browsing messages to only output trace matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--limit", "description": "Filter browsing queues by limiting to the given latest number of messages", "defaultValue": "10", "javaType": "int", "type": "integer" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by name, or total", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "--top", "description": "Whether to browse top (latest) messages queued in the stub endpoints", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "suspend-route", "fullName": "cmd suspend-route", "description": "Suspend Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteSuspendAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "thread-dump", "fullName": "cmd thread-dump", "description": "List threads in a running Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelThreadDump", "options": [ { "names": "--depth", "description": "Max depth of stack-trace", "defaultValue": "1", "javaType": "int", "type": "integer" }, { "names": "--filter", "description": "Filter thread names\/ids (use all to include all threads)", "defaultValue": "Camel", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by id, name or state", "defaultValue": "id", "javaType": "java.lang.String", "type": "string" }, { "names": "--state", "description": "To only show threads for a given state", "javaType": "java.lang.String", "type": "string" }, { "names": "--trace", "description": "Include stack-traces", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, + { "name": "cmd", "fullName": "cmd", "description": "Performs commands in the running Camel integrations, such as start\/stop route, or change logging levels.", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "browse", "fullName": "cmd browse", "description": "Browse pending messages on endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelBrowseAction", "options": [ { "names": "--body-max-chars", "description": "Maximum size of the message body to include in the dump", "javaType": "int", "type": "integer" }, { "names": "--dump", "description": "Whether to include message dumps", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--endpoint", "description": "Endpoint to browse messages from (can be uri, pattern, or refer to a route id)", "javaType": "java.lang.String", "type": "string" }, { "names": "--fresh-size", "description": "Whether to calculate fresh queue size information (performance overhead)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--limit", "description": "Limits the number of messages to dump per endpoint", "defaultValue": "100", "javaType": "int", "type": "integer" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--only-body", "description": "Show only message body in browsed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in browsed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in browsed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by uri, or size", "defaultValue": "uri", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of messages from the end (latest) to dump", "javaType": "int", "type": "integer" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "disable-processor", "fullName": "cmd disable-processor", "description": "Disable Camel processor", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelProcessorDisableAction", "options": [ { "names": "--id", "description": "Processor ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "enable-processor", "fullName": "cmd enable-processor", "description": "Enable Camel processor", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelProcessorEnableAction", "options": [ { "names": "--id", "description": "Processor ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "gc", "fullName": "cmd gc", "description": "Trigger Java Memory Garbage Collector", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelGCAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "load", "fullName": "cmd load", "description": "Loads new source files into an existing Camel", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelLoadAction", "options": [ { "names": "--restart", "description": "To force restart all routes after loading source files", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Source file(s) to load", "javaType": "java.util.List", "type": "array" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "logger", "fullName": "cmd logger", "description": "List or change logging levels", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.LoggerAction", "options": [ { "names": "--logger", "description": "The logger name", "defaultValue": "root", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-level", "description": "To change logging level ()", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "receive", "fullName": "cmd receive", "description": "Receive and dump messages from remote endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelReceiveAction", "options": [ { "names": "--action", "description": "Action to start, stop, clear, status, or dump messages", "defaultValue": "status", "javaType": "java.lang.String", "type": "string" }, { "names": "--compact", "description": "Compact output (no empty line separating messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--endpoint,--uri", "description": "Endpoint to receive messages from (can be uri or pattern to refer to existing endpoint)", "javaType": "java.lang.String", "type": "string" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--follow", "description": "Keep following and outputting new messages (press enter to exit).", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--grep", "description": "Filter messages to only output matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--only-body", "description": "Show only message body in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--output", "description": "Output format (text or json)", "javaType": "java.lang.String", "type": "string" }, { "names": "--prefix", "description": "Print prefix with running Camel integration name. auto=only prefix when running multiple integrations. true=always prefix. false=prefix off.", "defaultValue": "auto", "javaType": "java.lang.String", "type": "string" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties; override existing (only applicable when NOT using an existing running Camel)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (only applicable when NOT using an existing running Camel) (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--short-uri", "description": "List endpoint URI without query parameters (short)", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in received messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in received messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in received messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--since", "description": "Return messages newer than a relative duration like 5s, 2m, or 1h. The value is in seconds if no unit specified.", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by pid, name or age for showing status of messages", "defaultValue": "pid", "javaType": "java.lang.String", "type": "string" }, { "names": "--tail", "description": "The number of messages from the end to show. Use -1 to read from the beginning. Use 0 to read only new lines. Defaults to showing all messages from beginning.", "defaultValue": "-1", "javaType": "int", "type": "integer" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be received", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "--wide-uri", "description": "List endpoint URI in full details", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "reload", "fullName": "cmd reload", "description": "Trigger reloading Camel", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelReloadAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "reset-stats", "fullName": "cmd reset-stats", "description": "Reset performance statistics", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelResetStatsAction", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "resume-route", "fullName": "cmd resume-route", "description": "Resume Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteResumeAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route-diagram", "fullName": "cmd route-diagram", "description": "Display Camel route diagram in the terminal", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteDiagramAction", "options": [ { "names": "--filter", "description": "Filter route by filename or route id", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "Save diagram to a PNG file instead of displaying in terminal", "javaType": "java.lang.String", "type": "string" }, { "names": "--theme,--colors", "description": "Color theme preset (dark, light, transparent) or custom colors (e.g. bg=#1e1e1e:from=#2e7d32:to=#1565c0). Use bg= for transparent.", "defaultValue": "dark", "javaType": "java.lang.String", "type": "string" }, { "names": "--width", "description": "Image width in pixels", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "route-structure", "fullName": "cmd route-structure", "description": "Dump Camel route structure", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStructureAction", "options": [ { "names": "--brief", "description": "To show less detailed route structure", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter route by filename or route id (multiple names can be separated by comma)", "javaType": "java.lang.String", "type": "string" }, { "names": "--raw", "description": "To output raw without metadata", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort route by name or id", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "send", "fullName": "cmd send", "description": "Send messages to endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelSendAction", "options": [ { "names": "--body", "description": "Message body to send (prefix with file: to refer to loading message body from file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--endpoint,--uri", "description": "Endpoint where to send the message (can be uri, pattern, or refer to a route id)", "javaType": "java.lang.String", "type": "string" }, { "names": "--header", "description": "Message header (key=value)", "javaType": "java.util.List", "type": "array" }, { "names": "--infra", "description": "Send to infrastructure service (e.g., nats, kafka)", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--poll", "description": "Poll instead of sending a message. This can be used to receive latest message from a Kafka topic or JMS queue.", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print response message body (InOut) when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties; override existing (only applicable when NOT using an existing running Camel)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (only applicable when NOT using an existing running Camel) (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--reply", "description": "Whether to expect a reply message (InOut vs InOut messaging style)", "javaType": "boolean", "type": "boolean" }, { "names": "--reply-file", "description": "Saves reply message to the file with the given name (override if exists)", "javaType": "java.lang.String", "type": "string" }, { "names": "--show-body", "description": "Show message body from response message (InOut)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties from response message (InOut)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables from response message (InOut)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers from response message (InOut)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--timeout", "description": "Timeout in millis waiting for message to be sent (and reply message if InOut messaging)", "defaultValue": "20000", "javaType": "long", "type": "integer" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "start-group", "fullName": "cmd start-group", "description": "Start Camel route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteGroupStartAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "start-route", "fullName": "cmd start-route", "description": "Start Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStartAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop-group", "fullName": "cmd stop-group", "description": "Stop Camel route groups", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteGroupStopAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stop-route", "fullName": "cmd stop-route", "description": "Stop Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteStopAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "stub", "fullName": "cmd stub", "description": "Browse stub endpoints", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelStubAction", "options": [ { "names": "--browse", "description": "Whether to browse messages queued in the stub endpoints", "javaType": "boolean", "type": "boolean" }, { "names": "--compact", "description": "Compact output (no empty line separating browsed messages)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--filter", "description": "Filter endpoints by queue name", "javaType": "java.lang.String", "type": "string" }, { "names": "--find", "description": "Find and highlight matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--grep", "description": "Filter browsing messages to only output trace matching text (ignore case).", "javaType": "java.lang.String", "type": "string" }, { "names": "--limit", "description": "Filter browsing queues by limiting to the given latest number of messages", "defaultValue": "10", "javaType": "int", "type": "integer" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--show-body", "description": "Show message body in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in traced messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--sort", "description": "Sort by name, or total", "defaultValue": "name", "javaType": "java.lang.String", "type": "string" }, { "names": "--top", "description": "Whether to browse top (latest) messages queued in the stub endpoints", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "suspend-route", "fullName": "cmd suspend-route", "description": "Suspend Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelRouteSuspendAction", "options": [ { "names": "--id", "description": "Route ids (multiple ids can be separated by comma)", "defaultValue": "*", "javaType": "java.lang.String", "type": "string" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "thread-dump", "fullName": "cmd thread-dump", "description": "List threads in a running Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.action.CamelThreadDump", "options": [ { "names": "--depth", "description": "Max depth of stack-trace", "defaultValue": "1", "javaType": "int", "type": "integer" }, { "names": "--filter", "description": "Filter thread names\/ids (use all to include all threads)", "defaultValue": "Camel", "javaType": "java.lang.String", "type": "string" }, { "names": "--sort", "description": "Sort by id, name or state", "defaultValue": "id", "javaType": "java.lang.String", "type": "string" }, { "names": "--state", "description": "To only show threads for a given state", "javaType": "java.lang.String", "type": "string" }, { "names": "--trace", "description": "Include stack-traces", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--watch", "description": "Execute periodically and showing output fullscreen", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "completion", "fullName": "completion", "description": "Generate completion script for bash\/zsh", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Complete", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "config", "fullName": "config", "description": "Get and set user configuration values", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get", "fullName": "config get", "description": "Display user configuration value", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigGet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "list", "fullName": "config list", "description": "Displays user configuration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigList", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "set", "fullName": "config set", "description": "Set user configuration value", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigSet", "options": [ { "names": "--global", "description": "Use global or local configuration", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, { "name": "unset", "fullName": "config unset", "description": "Remove user configuration value", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.config.ConfigUnset", "options": [ { "names": "--global", "description": "Use global or local configurations", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] } ] }, { "name": "debug", "fullName": "debug", "description": "Debug local Camel integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Debug", "options": [ { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names": "--background", "description": "Run in the background", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--background-wait", "description": "To wait for run in background to startup successfully, before returning", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--backlog-trace", "description": "Enables backlog tracing of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--breakpoint", "description": "To set breakpoint at the given node id (Multiple ids can be separated by comma). If no breakpoint is set, then the first route is automatic selected.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-spring-boot-version", "description": "To run using a different Camel Spring Boot version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--camel-version", "description": "To run using a different Camel version than the default version.", "javaType": "java.lang.String", "type": "string" }, { "names": "--code", "description": "Run the given text or file as Java DSL routes", "javaType": "java.lang.String", "type": "string" }, { "names": "--console", "description": "Developer console at \/q\/dev on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--dep,--dependency", "description": "Add additional dependencies", "javaType": "java.util.List", "type": "array" }, { "names": "--download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--empty", "description": "Run an empty Camel without loading source files", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--exclude", "description": "Exclude files by name or pattern", "javaType": "java.util.List", "type": "array" }, { "names": "--fresh", "description": "Make sure we use fresh (i.e. non-cached) resources", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--gav", "description": "The Maven group:artifact:version (used during exporting)", "javaType": "java.lang.String", "type": "string" }, { "names": "--health", "description": "Deprecated: use --observe instead. Health check at \/q\/health on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--ignore-loading-error", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr", "description": "Enables Java Flight Recorder saving recording to disk on exit", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--jfr-profile", "description": "Java Flight Recorder profile to use (such as default or profile)", "javaType": "java.lang.String", "type": "string" }, { "names": "--jvm-debug", "description": "To enable JVM remote debugging on port 4004 by default. The supported values are true to enable the remote debugging, false to disable the remote debugging or a number to use a custom port", "javaType": "int", "type": "integer", "paramLabel": "" }, { "names": "--kamelets-version", "description": "Apache Camel Kamelets version", "javaType": "java.lang.String", "type": "string" }, { "names": "--lazy-bean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--local-kamelet-dir", "description": "Local directory (or github link) for loading Kamelets (takes precedence). Multiple directories can be specified separated by comma.", "javaType": "java.lang.String", "type": "string" }, { "names": "--log-lines", "description": "Number of log lines to display on top of screen", "defaultValue": "10", "javaType": "int", "type": "integer" }, { "names": "--logging", "description": "Can be used to turn off logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-category", "description": "Used for individual logging levels (ex: org.apache.kafka=DEBUG)", "javaType": "java.util.List", "type": "array" }, { "names": "--logging-color", "description": "Use colored logging", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-config-path", "description": "Path to file with custom logging configuration", "javaType": "java.lang.String", "type": "string" }, { "names": "--logging-json", "description": "Use JSON logging (ECS Layout)", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--logging-level", "description": "Logging level ()", "defaultValue": "info", "javaType": "java.lang.String", "type": "string" }, { "names": "--management-port", "description": "To use a dedicated port for HTTP management (use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--mask", "description": "Whether to mask endpoint URIs to avoid printing sensitive information such as password or access keys", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors and proxies. If set to false, not even the default ~\/.m2\/settings.xml will be used.", "javaType": "java.lang.String", "type": "string" }, { "names": "--maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt settings.xml", "javaType": "java.lang.String", "type": "string" }, { "names": "--max-idle-seconds", "description": "For how long time in seconds Camel can be idle before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-messages", "description": "Max number of messages to process before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--max-seconds", "description": "Max seconds to run before stopping", "defaultValue": "0", "javaType": "int", "type": "integer" }, { "names": "--metrics", "description": "Deprecated: use --observe instead. Metrics (Micrometer and Prometheus) at \/q\/metrics on local HTTP server (port 8080 by default)", "defaultValue": "false", "javaType": "boolean", "type": "boolean", "deprecated": true }, { "names": "--modeline", "description": "Whether to support JBang style \/\/DEPS to specify additional dependencies", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--name", "description": "The name of the Camel application", "defaultValue": "CamelJBang", "javaType": "java.lang.String", "type": "string" }, { "names": "--observe", "description": "Enable observability services", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--open-api", "description": "Adds an OpenAPI spec from the given file (json or yaml file)", "javaType": "java.lang.String", "type": "string" }, { "names": "--output", "description": "File to store the current message body (will override). This allows for manual inspecting the message later.", "javaType": "java.lang.String", "type": "string" }, { "names": "--package-scan-jars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--port", "description": "Embeds a local HTTP server on this port (port 8080 by default; use 0 to dynamic assign a free random port number)", "javaType": "int", "type": "integer" }, { "names": "--pretty", "description": "Pretty print message body when using JSon or XML format", "javaType": "boolean", "type": "boolean" }, { "names": "--profile", "description": "Profile to run (dev, test, or prod).", "defaultValue": "dev", "javaType": "java.lang.String", "type": "string" }, { "names": "--prompt", "description": "Allow user to type in required parameters in prompt if not present in application", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--prop,--property", "description": "Additional properties (override existing)", "javaType": "java.lang.String", "type": "string" }, { "names": "--properties", "description": "comma separated list of properties file (ex. \/path\/to\/file.properties,\/path\/to\/other.properties", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-artifact-id", "description": "Quarkus Platform Maven artifactId", "defaultValue": "quarkus-bom", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-group-id", "description": "Quarkus Platform Maven groupId", "defaultValue": "io.quarkus.platform", "javaType": "java.lang.String", "type": "string" }, { "names": "--quarkus-version", "description": "Quarkus Platform version", "defaultValue": "RuntimeType.QUARKUS_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--reload,--dev", "description": "Enables dev mode (live reload when source files are updated and saved)", "javaType": "boolean", "type": "boolean" }, { "names": "--remote-attach", "description": "Attaches debugger remotely to an existing running Camel integration. (Add camel-cli-debug JAR to the existing Camel application and run before attaching this debugger)", "javaType": "boolean", "type": "boolean" }, { "names": "--repo,--repos", "description": "Additional maven repositories (Use commas to separate multiple repositories)", "javaType": "java.lang.String", "type": "string" }, { "names": "--runtime", "description": "Runtime ()", "defaultValue": "camel-main", "javaType": "org.apache.camel.dsl.jbang.core.common.RuntimeType", "type": "object" }, { "names": "--show-body", "description": "Show message body in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exception", "description": "Show exception and stacktrace for failed messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-properties", "description": "Show exchange properties in debug messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--show-exchange-variables", "description": "Show exchange variables in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--show-headers", "description": "Show message headers in debug messages", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--skip-plugins", "description": "Skip resolving plugin dependencies", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--source", "description": "Prefer to display source filename\/code instead of IDs", "javaType": "boolean", "type": "boolean" }, { "names": "--source-dir", "description": "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.", "javaType": "java.lang.String", "type": "string" }, { "names": "--spring-boot-version", "description": "Spring Boot version", "defaultValue": "RuntimeType.SPRING_BOOT_VERSION", "javaType": "java.lang.String", "type": "string" }, { "names": "--stop-on-exit", "description": "Whether to stop the running Camel on exit", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--stub", "description": "Stubs all the matching endpoint uri with the given component name or pattern. Multiple names can be separated by comma. (all = stub all endpoints).", "javaType": "java.lang.String", "type": "string" }, { "names": "--timestamp", "description": "Print timestamp.", "defaultValue": "true", "javaType": "boolean", "type": "boolean" }, { "names": "--trace", "description": "Enables trace logging of the routed messages", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "--verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ] }, diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java index bd03af9ee39c3..477769c861254 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java @@ -108,6 +108,7 @@ public void execute(String... args) { .addSubcommand("reload", new CommandLine(new CamelReloadAction(this))) .addSubcommand("reset-stats", new CommandLine(new CamelResetStatsAction(this))) .addSubcommand("resume-route", new CommandLine(new CamelRouteResumeAction(this))) + .addSubcommand("route-diagram", new CommandLine(new CamelRouteDiagramAction(this))) .addSubcommand("route-structure", new CommandLine(new CamelRouteStructureAction(this))) .addSubcommand("send", new CommandLine(new CamelSendAction(this))) .addSubcommand("start-group", new CommandLine(new CamelRouteGroupStartAction(this))) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java new file mode 100644 index 0000000000000..ffee35281ecf2 --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelRouteDiagramAction.java @@ -0,0 +1,750 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.dsl.jbang.core.commands.action; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import javax.imageio.ImageIO; + +import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.PathUtils; +import org.apache.camel.util.json.JsonArray; +import org.apache.camel.util.json.JsonObject; +import org.apache.camel.util.json.Jsoner; +import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; +import org.jline.terminal.impl.TerminalGraphics; +import org.jline.terminal.impl.TerminalGraphicsManager; +import picocli.CommandLine; +import picocli.CommandLine.Command; + +@Command(name = "route-diagram", description = "Display Camel route diagram in the terminal", sortOptions = false, + showDefaultValues = true) +public class CamelRouteDiagramAction extends ActionBaseCommand { + + // Render at 2x for crisp text on terminal image protocols + private static final int SCALE = 2; + private static final int NODE_WIDTH = 180 * SCALE; + private static final int NODE_HEIGHT = 32 * SCALE; + private static final int H_GAP = 30 * SCALE; + private static final int V_GAP = 40 * SCALE; + private static final int PADDING = 30 * SCALE; + private static final int ARC = 14 * SCALE; + private static final int FONT_SIZE_LABEL = 13 * SCALE; + private static final int FONT_SIZE_NODE = 12 * SCALE; + private static final int ARROW_SIZE = 6 * SCALE; + private static final int MERGE_DOT = 5 * SCALE; + + // Color scheme keys: bg, text, arrow, label, from, to, eip, choice, default + // Format: "key=#rrggbb:key=#rrggbb:..." or a preset name (dark, light, transparent) + // Use bg= (empty) for transparent background + private static final String DARK_COLORS + = "bg=#1e1e1e:text=#ffffff:arrow=#b4b4b4:label=#c8c8c8:from=#2e7d32:to=#1565c0:eip=#9c27b0:choice=#e65100:default=#455a64"; + private static final String LIGHT_COLORS + = "bg=#f5f5f5:text=#1e1e1e:arrow=#646464:label=#505050:from=#388e3c:to=#1976d2:eip=#ab47bc:choice=#f57c00:default=#78909c"; + private static final String TRANSPARENT_COLORS + = "bg=:text=#ffffff:arrow=#b4b4b4:label=#c8c8c8:from=#2e7d32:to=#1565c0:eip=#9c27b0:choice=#e65100:default=#455a64"; + + private static final Map COLOR_PRESETS = Map.of( + "dark", DARK_COLORS, + "light", LIGHT_COLORS, + "transparent", TRANSPARENT_COLORS); + + static class DiagramColors { + Color bg, text, arrow, routeLabel; + Color nodeFrom, nodeTo, nodeEip, nodeChoice, nodeDefault; + + static DiagramColors parse(String spec) { + // Resolve preset aliases + String resolved = COLOR_PRESETS.getOrDefault(spec, spec); + Map map = new HashMap<>(); + // Start with dark defaults + for (String entry : DARK_COLORS.split(":")) { + int eq = entry.indexOf('='); + if (eq > 0) { + map.put(entry.substring(0, eq), entry.substring(eq + 1)); + } + } + // Override with user values + for (String entry : resolved.split(":")) { + int eq = entry.indexOf('='); + if (eq > 0) { + map.put(entry.substring(0, eq), entry.substring(eq + 1)); + } + } + DiagramColors c = new DiagramColors(); + c.bg = parseColor(map.get("bg")); + c.text = parseColor(map.getOrDefault("text", "#ffffff")); + c.arrow = parseColor(map.getOrDefault("arrow", "#b4b4b4")); + c.routeLabel = parseColor(map.getOrDefault("label", "#c8c8c8")); + c.nodeFrom = parseColor(map.getOrDefault("from", "#2e7d32")); + c.nodeTo = parseColor(map.getOrDefault("to", "#1565c0")); + c.nodeEip = parseColor(map.getOrDefault("eip", "#9c27b0")); + c.nodeChoice = parseColor(map.getOrDefault("choice", "#e65100")); + c.nodeDefault = parseColor(map.getOrDefault("default", "#455a64")); + return c; + } + + private static Color parseColor(String hex) { + if (hex == null || hex.isEmpty()) { + return null; // transparent + } + if (hex.startsWith("#")) { + hex = hex.substring(1); + } + return new Color(Integer.parseInt(hex, 16)); + } + } + + // EIP types that create horizontal branches (their direct children are laid out side by side) + private static final Set BRANCHING_EIPS = Set.of( + "choice", "multicast", "doTry", "loadBalance", "recipientList"); + + @CommandLine.Parameters(description = "Name or pid of running Camel integration", arity = "0..1") + String name = "*"; + + @CommandLine.Option(names = { "--filter" }, + description = "Filter route by filename or route id") + String filter; + + @CommandLine.Option(names = { "--width" }, + description = "Image width in pixels", defaultValue = "0") + int width; + + @CommandLine.Option(names = { "--output" }, + description = "Save diagram to a PNG file instead of displaying in terminal") + String output; + + @CommandLine.Option(names = { "--theme", "--colors" }, + description = "Color theme preset (dark, light, transparent) or custom colors " + + "(e.g. bg=#1e1e1e:from=#2e7d32:to=#1565c0). Use bg= for transparent.", + defaultValue = "dark") + String theme = "dark"; + + private DiagramColors colors; + + public CamelRouteDiagramAction(CamelJBangMain main) { + super(main); + } + + @Override + public Integer doCall() throws Exception { + String colorSpec = System.getenv("DIAGRAM_COLORS"); + colors = DiagramColors.parse(colorSpec != null ? colorSpec : theme); + + List pids = findPids(name); + if (pids.isEmpty()) { + return 1; + } else if (pids.size() > 1) { + printer().println("Name or pid " + name + " matches " + pids.size() + + " running Camel integrations. Specify a name or PID that matches exactly one."); + return 1; + } + + long pid = pids.get(0); + + // Fetch route structure from the running Camel integration + Path outputFile = prepareAction(Long.toString(pid), "route-structure", root -> { + root.put("filter", "*"); + root.put("brief", false); + }); + + JsonObject jo = getJsonObject(outputFile); + if (jo == null) { + printer().println("Response from running Camel with PID " + pid + " not received within 5 seconds"); + return 1; + } + + List routes = parseRoutes(jo); + if (routes.isEmpty()) { + printer().println("No routes found"); + PathUtils.deleteFile(outputFile); + return 0; + } + + // Filter routes if needed + if (filter != null) { + routes.removeIf(r -> !r.routeId.contains(filter) && !r.source.contains(filter)); + } + + if (routes.isEmpty()) { + printer().println("No routes match filter: " + filter); + PathUtils.deleteFile(outputFile); + return 0; + } + + // Render diagram + BufferedImage image = renderDiagram(routes); + + if (output != null) { + // Save to file + File file = new File(output); + ImageIO.write(image, "PNG", file); + printer().println("Diagram saved to: " + file.getAbsolutePath()); + } else { + // Display using JLine terminal graphics + try (Terminal terminal = TerminalBuilder.builder().system(true).build()) { + Optional protocol = TerminalGraphicsManager.getBestProtocol(terminal); + if (protocol.isPresent()) { + TerminalGraphics.ImageOptions opts = new TerminalGraphics.ImageOptions() + .preserveAspectRatio(true); + if (width > 0) { + opts.width(width); + } + protocol.get().displayImage(terminal, image, opts); + terminal.writer().println(); + terminal.flush(); + } else { + printer().println("Terminal does not support graphics protocols (Kitty, iTerm2, or Sixel)."); + printer().println( + "Try running in a supported terminal: Kitty, iTerm2, WezTerm, Ghostty, or VS Code."); + printTextDiagram(routes); + } + } + } + + PathUtils.deleteFile(outputFile); + return 0; + } + + // ------- Parsing ------- + + private List parseRoutes(JsonObject jo) { + List routes = new ArrayList<>(); + JsonArray arr = (JsonArray) jo.get("routes"); + if (arr == null) { + return routes; + } + + for (int i = 0; i < arr.size(); i++) { + JsonObject o = (JsonObject) arr.get(i); + RouteInfo route = new RouteInfo(); + route.routeId = o.getString("routeId"); + route.source = CamelRouteStructureAction.extractSourceName(o.getString("source")); + + List lines = o.getCollection("code"); + if (lines != null) { + for (JsonObject line : lines) { + NodeInfo node = new NodeInfo(); + node.type = line.getString("type"); + node.code = Jsoner.unescape(line.getString("code")); + node.level = line.getInteger("level"); + node.id = line.getString("id"); + route.nodes.add(node); + } + } + routes.add(route); + } + return routes; + } + + // ------- Tree building ------- + + /** + * Build a tree from the flat node list using level to determine parent-child relationships. + */ + static TreeNode buildTree(List nodes) { + if (nodes.isEmpty()) { + return null; + } + TreeNode root = new TreeNode(nodes.get(0)); + TreeNode current = root; + + for (int i = 1; i < nodes.size(); i++) { + NodeInfo ni = nodes.get(i); + TreeNode tn = new TreeNode(ni); + + if (ni.level > current.info.level) { + // Child of current + current.children.add(tn); + tn.parent = current; + } else if (ni.level == current.info.level) { + // Sibling of current + TreeNode parent = current.parent; + if (parent != null) { + parent.children.add(tn); + tn.parent = parent; + } else { + root.children.add(tn); + tn.parent = root; + } + } else { + // Walk up to find the right parent + TreeNode ancestor = current.parent; + while (ancestor != null && ancestor.info.level >= ni.level) { + ancestor = ancestor.parent; + } + if (ancestor != null) { + ancestor.children.add(tn); + tn.parent = ancestor; + } else { + root.children.add(tn); + tn.parent = root; + } + } + current = tn; + } + return root; + } + + // ------- Layout (Hawtio-style) ------- + + private LayoutRoute layoutRoute(RouteInfo route, int startY) { + LayoutRoute lr = new LayoutRoute(); + lr.routeId = route.routeId; + lr.source = route.source; + lr.labelY = startY; + + TreeNode tree = buildTree(route.nodes); + if (tree == null) { + lr.maxX = PADDING + NODE_WIDTH; + lr.maxY = startY + 24 * SCALE; + return lr; + } + + computeSubtreeWidth(tree); + assignPositions(tree, PADDING, startY + 24 * SCALE, tree.subtreeWidth, lr); + + int maxX = 0; + for (LayoutNode ln : lr.nodes) { + maxX = Math.max(maxX, ln.x + NODE_WIDTH); + } + lr.maxX = maxX + PADDING; + + return lr; + } + + /** + * Compute the width each subtree needs (in pixels) for horizontal layout. + */ + private int computeSubtreeWidth(TreeNode node) { + if (node.children.isEmpty()) { + node.subtreeWidth = NODE_WIDTH; + return node.subtreeWidth; + } + + if (isBranchingEip(node.info.type)) { + // Branches are laid out side by side + int totalWidth = 0; + for (int i = 0; i < node.children.size(); i++) { + if (i > 0) { + totalWidth += H_GAP; + } + totalWidth += computeSubtreeWidth(node.children.get(i)); + } + node.subtreeWidth = Math.max(NODE_WIDTH, totalWidth); + } else { + // Sequential: the width is the max of all children + int maxChildWidth = NODE_WIDTH; + for (TreeNode child : node.children) { + maxChildWidth = Math.max(maxChildWidth, computeSubtreeWidth(child)); + } + node.subtreeWidth = maxChildWidth; + } + return node.subtreeWidth; + } + + /** + * Assign x,y positions to each node in the tree. + * + * @param parentWidth the available width from the parent's subtree (used to center sequential children) + */ + private void assignPositions(TreeNode node, int x, int y, int parentWidth, LayoutRoute lr) { + int availableWidth = Math.max(node.subtreeWidth, parentWidth); + int nodeX = x + (availableWidth - NODE_WIDTH) / 2; + + LayoutNode ln = new LayoutNode(); + ln.label = truncateLabel(node.info.code); + ln.type = node.info.type; + ln.x = nodeX; + ln.y = y; + ln.treeNode = node; + node.layoutNode = ln; + lr.nodes.add(ln); + + // Connect to parent + if (node.parent != null && node.parent.layoutNode != null) { + TreeNode parentNode = node.parent; + if (!isBranchingEip(parentNode.info.type)) { + // Sequential: connect to previous sibling or parent + int myIndex = parentNode.children.indexOf(node); + if (myIndex > 0) { + TreeNode prevSibling = parentNode.children.get(myIndex - 1); + if (isBranchingEip(prevSibling.info.type)) { + // Previous sibling was a branching EIP — connect from its merge point + ln.connectFromMerge = true; + ln.mergeY = findMaxY(prevSibling) + V_GAP / 2; + ln.mergeCx = prevSibling.layoutNode.x + NODE_WIDTH / 2; + ln.parentNode = prevSibling.layoutNode; + } else { + ln.parentNode = findLastLayoutNode(prevSibling); + } + } else { + ln.parentNode = parentNode.layoutNode; + } + } else { + // Branching: connect directly to parent + ln.parentNode = parentNode.layoutNode; + } + } + + lr.maxY = Math.max(lr.maxY, y + NODE_HEIGHT + V_GAP); + + if (node.children.isEmpty()) { + return; + } + + int childY = y + NODE_HEIGHT + V_GAP; + + if (isBranchingEip(node.info.type)) { + // Lay out children side by side horizontally + int childX = x + (availableWidth - node.subtreeWidth) / 2; + for (TreeNode child : node.children) { + assignPositions(child, childX, childY, child.subtreeWidth, lr); + childX += child.subtreeWidth + H_GAP; + } + } else { + // Sequential: stack children vertically + int curY = childY; + for (int i = 0; i < node.children.size(); i++) { + TreeNode child = node.children.get(i); + assignPositions(child, x, curY, availableWidth, lr); + curY = findMaxY(child) + V_GAP; + // Extra gap after branching children for merge line + if (isBranchingEip(child.info.type) && i < node.children.size() - 1) { + curY += V_GAP; + } + } + } + } + + /** + * Find the last (deepest) layout node in a sequential subtree. For branching EIPs, returns the node itself + * (branches merge back at the parent). + */ + private LayoutNode findLastLayoutNode(TreeNode node) { + if (node.children.isEmpty()) { + return node.layoutNode; + } + if (isBranchingEip(node.info.type)) { + return node.layoutNode; + } + return findLastLayoutNode(node.children.get(node.children.size() - 1)); + } + + private int findMaxY(TreeNode node) { + int maxY = node.layoutNode != null ? node.layoutNode.y + NODE_HEIGHT : 0; + for (TreeNode child : node.children) { + maxY = Math.max(maxY, findMaxY(child)); + } + return maxY; + } + + private boolean isBranchingEip(String type) { + return type != null && BRANCHING_EIPS.contains(type); + } + + // ------- Rendering ------- + + private BufferedImage renderDiagram(List routes) { + List layoutRoutes = new ArrayList<>(); + int currentY = PADDING; + + for (RouteInfo route : routes) { + LayoutRoute lr = layoutRoute(route, currentY); + layoutRoutes.add(lr); + currentY = lr.maxY + V_GAP; + } + + int imgWidth = layoutRoutes.stream().mapToInt(lr -> lr.maxX).max().orElse(400) + PADDING; + int imgHeight = currentY + PADDING; + + int imageType = colors.bg == null ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB; + BufferedImage image = new BufferedImage(imgWidth, imgHeight, imageType); + Graphics2D g = image.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); + + if (colors.bg != null) { + g.setColor(colors.bg); + g.fillRect(0, 0, imgWidth, imgHeight); + } + + for (LayoutRoute lr : layoutRoutes) { + drawRoute(g, lr); + } + + g.dispose(); + return image; + } + + private void drawRoute(Graphics2D g, LayoutRoute lr) { + // Route label + g.setColor(colors.routeLabel); + g.setFont(new Font("SansSerif", Font.BOLD, FONT_SIZE_LABEL)); + String label = lr.routeId; + if (lr.source != null && !lr.source.isEmpty()) { + label += " (" + lr.source + ")"; + } + g.drawString(label, PADDING, lr.labelY + 14 * SCALE); + + g.setStroke(new BasicStroke(1.5f * SCALE)); + + // Draw merge lines for branching nodes + for (LayoutNode ln : lr.nodes) { + if (isBranchingEip(ln.type) && ln.treeNode != null && !ln.treeNode.children.isEmpty()) { + drawMergeLines(g, ln); + } + } + + // Draw arrows + for (LayoutNode ln : lr.nodes) { + if (ln.parentNode != null) { + if (ln.connectFromMerge) { + drawArrowFromMerge(g, ln); + } else { + drawArrow(g, ln.parentNode, ln); + } + } + } + + // Draw nodes on top + for (LayoutNode ln : lr.nodes) { + drawNode(g, ln); + } + } + + /** + * Draw merge lines below all branches of a branching EIP: vertical lines from each branch's last node down to a + * horizontal merge line, with a dot at center. + */ + private void drawMergeLines(Graphics2D g, LayoutNode branchingNode) { + TreeNode tn = branchingNode.treeNode; + if (tn.children.isEmpty()) { + return; + } + + // Only draw merge if there's a next sequential sibling + TreeNode parentNode = tn.parent; + if (parentNode == null) { + return; + } + int myIndex = parentNode.children.indexOf(tn); + if (myIndex < 0 || myIndex >= parentNode.children.size() - 1) { + return; + } + + int branchesMaxY = findMaxY(tn); + int mergeY = branchesMaxY + V_GAP / 2; + + g.setColor(colors.arrow); + g.setStroke(new BasicStroke(1.5f * SCALE)); + + // Draw vertical lines from each branch's last node down to merge Y + int minCx = Integer.MAX_VALUE; + int maxCx = Integer.MIN_VALUE; + for (TreeNode child : tn.children) { + LayoutNode lastNode = findLastLayoutNode(child); + if (lastNode != null) { + int cx = lastNode.x + NODE_WIDTH / 2; + int by = lastNode.y + NODE_HEIGHT; + g.drawLine(cx, by, cx, mergeY); + minCx = Math.min(minCx, cx); + maxCx = Math.max(maxCx, cx); + } + } + + // Draw horizontal merge line + if (minCx < maxCx) { + g.drawLine(minCx, mergeY, maxCx, mergeY); + } + + // Draw merge dot at center + int mergeCx = branchingNode.x + NODE_WIDTH / 2; + g.fillOval(mergeCx - MERGE_DOT, mergeY - MERGE_DOT, MERGE_DOT * 2, MERGE_DOT * 2); + } + + private void drawArrowFromMerge(Graphics2D g, LayoutNode to) { + g.setColor(colors.arrow); + g.setStroke(new BasicStroke(1.5f * SCALE)); + + int toCx = to.x + NODE_WIDTH / 2; + int toTy = to.y; + int mergeCx = to.mergeCx; + int mergeY = to.mergeY; + + if (mergeCx == toCx) { + g.drawLine(mergeCx, mergeY, toCx, toTy); + } else { + int midY = mergeY + (toTy - mergeY) / 2; + g.drawLine(mergeCx, mergeY, mergeCx, midY); + g.drawLine(mergeCx, midY, toCx, midY); + g.drawLine(toCx, midY, toCx, toTy); + } + drawArrowHead(g, toCx, toTy); + } + + private void drawNode(Graphics2D g, LayoutNode node) { + Color color = getNodeColor(node.type); + + g.setColor(color); + g.fillRoundRect(node.x, node.y, NODE_WIDTH, NODE_HEIGHT, ARC, ARC); + + g.setColor(color.brighter()); + g.setStroke(new BasicStroke(1.0f * SCALE)); + g.drawRoundRect(node.x, node.y, NODE_WIDTH, NODE_HEIGHT, ARC, ARC); + + g.setColor(colors.text); + g.setFont(new Font("SansSerif", Font.PLAIN, FONT_SIZE_NODE)); + FontMetrics fm = g.getFontMetrics(); + String text = node.label; + while (fm.stringWidth(text) > NODE_WIDTH - 16 * SCALE && text.length() > 3) { + text = text.substring(0, text.length() - 4) + "..."; + } + int textX = node.x + (NODE_WIDTH - fm.stringWidth(text)) / 2; + int textY = node.y + (NODE_HEIGHT + fm.getAscent() - fm.getDescent()) / 2; + g.drawString(text, textX, textY); + } + + private void drawArrow(Graphics2D g, LayoutNode from, LayoutNode to) { + g.setColor(colors.arrow); + g.setStroke(new BasicStroke(1.5f * SCALE)); + + int fromCx = from.x + NODE_WIDTH / 2; + int fromBy = from.y + NODE_HEIGHT; + int toCx = to.x + NODE_WIDTH / 2; + int toTy = to.y; + + if (fromCx == toCx) { + g.drawLine(fromCx, fromBy, toCx, toTy); + } else { + int midY = fromBy + V_GAP / 2; + g.drawLine(fromCx, fromBy, fromCx, midY); + g.drawLine(fromCx, midY, toCx, midY); + g.drawLine(toCx, midY, toCx, toTy); + } + drawArrowHead(g, toCx, toTy); + } + + private void drawArrowHead(Graphics2D g, int x, int y) { + int[] xPoints = { x - ARROW_SIZE, x, x + ARROW_SIZE }; + int[] yPoints = { y - ARROW_SIZE, y, y - ARROW_SIZE }; + g.fillPolygon(xPoints, yPoints, 3); + } + + private Color getNodeColor(String type) { + if (type == null) { + return colors.nodeDefault; + } + return switch (type) { + case "from" -> colors.nodeFrom; + case "to", "toD", "wireTap", "enrich", "pollEnrich" -> colors.nodeTo; + case "choice", "when", "otherwise" -> colors.nodeChoice; + case "filter", "split", "aggregate", "multicast", "recipientList", + "routingSlip", "dynamicRouter", "loadBalance", + "circuitBreaker", "saga", "doTry", "doCatch", "doFinally", + "onException", "onCompletion", "intercept", + "loop", "resequence", "throttle" -> + colors.nodeEip; + default -> colors.nodeDefault; + }; + } + + private String truncateLabel(String code) { + if (code == null) { + return ""; + } + code = code.replaceFirst("^\\.", ""); + if (code.length() > 40) { + code = code.substring(0, 37) + "..."; + } + return code; + } + + private void printTextDiagram(List routes) { + for (RouteInfo route : routes) { + printer().println(); + printer().printf("Route: %s (%s)%n", route.routeId, route.source); + printer().println("---"); + for (NodeInfo node : route.nodes) { + String indent = " ".repeat(node.level); + String prefix = node.level == 0 ? "[*] " : " -> "; + printer().printf("%s%s%s%n", indent, prefix, node.code); + } + printer().println(); + } + } + + // ------- Data classes ------- + + private static class RouteInfo { + String routeId; + String source; + List nodes = new ArrayList<>(); + } + + private static class NodeInfo { + String type; + String code; + int level; + String id; + } + + static class TreeNode { + final NodeInfo info; + TreeNode parent; + List children = new ArrayList<>(); + int subtreeWidth; + LayoutNode layoutNode; + + TreeNode(NodeInfo info) { + this.info = info; + } + } + + private static class LayoutRoute { + String routeId; + String source; + int labelY; + int maxX; + int maxY; + List nodes = new ArrayList<>(); + } + + private static class LayoutNode { + String label; + String type; + int x; + int y; + LayoutNode parentNode; + TreeNode treeNode; + boolean connectFromMerge; + int mergeY; + int mergeCx; + } +} From 9c76b88b8caec7786c4d251fa0fd95a5f342fb54 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 24 Mar 2026 16:07:16 +0100 Subject: [PATCH 3/3] Add route-diagram preview images for PR Preview images for the route-diagram command showing dark and light themes. These images should be removed before merging. Co-Authored-By: Claude Opus 4.6 --- .../ROOT/images/jbang/route-diagram-dark.png | Bin 0 -> 151329 bytes .../ROOT/images/jbang/route-diagram-light.png | Bin 0 -> 144838 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/user-manual/modules/ROOT/images/jbang/route-diagram-dark.png create mode 100644 docs/user-manual/modules/ROOT/images/jbang/route-diagram-light.png diff --git a/docs/user-manual/modules/ROOT/images/jbang/route-diagram-dark.png b/docs/user-manual/modules/ROOT/images/jbang/route-diagram-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..70699e1b934876a3123201a77bb88af04ad59270 GIT binary patch literal 151329 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 z``�TMvrdEE+$fs{feBpq3}#afZ#=e?ZSb@h*wBCIM8C5g-eGzTM)q)FtRK?+f+m z$X28%Xox8#Q+%!Svl56Ztc48-Ap`7$4z%-qLD2kBJEbdp{Vx`SN`v}umI_EE5&xSd ztVjUbqj17+_y1XMVL?w3Lp%u1Fzd7RS(* zU&Mrp#3VvstVE{OE>YX(0)NWz%T%m8DiSlfxVYSx{wNd9Q&d*Q_(RETBFMwDvc4We z>DIT-?VnYv%>xdKB?vLzd$w0pR2=@L498BKb>pANgf>FN5t_th9Z-K>l4m}*ct;Vji^ z6=#NhH13gATWdC*#h&cESm4}U9govhwbfe84uEdK#}0O9T3VWYO+L7+EDn5I$}bC% zndYBsUUliH^~M?2>4Vz%-)T)CV1ioq5m~oSz0~-*j4f6ohwJF+ZEXSIy5Yxb4b4nx zs7&7W-=>?i-gn9z*^}kovUnGEONFPI5@fRUcr%gS|ud&Z+hZ|DTLJQj!se^^i+?P@X!@nBGe(j150<`!WKK!HuY&egO^D56Z1&7ivGee7`TL0WVgpdXVq#w?{ zh<5vJO6N6A8&ro_;Axb$Hz#DN4$YK8-9Mu`EOBL{BpzW~pd!Lo-#h#{P%jVLXLHs& zt?2C+jlc0@oL?|!TeDnWCX)Z93hE3oX18NV4|b(`O!k&{q*-BVIg|}bS4Q`^^ape` z9pa>}UAPUo3U$-WJ!>gitC4F&cXc1+Xr&FQ>{#OaX*?z3r|&~@p!RSxsd^vCmk->4 zYpIUD_KI7NNQ+fC-^erDI8^^0A#OCI!I*w-!4+F*s;!+Qxa3rxZZ)|#Iq!JEzOOf1 zW4;`Qn}0xFIhd<1>=nNIk<9y?ia4FkQgF2cB&p*|O)*~3Gwm;;HzKVAetT&PaZ`WX zKyqByk=kX5-FQt&o^sFS6$x6XKFO>pfS-hzlqPH)Hx>^V59UQXYfTdZr}Hf3L-84{ zJEgqr-P}K2NIRBwBu|2fav#{zeZ!`E+e=Jpg*sK(+j1?&&8-#|(=}!DyS#4O> zFDVacz6sm8?Z)%1c-heIXs+(J2!=)t_tWZUk=rBPx61_8%eyo806M$sdt1lgE^Wvx z+h_(eCT$PGLzL?u;~VXpWf{QXw$4ZP$ZU98x_UxeM(%qvvpzDCY3*w3ECS0-Oc zj|+|^G+d>Uk^5RC&}f*n;$Ah?xcsRQ*QxclTtbl5AiZXG{ zMsEGHLyd2P;|1qVWX#OV;9bq>z>-VJyHKdn{A}m6gjfGVh43kr%~M9RV|Md}l9M;E zwfZ~9jaU$Nc_6@0p+ zbZdO@Pp_@i;&54wgyk|9{DjIajDo(DA6*N4!0SyH6MV4mB6xBLEo1R^+p>)oUM~A+%9O81jh*S3D`*nDhdsJd-7?Yc1QUM|{+_U$Q6EvS zflW-i4>h&N)@9$8ix!o`x6}!3d2D%XE`Ew$ z^26N1>dixrW^Fi);Iva!Zh*OBX)Q26{dF5nDrfwr!V$QGs|1}HRgu}(7&9~A)5baG z{%&|`>SQ`s_nxVU8NJQ0$@T zc}-ZQ2|rVLBq3Y_NTrsi7S9tA)b{#qX7xsmWe9L~>eull%nQfbNgQI8*p8w{9npj4 zo=RhORm zXp~isaYme$Ww(jZu0u!5^DUIyAtEL&HKeHGo{1@Q+eGOq9a)aMbM8^y##hs@?D>w4 zWi)j9SpDIj9?dK*Ox#RXe)XL5B4T98_53_}C4Ay{AyFM{eu$i#Q+|}faj{K@KTG_X z&9Q`3k{&H4YQ0Y4BGBWRo1)iLLTq>_PdyC1ku1@H2Gmnhx!*b581(&#pjsgCY?n1@ zSN8QM%8ncw0vdBer3ClH+p)xyq=ax4*JSB$)4@(L z*Q>oo8c*38@Gfxs0bauSKYc|yOPZq0ixF54UJF)cf5_8Z2pv|pYEKZz2IfgGOl7=$WzC&567Od@H~(W$71v|)t(gUhK|92aAE)^ohT3hyunqmzmFx;zXS)Vd zH^Au!y2V(JW@6t#%eXxxXaz43{_+Nz~#;CcypXO9Tf?F+xg>jB@zNYr5Q=inPZ7B3gdw+U_(dovq)EbcZ3Fqjj1Qn;~je zBAf2}_&fJ1`{71N%kuHHJlaIXs?mh$zG!C5)>~FPZ|3b9Y+XQI!r}c|xG6Jr<`;25{jhv7m)qC;q6uP3{5+52hA0f@ZnC`00YrvUhZa9FEVUq$ zFIr7$QYlT3&pP(K^mN{e8g~ln4A)#`rnbyvJFYEO+qmIYYk3w5fuLJmQxTlliVIfV zz)+3--4SI0e8W4+cOL_6OqC$(Dw;LW1~Na^6aUWLoiZog_$hyuh3F&;+0K}@1?l4r zT3=fg@n9u99in5Y^7i;6Ot`!@%y=s|$BkufLGqRZkDUVR~)%MUd zEtZMz=17)amNPcK>qfs`m>*4b-;YWYX&Tr#d7098a)z0YI%ltJFQiQxovwMfmSvbk2rfRA}q#39EmMT zHB{ImDl4m1TTa+i_U+!we;H3O$OJezIQE2iTcn04qieskLNgLe`tA=pNC8iHSlVZo zCzU{T%kcdbbR&NTlZn37U#}>|t>KEtO{9QKDNuv+ zzbc&n96hOjz^hiH3NS3kZY$zq}BT^lU*DTRd$;>oUSVakbPup-Z0G*Mj?_=7;SAI(K)DQCWGt-By=hgo z%`7i_e5@`1YJa%}d{;gOoALBMeUqIw`}Ds*2e&a{KJUGt7M%jw*(imuo|TA(uL! zhN%4er}6w4PaK(Wl!IJc%_&&_<_N)tjhmoaHh)gdST4hdG1JpZF5{n@zV%8D*cB0@ z9-9M*&yn(F(;f5gO@xS4OmW7}2ov*0jpx)@mxbO1QM}KbV@EAxM#&-^~Cn4E9e-h?O;(NK16xn9NSCDG8FlfnAPKTIc7i#C$q3|;*4K5FdJQ_*{e2# zg={54)o&aadM(N2!*;|?oB&zt<~OhSe4m~%U#s=Vkztt;VA55Q9+yd{qv$g)Eq~hW zS!n=+kFTHXenH~+YVvfzp`O#}9k{$R&%CTmQm$iO;ZKbr(?$!GFU|n_rE2PG_!r+d zyO4};>Q$iLP0?w50Mvm}S%qb))e&fX2;psaG@@%VgA7_yqfgfEuxyccB^^4BZ&C9uk%dOT_QXr}9H+;2OdJHcgB~ zPhmgwYek9Au6^x zSQ|yv>emY2p)`WM5zE3@LSdgM#}7ag!4C$~K-X>+&n- zxI*I%Uk&eK{x%<%Vz+M=|Jvcfk7>7H zsQl~G$=5nt44fvSMHCWP2{%s=Q#|qzZEh_$Mvb&Ar2n2`-m{pM~zVB{#Cu0#gY0T;Jw4t_4 zaw#_x^V^%+X&W`PYbqBdjB#fgS`IdRh4>4DheceAoyzKDrmie3DQht9{aMNPA!B{f zuJ_T*><02kCD;P9FOva(uItSgtMGauzA>`24N2>MTb%c5jZQF-iN_I9o_rTS<<=eh zLA{Is3r5q%q+Ot5WG@}Cu*RDs;7SkwY&`toN%-j&SAeV&k#!#D=WF3@lWw^^~xoGaFVD>y! zKcmQ?1|7U@AvPUN_M<5P#bOO=F5;FNe)P!4EVyx^3*l4soTmqtY$<&o%BLR2E@5MR zQbSX-)iG@w%E>f2#XCph*RGXi`B3;V!gb2{z}5U)gfwLe4|r(z7{z@N$B!&xS%G?% zr>7T|Gy$sLcwDHtYdT{5vBfDb~zTQkQejh`HEd}+S$u9SOjsF`rhgm)<)6} zJTHzj`>rCF7I(OQ8_e%%oaqC}`WpnE6=!B5`_*CUC0yb73j*FNh8k4FrG1!jxS5c7 zbq|T(f>6{*|9;8VZzo;AX3AGqq{--<}P_{n{B-<4e3G5p!{u(GHStwSg!#GVSN%ZeCrsGPAa zwwKF?ro0n*{AGEinm_@cmSb57u?q4QhWZL?jFD{6ATjB%`7g`Y#HrsFyrfIodmcYH zGw9koJDV=fcQL5Fc6l0IM^i6i4*T%qsTAy~KQg4E_b(s_{vp}TNIuez--_r9>N|85 z5Tx$y#<)g~eU&8IUMH zZ-P3K4XdaFp5@i9eDLzSZO2*Q`lG*o6&(O0jx@cO-(r>5I<2-V%!4&hsd+83^jnSi zia#6S|1Mk214YV31G(;PEdK7dc@ZWCB_mfmu;O8jPjelI^ zZ}6OyTl3j-@dbkT@UpVz$n*lO+UtZqn+hSsRQ*wWBG>3ipCY~Sr{7Y!<)`b&+fBxC zP`dtMX1Oe;R&2{Jb01KAhHotkBT+Sm4XcIh^Gt2fBO|+vUWI`G&5c1(M>{8SSpL+# za5O$?wh8N}(D5KN2V79piMH*p&>5JU56kcfRLTre9%p4XF=XDd?E9aeo4=-Ri#`%h z>U5!^`puG#B`e*wGRm~a^+e#uzk(kDnPYfa=!>9`5fq}Xl>M`MjLeWnTfZ{>oSnIE zmV9SFwBIZQ&~)}nc+kaooQ=6PvPEwoVqJBW{45`i{bj0xLs}<5>-~cOgs}~_BT;M+ zZr2ZYH~bKx{S=9BOR1=qb=)Red_t-xzIYk=HwebO`m&!9E9{n#)Y@0M*^{xl>K?sN z)_pu8DioINU}(LBKa?HlLq!a}9q+3x=V3(W9oU+pi_MfKR@u8v!*C>W9dwu8{Groah7t~p%OA9Nf8zVz_f9@kLt08 zeSIfah~1jRm{LIm+2g3-%b?F}c(o+I3;Y+y*@FWa>wI8x{r`Q}6HgEF1nNR4_C-Jy zgMpwthMkH3yPzg=8g;G`qUwr)h=F#tjnj?V)s9SHmSk{QHdGAcnF^uLi38CgX8%^lr&ZU&5IsHq$nIQcG{$F@( zhymo;EcYil{uf{*IRp*vkid}kf4*z_{{sHp3btu+J@pg>sSDeYl$1=)J!?{@9*1CM zm_b>8B*v#MuFAN$2Do=3IqDet4<;0{!<(IASyM6CI61?F^FY}iCnqQ4nVi%~!+Cjm zB_&^XF0%6V08lC_Ds%Jm9__m2Fi;M3k?1kvVPRp)C79z%*uYoJLRitY78{P@RhryC ze-8G4>LG{qPPG8nB;ttPpC|otRs+92_5cBdfZkh>i$mmdr}XU`m@?>Vm-mXMjg!ku zMno{F$ls#5cY?aa>JDr86D0S>n>PB=?L%$1cHPua10}g& zVtZSRDlrv8Od$fkFEkU5U~&K9)=%Dr)V)*wnKn}|>w9&z|A;|INEr01vuS{p9@2fl z(M*bwX-f8wAgQSk`mIMpV7HVuUf*LLsd^cE&J%`z_8dTXmpW8>3GU~bzP#%(wB`C1qm z#rn*<^WZ8)V{8GN{HFx+a!9CqMJq*@`YUThbVePUyENyI5&aRa-5UEBQAGjl1gOV9 z0LOqD17@qhmx~+cbc5VK^%oad@p;aJv$91B%UUTX3h+v8F6-z)zE~XKlqY>IjsYL)2q_q|KnWydzNWMD(u#m!V-4Bk19L!9BB zS~3gR*lqRUTPylBnVcD>x#2G5Efmkp$j3Y{z7yTF$<%8oU7{Z{r1LgmB}LdM0Hi6O z=W3&eG}AuYsr9)d>>ooXq!MI?F%3sJr1v6G0?_B1FP+|D|HK)i(0N?EY&m5KcBL%V z=nB$FKiYc81IJpAK51gBY)yT-Td{cbxZOXPf|m&T9d!lORD0p0sx?=RrKj_BpDQzz zDGofRov>yo36^wF@5&w~I7RhRWIJAkbB)#lLYlBT zG_G3P#laeh=vK!~-Rnuok;pl;T8XJSU75!i3E6d(ZF4rAyQ(t0;ZP%2wALgQywkp^ z=wwm0FdhPT7aa)p72h`S`I1AZcX+B=B=}y!;SwQ4D>@_zMY;aKYY9q*7!L6h0!FYA7uuGtU?bPE@o5Pc_xu-UUB-wiPL6BS}I}o^|WE9dTpApv1txZ z)iRTOylq+qHb&JNVPmY+{h+XE)fl}^zgl?Q3a~O)=yH*;xxph@UFnzTNK~k3pS}cE zX>BiGw@u9@2)u(`UPs{*bB0!xEXt2qx!p9-&5i2e?7nZ%E5KIZ;|LkP3r#Lib8+Wp zeI{4we4VSee8;}OnDsWvZ+rgQ@LEvP=cDkBMdvwFB+%zXXXmp3N<_lA)F`3pMG*FB zZT1ZFd|>t2dqH{`7!9BX=qmVJEgtOAoYF16OxFF@)^4v>FYIrogDDv2ol3S`bjbVr zW96m5_a0~WI)bk0c0c80KR?xE$jTLum3+WFZfdIg2S@sB@5_|Q1b(ARxhu=_36{}s zJ##JU$~99&z4@@eee)=_ffDV`Q_<0D%&wA$K_gXmm`trIROp<1 z7KuLE9xWS}3~`&hOj8yyJS123&bWPQ`8zLsE^V||dbVmMA1AD4NXdv@df?LkIy72- zc4(#9_eHD1crIKXj*jCs=LzEe%`W(hR{ciZ%u4pm-}RjA&2H8)&hkJqqy@QOZ^7O0 zcI-B?cbdcDZ4M|zb`_t(Tm7HQSw~H5Ux?K`AKz?uDn8>(T#Ovks_^awu3t@!Ww{?x znU`Vck#}Ko{5BVT(_YRF2lk3>){C&WzVYE94D}f9BY8a?$WvvJFe$6suSF40DRt+LlZ#e0;x-MkkD#vyj$;ai61~iYCpatvWC{_`uF=iit zr)W2;^1pYi_yi)TabtZsT3=~U4hIG8CKl_tA#I|y<346T3v~s~*00ZB(-*Z(`33Rk zL)d$<+5SMM%wDDs)6fkMs1svaI@JpLoIo6HMN{0GG^nza=<-`cKb$~d&xYx7Qi%t@ z%%>VSnz&>Mmd8139YgZqzxcPEbLSbb>sI78;=dm<{WcSk9?6G9BZ=V^S(6^aIW<9) z+vj+P5Z=3nhF@S8R;PldyGGOcIbs;NeSGV;=QG0lU@Bwsgt z6>-(HQ#99|q#%pl>-|%C^I#`=N+j-hf8x+lxqdSw%Mm5T+$UxNYolFiS?R5RvBIu`q`|>W< zKLcre0$UBgS;d`u2rk)2Ps>I7q7{0VLWJ;o+X^Y}^62;kYLnkm;gmVi+C$Vm>XGrsM)C9lkl4~FNqEaY^a`gl|xAVlC}#WOVZ~dY)Tv2TFx1a81qz+677&D zZEnDWX~RFh)$HbtKupuCRrl^%UfM{esxt|v>(d;yO_A4#8*CeWx1^0og_?WdMAZn< zAQ6e*jwJm{v2#Fr@Gj4`#-;9Y`e)*=PvKJ@-^pRA03&GJYsS~!OXSz*neP|QQ68lX z_tfJF9P+bF0tYiDn1?J7jIt%g?FACaW5#2)+GfzpQ_Ydkt=MAJ-*oC)u{7lq^L|ew zZvO9o0f1Fc0nS>iy~NS!V!8ZU_#X!UJVo+wsDqtG;${vNZbeHN3&=fx?55mwQ|KkG z676B~yRlO5e4u}}(s53#Gq%h$Ds7QK+Jz_ZPes{Kx-E z`+m$}hibib#K3f7^D=8UCyIy=o-LTZ5V^WR7-97klTHQ5-9 zleyV~^j0t!=}1UO*lOp-1;XwqK1K0yGWap?p2>w*pA94%L(VL6*Hn+z2&m_+;(ra| z$5uOR9qBNOQ{3%0HH_Y1L#u@RJ~;x72sRMh=f`^fX7f9Vb0pnm$&BuIRrIer1r#&`Rt3i)6P|vsQ ztSiP3(MlW6=XTDH_%@P2!5uO;i0ps3bSbS7J<#Eit^LWZV|}R#Y;(<7Q-;6dD5s6y zu)sqM-FszfmmqoqT?9vFKXibKn~FzK+rXsnQ4MyAn7{TECalZceO;kI!;5Q4v?tg^ zgB4`5p~dQw{9kP*xEnx7U18ilr~Fr`Nd@GiI!%sf$^PTD=Ril+8S=T>=l_tLBv8{i zI-@N5U+v<$h=2GR(R!KMe<&5mRy`yZ6b1jsfLnvW&|3If|NlM$dOUy+Q;A8z{Z}aJ z00U@bxHp8_Jh)o+ z88vF9YeUF-!uoeY27hSCi3=zG7#bRS{x27GczCGx84Et-lDS_j?i`(kq1?oMUAG62 zQPA~y+|iw%uXEeK@cp4*=`$v9$A;>5vDG=|_N$dSjK+kahX5(nP6j_@M>P*tM z;n!0R-Y#P(e19KCgbugO^g=T{!3sAwy8+Avs!@2eyZs82d8%YmS33` zdw(cywy@MRwZ$qw8!5idnle#^x0(ZGjtyF*w^rjPOB zg@LrTSNE*Qj-_U8cN5`fa7}Z_XkhC^XQfmxk)3-`|1mW&f@4NmFcACJj9B8GqTIc~ zOhrdzdYT6R;N?HLaxUi>ls54gOl)(YMQn)CAB{dP?6Qabruqn*e5lR3JWHc-<{LAM z&<(eqfXZ~D)MzbU)LVgrm|=neKdx^*c92@oZksk@R$QNnV{ZA0uCXr{g7ljWY%;B* z@dBjvXtt?ni%UW(yhulvb6hZwhzUd4fXf-dU5J3DiNR8{tqIR5_{ipa2ir)?dflMr z59jOQh4Tqb7hx!CERP76Gy1^HmP*-qwM4GR^RKAG4TSc8kEsy4jt3DiEp(rfAKBf{Jej^9KNIMaTay}Yw^WhuU&X3X^% ziwWmj6BhfJ!~L2(c+X%oKlI4=k%48KGZZ*GWTX+WS8)>ZjC}BFo@%vBmNAITJX&uN z8EAN86Qn}^Bm*+nN-a0U%L(}~wDYVjI!)l%nXVB>*2^7LL;q^y^{%{a1BC~PvInH)D|@xmk-%!JeC&+Ulg5iold7ap8}8vUX%n)x*bX)+*&Az&<@@_J(U zPYDw;6(nQW1uE5?TCpAy`8ju8Fxm>+M+i>-Cj_^=|~2$+BLZu0`{g+dFsu*{M zZFQo&ix?1}fG8)m@v~S(A45uRYoRk?6u0@yt^(F|CbZv@^!2W=lWmZjSc6b5YoDMp zTV+#>U_6rrk)>xHM+%@d!8eIp@X&A*(^Uhc?03t9frdO z|57iS`VF6)?TCH{DygE7)ILdV?pqUt9GevxrqmdRIo)&RGANd9{Pa=$ zP~y2O_~poSfgrP%E9ZM1=Y0l09ShiL>r5--`;DKyABM>B@5JqCOLE%TZM)ZEHRqQx zC9#m`r=%LFAHju+!!e6i)5g~0fqLLBm46SV)z;SWgNcz++Ndc7T3L0@afZx(pU(13q?<~5*SNsnxi~ghZ6FlPLa|tY z{3Rab(E)!JQNSIfhQ8+W$l7t6s+o&Un*%ApW!)*CuC?x-O%IMlyuBtvK3{e65R|Lb z8EsudL_!j0nG>`5H~4;PGy>u6D$>8Te2RBUrm3Jt%8T5i^KdJx#S{vhG*Eg8-(R_9&YY|^oF2DCP9&WoBx zxxO_%1pI7^WL=!W)oWByHr~&){R|GXKi;c?Z~Vwqm|Njk_PerVMrHh4x;lZvmrx#F zx^SaHBRT8Z0+raGllS-+Qwyeb$r2dZ6iRlB8M`bG>?gVH#+R{T+cV8V^GgY@Bkyml(>9$PW4#m1k zL9hy8t8#I{td$FF7?%YGhXs%Q>w?sjAY8AaZaP<0%CbeGE*j8~#V0m?%oKE()Z+ya z$>TMNNqXM)5(f+Ov6s-C#=VRfH8=) zFO)KK*$1XTh<)Q6bTwKEea6>uSGXRD2Dn!?E%?NAn}(-M&aTAl{KXBwyyZsLwe_jT zrn^^I$oHidL9|fvV?4IwtOh2n;;Z359f$)3Y3@T=}kh z@-DucmE>G76IOm=xqj;BezqmdIvUIAsFduzWebu#LNkf7{qoc*cum3*zTs&$EBNoT z7TuS#??8_=FBDt9LkUr8Ahuyqh0A>GEX%q9by1?i2pPg4v*I5bte+=v!AS|7#|V!S z|L`y0(?!kd5L}7(F6UJz!>?96-aZu}JZkm zk_n+lfgJhO#J`$hB?F|dr~uhGH#iPz^$>t8q{09TW4tJ*EcIWB8z773n5JZ`q7Jy~ z1|9%!==|Ro34f~m-0N#|pK1ejK}d#ldXwr1#mFRx=JY^U02&S(pn%j7&p(RD`r{Ed z92AGH3+YHE5d_)4Q@eChRaz=ttO7L^@z{(ZYL)pFlVVr&@+UV?I7g;*tN(?Qo&DGC zoZK=rD!uA9QV*Ey!4D$9{evdNM6>NZMxbUp?x{|Jxq~xaW%b5jx z=E`7GJ^>oMO~A=&JZjN6pt%KZ77(R1!=TWI25J+}$E2o-I{MzFQCb^LI(aZJ;(-Bz ziWL5Y>J}g>X9QI40WvKF03mS>qC5DfZW1g!^)Io9*O<)mA6IG<$q%QY$$>)AXoZFm zs`f9v{6phBAGv_j`!tT}e-FV_a-4#n~{BD7J1kB_Y?x2r2F5ut-(Vq&h` z`4glKY-Q@?!OUvV8j>(H)-E2xM9C_l28^69zdJj#eRZCmn4pbJ%weU)0VvoAG)ST? zmH-oCY_rSf1%c_;_RSNaz}4hW(dlehY@u;)k7lI)4 z_UBtzXc*6?V9`X1P*1qi#m%xhj&jJ+tcJIN!^jB&J4Xwp>fboQ=g0myAraE?l|Kiq z*Dz`q7<0wn?PVokF^a)6j&%1tw~zFCtgnSxrTC)>^Lbr*qr--jZLfpFrt+2K!A0Hc zB3NP}Mzv@m{k;Vsa|U9ymS<3k9PB=JfJByTzA4vJ%$9A`d6hg=k5V)7VP^lLihDYg zj2cHuL#G|@hLM!Z`(#4T^vjz}jPCD(Yp}Y>8b3b?8#j-!@k~bKFyR??29a%+NCUGu zU3u^*tGYi)*VE4sVM78lxa%pyljjnq7$9d<4MN8~5vzMVzb@BjM?cmSBNr~2HQ&&) zYqmpt=A4e_bTL}cum$Tw#itK_ozKo+(()kgh&oFL$NcXvcq#Y})L19|b9G!oLO-8U z){oq>?dso$ZsFaxmD98?)2p$QIbeXI8XUdc4>Q{L={RP^1M6_M+K%lm3DQHqXEcFB z1ox6~r*T!`$E{Szd^6q^O}6X7MXj`7r0G^gi=u&B$ZAgxDlca{2pmP2C=O;XzLaAY z+erTO2K3tl#m>Ky_dZ=Cm`Mrmt+Tje!z|Zsx-&T2N`H5`^g^&*DXoUHLgeJqvB>oL zqb19d?~(k>QNyDi-On&(Ojh|JDPlwmeNu4~B`~=;_}@Q~sdJb95cxtq zm9#!FZ0FRn4hn0)xT&9ra0Ip?sEafT=X8)4camesY4dY@+|_}iAjM{1<1RU=Shz*e zz>e`e6uAk?avMPd4lSg_zm#(2$Os(lw&46B*gy&Atz78wPy_R@RoM?|ZkjvJ8AW-I3W<5w zti4T3U^AI|uK3lFYfgthm-i}8aw@`LPO+R|PItB+N9imH#-?>ojCbK9$5TPUUV zP}}O1<$6$?@x{~Cm+fw6%ew#D1rPKAlL3*yl=PPS*_S3)+j4G6; znR^HfY0()N0zMjW0*r(!SmP=Geqq#v$DTB?!^7LphHm$}qJ;tW0u5YH17UOR5kl19 zvzTb>Vmcny7{SCSSyx?-{n7T=F>3X9zh3zI)?=U*MuX%Co#1P&X;ZWzevwafiB&(1 z@bE;5kIos#*%(?^rL4tTA&L%Xi6jsR=l09+JV20C9{Ao7oQhW;h%iJ3ha8UWK@qpsS@5`1ni9@r;R>=iEudLli=RECi$SPOLpLeVvqcQe=oSgE*GMqG+RVN%%I0)L|5aWjN#(joY4ID6j)k2(32vS=GhyeMG2IKT z*}lW1d*Scsnp|ooNKh`jQI=C+38ZbdJp?WMEwX0`wWHcK`Xg&O$#^$Mb~Z*vM-&FK zq&C0ZWb^)x&@X3G+9x~IME578T^&f9$$evMx6sp~?g-I9{5HG0@xbSfgRaGyF{@m< zHdF3luVHbtO^1Kmg#ae5(Y6w)ka-2GzXAzal>ujcCkD_yHY~1C#wa@C8P6~I60KuH zzs-dtI>K{M8a7FtzL0n?K$}lR$+-^xT>p2-GlF=OlIVw`CpF4Se_g@(7zuB-P9Gk0 z-Ha-JD0g1s>3>B?Y{HZv`OCu5kK2*@ylvlTO~a$uQ=+XQKID~j@e#A=63ID&9i4w3ms!I|Cr06m!uazODgkM{g-c|^X-}t)le@8 z)Cj%e8k0RnlF`QQf@1O#6Y|+x)6!kPr9LD&Jd-PIdbfX|=&@2it4M7sed)4~tGqj- zznG}<#v zxrsB+eHx&kznDB8B8C84#dIhe*M#d-UFaERYjaD6#4D)6#;Dh)(t@gJRf9>t8y^~# zj;P^m@)y|IbSjBez2P)m{V&);c4G`um(#?82mMeeo#S=ezSdJZh#k*|w*aiHK;NGa z*@xrD(X)10>ekwLr+CXV)YX2!TV3IwS&Kf`rh7g3ZeoiFoYB1M>R4DD2^{JE?%GlRz*7z_M3X^-1n-Ln+mUu(I+A=jKW5a|Ou6sU zT-mTeMM||yQs3yt{Oz6cbo$5CcZ(r?);6oj0$;Hfi7 zljM!R_ktf{;)~DKGTJCwU7N@2(Q4>DK1^?JC5Fdud5#Jv5|5d+e^sezb_F3I(lxVY zhc6rhqpB<+;V5z-Z3S4ty1VZLOEXR zgSAr{aC~dlc_8%5SG_i);~F;e!4+Z0%ekgmSE6g}!VZ$tPs4a7Op=bb6$F>}H*d(t zov!~brOT@jbX$K;hqvt`u(QHDTl|x%5@kn$A?DxhxA5EPGWX;vJOTI5E64LPk?mT09-UD-b95bF8P|IfT8zQt3T{36gLok^J<#a96OsdoLb}acsM8Rzgu4lh7_O!N48$(j~ zC9UR?=RF?Stv_p8{~Z4ryUu!HR{4fT@l>Jhe%}KR@?Kxm4JUQV_4j-+_W7ls)f)E) z-rEPpg^<3&Ra{$VCYbl#@|vPk>mfnay*ve=|J{x6T4QH1S}U8edTXo0CU zbA1ac*K72x<=C*m)yv5hi)GtMq0#BUbk4u@Ox%?{-kc6Mq>5h6GMgIBP5qf;fnv0D z`sXg1Pq6b1nx`Wp6hec2v1SJr_N6@KVf*P1f$8`1hygf#cQ&meBtzlkemtY{Dz7;6 zEe-S!C&3>=o29*t4?I$bD7$M+wvUlLLr3$u^4J&K^nXJ&*)6oXbYV4`8gxxvm-b%< zjY2=xK2WDx!2C)cAdr2RgP*+ZV1wq+Th|X0Q9VkgQ9lexy-j{=BQCUAev*g$N*q8{ z+iENA(Ihc*FC-t-Q0;5|VkDaTM&O48>{m@@xgtLia8C(JQT;)PLdPq$AYm0K`Tg)UL|0~nS#PX(jw;x?-%S_^XpG9rgN2YUL_VKxb5 zFjcYBH}t|WA%p8F60h&)lPDH4sW1Gwe(PG0knX<1cTS>ngN4wc9gb z-@#VH!O&>0CS?W|tIROt5~-=_*kcEa|88c#m=1Y6~YI zd1nemR2k*H*-1D5w)`Q>oifh-s`;&BDwTpjJV(-MNhC47qWtzg*q)XmK4|Tn^todU zF8R`7jvA^8S!SqZm35lS>=@GL8G4H+G9CQr&LeS@JyqW2tNG=qpGJs1%8MZG-O;^< z3On|r`mxTC+v1PzuQXvqKga4d<}g(KO?ZrjvgzB2q6pDww1>6@<)pibuJz-zS}3Pn zugJOL>M1}6=(L)x%BX74Q+5drU6`;tjAOO*Exu6mP0h{3%iSM9AtTnuq6u3*`i2g@vD0B;MmtM`U;vc;~7ShdyXFc(k`h&BgsBYaWomOtChz# zbn?hrWe9}h;AMpl$YO)TRh2L-U-HbSay8U=(cI&OdHMvhf~c6MBIP$xqGtQAm-qV{ zzE^DeH;7tJjs#2fX({|(jeI|}zPm2T#0WU1Q0l8pJhmoWNQVV9wrbJg;vH%R^oluw zSWs=@KX7zjJoFFz-|!c;I)|*1h(U~6viuX?cO&fxpGI$6P><#hS1`Y{8u!l;u&4pM zu=Ga_)q_}dly&a84=-vD73#nYJONQuj}rKrnJ zgiFiIw8mK3@{;Nc#Y}m!z}m{!03B5NtJ-YJVNa)~`@G!yoM>+W*DG0Rthd;2`2yvt zl9H17+;U&9Wv6h5zN@Ov1NE{wiTQpZ(7XH zEmPFSZPbL1Vd@xa99+D-g`bZPa}@%69yU8)R;@o+xtYUFTL{bMTneIU8-tzIG^sPB zqhsP0gZs|TY%@!8`8{@nD5Mgv#C;XGVR%;yt*V;#Z>@+9^vIH9Vd>EV>UF3}rh4u^ zdEm{C*G{Fkv?e!{Jk7R^m+<|veQDnM<TaRj_B-VrI>q4KFi&ueV(*L{K1g?qqvhD_tU^l7QR;p4wZa5yww=n*`2*nj5;E3ULE%`E%7 zNcK8dg7=khVEDtOf8w*`GL5&NzOh%1_Uv{BGslU9t!fLku(ltX)B@sUtuHx@DK81M zA)le@NQ$~kP1aTi<1!|uvJ&#u_mYO*w-zS1(=Aj{D8i#iD%v^G$uDf+V)+)ZvVLzm zYvX*!Y8zkz3S2YZ3(r>mg9@{VuM!gUQ|0H*H`BHi8?#uo_x%BRFpul^?UQGMJm#%X zb|?6LZb56uq?3_bDtpfr=304MdQr$tgFbMp;+jA|Y)>*roEP{y>Cc?I+;1rCx&+cB z9V|`Fy?ZyXTw$!B;n+c^gdgoi^A{sSFan)ypKGig#L%iyihrtDxdl};^i~{6 zI>*rMqqXC&hwr(;)t8I?q)D>!kq$JeEW498OWqkJB!3hTrT+O4J6;R3#Ob-j=~3_( zN#x3x65%ED&q``-WAUU=uFCGGvwMeePR5;;Dh`6IP9Y(IND+J0 ziWYl9h*YYHrO-KHa5Nb6_%PQkf;0j#6{)I|cN04U)-}D8b1N5T#5Em?4ElL=*EVtF zJ4 zgH!9{p5@u);p$JWFc|U`h!ZjM^MQh&1X%)p4`Z$FXwyn&h6-2CL=rN5UJtDBXmE~bUHiC)UK zNmg|SXZ!seX>#+YXJ2ayPh;6((i#hobx-npZ`V+0K0*oSI+4=aRqJs|>#9GlOsTPB zamQ%Ta6lf)56E0EPt{hQ{pVjoa6V~}*lrB19Ga>Z#Mu)=ra8v)H3U|SG9b4Cri=-T z#g2-`e`jAZq--{Fc!V{B7m_{OVQ0z%C6eN{K|-&?OQq0))?PbHvY;mw{8O&HC2;~l z^e6DR%hll`@VLjJwyS0>w;2lgfs~~$(Wfh@HgFvn_3tE`$Njn=Bm%RoJ~1EWB(Xi{ z-F%FDc5hcr0pBM#v#o^Vw#|s5{uJUNA;*7Q@1UMvb-%a^*z_yf0gZ_7O^QPXs~5+} zKk73nodj_{l8VI0YWy2(F$^U(3G2?m#s*@IxI-0DYWvNjyb{e=tNmA+r{j-teOS5= zf+O8^`Te&Dr);dQ-t;d}*h6)QzT440ii`I8j1IoL&Wgm9aI5IUD6Z zcxP#9KUza8=o5@vSdYkxM}WD($qqCL`pq)_7TrtMHqX{PU{65Y)ZHeB8{BK9kTIF^Pq5Iwh*i$f|kR#WHGTs(*L+yn& z!`0k|ST9EhFg`~Qe>|<}UIH|GB<0>o0cKC;Z$W^{*ZhFLWgFvo~)zOD^Qolyb)rG{M;!F_sRrZEc?*I(2G zaji+q!wV*fZTpQ4tjAkB^u==v`8J^xqS(V{>iSw3M+%fTpNEFg@dwq*ik_b==;L~= zY5ZO^vm~SSh!uE4YAQk2P@^?SB`-s!$|eGZ4(9C6Ui3j;ek}uHDPJ}sH;BfCZ=K7L zr$?`>XX{!$?fHZF4c+!gf-O~}U_2o&WSg|tnOj7-Q)kifeE2gumecwSJdVv?eZ@oj zDRUO4@2Epd>L0^cP$1UK-(+Tb++C}=Ja#>8=o27rEVMd!;{`p~7Wr~RIAU^T$5xfp zM1Jv6WXyBzL8xADuy}BnZ{I@Hxl2Nr^OO0R6}Co~x1uQFUI&)+DnZ zb-Y(;wah2aAGFDWp*09OkRbhpjJAGkDquoYSRQeYclTmvOHh)?omEKf@1TE-%AkCL zLs_I?l8X9WGm6B<@1nVYuRa%B zB8vy% zaOAgU(Wyt6oTzB|$dx`pjya^z-%8?Ifw2q<*(BaAjiFL+I?&TO5fc0Dn7^Z#^zla0 zl2Z<>(l>>$|LI?xZj0-6-%s*8fZE;7Y}0O`=;1*qLQjM|ON+OohKWY~TX}yN5^hSY z)sU5uV1ewZ*6in1Vw7^NpC3P9>5?uKWHlQ3?x7El&JRN&tQAH&lOAgOZ6om_^DprO#=G1F#6xak|wqv-QxbR^yC5PA!{?5x_ar=bb0q^0b}IMOJ)ojY~Dv~{a-eBFH6Vga94@R z!A6HD&AuAb*lVDx{vO)(ntycqL}TRSk{}Z~=5`Gm3u=1TVNqn`m zeO2ZZ$nxa&9>c?{E30G@-rj)=oV(sZmHMBp;`#V+$+r%yTf(@B8qx)SygY}KO17JH ziW(2#YD~V z|MtbWG(_37y&@h`%$T9ocKu*&aKR%^PObixS`f38zJxZoLJl){kksH8iLVByFZ|G?)MFgUm3JJ^M= ze{@sHA3)&3fRp(TSVBs-(p5>73IcY78UO+i0$5@He?XQ(xKGzoK=cj}ZuW=8Bn1!{ zDiQTRpoR~QelB~0R*nMPuy{TgfI$97%>RKo*m#F;T5(D~zzvgvpa6vP{~qoCz+3Af zM`*Fkgo3AkV0QB5zVUEN)$V)!o7xy2rX4Ih(c%0)Hme7`?5|Ydf|&3Ovi+K=Sdb!# zl>N-7h~`kz^X#W0kT0m9xX);4hXP}c*=uK#pLLf2oft5d1R>W#rBiRUP^bsLvc$)T zdNWnBQ>QjFYr8aS5($pe^3~#LZQB9y&}Cx5NC8epN*EG8jMoE?&AqGTs;nwW7H~?D zlz1$VtDQ3eD;Laf7$K7Cxpi)oFtqMp!6@buUVtTNkOnvfuPx$h$DxL*2s4q20ZDB4 zgOqQq856+tApsVa0@_I0$Q_5rwm-Q+#8gS6!z6%Q31Vz)EIAyfwx*dWLIT- zwoP*@si?K}$-h!v+2Y!pj;*)ze?b7-HO`u)4v(9|D(x0MU=Es0JVEU0*uldK3K1{R z9J;W!7UgO5$Hw-|#@rNvN9bmPEkJnNYwKlmv(wAb#lc~wnplN{ojqRyNZ?x#;V*1$ z#eu~(x3u`Zo#@9&7SXx@<+(}|Ko4bFpg_34fGY$`Vu9{s1pKle8aNC1eop`d?K2>P z1L(6py+3rvAp*LpYJf0pQ;iRxonzzeO~_)486GFBtGjVCEfg1EVqq~-UBFO68mdLc zfJ&zL8-^&L5ds3j0(q>dB3S+s!*Jif+m&d>gi_pm#YP!^*SNu1@)Ilt7C9FO$Jt5) zjBQ4Cc6M>tO_lGGytk|1_$ zd8OOS%gemi(L7=DE$3P0LU*HRrbwDbG$#*4966Q1cCPk zQm%0F{eX;oiUCxv0Na!fFN!}z5qt!r=ENjH5AsHZks-BGqT5GA3REM*Vuy8t_6eW| z+QE>>LlVI7;S)Am9ruLZ=7kD6r2#E$r+wI9f>e%VoD4A)!w*p_<=ryXpYd$JF{&hs zlo*fw-z?}kO&)<75^@kFaS7vbC^M^#wY3=9#jhLW&;FrBxwxAKYlTL%x3_=iXO!5n zi$LNS8DFXtUV8$>WUg`oHcP@y9E z33pTpzTO82-ZAQTAzDg`HsT=8I-J75PzK)?fnf8+)!=dhk)*h6mi_aVBc?=eSR@Pe z^Or0>mB%#3TZVJk>CY6@-m>5q1fV+pD2@Tnt)H;oJJSp$(5;CDwMyFIn7`p8Lr(}p zk1u>5_+AGFQ5J*+!=XQgad`fjA`%bP^LyM0Q(6YP+C|35xMox>2wmVu4b4PNQ9~Jp z9SmhDKUNUzfq%hV9% z)QFZf`J6`R39eAYyucCl(|(ZH2)v&%qm2gb>a^ec4G_6}dmI*$oLZ{U{{S+dkz=IO zn)LC$CQwL&3{c0RMe*Msc~N2TVE|2Dn+kq$l9T~oaj_e;`L7<%W=_XIHXq1RI)ln*upA6e)gI z#G*r&JTu~Rf#-5iI&A+swBo*58tm5*Y-2bOccj%C7x|IMx_SQh?NELZumv%LR5&PL ze|88Kw#4QV2cNrHG0zjR(DS|;)PKKDgYA*;r$SmoE%dLzcXW6YLvw%)Jq9*dQh8Juz6+0ak;Sl z{h4=lez~Jbkisng#!V$H$p`;Hw0V8l^g^lXQ2^6|l#y_x1ucYPK*&bs(P9p+%m^cv z<^LSP;3-mu%}+FlMH+R)v=l*y0F#s=1nG^`2{djagUO$26aGe>LNyqU4;Ab)@JCek zKx{8Xfv=b1V<%J)3lW(%lk)?7IEP5#Q9-+PO);4QLO3YN>c@x;=&cKe3JeV4(K!u0w0N*NDZekAR1JN~)8zyw5QbVE|HD94vLX4gLW z&`-cpV5aOns*ryrsV8enUZg-)4rRBJNB@YV{a)SwfUovgNdXjY!yaL(F zPZWylNWy=CO-)F6s@Z-E*+*Qn6iyr!ip=~scIam(v7&gw@BNeD$B3HZpJ2sawjX+Y z!(Xc||ag!LZQZVGE^_7Q^taMR`bZoqqjd!ys^7H6#?Ba&{9Xs>MKyhv>s) zxWsX^S?JNXaYY+JWkHkdnF9A9Us&IF#eGSDm$jAhU+Qyh5-UR^nS&$Ynt087J2iK; zO`zGOU>uQ^X1lp`ER)f78iLoc!NlAVd7t3|sK&_=%<~ys^#SrfatG*wRfG)hQNf^{9DXZa-8LFxaP75zmn-{xO!FC~I9Ho0 zTFl~`I+vB5GclGVfh`@up)*U25AN?Gr;<0oo2TapfP&-t{B44x`?sye?Q4!r@>Kfc zmXj@gf9CTw);Gz9N&>RiJpNwqAuY*L*`_$euCRU@W5f6{KGR>>_LwCE_>>_^7nxXwDYk;?58u^EhbY*p@<$?Qem8co6eDT z?t(8fSUHqln^Qd+W){#VhmSoFH-3jP@_Z3JRsg>_^Jdb za017|!wg&N`kOjo+jQ!k`c>C6uGL5e{RW9I2NiF-6>$GG@ztT4`1hd%uXlruQoDn- zG{N6kShBPSzG(#ieUR=ZXSiM3?85v*=dvQWpTJ+5t~-!6H>U`A>ths3*DbPRbfGFf zP~hXko!EkQL%+weIlve6mTJ$Zk>AVAj@*VWtlICez>!Y0kMPIqnBCQNoAew^5l?q` ze6?Q|X}APexK@NRGFNA>mW_$x7M`tx&JEZx#>+Kf*%OaK?=(UC(Uj7R4u#r%X(qT5 z-?r!K8bk>r(sTmlxRk-ZZq+SD^(bRO;kRqM+|X}r%)HGt<8X%(q~mWdvm!w?26AZF zYRporWolew{Xr+vqJlg+Y&hn_*ZS-H~ZoeOnlpK z2|_(DyTuIlqGy@q+Vp##q5+Nfmk9d2AZ}WQb?@$!H zO+FR!9#tj}V(=%R%uvX=;1ePwfNOnyQ+;b0K9>z-$0XwMI5D{x=$w5#a&Uo!0Lvx@ zE=QCKb8|aK_6T}Qc!A@o>$239YlRZT#=Yi}w97{hn(Zw(Qldob?b&80`IWJO%B~fnQ z53<5}AxFHKexscB3!l!ENqlhEct?_E01m#|s2&wZ_mOaBZ}LUR+t*AKX=??JfKfnw z5|yJDLdLy6=-hwlV9+35z5W16ZX_m{0M&v5perNltWkyS5Hkuk77&>8cB48si@CFg z2)upuG>%Ph}23CF&NX}yU#%MlNpTcsA7UyT5vU94+-#1Jhh zoktaKY&1>PN}OszPrNo+T^)los)My1#no+5I#-Tznua-LwU<|d{d4_EK?@>4kdgN}!V1tm2184y67Ca-3jFtVr~$|S!hS?=;!TwQ@C17P zbo*3czJHU_uj-S>DASDq2$H=aMelSkw8bZ?cHkrQ#K0X48fzZ#h}69K`T^p>lrlg> z1@#0NJN`qZ3~1h%G^_aKsOAHdx&RMfQ+lo=ZA`k(n09ix(+_Amqe{^8Op|)=k0k63 z$L*owZ6FxRSw{5iqLc3E>Et3zDww+rm8ER*n7J73$F%tV#6M0_6v#+wxaj-{GnR@o zt;frCKGlR>gz76dee6)GPtJv{B>fjQoy*`Y5-B)tg(ksqkpBrOsd%)s*}YKO+$S*S z=2WX}eLy*^wq{cM)q%4_@c=i&xE7mc)U7zXS`EbexgG_2uw2iJ*&uFH9>?nTG&^An4%hV?t4ppkN>foD{<85y6`c|R~Pz6Zo zto!=CL#xPd%vQjv{c!cqcU;0A=u<0tM`@7An;eOKA{TsIEs z7yCI(!!)e?^@*b-8L&)Da=?_sl~PFDLW)Z^zK0en>P5kHK%i>!l$#7Y8ws0`NABZr zcCJ#nw+;wX^JFXUT1^fa)b?MLxhZT&ON$ivYAcwL^LbDm);zGEmX@vIr_$8_HRQn< zl?AW66Yk7hJV;k*AdAOORu#k3+c&gNvibI;DYj7K^3VJ>#Y~r`uMrTu_hMI@m|FDS zK0G^Pawq-f@GcZMLVp~^v=(F(H2LZo@Srs}l$n43vb_!M2qiwt)JSY$v8rBC0Zrr7 zi)=p`N@@fz*gNufQ_^isHKxsCN}VF49m3}#j`BH?;RWBD!EQYJ=U-1#H(V-8kOT&> z`AHO&H-}$J_eTkMPzZi!t2@jvo9$QJjNW=o>!Mx9S0I)%RFIrJzBXa>q{$$j)N*B= zri7kr@#ACmwH(_z53w%3=-gS}Fqv!zBcu)*9wz^`=kTKxuj=hDHLTCB9z2F&{!%I( zG!y5XB(NLRqmo8>X)^OEOK%j?xp-3MVyfT6DXOlu_#f=O<8vn8 z7d;wI?1?6sSQBGndty5i+qP{?Y}>YN+qNgxujlivTlXKhFYc|n&%0CI)u*2BbN1e6 z?Y-9;shF%r)mTFlf1Y!j^f~!%^2oxaOe|`*hgk$sHGOB6^hcgpB`=fX@etp+&z0N5 zj)>KiyGJr|SX~5jy}fH7&s@Zf`luu>-Gm}R3_|%kU~+x8|=p+4n6S4D-Zud1)Yp&!-0Gg}g@< zu7a3^roNTzNNyZX_Zu@9K;~Glt0}ax<949bz zZ2!eHi&vQJR3gV}CVsD)MJGlg^z zff)e_Bt7KRG5uTSJ_G$Q+?3txpR<`|#@rj#9kT!nu&h?{^5VHwe^Oz`!s6e{lwg8I z%_|R{Ul<)}Lhx_>yfkHX5zIrfQ3gz8;4N8`=xrGGc`ZBPVsW>nPQW5Xd?bJn>thmN z>f8ICT%brU;aahPa=2wv{UqZv-cV8z@H{c<{n3u8OBVz!JDO5^FOM zb(i||U=daxiao-$1-|pJY};h04j$e2-NZ^4Wpu#!=nLuEIXB>t+j%z^ZR{SWnIL9i zD|!?F8L`Uv%B&My9c;bC>+^v57{ak8k7Ztc+t&YOC}bHROd!+4PGF0u zz^DLK#2bKybFyUKI|Sz<4S*oo*NnIuApA5dy9=wVY7nRU z&~14<_y}G=`!mu%JZ#f_b)`C2X>g!F6zyrV|E|c`W2*{b+;YaGklSE#6Lx85hKoXx z0@5NbF4Cw71HbWyQpG10EJ9Em()dAD-TN%>POU~{auh$kB~|augAHQB$%sixWQt)0 zBF{YHz|1)$oGG$MKD3({CZ=pZ)+F)KX9QwxqQcv({+xlmoa3y%rtdQ zJv3qdCy!H7$FqjfF}40iRE!hdRj62j5(%)_sd6+V$>t5uU-1`oqGK}+BI5TPXLU|{ z1?6CfMru>N>#EC?V*DhpUZdi2fZ$M^U_0MX1?IxJ6EWu3h_Mq_!57wVp$vm|$!uNx zbyNZk{9tjv_lqZ=?;FWeu2W%m_B@c}5R_Sg)i(6HWgwI#S2w9xw-1%v#iY78uh^$B z^rUeoLwyu2>>k>E3P2~nK|LpKBer`b=*ITC8rlhjt%V0Oa4PcO!poq;G5xWW4O}oM z=zm0E4XEz`0jP={6mNMB*U+zA=9a2tgv~#CdXpl8eA}vW6l8J?2i`v>*JpMlf&txU z)!+YaH}YO1BDaY!qHonbR1}hM@h#+auZ6T{{yL$^EVzI|4=>ruRPIyQmp6_@ zwws1K##2}DFkMLhaPll^BcWrM5FG^KL{wOs($?m$y`^=A!A8Q{UT~<*J-4`V%!ryE-mQCUiAi$>UBhlkZ1mDrCkf2BVlig0dm*p8F@T;O{!l z1f+DAS~i6^$^c^i9t39DJ8dt6x(f6~ysh3T9&aHdS2Z&2i}rr=}D< z(c!IsJZW-xlqAyV1d(|OgCuRJ&CBU!Nzu@dr$4pYeV_9;a1#RFCeyeBbqlw0YxS}Z z0t@;l7fmq@AdyY(q)$=j{5zY6KzI(&^I-w3Q(_E=XPE)a4n|VLeQMkP3f_Lx(2DJ- zA}c0$2fOvw)Z^LMyDtT)n`t@^89tRLuzw$9;~|2Sz?Mb_okF{jjXlEC#)NkjYL@aq z?W*IXfYltPB4KPD8d!Q3N*Z2(5`Jn}VrljKHB!S}(dl{SpQ<|=R?{-kR4{?m<+K$* zeM4REPF>kuCEuJYJjmxcfs5bL+ke@^sQ|=sA`r@yzy?$?ni7b$jvnb^V}>p1SjOB+ zd9+26H09EM=#GD#13YR`L zu{T4Ssrsek?b&@~lYu>PhNa$x#1}tgm?F1h^1$)tad3a~%VX*nR*{f|&;)g12ugq8 z)%2fub;BRxb^6Psx4e-^6^X1O`N^0d)#_O?2Iudpyf;^KKdaC!lcZ4Qg~hdt zkQG7dn1LgSYJDUoBscBm6Xcw8d{4deYDo7f86U=D*oAlU>}*8;O)hC}s*%nj6dvww zi{56WE)^97HWbZBquO@U7zbUU_aXS4Zj|nhT1}p<@}U!!X;Gg|!m?Rsa;asK=)bf^ zGGIQq1$%owQ@`bn!UrH{o~Siw`n~XtCY>H6r>q_>c+af)n1Ac98S;>CBD8kUiE`m(Mz{U32 zR5lcV6#=)9ulE93w_cvI0MzqysFR~bi@7pSVB^L~(1+FaW_YWc$Ju^`MVE%43PC>aT4sN0CeuY<5O`+)=5HRx@qGXQ&D(3!X|Eu@;1-MfJqAAkz+b z-WXuSFZ9*-zkwQHrK!qzi&=mJ5wfozFoGk>h5m0a`tN+C_Rin%zj_}MV1x{0(EfuJ zFo4)|^c1NS0R5M?y^QHl=x4i8+b%m1${d+CaJyNY94mHmpZb zkCDq{zHR#>$(JY!m-Dv3e=UY4l0|@clBG~YxYwj{>>t%t9qE2)JO8X6HsDH0P7ax0 zSZr!&GH>;I*^A!dz2)ah?Dp#z)6P0Ut;y{(JMl0hN1;drqJc2dhWQ(ZxEZO%i8QN@;)ZVQBK0H0B zUBXwRdUysMLsqxHDogo@OUB^om*>R#T&WJa3C=;j{%dOHn7uSO=SM#ttDroxL`mNq z8hOTS$YfE3vax^B|0E`8gm(7EWkC40l*+Tyzg^w(=6f3S4jAZQ+%OyrJ<;3a7mdURz zY3Ro}A{idE;3+lAO;<339=3I;YD@6k8q)0Q(mv*r^1;c5ab{w$ zF+m{SbY=5a`T;if#Mb^-p5gF8MQO1{AJu$!F<FW&~Tw!iXJ%X@AlQDo;>W7nzbX zOs;B>2)VLGtB7po6^XWgg1WJtI3Tepb&gy&ObFa@#80tS9HhA_j2)waN0^3OoM9`? z48Evpbwijf;vj3Vc2ATGe+jTb+da$cDEw1U;wtU<9mo>`QO5zh4x_*t#$yhzkt%18gVg9oxQkq@^>6FbR(cQctu#G${#y?z6ZN#$H*lFp#7>TaEd&)-py&(%cIwg5CV7ZF0I{^o6moXLZbeAby@{QzC6qXmg{?- zFPx_x66O2M%VN?F*e6(TOS6;j)MF>1wu{p_tL1BFtM?>hh7+3V_^l=D?_a%XSXoOR zD7l@BS0({l<<-bdziXRf!SA>{#TfoPRNIu%d~!!81~p~7}vKHZ}JKY7B+I|kUD&e9&kKO3D}tn z8{?xo(MuRP`^r{Dh?S2*!}BG}i4wF!OjM zKtPJOzq3v!nL7xjkAx*s2QM?Ry{(-7Ns4_?{LgB_&nWek)FZJbfLN z<$o1MT~AC&?ybV!}i3;-O*H8sd#UPO)0WfdU5utT}#MOud6(w65V<;2?1@W z5K)5o3~3Do`OiV#h(Khkh`_L1__nl}0mDZo=Bgr}ki(MT#%FMFw3;)AzSPKiISQd@bsnWED5DM`6 zxI`S@yP*s^P;p6W1a>s5N)3Yl8Oy$iHP>Je-0?1!L zvm;`@OJ?GT!DKr7-A*vR-fYynOGSISialj|*~P^LUFVaYj7+o?bB1&lhvO+w29pdW zd~|BY!-_HMgjb~=pRvg>1TjV##=*lt*s7_~WPw6z>)>#Hzx7_()P(6IwKAdR(krY6 z*7Kv3x{nNXM3s7Tc6NPprl)#6FdUPY?Y76@=V^8)HLU#Kas@>OQF1&P61338#)rm6 zmcE~pUN0vzNYSLbw$vz1*9w*GxESGPt_2FEfoK#%N`6UBHD3s(7-*@%hdCUCuOleQ zqr9&(yUo^`EIi+rx=uSh`_2UHaZ8cj&dJi|${mSoCY7-ShXco z`eSi^zhroR=5b4mJlATZ#vUDw$NozhK;z(3Pyv*QpHuppK|$UfH2#H~u%oHse6>M) zfYT)P%HqX{_T{kif*|P4*Nq3BU_OWp|UzV#WKp=o)-?uL>7dc zwFLJEn>{jR9g#6`+6ewZZ~c8R=Fv!#x`gt<|1`7u<)ZO#l+L8aqDiZ2Q5>^ga^chw zqy~H3ps@}H)e++@zag39Wgo+pM&D+#fHh8%@ANZC0Ss$vdynDUM9>q`>7UebooOcz z!364recXj}F35I$!fQ!^ZEp_Lr;`nWzm>m61ku#jUp}jUd|cRwm%x`!V_KNV#Y(BR z&VlIBh>sgC+&?}F6p?Xh&L}gbUOVVNST7AWLWh-ZdzqY^swz%W;OmDvDzi;~JxjHV zIM&sQe)*iMxOQpG2dya{l+Q09lT9t_A7Fqw+qYgSoGr9`fJRvlmg?-U>>*U_HaGU6nPt-Z;Z$Fzn6e9B%2yjgB$f@X4`7<~A2_Tm*%v4)^ z8^nx(k+CmVP&NN9i@|E_@~mh5Ydeb1Ba~Fk?Jst0mka`Qw&K3Y({cIna4k@4qg4B} z(8sP1x2R&0_kyRZ8OO^WI1*k0_Bl=8D-v{}s5asVqwhRg885JRkPN z#2TWqbwyfpBJSTkZ?$(#O%xy*>SGO`T3Kx80JTh3sdiBgI;E%t zKr_6tl66+@;zJ4ucW~mF^AGH+!w(UZ`|}Rb@ynfIQHZinP?O8kTG86e)kBg+@tj9R z7vSkxF5~7|4=hTY5l_@(tj@a!WR~UlQ!hn%J&oN;I>yOU2_MM5bSSD?I{?qD3v0$6 zHqB78ha_1Kvt#HP{u0?G&WxO=oe#nyw4>$AGPjV9pj7&p`LLL>9aDSp(BN;*%sJ7^ zZzE#dEImssHa#4k#~8#d0fP;NsS6@jb$D6LR?+pk(JW3`j=wS1+Wsylr$p5;OCbY9 zM-gxW$E%c$_xawB-i&@Emg@oKe}_Y4HHH=%P4nJg_5(uI1HYy0Y?j7iNtQgm60AlP zGX4o3DQG@)+WYoBwW3oW700vP+Y@225*lJ~ zPO~;K{wf@eXuCtkvux5Y0vc0gjpF`r*D&G6H9Fs5$J2%Pz40sgyv{zO(a+v6s~lJE zx#8rM02CZuZm)GPa%SiAj>AV=e0uV^e(1DyxIHjx-iP>JA=m0;j)Wt)WKi zEWkjG7>!wP&&6Ke#3XP+myBFZJLGO5xg{btU571}!BG~%j45r`rnoV3gzWDzw8|VT zF<26K-pnJ8^6E*g>V=xfP7n%VE5Y3E;JYl^(t|M*{@eU}zw^^7%U1a3V9efa$r8at z`dHO~NIg!Ghxc38X^otS^k|WnsnJ|SPIw0AvUO03gZRf2^P>W9FAf{B`9WRY?88w& z(8KxxQge`1j^THz=D+jtk16=jzd0i$HQPKF@7}s5Jzo+%cC&P!Z9dc|(YDvzG+(=h zUd^R`E4b5TE5jE?q_le6E;WZy3)ZN!$U5?SJcj>{#y(*iqy9xHL@t6p-1oLZ&D8JRVE2rfcdsL5?~ zXm|O(#f-KWLS1jUkJB3Q6tLV82!%JDCP+nQ%%V9g=WP2ff zFsWwwRO!AXQHU$}D3*q3*4MGR{N2QP^M^8xYIs>uk59Y#(Nc>}2a6jfOT%={#7_qk z2H9U{&OerTj2xsO7Do8F8Gblf^^s;rKc0<<<>a6>aSqPYPs(3x3On8Dt}hN3d672U z|I)}b5^A!0?gO^j?VyKkLXK)#D4%In`zyp9-)}4bd=nQ{UiUT?61sj?2UX+QsG}zv zv~!+yJ>cYIM4Q3>5baT&=^tX@IvRpdSC}Ilq?0!y>eb6y!HkBcSuB=?yDuchbE_S| zyoS}Z)bJd`u}2?dL_!>qD$(`+D2Z6- zDhC?s=)SOdC%<(0_v{liDc${wwISzYeC?B>Tx~3jXzWJBOgtJs;fS(lA-sXE>L@>& zI8*O%s8=2_>`=jRMOtoQ6pN0!^c%VB&I<_NB$@#?=<;fID)$Rh2=x(y0CdDK$R$fe z3E{fyu&CE)lO@Xm+aNg`(|j9dy|1~4XW4SCFB~&Y3B|cXw!aoJBYv^M)s{~Z_kEBW32O$a^qdOVTa4unq$ibRQnqV9K*!O)_ z6UK6*hR0m5E7VK$}L`0urn^CO`M$sw?;j+z(l8OxxTLYcmO~&c`KZ=k4g} zY!Z9@80>$fj|-fMEK@Z*`~I%YXMxb-JYMRLi_6R(m2$TeC*`~OPE;L%!Kxm@`kjgK z@_2<$wZ)x(^+oY?m-DhUshp4xIbt}T1;YCb(()MN>_Lr>4UctI8H9{}-RmhBN7Ci@ zjtX{Xp5{CBV$E5NvF^rk4GP6qT*%8JZ|ZsH(!8dH9-Km=vL#+!e?lt!nTaa3F{soC zO;p{n&O`Pkw5_0&yv(_{9?CFuVFw_YbVGz z>D$=b&S#MRH>Y~LGkwo%W#zfQB{{$n+S%|wA-81jH~jO`eQ@5wYD=8L{rJU#wXzWM zaqqUs8fOOO`LA^(gNrq}O=8)5QUVqJu6w1C-Do^oHO4^XDp zu64JsdBJDKz~E2IRCMp+*f;B5v%X=-e${P*Km(^_oV3!F#W z5tChuld0k&tJN|Vzl$Dz2Q>BDMd#~@c*Nf=^`t8XTknPf`fJLnbsN6|;?s&Mjz(g< z1OtmSTAT#VH%B-Lq#XjTtO zMp3EI?v*sxf7n*)B4B=JxTf}HA)?3kMb&a0Qd>S={Cp33V)gieEh8oFn6NxRjOmX0 z%WD)gLcsis-#g|VvQCQWBDh=gkL>zIFaI6EhTYW-n~35^>zYNhjJF6#1F*6$)~&?& zBqLMy)$#{@zf24h9*>q&B(G}j#*<8x`e@-|?>!7+F;mxWjv1ZL6quNmw7_@pMrzlq z&^|t0@(Pok-{?KtCIEgDoIDwKMm5JyT1um>yyDe5A&aj%%o0k*{gZgK^Vttu^m}Me zuzw8E{0V*dL<6`q#!SZdCXB5>$DPrd)t;BF`_{0D6V5h}9u%Vo0rooq*c`;6rmiskj1-GG^=r|D zPU$$bIEtgDYJ7{CmX$QUQr#DTiEB8C+%aw>b?iNsMMCSS*uKS*hH|5P9TWW(CHC4@ z<;~w#eLm=FFu9yXR4!b+;e}{~EVvDAwKR$kW{LLPuYPb-GEBtOOxsZsLs2(55j(Lh z_G@?tt}0o9ZMKg6ici>fhfY=oZyK#!HvN%AmQEH z{SxN(msOGA{D<0WoW5{-WRo-;e1SOC~7-)NJ;#23D{q?BUSa{ z>KOLyun+ySqI}=WHNLDd)&3pu6o$DrapxLONk3W+z$wy(Ib2gQ5D!j_<%0o;u+)3J zOdrp@XA;;n$zQSi+zNM&nL&pl3G7nCQq-gu!43CfkBUb>y?P&~JUipVutNr%@;qsr zpBK8+(>SmupROgxOiQ_f2RZjK{-)fl(+d=w6vAgXoc{dY!5f$lm_Ub z7E!420?RKLEPxWKOBQ{T5HD(Jaechx9*Xiz7B65I#gEiaD0e|bOS(A}W2X|>xxi_M zL~%NM(n*WE=M|dqjo?b6{oO0SFRitpN+)7m^i_I>t@AIb1%X&=kGP-Q86#IS zs9hy#G0bB9W{W*}VZI;bW@UY0CR@GkF9|bE>ao4GP*uw4Ml+IsCu1wZOF>$5Xu~H)_X7#`#CNpAE)te9P^qPzz8=Ak zH=&-|It^I?ot`goV`8s5{50A9_D7Zpzw!j!z8~Rd^7i2NAuAFpQKIaF&xAWybH!NP zcy;d>5H@`7^kl{f?(EjXavZQJMer`FnbBxk=mZ#L{A|VyraaiC_C4*Q%{UPKUp-1< z1^^e<5*LB}SCk3|w1Icfd;P0Y2UuCo0hBT6J3IQXf4HJ57Jy#{-sH{ymp?Kj2W~tc zF5&wRj_d_cX1WOcg8%x(sX2ig4Mn8^G#t2y0d%;#>%LJi|AQlSRsg~?I!-&vnE#$n z4`7;bd!i-(O+EIn7G@<@!S}!C2Lc%{Ei7JfssE;S0#l-1S7qsR zRrLt8`%ZD)!B;{xt2g0K`G?#IZm zor(&1{TE96_m_M9p(qg|6w##sjj#E~YQe>|l3ba?2X^LdZELHmI*!_%b_Y*2`ZFe9 z%W7!e0;pJn2XfV|p5v`_Ax2TH%)cX1n+6KMxqK-LR2!qGdE`ypt6j11{`5@TSs!-mC;7HNFPSfV|aKe1#gTK4D`F0H?v8?yEJ){Cc>}`i#KlQGr#;FkLIUdQwTPS{o;u zAu?VA;{=s2gylv)&d;pHm<&+vnQviCB`pLE&Gp(DFRJ!0R5M+~oh&I+ zqQ){faMGH9ZxI=DfPO22X(B6&+DF&PH@}32C z#aJ8rzUhS{ArWNvc+q{IBW1SINhw)Hc2eO|A#B=EN+SQ+b=vBOW2EyG35X7m{9laD zN3e+IK_xwL3hN!{9_Jy^7gRnzns`@lwlRtmNl)nP(>Y24*+c>E>P~lvSic%BLQSje zKbxi+t}YQ(chi!P-Wn1xZW>Y~x?#@>HTID#;CUB!6e_@7z&H0*jqKAtz1<4VY-Cgy zB2NMq?+B?nRra-)YKMANm^t+ znN!h_K;Kw?d#cJ!xoEf)#Ob5a9oa;(GC$pbVhP0Y)6=TPq7u^@BGigGZ&ZKG!ZY)# zC67=;yEB(r*sUj7;CMf;8-vxidR=N<{5aOJ*Pk{-Qelyy3UmCTZVN()lr>^HnEK_B z5H7>=0lJ2V19!4`ZPk7~jS3v^W}57bJ3CLMa2-_}KPD(IOl4O<%a-6z#hnBm=A@#Ck`zQx9(#1S zH9{Mam?34wGf8KG$Zbe(kP(uX7XIkd1{W*bRoB$z`b&--Hs+q^s<{xmmbsi{9iZ7DBg4c1)actf2kQD=;s zJM;e|u{{(AyWd7g|2~d<>dz{%{iMb~3k&a+w$`q(`pz0W=PbhH11=?P@ZtTic{lRs zjO$L)yMxAhP02l61P7}Z8G>)xmsaRP_8S86&(&!mi*qQ?G+rIv3zdPv$tVibpR?le zg#2I-kUl0qzZKG~D!*Qqp57k1dCyJSTRCBt{?4&-R5IKwWnH1(pWt$xboU~^W4G=+ zGAP7@3()~Xv_whQZZ}FLP>`SSP_vGt=;q8=C~XC;8N^;&IusoG^5?mBC)U*k^`I2{ zAvD$}p3;Pq1H3|xRB5`&=}C_to83SnNM>io>^V%X{8TskTxpq@6D8|hE+EXP{9AiC zTgM49CN%31BzLcUT3+q=Ub>f~Gw!5tjvnrXjNuqZdjzk00US9iZK$SjmDwQ_<{YQn zo29NyXKt4_!*g#VMg04&O=jIwr?U1HRYum<__M({5n5|1mt5E1!OX%U*1$Q}_Xh`4 zlft(+8ZeuUbr>=f>Icj%QW}B82#(Fzv|z( z2P+^*%I>|2hV7M%F4B6>(`Dg|7Qvp@Y3QZovLqj1>L)l&hE_!1Hqx0ZkAWRIj-2lQxyLF%%(J* zrddaMl+t|rOSyE0jI^Gz*bx8R*5rvxvZZNhcp0wqB99oBlu}N9GmF>9&awhdZy5D3 z5$~T;r-20LDe@d1W2n28+|8vOOxH`gE&QNI=W04Xf|1Ynhv|fw-SD+Mfb9J5$H3oL zOw>G6W`$XgKdLkI-%~g}sUA-v$DWOc;Tk-4&pvfRW2@#E9F3tw319tp9DUv`t7)82@lHB~XK z*97f@ReLWV9qnDy$cA5`MecL? zOPy=e4;N%ScY$mljK9BZz7EcsaS>#-$9|VkUTWHTL)~_!s)hdD$*7)O-UI(kvR=sN z)Pp9?VI@1cH3Cj%@IpS-_{!b8W{igHu+GNQ!BCE~UNt2- zH^uK|L_%GXfLdUSVdvtWCg3&-WgzJPsabqPNYtLtq- z2sR1FiVMZIstv!7XbCH0SeB(ZMeyxuvIQalgf$}MJ6>C2=5Teld0}~EK^Yb_>>h@l z#C~|sy7AK78V9)cS`_)!^WG8@^r3(d#~z-wmcNtsx5>SPsu91J!Og=EnU^b3k+RnN z32xhdiqHH0uU~2KVwBI6K&tSOz%x1%Hkt?nD27Tvbv^5@REmlSsjxnJH)aPoUDsFg zkopih$9vZgqb~W(f3dqUBTS(P)Rl3D_{^>u8{5PNc%l{)_5X}pvWmiV*YHpg4aa{d za(VX{QuyETOBn?gY5PkUi&@X~2>%=mn<9yd1$zP^U9J-_1!Vzpf0)09G6 z@3B+H_Kmo@*TUy#2S05FCn~qh(ZJzghR7=qi!1vsP5j^5M8dI z`vxyXWHl?U=D}Vv*bcovN0t-a_JvZe8y{M2gM`1H8(}=2H!C8?aWlsVUiW+Pr2PmA zoF3YE9ait|ekmi?XM?>Bfd3epfeCOF)T$vR$-)~}%3+jo8#)=RgJz|G)*;|>vugH9 zi^ka_6%sM@6wL!V{bOa;(dgw}AAa(zu3KItR3k%f!H5?-Scy;XzOKfed4>qcq zLtY467qfj*y%A%3>BHD@s2vR(y@QTxj=VG48AWNnK$ZFPT>xxBC>lCr0Co_s&ue{} zB5!0=QfpvEwNI6kljd?%6$Ry6L?rP6os8681f=LgIcM99?h*aA{+2=O%WL=#c=YY_ zz}mH<3u=!1_Me*FBFJCto4=)?_A)CqAC)VasP#c$5Uxvj4-$x`x7mnHBg3X;4=Wql zomR8XRJOzzyD1*>_KN$G|VJvsEn#kVJC5pF(?xZ!oVu-K#YF^gTp?k?OD`QZG zRSYs6tZp!Q6WJ0bzH>O$n86Ox00|p)%?>xZz_(t8y%vs1x%oQciuY-U%D-#873Ra* zIf=*E#wdZRB3fzT;S$=R0`VwT2V-JriCV1COcQ5J=kU9Gj3^U}+yi-h!F|^PF9Q@8 zBk_^AGG4T(%9={k>%mLq=@yO(u`+_e@>p@G-<9-Un_BoSiX1=aW zP-tlIH^Y|#D7u9|QS~QrDch#?F-*oSYSol7HfqbMj_Cs2Glo#V_7`6}%gmDwN7bsz zfx#&xwvp|;LK^b02FR%E@|g=ySj6|**oWij_3YRAJ4zZ&iwjuABy|Yg&s@Nlx};^K z?u02YqkB1&LN(qFnBw|{qDeNHx&)|GjhLO*ps6};q;ZCiMvl(y%o1=Rti2UKy z=jRR~39^vC^Vl*I2PZIEe#p)|ws$W!!AU(cW>nP*R)*uUXwhBrEkrEAcIT9?xp&{M zq;>Fv+4@(;)t-?t@6-Tms=Jp_foPysPiqFBGC33H{ysrskYzo4%&$V>H?79)A3$4|M%A zqzXQAtH9+F2{>Y%n?zcYDrn4)M2XGfjU$wlFPu!L=$GpE+Y-BivOR#Ny+$LOt-q}S z;&;E&0}_?)H})r{dn9ll$}ec(-_vBt%N*if43L!p`a9DguwWbxP?+l z+A4Vz7d%|lv_|yoK->3S4Yp7|r)Z1mqJi}9sTNSHq<5#^4Wt)4GJ}$8;emyJlc-ht z!8>^%k~CBrG=aV=ADrju&CHKp`v?EPuJ7?mbw+!dL-H?N`D5s@a3QTN$6#)T?g$0bGzD{G|@J+Z>v!Pn;s#$_&*eh0PGO}l{%5202CR(n3}Ud zV47anLa6_1c3v0t33%nf{pGs;@baUDjR$N&w90)M*0VJ`Md%MR$Eu( zu)x1jwy_s8G>#7?F0?HOziq^NWlz78MnuGAY~?K3!+zXm{P0?d)(q*<6p}+!=-zPVV5p zLSwUIU-I~lw4#&n<@`Yp;Fgh-wOkpy=Q6(U)N##4^x{@s!uh|r02VPeARSsuejtX+ zml#YK9Ql#750sGV9-^|k#8XAg72O`P`!><8 zfx#fKRi(s^X_JGQvt`@XRZH;0Sf{Y|5TuZ_8!!z^VcViK@STI8usU{tBOuvabS(a{~I_X2ucsQW}U#%rk-Y1Sbv3zq3zZJRh{JsT1`o>0^hJ zzO5T?qMZAh8ceP33al%tsW&;&$`Cw4czrBorJ?g!(Ut3I7VsRayUu+)r@DwIVlCfHr48{({($xrX|Fle74ctQX_dc4|SO zuZ#)$EnV~X1$z;TB?^+k-(4FkomNz&(c}y{3Y-g+0b;n7T0Deb)8;0X)VBqtpevTJ zKc>$lF$^!)GDmtb z$!)4(YBRt7?ZzSRI%cBK&h0N-&+w%(Xw1v6TI+biGS@c?4ut_EfZ$p)G**fL#5bU- z-I=&yvDZ?V0^I9nXo)dvV;JueuEU-M6!VFl|H83Q-@#UReVs5p1FTh`mq|hPT$2 z0(5?fF*9#)Igx(u^;J}zhbbuuqCSt*yKR{m>1PvBh4T5MWIHFYZR#WseXngrOcO_I z%Ab-vB@5SX3P{*vtIR0-$tPG=j1d}eBygHo*V^eLWIQNV(u0TugRU@n(DUso$a zoTchBw1@u|?DV$e_z~UO4C2#kr!v79MAcc4r==xVti5>A1=Brdc4i2>e9yUK-_mbR z3i|-)%eqnjp8F5Q0058+!&c)Bmc_1s*O zxL;g!xCgv2X3q=hD50oMhPx>Fs!xuZkP`Ct?ln~6ayQ&kOdc;oz*iWx$mc#}UWyjv zSPJRTpb$i_oh%MMg3fdC-lizQ+6@ z3I|4&3i+>{WV#B7H;ZUtG3%m%UgfrcxvS&=b&<};uvH3=VG!z${8#CZqY-F9^v?y4 z|7%CVW2+DU&*_Q)cUxJY*8&sbxr)mFlx;X!wZjI6~*?&&=f5q>D|0{mC z0$P_Y29*iZ{&T^1z}L)#LcI9z@y)TofBF9>`~UQ7vMu|nw&kD>D{&REyo#du(GST6umeN@26ikxn$LY4vrUbSogXh}F=-_wKZ+$a zG}f4=xat5(P~d07*6w_zWl^PE=7iXo;S@R@m6@5jq~(rq!1K6nUs^gjKF%i}`vt~A z{~FDd1t3I~R99Dbx?ESIOc*_2e3(=R!>L|AxsX49tAXT=g@**FI1z=jInr3I2etEM z3gn;6i<+Vbyk4k>xKxxK`qi`sT{bkw0kaVX-7=(*ElL2xho zP+D)aHk6dWv`r^H$O7x$_M0xTH4zUccg93p8^8GQ z&XrTpo$j3!a8iLV^EB%j85z7!JxB!dp+aEdJCCpWHCVJpzlw(TLWlN%K84-KuFvs;bRPpj=$Jl0^EhV0$dblK{u3Zh%}h@AX%{f4 z!F&mw8_+JAA11dNbh|qXTa17p54(pU_lnuo%1KW&w`-NX+$dInDQHOZZ$a$Y#)cx|Fa2 zsZf+rVLs!-!y&(I_vtlk9i$&>?5REg>ShF%HT11I<0&wzsBvQ|#2(=R{;9;7!$YHD zdbgx1fEs!^3bHp619VWYCWHmdemSCFhWq|&D?^(#bfADvI7C=30hB6qP%$G1x(^r{ zNRO{7=qIoeKq0?DpXF~*c~r>T0xV5@o;j!{YAPyAKt2`D84LEd5B~#Mh3)^ac8$S- zG|@K6#x^##y&D^wY;4;b+cr10ZQJ%n8{78Aev_~2{e1u4&#tMdsp*;SzUSO?&#lsj zp6-5I?e1L+$PiTFdw<;Zc|Y_SxDKfN2i8BmY<>`sKqNlRS9=?m)6bop%$HA-(iO{O3Iz{G6NY4tpcNWoaiJ=m9L?lU zs~AC#3OnVzlpxZ8(FaeHu6`QEGJ&Li9I$u$U4Ob7>%*mL+d)&!A>_H8E!FD2?qDG) z;S~wpo`?72@OwTog#*p5+3W?79)@sjGC1tOU?ajG9v=EZeR6i>{(hRZdLdaG$l2+M zd{x3*y~YxHoy~rCbaX^_-f03U{K8lhfWhJkc!>MLRo$ktn(Fm5cimM+U@_`+dE(&7 zaTg3Q?18w~5cVMmW@ltHuxIgkef9rMg9Qt5ORM$-v9=FHW8CU=g z(*Dfh+YT1l=?ngm!Q+Oi;Gccj^>VSav_$xEO(;xCWOX>18Bn#YFszKw7*r>qm~+=M zR}0}EBuvy5BO|^|ne7SofGiY-Q9@Y&uJMHtV}p4BB2}Q6$p31822GEV#|)bH8zN04 zPi{RCL^qP#%Ebp@V;^X4|>oKnF!4&NXiyELyPPS7}dz9nKBapD_~hm{w@R@-Y1dm z@0VVe9@AptF!udAbR4igGdKc~TTdjs1NfRT1T3(zqG7h>#Lh7$djaWQ98KNtch%ef z`p1Krh@qCA2C;Mnd~&tKzueezyyu1Z8ug1~2OFuK{ivh;9qOlTC!Pyz0KZi6tV^}+ zu%k6rF@|-G;QW3J>SHgQyZ4$H!MT@kbi6Ew2f&zz*9rUstmhfrMU>DmLU2lm;`H$$ z^LLOP9mP$jvIZGmY>h%+Yq7LZ+6W)dmLha8t-0IS&qOyt=#Io|{1X5d^WpViD`Iz) zE&qq87s{pR3vgb-qg=VbINOSKe1jlNAg;k9mUD^3RS^;(MzeLz<+Ih;4ia41`u%p_ z+#U40KQW-G4=KnaVj#xSjPM&e37B8NDO7HVYzP&20`wR}tuL6+H{t{}KX%iXVmWqb zC1pI}0SY;W$4O{HQr>@lzllIQOjel#Ps4Md2GHGvE^`b*|86nbd%v7FqtFN< z)*y%pcIAdG`Ag-vUkPuo_Q@m!Rn&le7s-Vd7G9SlCHo;8(53}=j}Hn?*J5FWAVq|C z-%N6saCqnasK*fV0v5VP`;MIOmQYqs2&z7|L`Y_ikt$v;u33q;T|q-R(ui|%05=E~ z#fgC`9xt9m2o4icGxZTCGLm1DP^dh^S>XGQz}l>UvpgmnuvN`6p~m9q4flY^5kV#V z7M2sF;wyvvqDL7npkh1P3yL8&rO#f70D6t71bbW?`#FOuSs>|oa;l}shy@`mLR__a z_~9Un7+|-IAO9Ge#)BnSoF~r4am)M?kikO1-btXyen?apLhxI`)Bsi{B!^HwVuWV>3X zS*rYUP=ckpmThkM;G7tf+d)UK6Wfhwp<`tuSXiSdR~Wo@e2I7a#&#HDh&Owj>>p4I=lKL2n92cfE%>#h??`wC z9~r#hv`Z|_@>>$S7oZnxdylbCq;G5IY=t3ie05qYfFP`g1x2mEcB&B)iw)D#?%q8( z9{Ok5BBUB3bDw-u#zf_!YSrS&x#yrhKV7ZYd3D2+A2x3jm z$h5)xVp+lAi-T(k>A?i9l7Ii@%1SrMLMMpniZm6Nf{9$h%v?@EDpWsooB)u1fHrND zbos-?;{sE4g6qmst*{It?z(lHW=t{F*=Sm6Fmwp+=4qolLl7 z?Bb3=a>c$UOdR*2n4NF;pcOf z?s>@`-mn6Cip*gJ1;a-l&T|Mw^eO?92j{MRx7b}{&{@<>_Q6I>y)J4h>Z->~X+A-?tr~HmuUhAltexjnYqd)Qu!!0uY>dGDQi_R(sl5_QL5H@MQoO@pieBmo- zxE=TAj=$`c<*l9fJBpYT%g1leVh7c!o zusccj6S|xCe~qkZlqGB|Hk&F9Ee3EA-2;Nm1zDHa9cywZ^@gtK2m{s;m~xwyv#9x| zh-q&znp&H_ofcVN8pz(Q(Ykva-Y>dzg@Y?Dmx@k3h=mNKckoq_{F$i83xck&0{d28 zu)Ru1a(eUV>~tCVlz$m{@A8A2Cyr8a@^N3_8#aC#!9ctaeJ+LQKNHDiH6pIWbQKX} zE`IG2^rnV;{1w-py^2-E7!TeZxDYRW)3%XT(9D;n-~JoBIECM<)N-;iObdNZ|GjpZ*0yW{8&!LkJU1Bw7Y z%|!rII!i0^_z{yZKJtQ&Tn8uJZLYix*_!Vy>{SNfB1s!l>a4u>iCFL8u68rWW||>> zi!vUH58Au-Lvt1GVf6}eb~^X}Cu20sZHO=3TU5MwzPZtAMdc=jxwl|@x?lV5NZnp+ z`XFUpR95aqk6Y$ms79@P`)}v~q20rou-l1b56;?rIf2^v+BoF!IZNK@yS(_t$wus- zVxGFiV%HE+1d$a*8C!)@pOXGiRQf4LZ2gC(|P6njuw-uuWzsV0^f163T@jHy2IWE-aw ztFn}E7mCeK48@qs(X%=J%vaH_3^dW>v7^L#mr0>#a`}reCsHN|l^2ZV%@KpMc~SdA+IO$k?bql4EAPT%5jgiz}VnSsdw z3tKTVDD8dwk^iLVB=HrZF^0M*K4?x%HToId$D!o-&(^XO^?Cf;7uGLQzqf4-p{J)Q zZ&;`ID>GM-c{q7pzrq4PpHwmnC6tUCdA95|#ym+MQOx_4jW-_?Z%eLmCLQ&`tpE=) z<7sFCx}A7iLKla9Z9x*3L1t#`{p#$Ot0R08kwH|y`5$^PI;U+bF%`C6R~;Twu-#t| z(>Uro9*4n}MGz;^-B8e8uCNlPr4Z_WlKmWNKz$wXL?ZK*jS2*~`r%BD%~Y%a&HF*h8?wE|4h4?!x??C=7Hce75>HxR8(fgf$O&MnJQ5pB&!bkP{*t|0 zr;}KEJw&-b%qf)oBFH1g<{!`!_!)CH^4Jeu1NU)ue%4vNLpm9+F%m@H`eL9~!FvnF z58fp|?P`MBUwk`elTHZ)nX)olC|G;(rV^ZUqP|fuU$24)<2u{yODUOobO#1bISsCV zZND#e6*oQNEyXszKuCJjNgbJy)M!9YTNU5XhdoH2DyAL9Qo+8C4E2aO38G%RQ@Pf~$`fNzb*XdvB|C8-3?7dEHWXtKzw}|DgT?7x&1+)N=e7n$_e+&L zewX!yq+GX$9bqPa^i)$n6iisLOED;L^M2MhY6V| z18(_AhH;`H9}j^?`x3ccqr<)0n!*d$rc8GFe0Y0C{yST)Z~NU+=dgkRUuKN%goxIw zY7O0k^G}HeMUCT=q~|C%mQjD%V>AIzBc~)(6+F}r^Ox(vL)MY~)ppS`J5hfHU3$-w z?UmqV2(XdP>K?uA+Gj?Gg{3eFnp@YFWbu;s(LV%}f@$}KKJC1;lO&;7ZPD!>7@ zEip&R7#S3ZqkwBL52$?w75`Ccw1DTI2RW4@4zRNz`;h~5TW25>HSK>)oW!Ty3Cx%h zBrt~}dN7~43Sz0T@J|A-1{I*RRsC5K1^-iU3juHc|Mj>ih2XdO^p!=M3vbX6FYc_* z*iY++ug>X79i-hHo_f-?u`btqA4jQuM-Pl+Roj6Uxo`%BKrU*r z=9cvn#bKDemrct0lx9|p;^twH%+9#68kiplABxrpmaAE7K3sKj&;Z88!ez^zG{t5E zFzX7iF;SFVV$SsO_hongPhcKAihVI!|}nMs!q_4mw5iIn3g_~lRvMK_hU z(MGX-RhRF^<3q9IKb3_?%b~u{2SRfIUfZkc?~*E94J>={x=WaM)P3!TXgWX5qTPO= z8H-}R>e%U(t)a>b>4fc8hMPn3{*}vHBe)Cf+%Zy_NV;990g`Xh#BPS=vhx$i6(@;< zW!6oBDG6d=aYgE^5Z{jy)BP37O86W3)@JwI9<)$3I`e5$s85eOFkvJFtJUVEsv|f2 zvj3>eiqh}J^Tf%`!~Z=ex3C;Dn*cn8bjXWAw6wG7&eX9Yp9)8%FsiD|Q_`&QTQkOz zqe5lh4Rbyt%}4X?xorpa%Db>H}H0I2>G}wx@uF|R8kon(&iNu|FF&T=L31a z3rYS8J^ri9v!L@;k?HVZ?K-#qm0CZ;Wh)RC%Ty zBafq~P_S!APT^M-lH!dtI{fa`PEPfe4IJA8^(W=|G9?_6t535wsIYHGHZ7}#Wp*Y^ zA%cA(I&Tkfqv!bV%~O-;V+Y$^C7YyptrVS!pRk)?~1Cmto_x=p=^3jg_ zxuNNa*uQsS3UoxK5*n@MN)1OtZ2Yi7*xE_1e=i_;OGhjhQFFvLGOfSWxWoWU2L=G0Q6tR$PLwCiIpI9Q0wiPkEMUO zb*v0;rKEn5Hc1M-q zV0%2Rvj+w;W{NO3ibu`|zw(v%U6(`mk-zJ=&N>b*#IzJ6_kA~c_BNeO5cx6x-ZW#> zVmX7*;4t2f=HY(_|NMq^#USvEgrWxfdGZNf!`%4JM(O`F)0{B&>ia{$fmg*0HjQMd zm6|PQVH~DI+ZVX`jYClzQG`}FK!O-dQe3YJswr?;LFEp4I$X%vSJl%+82t{fjpDC? zObZpC#z^|09S*7rWI8xAH;bS@ zoG(XEZ(>dAPA{wCXJ}qspmp{oqGqU+dA0rFq?=^Ui3{uL2RF0*r%!=sRoh*vmaz>x zi>TfcZfui-Dr!T`U=XMG4>Fzd=*piuJjI)e+Y$mp7JTi~j7+)`RP)LW%XD1=x|zt} z8}dg=yk!0&1GnG^9^h~9sQvdBAjttiG5ahlLs-x=V)%?od;`-bKZBZ3AmvT8ZCwLN z>hPaDhiuIe5jZdfz`sTU0)T+;*g$#5XS}mr&rWH=qf4%!j!;)OHL>`i){-*7KxNY!&|jEajrP*DoeDj*Z6-{>c%W&=1IX2M18w_ zXXPduGlqn+xw*M@-S!iK6c9}~*fs-Z1i(A;I-jYrr5kUm7Y6|k1y1j1i1vJZf`-0W z5C~l=^s@Pr;3(XMyZfW3W2a`Ujkr`a8P{arMa-H6)wEmNR z8#_FSwewQjQ~Q(o8M%qKWb#AhtT5*ui* zz(o}_T*2L4^*S}a;^xV=^wXlml4J`JpbiGMoqfgKU8nf=mx~8X#mZgq?ivqsYA{w~ z#b5AfYhd}vE0^e+c#Au@jHSr_Q2)Jnftjgp6!(3_3em*x+dB+MAH>JVKdYgxqT9F_ zEmJ8BvpGfgpr3RsOf^DB0aS^AWGDP(yKienBEuh~+4|Vpu9>ju?=gLm@mR*${#)S4 zaZ%1cZ9xEYSD8UVMd@uL2fS^oi=@-1jOu?inP}X11E&yym08j|Vnnfp1I(M78v;q4 z1@c9!mm0q3sou^t;-%l2+WE2R7BEu1kiAwE%-v3CeJ?loO_I(yVz?GpSoXGw5??9@ zOqN-sH$wIoIjd31AdfFrFT1@m-8s;`h}rB#YCMN9;=GK_PI%@+1E|Zi&l(+a4l_{K z2V~V$G+?*?O?3u|070|j9zFwB*}28NwQDDD7ccCG`b4SM=Bf2E8g21>ENOf{q3oz& zYh0;}uDI39Cfhfw=n_tPH(pI_TESk^XVzs+H=QtfSN-_toiSAOL+su{sea$pJ8)-M!SXj3P8L-cAsQ^f7AB0;{aEDA3SE1#Z~vt> z81~mvz%yzm-y98841f>Z;hQskcV&J(;=`;H6WpXl)?qB09kd5F4>-pCEK-6yxsz&A z@j;^YF0j~z@J=t1v&NNXa*?YuMfrV;T%fRt6*H_Lc^O@?H$V0to5ZaPI2`y$-2wi5 zVsP}|<0ww2<)2&AsBmkgiMja-6%*R08IoIGb|uG0>c{UZ21-^WSLDDtW>l{z{oe97 z*gO(1v+ZV^Y(tDhf`NjoJ#7BB-j0v-4SbA&1wyWg*xQ4u}&S*lsa(H}2 zsbUb#=_lA>uuQ;U2^$nN(uujm96orSa0{C~TOysBL@D~0pFJV4zATg<_Z|K=1e!zC z*I-R1wp)`S0Xf?4G-Ie}rPVDpv+F!2)sswmT(Sbvtr6%*|pBVf+10e`GuJWr7 z?+(_Rr}ptk#KMEtfPb>^CP~e~=Zf4`1lfe5QV()ix%T>-TQZmMUE%Dd z1JSKfw=N}7Y?ywVqZ?V^&s&+Z-5fSLiX*UxRJeiN@>w6sg1RPPqpXoxzvO<%F2Hy- za2~o^LuhwkzZ*zk{_U^SdeD^ANUfrE1ZTX(NSX6PfEHKy_4=64qS0Hp5 zn2dF-(YS<#q-+5NC?g5%PL($Ib?k%WTQdB_DD^56&m@vY2w#%WacmjzEPlBVL?TE-XRtU_QXX7GE5=@)94Mv8 zv0wiQ91Y6neS5f{FLv@@`TLVYDa zDc%PC5xUP&&n~b-^Z$moqWs*(TM|BB05|y0f3TPbaO8jZKX3c?>L?(k%L*UBOCd9k z3P><#f0UiJ)!(!vmk2S8K|1V-{*eG?l?TT!80+HT;2>Goo0A|~*dhxa0^chcB&+3@ zxq08_XQR@Au<t-kOthCp}ScYm57i6n5kHepeD4Nc8sM3bMc3KR&8Yi2?mE4HY$z>GY> zSb3}w{kjRve%u2L8;L*))PTdzNDUQiFOLD{$5`NhAm9EIbN&9FDDof3M+N>+N&i@u z|2%~&@ce#YSPwMT5)oNIAzUwR)YK-H7Y79+VHsS1X>qcs*55t*em<#xHvg= zKJG-|vRQ)YP)X*>wKyLCEzb4^S`Pg*!(2q=Q1x(k7jRl{bIJ*qVtPA%eYyeC+Qn{i z5yBE;egeYgcp?Q#G=hpm3v#JybeM=CfZ$n8(aIhP%grF*WME)me>|BvyP&?lzOoWQ zaThdI$s<<4BE;_mND$ALt1{!)q3f;xu;(wmkCy|I<%f2f8MzL4T|YuYT!<57 zc&x3jDNKj*YcG91UNoDmp7y(6|Lq;eH?~?JE*tu2V99RuZ({9YL)3@$@TB(bKgcK1M5N)Ozy0Vo&NW#c?!P?95Qvibp0`tl) zN71yH6!Z6LyXllm_d}-$$@PM!jdWym#A8>?mxCo!=#m}MKOF<(w>VRjT_zc$Io{ht z$=!gfj_ZoX1L~ngAI5g%cB6uw=+=FGYoVK?5j^9P?W6OCQtKHsziVK6Yafhra+4g} zv_;U(*&Uvzh8y327=C-61x>$$kb@-J07Yzy9Zz2rWBcYbV|JBy+_&PZ&aEJ@%EAD1 zb~vk$4#wLsZm*8&D#K(pW*H@stF&}Ycwt$x_%p-l$wp@P*o;KJd~fGcca41|N@;bC zF$?Nut{~j9^Dwn`?>w9LF!@T2U|5$v6fu*gDD(b!ii?ZP?*YsGaQ-_eQ5lX;KK6?~ z{V;G|j)OaYkO^P9K8hJfsV?ES&hVvxdtH)@almAXne$h{&)o8e+ z7xgf2=1%6R_}Eh*CgtLG44-hwwPQVM&VQ_H` z-nDS6LxaTEw-o@bqdLu%*Yj53YCZP<&Xs(fr{A&WCoDj-+3#VL|LFw7PLVs3gjx&F z1~}h9R@7PgLhOudX4zWp-IrU0d@-6t+Y3l5ZSA9dHIK&^_Y;5`0`ctd@e7UlGyG&M z)9dG0#8=nr3tg-w4!wO#DiSTScM#w$x9! zNK=9fxsC#5;IfEGDH*|CZfC0vwUGG8x9SH9Sr5{ek;~mQHL;2`3!MPmfi`msN? z)|{&HHW{c6Z6R53!kbKsHJCoFggnyo6j#{d-i}x+8lkOd+PbhUck92TPSe z#LJcfY`a!FNa$Ij!76ECn1Xi)yt}g~SvB@1>iu^&SjEKKsEpD&O375B`fXxP3~AAM>|^2?}{>xD08^@d#S;HQUHZFP5}ht`&=Hbsgr> zn$J4~y`(Dj(62eY7JKFspxiSE4gBkSHrF!QvRIU~mNds@>P&D-2l?rJTNwl+0Vw6w zbl|IRK=>&?L#r;$h-rb*2=DB5^6o zt$Q~k;^-($ETj=v4~wP}H;h{D3pYEDvlX?{0%9ktzrMeIqE_KB>|xNRsn1K7*eK6# zZ+#Ck#?XXkJxi=J?kr2?Q;#v$nWg`UymgB{7EA({>#H;q33UF*c*b_ikr!Pk*d zB~7kla3L9o&qY?EU&20Z$HeEBMjNT>IYIEfIt;e^*rT(yi-?S62Sqa8I5bFpA-DZp zc94dX*N(X|(3oR)hMw3)q|~V4uM+3}8@-^oJTLw0^3dEM%EM73H?w_!Rdz5lUdsRGo@_4AHE8*BO8M63(P#%3pfV;l zVnvK?ixgBQjC2^wE}~-c#BSL=Uc9Gq)eo_Zn4RdG--=InHAxFa+zvb`=FZ!%ZZrX` zGD_KW_PffX5p9Rd-O{|jxvdNWUuWZ4bybla5KLRHpq#rm8J`VEajI7qD2u2z)Pden zOC_~u+4yyxlK0CYa8j{bA<1S*kVxNLl(3im(UN-6=&XD(FjpC0r-p2Qz3Pfrt<(7V z@Pl`voy4|^a*C|cf8$Q5ynC7TPSpIwGaREf=Xx+?N?Fxf|HiP;soJ^WA`Ff|zplW> zHNX5^pd(Jfl))r2JQkOloWZ!yb**zA_ZXpp2LlRLPcVC>ffQ8-OR9%eAep8{{=Df; z`iO3(Jon|#1_N1@@w9PU-HK5{Klp$+nL-GRM9&F_+4Cx=wxP~KA0~%;IMv?R5WwiE z%3c8_-^Uhr&BN$x6`NUATaw)||0Y`=hD3f@6n`uzx!IQe`}^B$AX*Iq=`HB=ZF2co z)rCFi?JwhR*|&p;R4sMFl+vD;V9NKK{9Vn}w@`7LOZaErP?Ue%K$pMjqu2pj!$H~V zLiWZNB?5MB;dj^wHMG(gY@SuHJonZFdKXV{p3I&nV@EFzHPc;0 zW3$AlMr(#-$#SHRglKS_PPAZ22sE(Zot{~~42H$C=34udaLZvE?kK}m)PR8fO(>#u zf^ZPk`RjJxWM}mUTVtfa@ai~e!3MQiGHIai1dd-FEAV4nWO}XWJXXL|Z!dq;J`Yu$ zP)MFsjFNac_D)b%4dxEKER{wjAt$mu-aaqwXe#f*oIoFqwT>COd1YEEgH?_ByW(xQ z)ys}=YD?T8Z#cfyb6p3ycD!3*k169X-2^(!4fVer)b;!1H9~Kk{sfi!5MR6qU{FwX zIfw*@eTV=kg zyUZ~V2t(S3qvDZvB5qpCe+mv5(i98nyokX{sh1eF1)einM+ZEsX+%L4#wtOy|3ICub%b~WRYC4QCZr{+JIS3u z5k(Iv8XqhJwbNZZ6E0W{B4B?dWf}}6sk%SVu00d*-f@J@(jI1|$Ck%)cR_Dng*E^p zfyhPqp4R)J#2q6XE--1NJ4m$Tzp)6tda5~bRYG*OM6cGIRMfFq)N8<9PX}?NHwl@(6<|0kqq;tSD7>jL}2L{S(o?{!MBCj zHWT{&I}-ryjW<^i?Z73*ACQe9Xstwy#w}(Cyfq}m*dZD_`0k&i+={}PP{2fXDNS=0 zX~;P8N!E}?8H(p5>NKRwa}c1XE#QT~AhhmwTyfrv_4CNYdE9$TSvkb!+mPvnlmO8Q z__t&{g+w5l0nXd-916-iQFT zdMv?oEjqI9n(rD46G$)d9D&lB$X6GnY%X%FY82vAMRc~9-YcY6_$X7f?FMi8gOdFa zmc7m#*DdK{EPmA!=fVtXhUE1h%!J+dd{jIuQIT6Six)4;4VWhIQz2e|C07mGetFy0 zPO6h*OJQ)joj7dY>N4z!GT5eT22S$-`*3StR%{A)%EX+uUegW0hOA>U88;t32){Zb zSB1>7{C@4|WR-{5L~0l@(ckYQXB_(!_8luF>dn9}gkbaQ5S98r4K}Cm5kHY~CVEz_ zStJ$GV@X(YuE+()a32~7%@`m_Vk`aEcaj(P7?i|6tmq&fHq)CXJV^U(cHC)*G)I z-*?5I@V*+!*%bpa$C56*yeO!L5)dEJ3aKWNkoh;G&(e^#H1D~ZvdA{i&>3pggt76P z@%*Eg5A32pNv(F{`Xe3__t@m#cvR!@SDjbhpMJsM+UR#8E?R()H zXTgWK#Ik3=nxSTVGKSoK)4x2kbMt&dL9_iqai?IV!6^UdYMVyeIYPkigDAG-s0 zbXdT&aiIDkV8HuZ?DxF_E)&|eSTtUG-~rLA|9PX)8B)_$^}3F;y9e9?3ix4H54>H1 z{-rvGPp+H8l)f|9y0P;Ezn%hjwI!nEZa#&hA!7moANMne+5K5e9?O11(-8RHBn||cXfLrZ!KND{P zuN*k2B@xQNym55F!Yn)-`9E8(ggoYg#?^)pmsw0Kv`2H})+yIcx;-(sj)g>R)bSR& zodN9u;&C}p=hKK7_-y>9el$4hJb=&pW5*cX$~-RVL_9Q?Y4X%6JZYrEU_aQ9YP7xv zhDkQ27KW-SfSp{b|Al^hYBty}euDI|Xo5Mzn^xK6%l7~vzcapj&}tq=$W49MQSzi& ziAv$xx)bM%a=~$9J4IK^-hKet5<7+YsG-VJrqd99*tjeEgcwvwwXr-TgTp>IY^{l< z=HE<7(q^xCO2`a}g}MdF-vRHeM%Y2DeG#|lMz1?a!|g-d7F--fLM9R}bm4hNCc_VF z%kASn_e)SaAbtebG<&4+oay21(!|k$9uq2iosayK&Mho%vs2MUOV?aj#$O$ULIw`& zJ$O8d=&H4crjI;u+A{h6ZRsI(zKJ&(vc7*vE< zyU6%>3O&R>it{vLcwNvAUbcEIdO)jMy+Dz`5r9#+BQ>5~^=dZ+b1J`rt_t99C1s#J8kbmO<}&oDU?S)hEj&nh|O7?i_#CWJqB#sR4b z90KXwE-&QGL80aFYvYL1NOQ~WWohLUb|5-(bFY!m4C*zXh1g5qGo6o?c?O4LF{od}cL|I=~hK*+mh6q7|zorPdzxw!~cnla!hkoWI zYv)Hy0QP#}v!~Ga^;ab~VDJ?vcXT0b`noIyu-a)9TdyAKi{HE-lnHE}htsvMv5Jn{ zeq(sb_j;MIrHJ-Gr?{qWRTMYdo28#gNz;~+ImtSz0NdU?yhbi90*;zE$Ai3@U zC?uVB=ktLuv}MbrKodKJ-#W-Vf`FOj7bU;z>0DveDlJZ@6D5Y^d>K1CrDH1lq9eQ( zNsu%aUS8gB-_WCn*)5l9tk=2JlWaD-GRI@h8Q;l3=flFnfFiMl1r@oVP(!#9(jH%j z|Mda@D$W$n2Mx7v#Nvj}vlKyeE9W@jvSA&H*as`y_0@DUp0%pcH$87&1`XbmyFD%R zu9`yS!r~w902py@VH*L6cKYMFhKc{}s+kEbR>Ws}RVasVzFfGNpoZyo-Ytw|>dR~V z8D2^{GlIa>Df1c_W2Tc-N&cRS0@KW$hL45Xg}!i&zIfBIAH_|T(9+mV1s#@)7}!Sn ztnn!QxRewSN~c3_Kbzb#qo_qb*mb6|Xn>PZ9d^n!(0I{=-W|VUrD00`%f3c?)}4~w z1zHpT75iHkrsefMIQugv`}~wA1f|D*TUtD-50JQck;MF6DcH!1VlhmJz4|Vv`dwym zDY+$6(^h-)PknTIL~K*q66Y`Yt`54}4u-o76oz;D=XA)$y7jdi)=sBxb!7|h zW(O%wo&5@298axuECc+G{PXdZ2K6MiE^3_@2%mG^R*A{dbRMYH{Fw-fZRZXMdKsmP zs{ZE#!sBI}WLE*_nj!h#_d4y!x*ky%39n6*v7c25S}|iii-_OSy*6j^xg-Bb(JTEk z4wk80NAM#iI7on~-&dhS&<)&pC1vLRgG9J1^$07op*FE1N(=X?5fqRcPx@2GAv*@CQzz(71lE6337w(0ajko;$7@7fy*E(xQNhXobK z_=H{3VQiMfJ{FcGMwwH|KmlYsxxbnglHnRg2anoVP&`M4q;Oe0Ee^A7N_*^ zc>uZo*D)41n>%@blyReB(n*}z9mkl#bC9W8A2?y#ODdTk4m@SfZTiFrCOOd2D=*O8 zCmRj+p(kunh^{=q@*A%I^~&2+7T$8ij0Y**NEc0VafS%kV+G9aJIWJEDxbqGCP5VR zvZ#`zpsQQL?R}w+g^K@`HHrfi)q_jY2fIo zM*`I?9b0bTb!X#_`ReDvos>MTv`Px<;ufEj(|t*eD$f#Dyy*7hgj8G3D$XPU#NB2$ zG0>Klah+P`uzb8|J!%EkV)=sdzGZ=hCwVdRkSi~1@qsPKlVon;5QC?#B=q&ZN`Qw5 z(2_Nj&O_|!7~j!sn$TFViVcFL ztztUiuU7(S#;Kn0jw#YDMoc0ws~kA@W%{YAjjfH17?SID4`EHN*Peq|H&N7SdZy;g z!jZZbrgTPJ0RC*g9!Ke)O(Z%UDX|peBn8n^ z+L$Opoc9!6HP#vwmDrradm5U)4pg2+g#jY8#`V$putdLoFrDpmk979Nrwu;tSyYAl z3OH>7YIvzcQ+th~0vP||;?bMpYR9~Q*B$3Bp9b3+#*Si2j#!m$>_5hm?xp6A13ZkE zp@3rrL?_toN-?yy^u}s@VMKor@2Nj_UKfwX(!#NrsjUf7@V<|q78$7*R)>xJE1Lw!Du2TC=URb6(D2{2E6lUv%^q5a<54biUfKDL&d43vkT z)!Gy)umN+lM~qzFgQwxC;`ig5QH$Nd(uS{a63P>vA42weZEKjye4R<}mtsTHIPjEX zF-%mh9^n024P<>2nq)s#*<<9CvGW4auZo=65iAl{w;&`_g$;H(c(euhCM9>hdC zmGCR!R#AQPaB5$DNSjmu2W3JrR3NJ&&vP|KA&rlurPzn#0mskLAO#u!LMPCBd|@rL z6d)$ydbGK+xQ3@>`{AE09uOljO-f=?c!J6E;PYzvZ|P2|)ck;!%c4Sg17jmV;-eC1 zy63{%@RhdGc>BPMO!>m%&dZbB$<+b-OPEb|s$d5Oi(l`k%j9Gal&7<#BboA3dj9U> z@c6luMWC;k|3?a)8Q{7K@!g-mkoxYaGFAzt!oGx?hM(h04GhQJlueYupZjW1 z=e#9?SWwKFD|~Ix+l&@zKPrp1u=Wh@Fj#B#B75^CM(uPeuoqfx1C;J>Ov(~i-vj&3 z1w)?!Axe2B$Y6`A6`Zhwsr`I5VJfn@1EI|NWUtGO+raOXHJqCrN}jG2S%4rUCRCtX&#COm<=lw z*W?t%UPSdyIBOM#jZs~^F+*&u$-7nEKU-{&yFI+pe727UMA3-wAn#8D=s&*tu2hGH zdaPwJWOrp|PX0PtlGzyBb`F^-?;Z5n~K{P%7br? zAp@K9d|tT&`D2$8Te86<82R&&eVTL#@{(4BvDyW#HO{|kQpo|~vpHuFjU88!@{j!i zGGD`Fx{0(gL-dEE#JS={me#Zg-tmk(Cl{fV<@8;Bt^ButJQj{<(SYvD8YWWLR z2aCm!e{@bD1JGgo-2aCjB0Yg~b*H;oYBedvel!gj=!&I!{U*4pY{ChJVtl>WzK)9w z5sU5JAg`qwoF5JM5c!6?h0P11sKb+xA>rPg}Hx zExzqo?o4k;5+rF2U6p(Qv+bHz^ix0O1uN2WbW81pRJV$2E_OkD|B z4L>ZhqSfCF0&UQvI?nOesNz4j;m|U4H16w4d<%gS_CW!ylAZq#VfjJO%+%mTwR%>L z^2B0#ueogWl^@AY>ZK8X@>gHY_MB&fHpAzpm=>}hY)8R;$MX>QjVh?M?Z_Kw=o1x8 z&Kc#Hn712MjbO#hCqMhngPmEfD?yIWK1k1ArraC8*r27NfjABEut^2ajEF)>Crz50 zMVjpeu6FO+yaqo7!@VYfwFx&4Y(9SXXtLXFMxY)t-@EP8;WpS@*bG7j<&lxgh(GU6(nLCdn{WZP zN~&MpQ0ksQ)iW_KV=$*UKFRYAMu3_Ci1A-$v{XE4aaRpCNpLuI;C8tV2K#2BRz4FGW zetxW`lScLG3aNvQXt!TBP1frxf7f`JnL)jX=igBk-z;WlXH%t2ZVo1L+Kk6BM;;y@ zUHP&p=c}^G@$Hg9+}18QF|Npk0=zu`=0aru{oC;GT9)tcSSwHfKVfj~Q~Qu5Z?C1A zW%_uVnwYpxUnX}&g^d~v4il3nE^l62iaBrInw8k5$?7pFbLqXp>oMuQS%1+#d2czD zk(zn2P%@u{`cqyZK2L z4pSVL{j;nHvQMXgX55Goq+)sSJ3+H& zB4QWaQbUD<|2L=l4W_8oJD-8YR9CkvlHlqGhW}yjEuZRmgZ57#_`%%?76|ST+#xu@ z-QC^Y-Q9zR5Zv7f?(XhRaM|Je)Nh}EU|;N3ZQf1l3}@C61^wqId{ty^>UTHUjdi^2*rw1wLXdUdGYpuc)yqGxgNz)4g+pHJ8C(*9o-ePbqHy zC|~MTzpM@w$XI-sClQ+32N~(p1sWwmusu&gDzB)Y_$u=0z9-KQq1|IyW@MOzG=iqsZFWx+P)JG%tvPzn zibMP-3(dNCy+?NRSfcXeeS>n_MoAomz!N=jn%zH*QQHe%gb|J4*E=Qq@Z29E{7+IP zX*3k(Hi9mOWkjy)pkKxlD?ENZz}d83XT=Wukk1d9e7w0KQVAk6%xUTL{Q5%7x60-m zu-A-m<3Xm|88%0!#ff_<)e;^)LuJuIcH6e^nuT3+=Rzl}f%OjPjOg{G`0 zF=4zJqLGG>^9xgsZ))=Ivnb$%EbA|J&m*4Tk=yuPblE5FNKJ^(Wg%ms4%+m6d};uo9!$Y_P8;J|_+vyDVFCpk$1%u*pb3J~fPknzP?!V33hI)| zPWF&R@leV2@>R^`_)`}pN8(>MFV7}ZR+zz;%Z5vaaT$RCA{%7gj_eBfui13ngD%Q# zKKd4{zl3_NLhV@+vTRxGzLVYuzb5N0YCeuQCW`h3y&+9tjNg@%{8)BU@$~SecoS^v zMkHGaT`>9aZ6~~4q4dnQW!sHVI_fU^+JMX;GQQ)no(N*O-ZpUJ-*u!i3Yju^bn8GJTceh~flh=Aws0^q%+5KDI z=x*Jt?1wsr*X%(H{^ocQZ5*CrW{c)ScE@PtvExjt-ML?GVk;^;pi-pn`>^MN7Q}T8-m7snqa`tSw98XSPi++nUO>g|%{GdiL zqaqCS!~f1d7-*ZcISkfCwGW`Hu7YlDUN$OOIc3pi6f=bnFONZCuOQqeAP7f&68KE8 zPTI5Kqkj9>ONZ@hNq+0f9nwlf5{o3>-RxEsS#?g8Dojhb(2LoCT#fS~inDdW2`R>f zc_fE63{5?GuO^SqFDPHufUdy^PECyE?d(=vTW-o-`gIB7Q4t#7@`LE zdJ>kap+B^TPhsa@Aso`_G8#*6Voyt(n3IBUp4SE~CJ+l@O5nMVUoTti?U@xPZDp{F zr>SMzZKL+@*q~6*eSdpCEnr7Z5S72wmf+b&?X9;Fs2Y*%qUJ1W!hJs`9NBW%b0zxS z%9jwjF1(%3%>u`Zm6XTVZunSoCyGzQJJbfg7Z5{Mb$%~#dA=rWlAI#&y&I(j4<|RI zBvS6Ik|2XV>rAFW=~)0wA4RjARFEL#QCP;w+2%CnfJVpTfdm z*e*&k*gX+2kNo2SZdJ4k9hpsxXD?sLBsWM!?qj<@2_TO?Y<{9t(eo!Yq7Kql0TT_o zle|ib*wv@l&Y{|Glq%-*pKmCZW-&OEA1Yl*-$`dd&uWJ)yQbS71U4aC?rv%C4*Kvk zZlo{>0`OU<{Em4wrRwf;e%R{JAg|4is~6uK9HCEw*Z(3FKVw~nAu`!6(s(;r!`DP= z7tKVWQN+BjCF6S0ja_chBbh9^%MFPRI>VMS*y%%!;A598ib{txC#`K)MjKa$JUpCe z&q#!$RmIpdp~czd1TBRc3)UeZ!Bb`eIT-otzfycsz4xm8veRat(;mDH{`mL%%8d{g zw?ght4{l6QLRHbNs|z92>e8qSN&ai@Yf;jLEMmDEdr{C?hUV6z)s)-Ot;kmzjIugM zM85g*yyPVa4_aCXl_Jc~LIOw0EQw~EN)Jdu3GubOUDFd+1K1%DmGWI0=IPq$GFI>U zg=hWrC_iGg0{+U8&-uFf5-6&o;5Lq>$uutWyB=#=e@pTe1|nozs`F>1kncoAD>c^Q zcYNV0wU6|4Ix-4UqaZp>gW;ktz1pXzN99slerQC0ylbC5^hMF7qP0#^)=R=2$p*de zD$Qz(Safq!#>Dh&9yY8(QWM)f{3l{>PR9+O;OG`B(+nx$G(u=bY1NHs`S{7q)Qz;N zM3!L_+6ph1>}45HqGiPWkSt4D5lY7U>lkn27u|+`c%@`$&YwHTf5Rqn9GKstBEoi!1-YLHo(BiRy%uOU%SQFtLv+r z;`P#CO1o}Jg0pvP@UsAQ=Z$vwEK4xpv-ym{!p3Ho;f1!wO;d^^-3lq&M@(37Rogv+ z?y-R~I38J_oz*!khztuZw|ca&K9AIW+CCM@0m}^sJKsf|)zLk6TgwsG9jo&cpg_qz zp8Fc>uyLYg1yd4~l}vfLy52!p>3MN+F}Ny7S%l`Dk-I(6+H{J+-R?M@ROCuo^g;mS zEfZUIr=aJnOD&TGsdtYd{ndX=Sov}aKzvo%}j1)|E)o3Ct5ri&}0Yhy5y(8ZI-!L5hhx*nV zuNVv@Xej=3z!aPgA^-4y?6pNZAm+o5$)f(xCL1^n?*8~e0r*Ow$P@w;xz_D=l}Lb8 zP(;u9V-{dA)&a=a1R&V~AJO{|vJ&|J{{HU|tQ?n55|HKrx!o4Rw!_4n8RxN9E+qZySk#C!i?<*Yb?4Dm~n&O(QvE$+Hd zd84%A_ohZ^RsPa^`IMHH7U57N0pC}B+0XS?+(e-;uF0+hj2 zR8;0?XE!ay#bHWaoSlni%ms8f@vSK!B0myej0u%xIP;wJbbtPj(FHYHXu?kClX+l> zfF&K_*PR6tqV(TELosp_ba@ z=A!*yNQTtw+Xa8>kddzYQPGHM1?=e`3#6RcUix@+`@D)#=*aeMLIy_1DC$(Hy$zoo zU4ehUbsvX!Z*NB!I=x;!kOL@Wg`lKU+i?EI8+zZUO7@(^@b!Uu^Q16WnnFUq`9|$z zeG3%((_)^pwf8VrW%Kk*I&nGJd01+Zs)NO|)GPDP&cnx@0VFmkR7pXs>Khh$wx6^q zS>#(U4qIAQ{FuL$-h@Y8>Y%$<`*LMU=-enn&pi~KbMT{)6L3IlTYhsU=Z9+~TjbaM zs-$`6K&U&#?W<>}10woa5NV-)Py;=HnqNPoAS{^-3TPTk3R&M`cqL3F(g*>HTiE8+ zT%9Exy!vT82Ztxe;OI*HGPSBQ5r1F^2tl~YI!S%wSx!f`P3s(-e>R(V$B9ic#~{#b z20alN4wB2CLZiJm7HZsOQ4xse%>mfN_FVkrlLZG#=Xe zC#XDRC*-Sr%kb4*<%;=lE#*#Qy)W6QYb2s8OK^OhL4jC;31*=R)g!Z#;5OpDLlp+@ zgE%=eks-J!crn+Cs?Ax^L6rdcE|)atojru@?U;di4% zi;HUOPL{GOEOt$SZ3Lf?qEqL^mbI(S32yDo%)uI3{smI@sR~3A;AcsaworohV&WW`dOiyB zqZX>j{LM?3+yQD-Txx4xC1!??g5J$jjWC_Hn$n7I8)wH9RfgX4Bb7D%rzIE*xeMQk zfhZxL>L0E}YFb`=`LBCOGPuVes2hxlvIb>v-a^+}4M3jAl1DnOq?&!I@g&curv2UW zEnQ_wRciF1%ZO^JGHebNS34yBYT1lWbyoG~8gh9!T2m~rUpzk#OQbU(yk~snbJArikKuaH z3F&I(WeKk)VDI4&6Dy^gW}4F9sEP+HFQOm%cF|wzUp3j~s~{hASw?{ZD53LPW6RD} zolD*@sJCjR%U6If9i%Uj#T|cmvL(ZotuF(Fkkg0#o)ZJcc5|)~O!~97mmb-#=9>>_<9< zDFJ>LYCH?7rIm35{Q$<1)UJZjFPb=f?sQo5>=-wgEoCzWYNC+D2ickFPJrrH$c>k41> z7)e@&d0?pf!JC4f`ZaNt)^Pqw7c1q8BY5tzrd8J>Mm#2bds8@AmQ? z-N()X9vRQTU|0I$2El3WUu;(NTpWhRIX9XYW=M>${AY53-^^alhoxKeAlrpR1w0&V zZ{5U=ICZilejVniNgzEI!gs>Dz6GAZDYLNkP9vU3!5GNz{_ahGDlO>{dffD2-c2Uj z!0k>e%fu3kY^>~KD&=YCFUB|7a03rl&`?&Z4mEQPp!hxivA1QAt%X5sosnE}Wl;Ip z(b>Cvc6Rc_Y2nG4?eO5d>;8u^e!GKvHf(oSosEfHAB<8!b!;*rfwX+Jx`i|A&hzV- zYnB8Q`nuI{S)`e+Iw4y_P_g6Tltk*$!Hj^ep{zf+| z7Y*uMPYQN21*4L>9VK3cq^V*( z?uFp72kf_TefhCGxR6K|ZXlJ6eHLIOJZyi*$XqaPb4Q$`9WSn1}?8rrwvQFpiRc5b_YPnbph7lIg3lCa*NgJDq6&9%Lgn*72FR+=Jm zjEUh==p0n`SUa=x@DgaqhI6d*VnmR1$NC^>YikHbe|P4l(6?5=6I+eaOU?bO?1sc! zR6y3m`QhO_ihFEF^0%e5-jS;3e3JpSO)_NKf<}Zx6^ljA$Zr#cOvE&S&vIvf9=1Dh zyzCB7<@nRPY~Sz)Eh=J+a#t0P?qM&BLrvjPzBIXUc8Wh>o)d{dc#$H3ImeXz`)T5` zF)s2ly=6_36*XaWyXCf(%a8YbD2C<^{RNavvP1)tSXDZb*}HWToUlAKBIbfXB_2?e zV^u_Riye(&l87w9(6akg>s`Vkc?By$9x1C=7s$!Hv(*3Td^d+mR_60B0KRl1M~Q0L zBars@C|kxqBh0~?Jd_2QvvX3VPJx4yb1E;t8kCu0q1QFT4D~wiq)+{a$QoJr&{lR= zdCcQ=dzN8B=4WOcf;QaRg40dk_}|25YC*L6g0B1{h&O$lE|kAqQ9F#cZ>Nb@_Z43R znlRj(XTY9X*CHjkD6TJYFVGmTHC*znH^Vg%n= z*c#48UiR0*7+!ArxH>~qY)WoANdm$S?J-teJv*tedffiL8PZnFO#3hYA+J74YE0lQ>ZJ?8_PWZa~%s8JM3v-lIooT_>xn?(!( zRBEF3$IPjRy3?y@IM~)Kzqw?(12=DeoOHWK8IzP_z)2Lq{nL{|DZw~^p3blts_~nN znNLHWB8hT=g`5+|%<5ak8B-SL*>pFi`gD)`#%w2OgevIq1V*IY)eT@#FN3_9dsgj+ z_}g+I>(t~sc#<9;#A>*Ho?0UOH0t9*u@Nc)exg?sWZ|%dL0+UG>sH+aa+u0%L=vZe&LV;_P?W=SQV?N_Z% zpy8dtHum$I-{IiWI(h4QzkTdkloHgQZcetyF2*&KchEEJ23@5_E8dIn)pmL&P*1mY zok*g0td_E_%+4K1=k&xKB!LNGM8!4>bdG z6ibhdh@fk_xg;R*lJFCNcSLZnFy##GyU_YxWoh}v)xs7-_5CyNxe^=##ZcCj>qYFg z`VxwzNaEI5&%3vQZXMaN?}6mY0yYj6D~>5D4&r7k*|fJMb*$P9Sk`trX&Sa3I|Lfayg`|iljOM6(=dRYN%tA+hyXtm_2F08MMt=Uz?@$~$9G8jHxW{z4 zlzj2n%$tZ-t0g0u6vV2d(c^HwK-z|=u3%9F~#M-pIvkh0HacZv+9z*@O0<4@x#yM%*d2~_5(i)shnW{8J8f|r9QxQ-QoPL0#ACC zWbc7?c}Q|}G0e|+ow5hwFVt8@C+<^kP>0c|Coju|jxk=J?4@>d7yUe}OGQ^71{vBw zn``Bl_0Ei{l0X4gCN)f{#(#crJ=je?nTm*gHD}OU$oP$ticTgROw>&$ImzL$-xvNM z1mzfapQ6Ul7_?^B1|iiOmUclG&lmYmt$#yip&=duM%uCGeLcU9mqVCw$7lQVjR4Jo zjodA%+2a#$KB<2pQ|UG0TfQl03#voW75$7XcINAcSABTu#b9fuAiTU-~k@XALidbvcr-WDE*h}y=H z+NM#iHVcz_L?I8i3qf4M4402zbyQ5+%at{qIyZRw31K+ zuFOquZkSAoG!L5)!(z_w8I$H;K3eHXB24z#nMc~khT2!>!Rb0o_Pq#=_$`MIGvI3? zGYwE%)FKOPKDVr@g*1uhC%G`{B0aC4g-$w%N#L@Hxhb{ZP!}F4p>?~r$8xiiDn0*! zl>EY2A$FVKP*k_Gv{5wuQ3L4Ld_p^~K>PN>@u@X>)Se_my1t?+0bVnSA;G1LmhrWq z^*)48j0oRWJ7H(_$XRPo6f)00Vfjy<^ywt5Slh3MDTp$ufX3>!r$<61;HQV4cenJ0LO-c`I! z(-iPy({KtHq2pd=+xoS#k_e~4eaY+JnniRyeL(U3R1RdO-`Z&Oc*)joPTD3~C?q5! zy@VG2<+Bi1i)V3`u8fNCh=Js|`&c^94H>LmH~{Yvj(@TE>l^Ttsu(hY-Twr5s0dBRf z0rguTm-hnHfe}-&Zy(k<5HTN~wHW-$vj4dO@cEDV9GO4T6%$0Fb)iQy-gM^-TH~DJ z`c*WI*(zk3Q=%?f0E>U>#w5VO{dNg@OM#-Tvrun%2Pq6xv6lo=kR*Eu=W4Y$pnKIMer91ge`~j zmtj~9_&hs5@3RF0{BSOlkTq0f!SE1WpMiq!LmfqNS=sRrWo~&z#g~5dZ}Z&WD8Bb( zCwhB(Z+e;H1D2CC1xO?KcH-TtfPap1-@sD62F?M*w-vC)RZ5V82OqywV4 z6QOz>*<c0ptzyR>vVt-EOeM0P+286Zs8{ zl1X5BW#t(#xyR7ALCdH=CVW_POX<=`7TdE@hse}vYP6d8Bi>6gAD0{x6GNHf2C)^t z@pjkfHjeS@&LgjwIlRjP*6K-q$O2E!{el!MT1=_1qy#3FB7d{Dx7U>-uM!Ycn*71m z{B}Zg>{1aqvm3D?n}*h0R5#+-MDjj-k&qz&Q*pk0h%-Z6QKNv9yC0yq%rF7k4jAg9 z(Z>p{9va{Lq09iU4j1%)4>=R?OS=DZ^1n_;ga0`l=_LZH(Yg`g{~9CV0HTl|tQ9lx zhGdra{@*@Ig#Y8CBqIh$PKnO{YrAClpY2lB5O4*yHAw&K(u4rKW`LfA3#dOb^ZNg{ zsZ-3y|Auw_KYQ^F75mpk{j4%4;{nH2*4i{hJs-Ug^xz#uMaIqURNm@nemWfN>^VH{ zHSO(d7x%)IEa{^~QmN~{@2^J8->SX0TnNMJ2B#bv$f&j9*>LX_6-*oLW}Ceb&&`HXc^X?N1bxYU%Uo$J!7Lw>QfP z)9G|opSNMa_bG2DtNzwto~y{%{(*9sKu&f*qqgXpoenU)X(~9$lc@={1{@!Ene}HOV7~+B6D&Z5&6u{+@;KCy^ zu}x*Bz~dzKUmp$#)TDoeFR6@c46PrCCjcwgTLBWuPvk!@} zs{xhU=fla{B%f?*KkGMmy;YN;_iT*=_zzIf3jAqZT3Pxhp&hyV#@? z$G&Ze`UkT)WwBpojYjB{rvF}RpbxH?ry7>~KLX`ODLlz9XdwokM5RMEQl!%6=IQ6f zk5Zghnci*m-c4EeY-?etqxogB=(77R^`5@2`rWik7^~FSJd^ii4Jlvqp8@XdDbGR2 zDZksrH~6(GzH^!V$S>2AA21n@4}VnTvhh^7?}(4Py(+loLj?5qYaW z_S%^;cozxqvcGzeuWvp$$)bxAq0wGyHJELp4_l=b%Nf*4BFtP52biQS{lvZd9zkvd z9|CSZ*yflR30*Y4ucyPJV8!zX9%2JUL8#ZDK`(-Qb(|R1NYEWvi|HqPg1Hgi?@tCT zu0=l)-KQcAxJ44jVDlfzbaBh>BB*b7dX##|CGu-C@*k$dJ@%t>Q$rA4IqAaZxJ@zQ zQMXMvspzyNkN?_#E8grf^5OY)ZjK;LK8Ih>d|btxJtsuOw2297Swb_6d6~<%dKcl# z=1@Bg`f&A{j|NtWmVD<1y-2D3f3cO6icq|p@dGBaspHZwnGEdp%FmKa=D)w~kNp~$ z;7cz@kf6L*+Kt!;5+UgJAFQ8K`(s(BXr*{?s5K5+@ zx(i_KX0~i%Ddse1pkNzmZ_eg?OfzNc(fw-x5m~!IJF2t}yQj$>BZL|smkr<&zBlQO=PPR;PM+E1m>&rkSs=T@88@b}r-!1QFP-9MDc{FR38K zPl-@ro{B}tE1(R_YstwIBbCl?DN_5<)^qC_VK7r?F&Z1vD&pTzUW+9sE z8+Sx!p|&dEhb2P%z8CAI80<;a-+>8*cAxIzHdk5Xj^bfi!o!`f#zB*US6&ks%$e*O_zIc zDH@`Xs{(*M6JmQ6J-a|FMXBi#*6#$AS`8aH?6(tcvIO$aI02Ojyf?kuq@zLHo)V-n+Q%4f7Cq!48asn zMyIV4FYOo9v+YcyNEzf|DmcoxJXzs*PB0m$u=Q^-O?Ao1vOHE-d#V2L{}dg~(-!HX zfK<6+asCb(?n2LnUDTkWA&uZTRZ==knN)JR_XogUdWr^2fuhcdb92rh2$ z%n5sY|HdGM_({OZWA$3J+-sO(c^7X13zfK%Dgz>CnDAmp>#|V2Bo?PE7uN2U$A*Id zvZ;a6;a}*OFh8r%3JT{}QRyrPx-I9O4k-?|jk`bhDW$TJ96Eb8FCbOvnItq0f=Z*n z9bo4rynt8%3u=~;y>i4{;qYIY`@iGNTjNL1xydEG3WKv7E}zv-kAXPsifRYaYA8&Q%w+k8dB$h2*3^; zJVSXqK=w2Gf8oH$$B6_QNhu%U;3fpH+0!3FGW-7*91?s4hxwxB|J8v0r@Qt49jC?c z3C=>DQKFxd>ScUc_YIV@T5u+$>9JTR_EJ5%O$G{4^`8Z7yVOAu#tP7^E&2Id!2FYp zjLeoDjfG7hWFzg=9J=rUpYzdL?gmTEO#>qp?D+r5>!4C7eDCQvOCAN9BF0h1*-cRrg3OEqytsL!uz5Ssy zn&UV67zQeo1pNy&KhD5i{-RXpu=HK14uy2Np&oX!91Z)n@vu4xHZrcMYrzFP##3gK zZl;Qym@*V@s@=(K1dIG*sE5m&mjXW(m#r7gT?dWHaTgra`WzB0;b#A6*y5kTiG-QY zrZ&j0An*;j;uf5J>`X^a(lL1w9@UN?xB>U~Q_QqMr!`WMSgaX)JzQ^*(7OdIy;o6p z=DHc*iT4+-tWxO$r7iPkD4c_5L%e?&j%E&4Uuv6_(1&e;Fx1Ni#1i}w}U{xjEzJ+97UYu-plARQk{J&) zm1b5iU^U?Wz`qWg;MHnxXZLGfe9nZhuJ7m`dbwypPy8w~^T+pDdZ%MQ&PFZ$Ctr^I z1hR?C+_MV@^!ROYi>)cieYC>GTzt8H2GDqwQN^78gYDB>tGknDVfFM3e@-RBP~5|P z#VD(i2eAdHeT_FzA7F6^p;oluT!$xo=2^o9iUU3_9$pc~rUg)RKt51T2Y%hOkW!LZ zM4}TvGkWuSgj_jcbj>Al_wIg%WqJj)oj8wNOW5TGH&%{j5li38VH7hjvt&;xjXzwq z8eSH3I{uumD))UqS+RAJ>0RS%ZY7PM<8R90T+2+8v~;_iO%QoVK$vJ(*cw)E4-n*5&OpoAXDNDb1Mes-H2rz{gT2_Lwykw4<7lclhK zVeL14-NwR91PWdOhEQXvCJQd&({Bsu!7UF@jC^)lGPMMHJe}|5vDE2p@iYb&q!9D# z%cycKdA%j$zr;u_A$d(UMBc`vuD0C3!Q*TRQgeARMz9c@=Ej(a>7~Ea;QdY&RU*$N zm5(c2jiIxMwS*0ehuzMvbTiV&9-OFkGk3?JIzKTRtu2e4tJ4tsT>k4`9ip+*1{tiReH1ospcO&$& zwa|(iNG_^}*y~T_rPq<(>7CQo*oZwYw>(THR1ZC64ODJZR~VdE8f!ooyso7DvU0|P z>T<;Ic!Ee{Lw(0rHPYE0tfU~zWGZ-yqzZ$YpVdXR-`w)poE}}CrvIG6n_#63=iHMF zC&VXtzWL+3MV@=)4hE|&xU19$xP7(A4+iBg`Vpq6QY`AZcr?pY6weeC^O0poBY|5!-bM}3EqnrXnLe-4#VyOPnfFJ9rFYGsr znV!i|gPENaN;Axvd#NVn#+|Dgc#|I3nbhWVKH0@f$Iw5+*~@1p5Ki{fi0y$=o@fiV zrS6BJEsg6!(t7ksr_d(^_27bNQxb6Pl~=qBGp!f|XYggKqChaAJ&k(`N0!CV)9+&M zL%HF%gGS&wTGeC_A_FdsRLePSiY;<+TGA<^C-tG=C^i~KWQQ-vZsQr7bLC`8JC0+u z*`fKPMZ|F~d{U}?h6M~)WxOF`e<-aQp)3J;jvqc8uyS+U!7u%f4`dJ!`;*$4VFQuz z2l7>-X>F0l2>s(o4;2UrBD?an|I-vWKEBPcGEU~>$X^u5{23rZT~I$V`&D3=dL_DD zi2c8#|A|frmPJ2=2|Kcnhw}e_+5eYsqaRMV2-Z^j1N}%1Lhq*3i1ycNsfB+~t|Ue3 z8dcc7XHja^Qs|=gHX|=R)iJDp4NS!i1Rtzst8WZav%z$w*wSuh7W?V!62lq+fW!ObYL} zfmPX$$jIHVaGo_N(S>K_-un^J{u}E_5=h&R;mYNk@}VBwIXF1@0TL%VI{Ks6`dj_Z zU@TOpX%q}H?=4CK(Ep=mZrca%a~Zc^HXWdah=@oO3p13FkzrwJ>3X`z#LWD&jC#7R zzMl8#umI5H`VACP_67#T$YsAICXnarB*i*ogtf?7jR&5Zjg?fWEW0$O-94#g$CNQS*OR21=Xb)g=mLeHLL-@CQ-UD4pi+6hM z_4UdM7&0@*Cnx%t)Iv0QRX&}>^F2OB-~`+ky~zAg4mN8o!A6TQ*WP@@WdN~M0`8MQ zZv`P--0SX8qN1WAd%GDcd|D|-<``+T_1%k$KAA;zV*%AE#P9KOSsds@c|3L#=Je($ z7mrrR*0V*3zW@+di~)>R!@o~L&v!X_S+^R>Sy@%J0R9#O%Ss&L16#Mq2r+_X^J0@f zH7R3;m2?QmtpGd4-%Y<887Biud3euZQvPsibX1x&-mlDn+X)7@dgG+J{Qr0X#28H` zZ9KPc;N#;z_wv68zr5v(e=t{B0RwbF@XpI%27#*2Tqu?2=Qd%mK@a#F57213oj!yo zAM8}5y-vF=2(&;9445C!eduzF>s-=8?Nsn9p&=os?RQNEnTS$xAQvIl>Kf}6_SqQP zICigK$q(`%6$;*K`-M01nGl`C>eSTLze-=ic_J<+SPCxyrWzcKLsy0E0Yf6T{$cDY zuUTFo4a+n@UVggLh#XAJ?Sk+LPOTe_>T5<7Kz{`gr9XrCUuXD(vvI2ZFzhbFwamsh zH$Mx2lOuQ3;3nx@APwv5ofL&N2v~A0y&}Az0LkoRD;pEg}`DZ zKI)z^327C$qCcmjb~384(QRpOvd?p#{M8Own#we=2f{G}-~NktBS>_+wh(-zJ+IywRx+=RO0H@P<+kwj3K!3Dkc z(@j6$Uq+H>#(fII!|1-Fxq?gfuMwUB1w$C!#)}gPZpmYracS{{VOs=w8m(XB*O(he;p=71Z14sDK7w*_PoF+b>KZ{(p$x=@=LorEeactpie$lAjH+aW`-Che&nRME zN(j}HgUD_4ixk+#_(13k!BFJL0Rd1BcN6a~6DZt&X&@mo05~#4`!hh^g{lw06Kco< z$)^DJ(2s-sZ%i0lf8)s})epI~_{#-gKZh+MDfsP}JSV_@5x~gfj>F^(zi7Kb>cg%H zzD2<<#dLy%2Nn6T77(Nb0WggQfl89{1;A_D`-ye+hg+Wng7;%&=R@QNb$UCj9fuOY zOT+yMqRw~0fEskE5Ie1ZRd1@k7=c^*{+9--BUpODcChDx#jbh*q1W0HrY387T# zv`3(WSP24R_6hiX2!a3v=Q|p{0^aFh7%Zn5s1Vm$5P!-misM0Kh><8#24|cbN63AO z4F^hrySyK4W^OKcdJ+;Kdk%sHu8Sy`k--m2gws`_=a!=8O&;MS>XDBI)^~{l)2BY% zNg=T1B>sDFjj!mzL4szNaNL(HA!-8qR+(vSa1aS&bc->44dNlulX<=`gT8$i#5&{< z5b{6Fh{@r45W@u_3WE$tLCgk9ei!EA3i)JqL<*eb2=D=Y5^&!GWU9HFT=P{0G= z;7r;CKC;Eu`N0ThLHHEsa2o7E3cd^x7>`}FH0EFUQ-Hk6+p&C;#!D^9j|3$UJtMqt zF$`^zpcV7Mf@63*#+jB1MI#(a_8tHp)3Fjb=Tjl1Om6VM?eGt%g?;JLvy%lEente& zniTH5!u|ww_UiS*(lRIo5L5dMOftXtZN+pS1pE|?%-5AyE@hOhCb78O+%)e&@1qQY zGrdKDDurgnqi5u?{L6$vTn0XYX8?}+emf(l@HtDQk75%|=xtN>r`m3SC#)}udprU~ zFMlvT?3|xh?_g+#-g7iQhdgbYL{iix2m@tLn3v?oB@>D8C5rwx=^ik@HhG%eU@l>c zEoY(r&Ck73!3cuao7}?EB*C1{58K$CVSnME(M|(=@*!uTLNO5E0kpF`k}P%{st>PO z7mrf391e0Sfk|&|$dj;LJYnu-AJb)?f*E(2n5I0Qm9R&Zs2d(@Rg69Ys~<$MP-Hwd zCioYZ?nlv2@i=S&$Qhqj;&2SXprQ5p@&obo`O$=9x)B%PCS7L3q9#55GC?yYMO`bP zn)Q<3;_;CTQ=w=>zo~_Gqu5LiNPs15hHF&CP*EUSj)81WH>5J1Ti$FGTf)hQ} z&_X^i?WkJ3zg@Kkj|z%ZLFLLrmclg%uwKC-_Q>HKkqkspXDDI`0Ov z>w|)zB_ZehSQp_=DNJFC^}YQeh+94mw;FVNg8bKhj8R%3~q8 zzmb&^u{y$%i?L``gzb8!B3P$A5+U($y_n75uiQ$try^VwZRGyAgneo5n5dMBZK^(Y(s364FJmSAdr|7Fub z&0@-85ecr!DU`c4v*Xu`)BMg4wSwCp6aKzsMHJJD7CfxxEUnjGe4Lf5{h}T0xdorPFyy&hmvQIZGrq=~=LeehkS!MM4SJ-(a!Ui& zaqIoZZ8*eH#n~5TtKN@hP0nj5nmW!Y$_Fmt4sE`5GRCzx+MG7M5W1>r$nI%6=hC#3 zVY3}-@#S`?mh6ls3?PS+%C8$Y&s*02`l6(CbXjVSSu4=A6sq#av7MfwgVpH@zVh_` zZ?xo7yHYiScnK-}1uL_y;YVo|;ox~8;4rMm)Acc#y@)a0R4^er+Gb;eS@l%#;V%`Q zgZ$mu%?V2x>cY^4i|Ak+Y7AOlqMZ0uDm6Awz;xbWnP3_4v^RTx^wH?&WZv8gZgXY`hbYl*er!0#sduUz?bvG zK0`S-Gm>JfMdWLfREYlRlzIw-)YwG0XP?}9x-3aD2+hQ<>m218Hrzk1zoBwB&F}4f zkXWcx2sSGsXJ4nPv5!grwWE7aN-iRN<@h#()Vb*Tt%fcI&iJC#oWJ>|dT3OMI(Jzo zFf_RihSw)|FjvvBWyoejTyj*l555QEuR$ck3VY)v0S!o1Vaclfhw~kDN~lbDb?v63 z-0L}|ORmuP(Clu6?b((+@$aD%vNFD3e{iO<&gz69*|`C&h{F?^IsPAYPJ6T`KIy;C zBOjXWST_+0#ZeCU~@8AU;$tzt$pqDtYAqV7 ze_qLtbUOwf1mmp+1tA(=I*UKfFWX)(e4(G`8Bq5;-} z+z;U#7>wB+(Fl^Hm7v@vF@+gtQ)PdvIjLW^vnEY-`}a~wwDAw8;a=v}ckwx1{QBkT z+Lp_r0l8niOsHDzvy0)&z@sL%k>K@Tog7|CDS<+YobU_l)o43+*)cK*mUz7P*4Q^6 zYV<*G!PF4?T-*mIY8K4v5Dn_g#77KhI0R_z##R)=C6zhSNca~^w~fyBYn8G%JgFF6 zqGOw|dF;BL%TZXM-uAMzP&mMNo>M0dq3PtD+qICchS**4dp*f0+)Tyakio` zbM^O5TuC@OxC{>-amWkJ)*DAEMsSEiW<=WRM>XG!5|1&mC1Xa(<-_&aK!r$V%r>zo{`&u+1$`kipb0e(pL7K+FxnrXkzn+VsbW%h zE4fBbL5LqfOZ|_yLNZQJ4@+^J2Gw|w8vS;tl z`ly5-*3Cc-`YE&4f0a>Ev+9Q0ZyJXTGK2hH<&Y9jy62*O5hoaf0^Fe(y_Q}XE3W~VL5@mUq0t9hm@B_>og z7+@PY0dqDM-JTcXOhHwLEq@_hAGUbYqK_Pd{Wj?i#v<85uQQAIhqd|H@jLrDD98OL zsnAc7jK1PO<PDJ#u+Uh9}f&=Ii#+0WrNE-fWx z=T9a%v_1AN*ZBe&?Xcv_^?SfR)LK5W#A-$<3a<*`9zWJMz@oF{Wi_O5zhRs$ypIB& zijtRGB*hgl3TTFYu(Zj5p!nmv0vB*Q0esKL>4ju}5k8K(egGRNLo!AY*~bT)0Ohgq z|0SnQ8ft4#qgF8PRA5){s4w1OwH2>n-o>K=mze}RiEno(kVXOKY-45Rbv;DM&BfKG z!=S{SIOGISZJy6thm59|7QV_;0`ezgF3@YUKeIS}61N{8AAfT&VVR+#sHv%r8#%ah zFrJY)l~X=Gh;i6h z5NRw*L!;j<%`<-5rRkBaCQnmU=)C1MeY2lt%SjXO!aaqoRDusY4DJn@rb}$a(f0*p%09&pc@Wcea5Q9Q#2@GlSn$T}zEA zRtdv+O^7Eo#S_jCzRojLd<|<-o2_cilG>UC2snXGGeb@WmB=1V{cxFN7pkPLrQ{hbg@Nv7X+YW zWBb(vv*Qv}LMCO4_ZRaL?5@Pj36!h531Ju_8W* zJzpYsjERY(;XA5UeI|#EK`e$^Oor;k@(M%gE$I`m@p!TeQM-jWf9l-2hx@+SqSTI# zjUq&jC4Oo{eHC#=@rU}5#=(kSIMlOnEbnpv%fKcNrPvDdSnNYvZs@iT)&ju*7bmBC)@)!FZJLf(4cFkPGABm}Eg;GD1ck{vWN_8ws zHsOG=Q=0c~X}QN2ed|N`HmhdilJtpv{)gmEM9HzUlnS_x&k2}(56K>TYh4R((P}d` z#b5e|H4yJzGj^RSZ5b4fL^geZn{y#vJldGK6m*I>Oql&-hg@9S)sIEK^aB(YBoY0m ztx#a_n-s?!4}&Mkw%AK?(XXe;m86`o&`0ar3M3LGSV0{ocO!a1MHz3Zvr8 zi4h(q0CVj61iX#>C<^Ic80&h18$kyf1H1O@!6H=N+u^c2CI4J@ddL{YHyoB^^VXVR z3DgeynEQpsNFg%)fklMo|6=bOza#siDAVb5chX5Zwr$(#*tTukwr$(C?Nn^rwx{|x zGylP?HS=NWTdh^^yn5%|d+y!m?z4~EXe6FRHb&Amy}dSwrJzg_XxJ;9uG>DX3?5C8VYfqmll}lXBk+ zAGXZ8hNaMs0X}`#l6m#xd4=`nq=NKw4Xc#@GjAgG`LyB=+Llss)@e2@4m!gK!awc) zslRtg7*sXVxEbuL|=VF#<^R_>JC{gCJJ?)q(^koqj1E%0fxP5eU&tdOc|N7nUdW ze9m!UWgCpsLbe7Z_}^N02+mpxXD>7zCg~HJFlRm3ND0|SWm`0I7pC)jV%(8lhi~{_ ztMDiIocbyE)aiehg!q&LUsHRV`v~iQ@x1fjI5Ol@|BqY(taa(TIK9N%`|sNmaL{%o zLjb4rzfk{=U0>cF9PwY^Ul;c&`o1}C(AlI@lv#E5tWo`YF;63fL^MtpRb@tOTrEM& zkQS743Ni(oW|qMA#6^YbU)eFdhTCUZS=m2!Ele<-WCznmC*=K)qFsAnb4_ZNg-+P3 zS}0D)z`nt7lz$1Wzi`@DqI?+td(oLEpW6vW2L~gkp!j!6;K6-$yH#1aWCNqTVm8Jt z401$=3a(#^TCy8pWW`Yl>x=Y{4fw4A$;cO-IDYhOsTx=ToDBK&TU})3QW~T$Qa2r- zb15D2Na+t;?&x(YMdjXofUVf7Atodhz}d07n1Q_8Q+k$kv73&0Ca$b4rU^2Op@-BDfoO9bY|(;jq>r_B~5O3 zHEUHMXa>V(vAI5HKIO+VFr~tMKh595iS#FU@8%iU3eDQt0ia{f`f@ zon1UoOoEANN5m&Y-$+(j8O12DNREshL}OYoeHILO#NWJj%|Cf)mrSD#Frdf6!b%wm zXVV4Jy7~G0@AEaa?=MNQe)Wuui~!R?e!aMe9aU9->Ysrv+e8{SW_Z#U!swq`Y@J)J zuGzIH_B4Ja0=sVFuF$;iKw4H>@_d{~OMANs89i}v*k56`?_q!4WkfWy-d1&ec|Bwr zsdX6H9)qrz979?47%kWb!(e$`wjL3a6nlN%DF+1w+wQf?Kl+ege#KHs!BhRRRPj8r zI)EQjZCN>U{&8tjacy9kt45cT@TUxMo&XVCX+Z(z5e9c2T6m(g{|^!h<>!6F(TC`j zfEN6?ayxW*_038265=1_lD{*f!%)2KH@63;t7`H~B*Y}w6Y#&>amu(#!@4n^vclaJ zIyPo91Vy6S@E~1o zM10Y_^(7l|8kTMZ4LS-fd{t3B2(S*9Ms(CevSa=NL4L&icJFKd3&afNM^y>9HxuUT zny-!A!H?k%aN{=vge9#kXQ^G`+>rJB+CG@mIi(?q)N_dys_@I-{4R;^1IZZHuq40n z-!JLIQ+XTBI}TY+>q*{QHPY;r1$s{Kz=m=BSnOurtxxAX(O#POyr6ktl`#_y2IL@E zoyM9JzAGpE88(z*j#fha9yIz#jGg?d7o2L3$*Ng-0~;*YPTi(!0ejx*MWJCvv+Ux} z?6V;5{ngT>{*0c8&@lkZC>BYaSSG74@{qz0NfBxeccJU57R2!`+(?Cf+*-q*_6N~i zu(1Dn^MktQFIZoxLJOB4aTk-$v90RaX6uA8E^B9RR%-PwmuQor(2f?b5TmG`UGMIQ$#27=qZL#~ZN(MEAEq!o z4o?$5?Cz-X$|LG+L*eu&P2f1^l}q!xmY7>6_uO6MgjMa_Ys!6p zWqpmO>9=d^h0j+i&MCrow=Goz6nw|m{T!zqs;zpSeb2w|GLbi4Q@O@qTC`OC^>4QN zMvPxK<$99o704dNpQ!%9NH~+8*Lhbr)@h}qeZe$n@y!D&ne#OaZ*yPrIB5HbT2*U@ zY!8-nuv8lFkqX`XEADafcf??QjA6!JrUk|x#a)&KMfYbo>46ogl4+w5hl?|HN?^1S zELV5fA6!tIr;&4h=dn+jvu@nmp1M;r`C>=$r>!iMnu>osXEIP}i-HfL2>1$waDW<` z8wq7;ljjkssj_M?W#5kul0I&m_yg~%Rm}kPUt|%Bf%eupq|DTFd|;P&G61^EDRjsq zA&Qh%umOb?PdSVA!gKdoiKw&wC41|468TATcO2zM9$yC4!VA1j6gs1z+6{O^Jk&-m zf{WMGbMY@0PTZ*-f>!H3&SsxaENx>4iF3GY!ys&%?rJ&c{l8Jclte+juTfPSkrdjIs&?wC7 zMbz4bzFU9t5M;wslr7UNP2;tfWVW6r86wB01Ww*1rAlM$eb2xhh3439LYeB;>bOs$ zv&*-6WUBp$nSBXRkqssmiF8kqhe4TYedFdn3%654a4EFp33@y~`}$VQ(!nCb`eEPr z#>GIV^!!ZpFxD=2CuR60TAQa8!n{2{84|s}^-iImhr?enzgl|EjyIG>1qhh7_cK95 z|CMOXgU@`9$fqdhiNO(`7YI%%pkofsq81f=SIE$@kA$!IT4^#6IG>O|DV;RV<24Dxzf1)w=up8J{55+X2o?7>aD#I@A>eZ0+G(qA>*i@u2%gIS#m`r54_SUXgXL8N;tkmzLwcO z-tfIK+HI@7`QOF1t<7F}4_ZCBhJnYK-lt!v*S&(^En9)hkpW^2sMAn z{_4HJ<#WlRrSPA_cn8FXQC7QJn|no}#}@Z$`PwT^?DY)Mjkryro=jM#P(y7yuQ(ef zQc(9LByn26Q{^AC{5Z^`p7x%MBp&aOt&tey_Ov|r(^OU{mm1AjrjThmLS^ObN z8TIvi^m#U7Vlh$r6^HIEDYzm}_5hz@ha3%)g@Mj5P7-mU17-)^-fjM| zgU+dd?Z#ouogqJArPKcS?&9x*#I*l0G_J`kQ+FT zufJ1kJ_TFg%|f~k67oE%w(%P;q6I!DVamH#E3BQfy;rzhAY2R)z4>7y7$VBef+|IE zkxcCdgpp76l1vzMEI%+?XK(jm`S&Y?Nl&=8-IW7Hqtur@zH<;kr5l5Y%cHy0&~pgp zDztZQQ2R1f8!&UP$dQLJ!MeiX)=rgziJEPcpSu;<94eapqWJyU*#m8V`{mAY`)ZOi zap|^1b(z}sp3Oqi1d-Ns?;0O5Mvrp;haEk;MFQ$mMc6v$*G;J7JtX%9K(JRt=9Iu` zdAa>OeEd0xa@hpMk6K8tV$HKzB0MQ;ox;9*{0&%}GqaPSVnpyXi)S&LV2B}5FL-X> z=_iRVZ$|m3rLJq-Jn4CF^)^(t*H;&i`s_*rYbvdJT=X@oN?)uMbmB>Rov#|Ky5F37VV=Mu%ob-}qKP?wDP6Mn>?c>760#Vq8&_)C zaWKzD=}dH>Szpq?qbvvMVF*t|B2+ z_s{!YnSpVDRpPE$K7r9!nE|%a*pGguwq&uBE=FWSAEoor(2Gq!C^a!|{SWlXdoiW~lt1Ubne+xVtKP#gA86m&@_yRZmI{xT8OBgW~k1y5;0MB`_+T+G|)8o5Q6rxzL z>&Sc#%2!!I&go1!X`=Q8TH5|lw>VUiiW#ZL>!RXBuGeL7fAN!wB2tlTxt-`3CkQSa zP_8@u+Cd$>7>II4ZjjrN44v!5H{K?ylsawNqh+24iIBFEAr+;y1v$>>{R6UoC?(tz zg#F_{2~AUmx*5Ch5qM}Q^9aQH<6YsUzW;Kf7(gIvcP48F156MYN&|JJ&)ZYbff8Z7 zt-!+4|Erhy-g;M*W4J*@PYwI0)anS%F={Rux`xu=Ir+aB^qWEC49kLXUwj8S%VWKo zye_B8y0vBlJ$V0#$>Knqm4gEg7KP2#2IO;vI2sxr0MYdP{QQ;IQ~S=2?zgMD!omuO zZ4eVHD{ilM7fnq~LipY#0ests(*RB z7eK<+;?h!cQ_~-4=*Y;(nf&`DlumOoVeROsC?GJm-0JGAteo7tfr5f6m@}2LTymH> zWGI;6vI?(<0?<-+-uIyyZ?gM0U#TQP1fNBJUPq^?r)ztid>LPHQ#+PR#UP9Hi@n-z|01KP~Z%+%G= zr87AVQzT6>l5SGDsSF67giRyJiuy+F$NOw#469-AI5 zsNHRCN)kG!U}Aj<>2jeusv~fQ%gGAq3fXa$y*rU8)=dm~p*=^x*5$jZ4<;mr#uDax zZN11e(i*75S+4EHJFfG#ec)JiJs;=xVE{)`W=N$QtgFx%l~~>u%p0ag_F;i@nqz^- z%(szS(g6kg)k@0H(N-m|H#j9ET5_|pf|d6O)pC#Tb@Q5~^QCcP&rl`X@UX zaa1q4cBN0OykehyFCAnIXoi_HcQIGv42uH=OueO}b?;qbillIHI{uA2tr{0thZ8EJ z!xkv~-)tfHfo(7Vq>{L_Vv2?{x#I7_&5)T%BOP21#}VX_h2= z0ojxAbQs2IBJP{PKgyMMh$$aH(19nt_oya4K+8ak0P?YbZ5{dR!s*Wr-zy(7{q-=> zgoUm=*($!HmZVPAdE4sv(NNQLJjdB0Gnjcw0DKQXdQWpwJ8jf^2?za zi>XyiZ486;cZfx%pUjPc)5;3&^6tl@SkPDxpRETPmK7fDRNx9m5$*@=QVR;|jvc0x z<*I1Lw?6gDVbw!(z$5kPU-@aWTx-eTj4q-~^xOv!Xc~)Cxrf*r%$5w6^h>;u$Lom* zCf9*!9|YMFdD|3Qu%$QXpbmVRBgbaHC5GybgygxS89ul(8{O4FD;vA?zuR`9r;Vwc zOCZZGI4s_}GHNO_s6v)L*d%H!t(tqjvCLy$L~CV8xpPjO9~Sqvrsy35UU$SGrE12c>6Ai z>0|80tWwXtZfE>)ExebzxSjTf4r3@4=|x|feSUwI@HC;Ur~ zV=1T{G^?3AyDu6$L!{CY%HwILDM?Km-;f?YyETP#7H4Ay?!*eB!`bfjesI8F-5i5p zvz|bd*#A;Xc|mP2I|N=&*DS|VT3S+b;21-kMag}a>@G8YZbP#70xNfkC;PWcLj^)u zZP~lqwE45g>YO_|Izbi+OhlxFF`O0L#qVcRsv-#d_3+%I{e@2UOQ$dEU~?Ab;h*qA zyww+>+cM@_Ofp9d44m3yVbH|CwlL1T?F+o@6iAM1(M;X@pT(wr6q7r~&q zqxzZcxs%cWCT;AuHvxySyo-A7#y2mvHNr&N_y6aU_L-J*dpiGd+Z2JqW+*{Q>~a)i7R$JS$O#;=VqUJ^yBZ7DrdB${)RbY2kQW z-9y#2mr|uLRPuM$MycW4B&7;CiK~xXEie>uamTOJ5eL+f)SF3;_+wy8rjW>mM$fhC zf3N-ETCi(%yxC}56^Gr?vVgGzm=jM77!YHQ7ZK0)Hu(&#*!GmDVMJ9x4^k7$>V8J} z9713K3Mi=M$eOBGF|42~-0LchJPA>bvOL_kGiBi|-T<#%TYu{F-W(tjDVwa5sJ(m2 ze|Z4F5^-~B$G3wLEdZg;u-jRZhcOmPd7|~i2DD%E#wH69>uG5cM;$?GIK&Ql#Ipb_ z-pmJIgdMOm0cAZ?bMiD`pCCXKq1VUC{hUB4xB;G!} zEOd2ltL{yqd1^ufIm9t%t%V}GmwY~30iW6PpQ%l=Lguq|jhYBZ?B<=hJ(PF>);)bu z3QHp5Sdc^O310l!99Y~)cP5KaC*OG@4f-~Jfg^y5i9x! zla_$T{q+1qtIESG`60!?E5h^bxN%$2X_8r1qts*i(H(N| zGu;9|vA&w6W7lbptuAF_6NZSfaEOv^+E|sRFml$pw;FY9v z<}(x#h2gAEOXGYd^<02cIH0o@!IKYScOq1gB=CQ7Kd zQk3)Ix{8$8Qy4+E8aL#qg` zGlcTZ91=G%3G2g;;D&MN8D~ksxtSeq0)72qRh*Q|DUsT{;l(+gxJ&Ua_DPfkHA_gm#gaMBm zVEjD)ToWh0Y13^%X$+e9Qh%sGuR9!N0CNt#iPD5mXa2ZoTt_h{KEC@-HQ*4vdt;Jy zcX$GMnEKnJqP&b^&bYBuUrn+(^^THzq7!z&Fmsr=r*ci!a@+qsaWu?vd#nusSy#hQ zD+4TKPnLX0>gx08`G!NDJsRf%!k?7;>PvgQbPh*94?oTabr!Y8e5uh8>k&mhY zYl>8*n90xS)|Y&2kB%iW<%y*@ z_F5=^fC6H7WE;jj%{6lik=o=&`!1Z&R`(SJVbW;m4y?$YDYGc)=;DzQJ7<9*`A6e8a;9OUm>Cf2t!$`W@f{3kxbP z&Kuxv>I%fdyx`!zh9tmM`aGl%6!^P_Qc{8r17O9TFnPiF<9;`PL59WHs&X#A^- z_3%r#*fj0rUG8x18=dqN&G_f{gnuSUvwF(9?djn|&sXY;i;9Zg8`GVYDpczaffXyH zE;n3_d2IBlP)?7JkGCQ>NR=w&2teD|U`n0Ckp|WqZ4bbjqZ^k{YvB%}3m~ZlSXqT3 z)XK2LSXo|fzR~6g6k)<&Z$4KN#RXH!;%yBdp$g5R)YsPsmOe-^qEp>H_fxIO{efV$ z#S@AfKj6fcW?Lp;2LFa`s9yF%@y7aqBkwXMGB>xE5XwIz)xoj*z@x?{<}DJG15L{?i+@L?^f#TDX6B8qiV}Y`X8hkoz;1y#s z5cqLog+SrynDdXfCuawT^Yzwv*L7eSSso4KXQB_V)lQshVmgcUW|JjG{odN@Dlsv! zk+E^$sb8s>5MB)?7_!?D;nk+2R=4_Ca?&1NQ**QD#~Dq9X8R+sMGvqV$UBmW$f=p8 z6V6PxAFo=OL0lZEKmu&t`6zRW`$>Zn+5M(4SqhV<>V&aap_*votHp6WCgv#dw25KWSk{ z3!;J||J|m>I5@6gwWE~@d9F#j0u$gHqW(43 z!^l%YD)-E#9FDD=w<;{@?QTKQ+9by$$0sRk5%W~`t5}UWl_qBUCt@{dm*Q1s=dQLYphw@_;KoDl$W;XBb6y zSh|P*A|x?Ut#zzYi;2kgF{$5~h-NpQOI)5pi3@HNDkw~Q7Ghc^lf#|AP!a}_CzC*i z*AI4>iR+?JoKGH}V}NF-TjZXVJ+DFvlDv>d^2!3`Fw8panI>d^RRysr){Je-U_725 zgTqJ_Nkbf8rKs;(5F6SjT2H-}<%aI>aAPlc9?)Z) zeAn`nH=n+mfyv4iOs7Vawl2Iw44fVA-?1~Cb6Iy(fp3(Ixxk)b4vj}giAj0=%2 z1aUIqO&KsU#50OY_&VxJJNBf67#iQHA085U>L)t$+uLxav2ny1Bvby2oCv=7T$hG5 zplrNOERBI~YM?H?to|d6QBJ_dJF%6H#HaE4hv2$W>5(PBD30MwWqvyooGE(keNHlQ zEGZV!Bco4N#Ynds%TI1P?%a^xO=jM!j+22|(la7ycafWLItgcPl~<0u^wayao5uc8 ztnRXuENLH&hCGMO&rO=uI`THL$0ES=VxUEBz{GduNxOY!iix|YB=u6(-_E6CqGIaO z@Uqym*VNzkrE0XGqcYwNJ)Gc_CF`}FfPh^YOJeH9%7g>w7#za~#`9ZP($3+@Z(2By z?{~nO0qlpX%{G^%*V9GztC_B6W6zo1Qbv@*&ne@j%F+irJDf>(R~l^8jV59bW9R+( z!Tl+i$gTQXv#r-tdHx#*fEAQ`m#6o5;7!6*ejZr?#LIo9IiL5f3dcc*lY<$3(u@C_ z+Dze6v}7iZXk9tJr==J9wpr=zXE_P`uIZWZm6nH%xu&HGj|aDt87nt!>aNtt*V)se z@{b6Cq5G55Sl{Q;@Edn#CHtt`*ILmUp4R-V__!U@=QU@`61647lu&;eh_{E!q8`t5 zvp?D)*sKigO*7r~4DXwxXl3p?_7BCKwWTi9vGmm$8db%n78MC63dlVbat(L`9BF^uWN+Q9SL(7(Yv=3kn&BJLrWIIrA=Du zN{xD7U()`rYo@4cqI=HvW_TVAT>gAels>QEVM}qj7};O8aAJ>rKzE}z|IwlLCGfgu zU$5QW&bI6P+v9CuKG~V+F^Yr(0~83p1lq!X3vYp<LP9mcw3Lvr+enmb>Pl9#2jZ|adgxHq} zP{sQ6*1Vp^h6dFr&&}WEi(+0E7K~k_JE`IDlu2YKi#$ z!t{kxO+Rti+yvl-FIAK|k)rXiu?aUsH~dTZ1MQvEn7LI#*q$yO@Q3(hZVq1d<9D_t*FQc*1=N;8Nfyl(JxpW;-K?BP!$i0- z9+bbOnfd*Mg9mIesJio;*N~UIL2<>`$H0rZ=m~$c{rsW`CYFL43{8J(2;6-4Fe8p# z>mYV0VNpxPcGe0u@5A1IF!4^fi~Hb;?eDC;(;tv7d!jhb7a1sQ zF2hsK4KOA-#Ohq`w#q09$1V3ad=zq;_B`UcK*8NTIV*B2MY zrin4UxNdJDy+&Ekp+*_g1!rx>>>RR-k@H@4v=nap3mfMPNf#+O2{n3MMmKBdStKum z-0eDiuTk<7J-(+DB+aB8uf8mp( z7n!(-Xc#NcvgK6(kn(b|aQmdou{H@lA(Zrz`i@w=B>)67vApe#K= z0GuTME}}?W`%dj*-=>+>+?9)O`flthgiY&_h8v3{8$nN%&vSH1kr;e$@s8}vuItCgnG8LR z@a~bkAH&*=>90PvrRf)gPQ^4n*E>^3Ji0=FW_MRy-)3J}`r%=xlP8;?#ZK@qMb&@1 zYBfK5Qzo`Db{JtH6NA<)klFBj>+;Z8dn~7XKK~Kk}GS5R&^})Lez)Ms12G9b}=y+`b5Q^MfHj` zS&&TU-(s_%%Lml{t8!0k4w^JlFmtOI1!f4}HNSu6?ii44nwK`MFJI>}ijyGyntv3$ zFwH`sn}pHXt8v`pB*spKxnr|jIxXpQ9&i>5BgU(9RfqCUO!0E;2t|>eoZu_0UC<|+ z6)2i+?$kI|jR8*n{%U;$UGYRxAY8 z!VUJx0vbA6K_}1t5AR5MWq~g9-x3$!Phq z#GaZ){g4uy@@B9gFJi^?@h;#%`L-b;CiYHOP!1EZ{$YV{cru`%`0GSI)QZ3VVJl>Q zAW)#YC#?R5m~z0t1X{#FG|LeG17SfxM4@*qs`U?A@j`%y*d&9rDUg8yU#h&O{hxbdI+U)NNrtIKrDbJRXCBC7&6aB$fUqR(bxjKcNHW!B4H2F% zBr#mN1*AHeoc5Z)L=5DpOiHUH3}Vs*p_c-O$@bR3`NZ*qngD~UZ~JzZHqA1B)>Msc zo7*Kc_Erv-4OGuF*D&SUm}_E@`f1noAdxq12C2q29PfStCZ%3HI*T4#A%34FMEBl_ zs*d1O00#jj#J5ghYoiiBR;3x@I$Y|Cd~lE3MqDCAMMd>yD@zLt2}1Z2hgHcQV@u16 z%}#f?Okn9p_7n>jmn0i@bZ~hm@fF!>!Q04?t%CU;bL(W27 zU7Z%yfP*4dB%qFNsBwiU%MBXHZ6BvX0RT`x#pRmrFU)%k!VWM&<r_ zP)!sjn_maMD z{^;%fyDE-nk&8S81)txo{W_aG;<7sc!CkxmPwnHN{{Hb%4+IjHHu^^A>2f2X!)k*) zAUy%fF{brt(;bZjm{lN)*Qi>p%bW%FLN>*H+;ZOXOc@rjx!E1$#pPYod|Me|{{VJQ zrmmZ2nh#tg7~b34v&fY|p+76wr=URP7fOrxkTE0}tlMZ*;s!<_m2aSffnuyRH_x#2 zh>s6T+TPDQ!J0@yiCV4)NC8k^f4*V~UJjDAg$O?Pr9Z*QNS1_gJOh|>2QiNbbs+U@ zzdoM2Ur);|I9;xBZ=IhuoC$<14E_pix*lQOgU`60RW?tP5n>w(H<9|rt?(h6y}aK| z-5AFjp&-BV;jJ}W^LT%9_WxY{sL%ee(9r?0{kl!=o~SC$atlL;!D1I!NV#vU_JkIE z+kEN@j`~{3{y+JLN?+yT6f$Gh0}C}OjaT9#pjKy2>Mp&!-Rzf*HJF1@w;h$CCF4P& zz52P){pO7M4o+k@MAr?ZF&O-Kf|jo7?8G|YvIjC><%>ywS-RcN2+zO?fp*Ahh#-Cw z^#qo*$^PCYAHm%9^OB{3^c(c?jgp6Si_B}?tX;$2_ve$r)X;Bg!N%t{_4ek$e;Xl) zmLaPP+;ntsz!fFTF|gpRi6H^|Xk60LC&VR^lhQmF^p>@xEY8Rm2GSd%@VyI$Mb7^w z*S-LCE*74;zdYBS_7fvnuTq9Vgs2+)d?RDPA9ErG0#P+b-hjd_c;2WzT3z(`^qBZL z-mk^pW3=Dd13u@Zd5EAF)WyUR&+R#o7Ru7| zNr!8E-U8SCp5L&fQY~!Usxq(*ae;ftv3w4!Su?8hzf%u;KF7P?#Tlb?e%yvp*JKVb z21R(t@o_gJ9P1F`GW*?UaC@Tv{hKf9(PgL2p|aO9hWOW)S$p zIQ|EfQ+Yn@Pt*crGGmU@p%{PY66Wl4NBi2#-@Ad3DA$WKV(>YhDj`>+>`1zJ0Lr+? z$pT}P71dmPiz0)jX@mKg>iNKTy0DsU@ci@y801-$RX(?XtW)s4mY?s(!aT3T-tWSG z)=zVE8JNDBAy+3x{0@cmR0;Bvmn zb|zSHlYW->px=34U+_BE%N*(sM-Sa0jIm+$eadgq@W}|1ec=WiL$tIyG&v@JScEvf{D zDDQ$*1sau6rpOPl7zTmJ+TY39Z8fRj^xuE>L4)~`gpk>VhDUP4*9#e-{hW4FqD8eN zLIW;q{Lz&5U5}_BlX6Nsj|Qg-b2YcNw`bKkOB{Xs=vG-klMBm|D0Y zn22C_qCGNsI7rxUdi3~cRp~)d zF+TTI2w}9bkiNV^u~2ccpnQjBVD2k{axHw)rUkk*Wq(au8jc~|=|Yjx{O#~opnis+ zB+8-KNkfc4tM!xo;UF6w*J_qyu9Lb*5zzTX^Va>j^c7a1$Lu7BMODZs5Cc|Gk2Ovf z>8AQuu{2qYG@i;sj(b#O$_dH`KCm9}du>Hr-2^3cMZ{fnREWF}I|ywcVZ0+E@R)c| z4+FXFhaM8M4$_0(&&gmU_fc`*9$gxWgi)=qABd`?Nf*naREQ!lb$v1Zmb^tCk8))E zh;mUp04=D!IjXSEf&$pnLY3bn-24cr46Ivuzv0LKCCA2KRYGj+@AWW+X@r@wF(036 zOrVQ*Fng-BVsdJ*XfW^yh|pdfFb=&O$H@{7t6C1))p(JtsFu#{%yVP-*a%5SeyOSy z%OylzP+Ey89UARZkZp8&v_0%vxA|&H5wC-;T(0us1yWYjH0zwMBeA5aTjYAcw=iqe z2O3z3vG~4;j+)?OGs+@1EMWZ{IbIwgIio}zAz6V`Uw`1!^q3^+fQQpdR@cNM&|Vo) zMwg-taSQd_8E=PJ2i8UsAk(Jrg;~L*5`|eP!g_V_t1r*T`#CiwzkmJh$_f5>M z^V>l&-u5DpW_fGMUdct7T`^La(W&xmy>>ssf&Djt=a_bZYf23<*saa%H54h4M->_N zvQkOnV2ngHJo^`qgPU2R+9IJ&<1qZ-71W@K6zf5!+BnzNkOf2X0b&B_RWF)F@nq7C zBsE+K>7#63%>xou-w3q>dC?F`ruP<<9I{VOu2WUz@rI~+FV4LDfI4gpNm}{t=$Wa9 zb^l;h7`Q@-&D?iv$tUxqQAXp~3!3M@cD}PR3f1HRT_7h_QB>z# zDI0~IvmV^;2J152IWk43%k2FlOw&p8>i2o9vznJX6Qq~3H16omkpstDoFIAY)WH+5 zeDksu<(#OVLH!xK53l}^;w=EEI2Ghjs@&a%lb4t(+G%Zj8#3DMY^3fOPM()q&0|-B z0;w_`v82~;1nA>Yqa_92cd)QHpf^IE3D6k)U$sR=(O%S{;oLqm_*#hQs~;?!yJU!+ zUGm=7;YTlu03Ji{l5rNsM){VyqLL+#Gn3JbLg+t>ey-1Uf%H!@GhoRy&Y#OLv!o#v zzZn%6WW$m&fbQCQ{|#Oa8@{%%T4^aYoP*(h$AdqAdbTfOaHT$nmK<_jFF$4S2r??D zEA?TC88s^V&J?K#oj*g@y`!z({RpV)%+_KxP;;V05F4#}wjRL{YHV(_&XkhK#$-o=2#|d$9Y|1qa)Y)OSDXt<%G%=} zj&C)Po(qBjcs~Dtj+q38Fa=5=O2u%d0#K2+HtAYg7Bm&N9<4chGo(u5v|W#GIy$R` zv2k;7({sE|0BEF1jG-puCy1w_vfc`wrX4)m$Ymbf-MxzOX17^7gnvaj%{Rh^xi~#B zAk2h@Gw^FdZ|K+7Zee@xZ9+d)n5(#Zz4Iyet7$Umow#V0IN6w8w{A>D4UzQO>yw&v<;+iT0MJFKmjw7PdVc${*{;<{=d>J))#$uMHv+&B#9 zYK+G1zhV+Z@5k@LXX(rxZubkPGL@zWTAa`E!OR=gXG4RjJI;WP;Jx>7f@&+X6SS05 z>uOUH+F7-Y*R9Q$wO1QW{B(eEHqBEA*C(7111joUH`$x-G}(`y zVa=NywmX&a)(H34ZXW6CEQa=}`ToN(Z~Y&^Q;}KLRaRD2RugPj6wExQT+cfz-v@L* zPe#fWKgs!shJ(0CChYc@*UicU#H<8G9wB|{iE4WEyCl@>8;nXPByOI$xUsVXwMZC7 zD^iCNFRj#u%~24*IO|d|t))h8tiZ&_x8$wieVC~T-Ib33QLj>bvz)r&$70OML~jBX zx91}#I9|^@QxRFY5`K783sm2veWc&-lhTq@=wBC0o6Y?iTh`i&oLQWBT24MaH=G6I zYjapcY`9WI(SnM}Wi}8^?ew?A*YwCFfu2?T%gcF5b53l`98yF~4}6U%vin`3UA4z5 z{4HJOwQn0h9uy82&J>}Lv9SEg{q((H0h{^3B8!u!#|{GM78ey)aqv_IHW!xUFtrp+ z{;IJM0QPfpdEGzV!|r+hdg5AB^UY>$Dmr_ZVoELb)rKFy?Cf|sW-w=+=@uS=)oA{+ zCmxFD)FjN zGM%p|Xx%15kaFo`hTF}^WKcMA1G(dW-sj6>C>N+@5+wNc*KC}bwut$S4k;zyzFCL}%D~C=wih?NKTU z?pS`P8e_BQgZPiV+iS+lA?T+pbxtYBHyQll2XWH#dU%; zZ*HI8A)ZHgDpz7!`?N+$z~=QA?V#t)4$kBk$M$2}qv z8G+$OgFnZPMyd^ZAtY7hq*vi2zokqLhlzkH_r6pCAKMwRz94)oVlc78L49^e?0_$) z4_u+m=BOPqmfW>DcfJXr57J6FLde~fxLFX#0Qdc0f)CX@)NO@#8lq@ji&Z@?Ql=B?oWBbU`mXuI_0r)p<3 z*B{v>8II~}CPOqLQh-_g0&O0=YY|_LC3Pf4Tm_=R%Z+x|VSPtOM`Poo<>lpSAcO^` z8zkd>>jN?g6d`>V#CQYrUETjovB!#Ju-f8hN?C7qwAR+vwzj?inIgchNO`N{;aXxS zpo!u+eOy+Xa2Dij;{Y=7a;Gcat0(V!=TQy2i&X%M_xm1j-I7^?ZgjAw`3Xt0 zJ>!a1j8EWvfW1Cj2R!&41vabBau{4b-{=~)w~ka&UR~OSX8>m8%*@Q#-7hmVPf?wf zMlq+noJj9_8Vnm0G0IzjLR3gC=mK9KFeql#-}IM_8$UIA+F7FoJs ziQy?Kv`@GRPr!k)kjSKBH?JMeiZxl#A8#LI27T#4%olXF*2m0u-x-B4>C(Nv{|?nij1=a{*MGCV2~<2|D&)*dmp69 zgpqY2!^A|FWVS9_fAh3tgm5_Mzt`D~DHcV%c4f)^pr<{a^}6xpX8*2-kHO&X&7{)F z9T$1{a|>;*W7mFF9#n&#KT^+eL;>>F)OH&2}KKs`={9wrx9&ZQE*`#w5RQ zvAmw=2Kf~Mfuw9k3IP}QcQuOS2FijTU*(6v$p+dJ+E1mUSu1NNi$oD+6zO6h`}#lj z=;e?vDV!>CPwrZl=8mx)!HXwFi)F=}t4*FVqv9#^v@^6Nl?rHp>4+-%AMok1lF40L z&5ckZSKE8yUR136mXhNF_B#H!zV^7@p35|B@Fy|Fzfkg827f;+8ya`>a{JmPj8ny) zZ<}(Nbs1t|otxXpxNmVCkW29A0H=d2Ek_YcJgKaB;oo;Sws>XbFAP|aA zwoozJBiUxV5w-o`n89&qrz(u^w5y68JXdod?KhS|;utmou{$5LlHHIz_H| z7EPg-@iY3kVc}9Cwz8@dX`gAy%h%*qtpcB~HLx(sb#`s*{$i!28*#1(bbs_c5&jpJ zZ()~?1A*Zm7_T4soBf?0LlFQYBL)tr=Ku)p_2JCbyb#fCz26MHpMj*(*0Lc|1xMg zV4;dZKn)1$k;8=ARg+nl{z>oQ$P15qaMM0_KsCp>X+BEkRul$m)r?sKP-Ss{l*OpC9De zWWZidZu05rX=>{C(P)4#c@EwveP(7R9-EC3726FDJNq|4QL`XU;U5Yq*nQ1KmO+MB zvUSU~iMf&cv*&jGwAJ_JX0*EVIV9vE;qGVjU$Gf^9ym{PPTL`7DH)6ckhM0~NykZ_ zME7g@j=P!TS<05z_5yhfnR)nrB}iL!y5q^8R9Ik+(CD;lM{vKUIP*=5U47eCC-K~* z?is}nqmKXl)Y4kr=s0*9-Zh~Zl^Qu|k37s5i@i8$R9gRpr`TqU|m=_K(L^z5WsSXlzP3y9WMtyMWO#w&PjLbSJ za2s8)ei*j0bG0u>&mC`8Tj`Rr5~~t}BGg}b=Ks(D4HdF&fA%eLWgq5h=V#1Cx+;wK}FiKfX#7ZU3Jc6a;b21$iH*gWrJfe zzG-hn-Usdgl<%FcV55#ieysvEI*)c>qWEo6u9#xRrM1C6j2i#C{u*vnzc#@S(`)6i zCzN9@nWwzGX<$_SNTHpJ+m-j={Y2e^z1V1!gklR3--P3bid*9iq~WR1NA(-?bzlk4 zxP*>I3b`n>{|riVV;#DckU@Z?TfJ*>8Y#_hiW~JMa%wtIWaIOS#hdf1v(xdctjVx; zAr%B$7MH`Ziqbtd%J#0mAt0eMs%0|g>V{4PqdpaId6poopG_Kg0v>VLMq7>QDD1!hX^@U=otP_i2X)9BP*-I3XA|>gq2K4OONNyqXYD1>^x-K_& zY=Qjinvb2uFqK)&1X*m}euA5)y?c0GxV1EYZg>m0cGe%`@-$Z0*EP{v-ej1tO8jFC zD0Z3gNBVvCJ{t>O91ZaUWecvK_PuunUxWI8ok%|pC;K$As4h6XWUq8K2f}jPIIqoB z2r6ozfF;W2uy5<2BdB5Dh_L@^uYyST&I+aEO_7JE<=Gb=3yk^*IcEu*Mh{?IC1OHb zC=_~e&|y5$;i+RykvcR8EDaFkc<~qgy*5O&>ZN8a*M)Wr-zTP+`kf-98DlaQNlYGH zZm8F)Y0T*%?yk9opnbuTRU{y)BLa$ItbsJ%xULzz=QO~CN{)DwuDB%)*Wwl`{k^o* z%Icf`A^!pY5R!v<{Vd3hM?hBDgdVW-Ngakv|H6XTb6jfGKrbqW?L$EPBgmI770DJ$ z(>t}3bZ+f^ZtpROCoHxgwU)<+HkqLkp7}OtEy4XGL=I{0HS%|C>No`@qss)9o|C4& z8N%vGq#vuj0V`K}dW=i51Xd`HV9p-+!S)Hw%D|gK#Sth$tx4u5yBSJaT9gU_65B6L zu>17#6IRtl+fqd4=X94v_ke+wL9O?BUaehBs|-7_is2+(H7}K{h4*`eRSSGy1XsFh zY&TyOg4`tUd+gJK$7ATLwp6o2^KZ5)wqkm~Vyq%7Zd!7K> zvAe|=W|QTd-VmLp!ZI5vmhs$WJz*e(WpSqg>;O?Jj-%%)kX(IAD|d4bihed$zT%}n zF1VL-f1|Mz-`#>hr(^?k?*0BKw$rV-sPU|(v{o*FLn+_H z^U1sHOUKewo1w`>*)by9c@+T%`?80ccMkavd!w|d)6TW5tZ_sl{1^msq4Dm8HvH{d z;lE#OwZ{r89$s-xCxoH+@CP4h*u%&_75HbcuAR7NX8v@dEI#$%rB)TMa1xn^Ay9)-G!NoTFMEu2?9~dP@jV(p;Z+mAo&`OO;5GuA3c<94nG(yZCA$F-Axm?025D>|6z+DTvsA%2VOo&L=oFzq8HY^epmT^U-fTK%RJQvvk+< zogZ=+onJtv!22?%${2AZ3&7a_DsK}UzINI%AmL3Dr8{L)A$s%Wo$RY`8QML0`8=Qm5J*i>LgODx{YEAfv$xt}Io*8rR;@mkG7a?hH$)yB46v*a zafYRHMv$&PvRc(Y_a$v*$Fo@E;M3Ygej+vhA%3O^}S{^Q6n3yl(GAMHyj?t#y3Lsom0Q{GCdZ7U^X47q{J@sSVrlp^e3 zZ?DZ)tYW6L+7a^S6;JNH7h=XJzU4Z9R_yatBVe~g5r-C>y19ME_Q~?EKV-FGipbcC zxj98zzCv?t2oVE;n zURob;6atOMLQJ`(W;Z=XR%D^H-QMW*By1_RixN^ZJc}#2>?r$?4L31_s_W(K``xKZ z?+O-?+Hp3G3$_&8z({p=uN{(|FrKOJn~+R|n1;&(b{qjmL9yU0Gv ziPcZnT{WAND%p6k=+MC%?Y3+O#t&c5tx&F*?WShm^+U!ByFs)4S^+~Qu9MTkW}G(5 z+nzNwVb0#T)`JVg2}E1Opq-tT?=1(Um=ltsOj@+VcJYZMCUim}@V;pGW^iEjV^u99 z!!$u~AP8Q2H|o5EGQ{x1!t&mIEVX1K7#V8N5fU$VW$+T*&$}OUF&Tr! z*^)7^uh@k7CWJ7!-r^_9tL;g*FmF@VGnaS3z4g}t;j-EL$d~NHgm-qWq(i~-)#b|9 zx|TD}l#2F5 zCN~Gy%kW;I$8BFp-!ZxhgBK(gM%u#y!&jrN%IR9eS>=<0G0M^EJ^w>`RIXL4!ZN14 zpdmJ4lL=8zU!IIG&hWDgzJ06=&kx6uVj(ZhRUVlS5BgZTD)Keq=415g6DjjBH70t3 zp}(~?rfxqia^6V)jeJSyM-2Il?_9Mg=MfZ396ftOk~+9mMs3r$A}HLoD%ADbj`ta* zh|jTIv8nF#qf~26f55J@ni}0#ChYEmHI)1DZrlVp4;f^0dy znpX^?I2y3CF%WO+pmb<{F{IHSeA4c7B%8J}ZHl3JwaU>ZoWc@Hkqo{E3S; znW=Zr_V#(u;E0e)SlUDPQJQy|MK{^eU5_m9XklU6+#ea9R(aizKyE&VUOQPz`x3PK z3rZ?#HJ^8UkjK^W0loGlqj6FW%tqq~71MdN^&l0bRD@%nc^%rA=^ z_+Xg#_EagKe9X9xB^oxWgArCr@B-ZLDBm7xT20_bVX%STzPzG~%k1!;1i~JbD#^6>Qg+($DYu8*mjUq9#KXA}#mubvz=AKu4K zJ0;th&7;EX=#LJ+rvkJc`yQFoX`7F-`xQcOt@e%IF%pNn4df)fcy_FJR&Qrl#mDHb z97$*JAmH3*F6?Y>tgc|y?jL36296~ws+rTx0-KuUi|d@+f2|tKp>w0}PZ!ayIUFzG z8BS3VL-iz^Rt!HKp0)JP4~8_T??CWcbyiYa;jO$CV<&XtMa}2@JyAia>~!0O_txkCumhv zmacZ<11km8%%S}u2$7z6r7M4;z}YH^yVX!qvBQ zD;%OMt+jC?^^%7Hu>@+#oCLa)a8~7ioJAll2@3>QB#$M`fBlQJApDE86qOg|{=fK( zKLqbWBmUE#1IH|L{W4AVu~QmG%wWDbBRcJ0N19PE3Ox#9Sy>-|5-cPnq;MP7!>M3C0QYn~UzrD@{8LkY>VZv7 zO^;XGy-Z9@dF%ft^wAR)TA)}8L{7vA-HmP!#@R#6#>=ZaI5|0~Uh1}VVU7TrV%#tp zDM?RMv~IH<=zO$jzMylrGI>6-IwBaHmottno#Th(%L(J##lr&&U?Z2>A;VNTyHFO&nK{-W6FW6<+rF^+ey&CN|Mw_IFp%U!og z;gZ!RYKx|xtA!v^h1rV;nT2cMmxU|V%bKs3gP#(VQcW9Z{24T?(A~@&)i|8Y-naa| zZe3$!II?s&a&#z3r_n>C73LvSh5^P#AzxtUNbK$} zLzh!pW`ZqRq4v7RMZt;A= z)7DW=DVli9D{M+gu^eu*ROvZxy*WI9Drr-OU($-`%RvmGCp&wd5>;zd^;Lr+|9DYI*WF1VLiTnGWR@cI3gp}yZ)fE zTHZ6s|f9hn3m#bp~Kf2Zt(EP!V?{?DZTVm zhb!1*s38)meef>9@N+#S6w3S7NyNF;<%Xv?U4Grh$_#684BaT=7ck+v=LZs?Ho5BI zp0pku&FHvIq`6EvF={8s8D||VM9>afevdX-!6A%){>+X52XaVu`NQ|Gm@WN<%5&0@ z7)}k{aTA>Rqh6RZ`^0>d4CRP3c*YZHF05j@>t>s%R-LVz z^i_5p_^~Aro}{gyW{rh18x0Pp7rYxN%0K zDWqrrDB)Pz&{6v5y0Sf&3uOr%=BKWyc&d3<>)3#d3%ekkkMtpnu0L?<%1K?t-_}nj zINuJ(Z&_8`KytsBF~@hnPubeF$V(Vol_(-X)YTkJ&(WR>WQ*~!pvM$b$D4Lk-h2g@ zl*i=BS&NMa8FgxwK~V!t5%Ld22oeeWVBTcU=rqK@rvF&(m^E%Xg~^_KX?gukxbc zl4tggeZRg8+`gu}Rz$odZ^Ab&cs#nOWnxEmx>}exvGTB|KF>V796qqRIo;do(i|~Z z1deQ6u%f?-`!-Y#6kD9oBg#B+pTIpfj8Sk%sa>qd-*0Z>riC4bLbCfb->I zvIcN|rg;*kSB8Fll^d-TPKz%VQ|-=PWvoVP^`#F}&&#pLcURJ)%$~JBDW8M8Dxr_& z=jWRwnM^y`jG8X$188BHn%Cp^IJmI>jGUQfi%A)e&-R8vu`a%Etw%HmjnC_3ux2!S zvMRs79PPO=s}V2*`X_idJA8<8j?T*Nc2cyIXY1o12Nt@YMkk%^3_%rkvpbueY>bTY zGKUrS@$a?J%gKZci=FOv9aj61vyPEvWINM~^%M{6dD`;efR zJ)9_JbxtoWVDa%H^Z$Cbm9c}KWQ+TJW^VtM^L>~Y_^syo+IJTg5f-~VHjpImnfbW} zy<33LJ`n=qOW^FI%RASv5>~r>Cd}N{*Hpt;xF&nLE0%bC%Xn>~50$o8Mg~Uy&@3<< zOm{afw8q>S?fYvdr?Yu-?bF}!7ZlcwBUXr`OyrR`O=8=Rtcn=7*mNQy>~0}1Jt9wn!LPc9)Jl$L_r(5zFrMAJc4XCc7@gXDQu3 zc<||PP+s~}4~PsK4M>`dyRGzrUgF6GzrUDz+f%K#SA`Q_N|Uq|(z;pcNzfN1Mhu?6 zDK-a8yBsSToo&d>Ypn=gW@YIEu%O#VxdKHEE(x-}h8>*vE!5)gt}bGnCom*3LOz=> zWto{MPH*wI3TszIRJN8;i_@+m`gS6p9MrHL_x1Uu)2Yl=O>BI3AzqMS{ktwl0Om3& zihr2L27~faT=(qOAKSWb_x1W0E*f@PS$jpb_0?zZD=9q@zB3)AP85j1bEmII_vQ8p z`AY@vx>kt{C zJ`1N8#5%c0@zU)w82bx1Uy#@Kqx}75aMvehq!ekFyjU1sCvi|olMH<17yocD9*o_G zkk_qdml2Wy{)rpSYql99<#-}w6@Q%|GsyEd>Eqtuf^TBcbmfElz69qk zpQH>M?|6fhx?*KZPUIrbPUEQRJBoR=q3rzf)|xNZ&qsrYZi?k-VGfv0=d$wT)uU4j zcJmUG1y;WzzwjXq!Nl*yA9nu4!77E|kt;aYCCDNMEu~95OQ8FQ1C;_+gYAPHr)ZtW zP+dt&*pcJ#fLj(Kk>StRV2qZq^>sDLr=C4Emu4LEku}t+Go8J(z;C{blHEmG=+G*8 zkGC@35j|C_Kh5&ncIw*c<_i&m`@FK-e7s*Q$7spuDzvkW6|^!ovsy|}$?B0y(7{9` zYf@F?^UH4Sj0T_M_Bp{ONGThTJA_&5Bv4^^Y;Yfc$JQzV!LXo?bp2Q2moP#AGuE@y`i)8v^b zZc*0d57bQ-g3eDujh8b0W4~-wt(E%hzSfX|hx-EQWBtRxgA3nSrm}N<`tI0$R8T>v zvMQWurWMLh2^?PKwcBR*5%MRF}qrEzIgf{p8Avdsj5ioMDq0()}y zs^ayO%{0H3#3a=&W#Y9`cq%GQQx18XEgo1uTvNn=I~R#sc*bDxkV7yCo6OBj9R%Nr zT#1f=hPvTQ%tRYS(&dhIE(MShDG%n4t(SxypMkd-qV|eUEc{BWoE(y$Kmtyc@$VO^ zj1XqI|A>OH0OhYbKo%A4KPsOiko24^{CWx;MgXuJzzy`oaEeR$_K)+I@=x)F4nYI! z-x;RjAAPYrC%#Ykzs#vNP;xXM`jO>RTL;Wt0M-ctfHSEHP= z-(kI4WL_7HLEG8fwlswKr{3D;MQ|X!`gbPmIvCvY_o<&lqp+SD_Iz-K7-vRsI2u(F z^5Vy;+Z0cE%r*umfJrxV#y?V`L9*qSY~_=xw*8t5#;*}t0b0pgg54mhu&dv?I4sWh(fY7!SqLQ;zqyObJVT<*b5wq$0%RRtH#GYDT=V4*lPxEh#MDwbXFG}C| znG5cb1gS{c$i~cElS#N;|9k0Y@tfe+GtGJvgfO(Qpj9jza~sTs_38^rLqpP}S@jd= zrlDeBI8X}#aS&11%Z^tYC(!4uSrrK@?NYge{({J5}L^Jc{$#E&fIL-jpq7Y0Pv(pB#zKwkP#W{CFf&dNHV16#~L!+k%e z6a(1XWV&vI_08hX#h;VerT0><5_w&9^F0Of@xT7I4MBj_Cx!fN1)TRC&vVtAq5$Ya zetv$A+sE@^EiA#?09%KE=m0Hjw@IWh5srd<`#-}SRe&&8ECTYp%lBb8_nYclpNM4b z9K;OZXAg)ac2N5qx7B9bO|VzaXkv;PEc%^+d^C4KzpaS(BG&5=4RVvM?}(BP9op8 zYs>0(7l5JJkjU)&=<54x^~3gKytDhqnj$39gCb&D^hd}0!zwdWa2_qZRP&fPhAP8e zjqE8gzZNi%z9AdGy)1Uh!pw;e3KGn$9raDVJ_ih19zgdP~(K)?;VqWfkA;Nkxx zBuem~@(Y+ZfZ>wm(3(zW6(U2z`yf>?iH5t(D%C;zCw`S*>z8PN)P;vRU_Vs1wzl5S z5!tm%QXq*o{qwowy;nF00>Td>AuOPb)yYrr@izIHK}uBHCGY`QPfzO_fw2g9*s;b! zGPdsLIE5mvT(53^U{?BW`9p00&hcKRPMEoUM8bd7zmmrF1vGO%EE#?yozHb0g4LnK zV1R7a`5L@6N1BE#EQ72q-EOxHmM14_1SerUB;bhiWeprXKs;9xn#d%_m@LOGL%xm) z@md0RM86Lg2S*?JD-Ts<<`Lt`^UG=VCqS7qAP@#v%%r3T(=H)sk*4Z`u%!{_DgOF< zh2J7`jbOPQ58$WRxB2Tn_d9{J?%M$yPLvt?gFM&164$ahmWhy`hd@+{B9_~58^Ed^ zGrY?8VpQaX;TL;0GJ*&;4kAW4?`af!=b-hY+}%9P_LZH#qX|I)>DF^mU}?eT!)7{y zxS3gx3|402;E;$>g6omN9Y7t5|DTlS5Fo@memxxUvC~kOLyUjh9FBi0$NNlH7mRAJ z_t~%e2GJu~6EN$Dj;2onchjx-4b(qB*e$l;?W}$hnK%IgLyxqTfB51%M{8hy_>>Ys z@bApX5^Qt3CKMKQ%+9CF&yP#{+F?N#)Za@goE?ha1tX{Q$jFH^mxf(X<#G4xCwe&B z%;03YOv3vUc>xA*;n&#&Y00~5OWjvo&fxJXawDho5FR5+1{qQ2(tsiqPk~K_ECX|b zC5-=1xIW{s8YHiZ>zho4oaQjzbrDR<<*>8K4 zp{1+zPnSmDnSWDE8KFO$^1UwS3jM-9G(+sBzA}J>An9{kKo_T<@{;xb7GLdGXbwLH zU&{=oMv!$ejAm?rv|K9wA5A=x-#!<0Oc3#E=7#6@4as z3!lxq-OhGLcJ#CMuM$V1rVbAe7t^|_sOf}wIqxdb!aL}z{^UdkOMM&Ds?A(|oCk|V zqGq9@yP`@zRoze?8wdC+M=qxh6RF)BE6Y!_a?q_C*=?Z#%5*9D&KT4>kS zb-C_4tYR=&EJ$Mx9X5y|v6mSZI_yC%M-9RNF(E>_KFAJPC^vf@oQyD7bGtmhnEG~j zo=XNNu@^WS=1f?tJT7i zThAnnfp=!ms9oF%VRAVjibi5WdfYEywdg^C$npW8X34Y2Lv)g&U^GLaE7K%)fggFU zeqeahB;p)B@9f9^%%ohn(4?_gxCl}?(`Ga`JK$j7V+nVW^T@w}O55QE*+WV=6#Q^@V0oEWGps0F%L7et^%*LU||g?-ZZjuP}Bs(War0e=YZN= zz=7Vk0NgwU@j$^T*f}uJ%z7voy{{Gm5gDwU6uDkjgP0XL%ySSlHBg=mAnfOYU^G8K zJg4a@gr-pP`L_r`Jwn+v{m*{D@8`G-YAQ#a)Sy80{4n}8ddAO>tL)#W7k!WqGjZj2 z{*4GhOw>rs`S(vUp)b>P34Vc~xm1y$(7xU9MtzhcfPXs#XoX&bP~i~-G+UaVA5sPR zw&<@JL2%WmF2x``K9i+ix-34=PeFe;{h^;apFnq;&aHmov#)M{5uCus=qjFNJv`Os z7&<~fP4H`v#$?CKG;-89n9+kfae(bBj)$OL3Uxk$YZzFLNKmgqyv=Yvq*mk%s~s(c zN~Okuap+$iU|+30y#SY$MBld>3|Hcv*^L7k z^Fz2Y6}Y@`I0zT1YPpLhcU0BK!Yt-55WqC`o`9#!kB7&*#xVRsCzYcU)QOznib|ZU zgs7TfY|~~qukC1aS^S^9JG*}&^rN@vb~5}Y+zd$WU(e)v0z88GX3s^c3a%H2>?4{Y z9iyOTQt}{khGVsF<0rF@7JZbs9Vv7|Bjj5@ziKPfps1^XCkZq!V$fUApb&!zcR7RE za3+>dyG7JWNBDp7o*eG7m^-`YqzTzq4*@6#?b$=TBtMY+S!ma$DE#l6AOq8dv_lPT zL>3QoYc5!ilNfW1IA=wrDbICW+vO1Gyud8gnrTDeZel6J!P){^E7H@v1rn3Az||?_ ziIP^{h9`GUWKtW_5#dSX)xj64>{dHmx;lA?Dk)+AXL;DSCNR9fOZ`v-6 zg*HR|7GWx;v5Wh!cvY?LaMHSo2V~0LyX-?-0zxdV$p5PAPX-hRLnHfxk<^F=UT&}so zN0sVB5QDeWEYinyp_AU!!{QR%Ny3b0-~i7eii1}BvW~v%M+x=}wgKRd&)S!la$mdDTyh8cx zGJmuSul%ZNq~C6%F!D&F)R3_>B`RTavgi>zLO zr~d6+Lx<~Y!ZiP#-Kszq8o)UFVnDoyB*01PmQczEHmSZ-=(mUT8URK~To{v#J90J{ zU^-8O+Mw1*V8JDi`mL0@QmD%BNX#V`OG=PD8rHC#TQRzw-rBRaqabUyB?sN?Th->` zUo1`CpUQzoywhsvp#~6~TBtPLJW(1fXxCU@u|mT4t?3g*fmaeh&XFG$TnBH7gd|BX zV;f++ey{Y@U3uAA?!ILjUhX}IGEuD0%>QYfXkEEK4ryqd$gF*n|5I$6w7m6iyUS_Q zgKxSqjffhlzr3Tn;}Vun`|dp47cBB=HT+1ID4kRMig>l8pK5AL{?=nYTfng6C;PW8F5oliA(bp9%iPy?fIBurTB*^kp^T?k{UV~ z`4XdCn)?VE&qmqW1Ydethz# zr@}nkW^HqCQoYJU_@ zE2Q;&6sj4Ujxq=mfnrR=uivi+HxvrU`5(~WX}b`AeZc6LjJ!#Bef}Os4DTr`X&9Q9 zU^{5ze}e&>G^R%qGNQprLc^f{`e9>|P&R*qg&1^%V^NARHno*S$~fjLK7xhy4O(wV z2S#6`lpptn*d6VfV%C09oKl#yAVUKlTKjkM#&UZ$!kd@r#26+`NL~lg@rfeSoEjXS zz#q(ix1<7-Sr=^(CA-T>GruqeHqWqQ;z?1Jp6;%<=3bg_RN}4lcaLuKySeV#aM@Bo z5{T7>i$ALy;LmX5;swg_#Ab*aD=8fxt8==zKb=gxAO_j&EVBzTGo_~H;@mV7O?w0H zRv`gqd3WrWlA}$7-Y(yxY-h6Imhl~JA^}NTGl)7$!=o8GOe$bPrMu+^1PRqubD{S=~+$nMCMp^3&QBZ$9i7#0&F#gsE7^W?R!li#{)N0sU*z z-1P>_Cxqz{mGWB0Jl3P6eHCLv{}VG!85%{M7R=Ixu&FR@prTvC%f@8LVw)zz<7^9l zk|Erfj3GVN1QSzsGPY0{&&g!w_^xu; z_afD3leJ|e*=F66W?mY60o%WkZtaNfDdF#{4tc`L4sAsJ517f1!zjODT&}cI4q?4a zWcB)b$pwi|1*R|%6!l+#o6n*?F!+JOH!Hx&Ie6XIhzD2_Pk#e`wwz~xRwz&imI17N zYF=Y1D8YpF2mnW4onM)CWH0zyt#S3d@)yN)d$<@beiegF@wuk@Tm-HtxN3BlrjJIAIm7Qk>;9AYM2EsjKgBBi zL9v9$P?%m!EDRMDweHse>cjOps}Ke0i@V6X{RCgtZTFcAF(<-v3a~8F8k1nWG6Iy! zOV*+f8AFl+yrS(qtJQYILRRSkMjXQGbklX#5M%gQ9$ciiUmbZ9DZ(q~Et}*x!r+)> zHLOD9c9rB=9O@LGHN4%0kwNB`g=(0yXdyLq_tM{(evW?XI!rf=DUJ1^wF`9d$v@>?U7Z(vKR=1wa^ps16AFBIA3JCaRM zVVpyU{qnM=Ctza#BEbB;FI|L$IRo=wqlI;)Vc0lKamcn|)bS$!P^BJ#JzfHbVq{JL+x3u#!n|Ac> z+y^2T!~FKED*6RXB~7-uGAc0EEW<$D*G8AqlX96tMljUuV-1paqxKreDbJSiilV1j zb(I4`VGJ#r3C+x5cgVCAU`B5S&Qcr>TnGC6jO79}WIao0{(UhSXh%tj**OdRc1VpG zj|N3kIBu3ookv6x>nzOX#9`2hiJ`@i04=JteI_Y)nmX0(g*{kL_vfgaTCr?Gxh5tPxj%#gf@2WyYecA|}1?y=p zsMgY-MZ`bQ@Fz7jnxB75t*d(7@R#$oK2+;LLK3zgZY~UeG z|GX@BOORI)-m-_OSe73?vDiAd849BZU(vwF!$)yt-FO)r=A_<`b>VtHS5&>P=E_lR z3{%EIQMUxwo{vlnf+@x$q%EE4iA0E)R$ZRdT_Rrj=O#}AjN|PI+%n~FQuZd zoe7PTmC$eV9Ho5i2(2t08lBL;5%9Bn2MO!L(?Lw4_T3;{-BWU(-FL-W!lKp3s1n+7 zU%Mcr#5AlK3+n&0pt%|Kzet<@zrM@~{?N@bdgBvRpz5LMlME73 zJPa4Qf&j->4qsQRKVr02wEi}N?amR@IL_m?E#%iaY6te&c2a5SZoKsO5QD*I=EjxnYT z1N2Q{y=Um(cJxG2RAK-5m{S20wi*PJ3b5Y>))HP|`X3#PlOzHAw-~?z^S4U3bRse+ zaGRtU{%$#_hHUFf^CxXy3Tj1E3Y%Wp-X95TI~Txy=@0V3b<2M2_wS&4&Ua9DJqJLiXXo;T0|v389B5Dw7xe|>#z=NoW~Bf${?S54yYhHElU zi;oAQqgm30iaMAViRS~xw3)l?^7l_5^%b;5J)!*mDBs++A#INu$t0i!`0ZigJ0HiK zxoz0jnPEMu9fwFr>>@zE6A-`x-wYhSNP)FYk3jSQ_1{;EHy>jIl?E(^*#2PA_J*>| zn5GWQMb-KrU#f}~j2`R}`N5n0QIrAqN%?*iNo{Vo494&DKoyM2<`DbFPbKL6Xa)ki zfHJ~%oso!$h=#^8ptg9B1doU~Lq1YSKt6SpmX_xI`ml|5yW@}I#*p|57&~0MWr+3_ zDimr9>ybmF8snqRsK7VP%pCe~6he1CW1|J?Pyr9kIM!Hi9I`TMl#<# zp&K2BW#VlfwY%dBZf?i$8jrIZ`bKDb8C4gW#gc87d%(mn7AM#4 zU>rkwK>jM-l%0GwvE}JTLSa^~W4{RI-H*TA#iZ?uguE*2BmFi&c@lfv|0H_o|0I4mth zQkm#T9^U|)SGactMOm{qt%bb|30(*;v@4C|_b)5O;wo}6r$ybW9TZC_TR{M3V(!pY;cgYP}@d^PB?^LbOB3^L`#1^xfD(Ye!f-ZWHJpeX`&44W zS-?WaZL*toaI{d*CajyO-}Oj$-U1$OvwC=lI{=Tcofu9&$Tvj zXiiX~%nHW%ex{bc7le?u0=Z%8!CCWn)AKV+H-TOTd6)q8RX`ZIIN^Zkz zU_3i;hy1Y26Ivx;==cLCTF6%2tZvp)PhmZLTKTda2(PRB~{@1 z8zb9v*glTlEI$_h@fIA1^ci&Q$fP&!d}HC}0@6r~6fg5kL{Eqv6wFR3 z!{+;Qe7Io})V%wv*IrMnpOp+OG`cH{7%I#PC9QxjPihs}cjDZt<7wecbiobbAQYhjHM_)5QDpB~faT*!@=jZ;ee3VF3 zwq87Cr@yIV{>n6x`Zy-t)A>qH%20*$Gg;HsUWFEW;4U4jCC)-hHnmg(&}`$ilUTV8 zZ#d3ba2CwQy|eaALr5+&-4s)Rm#L#`&JTd6QwNKo6=XMO#qKBwDK`r;>h;|B0(G++ znDb*`*;{=k8I8~`2`Wdzu4R}YQmD=bq0Y50FD=+cOfNMryk%0od(M6Vtt(OE?KM4W zBsz^}s~`MGqOQWUV5`k7`RroD_WkC0$Jcv~QI;NjKrsAy!&j@we6>bo8vV&bL=#YN zC9^&^=yB&yt@!G*KcjHIl00CRtvY|Q>V~ddr@)bLufO|Ewz^6exz9Nl<;AWtBG6QD3F@dmC&vjJ*Mh< zztLdTe@x6b3PpCsL7ey2)B7rX=`Y$C4olz=243Wi3avEpm>9JT2d(eDCmnK<3%9A* zZzq{kuE`LoDbfn`28Mxw!awbTvxpUN)@=>x$uumElp8w=kVcsQjvs`t9!LfV#~M5g zlPm}aN`Fh7*5IDS}CRo zE-%PFfvDgoWn21D-G9Wjj~eWx%p5c=wk*eEZWrjJ*#`c?6)@r8R!FbQ#>vzL45uo? zAg(oRI(lr8r%j|POK|64p0MN01+M(!5B~hS^+`dW3)EkY3`6N(MI!El^E_q;g&Qe5 zUsWJnix8n3J|Z8~cc(#+Q)V<8mEvWkA)D859SaXX{gwzYD@#WADHQt9^;K@Mp1ZAj)-!aCxmXM|LpfalEyh1|-f}3@V;^|5ME3tbsorXX4 zZ1QD&Y2Bwm#k9ruN6@E^+KA!Blo89QdEs336(g=T_u=ZG7$bL1=zx^98PkygfV}d6*{?WFe7L>r>Zoeua|Ae zMv2pNy4(0}{#35oT+6(C^>i(Nb!mCPWaBj5usNn1abYtQ>abq1{`W%I#^hqH63uTQ z-7gkGR(#oA&85YtZ*)<(2;CoyC@$A-@3EYl@7{>b`npTV%_S^cxClG8@D#;gA08WI!ok-^6Pzi~oW*p+My;?Mx2KOv1O3H=C%kV9aF8G&4 z4MzQRs7X)w1kZ93bknl3ia+?mx<-E>tU3HH6H{QOsvC(2G&m}VKM%d^YJzcX#=se! z+8F0tC*N^2B)@4a40nj2tTFxRNA6~nv7P5A$#_6XWyXX1cn@3=jH4Y2#{-DUB@raT z`ZHPNdRu+I(H{1d z_2UR*pM7pmN9=uj8va$%^o{V}HZmxHV+RiDBb8>WbHVPCM77{EcTcD&Az^Q6`C2rV zdW9vq9(HbMM!d@uhgmfl0gK6wzmie^1X;$E-a(S*npBF(XLK!xrR|03UTD0sn4+4+ zaQAqBlD4x)pse2m-ds)D-&t5{fW)aRW|ciI2S>ur0WpeDE^VvhZ{WycQ` z)UV;wu0UZK<~IbiF+JM@hk5>Ob-x3p<|U=j7SP1~-`bf!Ip5;_hoR~_cMhM$K9o=CFgDk1D+^cJxD>j>-cp`X!<`vFtmjJ0T?#sl0+zf z|Nb?%w7h+NXJuu5`WiblmBY*Z{kzC&M?)WYIS`xP;dnGzS64SWDjDW1B{kOF-8~SA zjqWB9>{+d(uIWgHjjG-U0jJnZOk!6H#1-m#T@OU#viI@^?Ro*$<$$QJkU@%1-QUK= z1?%Dg$U?~9z`@U71#EiClp{*%)2U6!z-WLckE`q^GuY95%JE|4*p(Q~D`pSY+_L&- z;N_>ij&Pr6m+w&rGG7hC+(1+6%H>M07Q=PbAUStQ@#J={miiYg*{1H>P$a?^K%bQ( zS-kl&p_R&@SG%RswU0&D#}t{0b&G(E+~*#@!kqL&6vbbNvIb(O5p#|(21`ZxHPB6v z#Bh|p0|8~BP8!h0IZEBOupAjUC2C7H^Xgb5*ltBQ6^s-bIrSOXRKqRAaP|S$V02LB4uI@@;A&w{+g|J znmWCeO+wM)%QpR%y6CO;zVK_3Yh|O|A^{=gSVVz}txNTtBny>j)8S<ZgI&6pNJ)^m)7JtQd*>G{jA0kwX^1qNN?TQAtpnGfI6YP`kE6?7o2va1RQB%*CW? zazf7Tp{>2ANsj&_y@3`GRUNc`o@^+6fQ8}z7KCeHjI}heO-4UwI8N zK13U^BrqSrKbL=;?(0rSR-d0F97yp>9Cljq)(;fzBGH-Kp+xQw%%V?=ko$c938>4F&DZIOLGrW@n9ldLao4aOg zy{mw4JLb@DAC1K!2?c*s5UtyqY!tpPbZ)FR1g0-rPGR&Is&kPo>h{4s;Ka*sXI8gA zQEqwdP3OeOQw8TMX%MzI&uZT2r3m{}YQ$=hmj?hEiVORYH>#pyf)V?cU}8!{xHG%K7Y`mt2|S)%JK}2mYd-su{tV3 z&WhTG7JmD;luU_5c=syhcEAv#&S21K%HYfAiI!g1yt_9A7I#g_ul&Xr!=-yCuG@Kk zZ*Sp1C8he;N2kJs@M>)*zkkP^tvMcO%2^t{ zFXU`eK3qhJkx)$^p|dx9cYZ_~@86xm=L8WXB)~m#xA~mJza->F0*wgi0}kls{N^e@ zBM_H+6#w34K}~~JcE>HwpPnw$T}^vuGnBTU7I-VQZ>Me4ZVI&JrKs;d979q$Y|--MNsy9X;h^O7n(=}z>7MEJE?3q!sm%`RW($;#=r6ba z?41?K_I*b>zX%HvUcfxyX0ugh#Y{Z!&7UrAG;JOM|FzfFXyx-U5|~=;94g!sO*g^+ zIl&E@d$)QkM^gvq%11*JZ}<1<*wM4m`b&0}WD)aGmD9!f@?m0sNbBmaAvw0C1yz-# z>LbKM9Arm&`L0k*nVAFMjKwLb%e*odU`ni zlu+lH!T)@^8E*`^qQN)$#dPrW=jn&E?3k&eNjHN7Oo&w}tbreHWEqvIno?m)ub$S) zBfOX5Odwk9jsZ`VA=rarMJ_wC$AIEf*_d=iEXC%yR2W+o4OlF>q7;RRr||=C>I1UY zLPP#c?QuFsK}~s8th98|?3Z;mdKyUz8p_$95*WW}#$KU9AFQ?(H(XhgC%mpkj)r8j z*id#F5#q7)E^!c0F631Zb@Pi))LL!d9{P-qrA^tehQJdX;!)sT`vo$XOuI|O#<@vp z!kmqaXyeat@g~cusdXG8+fz}InEQ?}@G6L>%WXI$;mmO8LbrIolOs!yTsNeE_ZDJu zO9OVXx>h69z2aCq0cB}ieA+B`&ImO{go^X&a&r2X7b{ct ze2PLfYO@_2!MfeK;!!w%mL!b*tqB{24L-=B9x`DMK5cf7ovg^TL$fI0~)D@$Zl>>LXU zH|>STdJSRuId=1Tv_XTZo96Sc_vA2Jybc~E6N+dA{}=ww|)DMS3i)ZJ<-QzrErIWZF&3gZ>Ak>(&KmjG};0Ytmy zr0v^nEc>0B1w^Z<^C-OCPUuzvc!nwX^Ek4Ely-O*&O_rYo(^H?$zo_Dl*e|oGT;U_ z{@Cn)zOyc>biH4fG?$0}fN|P-Kx8$p{oRMosVtq%cFufR_0F_py>hrbKCb*ZFxOZa ztG)e2+#>p&f2J3gj`enUKT-~)RNgw?tUd!1g#&^W4DIpdA|fyLb>*6=d8!79NWTCv z%Y;0qk6cq43xa&VH^2^VQa(yI=z=}>$Bz9jPdqL;sbUtXQf1+(`l6{b zt@tz(VLHUV4KJK;kAKsZg%?V{rkEL+{tANr%8-QLdnQd7l$wo8bKVW(vce)_HPD!< zrIE$ZB1ah=aK;sQnj2-3+LcxAt)|l;2@J1b_P?!9YrY-5{Y~}H{e^Rj)zDq#K4-M2 zouWlkS5D>1IUlpTKFO2%^bm6JZaJ2y#N{X%8f}yh1-LX>O84FCO zBE>YR|AZ)`Nv9zm#w}F92bPLAiSHTtbfVSDKd?Ujube%XCx6YKK#` za<12cI(h`3UfpNTM4SSeM4Ey0Q93HHXSgQsc(@r5Uou5S4N}P7D<3R;R4OXQXWU4R zgedmys90(THsl2t>biVpX$4ZHwp7@pwH+)?E3o2skc(qk(}KjA`odKwc@)r4fsfwo zu_K@~lfs%dr-TZ8z215b8L?zmJ(9Mk#{kP>036xq4VWBSn zjr7{Z{esp!y@jw)|L0@99Yh4H6949(R|KGFHkbFX8Y2HqL;vY#0^H0gfr?C|+Y>0z zI+iGnQU7h}3j%fB|KHjF(}&TGcBhe6YVNxi-!i?`cZ9z06VR>(@QvJU7rKHTI!i~h zMoSyP+~2ZWv8deXU%_aoAc`g|AHZ6)R}Sg|(6a-O-`pL=3i;9W> zQ{TC{x#@2?M*xBcXq}iIF~8MvU}9opLxX`spdqAeI9j3g{Sps;W5G2&8>o#VV$Xvesf|r^kU>n~jaFV4O4X2yGe; zxN=Vu1vY!nhtcP;q&z)e0f!h5AWhDR3o+Rq#*jM+TL?i$jslpbC$=j;dMRtgJdhVHNcAIexuE`M6oO-B?XA1ItGHymcg<=|7ExJ1AT!W z{VO2B3N`5waOy?jP6|n2!s%wj@uMph#Sn!lt&fRzExCSu4@JW7jk7zRB_HY$XC@0V z7!Gqd{2FlI77Lpc3n|J8n`KJEfJN3vFOfi0rytRaHVyc-9uL)LUbWU zRGchw?KET<>;i}=EMX$3Ouz_PyUk^y49WeUxS#Y7n!18LpH?la1^r}m`4GeXMYvi6@A~@s^t`Siovi1IWro8{CR2l` zVxyx4%XS2XF93QALB{v8<1r*8WIOQlDwMy!^lB%Rut0tO56};}zP2xAD-VeiydX9P zWC=l_)mv*w440@eW9tLO-FNtz|J@h|_C(#;hHeQZPa!DpKZ9Buy zmN{5iRTLELAI>zMZiXEInM9iX-Cu>L*BJSf)YM<}Q8a;pf#$354DBEoR495(Fx~+0 z$A|!qJXpTEs+ktis6Q`3hE|G=H(d}O9u821ILGX^n^Ez5fyjIUM)@~2UH}&c7zhEx zBmJl^@L2;otRyIp8qgTF)c{EYI=E1G9G;sKR$$l;sPjnUa)%H{{6+;DeQqrwdqoBQO}>&=iAg-VE$rWrW4uL$!EhvD^bJ304Zk(dkd z;9_R0v|9pneq2&<_tyeyy%C}$D#V+J^J&&F(*3qSe=v8$wC&D!M0|n15ETT{>!t6f zr#YUqP+WdzC&6wQ=3i!IoMgi*4*OjQGyz8ie3yKbLjQ!`wjr^nu^Q06Zd}`TP|*<3 zxS99YN8uQzH=f&ZmLIXR)6#f|!<$=M$RmTx;Q67GyR@JrkuE^F@63oJ45{2!U5)H% zKM1lDVvU1fbBKlT!yIgwg9gVoj=*G>X4EwV3x<8xj~e#z>no(9V^}vD%sM)vo3T$A zj0jc%Cl?nSY7ZP=zW20D7zXgpb~SP1T5O?M+PI%#L~!DapdUADwq1y+SgX*`cr-r{ z&I6&NljNoMd%?a8a7p%+f-nux{~-7dUk(lUUf-Wm!EwcWkK=sWi*o?X(hBwAsRMes z6krN_=)=wkKdzuL0$Q`Er{SzZ4X6lnhhge>R)qe{gHsTH zIdjc`%@+MhH3VxekR1;dY}5nSZe`9J0zD63f?Gs9e+%Sc8uAE$VLSl{A1Qo|7l2z1 zbb|yMut^KyW@`czZVwil5jS7cK z|k(%`Gg1 z&Z$7Zo~H#lmnh&Aq3j5rhc);SsG9$KlJKJI@0=el_`rNwSN|JETBjbW&ly8^*HBS` zPzT?HVImY?3xAA??#C>&at(_bh||*%%p+L8y-&i>XauPjk4*!Es*evAS}nU1)4PkF z5D_KM^%q;Q*MA@&NnU^~#A}bHckapnmDn8!+C=phbAq&YN5K36^*au~9PyjDHl!Z@ zv4~a;zGx|s|D)#0<|4eC! z(g3Tb3OO)$cy>m?a3b|MPIE-nEIF?MuzY*ftK&jJ4>L%u3tfQiVUX-|cpTLxo_uI= zh}-x^mfANNptJnf$`wuc7hqZjSsN0Gn2IMlVIuBPD8lR|gwEunU#$caG2miO!efa* zH~g35)n%p$yM(?ZjuSq9Mnk-ubFC)E*m3O|GuWuQ9DWb(#7HkN?N=5h=;dsI& zmU6Ua91X+PvjNnR7I)D<4KyN(y5-SEjN{92jC)!hX^j6t{0bqZKTE;BR&O7|WD}mG z+`p$EQO#mdn_pYMA?=(YLgbFkMxbW5wT9T7S8(eMt2N*3~7<@Emg>U@V8; zTp}k;S_F@2sBfk&cVaqA#P_(J&v2RmlI_*Hb>5zvnDG{35oa;A^@Y}`97?Y@5;Gw> z42z`Z0$2;T`N9yjPCRqY5y^O%>n*2Ri-z3JkdKCv6yTpm0K*LER?p7mu%GD>RpueQ zl<)D8245nIi6RrxXdF*t$GKCtRjbypMXy!Z&q`qQ8{sK(eutc_2YgTc=t&M;;8vU8 z&^R-c0Y~gVGOX^Ogg&`o{t2kD(ZQa1@$Iq&G!9H1Kqr^J>IXy>899tpj!Fp^>8*Vz z3QN3Cq=Ui`Htz9PaG3f-(xu!WzFUsN~O6A`WF1GHFvJM!so{oOAG4)^bL> zjt@)ND&$e&!B~1+c=JYi*HbALl%AM78)^J9Eyd9}Jj3P$$e^l@a$X`RW{W`rOq-^6 z!4KLTas9fNuyQ#Icrs5$Qfp!`%LG8>n{%p4^=mjX(~{k~a&4AnX3Wt`08Zer26Yq$ z_7Df@R8S9w1m`9gLbntqbt!dGutIP1LD9Xiy{fd8M;pod9+q!ExGwbFK)j9Azor{D zPU8$tQZNa;c5|!U))M&rKOp2*YXSmK=Gr(aOkqLBoX1H{<+(sWpm>R=A zfyH=04dm(F86a$H5d2w6o?paTxXIeaemBs=F;*z+m%=Syb!BxDc~gjjv#UM#ZB@mh z_cS=YowD{RE^mf2Sp|os18#WQ7?25S4ZM;C8OX|Y`4!!-w3gL2uau!aaSC%sQ1k@m z8=)w}+h_8$=$xj*9!~!L`Q4{xs$ZEyve<*Q4ywIM0mScz#)W zIgOwb!atTaRPDQy3fA`31z|v}RlH4a?fIm||90=%o}>Lo*~#kt_34O}g`WB4X7Ppu zC;rr6-sF^(mjw@}{oBhC4#+CCmfrH4wy*{-7*olM><|k8UA-EnKRst2F^xBIL6UIex`=_#FnG#Mm>NQ7JmzDvmq0PfT9t3YJP*3}I$247kILSU$@Wq_V1AO8BzZd(c=6oPWQl6l0YYU}nn3!OY8DVn;)_xXz5$P+rGB129o zcb`j-nC#_rPZfaESG!ZE|MSQ^l`M={Y(X2^}Dwryd(oT9`+Y!dt)of3` zcDS@&(ir!nfE{nCHvP$O0M&yowv8DaY+SMqROzelli&z0BT-g{8AU2lZU2=)V4#!*03QA?EkN}`KKTSi^J&jH$F`S$qqFs<}W-W-z}N9_``TUv>hmQc^N&=Fq?B&+AvR zp`zp@2GX5x^$`?C3_|o%wmw*BE1V9_Z201Lzlz$)FHEOM)l6!Ao)HS3K)I5n`HWwd31e|LSx47f~@T-CCg{w@agVuT=yyTqWo{5C_eq0HR2a%=6^86w2 z6AxKXggA^pFG0(b33k6x3}~=A^0l20uKA;o)kccMz388QBxQWm9VHosXEQf(KpGZH z*o=nb|Fx?#pe(m5AN=d^J1@(-rOw*3CIB7Y%dox!)pY-Ewej{LpzNYz&{PhHIAV5M zdbOs$bA1P>C6~5KLXvg&bV$(PM5Lm?sZ6y&FLWaq|Hgt=FBU#i544LRh#xCUIG}LJ z&0G16sTQAIP7}ep!VPNqVH+WUj&dOu4ALr%t!u(ueDh8`JxGV3A$x|%8 zFlD3L2E(`iEHp}{DYq8agqT#6euY(P35!TYjkgxj$ApO+>VS*Gt^kvhPmpQhKD9)? z0__=Iy-aZR9T836U)afOwSTGRPxST$_F9zLOX{41_m!4Sfite^|e6 zY0hmSQvG1BuZ4ZP*)$#U(`BxBBF)jE@-!pA?d{DnE9P%vIo8q{6=GSVr8uO@866k~ z^|hFsMl)M;#1h@F%msH5`sQF*z?BOV{NzCXeRZNZ~mt6xs}9X-(dVz@^X zi7-QD14R4P5WP^^4Iy8^K4uRru{{IJDZp;g^KuW~w9RS$YlzhY4Kdy|R%4w18e%@c zeRb=YU-@76Z3;M34^~TY2LE;6o`Ds|)KqZef8948DPZkWuOl4tU-#`0P*w2qW3T>e z;G$m90>5C&1@Q|2+Jc~_ZGH9tjr~bw)8@(X#Ubb9fa~uy21U~^{`JEHSEKQgE^dAx!IC`F zuu<XP~TMB|0bGxwfeLb&E?LPA4n2OX~QJLJ!UCUv5oJ2O(ysHf_e z1>k{mRdoP#qs5EYX1Y!MgRcq*id~J6oUXq2x!h4b>PTO%{zR?qGhYN z#k^fWb49RKu!GU(BvrG|-!?7PrPY}8DU=5x2;U}IOxa#q*qZEokj4~htp!*};ROAw zsr-m{Tt11e997GLzRc;~{MjgR7y>hAzvCMJGEflitocuDv-8l;v~9z#e)aRn*#x!Z zYWzT8yped}p}$8`%+1fQEn){0 zT?1iso-02j4mY}(&BWiPeDpYPJ*Cuw5j}BOX>#AwZbO3(b)t&v{22`?Mq7+dl7ID7 zzf0x2pnun~S}#D>Hm2>@SS07Q_>O7^FqTbgyxWTJaX(WIT7J}$4}DQ#Lqo@7U}}C2 zHOX78V9*~DW;9xz|DvlOh`NZ~+sZdn0!V?=&YG$<6D->1U6tv8gQS}}1TtpcQPRB2 zywy{E%Fd8>ZO_7Hah-sQ3yri@l`73ysrwXmABw}XmAv=fre_My2dK-J+vl22O%B#Q zO}#910)C01gUSKi(SrzkMI$Ou1RbAU>y6}oj=E&+Xm9D-3CDTdJFcw_rmWLj%~atv zUFv1JT|KNZrv@M1fiJdJT4$%T~#hCHdpMH&W^c{kAC(< z*tQzYMyQEmqJUPT=N0&j=-*qjAbo$y~Dcdco#G8W3SGC7WHL0=_=SH3Exruf1i z`UZ5S5~qn>9~Lh$xfwu3a%CY9GRAkKWr=Cl$psh`?NYmRxRn)+(@Vy1I2vx88d!xGac zurJa~yB^-QduMfZ?b`iU8}6mE-9()B0BrWaD>@WQz|XonG8@;|0EapMXRu%#R(W8Gqmo3bHN$n5U4)|6`%x zOY4V~|H;+-fJ-+s2K?VkfUY9ip|3$Ab^K4dMz-#R0K6T5J)=NiUHzSL(gBDM0F$2p zZoRYk=U2WmhSW$9n-2T9@)k&79bT1Ch9`*PmXp&g1l_xb27p?CGr8x(SNd510QSZ1?k>Ps0j+cs<}Wvh zsR!x-L(%>yF*|p64F+y|Wol!yjB4=y)f?;Uv|~5j-5?>tT&g|#KCaW+923N&AbPz4FR*@Tf-Y%lPzVtPC;eFk$)UbI^nWlJ*c%#|L@zRU z)$Sg;#t}J3?|G1+f0D9kOAIv8K*8yY1Llu|3Nx@mr_+|lvUA{X5Q7ZR{so+|F=qht zsC#MP&gXsP`vZss{R7D4yP0gH-MRzd`JVbkXhe`vg$o&h*>ebt9r&+$ef(4^`*Un% z!V>9G_yi6~!C6rFa{U0yE~j_Dm}qizs^Kj%AJ`uKnqR++#!~3`a;xj=&}=881`JDN zv%liuk)7+V&VZPdm6fe@c)9{d=;zOG#wI{l`~CeLFw2S@+ACz1`W0b>nYe5JThQH| zv$PJ9v}PNVy$;4AjG zF*T(~mbBh%|6)Y!gjeo;IR51?yn+t1ig8v(Mz0LiT9a+4U7&@l>tm{(5A3AKy?trb zZM&4$QK1cUYw*%YYvZztmZ~)nZRUFwI9Ocly6N-U7t24{v9&nyTF;49{XQVom=XX< z*ZYdEQ*6=WX7lL}Zrk~Mugv_usMU3Gb`sRtOvR-CQ|aJpcDsl+uRNW0)B9|<7OoZx z^7;y0uKnZ166IR&^JNL}54_lXLP~SP%@R;+PH~WSCz0FijVAOnsg*G}7YJ57n7if^ zz{cjuFKlnGD62i*9gr$7ZuZz6p@y2vMU|6zrl{u$qF|tHnYXeO+0ZLaX_H)FrqjjH z%+x}dJ3BqCr)9sq?u$>EUy-suzNtuB;A~G}VJHt7fD&~SuWhYVkG{gnG<#@2(d1xi z&`R*4qXR;Y&Mq&FzP$1`Vf7hOVD8K}RP%q^T{_DlwgFX#zdxj0f7*EBI9zDG%Wdla zy^X)?^7qY0ax6N^L>l~3e5fdAoyJ;+6^b9EJ^#9H_dn`Q7UCcE<`WQbZz_B^BvY$6 zS99frqJ|qVDu_86up|qZmXtHm4i&mzxGLp$ox~yls&~sK8>R_^cfCJkx(s6w2y?|J zyS=>|BMJj15)8 zTO(!rz$@>^qgOJ?pQp4cKAC9NrD1zXvc9|pK~8eXQ+zH(*Xj@cz|k#u0XbaQ(!VvB zSc+5%=enqVDUh&Mpbo5UUpDip=DWA}Ze3InbUcA2uyF-EqRL>E?#Zelt-QN zH|8h|<;>E}z#%M*buy%%$1vY24ermPe3_I{5tmUGU7=KFYK&j=VIHwsFS`7pNjwLN z?F*GVaS}~2V^A;`1>?64UpRVO1oLkoq5w4P)1%Las5&0aMS9yUt+_x7J|Fp8KL_x4P zvwU%;sm~z*HW%|)>z47RZK!=0YQ@=tHGHZsWXO{07SF#M+LO()X8?P#mQ%m(({{4~ z;c#u<#tGuSM&Ri%mTmi(%siz=CRTR>*eRxpto9#R}wN0zZZWQuy zRVNT4(zZ*fI{OH#t_7uwH)_L#t&{I&dN|qP)aaUGJ=^lj;!MFhS&G)sEvb}o;cp9bFjsdC5Eb0hMWFBL}+=LJfLEy*7XNREv$0H;ph(rfq#F-;*Taza zFG5}_iRn@4wf1b=O&IBz??TQr^lbL=ij|iI>1kO*IpQgA!w|Gn$tjNhrPe2XKE||D zOWz|{t>H=|eCQR6ksoUkhSk_Kp^AgmU#|LYdqE-vV{7tBXgG~bcW)OBV=GGEQI)@R zw#OVmI-1VUF1U}il(gi1jk+mfO(|E;7{{S5g)3s!E(}0*1K9es=I6gc7vE+U7+MtY zDTW2?pxL+o1Dy&n5RbV3MxCdV7#JC8&?uVp3 zDBiDqd-pB3;xA8@WN-dt-sOJ|G+I_Y4_m%!rX>ZoAT_td9{gsHsKh@>W{BPw#llu$ zqM7Eb6l7K=h71~|kQ%|+19$nxnbwjsQkjo(_lK8H-AkflzEkU%tLQQ3&-(#1<7Tg8 z8$^Do>gorr-b|2v{4HdI{}`6lSa5W+T?^ehfu0@nzO*Ad?O#^xZ;cHVwqr_S4q`bk z*}U@xJ#!(T@Soi=W1x_=TJOVfthhb0r~I*oXJzhO6ikOClTEU^4&>9&sLiR}MpTFt zJIRYu+&POOt#*YL8+s0yGD3T7`K>bR&3e4IRqQqyV3`dIPbpa&UH8 z+20VKaUe91k~Qx0L1W}4O;yceWW-_RE%%1H)vnXwHji@(&vOgTf}hy+hN!o4wsl+1 z$C;P)lKpwb9yEA94a159>wPY#@XO_#%m?k`-IgkqFQv;ZlBOK7;~Bf6>qm!|G~qGx zATS>98juvMYWR9l__o53XSh2UxO!hbKdGc@7%&Eqd*wYl>~duh^EXe&QpS7ghrE_0hq zr^;n&l8AE>6ml+#Ik9@LWU-X$Z}y2}#yXnr`m}5DxpSGeQn={8KHC51nh&dhCSs*} zQ^k}1mCdStH_`5(uu|^!;ND{k@}Rf2dv41F0@l5yz~bkUl*iOh>#K6x)4AQ^zCjT} zH5bx`XStRekMk2VEBm5(9|6wKPKO<2uZ6+s)6cIvbd{fA(>r*gtIfI5Noxa0uH~tG zJC>RQha2iMW+4;v4KkR$WKYd@Os8WCD$E?hVC-xtwV|XkY)VXGlQ`F?_p?m)rz~0g z<~Lx2P?bkC4L>Tj;7Xh&Ak>)9*TW(xwmz1ETV+lb_Oxq;n~qHGPmZGY;V;}}R$mGo z4!y;cig+2)6WQ;tb<4c@)i(2DU2p@{ns>jlB=T%NpRXE8ZoW{Rj_LV*&J^r zqQqkAp?b*)S#(JAH7EnIV!yA21(*JhBFmt9wftN}Zc(!APhRZcRaLx-Ly_EOgILT= zzqX#b0*`~z^8n1`U+QZr2I}vFqLWzhyeawDKe09mdzoiD*(>f4+7*;!yAwye z?pzUyovzT1ZY{x6@4`2`{cY>QSTIy-;>vFc3(`AztHWj1zUZKztp3?l0!V5-%}^?6 zT>9%vkCmo9_xzufdWuGal=5x9Q>S3s8xa(aF1?Kqk7?J+eoz*J*;Ns=2y7J;+$*QAlUXzqV#1HT28Be=E}HcZ zT5D_IcWX+1RSdhHYC8W(kAvF8J3;j&zi@C?nO?gP}O@J^M!DZi$4^bfz4(> zj9zgPDxz6Fp2=N_^Bw8e=wFyjiz$t#Ud2<{r(_%!TFw}SM09TsR6)+|5T-te^jXcj z7(SOkhVm=tc6}x5%@N37C?>VeskTcr9Go@8l*RTx7+Vd;Wx?xgmu_iE)H<*iq;gj( ze{Y!&O$^#(vl)oFkMGKnzjb`GXHo{OqpKjKN{G}z-#nM3qdncaC(*3beUGX(Hx4xL z)Niwg0+~1#Y^F7I{yp6c8T4g_GHG5Tq}F2y>0M?bV-^soqJ+1ofXE&n~lM?3LO?}_F4r|O5*7K zb+sFvj!Lf{H6u!R(qQyb%d|cO!*O_)_I6yoKX)0Bz~q4+NWP2jLTcAmTtv(?8+P7C zlx_FUm;eB%hj*oOD5PxhydRc!@OVCn4B}L(qEt}exTnZH_+nBMPTC*4OE+a(LatHi zu=+a@qh}nn7r0EE-Zh!kp=f^$%^?)CSkgHJXH=vnM$I;-d~T#fe(xB4tv5oE&iumo zRUl$&9a7b*0e0_q&!G@Bn}CQihg8Q~xC_v!u>s$`;anaI{jRnS=d+F!xE#n9BPZA^ zk-+CZ*Qu{Bo`v9DL*sdO1YDn4#((?XO;r!ZzK% z<+Ahvpe22-H*%ipv=w!094t@BP;_oq{@xMvqa@!WACjhs6pEStcSyy6t&&A&O{=Xw zY_*J91FRuikCdJRaR~A&0VyPd6pK&vt)8MEFerMep{0>btB5n-jnJowDo+cS+YzB_ zlW~Sx8s%54ip|C~%IQkl?PN==XTHJG>~4lzQ|HZF>rZU!6!m?Y^UhY;`kheKE}gAB*V zX>0V=!HnlV5X^Ok0OzOtM#Q!XS~1eTPW6*mX32=y6r(p-zR#(haKLvMG5}d<56Sxq zE)7@d9fqW@Qp~kmQz^#r1ICM2N@C|Lku3L_Qf?XX!6@ZbUQdJqOIU4M?YBDy*=Hs+ zq6{)+_OD9b+C)(X0)!nqr*68dPW@>Fin5)MJbx_*mF-pgcMOfJRIV+_0r(G$G0h9z=#Au$o>e1H;_4)j9EG^ zoz`IP0Qmy>q0v`?dJiM050Ustmtt1S2A2mqKZR)|HKjBa(FDTTLBSxxJQ-QK*B@sd zRZ>4SqHPfT1mzy_DlEp;AWDA!X0GpiGr8~Td|{@EjE+YUMW19ny%gM0{lsqP1Z;V~ zX^6d{2W7B5&MeLEFraMN<@)g6j>O(;u!(>c47W153tIe*bHyL?`e54~emqr_{hj~z zR!d8m8jQXAq9fiF-*SiiEGw%`%iMmYI{vw36FTP3hkN0jsrDJ$F=ob7CVidGg-5RE zvsuV<^2T+#7!Wbqd}*3I!BC)e%wKhfFZXfdn^}gV^z0;QVI`hg?Qtt?ZGhIi?7&~$ z->wfe+H2r1oZh@&8(j)wjFu*l98cT8Fvg%S5?A-iY3&44)iS^E8%cMb@}dTVicl&1 z3eQl+T-*7HxecV6hfw{2l3^Uj#krf1Oo%vl_msyL9*@fPpqR5P7>8wRin=@&IkFw8zEs?X8r;Im|JEKB2Kf}mG% zrcd7uAT!1NX=nt)TD=zR+oo}OLS&yOCZh+kMKC5uGR}ED8c~eTXF{VXz9a?JVy`6R z4gu>vze}DSzanf}M}nBoB@hucVm_n>^Z5Gn(wAbV5&Q!xR%4|U?a9O~4JStsa%?X= zQY(VyicOWy{=V`zg|`!Fq&#U=w(E|fy^Ei?q_Cd3$sgZ46y#2RZDyYm%!x_3d=|UM ztGs6BMFKgU^*Tcn%muNP0SFVkqj)l_Lg)emRbs2c#y`CuSlAdbmOF!~q0tbEQ3=0? zod?|`d~w+e>(Eqrx65&9Xk4Wf1IsN=_s6vqf1fLuKfBgPiHjYXF{AB+$ml{!T|+Br zuXy~jFU6aZGb7X90kpbY{K<)S{L#RWmA2F%$IRa3G z;}kWH{${}QSj$6>9pTo2u2ZP{AFw)F|Av71JT%_H9^2HLa$iBz`;si45j4o|e%~QD z&H`!MQK4;u@peaMFSVXU_P(ILt&3LgFsEn&K^!UBnJT*yJJmMT4 z4?2pe&vp%#e;xo8Vg;x7Z*ICr(-k=EM)@3WG6dO4W?nbC!X7a{? z&1gI!b&vvPGpy1Fp{uZ2NeAZ*CPA+fz8*EY%{**n%nlwR!MUAI)ksn5r|>EXLB70< zoZMq{W|Kp@Q}E2=L<5X^T`OZsLKXek%$digA9y*P?s@vEcAymYaunzTEe9i%n3J>X zF23obm>8qt`XCJn-hp}yVc54o`)?)HK*&&p`5BVAcRpT@!|0>yaqHR zEyk~vu@>895~Z1Z=2XmT+HWl1zI~>>W8sHIY;b{Lx=!r`2^&on4dlkU<8Oa;I6t>8 zaUpnJ=~&^|{At<55{TVm(D?Vp``obYuuPU>pf>1T`8sVsJj6#Lj*lQ_TSW^eMWf+% zOs}Vw$r%nRpsG()0Bd6VdX*(C$y!Ya{!7RqO@u?8LA9wlAu@e!{7WOf-3utR?N!YJ z9M{tetTOHTv#?-3W0uEz=tg^%ji4F_rX$>MlEE&n-a=rI zgCGpu-4fE>IrN~kbeAHX($W$V(%s!dcQ;7A2k*b(UF%uTdgiyi&Y3gUIdj$7dw)M0 zh`hjpqm(qBNuv!wL`M^P_m4Dc_e>gHs2D5i2b|;TV8A)P=kOnC)c%5wX5dM1r70r7~E#)p5T(b{LysQv7Yx;YSdCcXVLO^-ek7nB4dgJ?y(Pvr+uU>+bM!6JUDqwe;E#5H6COIq* zGyX1Vb`l|wIrpuM?=x#nDE#PIJ#XvV1!=9ES-c<1W~7L*e0qFXT3XVwwzq#xLJ}sG zt68R(oR$Xo+6~G4ZA?wq{a+&6*xCa0Qa>jP3nYPZ{YJtLc_x|0nIHmnC!eE*IxKa6 zB120{%buQ|a>Evin4VodeIoV#z_7a#NB_{)u4oBrz(LOsJqq-kot}0-TKwJBB{}{* z>K8qm&kK*W&M-%wS7FIXNyHQsN^}VlZg16{a@Gt^Hu@6$MP6*S_SJjexifvEE+)%v z7&qqKN56xLpC|7!V9}Ty) z&8^5ivsqy4rUNBj9*e{4gpWZ9^nV_sAauB4K!t~%nKFZplD%pDY&T~Q2C|V;Tv%Nv zthzCytMkr+N39x_v3izW;k&$$_usA=15Y<6(%OX#$$lag#W_;&F)X zi1x|krgn&92f@0Yfp1~9?CH%R|80`YWp`XM5c9D4w6ligbxb#rh0B~> zSE3)I0rml8Qzv6ppoSc>a5t5`LyohCdTmPaU9a^idh>5U)&m1tSb|=wEkm$xPZM2L^z2Rm59- zAtS&>Ndpgc`&V6}8xkZ#)9gChdt`&nJ4IGvAYvh@-kK{lMxNPu6mNX6etNyR> z+z434nUKGqv?O;NQ`JBKCg2b5L8Ll71}al}pNiEr*ty%Z)TY!weC=ShSA$ZUTO%&o zLr3lS%g8)*1Pb zB#G*wG_)gEI{G@%IHUV)T)@}xuhT5b!Yy-dI@DOqF>w zH29b@0^bL}ucQ6Da)XcTv&m8jl|h4!m|9)VBsE1^C7-O8VP7$-=D;gUyXGYUTeJ5S z%YI8c@80A5Hh5T3UJQ2xm-OIW3pWG=CCpWXoVf_-w2LqM<3E|jMd=z{vg53opfXkL zWS?R#s1`F=^C0xA;+1#? zi3m%iDOys0?_?c^-=_G>OVXw49^PAaA$euYtEhaXxv!U^r<)t;ibMCgOzEqXCPTM6 zol{-kvvXX|Q0N|Skj6(>(q$@G>oH|5dPpAG7dkCRTdnwm6+e5Hkz$Y>AwY3O5Q zq&Y+n=5f6~G;qfmmO9coOTAl5u2{JW-(-RKE40poXnk+g z4(-uTp0Hi$J!u5%x-=Z3vc-jmj^}82P*p5=1IOEeF}{5rt^0^DljZE~`L25Or3<0z z*mmvPikfzecaDr_+1}ncl#lm|o>kPR7LUShE34Kn6m`F#*TWCq&GK=*(bE>%@u21U zhqj=IfjEYC4i-c;(ydMO+sK>uia2b@3vI_oi>KWshPQKb%ZtRs-L1IyFWAZ9RU;6H zZN5-V$-FWoB$NCgfwXmh-oz4q$g1cQbA1+-n)se`CWK%F%@S3j?ZC>G_p{?uYjfP6 zjHBZxGrEF3%t_M8;dR^v+og$tWSMaNy%RO0^_Q<7bNK4q z)>0GsMgVC=OX0kagg{25R2lP@hCzNX9_#C?C}fu{v^8`~w8ViBfg7Obvd8(`wIQ2* zfzY-i*HVXU5?4hP+}RlN>tU6jt@|@f%HiAwX*uu~X?)+v3TEX(JID+-H6_f{ZW4955UW*o-ug{&v% zWIkl|cj$DZtIDp0J_<6tQUbg;KKyENxy?|5powB6%o1xA-qCiaO#TDkf=>BjlOQ+OLw^w-P-kxb5U#wZvAWvZXa{EUetJ>w zN%ds*aMd%)twyN4=g=KmQ{&@gYs5%;JD;ou*8<_iB}q+ku(va6*k}quWg9uRK79z8 zX%u=LnbG{`CI%C{QWtILL7j^+{DU1b05x2wY(yP%&!_gOn_b?!+lu=eRF9OsJa^!I zyroK0)cm;+w%?6`(o!;aewx0MUS!6Si@Y?xE67EmeY2tTK5k6;YU2zDo>g#|7oEU2IWs(M05aESffSRnViGN^U zp5182;^3Z6Rt8(L@4D6cX?j~rBRjh9ZRZj8$y%@lUA(T6H3l5-N?eQE&(+@bvsNxH?gLn4Yx``8M1#@wN1;JP(>AHG}=GHdu ze{xGnZ1_DOuF~@7F38u$Kdi;|XOAxp8o5@^|7Oh1EH6wIk?KG_7cTk5lhlf-$c3&3 z{o}&=YPY&qE5kgfNlrYmju)!QqefWS{#=dks`E8B7T|H$)^R_rSRRW+RK82^ySj3v zo!Gs~ms$*=hRB<~ZMxjXdLw7af&ABVDcqKqwCh_|Hn#vb*92_QV;g4Wqjx?(6~t-7 zYQsm6oNfY}m`4w!^7}v=tlG1y+_dD=L|pIe=x**G!eh`xv=2EiaN(Og-yh*tU^U-| z=Md=3KpN2{+G-$Ms{U~3sAcp{k8BO1i;s~d z^m*tAkK?tvtsZ%i9(fr?fa9h@EGMux+ve0iavA!TQ5}5u^)|gt$lhT_w#9NquxaAR zfx{3bva5FmyZ_+V+W#(09=dX@d6i4B36ff8Sl-5wCgM0z9e}T{8iqgmQnl9Z#^zl9 z^At;^)3NS@Z!5MQ8Tmevnnrp6pR%+Iij^zaqb!o{i$i6}SVX^tdIu|dtj^Sm(3>zW zq;C_R?N*m1rl@+&-9kW<^sY zs@GdghV><|6dW3M9}*sAIQ?KAuA^_i3t z$wUh_r3-~UULrHR*`-?ZI3rem2_q){JJ)zzQk*FBgFfF~yTp&91v8e=%ymH*Z z6UyJX>h>rR;PHr}to|~4N}f>B`ZO|_&^%i!<9bEY+OfX0TXR%gPT>Q%HYr1Yn401u zq9o#2Pg}+!NgIUg{0BDLM_tV zTZ}+tAf@xm3*j5HEBef#pr&zVWSbF~Rz}RGf$;bXI6kO1>K8;3n=*|vZ(EJ)l9#0S z0ljNKM8Iv%szZgLP+cPH$ad)y#Vw7Y)P$lX|>nu7bZ} z42XGD7o8a-rc2+*%a9Y|4pjA)rZyhtvm5?qrA=r--S{H%MM;oybcMc$GK+qKsZPPs z1u)Z9Oi_T5ExGYe3OMF=fB*ijOi_-CBy@9t>vfomd<}pu^2d|&WE4JZRQB!8r(l0! zf=bgnt<40BC)-_hr>}ljCSRIb3hQGZ@%Dg&vywmSnV|Zq5Zk&k*W2%V_i$$G-3=HjC$i$_P4#W`Zf~HpMKH;vp6CZDA~AH%sJ!W z?gRr#31#Na&)miBPCl0^tg(N*&BxYpm9B!Zsgk2M;0+kxP|BIlc_UG)3rQ*z@%@c@ zD@*XbFS5IR6LgGf>2^LX!Ex}N^rf6YNet_c1)C*$PutN>FkO7Y0Ld?<)~Ic^+uwx^ zA{5XroojXT!h<+y*ZNZBwYGAh)X>_yxqgvW=>UFUR_JcPnp#xkm|MN7tP1wS_*{&Rr0!>NoWb|oDGpU)>ZYb!d$ zOw!R=#%`BbeU^H0u{V5V4mPZ@TLPc-h_ELu>ZI-1kf*I*t<U`;>2=d)D(r-4r z-K+@;>tb;h?3?GPI}g{4#tJ2RN{UeaM&QR(ttVG|iSS2Ym2Hnnj9RpXs4Z54gIBOF zR9B2UEuiSgdoIY~bJLN80IJ~Cr^V1jkr$5KL~^~%eJOS-6a#9#9)`X@1Agj=z4L}) zCs|`yXdBO_g#5w`i8Rb`+*TCJQ&9{a(GjgNemOn2BWydcp15tS>!>20&)EA7glt>? zu1C{V9=2RX?dv3e>UdDWEXP0?bcpp67l_T?is6+pls9QK2JsvAAWs=v658}|v)`H* zfEK%qV;n2l9CJiSFB3{Wiv93t zT|-l9K1+Q&^2Qfz-#6oAUdmc<<8vzskK+FJMNovW0Is~{8{!I%4q8$%}JE6E0G+yoXIqv&6WQT>|lIpfhaG5^Y9~{Fx%>5d)5e&Jel(nk3 zDx735?*4s7vqe5*of2u&sSmCq5_aw7+XZS7@)P)R9s%cczVAVa+1npZdhWFU($G4-_ zEw8ZNT}k74+Khie4h+(~~_v z_Ha8t{anJwK@NUGcZ*~_w(g6_ z5J->W)W$|V?TR~Pv#&yc{E&;<_xjDo!5ONl+DgW0&mA;D2lDQQC*`h0yfI1c?Vu%e zpH~m1HS1vE80mM-VdTbdF%f(4~f*Efep5^tUdU(K5A&_&s4?_Y|fHN{nOB( z2pl35yVaW4EiBE<%uG*jo!5I zs|4J})j(}@fcGN&u&bQCQroa_AX#zXrtL9B_$(vF_Gf)tfw|gk>!di0X96<1oYsZF z{}TOkS`1WAJ3ebSH0Zy$VtS((I0=KSdavjr*$jPAR8sqWLsQ4zYGBLUYip5(@b5a8 zIDi9o4jq-&p~varq-9EwH9uP$R9kZzl)Lr1qe-wRf*-m-LDP2U^9hDeRF3-ni9P`` zesq~0|1|<=Mh%KO!y*d&VVqERqo=ehkjHRvvoi4@Orm6w(Bz6X73x6 zHxKk|m95nD|BofnGq9BO8JZ{jK{@FDn2!=8I>KD&$`C z>%l0%b<#7Ni{IAE@@UXt2UQr8@J#jx2|5Kd=Z8_qz{Z z$y%*U8pX|pTG>>--+@R@22fo{A~4}Qe7vHIq!PtZkwY_cg+OzAXu~+i2E`PnD1Tvr82o=X2!Mp>hHe9S2$9gKw>xefG1v*T?aEzt z`M?daK4u_q04nN-!V}e+?~z2Hi8il8q%vWX9 zzlzC1iA}#_Mr~c!+&y*eCjR+&eB3;`<`Tw>!9T}lHiL16W#C~dV~yE2+x57cpPx#6 zl>T8(^JiVKe!*WGM~vQLr0}4N5P@;1fz1Q7{GgR!tu?x}E)#;ERITu=V3TMaLzrH5 zg8UM~Uew7vD>rmFbU3*$cfqr-ITBBQEHMouTMtW?x!O`c+ax8rxYm^>J08lzazoOw z(VOYUYi7-;P}Y$vE;Tl{tiD$F9V+eH0A7}9MQ=8zBJ;bGfwYkJYfi5{srreXm${E5XXI8sFQnbPKG}G zp+nMjRu~~waBhn;Z&9g(I>4&kTJaxUf48}^b#6L(WbZjRkQVpe?o~HMnDEyrgcY|7v zkACi~@=RF-9hY>O8!=|5@1QG#EMr{nu7BOGjP;Dq%X{iz3x;_5*fOm`Q4J&Me4Z4} z-*|g&@0eIv(LHP*D{_T=^}Q0C7^cJOk|FoXiMIxNya1(9faCg{D+*YQ1pA{atB)5w z;hAjQk9mA?x<=Iy&TBh)tj#J{LfA^J%P2o$fwMjb9h+EX8ex9PYNJddY2$oDc0 zGJ2#g7}{N=lMq*TOH7?QjeXqg`&iLWe+8rT6?9YzdqO#qCB@uj{mvhyg^9cUakXCy zCWbByN;vzTKMt0ROoqY73=bmPSw%h1!z(iI+$dlkBLox)?u=;?JeXd1$xT|6#nVRm zyH{%#WW3X|p$u|9=?`5Nw)ouYWL215Av+ctC4u(_%+`ZU6B|Pc!y;At31N*cj1nIz zqT#dVwfd~22&Gx@Lsv2yHV6>76rb`pG{;&cqJy_3*7Zm zqhIUG>r|ptAcJYgLeCR2$Mk5)fDs4=dcHD^ig97*=*`@~TIsRN-QzchKn09y#knRe z&a@qBBu_|iM^kqH3L;MqwS{FT+46eg(WuuV*%#SlprIZd{%ApDYf19wb+CAga@p7P zijaUyq%?Y>mP^ljA76lY-rI`;J9DUZ-`5u6>yPpt?CO@Ssr$3Jiy~okhYPGWU)+v*Pnw%LRnQ%fmu(fsP`AkoL@# z(LNNN{%1|oh_pA;QOf}j?FEh_A)K@;J0E)ARc&zdg4%?u!nX);TV>s=)nsb=NQ!w_ zsaOp?JQjep_etuxdPK@||E&k8@OXXhdAhqmEGz&YUA(alOi(O{<4EpbAX=ZzQe51w zOtb75uuZfjB>eeeXTQ9~z|at@_~s5+@c}^Cw^j#iyT`Q zH%U+`XYB>?Q^dqXN4rCz>)e^7ZUG4RlBhvqpRTcesipyCTXSf#ezu;_#M{aWMOCS|85gG%4~`x?3)wMk6b-Wq zjw8zR6H9$jh8a_z#+}H2{4iS;e=sy@{mKy>ZpLhWX-_wUu*yW-c)RHrxM5c0Hsk%zA@~6e^ zZO@X@%3SjMovvYRYKz{TnC;$f0k_4yj<(zx$=eJlitiIJxamCaMy-{IM~R4=}#>poRmyF zkBdS5U!uh`_VYgg3UMI=XtSL#qJolZvVG4b3{p~Qu2d&RdxaoRk<}|rt2Ntw)wS_H z18j>W+h|Bs_CWjHAU`SW&|VB_RtcC`j_BAGhd05x8B?y&6I`l!(hC9l9SY)VQATyx zM{BAPfjb{0F1+t>vM}Eu|Kb&J(8MU%x|9?jk{}*v8i4lb~Uel(IUmXrT{_SK(Uoq6dAPP{p?yYTV>e>Uc+ZCPq5>AKtB zmq$NM%a`A!-8cjW_no!FuGz;sJBDD{9Gd!Z_@{!Fl$)i5A%X=|?s7&^AbjPGDRJxr0ArEA?%?lEv1GXAJu?(`8y)lqLOzx>16HxwnwC zTUAe2sThL_arHo^|9-`N<4nd&xdgP6$7wS#ACE={j|hLk$sFskCxlZaQ`Ft-^*7IZ zRbeE72eB47PXc$_AGzFomM1(*pNG z|DH^0R(qsu@!FzpnntFoDFrFtS&AdUxa>U{dOZbM=bh8}<%T|gOc*burY7M7+Vgfs zV8g{e;4fcQxJ`=k&{@tGk-(@c(UP&#-g|ShD6NN4k72y@VpQ%9{3spm*Ese|1_+%h z48NLf4t~wI|K@TQ5IDLrr7L&*JZz0L4~b!rucA@%?TzvFyUjm)=YCg8jUMXfjbJ6@ za5qa7^9rQ;^>?(|U(P2fwLR_GPJaW)*gOb|IK$N@6Lt;Tf;@!E4^4P28nXHDrHBLj zCjKAB?5;1@clYXpo72EgNaP{J79}M0Kd8j2-gioN^LEz1IcBbz;^X7NsfYkvMEV<= z{A}G~>zj!9-QJ-XdJg;P30U?&KoUl}cv&B4m27-o{o2w~;s~_^$R@2}2v+K0c)CG$ z|7z)eeO?IRF%SP4JaNF){_oKLJ&phEedFW_PMQ9PNMXN6^b6o4E2$(=CT8^I{{iDN Bb7lYl literal 0 HcmV?d00001 diff --git a/docs/user-manual/modules/ROOT/images/jbang/route-diagram-light.png b/docs/user-manual/modules/ROOT/images/jbang/route-diagram-light.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec2e522c132e78ff5b936f946c87bb64193ee5b GIT binary patch literal 144838 zcmc$`Q*% zt9o};{qV1fQc{pagu{aa004;6Qer9q0N4ot05b~&2b~F@)GY*Uz+6-$MF6$a1gD?_ zF>@_x3we0}9cUj20E@5&K>kYt`r(0o002Y*7ytsa1^aid0Q`Tif}IpV{O>-@?7xKA zg6eJnfDk}hOjykm>~9ZjqTX00Ra)j{b=76pT)Si9urL~6K$MI&8iV#HTIuHM>RfDh zp}vpBpt~LSs6hm^JHG)RK?DBom8XTNhp8pT7rYr8Bti_z=si-I6wg2ssbEOq4NI<< z-h|Gr)Q?6YCA*DHA@#l=XM(G~;}hx3w=>LN`rdA5e3`v?b1e>lU?PDiB#=K~z?21w zzL$goNQHnX;Ba7M4mL3V9jM`gi*2ZD7*jC)cSUSt0s6l@6>N}^?N!x-QhNX0AhNv@ z5d|ESL&+S7;;gA1mel?~_i|RnCxHazD40MY*{f}YBX@@V?~!|Dod2E_DwIkpG^}rq zDY1w4FT2pNy#2od0fXp710%a8=wgQ{|78!1%wGGSvZ;pyP(4!BaiV1ZWe1>gwfx^I zAb`D3A09$c!`Eiu4Thos;e!isfXIWW+}mG1FBso7DRsxSDRIJm@;vO}M!1c8mnCSz zF-);UcW7l|x~?Jwhk(Xqz{)E&k!f35cEJOk0MzK`!yZl@9JI2�)N(pg~Z{jg)~` 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

e`^%&ISaB|k1* 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

cb@HO<&k#FU%{V(PgRPp~0;j(ZSu9RL+1z#8Ho z`U9xkgxHJPASP8*u)u_P`Fk=Sx2Z}K^4EMSBLH=mc8&;WKV<5= zkGH+jV2K6+_nVk#1Qt<&A`vL#1UeywS?%{2)nZ485=$k2(-n49q}2e+4eMQj6Tqrq zDiP$4C!CA8|E}+g(SG~<26UQ=kj~|n49$y2`idte*zs{%{Q(;pvGH+e|MA5M$uU?R z=*-lM&Di_<@X!oDJhC4f{pK$F^9`tQ6k%Qof|zlX{Fh9NnjzpvC?*o}`C$Kv>Dl#m zJFX!Cw!ndps30r*6%|I6$iW|)-9YHWAEapn_Fg!K5!r~~!Nt{emr50)eW{Of$`Pn9Jx=)HG~kH1h++mU!kXB^H92G0vGEvVke+l@ zRJbt-Zq*;H(&VTCTwrWr(!>bcpC6AT;c?&=5P#vc{8@0?o@YdmdWHHek?bFVW>0Y- zBgh3fR^cq4-@9Kheg?i7LXv{L3#%g!03D#9VtH?&2XINjd;<)G5_q!-P```@`Nfz} zL8kWH|9eNfM*a6eWRk)0U_6=M%^mCN?jjlnoISxb6Y3L0(tVq#L>3bl(nX zAtO2$Q`gw;^yUyH665`RyF<1X>>WPuc^Ta{P~vceaVFlBNhsZ{4PP{i(Y8Jql)MHywu#~y6yWYlok)J zZh%Mg^Wy0Rpjj16G6azg45@))6K*$PZ~{?VK*^Q_*|DHw1+@w=sR11{9C-tFH6lLe z%;sjy?D5O}8L}h3%s&X|2TBQj94v-E9yHD%41B=QbL<`d#}xoaxrSqj!onz``3O7a z_+Hn&zP#l8fVb_~lw7TtD~&|HF!L_xpu? z{1=R{1X9o@GLiE>%1CidjbSk960(Xx%;}4e$$u<328>P*Cg_lcy_h>MhaBB7L5@rT z6HL;*I1-QnV2z;_#=#x{uTl+4oYJ=iq66W{_}J#0Gz((t~moJfx?_)j_H?n8T-bElx7$> zT>vbwx)zcNq67og05US#CY}q7P6IeMG{WIFtf-&|AZfs@MmAJvqp4N`E8cQ^hNTvz0>_YuV1(IXT~hkH)#<$(ZA=Cm7zJyO8}q040cc7i@n+5X>KMH^V(Ybw`jN$V7Blaz_ndJdDWP3>^Y(M{t(BY)%pZ z8?7690ds#y3UO0t1xpx&64z)qB-XKvYy>1TPz36^e>8TU&?}&x;Ottt7G)Ps5~iu2 zOq>FmUyvgg+M$0pj#Lj+9|;%K@?Tl|ZCHz7L5@q7pomEAj)qSNC^8C!wjl@v${G}X zkVh{_aLq1dANHTRU@~HJY#L%8D#Rez z1`NpDK*ldGaJgYOocQ`E=3$eZu!RN$UtCvA+!Cuz?}#g!CMV zN#jT5?`-aqf-lqRY$XrK^Ah}?IqwXze>_qf`wP3v# zwgQFV>i?lblq0GNHDvtM3kiiNIso1fPeN>Pe$#+m2m&cBO2G+xkT=E%zX*YY>@QWq z2@C1a0KGO+{ULn-AnG7s`203<#5n+#LxQXk01o|$m8?LN@T~2Y$zuD`myVgFDa_O6TTLXma(TEb6qL#Xx*qi8J<=$ zRJmh-3Ua;n@*t?L17d}<`BF2mqGqS3wW8)HD<@_|@4z_b*~r*9(Me~gv!-EnGB~r) zMGb-Fp|q%x&%Nxen;~yc2=v|>_B11n!GIVpT}e_hrBnZ&X`m1By9Oh>;A8EkjBGYw zhCd1CnC*5gN-ID+s2jJsdJ|MmN1&hXrCyvaPBF;8KiSmvByE9+IIS7@=KLh zkDnT2Z#{YaL+~eXG*aH{3VrXEIXdc^PYe^&3pU|gNY^$r0B0p=X6w!AeoNk+cxM__cOn8t@FVPH~oA{-ido#BSM#OQ$S#vr(=-F$Hx0=bB&379p|W~ zLtA{=X*339B=qoF9@_tUYpZB4hjL zy@08IvvigV-PA=zOr97bTMh9V0sUuu#W_IbA<^k_p}_ryBym!EFH)MUp@p>v5|>b9 z`I^dMXZ0ohu+}aQscG#rADB1n3PGCJ<^KvnV8c9W9YdseTt=_XOB9a>k+YVj!Cn4v zx~~CoC!l?rU!FZ2unlZv=7+w450?Dz;<+raxB|EZf&kA*gy>qg5)&U%g0nksf{&w;&8zAF~ zyykUuQQ+k9&G)JmE~Vks;!(S@>uyW6UVU+ww+^YR%2C$x>M6Dq%LS`e!oTj!Nme20 z?T&!}di}7id0tm=P`*9qm2_KG04^3;J|oT!j3%i;kx-pl;FF z5~iQ99D6b}i#0Bmj_V*E)>+iUctKK$Lp#*1h%USbAj;1_R9v`=9Lnh+H5-Yf${0=M z`;DLY3y(b9=3_rPi+L=_w0@8(qgrD#ch8fjgM^eosY3@{Q#-1J-#|gl12Y|;XCGTi zNWnDZ3{$vGK{2r!qx(>jzt{OONid(dKbx{xD-jIy zxgfsdrr9;%dLz`!c7EjC#YaG)MGa;Ti^^7rVx4aLD2hr>;Sfdq{0Q~)H zHHeY@4;pUQdi%?%>~>N%#Mz1LDN?OIk+$D6rYO^GYOf2$cr8nPH0;V9aaiPrO~E_T zA~R~fkbQJTESADct))1Y^*)VBT+9e4?se=x+`iE$^KC+$+QTuNUi`uLIH1YUb#SSI zIafFhZzPW4Q+I=Na<0My0DKf^ZU7R607w3ES24W)Ze6vv}+1s#HNz5 zAOX%%E?_G&Kn?o;*@fB9;5B03$_U?TgTu8YMZ5^jy4la>+P7EOCp@7)vJzgNU(ajE2E!Lys~$d z)-lq=wqzw_B2!{%;(k!37A4++P*m9 zyW;uYuS%s~Gfas@(5ZBdcTJvVU%MV;x92Cl>R)+$KSvZtMTxN?e!onO8Z6{pRtkbN zQ^`;k3-B}hxa2VgjMP_KQ5P4pKo@;Ql|m3O4D))ar&|4~T}yCs@jCa)9nIcBGD0L$ zqDqR)2!K99mdF;(y^AJR6P0(f6!-9I!(49X*!+(d>*m<}`iYjZ{n_+3w~fB%7^*Ha z&`&;EUl77#ABbs`;+y;~FJu=c4&x1V9hYDhg6XM`$h*~ zTHZpe4MG24G-O#|vb{D~b^n2CHN?O|hn$^3{5QNHBY<~7{XhP*zZ%O1O;G~syQx)e zRo>Y(AV~W|->*=rKd?m$0c(em2$;Zg3F{yBV^{X{%#@TGTW=2!?CE`ezYiZ)T)E=; z-==I|QOj6Sps7H;z~u$;%Z!NJBDugshef;oP$YxebI^;eiaKx0I!HjwT?JVZ4)#Ecdxbo;aDPZP{&d&s;iuFij4$cRNNtb z?(r$yGF2`eRc>0m;ervG;jm*|XAJ-~V?jJO0xX=FM#Q_bpU>ToSm^TMZ|9F5{2itO zQ5G>L+DvR)I;uXAcqSy?j`n7A6-aj&fV2$1=XP9O;P5ZJBhnkcj;=cSfrnmm%clPO zz&hD(fWM|~xw!_>>%zMSH+fPamuI z$d#s=kP^k{c6FzuAGWADic*Ygu3~@eddsK@l7vG{zrqfs1f<8wYp$GfB+BkTiG+K1 zK{~>UcCqoZY?Yf>1vX3T#+#ayv!FpuyB`C25w+3D{hVV#&=rKh@>n#!kdc~E55kGl zZn;l!2*(MFTb{kWZrm#jo<*M%wlxbY4GEPNF?Y_^@cNo3)?Sg7b^Q`a)y`eDuMx(T zVz?*i$?mPS9Bn(B*}^~5lI2`fjsDH_{ABC8ts=2gxub=?EuW)KXa`yg*hv~p!2X~O zWyi)j$~+%@^L&~;BYo$P4)UZ#W80JJEZspz6)&TLy^`w)Y4@|u{YgE;<*e@=?N@1eNYwYJv{hVG#0uGNTE=G|kwyoe?vF=){B&(KfveHo;0KEJ#jZwy!EN?Q)nx2W zen#%qja}oXjV@=h59oU&wq}%I4B-*wInOj(I=Y@7s$eM4tf03o;G4WMO!A%^bJP)} zMjL2GHfve<-!=se2I3K2aG21b*;E7)8mg143dHa-?5OTNJpWpO?#7$=nW#u5@u$31 z7KSW`ER)5(PYvKHhgaTY!tjCC+QAlzZ1j0Bs^KiBW-+J7n^Aw6uLaIPRVe_mmsWI5 zfu9#h!CW+UXlNdG=aSVK$-IcNIfr&FigpqDbG=XGTAff|k%>c(gpmBDy|2?dA=WIT zv;@<>p8HlFv6;!(tAc#tCu`zEN~xwLnQx_wsjrD~^`gDSP~qFN_2BsR9+MnoYC-fN z_g66rwExMJQtxc_D1$QRwfm|fj%M~|_+=z(AwT676iUa5vNsWxzcp=q*rB*~(B`7S zOO{YNRqmn!E*>dtG&o+6cu-p*wUnYB$CET8@NcaKzP_v7rQ`td>KCK~G0YoG&iyB? z&iJGR01OvH1~dRfgBLf%e1+{}uUCp}osz;Dyn;mth4*Kxf{pU@rZY07B|@XfknU=x zlHLfPanpBgcVDvv{jkMKiXXI#SQH$NGH5V~;t5idF)r<^OK4x~enBtb00+S*Ui8^q zI38~Qv>{`)ap8HY%C#q)e?qzboNDvNsY?5BNv!s-&Ndq>$&i#-lqFZVWMnpcF{y|i zEphDLGsiLoAzkFO<)oX=UH$(~c$MF^7N0o+0 zISI}W;)drCy&Gq9P5~O#o!)6k`AQBl?e~t&E68RAmE47)&CW_FmAZ&S{FhBa)gO$| zGg0VZbBOR)U5@f~C;Nl9Cao_egVGvEty4!#N5Q*li5{haX>7;KeVSBOLro!-oo(j> z9oXIHIZhFRHUC_gBEFqtTv@af-wShmEG3h-y2F)Oq?@eKPVYzDqRaaAm}6+d#=!Nw zg0+B?GL!Ht;GEy{Mw`F|>23mZ?K`*rCEY)`qhekP5}1z zi0`{UTPBN_W0OrlMc;teONCez2 z*E>QM&E57Y+5xA^zeRI?!o&>|R1Ec7!(UI~_+e6W^Q`IrxbdVIs5O=lCOO*)cvlec zr24Xm8Tf4Y%d0Rr!?!v}K=Gd$CJNlGkR=9zz4srwt7A>h_K!{o3Hwuk6p$8&4;Mkg z?ZU6lpwLOI<67wv675S=+&8q)h17;c?ahDIuOJGbwuoOqzrK3uy^h!4PQne!Zi(yk zAwju+fxJ{y&ww?VV}&Oo`x<8%ZE7g9zKQk`bn((p59U56)eb(ZKMLIqm`|^pVBs;0 zZq&n{$&WPMoa_}?x420D+`ICH!O}1GFmw*G)<;W!KWhYTY+|SFGakFE;~+(Q$OUsz zvw6ULE;1&!+l;y$tu|;5T0n6gXV<%e#EI#c&gWL)(5f4;*XL&Mm3E&5(l&%5x=;fa zDFp9YzNbGC90=h$V?3{ht4v|+9B$PnchP|9pqajoS)6EzBNLyZih=-Z<^AeQlSv43 z;M(=q?-I%CZAk}HM9)&1PNJiT!sw%)h$5Ikj^}0LCe-DeB6UiMs&8WTSjm76^Tehz zBdAG8%9dIx22EHUIhYWoAk#nZXzwCu%J8Exl;XE+e=zryG}_DJV}S~aw!T>!49C*_ zjU$qBi8ANmo8c6}QmeFm^79N#QHaTKQ1dEdBK*2T&R8l^_TjJSV-Noml#3yh-<{vu zAID6pQ62x&!=V54Fv#L39neD2LZo>0KHq5{j(MXX#*c(-l6kI(lv(b*f_0LTfrSh{ zRsA+gYj_-z-8V#Rj(Kr7D$(W^HEi!l+>~m{x!<86_duDY)kT%LJT(Mu#)fxQ6n0bw z&E}=dELqGeQP!ni`uFPKBJAtabQ&FyKc)bf%lE0((h&|tVyVe2b^nXKZ|=_P3EORK zyRp;Qwi`6IZL_g$tFev7wi-3IZ8XN&`K|Z;3}>CS&VSiiv-3QeJ$vq%Yc4PrBM|Jn z25+}2)FBpYNzFp>@AXsWRY}G4f3rEOtS`&j4j~_&>SqdVpV%@tdN{(-z%!#;O-C_c z9u5`Qe?qC-w%~UZ=bAGWrIBMP>4QtGWUQ9eGm$+lvQ4n8k-}9Xj+O>KQnsm6bWKED zOWhJI(ycarb}~incNvZK5n9TLNU#aj&@*DKl+ek=Y(a=zgK_NARTleCe9I4Oi19dY6GQRQV*SIm#>LcxLh@{=V(V;qPG`GbVKOm*moaMx#?g>@+Dfs3lB&1#qUxN0sLHF@!ERN#Zmco$2wgRG zHt2O!Udc{CxnYr?+rA^esF!$}p+;OrL$iE8A_Tf7Iv2)pz@OdD6UgrCTtu+<^366j=$ckLT7z%yZY<7Y$(n; zGE~wJGUlsqGg2TuLqk9C?51>;412jWbdd(PczqdSC3KLV5!Fut{xw>d?vKHW z@vEj$*j=&VO}{S(P~3zB0>pTS+Y$s!vg@1eQN)w9_((&B?jaUs02?{T{%! zkkI(^S#IxMnc(T00&%?ScNi&)xga6Yd@+=mGbu2iXR%7>{@b*vt_qU9{j;C9w%*?o zuI3_PKS@pgqzwWabk+(oeFWiy&jJd5A?6qKq8nr`0MtiOB7Iw`QUiGbjbE6#ieZ8(pG8;2z%oemsv$Ha1d)&*IKCm|i2>UVF&4NUKnq30 zj~Lz+a{n+U{S7)F53MZX$6IDeRb~3MBVZ_Jk$0yN=GU+FDc%?DI_0OM0<^0}LLc`_ zf3Q&0@T9mthKjX^%js1-)dna<4HrN#z{40l;4(CW2XTQu_hR;{e$|z^Q9ZDz$BoPm z7cY7CWOmP1#5$aQXGW#~-m*tAYji>LliG(Uk2zcr8AiU8jHoLA`X<+B|K)YZidJAU zN&cy6>)yCbS=gEkujw@=&K^^0Fbo<7};a3IBT1xK(s~Boo7h36i4ZW+q0@tu)VJ zIPxk^*OzSrMgFT}94PD7W(*L}9QM>gD_v zY1>4Duq%VBLiHC1;Qw`Vy6O|S`4G&H8%6Z)6tB`wR>e66nT$iq=wEagN7qGBFdXdy z8Vj7Eo8EgNE^J2pD=M5k2H82xOuKt^lYifJU!}r6sb8*ruJ@G#Uguyuqk6Q29i70E=51?sKvMTodg<%hg`h0< zT`EQL4{+6Az$8*miX`lx;39giRFJ2q7q+peNWH{sQkSsxT?ytU6pVP(eZ`TL9zk0F zGTtiXVx*Lqz3>c5QyMoBgREdRMacYneIC;%rOU8=7wVr@26b@?4-ZP;`p9rwg#B-n zjiK}JVgD$N@@nZXrBfpjvvcw<)U&_BCFA*&Hv6SLsw*%^xA859t%sc8;Q`~W*CKMh z$=GRZW5K$AI3$L22?1&4wxE3%qO!Lvq}WqS*SUEq;U5K_^+3e#VZX8}E_$*Ac);hB zVoq1@aWCk5{^Y}V@y9mnEp@_1!ItZD)_auw@{UI5gElQ=F?95B0mlxu<^vc5Pm&<{K-7hB|PB6Y&a?E8cFnX(zu2aMX z7$noVpObuA$nXou91SSR-$gC^G<2#$+Hq5;kFV!_J$7r}$q zOTu$sX}nx%P&QN(->K-GPp;^HeAk5!!X48u?n0uTDwT==kzlP%-kCTWoT$9kOTD3n!V!G z{YZdrT<}XdA0JmYDKtgX#*R!RY8^^kwmUd_eB_}86 zW9H`TLBkY3n2I^9snFSa`vbr$D=bTi6p1L9Rs&oLHvneGl)wkx3PO3E`dQsD!D_d! zz=4p0o(}60q=0=mL9;*}Ob0qSYWM}fLaAR~t3f0jihTt_nX-MigR?hWVxqCMpNx`M z6I1q0nBJFSbEI8eTnIVc?JcQqkB{YK`n}AjvWIh)a%9+H{#io!R%&)FCO;WwRGAA@sM$ zg9&eXmFyoSdhXk!%G4*E(06ol?~R9jAnKxyxf)RGZyic5+nHT`qp87k_IMx4e4c8aqDd>W zuFW`|4RQ+t%!pGZy2Ap>yKAlo!cfl9-}JE7H{(5=qLowY9KKZyqLr$&u<3T?<-Bk1 zy?hACJg&WUNEM*%$O+bYW1Qm{ZEgH>zNUQF^4#@3kFZN-chLPhE%4rabM!En)Sb^a zn|MV8|GtRc`cRa&@+M?vN@;4eUgmA0?TJ;XoUXLjcm|6u$0FBEY!$uup;y`1HqSy0zaQyfOVgd zk?Rg(D!WECP>9V*0Wl{vI5$f0R&8RqiW?0LgWXHUMZkUQ_Z)`5W)Ln08as{b%v)5A zr6DIv1Zvh{x!p?`urv|5wn)$ME1}-!4cwHkGNMZVWt7}87AI=qQ#m%eH8^@w4Tm)n z!2TkdE55C3OXKk4*mmoZhWY-lzU3E1)rO<6O**e?!`M1|{-sEx?wu=3_$$6>iL;6c zd0qvjs`4=pbxg z)jOGbAh%(-Ew|ivBVkl1hc??Z@g%Lu!K=&GQG>=oZ4^Aef-;x%!ytoyjxbJX@gKr^?Yx|y(+nt6R&~bY<=X0g$(4#tZCU@Vr zu3o|2RH`bT^6g#LyAZI|8bZ(=b^1V9y*eB1YPgigqr3cXwN$o;zGpVH#;yGo+nCu6 zVTohn$3YNETFw8VHkVChAp$s*{$+2)ruhnyDS@DXxt7vFZrJV1_czr(L*xhd4*dSV z(S(hh@+2Eqaw}2zh1Al$Tq2`|;etFDn0E8qTP1O6Q8EOxLSw=16;j0C2WKr$gT_aC z7g-@PIbRVPMS*#RC1cTc55ahYz{QZ5Np<>JsWL)K-~WhH-oK-uP-|G*Bu~s4O7rSi z9hw_X9$x`!9)~X96=QOrvs4w^7~(mB(PUHs*)YUB8d@oFk)^HZ`)`Pl=DL8Gt9D{jm{VtNLA&dqHQMe`y@nJ{)i=-z%C)1NIQs&u?_g9Mz(sa4SetLke`>id%&(PC)6A6JbOo0-Ru-SYWTj!j6zkl0L3n%ppAG|Rzo>Dig} z&fXK|#{Xa8zE@QN`oi*d1xl%_+n=s1rW%tdXVENtj*V|YP)^Tp$2acZc?2*#T#TC7 z6hkV)P#z+`-!{}uS1%~~{`D~<3J4Lo^=8G>%yIPC#V~jKg;Xg?+5&)Rzm5F+K(>>A6{H*LwMU!JG^$Y53r*&tz@Ahf3OzU;C{yqy}7b)Q{Q zv{x6?uc?%D{kif-^|!z(S7&!Sr|KO4*8sOrI1g3F-#S&vzD?wrtPprPvZJtFeF6bs zk7n(~FKGL~AjlxS$+;XG64@F5h7UP6lV56C&u6GNf!&fo#r@j9eU(ytbAK?Fb1~90 z4pz~CM$w0F;!;)MzfHK#VPn9}Pk&AhwxPzpm!qMUMs0=ceZ=6Cuj8DQ32%l(u#=j2 zFqHHr@nFJEMk9YBjRWQm8v|+LTU~SI?)L4BnmOYi&+1L+GpspiOOE|H9OCf&e09^! z?b}lfwyuD-gnR`XhBvkYujGCAQg(RxIM#VxHIQK7==SI7Amq&d0+e2x9~Vh>=V376 z5Z^{i=}FIe%2q~o3&=E?AK_5gxf*jobse-33B9$=%7oXMBA%m^7H$;QaT&5~RcI?h zQ|F7tZR$%5MhcU592r1d9Os-?ayR=@!tWMj9RXVk_RPnBi{UbkYR0qn-DT?xK_-h@ z-fyAQPwT*m4h~l0b;OyBa{#}n1D=#xI_n+^FgG#ugFoCoL?TX?1 zkkhZCRGta?%g6&Wa7* zCNE?@Nbn6?GLQ(vE9`ut2u_KDJ`>q?C5w8Oc4Cc=6G=tYr9$Qh76SDW$20_{`E!%Prm|Meq>zNWAcAPbtRVJJvOE+uJ zuWg+4yyp#Q#O4ST^9^zH`m2ECjPi z;|FNt>mL4tMuf=9wJ+)B6TfX3oo%|q-P$OUyyB_?V%Y8<847>6Kxv0NRcoO;jq`cz z9fFqmCi)9&+wz{W0Zd7*dtn$N4#t5Xy9>?08cw{^E7t4S@EmOY^;ewvigSCKGfkdA=5xug#Xi4}4hF*RL3FM;}KW4~c^q zVW@%_J{*{mSK9ar4A!D_f*3ApR0pLeE#IxSE_RwI+PNx&a5c8jtmBh2astD;c~EpF z=-n3m(S3En$^;{{Qq;2Cpb+Q+YH|@62rjJUb%ubZ^O<< zg!G0x^Mt?~db)vQ9^&(Mc-H)p$oVmv58L4eqYFC+*9qOygZYMesxB{~Lbb4taY;bR z9uU40es=+m+DLf3CUWI(Bt-C12O2Umy?ci78#RYY*>~q5tMj8hYUiO;H?m5UE9vkC zt#p1@_e8^QH@UoRIoHb2Kg94_95n0DiL%Hef$AQ1zi@YfBu2QUe>FhPuI4!gzSDPY zsADmJ@2zpLJ#kapOA8ikha?6fESYz_(%J4ASu^i%8mG2Di$ zyvq1ZjiUz{RYdMkZTsyFpepnudk12}bf?Xx`zfxsqqrwO+crQ4({%>BTk5Xm+nY_?+qeYi1R^JW$cY7i2rnI09&m$ zZjq;;GP9M}pqk)oB8B4&EgrlZ;ZxjLi>`=@d+y)C_i@6inn3o`V~EC{wL}Nm!TJK) zC`z!+l+KjWl|zZV4()di!V1!?;qWU{YV?jC!?4uUzcOg2(j*nKEazWF1y{BIUq5Pe z&h?V&qY7>0gzze}&hz8@yW{f?6`_0S@7gEd+H_Z zG1GSHsPTnr+Wwft4%JFhySx41__$$9$A5UshBSqSGdN8PE}9HiIdp3fTq|P!>Cw6N z4E19(M~Y8jepbRPeur{T^CIAV|6_2HFy-m{X4%ep7^CcPw2?r(a06GfVdV>P-9G_0 z&72|c_OGvI7|^9hq}?-ivBgWpSm&}I$x$}S z-MtU3>2HGysYMLJEe_nrCsFm3X?(|BZSV+}tIWK-UI45EaM;8P6gH#eA$A?Xo#tj0 zrKxM|Q67#|N)>L#z}<@1a>MPEnFinH%9N%r*4y1)YM4DlvFW0;F3^8zhN8%9_3+$F zW$+E*X^%g)E;S*PyOZ96A@TajeaL`_$ew(&*jeXDvu1UZn-hpE-CF^6Ow{QU1akEf z9k?~qwHa1?iKY$eO}^4?$z||Mc|Mpw`kr)~ys#2c^!0}X*%;)~7~CGv`zi_xw23(S9NkhwoK$f42V z6hJG$eF@MYx4)I$1CZGq@h5x3nw9xegFN)9L0&qSYy8w8Bf`uz+wW>voj6#z_tfSf zaaQ-6>hBk9(Q9YQDIIh zK+N;oSPj1Cp=yi0+=PZs4;#*ex?XmDyuS<&i8rLfQTedPDDY?BT^lXAumTE78%*;+5BFQSLstzUWcojt-gnE zEq@;(Nyp}|+VneU701T%H@@yFU?gzyEAGoIIzNWgbiZ@s^{eUn6csegI=mKI+K2x* zXz`6S*T#>|FI#+EvOKyr>s{Sy8JhaV_b~4JY9igXU!fMD6j?C#jqciT) zZ8MsBQWGs~g=zcSL*Z%@@kUP%lT-s&cy~7d>u0KT@^M*N$^vE<-n;H(Cimu?VaHs} zxkc~GSF1?ctv<@rtLB3THf$Of8*$K9NI;OzLtR&? zpO;#9Zh>$n{r=-N&FcUHkCx_~y{7k1z4X7Gfs@6>%f849}1eU(# zw{=gvB+r>2_JLcX*&dCHrhjyo{Q9_RA3Zxty0{(xIS*0mXy#0BEg(0J(~-5iaTN0J z_~StErad!AsZorxVmRV;)BEgo@C7aS`j|+5ULNaJMK3hia|!jK2c8b|r={9+_lxFZ z9wvO)`~j5S%M$d5KrFhir-$|)?3%B?B0h#`DO2Z(rn1)R*I6#@$l}D0<@Y<^I%(<9 zR|%zprzCBiHMRDh;BV6R@41if@y9nu>fj!Mb*mqP-k0SU-S}f1F4SPD67K?$>#0BZ zmuSnw)BW_nU-`CC__!PQ;o!#V>+U98@X%sGNk$G}xO~C<=Ctf45bqtnklm^3*+P9D zV!26WDZs7d^)bstnzQSlMt4FY<_Wb^h;qO5_#m*w^LL^}93Dbn9ZpcLf)dRV1!nRF z<9#NMk0~Yi^ov|`Hgy|y6DW+ci8-04A$GQ*iWrGT)1MfmmGsfd82{R~0syb7A`?C< zR;2ocPpdnrd`ewP^j$o=Q=vAJ9OF4}9})D#6mm+&SfInU-~}a*=L-D8imq=0yZGM^ z3|69WQ>n%%4mR@S z8W~9CD-;9D3Q6Ti0(418HhM0Ar`AJxM(AyHrb>>BWMx^m78Zu9Iu+Ew&$zA-$(bsg zO{eus?1MhY1sRp@PMDsj7`o;Zi1H=eFzE3r)2cac>d0>DP%Y;l7daq!FJf{&1qW7v6U5&oG>VaJ3{LeT! zkBSydishVj#)+xF*;b+zIIyf!M93yQ=+CL$Ddg6sa|$h0-3mtW z*+xLzI=NU~$uC!L{laG$r~mD7%RyyxC#a%Ca_hY;Vp9rZ6Ch8HZ*2AFIOb;hpWUSM zfYY?~Mksmhp=IM|^qwZOCFV_zX`KIEUFkugpr-eFHrEEF*>_wJMDJ|KS|mblaXj6K z)C0f$TNu^kSTZ1`fpe-~WN|oue=0NmJZQz9N#QRcTSjw-KZ#96n1-rRSQLd+4fZUvbh=r6#I!sk4S|2c#^i;= zA?8XLhbS3Jzw@ed^ikvJYsyNsO8wLi`a1d-UG#jiB8Pec(Ue)HKfB{k3H_LHj?BOM zKC(q;3vr>eQ(}W444GjC?7UJ4B@|KY*%pF-K zstLp&eQEF|k9R5>*$1Y|COb(pPxIUnrF&`7gu1Y*llCQ*8P*8*EBfrd$W^d@_96+y zG^9C_?IRN{u5Th)x12P_iz2k>yZc$L7d0v$uGTmaB<>_04;E;t>JE5(TCM{5>zqYN zB%L_U4z}ipKJ+}U-_Aosl5msvVQj9baJdS8go|=Sy4;N0ZSQS|6D)V3{Y4vK*PzIB zC!ezOB4dlRDt3K?o~6Z!7@vengDFp3Nhkcqb{O*PEp1s4)@X_S#HiS09j^+zTN;!h z=vD|WnBH0(!pDXu><77gWkEMHs_7KlQD0&md-6#v#W zJ?3c-c{qAg$oRk+Bbe6Rwxf8{29jH*p1@GZkH{FEatMhZ4nvabF_AM6Mep zQZ1Ef{E47BiUmSV#$BNqsu{N>#-kao8GMUnbyQeb7^O*9Xtf@8gW_ipb<-Dyx3$z_wjL{u*5mI~<&49~;|c>G*CO7Vn}!>2PrKq8 zAsK;0JnbA))Xbf!yJd9vd)9X_x;C&sbAe`fXN>2MB`RNR85JS7!ppSr zS8m=ORoJ!3UN!}~B@e>t6y$EXz%l@?(y?#X| zA@(CCrQ_uoAmaX^Ae?bqFl{9U-wVQd9Q^$NH~;~aOvD8-cG-`qL3e z;&OMaZvr5FLGvuN>n0eT4a!~0K&8S|4*u7QG6({!DmRCe%*vkC{zXajJS_O%X zv+qv?XZ{=pJ1VGuV1krG)^jIq_oll)iRR2+C}_3&hYJT?1j2E)` zdhgI=xO(VE*v{RuvG4UvnNv$u($+~vAN-8*cV+S;5=SI=;4jUQ{NPFM}zjO zePx6rHyKyW3w@k3N#BTAMOqoa8v8k%9F2l;bws=q6OByLUpGpy(1vdY?!n`A^>xxt zs!bdQT(AX0BPLQ}`L_ZeTxnU3P~-KUAr`$b5?vCh~-Zo9kb#jUkvwz?nF0ohvdyE(W|AA?QcJ z+n6vpEXfuK9pAus!9YS;k_G7^=q_N1Tuc0ReYN?^t<4CMa})B@m4jd#W*i!@+%j3d z+ICB5&UZ>BC#4LL%V*lx=$k1BoLu`XvdlVYw0y4?$bDuFn6ngm_+>-c$c!u5`E%=R z16Yp#o!Z;FxLVjIX}nZ?nJ;5YwY?ab*VVv*%O!MEh;9m7B6j8`MY~d;10cg`uu>BGci)C zTJ{51rZ{;=^wPQM#D2K38{orf!X}M+npfJRf~cyECA#0SH^|~Tx-1V_A)Cv-J;bn1 zC;D`tU5n9(x&C%h-C<2GJZGA0wS05O-1lPWzGVMaed0J2$kxYw;9439w#Zg-Q9D=! zI?v;5?C|u*bFS)y-7a9zM!A}j#f7d=?afM=LIje-nSrXKMX`eOwAIl}++6E$NgSXlUt0#~+#NcT@H7cv$%8h3ur z-({s&XQG>1lU)kpADpfxFR1Mz*4J3J!JL)lS96|<8=;0UwgLDj<(&70w_~>$wLek{ z5YcbC+J~F%pjY$gspVBTnVw2hHj(#(K{~$%wiIo=wRhrXITW$zV>36}iOTV%y{m4@ z(PJX%S78NONuy&PJ{lg1ST-1E-bA&(~+#Jx@;g?p|T-X3M*^8|U!jVQ}XVt<`Jhrk$EU@h)Qc zJT(8xT;12zY)=nQ*=@-B@~#4IcOhzP$47zLo2&X6%I~Ivcg=p`Df@lhmSsx?B-ilbX&l0ayvLf7K@u z{#>q-Fj0=#wWm%`w6i8-X5_AV3?*)Wlh!Uy|U9M zCX)nUGJ))P>9T-Yb^*A*(`7Z=5-{cx30ptf^ z#om}5z=yO_0h-~0jb}L*aDgBNfJH*MF@FFrIQ>)L{*5*pIkr#eM(C48Xx?uVv78o) zd`p>BKeYJLl;k?|$sglKT^fPsp1H`J;&}uA{A*>H~cYCo2nAh5~S^qb61q4b7QH?s||RXm3DRxe*u{OCY0*bf-3Y^*|UpDp1d zp^^*M$8J0Gd8o`|2AJh2r55ghE_<^xbYG5ycqgRi@x8q;wB#@1bTrk{!>TUF^N4;5 z@Xk?HwjT@&?s986_w^vLuN@>lzyCLo+jkoLpHv%WYVmzN=(hQiVc+aPMBd@`sUr-d zGlckk)sSm+&W_*7gA^Y)20RB5VnWNALZt3Ogr4sIo`Va568?J>IO>(Y{f3YbefhhR zyoak4z5Z!@w^gf*`)F=qMf_B>hZ1;<{Qi1M*1eeHT%n}&LgQ`V)9G9!O0`O2Ibav3 zni9C-g69C+xbXhZ;x`AEsJnyq)d=c-!oDGqVVAQOJ2Z)I#6;v{UD-36c<(0-Z3Hzhh>_}7({47T_DCU*`m!8A!R#>pL3DwhoYe#Nr>{Vrd1-CNJcuht9 zs9xs41zS?-gbTfxiub2P`bU-q#Lr6Y+WjUV1fU_(aa?L=9&ei5e$tGds=%&ct?z_* zA~Mxd9Q>73kf7Q3jH7*TEr8ic==VA5jIOGTqXaY`6*-2mwWvDNJ~cx=GG@PP^>tr@ zJbLkPVH#FKU)|FUo#}yki*z~TP#YDsTug&uM(|2&I!bxSz}grL4JEnfF}o7$lbYo9 zYd*A_^7`?HwSJNSiaGixeacqnq7m492Odg3eLzx_fxH}G#svID2Ss%7M>{-cc< z1MHk?|B!J+=G#!_aMKh}cgjJNYC;7nP!EWWh6{=S5;fb>1L{rnFvrsVV=j_5#Ov1a z{0|G1^R2}V`Ii=W?Eb0+5n8UX)&qFnew)N8-Mv27=a|Ue!=xFvr__&; z71zkTLycOMp|oNCr2I+=W2iVh4AYcv+`Gll&DZyQKZttsz2Wh{d~$28DS(M$qVUvi z1KB)?4H;JfjFt^jKr@0?7>AjCVq04p;vrzMycaLDgc5~)TT>ER`n&APcmX_9oFqp> zz1O>RNL-|hHR({_u-xq{s!||ms|)^iLAMI!6l_v}y;N!RnvHMfFR4vf;7!SFOolKd zt@K7>pyknln!jctVIdFc8g*i!?WX0vcMx;(H3hp?RWF3vW!ti1nYV}hLA=#FETBjs zfEjOFcMJ80+L47O#m_x*tP-lyg2yRvme8 zfb+bJ#dh<(jOolG4d&G@9tgN5ld<+xw2jB*14#`x@nv)i-X1kBP0p5St2_#XwuS{d zP_|doqBxsG)njh4Fmw`Dx;VbIrt727X24>Vc-X;+adeFS>5|W4Z!y1p{;g$`Q*HY4 zqRULy`3$R`rSzTC7Tu|v_#sI~FRTZki1(fQ8dYTBz;3$#&Qh~HN2C$ zXfsD=?sEgZ{Uzwz}p^>*h=9@m8aVdpq7@S&M%0&*BqeX)W0zANH? ziBw-Jb?Hn8hf8kh0lY&lGXrrJ9UVY?SRI}owLUKtUBZ`IQPu@qN7S~gIse*e3n9P; z6=>&7;eHcsmi#*jdh2_MY=TZ7KvM>^e@qwL+$e>T#D!Y_6mVRW#h5>ZMbv=A@=nE1 zQUm!@iDLOFUrza5MhpB5r1Jp;Wi=2I6QTdkH^_mfqWQPD{y(;^$|vI)A}k34s6?W< zDZo&)`kp!VpACevKTsPnh!ipZtF)S*hacoN)RF&bNg;r*_y0fa|LJZNtne_%a*~}z z7ef(Vy10oWiNgkL@PwH0f{p3|YGQV`Doivss%uPl@K0@0hugWi=;`{ zsFPIfY0LfOXmt@K4=}(h#q8}g)t1Bz=4*iV!mSx=8 z%LF2o{WsUw4#u2Y^hHTaF(OyTeQ|&4KocYZpVf`^^>dS>^CG#=H(4gvFcw$w5lFBX zAx9$Q&zd?kuw~B-ZUQ_Tc}9(I{-m>XzpP*W$mWF^RoB)Yn2(VQgBIQX<+kAu?sclQ z8Bi~nL`*OLGfce7{2axO&ZC%|i=VMgs$03d`|JUnzz`KL9sc`l&tu=E_}A zj{|$gR)?4$8X8Y!2ozurjXy$-BStmCpBGv;s#{8?QH#U2*tzBuG`POcujd>)trpHh zW+&mp%!O36#=*xAE@SAp0%aBoBr*Gx4VUuyj|JgsvU734sLiw| zqfoZ)&wUJR$YlScTy%53lwm?&JdaQ?2HlRw=hGS^o(`Q6JQ#eKW37y*0~#edsBrP=`CGFSXRS}GvUW-gc=YD< z=!mO%0PePgZ$}cVO*Vm4ff&r-G_>km9(PnXKW`^EdNF@+2jMoZc6syEi{bhcd_`pA z_I>ANeqaa1y6JVDy9O+N)rCrewGcR8%rk}wJmJr^UT%}6$Up&=IkhJzO!z=B0-Xpr zSSrT=I^r4O+YF&llh4cQrZ8UJc>8APS7GN|T5oUfX(B2_R&?R;OgB!exJkeo_utgV z>r@_doPZ>*F=$_C0Wz6<(d7;nrj73X-Y;>D_)+^M-J$ zA2ukwhy&G}QztR&k)1wdOn~C9;0Sk@@OOhR%BY4BHM$fGop-3u#O6$M=boD{8+xyU zdV*DPxX!R}5g`UgjJ0qWp)4`NGb-+R1WWdMgERdy@pZ|sfBVK4&|7A6 zL~G$F<8YDkX@bvWlS;%0o+_XeiaIbBmy|$-iVVj?a*@i-!3C4>@plrSz)XV~bb{xo z{_h}OZ9p0e9>)dsA1Am$_!ers#XU@!#W{l3VG$(DxBd9i{o$#7B5z+9DlRxe0ynC}txd%!JpDAoxKsqeoEJ-{Ux7S!!*iAf!zO7sAk2QQ{3EUKV* z1l%Hya_k0L|8fN&wMk)wc1K0@4~h@Q6X5LF*X%sr-2{Et50jC{IojI!=1b>h;Pe*FZwwzQ&}m6{6aRZ5_3c;Tty+}W zrmd4tT0$7EU^o%$66jB1LrH-SE@+xPFw|I=z1U3WQZ7;06_D1T@$kyHFA_o$wQyZz z+LGwetG+>O@~~u(I3#A~XushdpLQY{gfk2vS)mt%yW$C$U|Z7V`O^Hs3@D{URgqOo zi2=M&37Vushl*Adk2@?A5~nefzH zevL0zairmuB~%gUOL;L+TpX2v9lk@9McxI#pLHy^5W3c5wGIW`SeNWp zo(PSBMj34#!#y8YM5?ft{1q%-Looi^cm0x2#AGN0F1~n&rq1j-&B-ee>klH1` z>PmTfn)k9NLWg1(wB7PaVTJfsr*CH=T?TE(BPGH512~A-K`BMu$NqPuc41AA6tA+V?MC*PQI6zd3vhZCvG((%aXNlKIpn&iVB~ z276YSwA9w=M|Ll=DC5Fvl_AvP83q*)6i!-Md2F_6*?rKwQyE4WDMTXJwmY#vr4 zxeSt{ryo`IpT5!$(cC%!w^|f?=^fW?O0<*fzU|!$9bYb_S=)0XMP(57coaN*w{!J1 z^0epqx#{9ipMV00yM@W$IY5;?C$nB+7vFDBbGmHl(*ZHzDp>#=c_H4a_n92h`{?$g zQQ^AP_VjZKIe=kI$s(oGhxMf|H*~i>TA7W`%(vG(+%DI*ecKr2!m8GJbh)c~e_Q4L zjTky3InZW-%RE2{dK&A0JDOIdP8-Byb=al;$ej7deOIK3Bsg?IV>=?9LjvnUX1}=e zS{h0A2T!=*EkMhcg;nLZ8`X39^mGRHIt^K1@*HYgV^vct zW;qvi+RJ~Ao>z9p*y8`904rF2kO+sGsiN&B&2iOtDRG+_5zjt&)To>eX?$1T`{RgW zZL=GR4@BNqt_DsO_?V!%Aln}pXHf;zJr;!&QnK|~vm(h|jv z?Cfg{ifB!l$t%MG;Cqj3+*d}cq6TS0wsC$;s*;x12BRwcl&?F04Q3i3Y}u$5`gPtx zcN0*dSe<@M#Uu+u<@#56GT(ePGG(RQ>bx!A@u)p{z{(6eqSlnIQ%kKNBe5>2mO^@T z^@mUz3xp|4=c*t@?X=quJ z+2BvD#%iV03!k(MjJwB|5YW=A*fMUt`8jWkaeI2nWwBY9^_?lk;Vx!U*B5Uq2`Rd*q zntLAy`4;?A{(y7MQ`&RtjxO+-eeDqWST`izb#rJ`I6U0M-@tb&oryQeFI0~puf>6= z#QVsA6!c+E_~OUDuP(-EO}YD*D^@-z`RdxbzddoZ&G1J#TYK+ZG!x%21XWmC*7^=Ma=4!1<$=a*gkbF8^-3A>`v?`BzTfz( zsWe~1w&Z$?LWFO!@o*4$l6?l9k}HWt+qEdFbr+VMtfqsiDjHa*idf{7oPK^!sJ6VN zJtQI+TT80F8o7Y86q5qLayM$=iG*(dh|OT_BIwWZs;OAU>?-O>*aYGHGHvcXXGTR7 z6<6W%N8?PdM=Vh5jaVnT4+-l+{zgfc^>d2PDNiOu%tUPkEY^+u1}d#QzuUQdv*c~81Ze!FchKp4jnK}cP zUitBXt$YKF3Err0OC9I~2BZ}cM`|WHJVT(vD^lJgYo&FE2K;hFm6~&)5at#&pqwyJ zEm*;BM*$ofqZVtvhfmuTf~>nuzH(AxPW|f8xZZDmV|fAdxK!6ySs!5tj}(LqSleB6 zE4?tG*vevna(5nE-imzgj;h2Y22!o;2D~XeZc^5orkkohH@aE?ZMG&|PIPZAg*UYP z;VP*BAPRt_5X0`uIUa7pxr7LWGDZr$9_U!U@PqwL-M>*px&1;yR^Mbb`OxTXuJ6Q@ z*_@kI770a07Uow4pgrFGe+ogxXi4QmduQo%3W85-4j4H%KybR$=(u}`N=R0_fTMY% zYDg`S9LnO4E2pdG_^4v=_F>uBQI8n#Nds)G%kRe*n}7>DM?NEQ>lNEQhSb8R(;c|i z*Y#g^S~(xjPZd}-%E*s*^dFc14M^>tfY%5!@c29(R?b7?)&>A4pnb+u{r>fTMfd{% zB(;X~ee)YPX;npkR{1FB?4e{Yv?huE zD9dM&L$BHzXwzWHtA`$sQ@YvQbLleLC zyj3~Cwj_5wg&uu8&9QT-qF!dZ!GqxFS8E8&UU(l0gw8|?(EOo+4;=>Y`s>2xWWTii zhhXPV>kkH#w^{12ycH`GHr(Ny$twBNN`)%`Zgm!G^yKU{4TWN0gFfxzKqgFSX+ ziT|A|Yw7*y&E1ivfOXIg=xGfR-_iT_u!IKF;Kz_NRRV7FKB}C9o)J*La^V;_QUwp# zNnf?#W-mjAzPpV5Ym32pn)$96d~?RzA-F=JLwDSbM(L0;tKKI>&I_#o;VJsl_km21 z3l>uWLK@;VTsJAA2s5a0w(!wuW`e#5^RcDgEBI4Lymrg>+|lb9`|Cy3X(1v|p97}I z{h#qjB$@6Ltg_E$?+m4E@Y(ZUO(IGbfM47qfT8Euk3f9`aG zKOPIPR~rMF6hkyCi|G^hoUMj!p%`j^Z~idT&Hi|4%OGant-0&qN48ay^woL@t*_}1 zN)(-4jkinI|~8HjoBd#nbqP&bf*Rrmj(OsToe|ICy1A)T2e?UZZX zQuE*2Piz_WI*Y@MLS3_**?8d`k%TL-D zLYhMV*Zfu$sOajdru&#tW)I~$WAADg^K#|hSE?siRb3S*k@!APixrFCW^In{kS6=# zBmG`FTAqZ;+M7MVfMC~h~JD4uv&wmGC`WlGbgr0k!6!QB09Xp(~Z-shqnX@{mdsjOKQPRv} zbp?XLLTBASksu|dpb>@=QeVGf^K*0?cgSzR78XxgnH7>e^n~%)w7FXn_%zMd#O%25 ztWtD(ed~LMSimu2^@qrMpZRfw9WDZ)5QG}MO_m!i3b9Sz@{~xG`wyHHFdw@4SdTLs z6DpmY($Miu#*D1n4tb#7lQFS14@3%&b8Vp6Rf5_~79l!$h=>LnVfh_`2BVw&ZV50u z26cb+BR%y^-%Zs}ig^iNQtf4<64>^MorEDIcRBvf0_(<|?)+9cI=1pl*7n?2i<(x) z`EwP)8$><<{{L%YUQgGSq?T_j<#Fv--S(hMo^h(Xu(apbyX_4tNVd0eYiQ~YhBQD8 z+xu9#Y?=B$&|?jRRnZsZp+LK$@WZk|sK#PL!LP^fSU$tOGnndc*(apKu;YKYo@%S? z&=+q-m$KgLyoFWY1}{ju$d$nl>*YP-GcFUF+7?R--&{mD;d5ppk%OfP3rmRoxQh2P zFwD3(`x~V=_263kJiJ9>N>-nD0)8f8Cq`2ALXvK=Fi-N4CD}w1e-*=ILMZ*ixA=Tg zSEx2L*PB*o5~l6Z^zVe6zFO6L@;>R}92QyPaL!LKt5U@)110;x{$&H@J26jN;`e{| zwKw;7)~v=YlW(u=W53{rRb?N}%RKVlVIb=Ry>o>4vonsd!l<4$;vbjjRX9;KK4uM5 zQ9$7k3vpyps+icax_3`=?9IU>{2*Y39b0+g0}1N-)FB~>SrGz5-7~9Ht?fq z!dD7GF5wb4*|M+#xw;i^8}xRo5v+T91->y{q?Oe3Xn6V*%@fQpj%PMx`HIoP>oDOC zv`ba;W6X#cmnXpv_+0c$8y11;z$5s4%V(Ith!0MMHyC@Vi8o_?;(s-$CSZ{{Y5Xz7 z{1FUvJp)Gz2Vb>;ppzKP8K8x<*`|dckbUgl*wMtHUMsz zNZ3#Br; z`cvQjcXq|`^vXC~EI_5LkU=CE)xU~NI47=(Or`EE*+9uur@N0$#pI&1BNa%R z2k^Hn9t*Jb0}@t}&a{gm$hjSx)8j(-x33P;v%jCj0sM^PJk4xHNJhrGQ*$-@rCUcW z9SzdO>uXjFHdKX2*-$oy{16x1XC=mEX86L%eZ?!WY*XLJHyDDU0sG)MKrMjbBkadhK-W?CIoY1E}p;}hl204LffaZidQ zn!iHXar-A@2#mBk1fU1u;b_}o3U(eP$G4=l;vKRz!g>wHqB+`^ax2xtM@5F=T_D~D zCs2RgK(Y7wI&~Fufy~gPr>ztn-lYrtqAjCFWfd)@y6H?4t7CfF^b;g%bt>tT+&@4= zD=ni(jti{%U2BYRY^F?1+VF+SekV4(;@Zg$UL60~gNga^+h%pW=+bYKNU^z-IJ>kn zNBr_7VYt1zKH_V^M`ds!c6b!N1x?cgB@8KA48F+xA)H)8D*4s9DV#Q4W5S38(d3H1 zvZ~+zsEbIO1!FA*a9Qkz&3+@*v6{>0T~F5gIO?BH8QFKE^%rUDA0pl=U{g8BPhfH8 zw;W9909b~RQ zsPY7R1LY3hk$L8<1$L9jaX5)@U=jRH^ea3Jix-~a1J}Ks zC}D7^Rdhc2XqBo6-oVmx0lqz}?i!>UJt~pXSj{ZyY3eUow|$Jw zU#;^r*VY7GP;jCc`JiHyq`IPwDjk199J>EL zIp9(FX9e@0m2eO;bO`c;`Q)ynOCw{t^aEAG-KC7{CQHyX*W#RWd*V)wMMrzX)WvMb z$i^~+1!-{Wk9T{DI}gL>)vugsgT2CE0>M}@wvh&Iu6OL?hNyR{_qj(1yuVbc8efs#2c|1m^Bs>lUlp(3@$4vG6; zUPm1R{I2fl)R@3lAeL?W5f#fR18#61jKS-VRBkZ*I{@hc!cE})bp8Jv#{LQter=Xl zRrQ)joC)EA;IGNXYi*laX)0UH#UW6z%P%3FWJpu(eRps$G~7CC+R)R|`i{}+Sv>Ir zp#VzNtFfs`IYxu9@LUEWpnDT&zzMjxL6`m|RD(aAA1m4tIJf3ZlP}8hx*oP*m&O)V zl{YeI_j+O_=mqM^R;dyyUovPDmf6SY)GO&38Nte3MQ;w5z9VTT3HQQt5!guHUtWUv ziHg#uO4A1wkC&D-SN{gm22hZ%#>iv#=+a|}B%Z^6A*9^<1cu18S`3~5NgEg(^fEp9 zLo({yOkPA)OePiZKW?6ySkUaSA|@CHb|sv|NYHi^Z#M_3e+8 zjOCF1D)$Qu+~rP;kf8T7duDzCU`9tey|(sNVdrgSVDKr%FSWjgvq@{}Bs@Ia73h69 zU!mO<*+cqks5=lk%j1}4lc8jCA8*>JWk-h)A0K>fdU{%iG4#3L2=HX{Jl!3R*T`{f zIKpd}z_gT%!6!vS3PmPZ+?bmKT7=3)MavZ_C!0sAyeLiJDV`l2bx(>;Vav3yDJfic&%y|EvT8L0}7V^EfHKMIAW zmX6n%d6l>O*)g*3+**##Jh7w0FRi`Tm42bYWrV`?U9a zT4ed>8McZP*q_zDTZw-h<<=-#ME*cIBHD4v;jsw*wSt8+qmeMH(n3Yk1&`G%E+sAP z;^HFor?J=rS+?6>QN+YEi@DA@CYM3Nm6FR+F;iK_%A0M-wq}^bYj@z}z~!N=_Pj48 z)wHT?gwew(cuE0$PIsRQ5t5W0)Eb4Wf46w2U{|KN%-f*3&pcLtqRb_|xw#4Z=3jbY zPn9Q!O!U29KD4BhqY8O^N=#gha>=vi^Ki)Rv#eMC%?vzLQl?+^x%zX{lA47*rf^lUuY>QO(yXO?39Ge4v%Z7V| zbdzc&*HFHZ6*yVr}0?bgMg6;j5p z4G>T;zb19tEdO~%NB8Bup#9XGz=W$~&}+6>dwd_TV_a8a56V6^w3l-gMfj(+!|X}R zWz}JR_Jh#UmxDHUZ*7$LFyTAay1c%(uan@P;^RAzPcs(+b3Rfrmd4dUkImJCwd*A3 z4$O9@&wA;zX8?!AQDVASx~ZIx*+^=JRLfV*FL25Vn=L)Td#fqZ87Uzzx{anhznhF&An@;yi>45`yKzjR zb5Ek;znkOT(@+ivks;9a8L2VjPjXnefBG!xI-NPmvnSMoiNzJ4L?IjGO%!{iws8v6 zmRx6@?zz_*LLg$p7J5+XR9WeJy=fwtqI85!f2)$pKy_qeIOxT<1Bgqq}UOn0)g*isJUNHIPIdlPjFX- z0XXycw5mv~y(r|Ap~O#&}tm@UkNR_wlPKbV><&jkDhqfdmR&c06;ST5I=rcYu} zM*LhNJY{PZ)J#sMjUwqN#KGmmRo3PO(@jry zg3%v_H`lyH)Eo!(GA*(?q$i^lxgyGkrnMqb-Z>aE5%e&z8SkpaZt>Ce; zpH82}6v!2Gra)06Yc*;%Umkf11&@@sA4nJDf)yj-ST%HNSw4e(TK;O00kcY>2$(%% zEA7HJx%n&|@r0cGKA0s%*)z+exCrwXG23%vAp>J6v>20itfK})<#|+7O^$BkRxivT zovl&wU)>2nkw_NNW2^IePM1VrLBz{x+0HTG3*6BdV$~r@oj4^`wl7)a&%!7jz{tR^ zqs}Pdt%Iv2^Uor0Lk~V8Nihdd>Q4%C)dl#u#$VFfdOW`TE>-;vKUNzoU^k&R=~F}2 z-XwP+xiXxMR!i^_zY9J4RMR~*p~*tHpl#6E4Sq;$XI3R52=$eWhYH?5c`U{}gWU=1 zM^eNMWLq`${>82x**Hk!+iyShf1^++NI1Kv^;C@FMSfd^pNaZFn*q8B8MT|n!7F&` zN*+oWS4Uy|wmsmMFnauImqm_iictxPvRb1Iydiya6tg4I0guaL@|rSSj_T9iF1P}k zRC#Q@M)SdcmrNb)T}}QJXvA7a?Fq+|2f%5yXxxZU5eJhh;KF^ z*EEPsq&{>~2V;w~=%G0-#d#b2IKx%U$KRE}z(d2bg9t+)hED%q)Ryoq;vw2?wZOHm z^KrT44j&{GnH!+e6b$dT|E^a9(n}3zgrXIT~iSYz~OEUhsXXl;L(oW|n7a zJ$PfGw8{5ZOLARZh^58Y5Z}_(>!GBZtE|lG@Y>koQTL|gj9zPE2T_ub(L*{9I4nK_ z67-zGymaqIXcCFHFsyfGXF~1Xvm)r5SR{$&+V_gT%zr7Y%$W)VTN3}+!jHm0PEZK7 zW_IAs<{lDGt2f|hyyfIPZOhK+q%w`Ij_J#34;yB~oZ*aaWYWnaLxi$Ce*Z<5cbk?{ z23a(f+rXfCqwAsXYw^jjKw2*MR@=X8AD&CcjDvXjL2?PPFDS(k>CJKPe#Pq?zIh-l zN4T#ARUBx^P_{*nkBWMaU~fe87(y|AuI75g?A3=!nr0 z(yMwH=>+YMotvLj9@THEaHS1gcQUMtO>dvo&T=h34Mif>m@mlkJGh+ckO~?<6nsy9RO0(=w2iDV9R9I zs#CM1cP-;u+{kT8;JUV_8^V~o@&SXvT`=h0q(?ud`Etu6Zt9+pf}0b%*Al^fcc(w3 z2*r4)h#wdt?=#@wNMI>=-+9PO9f;%4{8wyKiZW#9YX-@cS?a;QsY-tG_7bi|vITzk z8}BX=s-t0__z6eRe%cuQkOBQyYH8sRWfiYuG=DQmnhPF! zmrm*?GDlp6DyxicnO9adGj?D2pZK=DS5fwb+~N3_oQUzSvo~``Oi##sa#Jw3ISLl+Vc0t2O&V&W*U23u;qG$MUR!ncRUSA(KjFr93cM4O*)-6e0_pGm=Vro11I znlC=PC?~_XLpz7Bg__TZHyHW}9!(hnm+8g?zOQQbYqU_pZ|D>@{gj z&&d`}Z@R$h##(RGCWmSvGMzohXZz{gH|_{OHh{C>q0O zup%);c^8VWi@7a+%n#b|b}ok*;N53=Eon*|NEv{YA!)P!i>u^o!QUbV5B#rRVu`%A zT?CDbmceyD_ctd9a;YZ6luZ|DXN9ir{3ATysyJ;ZOOaU#B%@uh-K*T9A!yv7SzRZ> zTS6B|Xkb%h{ALgJwHM`NdKJ-$s*Ma9%re^|&yyKNDs(o3V>Y(P!=#lYZAy1*$!yaW6$;1cpI=>hgCQo<8EHq1+Cg#fhN@&`7I2 zY?M%-0%evk+~BrAjLfhtVNxE>CEu3hmsOEAo1!srCZ90GP2x81-w0-1x}oM3mSD(e z(+c(0p&FjU`SGE~o-u3)NWbJM&^%dCnu|ciHdL#7X6xYbV)^lR1op@nFh`e13Z{oT z&ui!Y*PFarifOS}f|+jnV%r#}y*D+LU5x@t?SDlpU7>`P)~ho1oM_7oEIq6fD4f3z*PNw@++m>oH>*RM<=8sN)rxh5V48UE zx#f{!2akBs)*+X>PV55{T#p4-KUqHb^b&%?8{QChN~$F#Yhf=vSk1;U3SR==Dm>Dx z>9xYTz+qGDtGS=w&|3`ThmZgG#g^{@3iIf8r@lxp*C zm9vG%aNT}xX}(E|JWy);mN%IXA2XjN@~b2N1p_opB`+smJQvEH7o?#o+gvlEF~1Ps zd=ls*)rnlII?Pq88(=Kv>~zvb&JWO}ACc9d$#;P-Hd$6RG(E_am#Yu z-)lfZo0Y2d&E_v7{YumR$ddHqZJsoO#M94dS7RKTKjn3NAJm&jX?38PW zF3XCjL`+fbn*&}UJVa?iu zBW3!MKHm*SHd5YAiAN`{e)w~pZE?xHJkhnS>Yb^GAL6D>>|lpsbfNV;Dkd!=SlF9q z(8e;gRX74KS2q}@c5^D{-_X`4c*TXrlJQQO6!m*S+jRHlv-aBZ*EWUnhsuIl&AyDc zKdo!c5${x4rL-9p-4_>;ul*tgTq?sa&3g@f{S1w_v#-1TOZ$tfP zDvUj?23>as>=|j}aQg19+ugLrURhf}o;4OEj0ZO@$8b&W$I&oS)C7k-i%ZXzVK##d zxsw{4;)|&Qvj7vG9kkv}Mi1vhRW@cgR@vVA8pO^enu8&=&P`5w-EzPhZ_|I0tQR*QP=ECCY>ZJ8;pHF4-$x zAP?q#luPL7=c}bYxJc+Zk75{!)<9aQ77vy*-ewotUCH5-FyWS%qmv<%4~-T;B5e3j zC7=C|Ioy;VfNA3YuQ^=fM@!F&|Mio@`|y(k{~tfOu6e)%uA||9E$F~MD#=~{V?npL z42*Abc~L(5P$dfkh#lhpy4Gm}PIC|Qw!WnT004>zbn|Wdj2|ugQ9-i;Sdi<>|7$4s z`9qa#koRjC07k8CfbrV@>p{m(?2p(v-|*Q=n)0`}a5q9*a^gaU(C4g2X*R272?^Wc6B$s(1;QpWO^6)faQ-? zbV+hFa&~+xsM~)R000dV!`@?`A=v4sdbbfvjB8nL-QC`JS<&F4C;e=F<;#cV8 z>}<2q>1}U+1t5a1=c_gJRwgD8&tFSBw(1}bJv=<1prH2m_iZ;i5m5(|2>D$4j99*( zAu1Pu5ARg|cKpOPX%X>yV`quct#Y?}WjvjIUzgQE6fL3WbC5< zLvykOChp)TmCl)znThr2Vl%|>%#kP@9Lzlw_Q_%irr7a<%McuF-mbf>?kLFKUc!zt zDNiw1lh|JNX1ux;&E|$n7mWn!F{Qqal{@&z=STQ_?{@?rP?ii+MOd~c)w2WWIIl%S_9Sp(b<1LN53&YNUD>;-G309X*N~D#8f0aD7^Si zqf${s^{*;Z?$wpgO^od5{++$*FBsanbhs*yz}L^>q2A0i|0Z3Nk_Ps_qR4W0bTXa4 zZnR#Qb$uFSJ%|wEGj4?D`?sgmA&xDNTN~O5>dby!80}vW%&dz$A`W|&$241UW~*p5 z9go?6KjSkZj(Z&7tn9t03~i*uAE6XRrW%!K;DODd`VsHTY&J1j2vAL`n9`KTqYp+{ z*my?^ZVoPXZ7Ff*M>SE%TYjM(4Ach8>Je?XS^hS5VweT}jJL7n4M%6PLCe(2t&-Oy zU!B`}q;A2mX326s9wPKi7_lCxiPasH+ArVx+VWYm+l`fJ#+`rGNivD(FJ)NpxEVpZ z53;oI%1IJX-h8#g)8Q&}E!}&Hk1=62hx4#{ZJ8V-61X1Sv+0qx)rqI2VTLPs)*^Pq zpe{a5r-4eMv!B^3yL9ABkFpPi?+L}@}_@wb0ha3C*$To)onm;$!Ht8x2 zO+~Cu3@y^&zERSot^`4rvjAmO@feDx`&y=s{p0Iz`afgKE@1|vmNFc~jI1ro5Fpf< znRbZUn~}b6Vr;{q@!a-o3M3}VA7^ur|5v&?34Y^D@H4J2(v<11AST_=Rd6PNZ4{pumqxK788=w-=qQ_sXTHSK z^v8M~J<(E)1fWdPLCiA`Z|S6s^kBb6X3+*;un6=}O@|sM*?oP#HGy#x0i8fuJ8}pE#*+NC+*)++9;(+Qz)i z?;fgXlVYryeQtkP}N5hHStQo}MjF$2*#7 z4K2e{%qVD5AAkrnn#X@^41#{=K@<0l{4FA_$w<@O&07@DOm)~^aeJ|C1Q76=4C`X-zQ%Ax3y41*_K8`wMb< zqV^v{%OS{>@rLZfWhSFH`c=qf);n?~h3bhndVy#?#ohhH;1iUS#75EZ zdK7<8pdqU_Q%vDACA2Z~qZ5oPF;0fIk;~^1I=fzb8AiLms%#l zkqshwLO`586Dj&)e0G1k^(BG83{o5h5HS@JYblPHwYd<4v zA!No~+w6(etKSNNcc_^$Zle~|-B3XAYWV04XpaX(rQp~X8FP`6d!3`Pks^qEqK0|3 z<-T^&t3Oi&{qa3vXig!Wr+c$CDaNrqRFfD?a~IhJ(_?^qRqmv(sGk&j(>*iYXyv6c#;T~g%YJu z;z@Hw_m1@Lk5*)oR9x!03L~I8uO3xyh}4x=p%__rBkm3#gM{b0t+DBCe&Ft+hH#4M z@Q9~l!tIoPV5XjFIPjeQvm+My$)QLiYweADr&$$P`Dun8eZ_yDo%hbPIn~8>HrhBk z!8X7B7L`_;Y4%Jz2NznmUL(MDL_hR2p=j)=t8$} z)jl$|ImJu?F?#$Y`L{hVwIHL<3(BLzRQkFdF{5twcdga4*A6FBmRFQ%h_wbj5Y!I& z#~!)wirLSVP=b9JF{fFw#`SJPl}|GuAVx!#uYPN1>72j*Yl}eI z(8OAP)r}>`vHEhdjP2Vb=DK+a)wgGhlvYovkFk!qz}thFUYS8sz-A_Sl@xb;0tU`0 z=f$PN0=Pf>b#{pNA2n^s9t!{Ya5cbwN_5!zCxLj?<8qfJp~a+2i*wD`#>hzS7STzU zX%eJ~!F_QQA<)LgPeAvOxa#&c0Mbcc#uVftO3Toh5pF@so`?UAZS~74)V1EnSQxnU zxxnHGtn~X|z(c_HJq;519;xBx{q1Q;U;KG;O%@COJc_MzIruXHALanxznh|*>7#Pfq=1n$^Yev0guVMT+Eh$62=M3O zj4NN~G44f13)BC@wquj3fT{Gc)e z59<91o8P}rj6)CuQ$U2K4HH-)TG3k{zuebu;76><56&iKt)b)&C)w!!aUm4g2BhJ; z#DwqLT**I+$hutmGLj?wp9S%@-wPI+u|9-PD_gV!5PnMiJnQF=-U`UbW40Y^XN&jo z0-~*3j$II)Y~*gnc0_kUolF+ULHTJ%I{`D1;x~EIQmS*AtDJp%e5J3-woTTuJ1s1w zf=2ndGC;sCL;b4XT^*Ra!F3yp6J^L23}y`HCiQsS#rb|@{Wk#dv=>qxT>cGcDa6;JdW{38{LH(Tg~Wq z%LT;i;t9iSxF{l-IpTl+=LMkc$FVvrPB><$h^^eKTJ$qPCK~v%3pj3XSVhz$ySuwo zSzfFh91ZpL5T-3oM>9i1L(_TR(8D20#s;*IJOl&z2Di{S+p2w{&HenKAGAFpJcSeucSdG_(yUE%52$-aRQ9x09U3vD-o-n=UIaV z`}K8M)%kh{zGL!}@lU=r0mUvljtoTB&#JnHaFmGmR+Y>o0fswilLF|-M|Q8T2Zwn2 z?t61NzYJwn4;Gwa(1H!HD1%n0RsT#t(>DF5OX!)zR8Z@bEd4SbwnT4slK55m1(Fsv zv2JlXd~kUS=bzB<=RNv%n;&rBF&-(suWxDIW4;u-+EZS3b-*yu;g=?AzWu2Okv827sdH#KMvaAJ@0&JWV zbviZE-ggkM)Gw&0D3c%x?eCoZ<#!D6R#{I@ZS)a;1(VfI&0sxEPxt-dF1JDE+q2?2 z*R?Ht+DNZ^->Tay=#RQx@zw>A6;R`et@1d+A0J)xa5VU8pS*j}zFwms)7-}X-I!mL zJo;}F=r_(@ZvOEG(t17FpeXug4h{qRxEbnQ@YQxh37aZ(d`9`{{XQp!dHH?28cSWA z2do^_sIu$p+W+b+q&37q8F=S+OBeOFYETny_4M9*eu^}Zb!2Q|vGIZ?^n=}C$=Tk9 zlenog1>qaL&Go~#NM&Uy@ZZSfp-G;w2GX~(tS`f7m*ZQD)AzMH<`7bqMUP98{^-WJdUriuTGNE)iB63zc0uUoU6X*>V^JKX`|*uc=1%zgzK4 zSJ}h2;FO&qq82b-VpVbX82PSJz0Qe({VE4AAV$j6$bNr^Z25ddJI8^g<~~_wn$`-3YD}%vYCzs@?CKv3BMttvIyItb3 z#T3uapz)xYmZl>f4YS%$-%jxq8NM;l_dOZBH7MR(Cr9SlbNzTd*E){ zEf;0(55q6)ic(e0G9xD4LYBwNFF?TuPDiySY|Vb-bd|kFDk`U7m^=wXwQ}n;v9j8q?2|$fl#l zCW5HM(kJz{kEBq;q@U*Vyv|7#)=>$eA$(rAT*aTg0ZPNUjQJ(TZSbToNymhjv~DY< z86)?Ke1u}?iOIZBEi1hfAA|ETI_Fb3j$0}n@1|eeY-buII%(`?ym{hqOhM+zXWyTP zyySoa;2FUfH=`3hZgMe{{_g<$VcW>yWVHc-WC2!QXxekaia6@YPGr+&FPqz53nY+5 zm|X>zFqrm{N9lZOOj?H-bxdt8}n$V;Vu2oU2r=&?Njxr;&b&^W!A+Nn>9zOV8$ z7>p5!jcK#$j==OXm`oRRk`O*CKMG^D(Tlx>kcs_E&wN3KA4sR(aO)x_&VP%oFg}KS zPmI9zT!^Hf8Dv8zJLbj==~J-z~|PogVHaDEtakMDjn_UG6=r6VTSFMTn~i6xFbG_{R{6Pq_) z$K@Vx2lC}v&TqnEy!oOwX6|0XW9hwb5r>QYQOWIXEVHukH6@c8KK@KCTvA)M{%YX& zq~``ePq6EOlq5>BO^GIkRjW3-#$X(13>`Hz#!Mo!EhICsU{qIQvh%m*=r+64;3kWm zOx^XUvd=%YA5YWU%|knfdLakL|6R-NO?VQNRvfV!7-1Lig=b7r5`<;DRLe;WsDEW) zT`<$+S1e`<5HDuh#=l>yNedGR)|!g1F(_lsWlahY!=Z!_yFR#&XhVui`lJyQbA98` z9H|>r26)D`)=-i(4PAyKqzx&op$L3S&#@b(LLZt9i>+FtKlqM$EJ6ghJk2X%T_QHb zhB@6VMY1A*iL_i5T5Lpq(_@{=q2`}CupptBA-lM`iw#4(EJ(AyYCRO7e9qk5`68vy z$Fg}#6v}B&H%cXhnWKh!aS)90=Sl|a0viT{81JW>EA_~=RAHLiCNQTlQ#AXaH~mL8 zD{Qx)@)Pa~HJMSASP8@n#PZQKrrtl(gT1+l(cCS26C>R9)0w9?>JoGpFGa$sr`u3X zon7%=$W-UZoA0iyj@8`Oe;?a66Ni$;h~^Xb*TWk32f<}(7Ydrulx9wd=}o$zx&iTImv_cCp6yKaNqCgVTs zMI3s_KJPa_eAO{E9SeV6msl`av`Pp->u|AAt42>iRw8{-|^hL06F zxf8v%$#B_}z~#27a?fi7%_qywZzRNT1!$BEE@jQI5}jL-SQ+RI{gTCYYmWp--|fT0 z=QCzq4qoyegI7e%y;{j9tx50fw^OtyDe(V)(A%;be#jNO^r=+jX_nr zP%O9YXcuc2`C>);7cCPuzXW>VMri6TFhlYb9z=FM2Tw?R>J%gQ8WhJmOO{0P(}LQ^Hpbuk99iIMWYKy*U3# zHzrDgLiz($jx6)_1yC+Gq`o7f&$#*O?6m5MAN+mSQk@0s^G*0!JWo`*DaROx3CuYvj3KowP%-ht{hD#9C+|&G%Pb z?%u!sfos!3{6H+kNYulpI~tEe9$7r`ix-N6BJ5-ddh{PZ_jSFMZWs437-)^Bl6fk? zm0c(ucNXKU5A-J@$EVW>Qf4-(h=AcgchsMFNDE5c_?ibB!d{er{>J7urx+ukKRT_4CxU&oL|0tgTGT-n|h|t#g^Q8Zy^8u8? zaz&s2%ZIvwsGLh9@K*~^%s>IABQNxSI$lJee|lRtUep+1h~WpEGRq_UpYoR($e0l4 z4NMq62Kxo2O?+G(aD4^hFxzS5yNsn&hvz4M5ZKLPVhb1fO6EIGnvc-8i0u)pXkLNcj4`8^;J>#SBWdakDoYw~z0m&_i2RoYk)0{fV>X^MrejjrD6el%aUAu8yMKq+9LBqGX zrjpSh7>U4*m-(CU>MMo!TQg737rLs>R;vYhSFrKuxe_>YdP?Ws^z>x>Fu?T}(3N2$ zLVNqyMw!hi96WjvNgt)D!f{3XLN75s)0FcZ#r1h%#qMdMT1@`LW?B7KVXZy}OAV%_ zJRP9Nd~q2WIdTw5Z}at;j=wXvhbUD;2`sp8_K2!gj_h%C`?8ABz3_1sHmu+-jwv~>2w0}Vy}d^6Xfq)67fCP?h#_E6LiuL6O}i^gg|#M z2i3DvnD>XlZQoY?GejOBpHcDTAAP@%yK&8893MAL*}1XKd>8V(AS4@3+;H!F=*h35 zzbI=h)vY0HTNo*^Tbn8-4p`VYjt zHkf>_Si!*S3Msl~1)V+VewKzdk{}qnx{kkJI^Fimo55}HJ>@jc3_t^O)dwY!K?iy+ zBsU%J_xp3h?dG@?`i56q=|<0*p1U#yCtK`On-@zd$Lj)gLvbT%B5Hbp^sDyoiuc!f zCo@(=JMTS2TbBvpbcg=c2ALFJU299Xn*Cv{Lc@gh)3w59t^{G?pSg%@d2nS2v>A-o z8wgm?q5FxJ@EiXRdv6s~*AsmW;u0K!I|O%k*Wm6N2=4CgPH?y2?gY2suEE{i9p>=+ z&sR0y!@SKrOw~M|y7zXUb5HN?-fOR3Ya7)cvKTfkeLTAr-Q7@P+wLubq~5OCw&rD| z-IeU|WD^IPc}&SWtM#aTt)U3m2R2|QcNl34&|yZ&?^d0WfZI+@uZ4Ag=(eZ zYU#~m`_SZnispQECD*cb-}D5gGI?k)VFT&9D+&h}d36tB5E8Eey@6)JIgYaNw#4aj zmAc!KAvw;*wp4804kvp(sZpimwC^TC>iX?ogPaVT;+Fow767*U7qaMG30W`A%+$mR zA*pR!eZ8OjH=$o*{TSusc%4Q${9={Yt_E`qOL6}fM;$EYhLCOP`PB~wnZ|2gfx$24 zR*A!MMPh1}>uN+D8xC6aHbC5;h#zW0W+v6~vXC2{jfK%?*SaW<>6pTaR2b%1VipDW z0h-#Ypuzf0PMA_z)xAk_9Pj0LK8uhT+|mf)PoPT<8X??Ff!eB((L+dS3Ir7|Vq`iD z@|B{h$G#j1DR#5z1LV-69z*7Q17kQ%j02|CM?MI_{p9BH71Jv@((C{95aC; zw%HOCFzwPbB-jJq!uuhQmls(R#hD=z4gMUzQQ|8leq--lA-1?JkLQ%mw!cwj6Byq# z|9m5`*)#4V9eD|iG8xdcSukIoBteKnH}C)1r#Il7oV8s_%>U$Hu|_6h57iiulbRK< z88H{fny*n!-fLW>@jF=)Qq{Btv5Ih1HsZ-J?Nkk6T+e99oO4-0FdP4%;37{L!!mh1 zG?AyepFR!_)9bvb<-V-qWDCLD>iJ9awcN>$42xzyf;#+|?NA>e?|ZhN7ocI&9m)n%`Jp>L*5rU)4r#dckn{3S@N?m8Hn*X>rry#e0fNQxrw?!_RB9N`s;6zhpxbIiNpimiovUF4JhJpYwt> zWHE6CBH^WoNDxpbbgg5RE{|yB)@+vUq8!p7&o$7KkU7pxpRhSE>JoRF$k?*b_ccv^ zofw+;$E8V2Jmr-d?z;Yih!;8UBF!>9+vj!sMHs?ikiy+XsZu@0 z*e}H{%ZiVd6oIJkhjom}^&eb#OpGW`D6n`^~Gp4WH-Zn4?VhLBIc^gV`Bf~v1EZuN@y zSrXSxHU!mW5-wuKE2wag5tUM&XJKr)3bV4faR&IMWNuW!UsM@wyJc;wz}K;)FKDuy*+|PP?4HOTcF2fDp2dpOZ)@ zv6=%4fk&0rd<7KA*4>J<)kyP6dSz5)S!!aHb>R3Dcd{qp!~ty*RRJyVfta(Tt%j}v22Ats}1QUbjQ z(b^+*w8_1O+;693a41X!Bh2M3wkZXcUDtX_S!(!w8P7=7Mk}g=LK<7Ae<)oJb~vWl zfWw_ClnE)|q5*$riOT*7TJA-W&E-db00=1*Y8ANBw=CM#Cp9*&Wk@D(NOgfQoh_vS z^TVA$TZ@#=NTQ^E1w-^S-CrIm`6(TQuQd3v`9y>~6yy^;!!|m+rL}4Z5j~xWOMq5} zCo8}TseOw=o3E&S@Dch;xQR>RcD9~|iiT;&bnYZDj?CiUR?;rkulh}gi(dd{W68fp z7*i{@b!8LvOWO|Bo(Z)&qW+&X7o9(ucIft`idZneDfO9`%@*&IO&zzhO4Q0o;^3?D zA#~--m5v8+c-5M%(YXy=PK-uaSNCuQihuO)mr)2cQhl`G;HuOJ8ln|Hh}@2S`Rg-qxw zX@7yMO;2S>0X;;3CGp`D6m@Nt5~oNS79fqlv*>Kv+U;w`DgJVY8#yUvAFQ~scm zz^#M(z$dL5*;gxMb~{8iy1H(wEWazeB{7Vx$H82q_+B<26X@?UJ*SGM2Y>uWbu)O8*Pra9$1bZ*{Hr^S{v#XoO8!TWmj?Vi+V3;P*{J` z`39APZ&PgL;OHjC?YA-I9M2KHTbhxr&e9_B+$4I7ZY^+W)i(zkR|*wp*Xka1h+Nf8 z0x6Hlx=cs+w;7xuWtEwi)&>Wz#SYokB|F!$icQ^+wXBo84TI(wxZk1sdC@)JHd~Q; zSglty&==f1qX+H^%Xef~uN+|Y3|Vj=!TZsh-1OP^AT95hI{539s6sBZ2vHiDR&`aH zug}ZvchpKoF4WIL7pfzyioPRRzfOol{DJS_%ad>d{18>B$;1Hh3BKU(da%m;D?eXL zSlnO4d+hLn0=%23490idKN_Q_DLe`~VDBD3l4ysTSbDNgqqFg&=wv2@I?Smk`~WAF zs9P5@f$73Q1TUHm$)hho;&$dsL7eSTk@m)rQ}NVX6mwwDQ~2xR0A*bOmL4YO*(SWm za$L4{!<+W1v4f`l~$zw&6Kxaxy0KCt$BPtxU@O*g)>u z?d0NWUKL=w+F8{^o(*3s@ykknylle{Jmd`Jz?YZ0v!?C+TE~0jt?sA(G4j=d(ZxrrL!^6kB$RBk!-?pc`juTK{ig*;NO z*umki_;}iM*Je??EX(LVNEjpwf<`_}45LGRPaY}tRqWrqp5}frdrP-fNnUKeXARl< zG3?=a-b8;(L1^B$+BF{CF0iU}hbFU!H^oCiI6*a}{k;Wzj)ybe%l8tsssKfWQp%sl z#(mV+b76@O%Q-+0-P6#&j1-U9A&kCyi~NdPNa5<3M9|f`tX#m{7RY7)eeR{2g(zm} zKSexsfs6A0n@ErPsS_)9 zKzMs8fkHmL2s>IF$Ul*u$j_<{ZOC@YV+Gk@INF6vq70|xT^F6bz>I1&ydKtE0WIHo z73$#D{ey!mcfe%Ud0skL7Yyqw69g(eNewXs^}A#*QW%f}1I0DAme5_Ss)JNNJ5%N~ zI86HPqkHk5qoX5^bvN*w-<&6)CrOR8mS$!pfM#yyqCW0?%{Z(|yB$Tsa9=1=A4kxk z)lH|)!MP{F179HFz+W%^i{SP}%@1}4#G19WwQRc$aQBRayfuAr&^_bIJPo@DK-QB0 zYA}1G5#k&1>_z*{1aRtCM5llA1SlVOzV0!Qj-9D+b^kZ7gFH^E=%{BlB zkSE5+dq&R>4@(yK3g1Y;&_Df$^V@8dqXw;6AJ>p=yn3NG64^_X0Kj2E$j^uC52Bk& z;wKid`9Bz(a)#*VDR*Z;UO^9^{Di{{N2mE(@vq$%8?D=Dn8)vcxQ4(HbeXlJqow5uz+tso z2?>ywk?GH$27h@-uz)Vh7{Vd}0XR9(dyJb=*f?mJT&UlDF($ANwr2_>1$_3BG-%(i zM;Tn5ow=IMV%coU!SZkhq!4Q!%^=xiAp*qwf_MN8@xQd(uN_qHC&cV&jcKtYdoei5 z3Cdv(9IWh&Y!Qz}2wITII0*s^`QG{C=FEj>vBdtI!b3153UY!BAHwGPFx{isG}m1n zhp+R)f1XMk>|Sr}bkp|3T)~5PeiLPPGHTkWI1p5YcR01&>+=#U=Qv5Wr3@?l;Q3Tc z{qv9)2^pG$Xa7E%;kZ;=3ZsJOQ#2WAJflcXDe`*nQ0TP3@B7?2k81sjIXLE_tTfht zP!O1o1OnR1b>v7PScoZgnni5s!d(e1+~^JEV0#18>Zmq^!H+j_S3JiD@+qts*aM#;F4cj##exoqUo z1SgI!Ouk?-|4YLuB8YeAHjTbTposdQzNmkrOI~vP+NSK0LUkJq^9Y2|$_2r{{`*lf z^gKrny)10Zor9nG(b!Dbwx%AEmAYRw&A4Y6VLm+nq)2U*FYi`8G|}!GwkQ6CBV|rB z4tG(Lxrv|EIh33AQN0njd?3%yFAEnG18%*l5vs^#y}Jd1HGg<6WzAQ z(s{RnLr4f{wec*2BADgoy{_n^uM4L-Zk}kq|-?=z1 zcK&Qz#P(`6>Wg@}z=qyBN7=s_qZC0-EMu|2-iT@Pw9r zYD{7+s)@)8ZZx~83{iG%ly@*Q)L}hr=nEQHMlL9*75R$^gv>mXqzLd=$cie4Hsi)a zwgbjH{KaP_a|I=$QJsSh^~fGvj#(>^@UT<%&Zc!O-Pev%<4LWvpOP))0FQoMw8cj) z+Kz3vr7A^M-=!A;Y?;qR&4rgZ8Y`#s%aV!pAW9`hLQ2iR(iLy>7q4RxevX}fElrzr zM+Aa~h^qc{%@aj_mk@cM?tD5g!>^W^Mc`mIceiZ6RsV^?lm@$*07*HSm!k~Te;SzM z028Mp&FQTIcROkc|3zaKw53mOjs7Rx952gALG)_vw*{6#8?K6?P);&-=lFwzZ>wj| zYjr-8+pGMCJU%5FE0&})XA}3z5!GtTa@Gtd&q3F#Om8~lEb%Zkmp?*eGgD+3`O4To zwT!#>feCsYud2Ml*-;d+tV~67X#jF#0uM4f~ z>$AAS7FyPlorjX2`dQ3zN zmhmyXtQ`C_z8`y2MFHdcMYsEQSy~nFE;Ky3@xO+C6GOKXalf9n(d^6ZKZ|oCpusIPe4FQ0xonAvnj3 zmyh^s=!0~z4ejnt;W!L(wT;01oA}+wv6Qu&&4i4|#u~<3AL-VlYdK0x_EGCrRB5ji z@P_ci^a91V{R`cxpfDa~;%$4QJCe@HY3+Zvd+jk7<=@`jnRD-(RX3c590W4i2R2G% zd7ue=+}hOJxRI(5qm=LhicPShIYPKsHke}vhtiL)L+0(Z@CR!vnfg*1ni= zJwbghrj3u5=#6p^uVkAK?nf8v&=t;MiNPON2O9xTxC-BSl}8NoVJKX^9c5lukSx+* zR9HY;W%b89q+i5=I)y4Qeyc`o3bQ_WUFiU>qwaVy(+Q}xC?tJu;p()_i-C!?!~_VY z`PH@tTVQQg`SkrMJ5^i$B#D)MlEl~^=+AJ0^;h-NEQq=-$t42VIamP4O?3Ys?1pcl zG2PP@;e|Y?oAeKxtOy{jhwBk666>N1EHX@4D`8YGy{6 zCD(VKo}LbDi1@Gifi-vL0ux*Ps}yrGj1@Dm6j(8Dj+7G200u6rYioQwJhK}c0*s6b z)JZPqtFTYx^HrHP-=v!%fguz)Gw#-vPd}H_#n5dS<$Kxl1Q=NiUbz7qH}Bf!Vs-AO zI@tTC+FZ@{x$(NA-~^wkV)j75$Bze@uRsrrd?~bkd6d)@DJa`U0*j+Hm>aLroC#}O#3|I z5b`sk_JWj14c${|35$;>MI+Z$!0_(jU+x09u%AiN<0=XaWFp@Ee#vWWS6T*cdW0b3 zmd{J)zY(xLR~7?5qokq;0d7?b7>@Uw!6+>e?p;^tJpCakeb}k-@A_A5)CjIGm3cFB z#yFtof+bCplIJ$rjymzX7}p2Tj?GH&=Kt5VmivTpce4Myk@Deu$rZ7{orJ~B7Mv=+Ok0x##p z^v`hN*xuQO`qb>oAsOZA6SI9k4(XB!d=&WhoR!jnA*l*%MD*C|KrjU* z^M*`q!^3YP#W5Tu?O-0p(2GL1>PYsxGk+~xq$HZsS)1&oIjuGryJQ~}J?)BR69Cht zi5;om&N_kix^y5P)m7W0^=v zBB?w#7F7-0p1+`R*GDQX%bh4{c1e&gYy6gj&-o=jwseR3YG!|OFlB1Gv1t5)W@RWE zm6MQ{YQ_Hz_d(>g_B;ETGJ&f{s%f!?2Qq0;#Bh*hs;Y6ERe5&=_TEoR6wQ@0r%V9I zOqx7*Kk;GCYYG=cM7l_@{W|MIjUqT~=|*twID+;Mg+jQEwLb|#9ZR?dmjdeFE6I{+S28@_|?4#uY{ zuq3QZ;H&zXl(Z@$RTmAIo^B?PoBl6(>e^`1sS0f7^^n8RneAuY*L%wfpXQ2Ya_m<64eql^M^46^!*~>T%dpS=MleY(M6RU z9u`1!>w>}QpaVLYrXO)m8M2PJV%_VPX9R7tx9<fRgYipZg?mgNco76IVtGVLyDk4R& zd2r8=6HtUWD!Rd_xte6}t~x3QYmKcY>8`?P@3`ocaL9Ml>1ZBCiHM7WcW~G{xSz|h z$OT)Jg41du!|Bw==tL`$0B!1s^cqC*%0Y*Y#LZ(K(gEFgxaotaCmOIIJIDRbR~7Zk z9z63k6)v_O*vQ`eSS;-YEI5Do1d_nNUo5rKZH`Sf;#bxRaH77A&?o;kZLP|nR8{y) zL&2wGr)*v`$*jXqsF+l{=ipnBik~6#&RQlsx9iv{2(l#Qw-Nh$q{JbBr*#G4HXMc! zwR7f8wLPMFg9F3ry2#*37E%N>z?em+C_dzoEj;T~ywpD#QVZ zS!rph87ntGfA-{o;tD_q>F@84#^qREUY3~+a#;o748TLq+}0K;SokrbX<%UB*YLL) z5fPCRLi3U+byMyvA3%|oB@O<%fNswH>H4P%%!&d0g4;_NL_}i7F?uMdq}xe+YEDj< z^NE_Q?09!~_sd0B?0y_^%BXIu6Kt~Qex8rjU&cUhJbe7SenjzJtyF)u8ehOn4k~xr ziapY!rm?&n?r!Jg)3NMZy5HX0+uPJn#(r{J&}aZ%WM^Y@zcn#61!ciQ9Q?s#Ou3O& zh#F}`-0ATGrbg)VNIWK3@F@Cr<+j?lhb}}$fXyJF_Cp^yEW!;~z194qLYi|xVeps# z+8=N(vO$b%M!O;i3q*fYNOxKA3QrEP_1_;T`ImtIn!xoC={hVtv0tm9KZ!_tu8y;_ zb7Ny8vSvk4zEEBKK#Y*`r%zf#QAiz@FPFW836Q*m*6DjHma zkr9WsWWfFv*}Q~86b<&@)3RlCkDUB6aOT+uaNNp+ar)5Sc*f8QT^jOwd%h$5cpQwI z1LT>F^gEx%ZF_~`>CE<)8!by9WM9`d-gHGoz=PcE?2s#S>B4w+3GOrby>Za*@9v0k zsh`Tbo@t^GLJ{$M-ENwFUz(AfqBKgr*eQJZTZ_r#atgQ|A}Qb|ehq}S5C=10A`rCh zcnb&-<~Gb*B-MBVyy!p~7DP_+-X*~q;JX8O|KZaTFzxm{g7$%cYAeEWf34(TXV34d z867(Mb1a!_Lc8wK5Mxz?7iY*7VLRR<^=aa;iK5|L0uk|aTwX0Ko4bgQk3SXgpPQYX z?^UFJe<>nY$N`MI$7$^#k-UP4zDKKdcapqkRLvV%meLqeA{W?V=mOzYM1rq!E z>*@_eUIrF!?j070!WO`L^1r>>8O+GYs3jnUru7$z;0uVzL-*RINj}K&eLnyWg#%uX zPo7;5p2!T8fcCoC(jP~PnSc5%eL0W)6zkp(x?wo0UYv7gDEUYUHBb&vD565AD4EKV z6!78%Ucq>PmEdfg&nXovzNG=z%*NA%s{+N$<(?3dtO1rtfu2Cmw|_`NzI#dPQ+QBx zab0d#By~NffE=h`HJ~IKD%XP?ChPk;==<8%_0l#3&-MQ4_-F8u(e;GuHVc5+X87|S zcr^rp7+Cq{|6(Wpwgl)3%7fyEe3vf(#G&m^5u5Va8|GJ5UX~_(F!24iz7$}>_jzy^ z0E^Z?X0Y-$E?BZ&&FH<@_ruuE=lSa1`jC__Zvm&hT|B^%{Q|(m@z139IpFR$1kNOU z2!52J@ACwBLL%igA!D}8aIWOhQo=d=`3axrLE1&fgVHl5{=8W40CWKSz6m`L=T0%h zV0^g;+{;h4goXJ)VIcGJ7-0*Eo)yF;Cjn@k2(a*JDTKikT;BZl{*?3a6v@yDlP4s! z8*~8=P9&m0Qy~;dx!nkJBq21!Q5MiJzqnZ76GdW%2%8G3ycH*$9)JIO1-NJ+b~0M@ z89<2zp7t`%!FPyLQBn;=0RpQc$c6&UM!bRFDFZwh2Z#{B4bbnw%qKC$g-#J)E#dvK zwBkUGuo`f8AXwif-%lrrR!a~n1tSe%wL%;Jxtehw=5f)Eh&0hQL|Pc4iz|ql*xCD4 z`CI>EJLO@;yff-iXZ?~*1b&KTM!Yl>0t&SQ4aFPv{U1-oAQ42(q0To20lOZR#KO5+Ix5CD)cz4dU2!3-xek<^)I#i>?L*+OfdSnh#(oQZXt%$C=>q|7#N#g??i4G= zAxae#V}oG30TfhfwbvdEV6gezgXH5!q8BMCSlJ$jcn{MG3r$!TY{2>zp^&KO(p;@`NGtvy7So+1s`$gVF31M3x?@;VE zWu$yV%-tr`W86`-_n9RYn0=Q2G#J-3#2g_{FzYp`a4=S+`j7#}XLJf0gU^sRb>r3#7Jq+b<1XF$;fr_hF&CHvruR|ofvXa#8 z0=rM2Hl2I{5Q1o1U?Mhg*cQQc@_ct+6T#e(PyB9RHjo!z!U#6O@R*_h1TA!51X{w@ z3bMPU$NBsNc@k{1yCHs_;)e$*!4OkmNxys*qQtrGI|)@S`I61^8~QGnb{8ohe)>w7 zQh})f>;c2l0O=e2zR;I=XwNT%gklD~K?H0Db3%?K$a37weQAFuJX~>55Cd-Dim{Rf zzwkBVEaJsEG{AXadDd9kIoDnwE1bf4X~0u!Affc5!@`T;^kJESK=z|ldWv9<^+A5g z)Q8X@>R*S1X3v8;?#BX=GQ+vsRDybm@$kbpF(MR#_fkMEG=L3YFTpk`ApR<m78w6+Of@-ZFefLW5 zQ*8ZW0@t@1s2q)4{VC=WD1Kr}&cb-YV(!ju6$uf_FgDJu_yMV}LYlwxM6=tVxBQ9( zsdCx$pf1qd6{ZpxjRmQ`3W3om!Z!VgP8pD*MW(F?0;P=c4l1QQfkkVgPtj#Z=MKhD z1RwL`6><@H8kWzmIIt9{j~gH$2DcE`mMlQ^5)+dD!<(S6S`Yoi=h+RB42<(`a)!VZ zY#LpoBtDJ6hUP#$_G+Ig5im>M)PIl-Fsa#m1oT#Sr-SMh5|P@}UpJvJ0MRE5G>t|( z&-*Pe@m`+hj>)}hpx!?eD65z6_0!#hOT>NqePpybpA)0nfq|lvM8v&xk4;Z#2n|)^ zd^ol`?prl`H4J|(k-&oIQ~W^sOMMMG$Mp$d;H} zd|MAkTm`>dZ5&XV(|Cy-S!@vyGGe4Z4dS1kI@ucJw82nYLzAVA!)9AVo-3eDK2yXC% zg?npTgH?!H`5*=9yw7C&7=O3*eK>uno7Fsrpj1ME;1&lYwT6^GtTqTwBl(1v&wOL! zAVG;fT`#gg=IKYaJ!dc89$#txhUZhsG_?|nJz0HVuwMMmQcjU?7GKsPFt1uX{@&K? z$Hj(X2lfq>-xc}O7La~IM{c}~&=l&ZGk4NBIRjJYt3$B1GKWO{&Ym)A3X4Jjj1>ov zo^?L7G~ik0r51VG5-y>^;B(QckL*>PO6=zWPC-1MRi5PakdvydkEAn1=7_?vM@)fQ z|7!jF$n2!~x;h<3^BZdYG}y#Q7!_>5B~bl)=(0JDFBt`@hq0}(VrO2e(p$BOu#w+D zG0n+L{C$INCS_1tpH{S9IxQEMb`T^-3&w2P^Ut=7*$jcRB!_avza2?KenDkuWfxVw zgV#8(9<$a%FAd~Uf3NbVf27JDD}vgb-2!gz-L0R+TsVEAFOK_(nKN#~Qku0LC=^JB z$-SF1CUWZw39U}4v{Hi(4K+14$I2MiL##-!Jl2>Ja5KNev*=0EjkuX(H(F@K#33X^ z*^C1#c(`~Ar<(SyD%Dty5jYPNtXEk?`6*5`9Fx~`MQ*bK=!9`N{`A)yOU`GUU(jg*l{1`qWjwu~L$q(88 z4ghZSkUDY`_gWd#uZRX}){QOD{vMJtvDMcsg`Gwet*4m=NOJ0L=6mCqMI8>vYJD@U2kngzOuB*1|Q zm^a{~EQ;`uU{T<~v_dVe$8&R}M=7ZHr_*thnX{(-CBE|#{ls4XQ368^S8Qg{1DU%C zyB{;6;;@(DFImpx>YvzN4xN?LTDVH!@vo#&+6J+$5y6Q3?X zk}K0?|2J*hgjyc@e>cJTc@u*()#URa8%*AVE}g4TmC=U-{pX9!zH$32$bm>E@w8=~)4qD!Li>6=iV zC(o21FKuzm|2r`+hLJxwPweH#u@4ciJqHY!BI10BtO;!p2u${Rgh9iTna(&=&)Vo; zSdw#A6ba#K6fwmU#Vt9yF%la@)!83%bAhShDS6`KA}S|anl!fS_@JBJp&Gy0Eo67@ zkaem^vH@BLvQ`~idq*~3ureBoyVO=k(H(#bsdgRGqqx3&pl#T7dMF@h1oMl9N*cqbg8^YfKHif}B@H~rA zHU(d{iy4La@{MVBy5pwFyf;eL9)~=p7Os)6uaZLp@}pNmK*ndT z|CAG3qVToXH!X&hr7XQz$r5EiW30_-B~;384G7{$ilg{fk_!?%sG)Tg^O3FczPioU z?syN%XY&j@*wKSCrkCY5e$n1AI$Q8nWyh*$c06F=lW$I^YvF3WV^@e2B{G9JbYBHM zLgClJdSCB;kVooljvFP4+p5;I(97%hvJnVHmSjJ72^qg!-{)hvYj>*HXCx1UHl)33 zwk&Z5I1Jxbg}C4^W9TI~sd$o_-oDz1F6S*_^0)Y<1mkl%Da_jIPd6(<45VtcsLgE> zfUMKVm*FP{CY@epd}=A3`xo9@kFDEj&{bEmS)?pH-7x$ZAuTjqY2t~N>$~K-Ml{M@ zbUXMhKwF|pg6u*N?ft*B03?B)dyX;4HafXlzCh-qt!KESY>Nw~truWa>;zU2gVBQu z1g6eGe!@$@9`Jvv$Kql@v=M>%07bI<1pdbVU^oqMp!~%qSU~dMHw6If?&W*VGN6eD z_yYms;Q=RC5e3Nq!~Al9xA^v3-ugcNAf41I@^EqLI;-CZNBEL@t z3Bk!R#anJ;bP9T6Mv#P|r)5xebuSf1_$T1#2b9J_5d+1*6b^vO*rLAg+dwq#lNUi5 ze&k;Q@7rn9Y%R+2 zc!pYQzsG|jumObctyFF-#-}b`p?zTw$E-^f-T{XgO4=(D5{wUdB7 zYabhCC&zU`92Dz{{;nxYiMr`1{`gstzuNWf=AMT69b{lVq=Jg`n|H&>8W8668ea4i z7*gBU6)1~Y17Y~{^U=e90*YY6+3Fz;VKfPwif?dy0u$heEB-RA{3hRh=ue>&5{*Xo z?*>LYqSc~RzTsuoAoDWK8w%f0Vrh$Uipkgm zg>Wb?9I>um7E8j&y<=0q-o1GmRRg+>1lA-0mx98GBf?e_GX;Z8PdTFfZ@8 z+4R5Pi^7370whGmqmu$5FG&e_kr0_#neZzf%Lw|G5ktsuel8jPWFr8JB@If$4h zMeD%t$jtcE@GKNYVn`yjo2hu0tw}anfbh=YF(`ei?3@j~rwv_unId2O(zcrBvZx_# znf$I>=OO*EW+AHG>NtmmqJaRKKG=bym64coq69}}o01HTdihnGBMpYnj;Hb)*h(}I zKp-BgVYScv1cuaDLZfdG$R>kHhIN5rD;FD*mSNrO|JnKQ;NNgI1f9BlKlM(^5;*&M z#3beV0HdO9l;4qY_FjR%A{z_Uo`LASQuIlD5IS@d{f-yUUEqCL{cn8nC;LhDg)WBl zK+r{ z&~&quso$PnuQiOu-}~jky!AZC$!H8&CUVp+bne6eqx61(FlFusBP=lK5WNL_cTcU$ z8@(jJKDwDE=OtKeI&(MtH&bhwy@_m-gE=PBkmh*tikTCgzaI|N^}Gb=yw_g3*$|%w zwC%mw;HFUq_v?aE446e%lX9d#%bqwZyW&pqc1!&Ib#yg4}hEm_F2 z2hL}5bUn#(XCbz@i0B(oe=Dl3Roo0VX|RF-RX_+92IkxIlaoGBziM1Xn)zB;*f@bk zG5lCGwv6$K$w`6t$DMe|Z<_~nw>aBiXNWCX+H>wFHc*Vxg)>Ps>g_1gZMmARl`1{= zz|qJKXKy67iqg`hdQ*8?3{s(0?(-fq*j|9=Ag#{Wa~K`b91!Fw-G=NDja>W_kU7*I z;RA`z+pvce>BaY}DuF_y4A4aAkbD9Dt?nigpuNi043}i!AF%kWU;S^Npsz)Tv6G{^ zDYM1pE*WTp@-bTHK1|=O2UHbPk@+8`ePIvUx3{%9*b*H#X1?frIZtCTwUb9pXgN7P z2KX8LZ%6X3PEMOP^ZV@bjW4nw(A}Gxn?Uh_ioJ8iBPdKyE5ZG!^? zjFE(0J;d{fQb?*r_^KE7j^ywIOeZLvm9|}~ebt&pCMKO9NE?JL-Y=v2PuDwxF`7+% zudipBFQ^8ZW$!6PJLp$<(0(3CMf#>C5m8Jo@2^kl`tFbd;@(et41yy}TvH65Sl|eG z>y5jKUc6MVD{mHNe_Dfa7tzG5&l9oUB$Dxe&I~GxeTVj{0;(qG=lGABBzQ~$NQ8W+ z4ZH`eK3eH?^A&44JAYxBo*bF(=xN4ZIF*Fk@K@4O(*^z7N^4#GUjg|W}2w|wG$ zut_eFKpPXn+BL#yZ~GV6nMd8<)3Hy`pj)YI0+)m^?w$DkA@MFES4;Gt;x0W;()dZ! zOZI)hHTuimV3mDH!WV=U8cRIg@b46a_IB3%Qu-JFY~RmSt>IK@SCI}`B(WyQFC3eQ zY{qb7*)c@YZyRJyZ5z1TFei_ADa&8k|v6faynJ@@N&1CuJU zwPG=cCUa1onLACHDwu8)DWgFrQPmhu+)EzhS=zm@h{n?QQE?Oy!;2b0uw6%tu5@OS z^!fs*Nx$~lKY}q)>sMP_gX)KOI(p77l}DQf8oVW|UrHm{%L2>lvX2pxR@Zbn$u>bt zOUceDCL*pXd>p>Y?0EGpJOz9SB{dy3OhcXI@v5SgtTc--;zG2T8F;CtdVoz9X$4wv`c3_`O=Cnb4+jW6x z)vsA%ZIYVbu5>50bu4jT*oK6=X-aKIPa?{q55Lfj^?eYx;;uGo5F{(jPi4rb`YGUG zA_bNol_W)qB@$xw{deSc)|KS6S{rYA55xJI^=&N*1PD$jv|qt2w9-HZ>6SJXKIzFG zHj6FnA@c&mrbZo;!cNOJXI1X0#))+uKL0NiG|l-JEd6-2;~W~;TmFiInB_3~vI*{{ z;K69L+|5fzWpcU7=Nd>L^B!A#)uB)u?x74GtDMDxKObtBUBVEv6=-^nRCp> zyV$?JXX!50?0az<`J7m^^V#5AQR<~K7hh|cu5wRnJ?=MZ44}fU9ffIEM{lZfrmBr@ z5OOGP**cqsU^ub91>!PMIy?41>&Tzazf*cWrMMXLpx$e!oyeQ}IxwzfG!XSS&pwwo z=VRFdTdOrW+~UFUxB=nTAV#lNo)p$S8V*utL-&?a1s#=EMkhpFHMlkLCwyze9 z0pLe=%B2RivuIm`>0jWI9}Py_JZWF8OeZ!^E2kB-S1qEsHNsI^iwBP7Gzv5;2kd?k zABMo@i&a=3PufGN0fvLW$~`bl#0+N9Uz50JknGD+}yyx@@t(CH?Jp1A!9w zKrZ}7wX-&jtO8#=b#bl>b8>wf^faOIFaGs93KZQY{NIQ1MZlgNXT6jLmv2KY$RE+? zT{AcC;0~mw&TIL4a0X*R>f8x< zv#QoT{V_-Lc%IiiN-ohwbKqaf9{jV6K}RMFZ4d9ZaXGaWzvcD5oDJD;T6BG!6&seB z`*r`L7cDe0)E}ZOIx7NKPGT$oE|zbm#jA<*!&tkjx#)Iy;AJE7oI}QwIOXmm*g>+ zum0A=t3-%*G9llpEKI+6$=3xrn)rI7(4di5X}U|A(kY%i#jFY(jiw3@$iQNvy#du{nA#*`ZwXN+IbundUGg|5Vu`LH8%t!oL^fHC7t@2bSaG91EW zcl+bWooGr6I*N=usXA}>x;G7NnR*{+_4c~_*4i&DhzIAqs_p78$S=fyd%Lv>6;vXqk=lZiSGrik-nd zt$eu&q1%Mr46}tVbdDOaLsWwFXH3s4WkP>%$s2At!n2_Cv6kN#4CG!v?wgr=a?&#> z8JLFIXy?ke;o@CW>%LnZ-eN=yU&lEaZDY$Pu;XJV! zv9C&qUM=l%Xv{W4S>NF(ltkv%H~c7^YbJsqK+O5spy(t9eCDrBH2eQgy3gR z!la%`X^oT;A`x0pZ*t?zz;j?9u=Cp=o6uGgZxhX}Zp)Gd#S}Pb_*<1JJ|vTq5HW(EbX1N| zuM#sRtykWX zcQzr0wjg8f^~-wMyZOkNec!Wq+50`!7*ANc_~Cjm0O_hf|86r7Kydr+_tp2@IrH1^rF4Ahc&tELMC^&guk5N%9@mhMKHWXQ@K z6iq#t?<(qY2Q%epmQ!Czrq`A9xXM(u*W_)zpVTgN?)Wh)=~&<)RTchLE{xV&`7Oph z-(I)n>}fx2)#cVg+;wRqo>#re(Isl3fOgX!lzKR)nQ2O_sxGdH%@uiaTmA`Yi?Ci# zskE`Zxi@~9)9L6%=u%0|W~kpk??>sN?L?}EK){yHUg&dtZbY}xui6=bchhm(uk2>> zQ%Rz0VVqtYd{SHTu|7QSo?R3cH5W;iQm{ZpC%mE6!9$Hs9Z_VOxhT9`WV%8@N&AE zmdl%9Tfl8idfY=6U}nDGCh&8Ru(Sz;<55z3;HAF`v;Uvx#8k_(uIrtyO2q-ApT&vH ziub>BH$@z_ubX;E()uH6N8{iBqMDY`?XS;Iz7bw8Xv?u*bZPrSXJyU2~6Vg;>gZiDjeUaFL*PKwL#ISV%CI)mBKLcf1kMH&Itfqh4*Hb9#27EMWCu zEtInJ&^Yd5#j(TWigk5oa2qZ1lS2pC?N+PjCZ{3>5LOcYw9lmG&!$t5{1b;uK>ZhS zvFmrJ(fKPMArijZyP7liva66PQcS!@xs1#6$_rzeaT2*$LDdltZgw}^n3uOJe(t6% z4<3jsKEnKMVQcWp2~}o?*hc{xDq7>!*K*Xsz}~`_ihmZ|F<>1GO)vYzIkLMkWS45> zIvbqs55jS;Iys)d{}1-QDkzL6cryV)aCdiicL*Nb-95Ow1cJM}ySr;}cXxMphui%A zRrheuS9LG*Pi}|Jmy~0DOcW8pQTroTQ%^V3WIg z38MX1OcoFD620cQni2nNNZ<-I{If`Ig!updHa%{hg?XP7K?oi{OlYLmN@9I=EAA2Famw+y)M(z*cZQ)c8owMJ!0FwUDC9llEe+Se}25;dtUu0QA$lq zv#_+ZG&6I(XgOS2UBxX5-Q?TleaDcgPv#q|Pqob{DbzNOuK|%kbOSa{Oj^g3ada*Kyx0InLVmF=t9=^#R}`St)e8SaEwi&IF# z0Zl$X_<)Jkz;lTXd>990Wzyr>a+n&s(d=LV_SjlkSVl9>-?Vy979)qWK%F9*kB$6h z2IARoo56YdYpc}~q#Wz5`t?l>f^}XzXx~i789yAUH`8qW-Cs#)6U4IJ1F%g+GtoEd zzjyJn@-V45hVr?J@O`f1Bvf4-LA_cA*` z->M&6o`X@a!hM0|f)vVL^`=kVSWvm$HZMWH zoM5DfVHdGXXT3ho90!wTSs4aK<>bFkz-!bXfpp8oB&fBP@^JigpmC^SVB-tIjNN?ix(EmCnZ}}njsp!XA+u$J9dD6V?GqvCON7N)=aqfr1nygvt$?{ z>J@wuzbQigq+6;oZS*topdwdWVcJ;Zg7|k^Lu5U4N^V9>vxkN;G!gQx8+k@=1Z3~06(1{*_3cbklAW>%{n{ER?u&-vHCchy3U z6{~EoUl5w(XBmx+L>{_5{`yw4;R~Yn5$@5InLB<<95#oJtHNb zw*LB(#_nhd1V??yd zm}}>Qcnp((BQixdtYpGGBp262f+xfW>-d30mu{p9)LsQad8QM{fwQ4ru@ zs#vtztBt!|Nezw8D0F5v9&)`S?(?8w<2Y&g>t(0sIVshrh`jy#;dSd-Ue77{mU%(* z3$gla_vu6RvPF9{fo7D%kaaocMRoH7ab|{zX!2^K;w<6m<5kM3r@k;7uB~}%|B|{+ zasq1xf*qez1feO#@ylhptoIN!C8mvWi@LRc#(@wGFV%rHSA|%LwvpCgue2KFpw%1d z^3>1FEEi{<$sQ*vVWH6nG6Au_?ysA%q3MXF9NLpV1+#vMh60pB}m{@gM3 z;YVkKCjXzfi?i3%dZ?9z%eu4twOf&8PXrO=J0UZP{W@eADjPDT4Cfz$@x2X}A8c=~ z$Np}N0Y3SN#=|-b7_kic$;}q}6jjgK!pTo|VQAxE$cZs-v;quG`1D_+Dp0uZi8LH4PG* zk(sr-Vw8GcAk@AE^3y;V$FFUHuj$iVwT)vi6H$HL4vZwO_gfOT`--fQk9Qy=kEV4k zg5{opYx;~k15t7miU;H(i!;C3Eqmk0qu@}jROr^`u&1Eur_z-}?k@^8APU;i6!Q4T zVw=d*&emoCNPAV?V*#b$_;zD4niZ2Kk~^%h`Z&qCCuYIxnZt0Q{qtW zV3{EX6t;0>E6amG3L1{{K{djHInD(dr{MDL@Mb8_G&_~qVMQU&w{%OsJ;zLh-ODh| zE?aYtD`hs^9hE?7ovm%~Hz=U?hTK{R+f|NB-x6k#9X}B{PMO0=4KOBbNfBOQmz_jeu6ic)fpa=1yD599Io#lZ4-A_j~PQliZ#;c!w zEnPT6@Z!||(u7)Upul%5(WHj_%0Xir+-`|h_? zNp0s<6cB#FMT?bwSY@@?sn+YQS~3W$4mJ9eBWJ1$gd7GC9ekyLPfz3qLx`|3FSX%P zAYWlSseP5%?<~4{ipa2g4$+RO6AC%5QD0lhyU@KraUqB!t;9d7@TioG!q$1ScH<_c z`YoW$AGLZgq0Dx_em7Jw>`53j^m`Jw=b8#_e1M0c3!Mj}wIDC&p7}oJ&@rWW;?QpQ zt1q+2$GOGX<%9|NAoEFrkS6}}Ra+kZ5?^KQc<{BE&A5*Tk7KTgff6wTJQ(U;!aVg_ zHeAlY?5P75_Vxr$=c}9N&WNM4$-_$owpb(%TuM#>x16T8b}eLdQ2~>i!(BreFs}^7iC@cyOKsFxbAAsWwb!Y^0gA5AA%?6Xr+JfQtA%3(elc8xxMfU+p_m~sOb<|0emL!?! z{ue=E3>?o#_2gpz#a75c0s?hT(vaxCKn4L!V4GsXi2sl0LkR>BB#uaHWBzOSk8%|T zob}5lb1bxbbSFQ5f7Q{;Jg58G7$ZdtvYI5&|7p*Z zA(O@JV(sj#5}d8eJ2p894-bF2T=yLcZ;u$RG@{!Ws3QlQmLd4&3F1grfh>N+V%I2a zbJy#g{?5)$agy4f;cTTqa)ikeq!`)=#-1b?kLYvZ;Upik!Tb6Ss;B%88k?Ur( z9t#=Rk&a}OMt+>78O>#QbdMASYxYG{x`vF+4)y5DZq4K>p#f|lY?*ALLpvc|`xcx+ z8{HQBZ;vDZ?G0c>SXfv@;qz}SFaKQWXv_n{;$>rVJ{ZHiN>54Yrrit-49v{T1TrD! z=H{kg;u_=&6omDdA(V`Y!HE2HgXSPhSyg{}=m)L`R;OcPEm*Dj&e+DsTicLhh)m+L6KryPo>#chH4gd*?M= z%s?a6SSpHV$`ILqlPb&ef~nB1oqTIghc#(%Azyw1@di0Uh9+fpMK4d!Ou@v$;;H`p z{cC5w=z}7>_8a{cYCHRI6gvkj;djBhQW5#Ra-SdEyrkrHA03M@m#T_C&J}zEEs&7dezGHYHrh8{Po1o3nOPU*Nqw) z-AAyUan>CDyK3CE#JgFv`R>%>swl5_vvD6M@yk$-{Phpq?KyiO!sy@gGE%obZ;DDZ z7s;gCNz!#Pyj)a!b`J?}`?eFio*eTHjj2Gj`^qe3BWpjO$xC9q2z&t%(L>KD$T%?ipmk?^A%2R-Lw1l?1amFKDy1ewC|z6la~&RF@D0pYhs z>&K?2i$~1xdNv;tNU^yK{LEt&C3QF*GI-%@e8oyN3Bt1%wqfr>02L9)DM>ZuNP~Nt zZI59n1lU*`OrZBq6}2sgMfK*NWZX#$K1%(;a`CR#Sfzw{u%lE%_RIz^wc%`|04}6b z%B3XyXA;J?=!oTRo%#`fUVOj8OwPWSQtC&Qk6nH zi?__erG5^_Y>)EKc!073EJ)ysf0|uMkn!%Hoi%lcmJ|%eggtG)Gr|{ z)e161FbX5VIZYWWIx0<)En~Zf>1uIn@2foAbd?=F45VI@hY1wDVVRv|c@eeG2s|!N zyS0r$7(u7lVM} z6cGW9A8FaqY>pH;QLontv`D(#q!Ogk*uh1m2xA!foZLtQAGFhc&U9n0b3Xe5iLeD1 zOF$Zf^3y7@L8Gx<^1)-Gkv*VWS^d%MqanJ zsWon+y)0w1$f1ZqQMLX0^Xyf{!}#FMnp7Q3JX+ZI3za+%WofkAE#2XV_5NojPfEfs z2hzU;uH(}5-l$T=;eM!$IF3A?G`jvDH6(@48j7gplUkR&Y!9cd`@=zdtwD)81 zoXlG>3o+)s4st0eG^yWrjZPvegLFjN`&Bu8)&E(}&J?He7}e1lG0`ZSOpISz$FG#$ zvS@98%2tXqvAe3%{?jz_MtyfcqdcsOp^(l^GxI@+l;cwL^hfW3iKB3Z1bXp`oVICr z=G_T<8giiB2RWBgteN7h7oN+CSqB{D-j>dzKVS16ls z4)`;TcNPsa%uW7|%3@zPTJXKvKZuX!Bo(z^8eJIzVSMbu~XgsqGbQa*Fo_Bq7{vJ_0+YTg2Uk!B~2|d3j0hgk}63~ zEapU+gKyqXb#?pvSs}*U&YfC*zo?oOSQn_^zBJYYB>F6TUp z?qa?_QSbUZjK(LT$wu}8$~PO}^lj#hr{#z0sC~bVn##Q>*At>v=AX`p#wXQDzaGl& zOp~E^Os_!ISYS{#!I$KJk;wN5=)_hy$0C-C{EH#Fq=4H{h4#p07+}ZdG0v z`k1~+HQ9cbT)}lhqk~1JbZAFub!E(4agZvfIL7ZqaUP9IXd8t@(Yt$aRZ`OtWnJ&n z-0-ni;<)4l@nbV@$$HufPYy|<4{vGX$u-UUVAB9?=e&XN@_0N)m5n|9asqNbE$3RP zWZ?dKu(7{!v2q6)-MUdo!CycRBK}cL)iKre78~^B)0^94r^kp-6@h#jUt)+MVt!#T z^Q81u7Cs2SnEujjjZ^l$aq_9k#&qIN3N4#TGUkht^s2dT*3&L%!)K0UMbtn&l{*a#sE^EZN(?F(s)r8Inwrz8cHHjf^mR#?z_i(Bl zCZzY!o9z9L?Hfsafk`zNUd|Au%JR3edv0F(iO9thFeS3DfX|DjE0(LE!635Mihx<=hF z1uMl_>78y(P0@`*XO9!?zZE)RNn!zW$ImHYkho%{QH_9hu9<@?7+F`^jhG`5(cx!GJ!GVpi;xx?exqPEsn zGrA0!*{ar7E~y^CfCT57fO;>eXl!JYkd~E=>uPLFBw89^VqjokV(QUBJ0XY9YSFrw zDUeiavsz^fC#-{qT9q)|c3EqR;HwQA89rks>}Y9z!hE{ptQG|COD&}AnOR&Ei^3qw zu5lA;DDcaVij0hn%Y2cJCJF-4KmV9|83q;yW@NCs9y*_>XB}7Q6K)Q5|#~ zEUY}_L$w}!;mbT69Nfp-A;0N>;KbA>{>N3&-0xJM$F@xos7;?wucs+HjTZZTs1!so z%WS9mWar`E-Husgjh4%PUun(?DgaVid|vnXRC(KC1Ljtk6#lnucq#Ea6gd=_pk6*k ziEjUmj+c|NyNr?HM*Uv!8#(faxE*FA89%~;H@C2#Nrd1iluO512vgCrX{g~jG^{YN zu-DQA@bfPbFT|u-fEp@i@nsSu?F>%m_rW9d*z*0J>GiO@`T6lU^!+<+(1j`AEfCW? zk*(soR=f&O8o13J;(uP_bGCCf!sBxJvk}_f1rg;F2-$Q#9}Mz;*wr6wb^jT{r}}*< zMFcHz_p}>z8^XW~khC44AVtmTbb6*7$O*B)QNEp-@_TH0J?4aq*U3T=mwW=;sT@TR zIF-DC@|=-un1nR- zQv#5nJ%`?T^({Yo!wcZf7zB5OEh~n4@5h@%;Eq|*ZgZZtFiJiC{+dEnoJje#Lsaya z*JLK|7vVNUMU8H64bS)c#Tc03To6*%o-8yZwXz_N6=EANxQSvwG}DLzP!Vq+IAi&A%!-eXeHwFGqR# zpTH#czUuz2>$?5T)2EQ)3Xj_vCSR%sLul~F^;IuCb39G5f!wBx)jNhBK#0umH`zR~gee3&KHB}W&jA9*Y5b)x7R;Pbxd6M;df z%n?G;c{{;P0cY+vub^TdQ8}aAvUo1E1@X0hlj`TZ<^Te^fN9I z(*T5VW|%A?)BdY3X6J}6t2t$^H(X?#0v#kMCYu1B8CLKUcphfN0N$C=#9y8RW{n*5 za)JOUDhk{h2!`08(kVF&Q~G;>%a7MfQ_<%jpQrC{)>AcSt4&du5EeDj>G@j(LciZA zD4{U`dgv$|p)^D{fCc)PEOe{|+JjQ$yZV=~@i8G}|bc$MX z%2dKTUb2ZWuANE&m&06%dW3lFNKunA4m2o_6+Nm2qechF1WF>BeL6#9etmhPBq088 zD0^|W<#MPue$`9xlq`;vw%5&0 zV(G^}#Krn{qS|!>I<+Sz%n&P_dZ0m+qpzin;}D8)L9p_hWLsqCiVq;xp+Lzb_BGLx z=?iw6VT73`pL@NVm7S$HUutaR(cl3|oSI5I{Z!3~s} zmR@ysPdNgWer=yO%wL95B6w+LT?49yX9hX^_V2mFF-w=xg2V#6d zp%3H<^M1-45VDoTsT3o>QXWaNAyXk7;f|@EQ&YnN=f3LrHVKYuPJ3lTx zXW-*QDXIlAe2LR}HUa93Y2n-s2((iFNP@38x1PDgMnYJgg9z|&oLf(i4e%WTYb9Ac zdqt=U(Sl$xwJ1OEm&2}VlKeALY0Sc=kLeE?;xhv!ET1WieYA7-# z2%LwWIQO>$h6EzVILDi(Y>EjT6TXwX?|vOp!~R}!4n+J$c?4N=Kb6l&$mHlxAORjY>Z$zstKk0%-o_DbhmDvN%k_k5o!~8Woo!{%cv-g7t1{I%Uv$_s zM2_2~Pl3KCAQN-;ZCE@PLG2gFD8U-FRqh=9KZ^zd!~rti4*zk@z`|G?bL4>EQ%L46 zqO2yP!QgFV`4`p~Mw~^vh*S3YaxDjiI-vQeWOix*_B@?yfMFeeC%3aJ5${E)t?v6p zarLiDs|}Ch?QYSw;d|k>q{rmg75~4X$N-7~S;~7#q6=h%u=70~JWcs;W7zku+}p%4 zZHW;dWs()T zC`pMRK`~gVO7quF7#Gal)>~wE2Rk^*6sr$-cT5F-maAVdIXkIMHq}m2#GGt1UOK>IyMAEDth#F)Tes(0;EA}mQ zTm@D$SNO1JadBDluYPLjw>S>~UZ*cDULl4SDB?WsF9| zvxaCojm!z;2FRzOtI|2~`oc|vP>KO%gh`rr0{^|43dp>t-Oa_|Sg$r2hG6!xLSaOF z8eL3iNc$lM8GP!#0!b5ApyQnSAtl`iOL~6V=_r?CWTa=@1l}lv8;N;OXgPF0emQKD zf6Ol)Gt*Rlye#X1e)h%gJ1a)^^ZYhNl(8sOCf<~_gm6rGk^V=ep}8Mv;k&_AUXOXy ztPsAek^(#zn((-_TB$a90?lA%EEh}O z#3v%vw<{RgPY=MEOoWoZgoSFDsHHR{DjTNA7o6e`A=&GHME}#y9?<}_Li;_#BG5Un z0_&a|+19_|(z3X(6H8m5Z5pWCMKWzYg?aXZ@ztzuU?4%}OcDd{v%amuwsLqGM{uFS zq|I8JSC#Uoz61f!PLqQLo|<(?qmq?0bZko(3~;H^kex{EO?Q7%E% zt88kbsk%CYWK|hU_mkcKFRxHG7q7KHccDR$1{_bb;pgh$CZn4=r;Eps0?`&`eEu97}_ zRx#B)JZ$uN$)m-OC`;ys8N=f1mfUaE4WEpq5}L=R3f>IoLD59%yWG=6%R8ZvEq)I zq^)-9-44UyY2KJhVIKKyb>Yv<&FzdhQn^|pF#o?;L~{E*4HX)(})E|Vez(3IJ?kd>sKPe4B*EYw575>}WeE)%F zN85@$J{Q~%IFULJ$=f6|r-(2$*3{R5>SURg_Oc8@*__)+^sG^_wN87Pp@^|fecH`oZM z7UKfgu1C{(0fPGO?yW%5XF1mbhlhv50AUMjEp;6o+DabA(~{?c+3t`^ZG+=!b^!l5Om^v98!GChlp&Qt5Kk z4>y5-SIhI))tg?F{;z2*>GCEEYK);*MWGheTkQtT)GoQack7UpHR~~>ECdKNU%ld? zT4uuR493`^TA^Ozz=E-@;)mKt#}ZVHLdJ|#%*#w`j9_GDMk*hy>bXpDPD0yDAZDmd z;zq~2HQELG>rKO-`+EidCWn&rxV!k~)ov`T8c~QfUx5VoHSa3wA~7yHA%RuJ3075= zO-;YsOI^Hs9|gSoUabtcM%9oto13)>~gpw5319`?{%s# zwH=zf8S3nZJNnq>9PGA)PR=C!?Og|QbD@Ld!VBa6N<&KFey6T@(@)>b<4J%{{Qr6a z6YbV*Z5^#t+crb;82VDSi&_32^GLZ5jBbF-oAV%xp#+VZ9^4^~!N-09PD z?>nrs;aKQp1usWDc5uqI_Vp|7dl`oMe`~0Tn1F8M{3yOH3c-0r`rg?6qKx-yI?xoS z%9hikhPmc7=7pTDaB>381j4N?Gwsp-%>u58Xa3H!FB~s}lP48d3*9^czc(IQ>joM? z;(^a(ifV(i^|(;;HlpB;cDZe=jpNZ6Nl^&=MH!}T*3^krtRyUQa@Kmk4g0i3$h?AK z9;4esbE_xrB$zD$tabXszb9f6>LKSLmDg)WYTmA52C}9GvMWEerJOFSyf_R*%_~|X zrfG}W40%6P5s^1oaEqYS0LTHhI6`xwwiOg-^jo3 zWxpOq_qcjYZp(d|cWxB}r&{Gmu(oC~VRLQQ%1wkV$qq+X^g|&DSkv?30I;4Sro6d) z$hla>fR@$m(gBN0MM>9>il?=N^~(ms#uL*HqSiJFqlb(v93(BGnjsNkwzONT6)5!sLkJEYykpOkV;jyuX`=S#HLt(3fU`k1r?|Jv2k&^JsMx9 za{f%4)yLYnkvHP9g|khTnZi->8J6a1<=X+nJwhs10PG3i?ZeR)mUebd)NKUO$JBLR z$h`0u9h;I%2`JV+P`ejsA<;??+=La-z6D6d&f9^|k!(ax_jK(A_N}k>Pc4y5+M^T{ z?^q2`ZJ#ci_$5DpjUW`UxSm*}CQ`EZzn!2#0{AHvk?Bjcz*69q1hjZ2uKRKGzk`1Q zFz+;QIcqfkojVc%ftUMk=HJULPyuSYfy>^Y32636lKugjmdWakLqG2A?QQo40l`vI%txm1%*@Q7prFf^3ypsw zGdN8EFfbz{qdN;x^)opJEkK|j5={HY1q1}^+41oYV}K_4@4A}s)l`lUN9~VBWMa3> zofe0~mzS4DtJML@9^4=SCSY5s9syfux7{^kXJsV}1{i>Up!F%^Ew=rdh>F|0b=!7h z$0#UAP~!x#&}shhr!$)=K#*`NYD1?*UTYxrx|y`KBb=vzim)09%nuJ;CxlNjR+r#I|ubx54`4v$Vpp{G4gKfL{?tB1lG(i zO|tV{DSchn>0#d!8YDE(fvpW3#Nq~)<4BS!fy@2w2-r@BjE8G#Y8Dn20P^NRd>>E1 z&tM;N6UeBuM;1G7b+Cpqc{n$RqDUa#lJE+Ex`4-kiI@&4&j=Z$Oh8XMPy!)FjiwPO zT_#0#3m|!qkB<(Ub`B1=fw0)Zx`}TEU$rGAM_Zjv-90>jT6mLL{F6~>0vf8S=w}+v_smz4?I}c{65!8|eo_it; z+ygl+_hsEC@-@3%5-o({Q&W@APA@M{R*ZuLGuw=YwUTAjOGem)u%#@Tw%Ir|I!85* z!pr8e)j4)i3ti<+`jtkyqS~68CRvn$T_lrOPTgfyN-d{C!pfmT+?ag7Hc*iX+Bbnz zuFy7*o-@H`u;b=@x^p8ZJ+ACYvgf{^WtIkP%Vlqb!6NTk8ou7waVK78b( zyX7V$=EFB9eUzG#xc6lJ1?cN6pCg7Z=%vzB83v^tx%J9xgRt|SHCMB8Jqu*=L|GrhkwJnyC`BWx3o zW6@<80!|s6?aL(PFvh@{FwBT@<<= z*0lTe)dXL&ihfa4TKG9yuRAPOF-}|NRM_4$)KqqJCAn``(tkA=KZlu_Z8TK~<##W4 z1clyvls0HCuE*F)PAU>t^Lf{bqW{~j?Eu@^2~^qMYt7VM@E5p8qR?$l>hsI1&!15G z+Z_(inwBQsQc@@vX2Ag&mKLyn+%uOj*6&{Sb=nfH0y+h8WSln4U{BkWiN6mQC*q+s zR`3~1-@R3XpC2pU$$s}4*zqY%=8w|Y4wkZS^XvlC9GKTIk?W91kFQ-&+k0#uMwGnG zO%0j~1PeMOPu}g(ZXl)hf&^0q!svrF#CZ*w*xAmd7Lr+EbI2r@i__5zdp_}a=hc=b zxKe7~%nXYutw{@S;{LRBV%0Trw$q&#LRsSto0y%P1qKiE;?R&5(DclL4t^dec@v$Q zoS1D^-{@?pJZK5`m#+{xj~|!p&3I>vxPKO# zo-*CZ@gFt(V$MMawZkbfG262j2d^TNC}~u(7iQI$e+Q*-Fa{yLs_P;j(12exwz5C2x+omc%g+l0hTCL^_#Gmz(_w>Dz^n*%J$@eJ>8&MGch@GbTH&4*>AV`HJ!81&Nvx32!}4FolV;mc5b> zNBWg>*B3MtJTnjbgFjhOA6tSqXDM^T`OIN7Aj@_con!kSXQW;add2N=X?7+(nr6UWT zN1V4i>9EAApq@0Mnq5@dE~lb6VINLMo5jPP~3kNp~hXaXv zGVk1#nou$3r6mvhP2F_TX~oO;Q~c9Ot&?FbHFS-xriZP9xd7%8vsQXsgzEuEmt26Pe6ZI;rSo1vGOc zcEeTVwzRW@pQgFdJonpY-=6|KEb!}<^F1E=Uc_G``z~7LyoP_4KUJHn1l$cT!?!Au zr`TVVm2h*tPYf^T!R91d)nuqL@kX)oG_)P~hR5NKJ#_M2V@sB3hjideb;a4oMzQmG z@VQZ)o3M$pPqxl>;k?V6db)IIPaca8!N?vAYW0%}l>H?&EubrG3u1b=Ycnx@`3tgp(x0_*prX&j)e(Q78f3v(nF_ome=S>VF%`3ITF;rTMr%Ot9{OhkZ&bEn%Y z90}&F`=>SXwQtu17QHejaUNVx#ZJJ`Ih%Sef;N2D=sES$E$5pP&m52&ZHue2H~*B{ zz4e!dlkMP)#rG~ee#X6ijZQm$+Z$dsM1HOblmpdhXKZbtu4&?%V~IcYC_F|6&ixsD zA}m`S$4v`jY$Ver6}T76dyw%NoV%SXpr9!mm@cVq#-=-+6RxTi+N!3kxM|)=w~rfR z{UK|v&+FRVNWu5<%oESub<$ZYXq%ks7`+7|F(H&0$((*=VG#DFyv))S+M8G#44UF( z8OONSm6d&<-{`ZPXR|EcA2kiQiKv`?#=oMtw=zUPSM5&r-=av73r}RH%VuIuMnxWq z%1+>Idj{JrBW*@jNeemU1P;GFS?Z_Cjj351WdqklHRYD^P0gZ4$XZflaBK!WrpbgVrpb7KlIKQL*=DZ8 zKL}q_vwnInX`(Nj%*m0P*Xw}Efgz*CaYjjha{9B*!_L)B*MYDzrE14(uuu{6Acmc} zhITsAwj6UtV8EM-y;J{-hF>9kl0(1{iqLEpMJLHFPRdtU(ENo z7}P1ML4+&XsSt`l0ih@}jm&QBS0%@quO781fDj7*7a!57=D;~rD|#aAeRWn`ca*ly zp}{Ou$n6xWc6)Hdrph^J8fiOq5qx=&e5irJXWs|2+pIltM}WyZ;b_t9#larT9dgH` z^oiKhKyI=*80As@AfJob2bHVhC|Qn7h&Kw4U-}6_M^ce3*K99OEpM@yne2v-xU5*W zs6<#vw{vZ`qiZ;i#N6G|CnT0}TFxc&t(he>QJPZ`%v8ae$$VfX7Z*LwlvyV=B~bC> z;YbuIjH-n~Mj%v}*vdnL$isE)j3`u&ATM^XRtQ~GyRvel70lffn=Q!!GRl_KM$;4h zKR`$_P&2QQ(4$2*wjFCaxP5a8tr(#pnU)A zg~gwj!8?gEJpU}BzMZmAg5+F6Ss$<&2=lo6F}hBq6;IqXtZl}HWpS`Z<9inKwq{!&VL0{cGSk*x8ulH# zP=jdwca+EPFP#E>Eo|lG29Ng)e+O+jcaJ9@bfhwVg;}qlt;<`+&Eh=7reMos;8wbU zY=b0GUl%^koo%A5m*d)J{7{uvE>}>#z7U9Y%nvBJ5G?heSY1V1KFTt&t3xPgrW?lf zN0}?ozr^IE-^}0{PG3oA?wYX9&(wTOlV@tW*l6A@!_DzJamKXK4md*unHSdUr@+k|L*Z9eQ_bQ;66~M@9}VlB#E7IfIi_Llz zO5t_*GG3u6m8|DYWj1{SUtr-B(m5F~FC@-FRvXr6hJHos=0DBRSfPgLMy43bp7Wu! z4?VJ#dNoKt69Z9)Ap*-i6*dF&jArlhAGrv^Yg}IG^!2vl7Srl|ezOCd+#9PEr5eJx zE3hu>v5!%(rL zT+zPb;GE{-Yw5^A`1ZqITT5Ci38=X6r0lG(=q!xjj@XSfLs*q>9=`LXty)I=jg9q7CmO#}15a zxu0}7E#JcA5FgJ5vGSa8Z}0uoN#r5cG{Hu$n>m3h5^ug&g_RG>c|Wc7rlytE4-oXY z%Ay9?HW%?$44cEa94JmS=frt1*6$Vq_l}jicZ#S5o#+(3=5vg_97a3A=UbZ(oyRF@ z%LKEjAmbhEkiLjRvB#&git45w^RmVdo1kBYRUq&gMM|1#9hWzgu2svcW*xaUH(WzA zy7UqW@rh8$(Na9dv%jq`ch>z`_T101pCF!avfZ1giATknx0t6QwhTyJ#a_*_iRAs| z(Xg0zy=XtAOK3}vM4{OH!+*r~^GjFJF|+nNcsi6~T5|H%c`#63CPFk%!<4GoAErzM z6I+YDyecZO=}9Rr(N2VOHX-wm*5g}$*x$8At2C?AvW)$EV|9nJW~No1s%6>@=(=)c zNn-#eMxr2B+Hr}^OD;BDV{FAiY2PWjKj!n^^0uBN<{n$I?Jq*a#nUIFR&DrtswmAd z;3blOE`uWFZ^aEM&c)-Tm;xids#jfqIlMSc%nrZ zfWE9?(boX(0^l^{$ycifpxXaneO6(>JH^VPW>5;?5Q6_e{=`e)f0ud@|AJo)LCFpP z=L!LUtnYIZ{6pi_41w##rQabf|L*^aX#ETabO~TO7yzcj%BE*f`Cmu=nw_Bk^8ir* z^@xB?PNx2M_rLD{dBgwD?h{|s7QaN-g-TMO?AVYXZO429F_1;#-~ZM(nEU-o{p(Kx zP13u~K*^KYR(q+SR>snAO;~LJwvcaoTm9+C<@NS-4Nzie(Xq3zu<-sb_Rc9huc&L+ zQKL3#oW^eK#y!C%u6jSvn}Qc`W8=YYNq=<6|CYdDIw z4x^%=K=eOl5ZN~l(lF)40^Q5~Vc3qj5k?m=8*S}(3EE$cjg9wlSueBplfT06A>IAO zDU4Ag4qPi&pPJEFV?k3z&H7)t{&d^wHJpSoDGN>#;&+7?9qDo|uIcH>rgO;?MNZ;&7xwe{ialfKbM|7vnrLX0(dZV>rt?xN= zt*U0<;*5^NT&vuSJw;Hyd@sQntj{Nyc+%BFiFt+2X1$j)Jo&Yxf_Bcou4RYayBGyR z7V{3U{hv(|uIs~Wl-j;usjBR}->L5E#MQc-4IGD;dQR)VEbtJ!yA`&BDN;7lWs0jM zcB~CiH)WO_KIr+IHq_0&Tz0qcv~C;+H|MS;JR6CQf)dJVg=6tt9R}aCR8Bf&VMJa? zFNJpQ;KY8Cnt_F!eo@_zATr&nf4v>dJ)06L{!%iIHMW6s^>#OxvL4o}`@IKNhDRtK zHG{+I+t@JWk+ne$Oz9rac|B4h{K^m^#JMe)Av6mGSDJ$L?E$Su=6s3e2-hZyr>o?s z&Gq99SDZC`-LK{uo9JB*YT1n8;)RM`x95VMHU-V1b-^))_LSk-R<7bG%ks62-#cqH zK$$b0*L6G1vAr8ZMnu$i(;Uk2&`zz;Yk**+N)(*&leNhJQ@XFLX7V>}=D`ffy}=pO z@J3pT)Zef^p$Gs`aCfGjk54pMQseNlN`xZc<|S15Y&;yssdD#s@}lC?mNkt~{h0cQ zjcvH~dh5*=uVzzA(*x$P>zUcEUcKkhfE-fQ$gB=JvLk+>*5PD2JUzQTOBmZtP>o~y zpgr2U`bfiX)Ck4N0Q)gjc`kWTXhl#!)$cC!6z**&Y1gH#880VVIy@R^>Mq3*%>8Xx zOsJ3bXQktO=<3zs9L3IpANGNg5jOcHKMeIBBNxwNy}%>Sgfz#r788@Vb@RZo+s>!H z;D>i?5~2I)-hIiemAX;r{`22e;)dTjNsR@M;W+G=YU37&3RF?;~jyA$OsYL`yyrKsokDa#1bNtE8l48UCnI<;bHNymk26D8CF0#CRaY>y3$NL z1)G6tlVg8aOovTX#b?6T$QTTj9pie4+LXzn?)$kR7^b778-=@96Y4OmwM^RwRtEP|FK()lbJgGdEgq$5UJ9Ecp5)Jq0Ij&ZBTQREUV5N1aEReN z*{M)Wum2J**SciBX5N?D<`TB#rK;(=MwB|$)N8{aTF&M)klbSN!?9$xX|TK<3r|FF zEUfdchlzCsI;iowR_ph?tZuo~@9fbf@{=Cg2#=9cQ+pOJQ#c@4>lI!Bt+et(H~%h+ z=pUo%i50zeq;>MZvRaU#^-QGvH;sLy%CizZw73s4j@)vy3Vu47V8UoM@i|=8kIhCf z$aNV{SDEp7{pvKiCNI;pwEJtgXa-`aInzD#;K8gx6q{RY7KbYq{4pN}_dfIAt6VAZ z>#_+`n@1>7GZZih5?Rx&0V~Q=f|2x)6&U^Fs+C96U4aOXV5g#+B6_#wwU_vqlrD4S z+Fo{sv<&)V_NMqkVHr#&tnkswV%ahC)qN{h;fTzw!MO9lpt_Yz8M}R}Z>|a0vcYoP zrWUOJWoZI<-&~gJvD)68!xsxn8TsvQSF*!J{ler~98+hwv~uUn&lR~k8GqiNG*fWp zl2U({CjA?*^JHOEGH7{9%m;_35Kx!4xM}G=kIkJ!^McLh#KCh!!u)N75z$spcHDin zW&C?DgruHYt$@p^@Y;ahAJbxOVRB%rxoaC5g13oYaTLlqpmt!GBPM#gp7!SKUq^W1wr!~2qwU$hq zRZ9*7;`t5a3WC?U_ZLx7dZaxsMw|TdU{6sHg>0OC2f+=QiXB{`hh2gKf3%Ys#5f6f zw~jK?1$Q4Y#J1b9-?&u!qBO*1D?9Z##8Kk#PjjP%z|u)6l0Ds1PP9xwJDq)1D{M4U zWZ5|J(p9>)TfbTv80iA|HFqv?zB8U-G27Eq=XhE7TH3S5I^v*7>us!Pop@TmdS3TT zO7WL!7zu{DZA>T8pCuz&Po?gm+>Ar#gh#^6*15uEj8GSK6A6#vR(cY>?T>VqJB(+d zhnAY;VV>MA-=!sO&=t7Xw@UTtI}Lqqq(3;)ezuugs8M=V&J@*)%rKfcbLp$)-%ns^ zpV{yu@N7(yC|=?wVgYxZge`Tc?cn6q2ul|0WoAKP9Gt|^FKoAYgM*P-=?H`&lHE5fUZZsEVg&KaQ(($>NyQ>PIkm~votV`Nin!xddJB# zyWDU21dpuZ&~yA5j&ND(p`jtcp-`7H)Q>+Uj}(Chdr~K2*iOxlDro!s?%-zEAQ0P% zNEcI~VEA_Br3|Xt#*$vBbrH9sE(beT?5VOt{OE_%l}qvVoJ5-ij^(s-p$Q)LeTF0_ zXY_I?rNMe%LSP%4iz1ZPxkv4Y-L32~BG^5d4+u2NZp=3ba8zD31Z_Z#<<@v|?WPdK z-GpCISvs!%g7W^Ir>6QLiSSmuSixTWu~g+`%8GkwwE-NG9vS6r|LK59`EDRRaFnLC z>{IA{T+)z<(A`ahcY5lf7JBpJuZ65Jho23V1+}?iXj>Y43gH~OS)Hy*^|uXZ4wRv# z6%qG?a+TEANZ(3ES80o-q2nbsmvfp9?KsCB1ER9b=gb{1a9Yd(F*cj?!s_j(nhBXJ zMg=dm{QU*nFzQSeEQ%mXVGVcQ^D8Wcx@yISAmiGF%_k^z;@^Q zVGW(DL(1!)$j(YBC}?2jnY?UZ`rkO4>)I!N^m4+A!RM$)w1*0p-LaQGv`(t;r6l3{ znYHJiZU=O@x*Oz)def%Wq?(@&96FL}{{hy_6khTY8)Il}Zl;ENm!NiY^Vj0IqpFh& z-ct_r)+Do0QTzn_9ge6^=Tr4};#Sedz%&1=onRRZH0h9H?(||NY~t6ps9d9_W}< zc3qQXZc@OF>?7ue<^&@1uCFoQ{*97lfOwqyE3mNxgy#^MfCgtXNc0QJ$7qZczlSR; z$l{+?2Mn0UaUnnq`7iw62NHwKNr8rs5FX42n1}N~fCLWgZX^T2ro^|C)kI^4k9 zedIKd_()X{Tt4JJc!cz_A0xUfAdT_Bts(i}kM;lP*8;FQ{@Nzl@*UR9gM?!hAS4%p zrL?lWbdEVJtP0DI_lluJDdg+yk+-F|L8s6SXzy=1P&!{xqv(NMLbIrw?X$dk_+%P3 z)iOCM=P_N>dEVI1{x}Ry*$LT6&1_8<=+KGJvv8|UJe!D1YT0$dY`8Q$XG;|!HTJr*0dRMbRsAhmN;b9zRTXyc55{p=7yU+}aq z|9CneD*|?=?V2@!bj;nIXnI)NLKau4(7?dM+o&=8>|VS96;N+Ks7FKTH1#wz6uiN= zY-VC&VqwwuZT^wCwp03bH^(%zsQd4#xun@$x6 zY<{8h?Y8D8|6h1K?lHub+1WmyalTPoX}GfNPh|ZP091G0`ZqQh*H*DM%t91=`FcGv3GM-51+y8^& zR4o<;z0L8r&Hie4xN*Z1OHFWUD9W->Cd(5@k`c$PJ$A70(9mn>jqx`+_;pdK0his* zmosZG_uV1HkzDgb@+14!IBB4jzz!S*pXCuI^)!15y|;zQk1*@6X|v(SQ#iY*TSC5o zqpYDBuTAIk+FvIJhmRhcfC04$i*Rh5W8bAp=M(C$rFM6gERe?ouQy|eBzg5ltJ|2^ z6ixhmR{O2~F!UU^)5YqP6pXTbZHJjGXgO%j*25aT9@u->DUXa9v<@W~tbyD6adP7Q}{BIA`5jq}` zV(ZUdwh;W=p7z_G4;1dh;vjb*Yc2!!09j8V&#UP!lH*R5h<3+C04+Y+`;E-Izh}%= zP7rQSv7j;n^z@^k8$x`P*UJvsZSPl})#c^ThukBN+=Pchyw^h!+p(BHK(qmrFm_C^ zdm?C~;0`e<0`)u_nzBni=)Fs^Vlq4@Z(du`0YE!K)%~^4dd5~f zqJ{kE)MQRB?FD!fFU-tb_u{=pr#rxc^9CvX5F|;W(R`Y4?hvRC<}l2nq6z<0z;LY# z{^@AP2OO&7uDTa^U3xAfcuU;Hs_!x~q1hYq|Kq zbn#GM7;^}R`sDe|cEK{jK@5SEPE1Hs5b(VAd=ZA_P&uHaEdMBI4Tx3HhCS$sUH~2> zh^#lzs2?3!ZDwQ%xe>!Y(7K|zjhFF_&1pik;Dxu>=P7LiFebia1P&A*U+foXvSt63 zu*}@wzw^9Baiy|rhafV^#eEF2)kKlx!wTNdojU~vP2qnL;3TC4a$knX;QM|PBZ2<0 zJaSkQvPl>WA&;N|o6A5(pk9QF!z0h@U%O8{Y$IW<$mzC>cLPG zF)q&f;z^$BO>oFBes1=Nmgy z_OBm7g)-y2ef;Ulr`?bFke#0mvRUtB8Oa?mzAFa6)dd$-NBe>fVP~>F4h!3&%@cV4 z$vag90R5bGdUf_2+K{{-_EsSgm76}wih*>ihiDunM@YC(F&g#i z50MehgnY7i%0aRx^ywd*5<+msQl94AD@mdBr)W`iMTv#vWbz3ZvVr@Ts=yCK0@#p3(%_9A(GL-(_5_17&h}B<$!gSB@s;# zNC$Ho1O@`8?@r&33wjv1+N1}ViSLA00Ep@xh#<%vW2zzj@~aPJyeFT;$XDf|^8Kl@ zh-ZR33;KUJoxaDB%*YhdCYDj{D|>Mk#V3=X^$Y+ z(VR~`yL}#h8M~x0W8Zl3v650ohNBMsVv0U1`}npmiZOSxYG$)?86wA!nE4b##GCkf z#)ygln6kVlpVOA0J!W5c|KT5^>0+Ni)<&JgeA6r0=mxUU!|d6nxm}Ug6qjUg0ucE& zi%v*}KZvXk*P-ulF)~05pq$FP`pclGpJ4Qr5gq?X`Sy(Xh)on@D%r#Y-t7s@GKLAwAo252V|1llN^p8B5K<( zUU$Y`1K*8i)WEt`MGIx=(JZo2jPSQrg<1`|_hxlKPSaq=rgeUZy?z*&2x8h33_+NJo0(=#RV5g(t#*$Pid*CS5 z{JTmJRYPs^s1^sOM&-syeNS5T)BoCo*o($Zz@~;hWs^gL=JHCzULDg#tVqJLy`~Ot9+39S(3U@7yrh>s9|4#giXbwKfIj#e)lE@Qzx7mQqLldM z(ZM}6d3kMEf8`(AA$E!4XHPyJEW;(i?UV|Wq&Qq@!Q5VR-xZ-9XB zpU?=JN~p=2EX1UWz4Uh(oJ<#MPNwrvC+$~;k}AW$mTsHfEl^me zZVSj~@DF?x`!GIOFp8E%5OdP(#aZw#r&&A?3zs?cl{$x|E;SDj@rdTZJnhfJm8UOP zcMr@{R*zcHKJ`K$Fv*!YR)BuoV5jR1N1V!c{(q#M`w>QS^=av#wmB@z+wcS}%TG8Y z#*{%3W`Eu)nE3nAVV(QE7Ds63Wic;SCp`;;Sq3V(vlEkwa>V<|-wei3tQKHtA z^ojX63vYZ9H*@%_v7=~rk_5Lzi`vhi{GGk0n&CLH-Yqn=$qYvZm1(VI`vRPd&iGnI zG~}=lmD_gKCDynAN$UX#*9nX2_^iRd;nQ>M$N{s}YRB;igEe2O6$t?f0?7VW;4%19 zZtb{CcULNE*L+96PahfHz^0yDDspG?C-0y?5nnO>s-%Va@actX+;tJFJsnZQn8~+$OHz2Hi zt5rX}IU;^*igPM&GOYX>q)s&RS27?~;L(T5Y|=yac?yyrujy?>w0;nd%0MZi5l4-NS6I!}`Op3VWJ-NS^&aG84zXyv0>!#*AS4^&y=1}?Od@JDz@y)4hx zWNpR5qEggAOnzXe+HvpAiy)P`%|;!ZiFM}_A>$#(z#-&6Vh)$+gP6036&7NL=rO+J zQ4a0?^6qX&eP#x^O|T^u6O1^=l43(NTrXsNP5CEbT#VFTUPIjL1-9~_v*TAgWa*Uj zkGW&FiUo&ql1E?%wu_4w=>49yNyirntI?ZAbV7Oi%2$0*^uAV?yHQf$MN6E-{x>i; z9u=%qDx3W;gz!?XvVp#3D-IlW(m?s$P??Rp4!xzlrlq}oooPT??D0o7Y6LcSWJ|P4 zkLqsnn)8}r-R}NUrM5|(GRG!FeRBBA8r}I zI=*JzCmKeq+E|$|@F-oHyXNKPeI%t1F(P@oR*1!$x%>rdxa+dUbM#?~*b<-kL}!3K zXQZMDSus;O>`54myMl`X>MiR0KJju5j7|nN#%fwOZO+W1rVTg@0E#$H!v}UeTZsWo z4i1M?TySKH$E$4DSDs^JOM9Ji_tvkN;@Dm#)*slO_wQOmik5J4mXIC!{IT>XfADG) z;7R-cie=6pNQ4!PxGV4<|1JvPM$$6eoc<4@X7xeQQS*`iL&Q}Lf$OXEi$>~ycsOd{ z=5Hk-+xu5zD+TB{_XHma`+sG%RuTZCYlO&e`&TYY01i^gU}O3pAg&Q8rTtCJjt4LS z09s}M4x$7}Gybolcm9E3tRcl;{X2*fz~Z%!bmg=CdtYlvzzweM8%91EW^J+3KsEY9 z%FB>GpE&B@DfqzV-Z{@dwYHmuh&nN(e7HnJ;_+lo9*~lfK0iOFrKV;AdCc9N(}JVQ zIFhL-upXBX;N#wpz?0BQ1`qB4M8*&M?Y`lyt*!O-^>X#bhWh&E3ZRr~xb=a|{e)3` zw#PKzqu(f9*D^RZ7Oq z3EA37{WwWv1o%c|F~9&{zXH30@yvIb_FL`Mw@dt@xR85m%(l0h*on?}CWXK`1g5+8 z&GXldwPh&5R!aK|vC@Ahz1=3JvC@io(R$tLL~$F4&=I`4w2(XVrV5w}zg-`tSk1kA z$IEP&*82{M0d(kxrUHmVSQZxh-GcEqmep?C-k)EB-07n@(pa9kWmlx#$1MX%yU*P( zIq-jJbXK$# zzZaG-O-_@a0OBMf2~>gs*Kk1q&Jz5i8_#}HGMw(HJME^A|I-E)6b9+BUW&q+VkUVc z*|@N0m)P*T`Bg|T>1QMF)r&nrLPy|>ta^bcx!K;m@@uh=FtMFb`U@}Qxg58smSrB< zZ2eXE$>^*ia5e8N<*(xcYv$Bk^2SO!mgLVhUIGzh#mB@Dd`N0w@IH+znusBZ8mW>i<@rcn{D(Ft;2*?Dhv)*WZl48<#~!w z9<5{$jnvBEAph@|LhzY_t@dSfYS!b|7}1HC=;0c`1%nu(B-z_#b(F2C;EKP1K9#<( z_WPTo{;ZV0h8}*yQ9dlJ8tIfWdk0Q+cuG2b;udMVndaCpC;Jkvb6E`<6q*AUQO$oW z++e!}xI|qG`7viZy}cFT&8z*T$q*Vmib)~KdzGYIJj=;bDq#uudLy&m z_0IH?2-S53oTG&&y+Tr#?9h*Z0|;7?5u%8;FIL-OjA-IFptXEUF zkILU)*D<(Xv)ZhSsjJ?2&eM!4y|}Jt)D<3ppIs zqT=*XZN~;vqF8;1$w`*mFcsVl@@agi@d@s(G-uMY1lB$s;$eRLY={yj#cem`jD^ee z`W^T6OXR1N3ed}TdZKULFlUyP*31oDXY=RuyD>DNT%7$>1XXlC6afFmA2k-Ta7OgL zbjCJz=JFX_b$oXFx=AAEY|g?}OZ{gpTF-g$FMlq>kx{$~h+|jYF>9YkjO}V$ z%F!btg8S@KFOm&-B;kEsu&GVJ!*k`a*zc6J+^_J46DcQ|MHRlJ9(7qbt5=MK7S5E7AT&C)#`xsXboY1 ze(b$1tuG3|!5JdDlKg9^CiTI=0Uf|&h(x{v99*U&&Z(iBo12afe%54A?-u@NmInIf z)8%^e=esk2h4bUu*ULaq1rT+uCb?ewg9)I#4K$Kl@cMHb>isiNoW*Lj3Gm>>UcxVB z7Ka-E8mMVB+Zh6~r*uLpfysPWV2Maf=t@Pm!am#I-xtCARaa2(eaN?|EU%#^!3Xhi ze~j0qg36>=6PoJZH1^1jUAty}pL-uvZDt_+mxl)vZ4hkSO9Oy#Y5YUmE$wl|b z>Bnx=ZHh$Le-<{Nsp2n{hu>9{j4Xj5AiN-Af_#eqR-jv$vaN3{ESyyjEF$)P8I~({ zTxT?$ybw*@&`R9RIv`3FuXdN4G^GjKz=5b}eV860v2REc#BqQo@<4%m$->FPqU@vH zUUiJSMAM!$jU3GxrLVAk8XHUhS2#E+X=&e>6~`u`3xJLTz8t%t;r~&E0iD$mLxl5i zaBx=pUV&!k06dq${R`8UuR{o6Ale;p6e7Dp6juhHpPL`Q#hZtg@IA(Tk6P!!Vy34 z!!Gx~IIeqxl{VThpJ_d<7A7<+23n9d+JzQ|Dd$%`@*`C1>SN`g%Q$^Vpc_reCMB~N zMYNcve?ihxSI+A52PeC%KlB-B|4mqPKmQzL(HQ#|Tp_`JcPlVPEXyG|QuQ-*XFqJtzaV>%> zIK&95)r^gT^2U8x?&Wu9L)NxOW{|q^)ad3N-Gi9-8B4bU>@(&B z4t=esg2##Xy&HJtm-3T~x=`Bw-Fr#Y!V;=pixS4W_iFo%_wD|MFej)@bDHmpnY_(C zXWJ%eov(Q5=iI+URYn#nI2+Y}X1joGz74JxzIR9DGK4kbfd_xGzd+xwe9yJ9l_Wwf zVfl0WrIg%=^OA?{{DphbHEt21h7(a6r2dBSfkhy@ zu0SF^A%XfrgA&p~#j2{aB}tsbZ1g;8^X0Q?0_KJPv9G9@KZUfD+3HaEFv*BIU+j&0 zC@&js7oOgc*ln>@zd)d{R8}=umPWAYnOk+q8r&%)NuacCjtmo+mrwbU`Z{=8UuS_!b z+yWm@+%}dqUT`mAa?|xSQtAZ?rZ77(!#aO?#kqds{FYdgpsf4}vV8cXpTqYm&YpXSdoh(tQ?4LB}6L-6PoQ2-HfoA zp+A@RGKN#|!u^MvYjv5`71gy@iy@*ik9JRJE01DxRayGJ zUfDv215a+f(SrSmGns8_rcWy*I@xqQw|+QD+s`u3*4%b4qFKx()lB956^p{c^^jYN zF5pkVG=#$G%+DuptiD6;_MztE9)C^btH>`R$$Bfy=r7fNUz$(1alF$RzGc=({$lep zILy8Jq;h6D=5Dab?5VIpHdNa>zCH3&kDvk8he=uo!@t#f-p!b7elFR)o%YE<wcYooU|YdCR_^ za(0q)Ww2~ugmX62KlcUx0P72z#5JFMYt0ze)(C$+^zdLV^jt-*{MsyIHCFW|F2kvd zb#tztHuH(v)ZBv4W9HNC0PktUn~A%WuD1PMnz8wP{qEsINcBalKujTX0pI;k?K-w& zi*nj@%&)iOi#YWG6$39O%b`nJzZTiJ5SNys-RpTq{GT>kG~9D}yNlENhtAcL@+s8b zyzbT+g=2{&knQbJ*$M0CQ}SC3l1$cS+;;EA&ete#UHYi4#4bR5yL>pey}QR_uJyY$ zy*Uviup#l$oYOPXQZi6$R}tH17|WF$>x+($kEfN2>nFY(jXb2d8!0LpDJuyY8MrC# z)lNh*u&@BT%Z%5PnLLcnq!7?P8GJgWeQ*kjD!+&87!to|CeJAa97r}3STKpG>My?N za2l{rTL}AXeGwMLy6S~v`)0FnQ189(ozdM^h*?W^73L#qzsNonZ3*}q@7aCXz2aye zJ__foDx*$0t2Q!~NSWd{wMt zSB4ypD+l56>>f@%v#`|nNBJ*~Ijo`G6nN5R#)Y>H$v6no-!RS*4>96h)yG23O-k#M z<4EPjNA&c`h5Bah$4N1!5MDrG2fL+$FA@zb>E)RGad`c);G3e{w!fdVMY8OIxJ!&h z9(i!)3p!-hF7iuv$3tRFHW+$On)hzS80HgLbgpI$7(j|N^9F$t@Is$LgN-x-T}SmO z!8+B*nco6`ICNZ41WckNaXs7=H&BKDiHo=pm4M06N2M&e7N{R+KHAifwu0}D89DAv z3=Jwq%^V}w%_yXLoH_Cy-?P3YHuuHuhzyCpo11Wu`tvxa1A#j$;E48+>m~Lphim3r zx3SZw#{$bOQJ-tf^tWZvZ_;N;>^1ls!GRoZ@Dx%I8DX_BjcXag-s4~A1kp3 zAC7HnKM)yh_igfyq(3*soS6`Z8+lixZwBJFVvNKpzX%bDE)O5E5Fer*-%FR5udLN4 zMyOBo0tJ?^vnJM8VCb@hSDgXtTwo(1oiH=q|1k|$e&R*_ z`8BJ8P^HLdY1@Q5`vUFfr&+5Lh$S!#bmf@CI}{`CDJ^ukRY-zBfhkEAEZE$~p`BYM z2v`_H1$%uy{>OEqmz2M(Qncu|sxt$6WC;i^ya;4-gAwM=e)y^&@0D-+_M5QxU^HH~ z>s$~KJ^R0!Nh2Ws_=tEsri((5yMwaH{jMD86DPW(E8BH&hINx9Q0;|#3}&@6M`UV2 zOy@Tm(w^(5tmbEV^wly-?=_c!^-Jnjuoe%`JlpKJMYg3K&u&>r2IpAA+? z{g?==D%&G4P_BKEm)10`m41sbVcwVuH>?%qH{(pPo3L06Ta3$}Essc+&}0bnS!oa2 z^{FX{?tAx?kIF1+nwL^~r3#xY#ZgA%#gBw##L_dWlgv`p{1c}_dAzUss5*tYb$J7IJmmFO$R8cmP^WGsg))3n9n&|RCB^Lt1##qCl%ZZj`BrPkh^)BpLzX`=gXlmmOx+;6Z4bKi!E4pt~Bovxg zDT2e2mOLY)XF;-PJ(3hMS=FVe)JRi?eX9ND=K^6MilOTTBAKDBe727er9z6Uz~k=5 z%4^nTxab8-wkNA~-@V1JSqKfkPwZsT(4)^E+@=Ho)(9ju`tB?b$jHns(8}tL0vr_16Sqh><|v;=YJbTdC2p z^u(lznlVv1j`fj(Gf3YHHFXc7OCW!FfX$zj@g5=|T^`pLX-1+9sBaez;Yz5XA4cQR zU4rqF>mMg4P^-17(zc}uQy_opO%Q9!y##)BeCb*0cV+YIQhD^(Vvi|#u< z=hpgmQW3UlykjGW({8udex6uqdYRlf+07E%ul&U$Wbm0+ulT2qd&F6hlzcDCs}Sm1 z$Y8qgpv+3c+VWd+i4Tp0rG(mbnDZYHc@UtFLspG4e-E_J^JgC^gvJG4_p=VRtmX0a z@SZP5#>DFCOF8>--}j2SqKx(^FJ<-%lGx~a>B0) zv6hBq+QbZ6Iyqpm#PEafCCc->b%;Ppxr`ljC}A+wgz>)rZ&kQiS@OX zdHT&AZ(L)sGB1Lc`Pfg{86HTq@iNbX=XQucIN19Fj>@F2QS++UUHF!52IIp)RE4pf zh%x$e!eV*oTR~LAw~ojm5@seQCRSFP(?dC~Z`%(HIbM7*YE<8fU`Zk4Ni3qlDN4K(#L*lmlzu(YEJ;BqB8CwE zZlzkc6IMKv^b8d!9Bwf$lc$~>yuES=-C%0Je_|NHCTKLJYT+ewKiqycM=)+1ItO(V zZ@*X>nE!t5cQc+tGI;gK7}XR9W}cUaGl<4Q_h+&bL<#el(94DMZUZ|yO`vb>?G|EA zLkv3pbSG2FXr0aL_G)kR;ez?RjIx;e?Ic!;gy*M*gT;wN(6cWE<$xu)a-U_7NZfQ* zNAnK{`=5h|7S^zzpvS%xbYu+&?4|Osmj(9w^ZOtyoCH#rqQ|#Gam`8178-?)~~!jUtvB?DHDtl$CrN1S^0W9a0Mft@#Qekk7i5QZ|H!TV6-a ziFs)CeKqjAQoLw)CPS5`5^NfYRKt&nu{woXV``#GBZ`Nl+M6Godh%6fBrzORjHE`E zTogrW^Zgx}JzZ?-n0ihVAq}E#-{L&BhRX*-8X6-B#9ZhQn$|LxyP4Gz*?5>@r1Fgi zf=C0OE?0xhox`A(az1@qVl3r5*TSCEBl1fb)qK3^{am<#*>1~}G`f9hVL(Y0TtilK z^|?YBg+Rn;$-&OkY`P{qr8-7~+0R!Cx03ZL#9~E+xd`UGfn#|1) z(0&h3s+q|L=YBi|SNy!S(O94&v{+w_^vzZ1kZ_JV8-8#oY^>))f%U4;k{o08Og*T+ zGcC@Bv_RSj(;=m#VOt*^W8ob`Nj2V_nw$OANYBD*_AJiHxA!#4ZD_XKT~5&WKDW4T zxU|38Cuph9C=RF90dg0qvH)m$?Ou=9gJgXBBP8AIioA?G%33Nqit~&g1`=ks+t8rT z*qjJaLN1{;ElIQGM&k#0j99exp0yHZ>9Ag-MF3NrUU~cpBDkwQHs&ktg&tLdeLHU! zt}(kXi(^JybLZ5^VF@COD@I)F-WkC$=KSgzNjO^@u5Z}L6nD_eXcAvrzHkqfwz%xb zHLy|vT0p76-#TznvzC*pB*nl}xytwB%Lo(9gDcOFT5B(<5ZO_3EI+H=>0OkDdTy>L zc64(n$~U(DAqRYptDD6OllS`Sw-W^-zesS2HOvkt7-2V7B&ov0$@b?KTxe?AvHZ9& zD7;_dUm>7qy>!+0hsG&KukC9}98bBb=okZT_A4@v0}BFt3B2sadXD5_FoeH%F@%|PNnh&?&f*fp;A;2rmvCv3LbE>MNt)e5jXc@J^f?&hN zExFgAtd>G1FB7Y&2?`S8B^eCN;Uk|Us)9MZE)Yh3;!DFYg>h;`i(zfUBRdTiv5O{E zob-bsZ}sNF!%j()VZDXg+)QNnoWQj&#=*bYA<{*8Z;y{6_k#&r z!n=lVMzqq>tlf3Xf)(>*)r+;BE@|8V$o_kkqZ%$N4z}*2gVwi4i8P|ve`zO;p=eN&!QVkCFplo3{8 zr_De39dIJ~x!2RVFbE1t6z@5@q#2DZFHr9mHURE?H%g zzaxL!8FXj1;v@pvKr?OD6DSVut)qCn*&hLl#c7^d*i-#>z+k-5$SepEf5Y6AYO_)R;r)U_fZ)2;K< z=YA(@FmAQgQkPLZXOT>9WrY|B`#)>g@YGa}N?veHTW`)| zF7ah;=;-1Yfn$wdvF}2;xTNKRXl?8K+g;_VXJjO_k7fujOjsN)cazNk`ZS(K3mYA) z#W%JE&=$%V^%)agl#%Kp7rgtBUuR5d9(c~;ZBZ)@=#UFT8|6W&p+%KpFWl>cuhG*; zJ-s}wsL*CC1hU?|!+jAo7tBUf#x$0{YuKzcOL#Y}B6`3nYh6S=Kt(oQ&~4&njF%L} z%kpDoc*BVYkRHIK6Y5CMA&x$?w%#u1I#r73F!sTb+e9R}C)l-H-D|^+@wrGabETAf z*vGQAW*>ll|7BkT@--9*49o|~V>Q4#uH2|3?mr0Ol-`U8hOn zoFruYFWkq6Z~_4WejJdLl7C4=cKSz3fh-j(^pRk6!Q=DxwS(g;p#CTRM+T{)&8C16a>gkI6xSb`2J-$Y#-SVX)1BpzjNU5dI!5h z@fJ}0djn*oz|=j#kA`m_3n4i0&i{f8DSrC*2KEHKgIm*0VyXU}<9|Qo|F2(i5y_Tu z;D=Q2UpJwcBC=2_Ybv~>_2M4rtJ0EG^Z;o^4G~4uASwsi z4F1~m_VsWEAJ{bm=Fu;1M**Dy{O7o|@hO!k_FqMrwX5i4bUCvKv~7B8O;}UCj;8Zv zcwSL9zXew7HZV;eMg!L#t_y?}qE(F4Cui?Wixt2n+v4i!q|&cR4vossyEf6V+Xm8B zyWP#v)D*_Hike{ug&`Zi=kfZ$>%tE&`{AqCL+^(e96*EKFTTFhadUgVJ~@1(%0qbQu@SO#($kpcK6W5^BNFq?x!7 zRzlvc(GUs*K2L}~L>t)7p?y?A_H7dsBm(5J*KR00jV2pVlg)Tie^21apu<9BGs-0Q z1r{IP<`VEegTp-n`jniW`VYUn{`KPd_Qi7tYXhYHZHMQL=-UB600C(=_(4yq@IHVn z)z;VFRuAH~I-OxIVt+#9&1S{M#f9u&0KC@njb{{YrhDw zVtZ}{pvy9yI?#D4C?J#J8h2k+c05tcayuTQpt$TMsF<0V!DF*}n}WRHMhya)Ho@%Y z1iAc!}+Numj`Sx@S?$@lT`$pUB{gfKxAzZ2)3dF$xgxX0_=a`>(2`CCn6i!~ajsA@VwTsNYgeo&@!jdt^{Dn6 zk~2XO;9S3t)ecN}UFm#XiQ>G1R>hitvmqhGg;P>d z@tf#U3--p-mB{39hG*0ExD<*e4?h9=;{w_LCOQht3PwDvo9``b#ZCB)AJkVpE09W` z`|eX6bp!Aip9vjLz;RE{?E)T9xbb!1n@B=F2s!Eqr*i?jLjaAYlzzKPt0NzcZv=h8 z@H12(_}9&p2m#svRY@;73e*{Y{{JEF9p5ACo^atf9ox2Tdt%$RHQ~gZaAGGD+qP}n zb~4d~Z_o4l@SZ>5T-W*9d-dMkYp+$S>aM!)k|GBqh0@HIumYnDo)LV5XT+5wltO|4 zqXyU#$aw>)XR|DgU>hc2;O3^+pkJgjb*3YJcTt9U`T=liQDFfYzjYNAk=Vn-h<-ev z>;`!Q@fLl3{j_)xvNVD}_`3qWFU)=_FJhtxST>Q#&pmxWr!pQ3vp6JlyG~*45;V8NT9TD z-;df~BF3YU+%hCorI^l2R2GoPq;_&j2C}knt?=o_fASe?V43+Yo#jB3U@Qd3^AqFO zOu1Gcjf|Bz0I?T@tc>M$JD5+*DyA4AfiVgL749A_j!fq#Qnoz>N=gmM8D0VLjpZB+ zV70#Uv9$vVeF{RNRVC5klnAOQ-~h?I&}$?qEW(af?KLSzY`%IU4E_fVb&lN#Y=B4= zkaP#YjZ~VkMYo{w^o&PTg!?N!ONI_~wPHcQ8Ga80eHz#d`CK32F9 zd)5%s&)zbyudtI-VGAcxM3GHmH|*)#8UD|g1EsM)K1MRa64Zbh)>X`FQ+!b|MXy3K zVf9u?BeLL!-|(!Spe05c!P3e!xDh%^u=H^av!G_M^Uz?U0q4l!_qQP+pmDFih%!uF zL}6J?Nduve<33O00@An~e*?;e2?3J$O1oIFAao#r9$55m?yc^^Vd_PvhW~t}B0!Sd zW-p8ym?$V*ur2bPpL4`6PPD=1MDV)-L}aKlzPC9E0;uTyuTEqp0Ve1n0g}I2+@a!3 zTNChvA#r$e(7JdAh!Nvhk{F|rb}x_kf;mH1=EA(x7|}>4+^|8RUF{)mT%K#4gPmap zbe-^CTTT(}o&4K0fDvsblm_Kq=xerbyDi%)=ts3{TOn1q0_Ugt=33z6NT*0E@fK)GlO`;w9-ksQAw5;$K zcueeq3h#=LT|?)|mcsn!zHJf&&SO&DFh)%~K!Q@TgtjrkIB_M|Nh}7drAXJ4@uZkK zOYZ`qK4J) zr-nc@Srh&ri0uKX#dlQb$MaP2<#HX~kl3)9a@zN#+eIonSAO~jI_GVmd*=qwIPlu- z{?jC+*Fhp6V&fzS+BP%6-QoH@Zu-O1&&nW?BmZineK28u;cR7!%jV&H=jNlU6`$<7 z8-a*-H5rifba+@DV&#K}u&=OjHe)H6o1LR>7OLgLuqhXGA(TC-m($9cLO61r(S&oF zhP?XYA1uFpve`Hlx)~&nw7gkH*SmzMc%&lD=2b$UqyV_21$w}A`5j!Vte~p+H`(ex z*_gK`TPoerX{$HwV+>VcS&g^7U2d5SNXT|%PjO+q&O-Bn^{S&4CN~t=UiuMMrqU$7 z=sR72__z+yw{3-uVIzfQ?L0n+Al)@M=%5MLR4mJVWirb-&Tp>Xx=K~b1i^nA5faQv zw9O2rzDvS@fI$4TXTZS=tHM_z=O-K_w_Iyph|N$+qtyMAl31SUnf-fU1>CvWg2}rDLv3TcN?soOi&9fxR7?P31F#Vl5{h*37jE0+)>(xWP|CRf=ducw8x_+_bg! z<>v9+t4N5$&3yXg{4(IL;QGQs*W30gSyIrZF)@z0kleyWT8~?Q4`MVKOz0_GFoRcsqS;?mL8Wq8LF?aaK!NR)88Nvv*!%F2GO8gdNYT+>ARuN_5$2L{fTo*3FP(5#8 z9O^QF%{bti(=@3W`&r3x#w@$UJB2?3`7BY%BUUvZB=GwvF4aqIITK8#%L367T;TVn zkwz6b9IOJ88x&YJi4z6Ae!O=rUx=kf>t64WajeBv^nlq|#(|5{+y>a5fH8jnWahd^ zSm|xtY6B$ziyTi7orB6{OfiL7V9;Ci`+Sf@4afO@3+@7d?Hd9gq^aKO!F`rfD0F*} z(rN};SkH3a1PNruL9vMAJopvpp554L3iB9)*|Lq>tiW-?<)hoVC~c=urMPd1*V*nenQ$SFOdNph2`R}*ol zFof22a<1+$G83ee4b_oLGcQiSvabdF3tkJaaE3XU+k{f0h>P0~p$NBgFpX z2GI{TE6}P+G~s@ELH42#oD3*AdVZeOWTDfX!JlZ~De&Dc2-} zQCu<5cj+=~>R;;%*aVj01r!_e$%=$U2sn}=rLbRl;kkl$GNxg;knwPTL(W}<|d#GD013t-7`Pa)veN}H|+kI;>W zkJTU*ai-dZ;xo5oDlv+L<_)4J)@^`d7tvQjP5v3#rwgcxU?iac1dfXWgXsF#fdwee zGMy6EN;wz8bGQSn>cdkQ-?7O@ir&oK&yuB|@G_(juZix)=HW<^jyzF&t^trSyWcuV z1CK%KBj>rp35Xd$@dH}5`RctPxh=qy0mWU0jmoN67> zyf;B-voNpjeA<&b-mPqjklth;0QztidXgA4X+&Nfb-qS$ttQ5w!}ygA$e(_Iz(?RV zs2LdyPf}-V%(I!TkW3B2l?cESdG~gHE=&c5sf}&Qc)_(m_tK0yZm1!T^xt$f@rj^Y zt{Rfn<2g#6Ie{1`uXl=WjlQv|%TI`?u?R+_lg!b3Z@2OJyYksi>nRcM+;qtBWBJgd zp+>qu3>X>#k&Y{$8o1n=VZD>#Vs}u->if51b9D9DRH|u_Ro2d<7u1H1s7`7L8Z?qy zVlv^k)*sjUN)A#m&BGgJ`j_zqwS=I;g{3a~mCck&4WINy!1EUwXi9%vyNPVNoT`09 zK6~$cUG{q|^>y3Q)2nDn1jsg9%*xdq8VrSgZY=?3OD5iL{Fs{<)>0ES z{XIWMu)-L3(Qf*0_M%ixFyK8MzmNZ|*EtINa*p%2{Rc2{{98=__a6u> zx!?%6JQwqw6iG23LI4q6U@zPq+U&qZx8WyI@&e3aInmZA`pyHA1c1=M@g&YWBLla-W*OZFL@}($_LrUdYI_iiKs131m7WZcDhUlp^1zZ%fiWH+;+!$>=DK-bmxeQpjK&cpa0DSf^a zEBhcLrT1rUjMQVTFQk^uWd5E~$yJz#e<5g=k6G?NpXR-ONCse1eO!avwX&ra*0p3s zLP`f#^iw#*b)R`)fLij<#blXJXp%!kQv-L}zc&tx4f;K-i1On(UJV2luL9&XY(|KU z>FC&3uWd_hfZ#miQ%o^bm6N*w^YwzC}nmt9Gd(5uz`Witc^_ zjp`dP2&=cgNMAL&3e9>yQ@g$I9M=DXdsaMP7posIKbpXqp~4~#A8yV7b=}-*#&9Jze=GN)#RXq=tt;axor+=rQDawf18P%0=ZL;%f*zu$~~l=h8tE7-lSBA^b&p zF2*HW{_-HZceDMbSqRtQEqrWfGhrcjHs4u2#%~{VxVB)QK9W%{)Q;NKRvN1A=Wei} zYW}hbRi1;qIt1K6H}lgg=nj0St$gJZ?U##T_^T^FFTka>>22XW09oWtNm_`CxGv-9 zmV7453k>PaX$ZC(QysE%1r}&vpZ{zt)92?RBGX8pjwxqBCnx@T1EfBWeuMU{j7*NR%hdk};<$H$QRzkH+5=HQs7O@1zzahZi zx05|ZP(AFmAuFSq>qKojg%k_7n)Yx)Vid&{H1X(Od16h~9%pcI{_I)wN(Tn&P2@r0 z29CXV4GT*5eCh=`vTnwZ*=x-UIHDlqzAMhvd+_7sbg93#iG^UlrMWpJ!UrR{>Jv`a$I6Nt8PM3$GU53P zWNX9@V@_ZHvzy964;;wIQ55`ZMvqw#Wqe_ZP-ylhYUQi2w2Rh+{4HFU-dW&hGzl$%*K#wQdg-bi(Ro$V8ws{FWp^@jIO< zGNMB-fd3ATye}c5W zogsAssB6~L+^nIlp3UnHi?V+`6$8Z#$LWwO;PV~G@^WxMY*bNIU07Oj2Wnn<@+;6c z@Tjq9)X{tbg{^_@(1bC-NRbJ-CA#2K87FoRAkg#~A$nqC^cL#nfi(>x+-4 zbygS5kl#KL<+!|`q8@3TK;A8Tt=U_mGdx1|`Re#-;pusLVfeQ0IwJt>-r9o)rYyk4 z^=2(jIrg)s6ig+YFW2|sY{viZA1m_LD#z|l$1lN=xAk_zt!VGNEmmlv{k6>zroeJa z79sth7pG!-osyX>FCb)nZgbK7w<^`g$EUSx>?x^?=vIVV)#di~<5-Cy5tH1a0bm!@ zdZ(=`J&icpa3h_rJQfJP$n`oLb8J2-ro_u=obD&oC(uIeNC3Z7m*O_`!u zB#+B$82@v35{^gN4w0Jqu-pdjB~d&^Q9}hsGNTD!>BEQ{8oQzBBAr6YKJyr6N ztKD9f8U3r2O8w+*VPCIsPc<|zFCVrg@pQtlV)_(LT&miy zVJ>H13DaK@GmL+I=#GPEBcHpS#-J3vM+6N7G76iU)_~=w9gn#(Ehn7Ik7JbHTP}OcTEiUgF0CF~C63g! z(~IfV#(*THso?au(S(MygfPK`)S90g6((S+tM}&Cw?LrA{Hl}srzfD5Yzima$kfr~ zMOte!&&iM^0Fj?zCItjl|V+*0dF5b#q%NyQSBIF!uml&qB zzbif?xt>h|FD&cmxNx$QTFTU2Ol$A4k-V9oR68AEM%9FZOzG8zFJ<5c*(tF1Ao@bw z^X?ki$smwTCx!k^!{Qh9L6!A0^+hClQ)~K=LpTG3v8!+lUq$=3<`Qz+A)<^khBXoU z!U2Q8EU+K7_iFRr0Qd{_?@04_6z~ zC4)IXED_Y4^4ZE;`hLrE+wTtU$M!RdDU1H8yn))pdFY_`n*WaR6`T6eqdv=R381XMEyt5O z_K(Yb1I0)f0&buZ&u{C!OQ)IbtpzLGsOa5BR!P6xyIjJHtnri8&_vk;0O=G4oQLHB zXan0>qI1=l)L?=Vudk}M87wI(z0C+DlF2L5+KCvCGN^f()1~c`?#Z^%&}!B;+F`6I z0~w^>Z5PKYuD*Zrq9iAQVBe(*+Tq z>@yCSE`>v10=Cn2EMokGBwAqYFrP_^Q&0yK`Y_r3F2IX9o~2SK9d7J@r#jJAgm_D2DoY7rj~eQob6)W-m^ zgoPYD=P`)7YN12wvC~>XgvZC>fs&Xy`R$@(nCMJP12_j%wDyb)DsP944+AZ~9L~LN z!S8UJNs58jxD&LmLZ+sgWltaSkPBDFaCz*@GEUvgCtK)=aO>^&W zT)1EqeT7!se!r}ozMCs_be9Hy_jlqUT)N!Z$lOQ#S~5Cx(s!`ZeoKXxuaP8HW#8#K z5P`J`gm@2n=t)~peY27KjoM7?(j1RAconEr z*MqGO2tc>bm7z;>aSJsK(S*)A*rGzvZrTDWmiV@#AD0#oY&&fBt>(WBaRA`Ms`6{4(;KGy-=HU7O(dU`Vw{Z? zDiBw>eJog+bIJvkOa+&-K8~hp$BLMmEG!%D-wu9@HMMPrJdPFmedmqP%{@!=b)aPZ zrPkN!%JcWV@zYH9X)Fcb>f;T|w0RJ5`7m}lv-D%L5itQ*u}r`j&LliVE#OwmwVK4P zKqU{9pE;5-o%K2%8HpC(LkdS%!BhuoiU#a3Z+s3ij_X7)BVGkF_&(rSsw%MUYdEO9 zLl<=d^!)o+?=C1<4HC2?F~tBtfB73j5R~o3qsqDbzzqqMTjIv z|F?}H8^-U+g{v=k^Rr%B2-r-Y5h8TD(flF>Uc(VJMf|Q)55~c!?`xo zfwJ2;2>R(OMsG&nd9+OPFee3!8jrHxuRTv6Ja5l~1T&RwM5l{*KB|7rEjW|QB{7rfW({F+H|>X)?INs|5p z;Y>aRff~M=>x@=}(iAi6WlX!WSaxGiGM`7P6SdrJJE^!m@+o z>-S|AWY!TD{mJaDmHB@;MDS8};jYeH7y259wh7>%IiRb{RS|}zRMMxZ3#6MkPXo&4 zKv%HXo!F=IQ_RJzW7cL`%!O;xXnsQ#BdA*tpAKcgPvB;IR&FyBh^Q>!c=1;Cmpew~ z@#0J_VYHkKZX%0|G0s3I6ys|^mfysLJ4NhkUr;=OfUwX0(*h_(7XzDS>5ck*e{E&O zS%P2AL1@nz|K~Wr)gG*nkTTCtV}aUTV4&db=e--7ww(x$Z`6z;24AP_40Q0zM;-C& zg_#&4C&cv_bINX2f6_93^SS8sY`x0>hdF$BV4281(h8nu;TgTfKBPT+k+IZ_xq7s2 zU|V18B3|y)Db~pY1$f+LZMO}XKbcnh_h&{>wWC<@&PNLA0ZLico0}M|qr-sEmNAfi zFw^DGOU06)R-zv63Q0F;C{4>nC=W5ll+WHp|5hr<xHK zG7|x%gOi*RsdNRs+2DGNe+8JwE1|Op{3HfI-i0gT> zgPA*nKj?0yQ|YqSAVQ9)^tah*!K3M}C%Co_7^&!;7+%Tstp4g#TSo?RlYYlJVY-6w zqGtniJ-H*LC!%fmgUn$h=F^2AWv|v!I~G7&%Q4DG;MF0mUfh*2m_>R0_B2IKNax^2 zA;j>iq0+8KE?l{=oK1fTwI!6?e~Copk&mEHQY=^~PxTE(zRAuRP+pbQe@Z*Ta(TgI zdr;7OW;sPgg2Ln)&BwDGn3#31{`&US&5NBQS8-bD_*9(ZFooXor|y1_1Yshs_gJ3- zyS(-CSuH(|BM?x(J2=q9<3#7MQf#Qj^|QKE#g&68lGw@;Cz7eL{T$sU3=Pq z$)}SmoBnfB?v}AS-_fl^b4;As$ab**M|C(CqJT%0aa1~Ra516dltIR_lWY{8zmvx@ zX3r69>-wIIUnPf6?fM|AooIt`2ZcNzv1^)#)?Vrx<1`FTI9bZk6)h=XBcT zdH!d^C%~m&6(V)QMM3N0mbH&#PLrZjEN#Qd*1u3Nyc>L}H_0J(4UOjLKpG)UXe+IY zv*ZUm2DcvFUNiVJPVL3si%oRI8IYz^Wm`XYa0<8k?(7dCi_5(9<@9x*%=6KoMX193 zYk(-o0UbNv(653odjuIpE|GZ;AqB#Z14Bmp*N8iDcm zLVBD}E^G)bhqLI++7Ll(q%swq%`hOQ$0_=cLu$+l>Yu5pL%=?V&3=jaGZAzfeHJC5C>a|LusakR)Z%(3RZ28 z&9t3CE;rr@0T`*GNJFP#PRG#XmLdKT%Dh=0^!wYO4ygl}0S@3t5n1pDEi!D~F86!C zIefKOJ4fcK717W)tw?sYLk{Gg{J_`{ALCi-_m^!_D)EV>rh7JjJA&8hx5<}m@~UF+ z;D>mZ5b$dpBA-hS@yC7 zbS#b9L$%zH%Y}g!XIB776gFuO?U#UB3~uj)y+fj0iK7I6E1x=u;W<6XNjm)hxvKo- zm9(ZpiQAt$S$MfvRT96(w^QWdWupZ=lCfV+dkdDfc?-h{S@S%0#Rp;{0HascFg_|y zi=N z>>^&`{8f6O72cb&I(>gPe(oAUE-m5bB+!)~<8_zATRr?5-Yk&kF%#Yxm<0XHxfk0( zg;2#mj;F6Q;Z#R}9El`Gxdg@QJpVDD?D_NdjCAd2+8@fIgQMK6Ig8!QWV_kFHIfE z!;OU0+?C(V^~T^`^`WS+2VQ{}WTTXvdZrD~(K2>DbDOETHJDGI7>O@7)`T z!w4>zRMw}#i!#oh5Y^6dTXy||CMwH;!45TLo6nAj_6?e7rMu}30?{*vjM+9+6zaN} z#XR(j_}jB00$gp1=HsVJulj8#jaC82^jHwMQ&Q}d{Onc)28~kOgnfcbKVgikKgFfK zg{zzn6uD95=v9e92oh1o_~~SiCQstduoo!3*_dJYjFudopX5bq++an>T=4W1)0w%+ z9nY|)s4dI;_eDJ$$VTnM-cNjwOc7X1SZD#|DNZ_uYU>-JCpeUJBHnyp0TR_!Ci;rp zb6rE-%gG!3&2jDmlqLicY6aK;}T zlj6R*e*A%pZIR!@{ln4A2B?X+g?Xulp}(|}61>g&@xZ6>?n!fV09DRozJD?<2?UR- zBRxF-ZeiB3pZ_iUSccfqHhDz2JngA{{q!NUqDg7}Es$d5T5$e&bLaXMIU|R~6XS58 z6_z^Zo^yot)KXX75jD(P%SfaDc8RuAm)Xr&7w`pseGR*?2IMKoY$6jw5wjH^hO&8< zWWR;6c<@)Fb+N%jMMVL7A-p}`AVCE|`dwz1b=G3a5rb0APaKT2Wl)DU36Kb@r!*AU zotdT(dN^A8ieWs1h=BuJhXd1QgC0)ro#iYHw(1I(@n~yIg6H2)u(B|o2CKMz_c!BJ zH4l$wK0d$@t8qt~p`gNRzZwe~RPEB98H{K(yjmki6nXnJJcI&v5*r+qHb*d0n<_bpiSAIe7^^YHgUDIx)+;h&g>vm=a@ZGSnjE2+*2LlqN+<~>$x)5&*7tpAT3AZ zJ0DcAd)sd3JKHT{8)J|DJ;wI4lG8&dpZR%;&x5JH%kpk9G3xwjS#-YTKRR>CPlmN3 zL#d5f*kd#F6w~kD>YI|ULN=5p6e1f3j}9FJSgbZ!XMQsH3u7Qr1Iz!|NHcc*>1riZ zzu(qY&}v)Xp)_nflWgr^CqD7T3e!X-@>S!jO93HgAO;OgcavT}rYXVxhtp%k{Hy%( zK%$ZSceVFleqhB^l;(esKKs9{N>y9i7CV^Gg+iH-k{3-EvIfp)J=)q*XsHTjyGdDgg}2oPWqX~kzR?+OmN z#%m^zFDc-?5DDewVAA?4&Q{tfZ|b`Y|ekd?d!M%w}TV3G!_zXLPSWe^0 zSIcGrO>F6tz`hSa`AOHd&DB-x?j>Nsa4bF#FarT(J@dE)o-Zz=R1V24JfkPt>n!G%O_w0PG>SdNDeE~L8F}b85 zC^^$!fkJA)1W$l5H!tt&rt8eo;v#a7ow*#S3W(?NWO`^QV68F2zX$DKJGbimb9(EUY{%{N#T{a^OzdVGPBZT^3b90~Y+on+-{B`vk| z>a*qjgb~QlcM>#y;FrE^7SiK=yZ(6Iep{-jSzccB{gb(~+2SuWBDM7{wMJWsoex~P zbzSPxYTHB*oMM|V8cxgmaOrx(wR-svXZ0W>&VnpFk#UehzVDvY$hAW;C5q#_vcF)X zpdZAQz`s&>{e`V3gA=v?zIXB`9t&;@nclO>{aIhC_?drwwn0W$ANLL>XOhuaBXb_f zi+iw}kpN~PGGNS=c%LjmWBvNKj`@z{)DDv?;-%32Cda_7#lMiDZ@&zwfsCV*Bm$`3 z=kkrdjEvfK4TULEOj6 zo3?2!#5I&{oaL&afs3CnCl5#BVLpQ&R2oiw`EEmLwbxz=WvTAmQWt^x*TO;Hi4Fz9 zaoo(g(jyQBu8;F!O!qqZQ<2J~f7}c?PT$rK-7ZYo*4W7HnEu2T?gJ*Hj0K^EN2LF0 zrt`Y9qj%mTSS8yGyI&cdrxu2r_)+$iG!3PF)x%vF;smY~qQRP&!tj(xxBT_Cy*a;_ zuR(Hv{vA=O0r1hn2RCycg{9)3U@PUz^CT7Q?@_j~H4Uxl2Q!Gk%fdsHu8oV2o6;H+ zV~WH`pXr$XYvK_J@ygNhyfW&J)R)lc>;geu z0f&T_g|Wkqo(0j9WyG(YXU8S^U&$ zPMoypmA{@h8sc&o!5Dl5iIeBd)RwXQS;KGpr_LOY&nME56AGcxcEeTLRZz832%erj z)frQT5*D@GLv)E{s*ZwB^?bf>c%Rx`5{0^NKg{5E0cOQMGLh{R9t){wAVqx=)PyS{ z?N0L$)5pDC*h{YsXEJX|-?8I2CVG%BG?stl@4}C^Qge(+2o5 zvKSPcie>63VR}4B%lKsb)A`D}jY-THX}-cl9VlR*23Pg6`$0SGr6$m#b@if{IR?S& zbkkP`<9RxIQ^JabgGO{9w>FB+=vm-Jj6IB~S&JdtaMwUElQ1p~9SZm5!A_iPU)x_PCiu3?>lX^!9v2_j`$A`DX9+%x@R0McPig32zlc(u>#nzM2 zh>9_Yp`>#~f3@uptb8Q`k}Ypd_lk8pfxryCGED!=yc_wd~%-5 z`11hi)Oh`t7sFCNFh3$Qf*~O>x9%5G{53niaqO7g0t{uLuy2!14F<+n6iPx)=qJA( z)vBryvFvab|6_U~gp&%a+MnhT{f-UrzR;B@Ff@m{$Oadid29cENR4075?=dRhgx!T z%%IHL2kKiYSAK`+8g1B5j47gxlPTX;_X8F^qepbKY(x!kopsm=Z(2E`)cE}hjn+_B z9rnZe^Q^+Ayc1Zt}pJE+t z(9_8+q`9(bp*_4mX{Rb_*;#yjJoHC{b76MP{@4X>A+brms!xi%jhQQ6fh5O3hjofx z?s8}?J*+v_h?)FyR()J|K;EY z1;Tf49p)%|ZiH}h4syjG*MmCoj5GR2I!VEyY;1PtL8>i^KRFxHWsNLKz6-TV>kuBr zNU~&)vKex_zX9p)Xaq*ox5!9KEOhR<%FTR!kO>1fQVUpKE3WbH zZIF$!gx-mfWA$-d_+||&tCJFwioFo0(!=%q{_<|3HW@Lw=CONf&uy-F8XRVbuB03Y zjb83Zj@*OHV#0{L?DOPt{*y)*y(uFQ{65k$@~i@+lt{20gnM9!Zm0Ly-{b% zKnDH(g_nAfq0?lSoM-^`uAUdZtv1a$ew%pj%#G)5@V8TQJ07pK@Oy970Ki$@r@P?du5Iyzt_%ujI5t}!%Ip) z$FNRXdXCcaOyk8da~Jd$w$7mph*`L57D^>9xMdYl9@*C1D#a`~B^6PnCp%l#L?@=3 z%FLFX4QwIgz9caq$h5XO2d}c1hkE{z9@De<13p?q{~+tSa@d9!uyy9AtV5Xi=FfnB z_J*5!hd-aB8Sm%823B-My9TdP%iijF34$d|jIGfK!Wpo^?S{{0i4Kd7(^gfAYj=3K z-+y>&FBDq$)FG*Hja9$0D2|(%bUeZLcn`x!xLc ztEyK9^$b47Or{=cE-YZ(OTvHKEAhW7#&!m;OpTKo#h`O(&klY^Ng>O7|%OMLA_fHb&vAHnY(W{EXO z9^N1mZ)*&i(V^B$e+gdm4%!Clo22#~qIqLK42EGqF2&a7(a3Z6{;x3e{EuBg>e}uQ zT(f;>zsV3Pp_AD{u*hC$*Z?zjxwTy&6*+no!{ju1DyC`VdH2AG1=Y8bk#BY*Kh;;( zi>-0mevA->iU{zqG7AWrtYI4Dq5?wu?(51kUQ-ZjdF=jVgcY}q-8I~FA{scHUxo<* zH9$!4BL|ozIkT$l9fI9=W;a=QShe(bLK;4>W=#7dRu+Rh_Q0w6PLI$=+i*>sJSGj2 z&JpW=dysp!;2}nBxGH&7suO;N=>PSh(Yhj5EDfs=Db^eyG@GI-T%(hVxy=x`UzNNM zC6eaw32neoh`a1845LU}LbD9j-f~Ja#RDeq&5(juAd zclmPk>_m_S(6>;(uY03Y8xMmKJ9%&m7^YxCAC3L7qB+&dX@g+Xo=4Myh2{p+nsBm{!BVS+eJ6sjN7 z`yGv|QXgR(-UvRppj(^1Y(O_iLgIxYTCTac3`S9NMscQ3U~7H}8nNXzs|mbASA+(e zCvyF@`U9HG8QvKu#WT~oHLi6+Ze`;cKR|ARb+2TY2&xei-u?Q==*3Leh=R$Hs+qy! zDy6U^6M`WXOCC|S-vQAg==Tv|4sK<8X`V}=_`POyO+plxN>ZiZXS%4(rxBq|B~F-8 zcAWfM%(BXm8dtL?8YwZI;h97&`EM~E!UY^ZOi~fC@pVnsbC9cgE#iJXYp3v4#hDZj zPUSB?R$A4k|8mYnskA7M)sCTB@9hVJ=312>(O(Y*MN~HFp$P&(9#i=M5p&~zlwtcUmc=H;$Zx`mJG1tb3RdqbRWe|y?&z7>Hwc z*k|XdnIWe`enIg)6T*gwc>*;Fe;t5cBI<2HAyPrH5@V@sc6tD6OOPOkA#$RS zFo`Tu*y#Rpxo> zFv0Nm=P<*v{f+7MDK~)~wiw1?i2(gq@+eMiZ%!JN)9TA%a-AEqaHU|!UKV) zHuPex`f;oPaumMc0IuktRkHB9@C)it)XiGPg0s|#yR!g^+8d0*7n?SUn`TcrvV z0t-O&RvxW^Zgi~+E0Ok;Z;L-1+sVP-(bt5QT%DTLS5&-W5W=`uF8&Td<@hz&La^OO zoS#zKLsT<>T`-iHlA2UyPgdIcq{QVBvLy~ztud65*TrxAZe229a|+b$7`lw!VXm()5xLS^}8_{yy&KN z)DHJQObyNvd0t`o(QJAEDyL6|XsT)Habc}_wVIqtF*IME^lrm9kM2aB|D1+ZX}b9| zZTLXgi#$6mkBC-R>FC*ugmMfS=^8IcI79v%Z<5el`iP9W36-%z;;|@klY~+-=8d}>;dHvh<-?VK_3WZ9d zMowYLRnRy75YQ;&2`*t=$40GuVWGuWQ88wpBj(~EmRO|Rs@$2#T;=d%m)>T3G*aeR zsk6K{oBv!BuzH=FM~&D}t>MJ=eI51l{p03jHOgH3$GU;*+1!SK5=la%wrJ2&K7>g# z_FKM>PY2=J3dX$I^A+8*1Nm*R>VX>B8`sR>S8y?WG`-8h%CmC^txt7M$0q7lhq3v1 z;C59_)aUix%gwc_39SZ9R6^7lQ#DUdkD)&2#pm%t@1>rKulUG~5=m)4b38{=2iaW> zQCyZC`ali0(nna_Ig@bSAregOAC_W?}rr^B@7M1U-_A-%lQOfX9b<{zcw2C46x0?Oa&&Hs zbwfw%*qPjrDh3h91szJ?lh=@p7J%>& zo_N*r)Cw;fkYCW(Yp-eWhy5N1BlRMWVV}2Rf9~V){C;G3s8m5_5Vc_Dk@$`pOcHLV zq3-|lrLMSrbb2C3ocQ<8{Bxe1gUitbk2gdjP=buvMzE$TTI=<#!aV?SfbazXd9!LE z^%4dQ&=?8Qw?#=X*Lt&w7XwS0i`T}y@Ce>e6$DoGLK0Dglz$rEUo5Y6vySvC)#??lV^!% z)k5!cai7-4exI8yGhL5eE#!SiA-cxy(OC=P=P7KW&Mt|y?E&5>R%n44!Mf8qC)_q& zyLyImQEN(K(W(vRK<^D{+}!61u3{@579$5k|nAH zJ3Psse^O1+XzJf^)>h#`A#5;98CuP)yxb)|j+k1ieOYpuAtNU<=cS^sI&Jl&7!i$ zILfDw-O_QC&A7K)EHJ>LL|*glRPtmOLQT>{#b|WXMZVICsNDAw<_1P+>4N(kDgEcz ze&Ede2I79(oY(5G$#)Jk+kvNbBtH`KQKX-amuxDCwmYC{I5G9Ve<%qD&S|ng@gWLX zIM;`PnRGsWmTx<5&(Xc_zgeMI(sfEjt5$I75cw+wk?P`Yt6aZ9-ky}HRyQpvszK-F zcF=tfTkhIR{+9ITp|P3Vr!CMBH;6GP2VTl{``OKUFkoRZ5zg;kR?mh^E|Byg^q9T$$Qf+ejw{S2;Z9URU`ha734Q2CI;1&lLwxu zS24E~8kL^;wES4#ft{}yM{ygbWkC}@)-tl=rZJMcTZqk1+q6c-UdN3w#O>|&o?bc2 zaqb2b4CL7#{3Qx_ow6*o)SP$ywat!34ss35ZpFprLyh64qBaG4KO(iq<4`N-Ub0d< zn-=t5I1_V3J_y*&H_`+BM_ESCKx`OW51vnD`mlE`3-iwlc%nUQXLJZ#)`3CY#nHW( z=4(gbe$&3$^O1fub<6}oVdJnW%jWa1thg0Z$G*ZZFjimRj`XtXE!_CJ0kI)Shupoa z#(iWYVXWlMSDr>r7fC{JAIRo_G^%HU76(GBH?BAC_{JQkXY<@*@0gf;dv0#C_&RU( z=ah`(d{qKt{p5gL1DB>{Gncq{0oA^7wsWK0zh%n56SnR#@tNxonk8+WQ*I$BQm0+gnCOCCbqA<#R^)Hn7`W zUw>Y2#M95<&f1yitE9;LE}DWVzJYX+_7{UG8>~ay6tYG~2;^og8@g=|Sw4qXR=Giq zMsyEb?H4?ZqTI~yqZKWjT<2yi4rYw(KfSp&L3p%Z7Hf`u$4+m573uVJVISyS!hX~L zc~e%@j3-G)Mo@*k>~hI3*)E^^3EW`~Av%25Uj4gA(^?$vD$HD6`L2?l;?WRvB_qC< zW=~g1hn&p2n>l6^?`b$!i>-I{(-CXGcGS8@l=9gu1G|W9*Kkaa|DcMm>BY3LMF|kK zHh*k-YNXA|jhU9p24K8gh!RtIBFC4~?lTa_rqHOuk^Ppw?pDR^r@!Ck7k}{9_;iN` z2(tLiDsMN}8D5O7qkhp->N=Zn(fu0HG0UlL@DnHR*F%b>#^wp>M|3r-=SELUm>Q0B zlC+P0At&!4$L#TVpW%oGF&=pf)U$~y3BXo;g#QY0%@k#i7X^QH6F25bnim>A$;be? zQZ}|neqkGwhBy2iB(Ts)7_oo~jnT9C zZq?B6Qc=rehrRFzm0DifY+PlDTiNX7@uS_it?&_VZEQH${XDMr zdHrSdRsdFe?6Ud+2)}ODOovgyk2z4=BR%u z6=*2d+uMsA27a)@S6bHwt+jZUq~3C7owtlW`8(*#^GXD8C-Z7B7)*2gR=BgX%+}Q0 zMU8*!fhJZ9#M0Wjx?Z_*FU@o3fc{w5;^N>8yGrgT>4Cm;u<-r&xNAx z#y8SRg#Udgh~j4{y(DRXaM7_$!o*!z{{WP7NQHb+g9yUN&*V zLj|PE+se-fq7LcWB6BBC03ZfP^4_6XUP|>l1<)=USfA~<2(aJ)2*5Kt;#j{Kkkr+{ z8ht0|K$$H8_*EB97d-@UMjaAlSM!e?pq~x6O2nXpwiFQY#Sw7^TBue6NETHIC35le zX921}M0;r^@=HlK6<{00DFA&-i!U|@5ziWjIfKdOz&1r@iIcdjjEcg8i0H)0TC1>h zU>ofNn+lS@3_XZg&C}ujzdd+o(Q|?}RFL;o;}2cj)~St;KW=O_pw1q0fB_>5-$8}v zfmvPt%mPtYj4=c#c*BKjN%INd`Jzn}f)q4Dtm7141`eOwo{0Y@0onevcRoI5)3OcPQp=Nm*{Vy!1%V=U17U z5cH{wo-Gku)J^>05P`e5vdjK`^Pd=x0!Q#*Sr+j~iT69j!AExjpPdGvt#AgF=vTHe z!nFE|?=PPhAZLwd4L5AE;kAYlKQobI_woxlhFP}rG6EZ;%33o;lK;v-bXHFn^h})0 zFjfp`L=WtT5AEz)6bjswt44`5Atdv|?;)pJjxD;x$#mR^-KI?F(YJ~IQ(Y8;dN^a` zaHEA;A{wk5buX>aS79z2FLOzWU%F}`vjZOb{Z)^MRA4xgzbX3$xzjn&c+KOXTMpS_8}$d zceHMxg}*ZzHx%*frP<~WSF0sO9Bcl4)m19VTfQpPMvv1H>*DnxD(i@N0F1ZF>MFU* zH(9yP8Ml~w2BYe2`nDijFM{Ce*t`D{dXqLKQ(e&b2i6e<5y@BVjRN-bBJ9zud+s+{GZ~EJ zn`=g>Yjn8;I_9^@j1z+ULe`LU3H$pg60Xkexa=P?rdun!mCQ+{-F?J42957oKWTqS zvz*oE>6Eoi`rsEtYc?W58<=hRD2q~Pf~D_l-+(1_y%n&-g>lT!y{e-`LjS;K@nNL_ z4nPUkQ8#LaMB0^pc!#8#8@7jY1h}*RJZ+?#L)`I^dGd}w#h!kxtjJ5u8a=3$kWIv?SLWu}7wkTK1xGd}G|Y)erFD#7 zXXlyw&WQ`UCr*k{g-$;F(9Bj2$JWO`DHPrM{FtzNK6b6m zhB)t1(b@?P^|wvMP|;a#d7_|+bd3&2oDFzTb<~I0PAIUf8s394Cxv3H?LQI@uN?iT zl9=eO@vidnA?%`Fp0>d@8b97C+2Uh7vDdr^$HiKp@k5=I;h$^F0pX0aGMImV`AA>+ z2zUTYF<4&g#}x9zc71FOpXJw)Xn4C>B+7CYX|suk?o=$C$P|(qqW;62h%?jj9C-<| zxn`Yf)I3yC#yZaDAmP<1pIZ`O44reX%q;`uP`;GhD#=MoiLCPFnW*cf&3VXjk8{~E)X3{7j=S7cF8CChC;J3i{w_qv zc@-x&oqHe5nQzdx)v;SIcs3VV8c^!GZ*6+yRRZ*kL{hS_I73uzZ|n$GT#int&k6|K zvAR@Ty+5(((%ov+y7uPt-dL5YRP5J`50J0K@RG&m&z?!#rd4{*OixJP0w)Cyo0|@@uiVX*c z&rysW+L!Nkk2gHqi>#w7dqzb}a8B6j{7s3i6|ZRBjZZEkE=6_I88%%5nf8Z%8v=yW zo7+46;9S@Ce9|7hn>E)2`56C~U)qOIC;qESLH*+{tj~M3M!G|5+fvm=9Z@ajWzGR6 z{D8&@MwrBSyBg$>Vi1B7AG&yYW_`*-Y_PM9$y{=@~F{1#Rt3z{Flnd z_zOGIo6o(f3(u*W(XgS#I!>pvE=cbMMDfm&Ro0JW{sWnnYtU3Nfm=F?8^3GfNm;lp zg#_eHNxTNIQ8lneWk4C*4hiBW?i~YGg8b^nVFF8t5I_tQLwWDeVakUNzKl8mn(Byk zlml*@bWNQ6g}B0dAeXO!Q@myl1Exvv_i-ii|3m-(f&7;l@@}8kKmtY5f{kYK0GH)u LTeDgduRH$%T4JKA literal 0 HcmV?d00001