From 5ad155dd32c93c42c8f1048fa9ce8bab0eabb0c8 Mon Sep 17 00:00:00 2001 From: Tony Meyer Date: Wed, 4 Dec 2024 10:39:51 +1300 Subject: [PATCH] Resolve many warnings (writing output). There are many 'cross-reference target not found' warnings where there is no xref - these are all to content that isn't yet published - see the PR description for details. There is still a huge number of warnings in the earlier stages - I'll do a separate commit for those. --- docs/howto/get-started-with-charm-testing.md | 8 ++-- ...ument-your-charm-with-tracing-telemetry.md | 6 +-- docs/howto/manage-actions.md | 8 ++-- docs/howto/manage-interfaces.md | 8 ++-- docs/howto/manage-leadership-changes.md | 2 +- docs/howto/manage-storage.md | 4 +- docs/howto/manage-the-workload-version.md | 2 +- .../run-workloads-with-a-charm-kubernetes.md | 10 ++--- .../write-integration-tests-for-a-charm.md | 36 +++++++++--------- .../howto/write-scenario-tests-for-a-charm.md | 8 ++-- docs/ops.rst | 12 +++--- .../create_a_minimal_kubernetes_charm.jpg | Bin 0 -> 75153 bytes .../integrate_your_charm_with_postgresql.png | Bin 0 -> 19035 bytes .../observe_your_charm_with_cos_lite.png | Bin 0 -> 45611 bytes .../create-a-minimal-kubernetes-charm.md | 6 +-- .../integrate-your-charm-with-postgresql.md | 5 ++- .../observe-your-charm-with-cos-lite.md | 4 +- .../preserve-your-charms-data.md | 4 +- .../publish-your-charm-on-charmhub.md | 4 +- .../write-your-first-machine-charm.md | 14 +++---- 20 files changed, 70 insertions(+), 71 deletions(-) create mode 100644 docs/resources/create_a_minimal_kubernetes_charm.jpg create mode 100644 docs/resources/integrate_your_charm_with_postgresql.png create mode 100644 docs/resources/observe_your_charm_with_cos_lite.png diff --git a/docs/howto/get-started-with-charm-testing.md b/docs/howto/get-started-with-charm-testing.md index d947fc668..0c2edf63f 100644 --- a/docs/howto/get-started-with-charm-testing.md +++ b/docs/howto/get-started-with-charm-testing.md @@ -6,7 +6,7 @@ Testing charm code is an essential part of charming. Here we will see how to get **What you'll need:** - knowledge of testing in general - knowledge of Juju and charms -- knowledge of the Juju models and events, esp. the data involved in a charm's lifecycle (e.g. see {ref}`Talking to a workload control flow from A to Z `) +- knowledge of the Juju models and events, esp. the data involved in a charm's lifecycle (e.g. see [Talking to a workload control flow from A to Z]()) **What you will learn:** - What are the starting points for adding tests to a charm? @@ -77,7 +77,7 @@ If the charm is a machine charm, workload operation calls can be done directly, "Juju operations" are the most 'meta' of them all: they do not affect the workload in and of itself, but they share data which is meant to affect the operation of *other* charms that this charm is integrated with. -> See more: {ref}`Talking to a workload: control flow from A to Z `, {ref}`Charm lifecycle ` +> See more: [Talking to a workload: control flow from A to Z](), [Charm lifecycle]() ### What we are testing when we unit-test @@ -120,7 +120,7 @@ There are two ways to initialize a harnessed charm: * When a charm is deployed, it goes through the Setup phase, a fixed sequence of events. `Harness` has a method, `begin_with_initial_hooks()`, that runs this sequence. * Alternatively, you can initialise the charm by calling `begin()`. This will instantiate the charm without firing any Setup phase event. -> See more: {ref}`A charm's life `, [`ops.testing.Harness.begin_with_initial_hooks()`](https://ops.readthedocs.io/en/latest/harness.html#ops.testing.Harness.begin_with_initial_hooks), [`ops.testing.Harness.begin()`](https://ops.readthedocs.io/en/latest/harness.html#ops.testing.Harness.begin) +> See more: [A charm's life](), [`ops.testing.Harness.begin_with_initial_hooks()`](https://ops.readthedocs.io/en/latest/harness.html#ops.testing.Harness.begin_with_initial_hooks), [`ops.testing.Harness.begin()`](https://ops.readthedocs.io/en/latest/harness.html#ops.testing.Harness.begin) After the Setup phase, the charm goes into Operation. To test operation-phase-related events, the harness provides some methods to simulate the most common scenarios. For example: @@ -256,7 +256,7 @@ A good integration testing suite will check that the charm continues to operate Some charms represent their workload by means of an object-oriented wrapper, which mediates between operator code and the implementation of operation logic. In such cases, it can be useful to add a third category of tests, namely functional tests, that black-box test that workload wrapper without worrying about the substrate it runs on (the charm, the cloud, the machine or pod...). For an example charm adopting this strategy, see [parca-operator](https://github.com/jnsgruk/parca-operator). Nowadays, the preferred tool to do functional testing is Scenario. -> See more: [Scenario](https://github.com/canonical/ops-scenario), {ref}`Write a Scenario test for a charm ` +> See more: [Scenario](https://github.com/canonical/ops-scenario), {ref}`Write a Scenario test for a charm ` ## Continuous integration diff --git a/docs/howto/instrument-your-charm-with-tracing-telemetry.md b/docs/howto/instrument-your-charm-with-tracing-telemetry.md index ef8f4d607..04b794c51 100644 --- a/docs/howto/instrument-your-charm-with-tracing-telemetry.md +++ b/docs/howto/instrument-your-charm-with-tracing-telemetry.md @@ -78,7 +78,7 @@ provides: limit: 1 ``` -> See more: {ref}`File `charmcraft.yaml` > `provides` <11012md>` +> See more: [File `charmcraft.yaml` > `provides`]() 7. Instrument your charm code: @@ -91,8 +91,8 @@ from charms.tempo_k8s.v2.tracing import TracingEndpointRequirer class MyCharm(CharmBase): def __init__(self, *args): super().__init__(*args) - # add a provider wrapper for the tracing endpoint - self.tracing = TracingEndpointRequirer(self, protocols={ref}`"otlp_http"]) + # Add a provider wrapper for the tracing endpoint. + self.tracing = TracingEndpointRequirer(self, protocols=["otlp_http"]) @property def tracing_endpoint(self) -> Optional[str]: diff --git a/docs/howto/manage-actions.md b/docs/howto/manage-actions.md index 530878114..46b00d726 100644 --- a/docs/howto/manage-actions.md +++ b/docs/howto/manage-actions.md @@ -80,10 +80,11 @@ More detail below: #### Use action params To make use of action parameters, either ones that the user has explicitly passed, or default values, use the `params` attribute of the event object that is passed to the handler. This is a dictionary of parameter name (string) to parameter value. For example: + ```python def _on_snapshot(self, event: ops.ActionEvent): filename = event.params["filename"] - … + ... ``` > See more: [`ops.ActionEvent.params`](https://ops.readthedocs.io/en/latest/#ops.ActionEvent.params) @@ -91,6 +92,7 @@ def _on_snapshot(self, event: ops.ActionEvent): #### Report that an action has failed To report that an action has failed, in the event handler definition, use the fail() method along with a message explaining the failure to be shown to the person running the action. Note that the `fail()` method doesn’t interrupt code execution, so you will usually want to immediately follow the call to `fail()` with a `return`, rather than continue with the event handler. For example: + ```python def _on_snapshot(self, event: ops.ActionEvent): filename = event.params['filename'] @@ -102,9 +104,9 @@ def _on_snapshot(self, event: ops.ActionEvent): event.fail( f"Failed to run {' '.join(cmd)!r}. Output was:\n{granted.stderr.decode('utf-8')}" ) - … + ... ``` -] + > See more: [`ops.ActionEvent.fail`](https://ops.readthedocs.io/en/latest/#ops.ActionEvent.fail) #### Return the results of an action diff --git a/docs/howto/manage-interfaces.md b/docs/howto/manage-interfaces.md index 1016554ee..1441b35e1 100644 --- a/docs/howto/manage-interfaces.md +++ b/docs/howto/manage-interfaces.md @@ -255,12 +255,12 @@ def test_nothing_happens_if_remote_empty(): t = Tester( State( leader=True, - relations={ref}` + relations={ Relation( endpoint="my-fancy-database", # the name doesn't matter interface="my_fancy_database", ) - ], + }, ) ) # WHEN the database charm receives a relation-joined event @@ -332,7 +332,7 @@ You should see: In particular, pay attention to the `provider` field. If it says `` then there is something wrong with your setup, and the collector isn't able to find your test or identify it as a valid test. -Similarly, you can add tests for requirer in `./interfaces/my_fancy_database/v0/interface_tests/test_requirer.py`. Don't forget to edit the `interface.yaml` file in the "requirers" section to add the name of the charm and the URL. See the "Edit `interface.yaml`" section in the previous how-to guide {ref}`How to register an interface <12690md>` for more detail on editing `interface.yaml`. [Here](https://github.com/IronCore864/charm-relation-interfaces/tree/my-fancy-database/interfaces/my_fancy_database/v0) is an example of tests for requirers added. +Similarly, you can add tests for requirer in `./interfaces/my_fancy_database/v0/interface_tests/test_requirer.py`. Don't forget to edit the `interface.yaml` file in the "requirers" section to add the name of the charm and the URL. See the "Edit `interface.yaml`" section in the previous how-to guide [How to register an interface]() for more detail on editing `interface.yaml`. [Here](https://github.com/IronCore864/charm-relation-interfaces/tree/my-fancy-database/interfaces/my_fancy_database/v0) is an example of tests for requirers added. ### Merge in charm-relation-interfaces @@ -451,7 +451,7 @@ INFO:root:Running tests for role: provider } ``` -For reference, [here](https://github.com/IronCore864/my-fancy-database-operator) is an example of a bare minimum `my-fancy-database-operator` charm to make the test pass. In the charm, application relation data and unit relation data are set according to our definition (see the beginning part of the previous how-to guide {ref}`How to register an interface `). +For reference, [here](https://github.com/IronCore864/my-fancy-database-operator) is an example of a bare minimum `my-fancy-database-operator` charm to make the test pass. In the charm, application relation data and unit relation data are set according to our definition (see the beginning part of the previous how-to guide [How to register an interface](). ### Troubleshooting and debugging the tests diff --git a/docs/howto/manage-leadership-changes.md b/docs/howto/manage-leadership-changes.md index 8017ea40f..634487675 100644 --- a/docs/howto/manage-leadership-changes.md +++ b/docs/howto/manage-leadership-changes.md @@ -29,7 +29,7 @@ To have the leader notify other units about leadership changes, change data in a > See more: [Peer Relations](https://juju.is/docs/juju/relation#heading--peer) -{ref}`note status="Use the peer relation rather than `leader-setting-changed`"] +[note status="Use the peer relation rather than `leader-setting-changed`"] In the past, this was done by observing a `leader-setting-changed` event, which is now deprecated. [/note] diff --git a/docs/howto/manage-storage.md b/docs/howto/manage-storage.md index 19ddc8933..1d39ac19e 100644 --- a/docs/howto/manage-storage.md +++ b/docs/howto/manage-storage.md @@ -127,7 +127,7 @@ has attached the new storage. ## Test the feature -> See first: {ref}`get-started-with-charm-testing>` +> See first: {ref}`get-started-with-charm-testing` You'll want to add three levels of tests: @@ -161,7 +161,7 @@ def test_storage_detaching(harness): # Simulate the harness being detached (.remove_storage() would simulate it being removed # entirely). harness.remove_storage(storage_id) - # Asser that it was handled correctly. + # Assert that it was handled correctly. assert ... ``` diff --git a/docs/howto/manage-the-workload-version.md b/docs/howto/manage-the-workload-version.md index 988f5d109..96613461c 100644 --- a/docs/howto/manage-the-workload-version.md +++ b/docs/howto/manage-the-workload-version.md @@ -107,7 +107,7 @@ def test_workload_version_is_set(): "webserver", exec_mock={("/bin/server", "--version"): scenario.ExecOutput(stdout="1.2\n")}, ) - out = ctx.run('start', scenario.State(containers={ref}`container])) + out = ctx.run('start', scenario.State(containers=[container])) assert out.workload_version == "1.2" ``` diff --git a/docs/howto/run-workloads-with-a-charm-kubernetes.md b/docs/howto/run-workloads-with-a-charm-kubernetes.md index 90d5d33e5..d44af0329 100644 --- a/docs/howto/run-workloads-with-a-charm-kubernetes.md +++ b/docs/howto/run-workloads-with-a-charm-kubernetes.md @@ -5,7 +5,7 @@ The recommended way to create charms for Kubernetes is using the sidecar pattern Pebble is a lightweight, API-driven process supervisor designed for use with charms. If you specify the `containers` field in a charm's `charmcraft.yaml`, Juju will deploy the charm code in a sidecar container, with Pebble running as the workload container's `ENTRYPOINT`. -When the workload container starts up, Juju fires a [`PebbleReadyEvent`](https://ops.readthedocs.io/en/latest/#ops.PebbleReadyEvent), which can be handled using [`Framework.observe`](https://ops.readthedocs.io/en/latest/#ops.Framework.observe) as shown in {ref}`Framework Constructs under "Containers" <4554md>`. This gives the charm author access to `event.workload`, a [`Container`](https://ops.readthedocs.io/en/latest/#ops.Container) instance. +When the workload container starts up, Juju fires a [`PebbleReadyEvent`](https://ops.readthedocs.io/en/latest/#ops.PebbleReadyEvent), which can be handled using [`Framework.observe`](https://ops.readthedocs.io/en/latest/#ops.Framework.observe) as shown in [Framework Constructs under "Containers"](). This gives the charm author access to `event.workload`, a [`Container`](https://ops.readthedocs.io/en/latest/#ops.Container) instance. The `Container` class has methods to modify the Pebble configuration "plan", start and stop services, read and write files, and run commands. These methods use the Pebble API, which communicates from the charm container to the workload container using HTTP over a Unix domain socket. @@ -212,7 +212,7 @@ See the [layer specification](https://github.com/canonical/pebble#layer-specific To add a configuration layer, call [`Container.add_layer`](https://ops.readthedocs.io/en/latest/#ops.Container.add_layer) with a label for the layer, and the layer's contents as a YAML string, Python dict, or [`pebble.Layer`](https://ops.readthedocs.io/en/latest/#ops.pebble.Layer) object. -You can see an example of `add_layer` under the ["Replan" heading](#heading--replan). The `combine=True` argument tells Pebble to combine the named layer into an existing layer of that name (or add a layer if none by that name exists). Using `combine=True` is common when dynamically adding layers. +You can see an example of `add_layer` under the ["Replan" heading](#replan). The `combine=True` argument tells Pebble to combine the named layer into an existing layer of that name (or add a layer if none by that name exists). Using `combine=True` is common when dynamically adding layers. Because `combine=True` combines the layer with an existing layer of the same name, it's normally used with `override: replace` in the YAML service configuration. This means replacing the entire service configuration with the fields in the new layer. @@ -247,7 +247,7 @@ In the context of Juju sidecar charms, Pebble is run with the `--hold` argument, ### Replan -After adding a configuration layer to the plan (details below), you need to call `replan` to make any changes to `services` take effect. When you execute replan, Pebble will automatically restart any services that have changed, respecting dependency order. If the services are already running, it will stop them first using the normal [stop sequence](#heading--start-and-stop). +After adding a configuration layer to the plan (details below), you need to call `replan` to make any changes to `services` take effect. When you execute replan, Pebble will automatically restart any services that have changed, respecting dependency order. If the services are already running, it will stop them first using the normal [stop sequence](#start-and-stop). The reason for replan is so that you as a user have control over when the (potentially high-impact) action of stopping and restarting your services takes place. @@ -822,7 +822,7 @@ Caution: it's easy to get threading wrong and cause deadlocks, so it's best to u To send a signal to the running process, use [`ExecProcess.send_signal`](https://ops.readthedocs.io/en/latest/#ops.pebble.ExecProcess.send_signal) with a signal number or name. For example, the following will terminate the "sleep 10" process after one second: ```python -process = container.exec({ref}`'sleep', '10']) +process = container.exec(['sleep', '10']) time.sleep(1) process.send_signal(signal.SIGTERM) process.wait() @@ -832,7 +832,7 @@ Note that because sleep will exit via a signal, `wait()` will raise an `ExecErro ``` Traceback (most recent call last): - .. + ... ops.pebble.ExecError: non-zero exit code 143 executing ['sleep', '10'] ``` diff --git a/docs/howto/write-integration-tests-for-a-charm.md b/docs/howto/write-integration-tests-for-a-charm.md index c4d76d7d1..1eff1607a 100644 --- a/docs/howto/write-integration-tests-for-a-charm.md +++ b/docs/howto/write-integration-tests-for-a-charm.md @@ -7,7 +7,7 @@ This document shows how to write integration tests for a charm. ```{important} -Integration testing is only one part of a comprehensive testing strategy. See {ref}`How to test a charm ` for unit testing and {ref}`How to write a functional test ` for functional tests. +Integration testing is only one part of a comprehensive testing strategy. See {ref}`How to test a charm ` for unit testing and {ref}`How to write a functional test ` for functional tests. ``` @@ -66,7 +66,8 @@ Use `pytest` custom markers to toggle which types of tests are being run so you

Test build and deploy

To build and deploy the current charm, in your integration test file, add the function below: -``` + +```python @pytest.mark.skip_if_deployed @pytest.mark.abort_on_fail async def test_build_and_deploy(ops_test: OpsTest): @@ -78,7 +79,7 @@ async def test_build_and_deploy(ops_test: OpsTest): Tests run sequentially in the order they are written in the file. It can be useful to put tests that build and deploy applications in the top of the file as the applications can be used by other tests. For that reason, adding extra checks or `asserts` in this test is not recommended. -The decorator `@pytest.mark.abort_on_fail` abort all next tests if something goes wrong. With the decorator `@pytest.mark.skip_if_deployed` you can skip that test if a `--model` is passed as a command line parameter (see [Run your tests](#heading--run-tests) for more information). +The decorator `@pytest.mark.abort_on_fail` abort all next tests if something goes wrong. With the decorator `@pytest.mark.skip_if_deployed` you can skip that test if a `--model` is passed as a command line parameter (see [Run your tests](#run-tests) for more information). `ops_test.build_charm` builds the charm with charmcraft. `ops_test.model` is an instance of `python-libjuju` 's [Model](https://pythonlibjuju.readthedocs.io/en/latest/api/juju.model.html#juju.model.Model) class that reference the active model tracked by `pytest-operator` for the current module. @@ -97,11 +98,11 @@ As an alternative to `wait_for_idle`, you can explicitly block until the applica

Deploy your charm with resources

-> See also: {ref}`Resource <12734md>` +> See also: [Resource (Charm)](https://juju.is/docs/juju/charm-resource) A charm can require `file` or `oci-image` `resources` to work, that can be provided to `ops_test.model.deploy`. In Charmhub, resources have revision numbers. For file resources already stored in Charmhub, you can use `ops_test.download_resources`: -``` +```python async def test_build_and_deploy(ops_test: OpsTest): charm = await ops_test.build_charm(".") arch_resources = ops_test.arch_specific_resources(charm) @@ -151,7 +152,7 @@ async def test_my_integration(ops_test: OpsTest):

Test a configuration

-> See also: {ref}`Configuration <12734md>` +> See also: [Configuration]() You can set a configuration option in your application and check its results. @@ -172,7 +173,7 @@ async def test_config_changed(ops_test: OpsTest):

Test an action

-> See also: {ref}`Action <12734md>` +> See also: [Action]() You can execute an action on a unit and get its results. @@ -210,8 +211,8 @@ How you can connect to a private or public address is dependent on your configur > Example implementations: [mongodb-k8s-operator](https://github.com/canonical/mongodb-k8s-operator/blob/8b9ebbee3f225ca98175c25781f1936dc4a62a7d/tests/integration/metrics_tests/test_metrics.py#L33), [tempo-k8s-operator](https://github.com/canonical/tempo-k8s-operator/blob/78a1143d99af99a1a56fe9ff82b1a3563e4fd2f7/tests/integration/test_integration.py#L69), [synapse](https://github.com/canonical/synapse-operator/blob/eb44f4959a00040f08b98470f8b17cae4cc616da/tests/integration/conftest.py#L170) > See more: -> - {ref}`Charm development best practices > Fetching network information <12734md>` -> - {ref}``juju` CLI commands > juju expose <12734md>` +> - [Charm development best practices > Fetching network information]() +> - [`juju` CLI commands > juju expose]()

Run a subprocess command within Juju context

@@ -274,11 +275,11 @@ Using the new alias, you can switch context to the new created model, similar to > Example implementations: [`charm-kubernetes-autoscaler`](https://github.com/charmed-kubernetes/charm-kubernetes-autoscaler/blob/8f4ddf5d66802ade73ed3aab2bb8d09fd9e4d63a/tests/integration/test_kubernetes_autoscaler.py#L31) > See more: -> - {ref}`Juju offers <12734md>` -> - {ref}`How to manage clouds <12734md>` -> - [pytest-operator | track_model](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L720) -> - [pytest-operator | model_context](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L480) -> - [pytest-operator | forget_model](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L812) +> - [Juju offers]() +> - [How to manage clouds]() +> - [pytest-operator | track_model](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L720) +> - [pytest-operator | model_context](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L480) +> - [pytest-operator | forget_model](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L812) @@ -286,7 +287,7 @@ Using the new alias, you can switch context to the new created model, similar to ```{note} -It is not recommended to use `ops_test.build_bundle` and `ops_test.deploy_bundle` until this [issue](https://github.com/charmed-kubernetes/pytest-operator/issues/98) is closed, as it uses `juju-bundle` which is outdated. You can deploy bundles using `ops_test.model.deploy` or {ref}``ops_test.juju` <12734md>`. +It is not recommended to use `ops_test.build_bundle` and `ops_test.deploy_bundle` until this [issue](https://github.com/charmed-kubernetes/pytest-operator/issues/98) is closed, as it uses `juju-bundle` which is outdated. You can deploy bundles using `ops_test.model.deploy` or [`ops_test.juju`](). ``` @@ -340,8 +341,7 @@ firing rate with `fast_forward`. Inside the new async context you can put any co > Example implementations [`postgresql-k8s-operator`](https://github.com/canonical/postgresql-k8s-operator/blob/69b2c138fa6b974883aa6d3d15a3315189d321d8/tests/integration/ha_tests/test_upgrade.py#L58), [`synapse-operator`](https://github.com/canonical/synapse-operator/blob/05c00bb7666197d04f1c025c36d8339b10b64a1a/tests/integration/test_charm.py#L249) -> See more: -> - {ref}`Event `update-status` ` +> See more: > - [`pytest-operator` | `fast_forward`](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L1400) @@ -370,7 +370,7 @@ There are different ways of specifying a subset of tests to run using `pytest`. tox -e integration -- tests/integration/test_charm.py -k "not test_one" ``` -> Example implementations: {ref}``mysql-k8s-operator` <12734md>` +> Example implementations: [`mysql-k8s-operator`]() > See more: > - [`pytest-operator` | `skip_if_deployed`](https://github.com/charmed-kubernetes/pytest-operator/blob/ab50fc20320d3ea3d8a37495f92a004531a4023f/pytest_operator/plugin.py#L139) diff --git a/docs/howto/write-scenario-tests-for-a-charm.md b/docs/howto/write-scenario-tests-for-a-charm.md index 4cbcf7e89..17d3c697e 100644 --- a/docs/howto/write-scenario-tests-for-a-charm.md +++ b/docs/howto/write-scenario-tests-for-a-charm.md @@ -38,19 +38,17 @@ def test_charm_runs(): ``` > See more: -> - {ref}`State ` -> - {ref}`Context ` -> - {ref}`Event ` +> - [State](https://ops.readthedocs.io/en/latest/state-transition-testing.html#ops.testing.State) +> - [Context](https://ops.readthedocs.io/en/latest/state-transition-testing.html#ops.testing.Context) ```{note} If you like using unittest, you should rewrite this as a method of some TestCase subclass. - ``` ## Mocking beyond the State -If you wish to use Scenario to test an existing charm type, you will probably need to mock out certain calls that are not covered by the {ref}`State ` data structure. +If you wish to use Scenario to test an existing charm type, you will probably need to mock out certain calls that are not covered by the `State` data structure. In that case, you will have to manually mock, patch or otherwise simulate those calls on top of what Scenario does for you. For example, suppose that the charm we're testing uses the `KubernetesServicePatch`. To update the test above to mock that object, modify the test file to contain: diff --git a/docs/ops.rst b/docs/ops.rst index 8ac0abcee..29d9c6530 100644 --- a/docs/ops.rst +++ b/docs/ops.rst @@ -9,12 +9,12 @@ The library (`available on PyPI`_) provides: - :ref:`ops_module`, the API to respond to Juju events and manage the application; - :ref:`ops_main_entry_point`, used to initialise and run your charm; -- :doc:`ops.pebble `, the Pebble client, a low-level API for Kubernetes containers; +- :doc:`ops.pebble <_ops_pebble>`, the Pebble client, a low-level API for Kubernetes containers; - the APIs for unit testing charms in a simulated environment: - - :doc:`State-transition testing `. This is the + - :doc:`State-transition testing <_ops_testing>`. This is the recommended approach (it was previously known as 'Scenario'). - - :doc:`Harness `. This is a deprecated framework, and has issues, + - :doc:`Harness <_ops_testing_harness>`. This is a deprecated framework, and has issues, particularly with resetting the charm state between Juju events. You can structure your charm however you like, but with the `ops` library, you @@ -30,9 +30,9 @@ integrations with other services, and making the charm easier to test. :maxdepth: 2 self - pebble - state-transition-testing - harness + _ops_pebble + _ops_testing + _ops_testing_harness .. _ops_module: diff --git a/docs/resources/create_a_minimal_kubernetes_charm.jpg b/docs/resources/create_a_minimal_kubernetes_charm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b7e7fffa47e0e745f18af0b2a45c8146ab01cd7 GIT binary patch literal 75153 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
TcSRO5{zd;fB&L%d%n}kPWXzW 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 G9sL({E`{*` literal 0 HcmV?d00001 diff --git a/docs/resources/integrate_your_charm_with_postgresql.png b/docs/resources/integrate_your_charm_with_postgresql.png new file mode 100644 index 0000000000000000000000000000000000000000..c17393597f7cc1b4ee797826735b0db688fba8d8 GIT binary patch literal 19035 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 E0J%WL)Bpeg literal 0 HcmV?d00001 diff --git a/docs/resources/observe_your_charm_with_cos_lite.png b/docs/resources/observe_your_charm_with_cos_lite.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5a58c45a7edd6f3ebbc9786a851918c11a2fb1 GIT binary patch literal 45611 zcmV)0K+eC3P)Px&08mU+MHm|&78x8B7#kQIAP^B27aATbDl-uh7aSWR zA|fIh9U>ebBN`nc6c-yB9wHkWArclD8y+JpD>N4v9u5!`5fm5~7#tlOBN-bYA0HnU z7ab%cDLHDBql6cTxA;{B2-pi6BimcIX^x?MoUdoVqt`79ZOABUtwt?B`O>rBorDVFETe67#~SXQa?dRS6E*a791KGA5l|VU}9@lSz!zf z5-~G5b9H}jaC&29ZXqBbZ$1|~JwtzmCmAAs{FW6dpJ>H)?8gGBi3I92^!F7equ*IXgmy zhmucEQFnKFG%+z585ufQI}{TWUR+@W1qmZ6H-vagv*;fN>tIrJZ?gV*LF5fDsi;bw`tlfQXMSLRWe7fpfrHEWmb9EISpT zb3WOf9#|kIKwt)DnOxgsH2jYjom4M&o!9Q@=)DdOp?esYBQWr1C$(~TQ-n|d*$VSS zLTIaCb;E1>4h&g>&vy|wVgLXj07*naRCwC#oBvM}X&%SP{Xj}`Nt0smhO$4byN7q6 zU4L=XuR%p64^A0;$@Y zLeZjhK3i0X9FX2m}B{2m~cSnjl;t1vUf$*Z{qSwAE24WCuAzA_b-q zf}&IdAQe+cEJ@;Io%%&V0{kuQS!AjEq7p;^S%0?UE=<_?o>St! zHP=JMwwjm$SR%IH(TmFzg-`^wnw$Za2tXVF_N}PIsVZRLiljRpC=_UdLh8ULvCoq{ zQ3oNU9*9aTYqJ%*dp|V;n}Ie}#J)&+pK60#j0kC06;d^GUy2d%cm#kF&C1rqZ9GT; zrirNQl>q7h-}5xxmp*JeTGm@KkgcGE1t&hDmsZM{zv3vJ!-tLY6~|_;MJ) zyho9pSr-qD+#f$=YNWe;#WeVjT6Ei`>%12u(q!FZf}XP9!^;z z0s+^3;iwd3QpbgKM9#QnCHP!ScX65fVw{(gkrcF<`Ipith51yY5Z{uM^Rg0N7vooi z$QyijoRnKHm7U&t{Am@4FRVU3Eaq8|Q~WaT4VD#%K{+W^@Bqb!|Z z6G6|4kQ@_Y5owlHLJS=zcAb-rLca<;D_*Bk8m4`82v_+9F4itAlHtIfMfSOzS>&Yi z;;iuG9}+7bl!YW4>sS>eCB>#$hZ0G$bmBX)MPXy>32q_9CWR+|XA?8?N{6_@%W;5g zQs_;+NC~sz3MWP~tEp$nt<=UvE;F;5`az2E@}d~uS`gY3&l19{u*eBaay=1Av#F=` zT=LLX=3at}&2yqBbCZ=9Qd?=elsMtwfHKqra2g7e*-Ecxo+kjZI4^H@Y)Q9SpK?hS zGLbZBDEZ>oja`ZC?DDcVhiuR{ONVpF;y!kn#P=++uJy#-h$!5V5^UmzxGb%R8y#Hi z(0XQgKp7Th@yG`0KYvLqgwo!xe< zfZyeXS?E}^{0@+J_VC02xfG@@dc#BB=)t)*^6NG-h!Wo{5tne+?}N7E_#eZU$hPQ} zaQ&REEpP@8*W-PH@)S&F5tDb$MjQ{-d&!}taI`T5T8Vz{1?H|cZ{TvKmbS_G?k>C}k4thz@&{x5~hE2iUH+I>XL1Fm?CJA9OH_P4I%P$yh z0!u5f?g6WFq>4ZYw91C4fhz*6%~2RbfO`nkrdkm7p@4cD29;14VxS0{Y5_wIAOk=H zZ4udURNe+!6l`q8HdQu?$k&8saLreAa_VV-RUg=a*wjj(5F}7UT?ndGh+Q}?Xq3#y zwSa3SvvDmo?g!%s(BbY?WIq^jLhGpi4YO!nA>Ow$Q&p#?E08)(nm!^yI^Uatn+ka6 z(WL3qQH9xBTVmB%^_n!5O%*j$218{jWvJBab(%DlOBGhkU1IfgS8M&MseH)l8cHqq z;To-9HI)z9b1G)oBdmnT)@uE#sm#be+I%|)HhzB=TnvLrzaQqauZCRte+U@m(^vym z?{w&X+F3n6}ss`N+r~H@Q1!O1hG-;DsO{F5%S#7o)$az_8?ak&t-@e3d@e_Sx z^fjiRW85r@v7Ib4I>hm(mN+V1EbVrXJ2BTDDU%h#`36Sk#*-?jJXIq(`c9w1Dc$%K> zVi=aOGp#(|&d?5fZ={{!dl=t19dXzvFy_3U?do@2_nka@dC-jwawGm6vbBHliTv#; zjaf~l@v^lew9iwSQIn=Js={d~k192N{4#ussyI*{ zxE|~FYx>xwd;BS0XXQcGV1g?!eRXafrZ;Q9Hu%Wm^6Ge4P1~dIEI9&B=Z=iC49LE} zO{dZLp+_{BK#y1^yYghgu7s)yaGx2mag zX5Bff&T3UHbZSDam;aX?{q}|Nn=8Zm#m;Qr+?v}K?DOsF3hnBv&H0P&H>3UO$@=Aq z&nCajjsx%}@X4fp8(GuPe*>)(u7Zq(>`>9JsmjB~{4Uc_UenjV~lU1c#_EtUJt z`bhwb(`fE~Tn&o!7Q@tq?r5#9_JUsDJ!NqQELNR!fAxN2t=?!h8+GO>yvEpM=?(zG zrgYWjf3t7CA#J329Jfby4Ey4SbBbAJ2re6YLT%Pe2#LDbcF{N&)2hKbaq^^^?Ji}v zM>#Q?%yUsN#yM_QC(~(2(ngITt>}xT#n>0y7bS06u5XG5w|B7RUL-7(d*Qo^6bj{L z^2ca<%dXxQDx2?{%rnnC&pafb`8~hq`%Fjzm7&uBR3o#jk-GwNS+3Jl7BwhvD4&u) z0ZZtV!xH@ffoP$ECYosFB+#%*yFzoF2F2J2C_X+gTj-6i(Q^W1~c60>CgVl*^K z6)S(w<+r!Du`B`kXgSc{5QOaWmQB^GT;8o^lB7*J7?~qSor>w9`BjvGJj-2Hs}=vebHU zArVfg(rv#W|98pNnYFHP_LP93q<>4@t$U+T%0^$RN%U}p)X#$``T>vEk4zq}9 z-9-REs5J!Y{t|UYwK&dxp1jQnS(HSfdSj830VM!UKz@P7a9nMQ(ab7`5=Sr<&~E0^ z%%)c*6U#cKTV9L&To#ZenKj4!3UyFsiHm6?)0Qc7N)hvBs#FCRbDO!%$3=$N;G!rB z;$jh@x%{h_FJEn!0wk5s=Xdg3#W)KSxqHlJx(r_I`==aI&H?mZzjxloR*)q}SNI{@ zF5d>jRC7z|_V7|0O=cwGpvdC-#3^*d%4_8r>B5Vh(Y24{nTYPrBxjN{ao^a=!|OjR zG+xL=`aGGy^@Q{=wUYF)(vwr)t~~tYk=)DwWO`D+{ z9iKk^{-3cjvYyGSUtJp7gDf%r_%pA+w}fn+t>4*t)m$t={}92#^9N20fJRc|$GzPy zc}D8+Z|&UbQNrxVd{TP&DBjp8MLxWduK#ZRwCmJ&@f-g1!p6JJ%-xAC#X7sV zRP>xJ-q4>6GS+BUWO>zO5&L+oR}d}>AIr@>whpi)E{Pk0^GG5)yVg3f#>hVd#!4T3 z9h#*}QI>`2%$gA%6j_3~)FDxlzJvzR_1IrdL}g^#9J3W-lybKGs$lx$+rIIn~||z>Bc`o!PSvR@xRaB6o=EoYQr~A=FX?Z zwSRdmgBG4@Vd8F+c#;vuq8q$hbbqld=sN?AI-}TTVcfC4iP&AfeO$DPl;=#eH>zL1 z%cG7?fx6htn;lls=oD;mZ7Mb$=(I4VsEHJummT`yR>8@oL@Qw(3V+UxqH@_5-(Xr| z)*#aoH4J%toylqOBHxuv@qwjvln2&O9Xl)tq(E7MASK>4GEseRl0K4&!Q)(JL_St| zdB+5!D&?}QHyj-8aU3+vvWV2v;lEmHM)?Oj>L%SqhG5(C&Bwcmf%#VG`Qk!P2`_g0 z<+GQiR6qt;&J6P92|bZpo6S8aCk9a&*;u(?@Xq`9B?bsf8a;c5cD_G0FZzkL$WAR|0!`INVF5sY_P^Lgl4-V zg8?vD$C`;Va$-x+%I+R(r#y6%risi_9PG}@3tf`cu!OTWQU_o+Bo@%oo;V38bJm5^ zfX%862-}pUJpss~2pH&=zjerJns6KkFoLrI)Znony(sHTtc7RS7_G7jPWavFu&;zH z*(1%*OQVNafAu6x<-p2LNb@sNX=+B`#AfcErM&#IC7!P=mUHE~_-zsOo zWLSx^vwN0bfeM8rL6mN_YjTmVKSC8N!+efBjL8LjO?2@cZ>(u*YA{9X#m>$=yn&tQJR(yfmSPngVSn&q00LT^*R|4+C?JrNlbCb>^N31dX3ufF8T`?+riPaV)p=W!eX}5D2?li zRv0RekVfTuD0YF`E|-c&MSDyh6Lu8;ZUGukH>yq-Y)63kREi;3atsRlpoeq0DxrB_ zCoE*CN*#%q4HbkGldICl9Q84>$K=}EGS+!#)^pT=oHy zn+RD6*_*3jZ^*`M_CD={54^Y!F3CRanQ03JafO?`UCs8F(#|>aJLfRdPrvi~{bpic z`L=D__z%e!1d-uKO~2nSbY$)(nlc3kzu+OsB1oBEXvZ8jX=1HtbyjgMLF^F6+WcH1 zw|Jv5{tQC+|M;c1@dGm{VlA>3%Q|EsBN)F8b@1K8<%B*+kSvqfts+PjBvc&35vU)s zXm?^D>WKdk;F=!<@3d-YWE!MYA{&PV;6NY?3EM6N2cV_2&>V@6NCLjz60$I_t0WXG4sj&=-CS+>A!ED7 zDsogz)-&d?8@dlLbI)0lU@x4C%#GDOJbX#V*;EgPZd<+`h(tSm_kI|NO#SY5WbW^g zysL~dPc_;7q&sp+!F-WhxxFa|GVb4)AxSWiV3c8EN(?z28*cG3X_8WkEZC`TrJd0e zGZt$CS*fSxT<|C_ym4fu-(0L|(4&qxvQ%STsmEAMi|_}RDFsbav~-UcpDfre9UVAN z(KL?Z6fK~I;W!pYmaeZ?*L*{*AWIiV9o429T0j=l6kL5!`IVf;dCAA|Rb=Hy3N+Ok z6IyHyvK{|iUOqkj^7XVO30YCsA+PU{k0F`C@ksS=N7~w)QQz2iExv)p&~QlCvO}-bF7+LL00ebc*I6bWS)9@zP)+iL3813zx;u>@BBn(O}?X`@yd-VeIH^A zGc;<7cwu#muzaJl%BeSC31o3wS-XRNPIPoK6XAq#6mWyeDfglup3-Jbi=;U32=F7TvlVQlvKq%qt*i;!h{2N-5< z=#D`@J2u$aI(aKH*B!nV4F>ypmGupev<(Nop6~{l*^2SO{>9rABMX$c+I|8?oj(r4BcWD9S2_8g@W$kHXoeWqqd zfi#XR07k9JDK|=hd7_&cH4a~IDA7NpcIpwbH%XrNg^UWkJX3W$X7ZU%j4A4h*!R zgTcU=kd9;~hL|UJ=I$4d4#8mWSfhIJ><>>Do+6cnmbPnBrW5Wl_Z<_iks`uf}iTf4xNA+cOCoAsDg}}h?#^ZqjRZ)=BdI(=d_F(f)yzV${ z=aIEr%TEpJZ+cF4OHt69L#+k|^o`m&Q+e$kd=0XenK#P^ezgAddb%SC*;~U-hC!px<~F>L$?DU02@6JofqSAyM7oz1SalY%IUZGQD3# zCb~z*C-2=2crP_Ted*27vC+Vowt>}u`P6c!-5Y&@kY&SdhaQ<@!b&hqWPdn~Y-&{& z%k0#jEZ1MqoV9{PEK6NESFZQAt^@`ms`%Kk{T^y1{lc_*Q>8H<7h!qDg*i@*wsEgb zgJJ5uSWdpnU)@JJi){I^3pfCY^a}&6m7a<+DuFD(>h%@1hX4@LFQ5jpD+h8K_gWKU z;>ZH3x~04gt+f`}=WpMIKgyAy4niHva1fHv zb^zs2DEa3&oenwaILM+V8|xIDkt_cWSyl%b7CG>{A-b9b2T(i!l}tprTJ(b1PBI-B zq&EG+P`ZQ?D5X`jQZW$Weu>1Nlz!Q1%<1O~REdfKjujOFUOq9J!YCZ0FuuTm0mLDO zvL`@M7`DD*fG+-0IpzW@MJ_&HBJLByK7=u%TGW5>+R1= zZ|9TJFLb45SoDe=Tl_DvooK*hz>=MkOtsb{Htw+JGAC#`xrR~5rSD>-IQ>GJ#+#j2 zL;+c}Vdu#MiMlMm0VqsxP!MEBtdN@w*M|%Uby;Bxv)g%Ocld!Y3C3eC^Mm)+WqCJ> zj>W}m>arbwUV6K<G%S->+057^{50acOz{R|BnVlBJ9%+)GO_>(?bSc>8Vj`Q z_I5)GpiSFHVA;yGmQ9jo#cDH)LOx2xI)^Of)-8Dsg?Zh=iVcTkt#eZ-g@1YFhAp}b zSOsG9G&WhjOOumE_Wwg?-+6Y5{LsTxs{g`+T$_3xOhs<$NiKi8ZBMN$$EC5RnN8cr zXzP(hVS&xo6?WOwNM<+sc@Q79Z7dz{aV0)E`_D)Bi;iduXN;FU)mA4?0kS!2mrVVK zBW{BYW;eZK*+f&;$86?UfY$V3GZW^lPt9Vn9BF>$L{O7rNUK)X*20Iw;j5SluGpmbP??G|hrBHY)0_RBN@3Ku5Ae1X@8zj=XrR1zF)-um)|%W`2bWL z{kKPk*s-d{|F@k1ewo$mcUA@C6#!QmTKaP+%0VKd=XCiyn4{Mea2IUMY$O zwDC&vQgHlmSiD^G4?Ow7WtmT|A0qoNs;HYw=6__(2g#m~2YrX^#HR@T-Nc9U{1XaO zpJ+Vx8IZ-0l7`rqokHPA1wiBEgc7Sk5bP-YUk4NLWgc1dFM}X<`+PKEtY{b^y!q5g z5MUZ~Yxw%s$THC)UZ!+%oTlf*f=eCEkG3GJc-s;sRtXxx8ysCDPqpv2{2B0!qAlV& zdTy}g{Bf}W6+n@6i%Lwl*5ja^5D5sJ?ma=z?Nc-*qJTgURo!WVm=h7-4+3hwSfZ*> z{v5gGJ+eS={tIStkY%I-UVsOJRZbv?vV^Rl$*7zHe zCgX2HQ{KQ6H{SjyhjZBWEcvtZd7oChPPD4%RNGI#G0pMKux9pjD(>xdH<-PS(9hJu zmXE1R&T7{27O@H)II-YvQMHNp>47@-!sGyz65SeXtZnPW@lo6GBGG`-z`QbK5obb) z?d@U5keZ2_l+KyUD={8f^m~=NK~<-!?->)SmgmHynrVM0A*{Y$r<1Gd9UFmM1A7OE)uTDB?3oUvDR=t*BeGsVT5;Dl>lA1Cupl45u;*p z+ZG|N^L3jS1*2m5iHf>T5!h-FpJ$atkUQg(=Jv13Kl{Za8;wO1g#;H%N2A;z#v@CF zB=$g;ULo>RL{hdP)f=uET}?^7G@emd7!s}B)w2Y})$cg2Hmuxb|R@VPCFFy2qsw%e|tX zU0V&9nV?;5mFVwU8InxuwUX7DNHRl`>@V^AOVlst`*%D|uw`QLRFxxGV9pr|D5!zuKTUYqSeH4R@qFS{^X8x+J6_wQj7Yz9o#Tx>WfEAkFBHjAShyn!0T2rpu9iCP;HRj*BIdJs{T6SelD*v1lw`h!tYs zce)Td$0Lhgni|qisbxc#$6xz3*NnE}s@1?0EnUp?hSC0v=rDCPpq~NRucU@=EAJV_ zwI3s!22uY9h;$;#6`GJkWV^J}T8W{<=5PS`itc!KSL8}iKXmQpZ~9FKnX)ahPc?3K z&B1QR{pwk@-S@Q3X*DD*Deq zmQ5+vHdIaVVQJ;niQf$u?3)3GRMRAnmx#g#mtF#~fo4XZm5?QquHf*d zZ=1C}H3*02^(%%ene6!5MRrs307mJruHdR>MPVoK#*6TSOz)6IoOw9Qfzae`p#Vg3 z92{UT3cLrxp9b*qPOHK%X`JRrfCL za%Ozu9ELxXeDfi)SSq)daPH-Dfmkk=pD3-eWRiJ2td4{<`tSPMhgQFkxx@;WEz;dKqA1{6r%eSnpklkiJcS%*@F-?|bIy z^t{h`&NNxy!v&1my6&oQe@C||P@$V69p5I+E~9nEI2$*)yh&?k$xByPqo0mEBMCA- z<#0a3FH@`fDQ~26nv90HXI*#id81ad=5FA+)qSJUT@jv3+C8;af3r0J3i#}yu*ntg zte?1Su)Xa3>ig$ahK_EVJwVBEQ6`>sm0jZnAM{-ixO7}dgEv0O^I%UpE$|vy2C|k~ z(=XP?R(*YI-L+1Q&eN>(utZglT34*CceGvT>oqz(Ogum)LlwHfh}oSCMfGkHt+CHV z+-O*TC{aa{M6@Sq50Dq`arTfmq3vbx?ok8X>LQ7--ZjxX8aDr_%`+JfRNOVyYCC7c z9){{Jukkxf?vX~fv2EfXp7#1-t-swBpE4AiUGa_{b?t=zl-Xpv>;Jy>ajX6$C8vo^ zV_8IqB~$zopXMi%v6LXBxOC+PWdG*3xuW`jacZKu$EclsX>dhsz<2wC4W6aCDq~}S zvrf}ek7YqN8jJg4{9-D0wu?_MzZ2F{9H=%e#JE(-$Af;9ewqMe-*(yz6*^DxkCC~a zV(kp)He9cF^p5JrTw%{7iW1ar3=EKJ3jph-tIngFA$tI081@naj0I0j8p{$LGhQ;{ z_Y(9-bqPU(2SE`iNKa^r0J)JGWJ?4Al7EoSz~MhQD5e%DMUY}X0L8N~%><=k5rU>b z#zjCuEzCaTpctr$2KCag5}GCnxCa&huOw&<_LHH5YcOd zd2cM6`5=?hFG>xD7=O{TBsqGuQmmPPDG(*rOlhjWBSD%3yeFUp7)D1>&<7O62X=y> zD45QRp#xW?AjPByDuThUF6ag*7KX8a@)X>JO-Q{UZjhsD&P~E(1{49c5wI7c)qqU1~O0) z>l0WOkuj_=o)9vf#b#a*snfu~;EotREjlc@i*GngB+vRKfNg zrrPAg2P9VuBil-HsZjh=`u{_cYh#Hwf?-JRP7^u3k5{bv?7ZyJss}br)l=K)O^`j3 zllse=a?Ua1tWxa)sh-uyruO8DZFt$Oc6jqtLJqfgB@$HikwCMK;~B^v-iDVgQI*%xdI$?@BYk6Sr<;)@O? zm)(#g6y@85)P$COa!5Byr73PjUY38SDat>)#sE8d6gmFa+M8LBmFH*_>{3>I!IppE zs!ba9ioIaUkB0Q=CnwVjdE-m<$DfJ+Z^HI#WYcZr@}1dN?Y5NQQ@qPlRadaRs+Y}% ztTMkP61U|__&-^@XU8%cyq%nCKo5Mv&*QBE5cUOR(G&S8(*E3Vth{tLt*k_v#ooau z#gI}VSLSVs0uc5IWQX!u_KSVfaBFxs6^VH1F$uCed37R}s%cxQr>p>k{Q}vX5Y1Ml z!A}6Pw^7J!Qt%bcNDCpWP7(Nq8j+wjB!`))1gVT%NtwoaYVTeM896W+aLOvN*gh`OayKG7| zMKram&`K3f)8*|%(sr)yHIy7GZ!*KR)%Y1Xs-l{4P2G6uYaFU(OWPZWA|~M~s|FWo zQF7Q+J4K9?4Bu>^scL|CN?k&ie@7EaHAyF~;^Jbo&5+%2uSHZD!p9Lrrf6xAAd3=S zpUX?ZX(VWr9KO>u3BEN|G)YWM!W-VA1<39%$TB>KMbqbs6tZX(D$rQp(xf7lW^NSS z7)qokQ#>O<77dzv*Fz0Kb0G5czS1^q*H8aGy}s}*Ief7sZ1%^0b#YH;NizAb@i)D% zU(I_*Y!n%^u6W;0uY0W48Sio1A^Ik>`tw}e0xDU-pZAwuWLICX`^*jr*vS{oGCd3aUS`H?oQ6>r8T|I~`otKG_MbQcO>R{m3wNUXDhptUG<@M=) zx$-PoGnWkhe6CgPyiYfuI13jk6(GBRAd68@;Rc@RuC=x07}TUKFRd-66Yuy%us^o; zj?F+;6%YKT>vT@cd!6I220gF(LT~2oT0)x0zzehCk#V5c8=TT;w2$ru$L6973Co?@ z(O_S|(H~kj*xMGG+nw`mgY%Aoz;9z6`U~?lx_M*2=Z$6B(LWt*?dYp~3yT08t zcG2|Ukwt%>xcXBsUbxEcC&3HzZkb2dhSnzoi#wTM{PV3u$ z*Ub9ftkk{K|1|KTyZ!ork3I}dhqP4EF$nw z+PSp2d^Qa=z2N&4gL2pmWGUZ^y6|*ZJ2t3wg^N46g&)GM;E1*Hq2Ai@!09nM@8fi( zvH;mV3t1T=+sYUmIA?c1@0|AOVS$MCv9@z+!aN04UYo|UGGELm@JoD(KjPyA!N+p~&!q(6 z9410mMMdhHD>Y{vbt5N7eyA=#PbOchZ=EmdIFzVzH5pD-GiYYvR{^qn5we&}ufDW( zV8Ad48;!Fpf-wlxxFMnz4Q#QZDviCAVGKa-L;*y?#eAX)4{FmST_HhAT03z8A4-eD zJ$ML5Me!kA5lG;2P)t-4LMfwIo|J@oqDE2LptdpwlTd>vBw1D_Lx6v5MkN z!m0|q?B0Vc_D!31&}Oph)X0wF!`zCr;a!Go$;YP>hE6CI4f$JP_G|A!_CWuG%H!DO z|FC!dF->H70H62p#iX5ShR6`sM6_HgZRA&>qX-D4)LP^hQStSp*rHnAe?GK9S@Ph$<;9lJi~lbtFy! z=4vcdIc%i{PG@!Ac+q#vc4BrWf4Xm=8o@0fA4O|mL` zw#Dk?PE1&ehO>31QqJnJ^wQCeY{GQ+^vJZ?V=1?Fd29zc)-(Kv`_p~e(L3X#x2F1P z$_zE$j=1_dCi{xGt5aOX$mJ7LmIIa%SDVLjkr0sGP-F`hkWHIqt?f_7hH_^Owi&11 z?cjz?<*aq8Cx7~yhqX@XM+RBjhHc02m}@&{*}{p_UzORIjU!fbF^Slgqvj_F&oCR5*2 zwr$WhX38}6d%7K#9#TMdV@FxG-P7}Qrf{GydHQw&b+`Xf|5V#K(~y<5pP1;s%(@*j zX)n08yPW;}V~4%Z(PFH#^fw;Sw>$sd@y$d_UDs2a)x#chU$z<=_BX0*R~_8rs7E$= zs<&f+vrhIpEL|_m$NHUJw%g+tcAx%>Dv7AKWr2c0v`i|(2qmpnA{<9DoUD?P z3ZPcdQYnLbJE>7u;)DVbDUfuI(3LQ*k}m!&Aq}y6F@vnSpujsXC27F_M2V9NVDsJq z;P?LUD-j8)i~#-xiU?r5PrKz@CF&zL`9 zH{TEcdQ5&tM}NwP_~N;X;p^eA%VSXRufJUY8LcHCwY6FTq668FfUMq(_Yy)zc7@+W zEB80Y3bLAlf4_TMGU^&t4ZB89H$^kDn^VGs?63G%f~Me?cW<*?9TjEv4wbP`KvqC@ zQy|+q+Aypet{7_(kQI>K9LS=~iqkS}#rfT&fNZ#s_2-n^$cbP~A)7jEAFdg44XXrO zHeAR88B{3A6imiI0onDjWsPO7j%>k}U9(ri52OZYG;`yrA6bxUO3mJ%+fb*g+f4|_ zt{vI*(Su_R!z!16>{^K(@APMF8V8`$pW%6Kl%+DWRC`T_%lEdFBE&>mV$3i5%exDT zGP5xw+iXs!SBWehYyr6>*a;*-%9vn6$4^fz#;;fIFw2OC1OQjrJNW;R{g{GYLHM^NH!G~(yP7u zB?2Pl` z#7nTiICMs`v<&4etro13IPgsPM=QlnjDdRTO{Mi3W!H!-v+l^|gdf=_&%gWX`FGzw z{Ca?%OC>k&F#rhCfCj;{=mq(n3A}p2DutqY>>(R?{T3su5s(cTS%mIa0TC2kLJJG$ zLh{QB$gUT%hyWyD_}>I10fGEmc?-yXTr~dmEgGc31Y|b?S(tnNOoNtAFS~LuGyQxm zC6&t&E(bA>EVCT4@ruwTUO+a|qim{nPyLOAx-8?NQhintY^-lQbb7x8tMxkFlenV>h|5wLR8T;>Yz2Hq8o~oQW;cgkbrDBkp&QH z0u2L_B1rEjLeV5iPy`|%^d6!0v1OZYzWU)OKeC(5FgW?2|9a);X6k8K=Kk!K6UNW@ zOG4kZTr4On(i*QOI2-GATJtqRKsJ2HB1(~3NyCWxWiPyW`Qtxc6>LIek6!=TEBB64 zgI9G~re0^;7d*1t9b6Z<%l2F`{#kXdOLfC|ixiLz8?uNvR?q2mG9t3be*gB(rbHGs z^ZDCPV$`7f;`jl&)<2vgy1JyK^PEU~j!MsHZOuA#2MWlB4OuF;Oq43qR`@5o5khvy zOYO6nSIwKw$@N}f#_eQC0(yS>MR*M-5>lksfFfv;@>^O0vf)4$i0k8FE?ZJ`g^VDw zTOALde3g|Kg~+OtmP3{i;q#(N!bKwf;TQgy-}fG$+y5RHF#@vTK^CTRyK~J3xj{=s z6xq&v=jTy~?6%imCM|=kXa$KK@DGqhG)a3O1Q3v2hf%gzFJ%q;()J&SD6*b`Lg(2i zME2-kum5g2!$7kj-s409(KPbCLW#hOC8QVj!Qd;rM;6wo4wvsMJt74HvTL_x$?{Xx z^0dQdDTpYtozaQx$uF-TU4Hs?ffw(@5mHp~VY>Q^pHZSxjLu|9y)S8sA_;PFBo~5> z=Azouhg$ZMp*Vt3PAJ}DaR?4+6qCq8MVZdfU~VNN=`o-@y9=F1sAxp?r{$3?`0?eN zH!oimz}>keMYX#_hKJ3dnDIc;=yE_Ak?K3vicF*|!LgMbx^PEoBPtX0I|Ep=d{md-+$0Jo8 z@3-FtNyt`oIl3l0jm|D}y7y4R-Dae7nUwDKlbWR2fp%F4Oh-HvQB=DudDHOvT)hmD z4Md*0RID~LvcZ4Wxu;}ZhG+jiQl$3 zUt@*Qj=xk z73Vk>Wk7b_UI2C@2q1zGsYLUESe_7JFj1%wLy9ZmM?e-MA;B~O5@QHR!u%p@|7P(Y ztB-@S)MXEO{4)bR))xWBTsQ2S&H*Yd%w0I`xIo0ot4lqXtUbTQ1evXptGfusP#EK-By3D@v8W#40JkIyPSL4D{Gd*qHi+Xo z9Jh$WxI4CFUwvZduhcq;)fpd&Cy!@XP35>6*I80$4uqc`9EgT#?kzm+g+z|P#SeJ7 zh!AKZ@86(?W<_gO6Vd)j<=I;O(8mk}7$gu-ko^%7X&hZgZPpW>u1RZWM^_bWsXyA? zGHnEDA3zH(@l~WXQiB`cO!wD|!PO^0{!&9rOjK{WI@=(QZ~u|5$kTWr8uoL0l2_yF zm4Yt*<-fdq_W^O=**!KqHskx1XqWxnmD_LM`|Q$;@7mmS*M~pvQi2Z)j4Wu9Pz(;y zLc0Q}A%Kd|h+PTz(=p8PJG{B-i0lbuRkBN@2}G9T2clubX)~-|N0ywc@=czeYH;iq z?6R(VS3a*awT^fk*M_SGhlj>*6AH40M3$j8s+hcDF<9#&o9M&2uE*uaVu0MScY}|f z$np3U=At~Z0FXd$zicwHuf`aNiUENt=T6UlalO|uld#M7T{?N~ipYiqWCNUPbBC?qqeTD;UfM*6 zw@|Q5yj`D{q!_@yHgvgB-?;s(1SOK|C9+t}h|SkCa-1kGvKM5EY$zNSkxlkIq=&_* z00Vn_o2XuK9@=Mwh`-hKqP+~S)-oy8VwkSs`pzDk?O1x#a;eg>c;4#ET6Q9`M8lcZ z=2qu)QIUNhdt@~kkhL#8uAyWt#Z?dmckk6$6|{_MtqHjUsxVH=UzCYf7~k1ZsUPQ?0u0>4Q*{Dma}s zL~U=9T58e`L{=q=t9{O)p{gLnu+~6y=ipr4*h|aU}o(rhC5%iYzT_WW&(| z9L;9ZWfSR&X}NU2Waao(3L)OC zPOiwhLeUV9>|stPjqHZOU~lgm1O({KL{d1yNC*?R{C~)h5H%^TgdK(K{+LVF$R6P4 zC6Rrl^v0ozEtK9+kSz+b{Fe+up^1u+FM{%mtTBek71_AB%ZBFnNP53CIg3)@sQ4k? zej}!D1E>ZV%}k93FeHgFOn&OivW+~lOC^Zx7DYj}xFOyRqv|v5l~vBxPG9p_D|y-D zG4!8AIcFtoMu_%q%)W+f?pX=a$mX7vkQ1_j<;Og-@x!6GHtCUmR8q*g_LL-~b+Z5f zAOJ~3K~y8Mpu(oE^O3bRqb;7(dIy+r_Bh7I)FAcS=vS-LKbJy?clzLlB@vlpcK6bX zogdTCQmb*vM@op)YUvlkH+!KCu`euy0--qnH<0v5VRh*s>kUV><)|3oK4VMQiI$#P zhhwnE3hJsnwL>Fjkmg{a(|j(1*CnkBD=sF|BxKjEm|H+rY|gsn)ma9&^FkY9KP4a= z<@JMoX{-IEf-Gx!8V;1D#lQ?s7#h_k|G_p`O#`!zYBaQgT))GcrYmaiu84{Ol3ThW z3i8PETEXG)Z(OCT7`WnG#9Nlg0)#;T7yvQE0I{|N#G3MQ{LP0sGYBW5Ut zZ1w`(xlPinO;V680J2|}8M0XO>0wh()pR|Ut{iAAx$Ls)tym0rWL?QmQjq<@yX-%M z=z<)Pwe!e&x%ogeoKIvCHFm|;+^O@88lXhsc}vQOMW@a_DZTK#g`yIZ-U>xR1Bs!X zS$JMSHW^t?8_GAbDnRz@j<=!SdWp8x`492-hN7WB@+1Y>AFLS26j>x9oA+H-Jb#fG zf>L2c1#l(s$SS&QxghI)w!pC*?TzOf*`j*C6lBXsF?fmW+LyI7k>%nFvU%TSSA#0m z$}ZU<%L>S?A{ezhRB{;;QX9LLAE53#TX1?00RUD34kH7;|jJhe}wN<NB0bo)y~V!wbfG|QfD+GjWIv%J?xKpWVI`A6c5=P zvl3X#slV?CWY;_KmRDAS!P(JX=N~jpw6>3!9B_Peywzuuh;GHVj%-js))g}r4_TL6 z>tb_2mgbSAIE{9mb1BG{TvmeLchuU`Xl?JR9U8CdL_J3u9Ic~`>1~54N}Vn`T4Hd+ zU*ld~b*p#9ZdIt&v~kO;vkgkT&_H;3d6~kquCAEpk)7xIem2h?N_rvTk$wePxg&eh z-%{V!X4QL+o2~uuXn&2#)2+!hT`|ip`zWZg$AsEI#p#t0TsXDxY{`{%^_~Q>`|Whn zE-RVSAYWuzPFI%5st|wjA|OUGLVGI=VG#0H`AG^7uC8t%TNK5B{OY?u|20wCEeo>W z@`}Ooa~EF9iUG^(HszSESV$vR(UB$YJ^1L3>CNoA?EC`1%Pv2EY)|g*QEJH2|7Y*) zV%o^A06h0b_XT@KgQ!=j)kd`wV=N2*;c=il#5OTDIR3%rH(rba4nJX%KpJo*HlU(a zcT}y)L)YESLsKoPL?60Ro{Z#XA1pv1N*al%mEu%UrD*fAZ++-nA3Eb-jGf@b6R*6? z5%SORIcKh!Z?5mXK0a4OR&ZpKHANOdcQWz!De^>b`7V#_%l*SW772+gqGV7;Q8=mz zvKZSYBKuyDeOxji{>J9n=Er5^|ZJH|~G>T&?e#714TkvX1HtQ`h z;v%W|ND@NAjb(>oY`j6j8Hp+0LL&Qlt&o)~Q>b!e@9@YTC%!Hvi{FgHahvd0%W%j zd1UuEWQ$54Rz3Z~2#7(5mrK&9#_ zokNxz9>|4Uci0t`)N6myhXzy%b#;vYXR0^xkw)9l82KR>~pUCL&wc$jZKWMi1lIm>hC?%emt>coBrb4PAC>VQl9y4Q_m`3L z<-AK8^z?ah;Ox&+!JnQKa*0FsaDD4XvP=61PmhLd3i;)AgRJWGBCA<*!?Eo49_XHR zED(-pz}fhnV%glhQ!3?jN0g8E2Bh?p{nuHZ;C+I!OoLL1hZ28k{bcXM?d?N$>(QgX zZf}(so~;*T6=`JC)k98QFKb?C?RBqt1AXo_XzuiwM;C*D-v4&GYWeRDkE{TJDwOZ` z9uiC6RB*g+BY%4_{jWz49(`S6{6dQA2-(e3i7W<;ihfKDRd!O1fqtp9L170N{?+ZO z<<;{Y8@81E^X(eRtAFndFiVfWuE6rqXRmJm<>|Rg4_+OA>He8ILAEK*Z>qC#Dv`zb z(ghH4w-8~76TrEkGXur)@ZmtIl+zWI^dyHYolMZLv3%I@)*;{6Ante#40lt3H~A?& zu#!wBAYIZRRNcU!W`*a|$ZnicWXlO!nJJd**Jn!QCuNnn2UrH#Bz9DJV#t{am8IS* zlh=7<6DucsPd-bmOePb_$-R=0)lI)3f!C<;d=}YsDFzW)ex#I`6hN*Zj20wNg@OpC zvg0MLKbcI@^wLh5HdlizKIn6d^(kvncwQclU5IUL#@C}w@}D&!5n0Se7Yp~fTPo#r zN0lfasI2$9gnXknYGbg+Ieq;8(|gyYZ;7Bg*~yCt-y%kds&7z z+h8xS>}H&e$K$(kF~wVuZ@-Qnuv{gA@2`q?+3mK4_$ooBHNUp-JW)yE`4Ybpqc%;t z@I28H+Z@_pM`**#?z%9v6eQI(M`BuD;elPwetMTfFw zokV0sWZ!!F1xOr$V}<7t1e6SNcZG`d00NRkKn5wiV8p%LMd9Fx5u#xBHfxlwYR^4~ z$BZDAP7o216_FKUT^3<3jiFO1V|0pK_Y3U0mXRr{rBm73lf@CaB=%KI*4oqWAu^{7 zDAj1yD6{LJQ=KtF%pj(=Ks2T1OtX=U&A_QVr(VS@Y9JyjA}a{8Ks9SoyB(_G@ouYD zmRVTnTqH&&T%)%<)`%*7f{hfiOw~3W9UG@ZyN4 z+ikUukQt+Pw`;t^rFHAABC;Z~LVf#n(_taK%;4;zb2YQ z%cswd9>~isQ%9%a?)+7sfyx*K&8?i#TG+9$3`Jx`WQ9Q%5tyWlXpkXbgxOgW>PH%= zV3bsg2Ih@0BO_I4pc3S!R*krkQ6UKxlx9yNY6L`(QK^lL5q9O?9d49L8jWO7g+ydU zWCco#L21E`ZbHGQB5==99#7tg-=?BS)dkW&Ge2eoAS{XmP%e^)tZ;-dZM8wR;*d-& zk*%4C$QG_`?z+afOB)sz9J^3D{Uek2RWJk)r0q+ToG(DdA^Ek)qajhcKPl>Zvi%C5 zY*rK!OJ|!E@12uXb`^(2m#yO0KJZbndvG(GvW4TMPuof6_w)S}2Ifgq_=(G$dR2~sQb=KwTf zMx9C)Y{r!N6N6Acqf-OWY**-{M?zA@1`<<}!Tx-sL4%Y#FsTXR&Bj7V4b%iF*bfL} z;n+w+*)=5hQczdGhatG(ASp4DMxqe1A4rW9Wh9s$RiQx|T+u=zHIM{hHOL}=C>jmP z5k`IX2}NO4m(9F(g=8oU$QkbL+*coyIL<)8a72>~eBk|y>(+QF7NZdolm54smPbn%k_Ha18sjWX{kq z8`O?pbIvaN^!cj*?~61~c!S*wjt*-s=@g-kcF#ng(b~~D>&%6Ox;bO`#GtTemVBDqO7H^-jsxq8dl8uoVI$fsPv(iNJxsYH1YcZ<~3w@)J0yaT!&s>Kwpu20)2Xn0^o$VuY zmtAI$IWS7)yh*RxH{J?IJy)l+|7Y)Pe%nT_0M41sAgDM)P-s;I0oH+7P$Z$%#|Wk^ zrO+ypWy=yILmzb|FQUMf3jqneh_Uj<1!AMHouWXRq}Tx4#7=h;WDo73Xpo+A&0#Mt za_isGzoEkq%aYqoyNS^#>b!$259i~N{Au{+&G1dXN}N(wu4*8q$5Q=$%SiM}|*6wx1r6fm--RE5oyy-XWq&$fd8&!>nkuxUyAQ?Gpm$V<3g+XEu|~t^VdNfpA)j388RmAu$u^_uQ-2Y($UT z+enw zG`!XS4Z+Y-tKF{0YU`OAI7T*}X@|9I@+|xK#gpFe=9an-)?R$N-kMuZr_=G9yq7&i zWPv7V0;OGDn;RG=Xeb0jvM4PUj_pZN!5Y%mvc98Pafd`**F{=b#$B~&`Bl(-GehU2ZEh(D zIF->BN0!T*3HQtX50S;3w^NV?L$)yridg<}NA|)+AD2@Q!M@BRp~?9(V~*_E3ui8H zd22cAJh9G>f+}amy_aPdn#)+p*|A4<;`|S}jFFrldt}cDBIcIp_y}%{y)Ap@oR#C_ z{qYfmfBt`f?3muX92iFbwIfAHtFqK|J819?>Yh&}K%#r2Dj+SBY_|@&h-CI|7_g=32@x`^3N4Fo|{priyrNd3u%N}HQ zA8=$jvLiP9vM>Ze;ZiX0LGa?5PeK4&&_{I=Tzk0x{DwNFb^%BBeP$MUt^w!$TI41` zdxdT`N&xp5aAe;j8GK`$Bg>KH!ja|3a^c9n4q0?*;9Vu;#WWd+mvJPHX*eiCKQHnQ z0bwZ1ae2Ybo*PPZ1Ew5h?N>5TAM)x4L&;9`6;Gjlg99}IH}sX;ns*dcOL+7Y0TIn^3SYac`xBu_am1kbFSG5CK0h42XReyOGdv z^CCe+2Jj(K(xGblv0(sJ#40dsj#NRkEOs1;CaV%-!`>NB0xD+dz^}8Sq68Y2DX`ia z!0)pxd=46H@b4Ee5}^f=D5$ChfP|z5lGw0clBKLFBHR!p$pi*#MgkUA8xn39@F#`| zbyc>YB@tv{gRo)-wA3I35CcP~+vnt1wzldP5dA8GjB<%Up9t)8Ms{k0T_ZpMBoEIJJB!|}FpJB9on9gTc_bBfkR^GAW>VdDvK61Wr&$Y$?rJkx zn@U_=-l%B#z+7*6rc+*+4CN;l7PedMk7tYFc)priZ%$Whld!1^lTxg$&7!%5M4aU< zDfxRSXOW&$&%WU{0r(ygg#u^o@i&c`OTm1=e&lrL$?e0jB! zZcop|=v1ND$p^1lNFYTD1Q_W>!Ykc$F`OzxggcW)ByCnP5@3?0CKZ6_ayC>@YBSTR z%wjK|z8;#72A4I&k$vaL2JRim{rBmSh(R{0(vXnV-Cj0oha^CXg)xW zwtuFGvQ+V$03!LqbTSwWLaM5E-g{dCtk1(C-zIP(6CU|7-2jBPrD#Vq zwPTz*VNC)13V@pzI7#dgZa~4cDZLLb(jRa`4%!)QpQ-Kihsdkc4v;8G(D~2xrn<3K zffI1ij(iA^ZIeQ;griwMY@nUwG|B7$=%qSG?VyXEhxWK33qZpOLFgC;uIjFy>?%0L ziFd%UWl4aTvJ;KLQ5`~Ah5^D2gLjWCiSK>KefWOQ!0$6cK_{mG-d+K8x*Bqi!3ZNe zv3C$Sxo4FVrUhC8Fxd#izSHK|&K+@N-$!I`eZ1b3hlthYjBTnfNx>i&@zx~(qiYjxDsh~ zk}C-c0#`cgCTD{qJ3_XsMTYW&sD*bTG#R1OQfQ71yM1NK4Fits$aoC4i{#`$8X_c{ zFknI%IB_+B3^^Jc*^%+f(&c~Q@xO69q1R@7Qvt89Fn0h0pra+y2p%skfyiK=IcH&tU^ue?*!8swu75uVOz2KKu*^>XOk`l1 zZX9LDZ|}OxoR_t|X$SAGJBvW5=u9Zso4I>Uy1|v9JAna2;l#Qb0Nk%RZ~2P*4SF@0 z(47Mj+*ZA{Jr0GE4*<|#T*H(!Jx`vSI!G&!B-pSJM|Olf2Jv~%At1L>UA0WE%>I+T zt9xx+$KsYiFE>$8p@v}}0x>vF@Hmc5ln*YR(E1~BNJ2gcaiGa0DFj?MG%yYG(mc4_ z$5PnGg?-xnM^|z?Go8!K-PxIiI~M|daE@e2EGa6-u>i|Doz7CoqQ*tBi-jT# z3`lXrDrCeIv|0$sM38BONbwcXO5T2y7HAPD8<5V>q5!%%qP3$GF6TwV&6ZWW!biq{ zC{vUJkwA?uW{*V<%Ob!z3>Xqo)GaDqHuGRj!ZO5i>Jdc@eC!1bg37C8af!E3@n|Y7 z@<{?M2Upw#l|ZR7>BmG6nG9>cyoF9rJVN&8f$VAN{y7;;cGi*N?RCj5tS^~fJ8L0% zaoE*sdvCWYjm=YaQ@)+n8K8oWqSN`kL8S9kuq*b=S_c5p+5&HKYLM z!%=7DmFn7ESlx=lxpeQ3<3jIlGuSR01A9A(*BiGV+%>fQ?piP0_KQ9C*sZ^lov<7B zq?MGNY5S}AHa^^i>fSw@oosKX^NV0zb~}@>Pt|I5UtKi1e!X({s5Ufne=rxuYE*wO zo0ro2sdQ&sjm>(N23d7$+i|_nep*5BC3H+Ho?*tKp(Pe5Y$2cT{<;)(V}QYR4|=czEMFbGg})Y-PI*EX(nSP2Vn=<%gO5 z_r9~@JZdY;J$rl(~+Ukg_>JW)D?d87oNA0hiQ z1i7+O>X~MMJtNy)F9#jvv6k4ka3E)FyR`6@CBh!(v%G%LbfvDBnv1q|9j`U#Rx@{b z>&<#tnA&dxznqWDdfS^+D*;gpXa`kW9#E<0d+TMe$ZQ-aUT=r_sh+p3L%G(~%l5rj z?;4AZr)8I|vFqk%H9>DrE9#YH-1(b{tXi6>E2h63#(rNKbn{l#Gpk-sc&sVvbxrrW zi}6sKl;VRf1p_4rO8t7Imjb=$4O%n5rBA$_Q7$>_vJw(z=9m&-Cd<04_RCte?P^#+ zxf*bsOf$`<>6A(10sz&@!LkjvfRaaEDq=#onQbGg-V+hq0pcpg1i%`tkpxkM~fD-0xK|&H{ z6fDQv6Je$|2V^B=5;g{h_^k0u!f4N=O3OrtM zdxY$dxL;W#13y<;Pm3uqr^wb!V$7R6fxNB(=YWQP~EZ>Xr|Wfi2K_J!BTUn^(0LP z_Z5h+XO?ugHJ_%N#Oo=3#h6)fqrB{KJ5hkfWmoGd>f+3<=l8iFU*72nbCGU(hE-{q z1EsO1^Iy;rYe&fbKjN}aN;cAOD)*~h*nzii-Hj+vZ>wHi?WD@D4TVN@a5Y=lrZd;f z*V8+-sW?-8ZVj)l{4B#E)jH&6RT(Pk{Z?oer(ySDH4#|>sow<;+Y8s6Tl2R~=}5CV zLiR^?zp4}R(k{p}wzXa*2p84&ZLcv#c-bG+o05Aoc1E-=SGI$dsb0-;O|cdRv&wRA zFV?C*l)4@kVB3G=H1o4X>(*D^sYW06Drv_60uHua{lcsHyG~OarjADVfWKHeeoL}vMTw)~Scxo`!dk5YlR8-b&eJwo=oAxk&27hzI<9||WxeTa;r&-jMm zQv?<94FZ5E=L3S5RKAaBgwLEU9$rPlIrzfyR`3T$ZRzKlAAR-5iwG{H=P$}oLNNOf ziTeV3kYYr@5wd^DQwgs=fELJ0iJ1VKHs*){XOjrX0y7c_gdzk*c~`*fkpN0Ey8;x( zEf0f?Twv~%OjrS+P&6XSsuKcAGDB%}Mhg-KIY<>+MEqqQ^QR)G`cY9TCMPkE&S?IL zl?8+hCiv5YV_$*22?z{$gzR7P>{sP^^GLLBmzpm6=C#*?oP1cst|H|NJIPQLS{V;( zz#189@!-LEaH?6#8rOqz*v@L!#4_@Q*1CM58-|tgHtpdMGoNb}^}>A0ji&vjPL^GH z9bil}^<)|UhrO$5QCwNWse){-sgQvY?n*GAiR9#y)EF7klFpZgC~6a0K^;Fpux)9< zZrrqs%8x?)44ER`i-?sv;sk{IHAOJ~3K~$dSDHtcc zA+HZNp>v!C#|@)-CgYlj>Oyj&srkP75lMJO<~2{?Bs!6uJZhLDE7;tU1`}O zfPy5nSY>FQ7TMMVl&-0v24exzs4-^N_rpd9=UtGI?AR|RBY?4$!H%gfZ&j;!hU`b| z7`!TMOXgP4yBC5tdzv$Zq=ywxvrK8e>NVJ^|8=NYUb8PH{z0s-zL`R)SsHq?Nn_*d z4bwN8$$}rN&5ox={n=_wsN)m;VG*Qh+iVQFrRZKjdN9S zSo#dvk0qpeC6$0d0V;KUwqg|_pMushAhcMyQmH|WVp44*vjvS3l1iZQEv{PUXQ?CW z1EsWFK~pOY67kBZ$s4Cqkq1a&X&&(*B_m4ag}Tls&^cyBTq6d;j0%Mc%ZtaFwdVz4 zBbQqPEF@5z6=r;;0%xmFRRvcSbSygwDfuQ5e4fi@`U^d;3c!?CrIo$}EMV@K1HX`HGvc!uo9 zfh=m((JwW8PTPBRQYHLB1Tf(=WiPX$2?2m;m`kO=DK;yZvX4bf3xLi(rU8i|4-`>u zUBWD!qH$isp)4T#ABYHKGoaka4I`b;N-P=^les(q5T+whjX`(`vz!#1X2>9k=~Dog zeG3{05WotBc~W1UZ0{f`%E-m!BKIs7k>UA$pIkb~xrLY%d)XCY5}VT@;fMBb`Wr%4 zS-s!R?`c9Ts-yDyeTP^-iKUF^LBt|^ zhN;cB{Db4#Qgo+qgw)kr$lZB+-M6Fl#Y8+WvuDV@yUA5w|FSPzi0<5{d3)Ps9?-Rf zDXjSyOUW>rp~0(j3$%2#?M64#pxO64t(hKt#rS4#dy`hrGn&`Uhi<@TK*aLs>rEt0 zLg_FCQJC(PL!T%8Bs^Sud&822R_x?7`x zJ}VyGO8lcDOXXgR85U%v)s|-bF*Fm&7)Svy*wEEet76G!BvgBac8V#WA4{QCSy`+U z=zW_RmQo2Ar2Q1Sd|(U8j2{nc#+f2>hU`0OG4Y@1cX|p}B>VeC4woP#cX9wPQ4!)I zKt#$$*{u&DqK=c{1AGBkjh|ekkEKdV^2F>;@@hyb2 zaSh8?2x3U~r;w~KXQiAr2=S-;87C%j6FY(ul%O~(<~+d`SP4Z8ID~6I0z`pUn~U2N z_<|WJn>QQRVgWg%5EGJNX(eE?{RN3mH_H>MLNLUQpgQ9AazNmLEOqZfjRD@N|+7ii0>iQmUQ3Lr_Z)G0?%d0rWpz6V{u7XS#Aj- zaE9zh?8|EV+KY|clCQ6CXVZW7O|oYnZx}UM?X*Zsw;|OjTCviI>kZ|40{XDt{(OZ@Uzp~xMjbN8*PZmEHy?gCCN-#Hk zwA-Prq+pE?m6GV2Bs$+(n;#XhOw9{ZrofF z_YfHJ-mi6-v1tKcllm3Q4n5J@DeCsYm8JiLovHQEF`kTi-{qw8sBibG&85!|uNn3D z>{lOejvn^BVLB1>c=LGjB}Y)?4?W6?CsNP_q+<^Ft#Cu&=f=s88Y{I_)!$nHl1=x6 z*{JZJ^0^znG2|a{yfEpEd#jN-Fm_{FYCV6l@e5>sLB}AWUK|5*$F3XuWPE7#%=~>y zjKfOLN(}xK-HgNH(h`h#H)u)yR(~J{>+W9gW+&ejgAcPl!}o3jJ&t&D(lnc9&(-uQ zbfKq&o|gD(bAKHAm5v9<^`>7N`GPX+cKD9J^PXbKWQ^fyaijY-@0=dTHK9D7wv~>i z#PlQMcoh|=`0Je^xIW8|sa3#7@%VGCE;`d)xXOGO&0}#4oc6U~dRpx2g9QN#hlh$= zqAZ;qYZ$!pjX2REEDZ&-H`ygTvd^owq{EAq{pG^1;lH#mD&FTln`q|>yfl5UWUePb zZX{9^Ml~=f>p(-X6fBkUg4(;xH!YTkPKj{rY@ze%s9*+}zASnII8L8K9TcvC>_rSZ zTp6G?cqkzZFYm0Y>}05M|3LX)07Db#Rsdu%9_k&MA&y4b3Irsx)d^Jh2ml#dG){Kg z*Jh2(e1c=?OaD=jD|n--NQhdSl6E_mE^KA;z0_Ln2MzLAlGZ#xp4 zkM3R$zf9!yxA{Q!KmP!5_?LuLe$^fPE>nOc>hYHqzbyU@P4@P~`ON&XyrJzICgT00 zzZNQj@6v8}82npoV*Edfb^e=xe=P<0=M*FfjCdz7_@gp%0KaS>Tp;^X8@A=bdx8{d zWWM`F02|~M5ib)&8SuioGkWy>;r8`DhLpx<8o{d&hB6|aq z@P+b4y0zJrM2m_p>01}b{#@o2t${lhJ{!mo+KQCNUwHy z**W1BCI;10r_`ynJx12^*c-1nb!tf0^^v zfi>F)>+G)D@lcrV)q!Asp5D(3&cJ-yCP-h7be4;!m8V!rV0^SL>01}b{uD18$K+eT z;J!cQH%4bRh(1$suLz0b(vv1ku)l6&iTHtYqb!Gq*G4+e8g07gXa zZEuqF+}cbJ_c607E+uZ48DPzv@xIqEU3dPto>VT7y+HP73TeQ5*>>Ef(&80l=`g9{ zViCfWNg;zV(G{KIGImc<*1ez>%Pv)9K!w#POg90}fNl$5ut)=p!D*HZLoT8KO>!*g zR3L`mGvJ<0OZPZKv%`yw+y$~f3|T-Ozlq;b9T%dlP`xZTXQ!Zsg}Ll}UPXJQr76JE z5`L}$1ErTrurryIC$qquWX-D)TqQM4{7q!(BA0@)viERpbU!go|@c!#|b2oV38 zo_eJ^^L`o-zE-(@hYfu>c$GVR7jMC@&;8EdS6N>F6XUPX`4xEvzxe_e$o@@8u0I_E zh}j&B3@n7$nXV^tgA0qT(uk+M5(*A&CosDq#47?9!m25q4Rh^4GI%Ap6UcT(2^6qa_tBuUUuLA5sXfDnRyx&e)uuhMO>a zxZTxFW%Qs%<1H6=Z=Kf7pd9>>Yz*Lv#>9Q_n%l(lB~^0!ek(>Ya`dCTnKqBRc;dI0 zH~wR|J=phXwOFGK@Poee`r0){ER#7MS++1 zf-0#Ve_Aa{v+7{(O8)6)?LJCspyTw}<<eAxc3R1-cLkdN>K|>f`4E(eHzyq zE8QQAeV@iJkp0EC608>|^+t^~dBw$kcRSAAP*N9KJ^$1n51Y4oeccOOeK2Vx{=OwS zMMa~wba#GIELORhdwekcFljq=%hDB(cRGDgE5LbWYD6j*c=PJ2>P%&&R*VXUGcvZ` zL!v&{)T#0?QdWN?eMxlI&Xke_bLR8ikKIqTy_fcFaZug&Le&QKVmUXG# zlav!%bv>o^Y-g`~k;?)-YFn)>Yr10{bbxd7-XdO7?d)r5%}@2A#Ny;=+8cP1G!HM3 z{kv?~02v)7b!nDq{TLV5=Cvq2%2NtAZQeY zcIcb-!eK9mfxXG$4$0E(~O0;Y5GRT zVklA_IZ9u^)X_24>!wwga)M(>#I&p{4G5HwgTPsQn{UD}JlV!(=iLtt1O34k07FoQW3 zkFvOLB?Q?7vj3lU#q*C~mzzC1zdhN#g46YThPiEMp9>gdJdL@=!OE?NzHLkEo7%$= z0QrlyH^*V`RIjKNR#`8##c4{Ce$8LB-Botc5tbz}fmQ<9w}h;@%l&wO*inP8w%O}< z-NR&DZrjC9f4vO^V08?V$~d>q?u$0N#{;Puiik-MQs3Hxu0N|}hh_2D{dKqUY|ruR z)!N&y^6lc)+({stK=v(*TpK;}f?376H@VPPy8dFOln^+{DJ=W-0+Qr3w0`1_oDDW8*{#B(S0o=chQ6U&PpW1zqgvBe`gb-i`sGkzuwy=OobgMOw~+y8Dq+Sn|~_&<0wlR3}-Hh6E&L zNQGIm zYSB`WTKX4ORn?Z#WK&>L96gDEEgn{fBK5>2K?cfU)*^e!00LfmLE*-Y{mBsTG)0Sz z&kGn(bydB{D5HyLq5?$fcMAk8h~&;d0@?RZi+L8FPdnwTe@LHf!E+%4M|~a{t$9HY znDfi)NHBfrD}oaHJcNw7%F3T7@D7I`rTSCkUC4VwY1DIoD>_DTYmR$yodOnm%r{2{ zVCdunJL@@evikM@i(JazttT0|j>LC9Wxd9i1y5zy)X(9gURJzWdjKS{~c?YZD{fpGUnyt|HQxKy;8hjxXT+>e1G^m8mNv zkbU=%U7DBwqEKpmI(=={*7;sLJ_W8TR=H#LydeLnuAptDST1?pWBK#wai-KajjyBW zt^YXD>sQ-e-tGMow%hrdH`7YRzHM+N6&cZBri5_WtC(L$-eNedL6}~3+`*zaXlu4M zUG$yx_@K3V^@e*DoUGM0-*MEHUS4>&U1>Ky?XT(?sciV=fxJ?@wI7VN&H|QFySr*f zOEW-eQv*%~BEE2EBW0$Xn#v2vtd#dt+rHl|w8H zWb#b5Wb)=oo|r+?EHZL1iDln8lS|FMkllzoVF7x|*=gE>&Vq>G$z_pl&<0xC+XXJW zs6sstW9dZn^zg*3iOoXe_F539{OEGZv*99OBPvN4Tg}pj+<41Y=NiJZ1HoC)~kS|;K_6A>+ugPBDUjWaa zh3CaJ{Ic8j{OR~3UP{k2u|Im7*UZnStn}yXNB?4>r| z@#wSEd#u$;9#{gz^U7FE@s2IIIcnS;sUjt6!zlJsqDKnN69#AcHnmsaW7}~KN{QxC z0@>eRhB|E8+Sy%evk_h!!;LN77QkssSn|!0m*@-b| z0@>dU*-iByFAU?vRZY2D)bGm(h%2w~un2C8cZOq!&Rw~9yYD@;DXA+YbE>;GwrjU? z%dc+sk0g-f@6G8lJXA_)Vg9hNE4E>Wcim|?vwG^GqS+pYptY;oC!;s;Y**i9l*fAsQ-$WbL+ zKDHk$$V00#-|6B(HD+!O*}a_*lQXy?+z=8 zyNTP9n*J{AANiE*N-ayi_D8V05M^^p!Xt3nJzrVYH5wvj)x3x>^gn zV@9zD-SrX5^_n2kweeNP&W33n8)vjKE{h=yyA6S5W!|Q7^&-n&Ap17R5~2B1z!t!B zJqnR*V8}8BQCT7dBK0e8cu~L3dRnf10f>@fivSfIl#nU~idG`;j!|GtB03P1H46}> z2f(pHYs+s49C6_yl8?M&t#%3bxZG1ac3_8R@A1;cV>b>&H==(gx-KftweBp8U#Q4CC;7#09hVGmxuYG3xe@>g2vj5C%--@%|8cvHmxj;_-iSx>!J$`9D&35vM zTp;`2EC$~ECB|T%thfkH)eq$ql!%tkK$F8$j4R=G8Sa&XSG6%P#>(Y%?N#Y4Tf=ZZ z*D;b_;am>fUj$C@Ah2QilVVMX66RUNP~vd`vT7|N(i#w03=);R15Yuy5aw7TQyW%N z$X%0iWA!-xbPYMY5#be{;I8qgM#&v82Fx{H!s~my+k&+U$(8fD7$!%v;vdn^4Nv6qzxFfbpsP~ZH;%ESx7xiY z#!=a=rNss$uD6CRxJsQVHo>YU@QYeA*!%b0Tr^J_!Scu^3X;+>@$qUMbP0^!X^!0f z9E1e)?o}xe)P)mRk>Sjj=^>auv_T09PpqR25AiAy%qMQxWDH3^NbmyL_h#f8Jf4%Y zs?%Xw-T`VcmCgdWsXa+4D#uNk*?elOf}uY6XlgfirW+-n!%qCrX!i&oFiRjxE!R?- zFz&V8dn)FfERLgC?dj1Pt6zh}-Wf+{d^d^HZR&1qzs~FxOK3KCQ-_uQXgCXNHXJ=n z#lEVj9|g@0cCEf!m#}!}Ix#Z}Y4taQ%N(hx8?3*XTk=q~OaroI!_l@rg@F_?;gGs> zlXQL0dPurNX`^XaFmGPJbsru|-~ z&MA^&CDL%4`rSzA(4%TMmfdMQNbn0}-_Q8inOdVHK}Z1iF2GkW`GAc$;BRO@m_b~Vzh;TjeV867H; z*;>yv_sSarvbyzYL8XWL@Hp_)vh&QkD_m^|j(Hy`eIc7yS4`^c z$F2a}?!*v7@wiwLW_jn7k|Qi(p-YzViX=7qg2#%Po=XEni|b5T|Bjasv#op>$YBEm zc2+&AE4eGTdx{gbSaC4h-f+WtdCjh0tkgy200x01HCDNeUaU@cR@{SZlmskq}W(AxQa&vtS z%b!7I93;8&$yfMFnD0P>jydE-vkz}C=f#MB-(rm_^4MxG+f`tK1 zOafHDj=)G}*nu!@ZMZ1c)o>oM+n}m*6hxsAMKTx$2t=lbDaB`^kln3dfIxE+xH3l7 z!SlWwF5I9d)FHpUrn$TiL>WP+HK6YSr4C;p`>r4h{$c+&!tqdvMEF)U<+Um6g?{lT zd(&U7tEgU&@*ls&=loUAKV9lKL)Pml-n(u0;L+Ux03ZNKL_t*G0@<^XYx1uj>lnNk zy#5>o_)nJB7YG3GJp{gTfs}BF6}GHb1D@ynHrOqOycPJ%v*+Ho-xEAtlFKiUJsY`L z{#D2W>0o?dQny%?EC~BwFjL@kLLu= zZ|9z|&lRC%GPoa(gMl13Oldsb35l0k^@)V*CK!=}MSCyJlOb&ldU4o$@SKTfX!?@^ z059pZwJIIR&@X~xpzw$2fAPdY$Ja_hc`t|VGaC>F$eQJwS_--AxHEKVoiVjRf}wZglxsFskH-wkJPZtE9SH^xWOF zJ@fa8u?l8wPt$7trf*75Yp2}|9;A_(NRD9LPX#NSZAygZ)>rH8#-LbfgXBpfH0(&S z14%qAt1)9utf#;`I5!r1Df)SVY#|uPUGkMa^vo-t|HIxDwKl44VfTjp(zwOK2yhb0P=QT&?(zTV`$Y5TF^WCs&o~wW978Uo<0N5B@mVXnUj`?pg+PMA0R4YKGIvLB0;K;u_rwPMH) z59*1-X76ASKhuz>@}@+PgFqD3*dd~Vz~Ro-Y;hJ>eT+(#m_t;Bq=^NzcaBUE5HDe7)lbqvI!ITJZFL0m|2A;3d|+7WZ&nFJ%| zQT`hOPKSlx>@tUv%j9l=Wy2Xbh3p68epO!<+VcD=F)U8CZu-xV!bVkrwk+$hDhsaU zEE#`BbxmO^8hz}~J{t{TgWG#!vnm@6tt;qpvhDuW z<@7jJE)%+XJe8tY0#JALWD?fr#oUuNu91960k7BG zMak`0y`tlm{$(vaQuPIWxR18SZoB4B{hno4Ye9Xf_R!U|^L0~Q`h$k%dn@+S+#UqJ z%Aul7IO}t@OTFh;4^I%$y*p+*Et7efO~dG_*92U*XAbt&anE#cb4c$7TMqJTdT}`# zxX)kLwc&6%A9$BlyE<^M%7cqj$bKwbcHeygxww{gvpUG`W9QM$H-Bs^lDwzRQ=l53 z=bWG^tF6|4ZhNr7Uo1*HPp?u9 z&x;OHYi%x7B;uamzPj%Ev-W0oxwe-5iA^2z2?EZzgUtv@LMb)Hkjdgn5U6CL zHyt5@Vn~PPL;+##OpqNx!lB4V^a_K7rxS`-Qb`7(SrTD0b!0&~=jjy{)VP>&M{qXE zUjA?t=i+i^WW)-OB63s~;Y4Iw1ha^0u~JDdkSO9f6cr_0_RWsKm(13PG9{i7dD@ZX zi^xn@!h_C9rjwN7jtovA`(Z*BOGo@JX(zHogkJkviE@!8H<)0vFz4N305F1CqT>)% zHe#C{0FbSnNFc>5q=FC=d^USOlY&K3^G9^&^Bk_IcFAms#5^o)anmFXW{DF5QDh!4 zK^KZ=$WB1;;-T=1h%GD-uNMzUAR=`N!sc%Ukd`O;>Bv2y zLlQW`{&ilSi1^KJk!60OgNi3(;VJ$4Kp`8|{}R1b^aezsUjaz}IYxp8QvZY0`lnYm z@apa_-f{k4z`%b~hOP56xJf=xu{kG}h#63?5}vs>C(cnySSV=%cu^p*m@P^VA&X07 zG0n{p$Xj?9YcDJ=EB?%e(wL3I{7$buK~OH8fC|?Toy0g!A^YFbum1L3jRD|w6f>sH zD`$+Nm*f~yK#?hiITMsKmoZ!dCdk>YvLphrwk^wi_69fFh!-+L!4|C*RCLr7frMap z%26Pe6ner-3^|Q;+uQB^UGs6$eq<1+T=m+$rQPk0=F(z(?r@`Z z?0X5utFQ5JSoa63>s#$MXzf}zkh)XdqwVz?9B8iRQ`KJdT+41QDEX^wcjm(fb==C8 ziXHEp?C+v`Bk2#e!_Sc^hX1#Z86xL(<_d%(b`nGGG*SdokIM#J=eNcz@ z=~EI8vduxVyI$5T|I@J>RK937Ob0XmSn>O&Xr&e8YMe1hAclgWQR27Ly4ju zBq^vTZ9uTGC~U=>df~p_^nQl<74r)xE47`r^vuBA?U|HPVv@Cz!ejET=Y8JibteA2 zYtATl*qmsq5@JT5hUcDImyT9&|Deu$iI)ui2<*MOvNyPFjLaXchO;n~T9<e z`odNcfux@VPhM{w?Kfj=1qZ>)Ti@o8{WxJ;s=Td@0a6j_3ag*IaW!I^@~H@c(vc&{ z6m>xjsj)!Q6>&Ff&Xi%PznqE=>sP1_?}*Lo4%jJCQ;rJsPT_-=Y|GOYtpGDvrKfka zrta6)Fg>Bw2fYX=*c(S~mDm0HFpG5A&!RY;ZQ4JAD4>E?uH4EY`+@QN>KeVT_yZ8K z#ATag@QGDXCJR6q1C~Q2Oh5H~BiVh$L@ZGVkXl+6U>4R3kQA?iYzD;PbQoD(WhJrz z6zY&I$u7|iU>1~R!XRbUtt_T4y~^oKt03r~IhLNmT)CA)_5&Na3jg1ej_Cb${yoUD zqc43r-#*&k3Sv=i`dMc^8yx{BofHxRrU)m6||&D2FVFLJwG${ zikwM3H4T57>nby#CDa%3F~~?QaP?Aldm&~CZU3s{#;b0%msXzivo4abYi~%nm#qsu zM!K8Bi%^jeZHRrT)xGS6ms@}Sxym8?6EgPkaNXH}^Z|-ab{#8q(mgi& zs5A$s62$ll)2KK&ac1N%aI@;Ai!M_lW`ihwm-{k@N%?KX_7Mf#F&lO$`iu*GN&+Zd zw$+LGENP0!(wr}(fd`8q1_(nM%T-J&XaE9?L>OA=BoUPc9Vs$r$;wS*jP%U(Ggk=6 z_l1;6)HFAFU#o;dYIx!uDe~3O90Cg;VvrD35 z58C3Y{XNtUde~Krg*#rSNRMu7@r}Y;-st|k=9WYLdnfUV+DPhmg<8HRRIGx4+LbBrj6|&`L z$TrHQNBGlFGmVH?yVQ#B9KcK3^WF z1!J|l-BsKe>*qD9P@p^gwpRkd)+b1~*KGWw8Qe^k{l#&jjCz$N zR<~NO;crED&l_XEAE5!-`;D*cW>Oi4!+ucwK59?y8hRI33X8G0Ua**kzd{1p{%;0v z_{Q=6gy?Bc{kmr$DN!q_!Z1`hnB3#BXc%GRYpLEf+^wj#7n5oZ*`GErXg&u9p|ELh zPu9Ux_3WjIEVH7jvxVN8l`NAP4WotMHau%^UE@bz{eh>b5nr|s(D zL9Y>A+O4r4Gdwy(R?}UYTcJOsKZ0%}y z1!t@D)TT|LWjkEVRw5(z{F$yuoMlyqMigtXQ}{My;uV+19&=1VCXVHsj_$St(kZ;v zZL?#blZPvR)6-oY!=!^f!`9uMBl4OGZ_2tG_SI<)*`KlYtN+U2=qfX`CNivxwHzd& zC+SfK=yWqZgh`bNMkrkmG0an2PylekATdF`TBgqem^7~=0xzPTN<&<_kp3aEDpI;a zBw=EaOXE;7ae5jTs!19M(`+Gqs;3ik(vHh6ln#Sgoa;(OBB{#yE0C^vnRbj3IkQKk zVpG!4^m5l(OiYLjq6n*+S@#BV1EfSaoq_Oao>WBKOk}fvi_T-&pAfQiW^4V9Zo2x2 zdx9TOR!>yIld=zjKSKa~yF`CmMN1ssU(bK_LK8gi_|STgTrk`J!j-+J0GZ2wzvOelQSlS)+lcM#%q}rG1mYcy;K_VxFeyT-23A_D#a} z9U@50D+?I%9>tlHZ2GPx*)QU@YEtkQ0!Wq^xWXiJl*5^YE9TN+oM16%%0wm1OZ9W6 zb>YbSn#08NfPLCTTzUZ1E7@K;^Oge~C&8@lmVI(9h)U!hND2*=nxKp}tbdXZ!+hyr1MR*f9{RMi9;7UPqg?xoF^;`aT5?F`#fB}n?? zU$5}^u6i?O`ayX-ldZCIce30ZvN>d5F$V9&hifPNelI-WNf^ZEmAWs}IJmpMIqJhL zy{P*Q4zlg}aB(ygl|yVZzH@GMYaqs&VYN2P+VAnFSUXRW&7;H8rH7T%(}q^eBGm0l z168volk>@8R9Ca@;Bh7a;DeQgP#a;I(5{zgwzH#bEN}Z4TL2 zylmTN-^2yWf_K}84>M~dTAwA|Hff|Dg6^ojKJec}e%+*z*FE$foaveugwy@)X{7PT z`aB#P{pL6QbW|P;L9J~xm+7$A6}~&L6s_sjtwZfW*A?4RPrO_l4Fl!cbSs0=&QPP? zm*JunFQ*M$aZUcgwRWrPO?!RT4!y?hOf~ahHizts#^7%(cq{UQbqbj^T&w-UCk2== z1;Q)v36+3ptsplMUx##Yv1gkF)U1g?-K^0(E$+AiLr*K8e8QxFOX)3W}_-u1pFuB_qAzs& zwMb*h!L&DLng=BI9hFlMMI{e*iExmwV>)?t8ml*9Zl`;E+cok)}!n9 zdN;bi%gA59EUI&B&@(S~C)X`}`e9Qw9mkm`z1vbc`Y?}*Gx_9kaa{);t={Z7r`1(B zzjDvd=abJ#KxO3kD|~s^x6(#)XkQm6pW{_E?%4I_Nq5y~Zh8-Tu&Oz;`OW2WWy)@0 zz8XyG^X{pAT{vqd)<8z`m*#-RHaZWQd+SZ=wej`x!YsNa0G0Y>W!3Pyok{(qdD2=N z=gzcP++NSR9hXcY+4}MOp02Ks*7d>7sstow=CoF2+>_}_o0z)#deQ>2c^NtzZ#Zc| zd3v{V=a1wnu1R{&hNE9kNN3tyIZbzWm)0I^=l;YwQvg)&TlM;hGfr+-*5s;pc3#X= z_AQqZ8t!4SRQ5)aexqzAqni#JhDy_I)ST=ly+QxOv{Gz7cDv2lW;?tM-5&3fSR)-S z$4%WSUU_Ei;^_z}kd0+e9 zg?sKetL|drL|t)mINW#*=X_Ebx^_p-V7R`q zhK}~2JE`L=3zs|haeka6^|SbXBqK;=#ZYz`lvfL9bITE`qDYiQ}#{Avfm|xmqBM`u{Z=@=2iGffUY|5KBZj`McHaD6j zFCL@OiN1+c>(iG3ny2rhoo?uOQ_``TMt0$Kn>d2;g33XXSM z+zPc6PrpW1!l(K|_pLz3y8YQtI$Agq0x28^i?px}%6$vB5+#jwZ0ttmR8KTGJ=b@; zQmR)S$;L*t5_hX{qo9O~bz}_5K-M>RJ_q9I&h9RBtXLLFV5JJHJCJ~5mwvb1)K)c~ zJmj&Iq~yX2cSCNyyWw=boZ9`d)t}n5HO01J2PlF#CihU%k4xU1vn&G zPh?WyZ8F6ITguTPw?nQ?S;VZBy7DnqCXs$O2Eft!OSo6oqZJY`M-1K$myQ3s<@@%l zOVGdUA4Pgz%Dp|e{QO=t_=jJwOCAsQ48IRy{ra=^UyaxMHze$Pr|h4P7+ALSGGoi|AFv!`^x<1Z@7OXxfj%P(04)W* zN^;cq#uDu(%z-_9l zWA9c0p#0TrRBGK@yVh8&yZyU)u0@om>>Gky{ngQnlpU7Rdsn%VX0=*V=}((6@VyJ~ z=Bru170=X#CnHX7^4-DAK0RulFF${5uJV-4Q}!)c39roU;fCjXf#0k2$JVHzSwR_z z=D3oYw&&UF0q<&ngDI~$gUq!DuAWNz`8Kb#%2W0YxnHj)-L!a$xy1RBPpPW3vV`nP zbc2$}=!IUtlLqpXeXErHkzt#^@|6Am?qvu6_P^t#P^Pu2{$XHBE2Ex4 z0q~hK3nIG+LW!30!SBp$@QoRcqL4@eHB+HQLAVL-zA>;t=OWP#?p$K-O2FTE& zMXR?Zb`t56g~_|f#vJ4)j4?So*~rL)#*)KG$}Pb@c1vT)r($uJ$^T*R>RJ>>)^Ji# zH)ASfpoMcKm?b7nPD~<+Nf^>%C-EaBqG`kkiKq>NI-+1Vebas6axUjI>|fbmcv8`x zkKHq8Ic(qbjNTZkUMt%DSXRCDJkOiOVx|@D$fdp6Go$mgj=xg)ybBb0F=uO$d|1{i zWFC-xpvdL~Nf>qMJk|UQuODmI7C}A;JVW-)WDJ7&`c%VKv-rR-wPfUV0Rh@0nvmPl zpa)mkwdKTn#^CO_w-S_J^L(LL~Sr<+3-BC8@T32!X) z`|!HxtVYWQrOb2jBXGtyvXg}jEoCumjh$$bPPUrEPktA~Sty%>hsVQaw3g9$>uI4lcYzfR+{La{ z)JvAAIa@8^wcnfftI5D=xZz=G!df;hs@7K7h@-ikx}i4&p_<0EqAra?d!v=m(XQj8 z#_M;S?}iU^fh;CV&6lTjv6LH=SLAAKz=PsQqX%M58}Q%^*|&1~)p}xH7Pg&>#iyaO zl6)~ALigAxy;FMqSo-Mk#AdLtMrPwFoev+=O7ijWY3j{_N3EJ%ZF*Dt?t|9NAl|p^ zQDBA>-4x(>9S+zDX!SznVd~B!#{sCc?8S|FFzAY7(V365ZPyYze$tAOwHX z&`VMkt_kw8Npnq-et#63un-g|z-6;ic1Z|j#34{d>jD(YTp8e4fw+X1W!+QtY(gVA zY^crY+18AM;D*3)VhFR84@UAi`gYjk%%HMk+|fD_t`C)G|0w z6H-l%ZsJkbH)Ix8)?oor;Jtx$GGzg)aWFpu5I1j@DDe|AxyoPv9_BS*A^F94i##!6 zuJcRWaeWPsnm_zcKE)ozu^Bv1N?GE_ra8$KbJgQ#8EtM;2#++I>!Wt?DC8wiFQdp~ z0H$Oy=w+}h_8Oi>$osJxWBLmK01k~wL_t)cJ#M1F>4wKQjYp)8MH%v{kXY;ca^sVF z5)v;4be})w3;X8`**5@L{qXPqWdr#CoDo3qCnDjuGuMBwG5a^M^0V`Ceoj>a@du#c zq8y0Cglf>LFi3|dku}U)QC@`mNYKWJ#vE`Gw-Qr^wXuyWL!#q|5UsPA6AhX{?aQ<0 z%Neq-qy0+0!7OO+3R0CaSiTu`Yvd+d_`%C4`?VzxPwTkZj_J?=QdMPn+b?H*Ev%kt z$Lm%X>?bU~q&r5QHUsrJ->w5?Q80#4Ox63$8DeM1zDCC2v%>bYBU_GwhmA3dYsN@O zKF+3qK%>nR=t?8-oX`*Ln)vkTzWQqr_$1Kj?NbuSx1s2C^!v_pFuAK~4N=9Jd42a= zC)syaO5Yo}^WoY$lV{G5eVtkMS^wI6g=tXIsykh3T58%eJ&Z{L9Fhvqr8IE0ntbTS zjl*@HNiVKmH*PO$gf@u}jxrh^}I?=8~91oPJTp@YzPT?btYnu#9 zVCRd=GAn_knJ`;0)Qn4O!HV(Vqz>5P{s)2ydmx&;7Zh5O#sb z7Dl+%B1AZaMCPVK*+b2fPvGbW^g=qp&PR}H)7d61I%~wvkbMQnR_f@FDWlKHsP7=` zd$lybTiyfa9#;f7Ck)PzeVv8Dm(wqhmy3;PGS6udG(0*8=E?n+dL1OW&OJGgT{z(n zPX`Lv;Pd(=_V~iwZ-6?oZeTVp$W#8gT^3H2p_8E-{4yAMGVMHZ72$Ebulx$nj~^Pc z5EU8nueM(o2kErNWbC^`Wb0$?f}=W zNvo(y6Kjf80a3;zTLD7#hGL;mKtgn0Rr~~yMX=-B#OZYF`;g_oFu8hceREOq)YW75 zbI$RkP|IfBqT4ZMyPjY17exYTbH|!{+l@Q$bV&Mx>8#h@9-LUTR_&Qv><@!1))JQ% zg_v7^l=P*jnNN{=MJx6cap}2RkpbB)4*Nz4ALg!c>x6;phFop4i) zZpJoJDGfW@_^h7z@ga+<_gizm67|1Gav2-qg)ciIxH+tc#=`_xfF+A!P~wF`ttiiA zc{1&rC0)Pm%X@kJ=x^d%h5=gddG9Hc55d0rFc{vJ=#ZJrYO*6cR@0W&-+J5RbQiwe@i;n0nEI>B>w&Jg}erhbuy;Uh)jaS`K{J|1hNf^i% z*JphG@Q^K;7HbTR`H^q`eT8kbK22aqii!t+*d4Ilyk-{xx}2_5t3heuELL6aKkS`R zZyL)L$9F~@T`BC)wVIWhD_yQYUD(xjmj!tYNFiJTcozf+u-4!R=t3lwvIRoqDxmGZV~NLp5|mIEtdruJ8b)mUGRQ=}sf`#X(xNI*)CosHYg zSifsTEVGyZNKDW2UBfO(0@C6IBeo3$m@2l?=~yAH>D(B-vR%y*3# zlLlliSN5p9uZ#=uc28e-XDJLN5dB`z}P@}A_-B5{TcOyNy3_0zfRkt#JUZIGs}_vILIRGv=4Jj z5&WMd*VaMcJcLrA8BG?q{$gjBRwHL+HW7l>fT<;$n?!)kdN;&L;mCfRyeuLl2wwN+ zUtjsK9-BR#w=(;^Y`PcQ?)LHkfjK>O%0-VNJI<6ivK-lucVYWBzPb8fu#8FPmvBRC zWwNkm>6L0Z;Evj1geG13s9>LlQKX!)dD$yR_7m0^r2j^KpyKUob^G})HuMv%>kSzC z6E=_y(Nzu#NA}Yp3j+D82}GCv&T~&3*-weAl={cILz=v)^F{=oohQJ#qs2Lg3yImc z<%)05Ac*h79NCZ9Nb{W>q~HIdWldxPWP)X2#N=QA0}NHB)E3-f^N(cgZ3SfsQU?hT z8Tb>Ir9cdZSt=|%p*~23{;VVciB4!epU9t_#D*Qo9Ab{_2kiZt)gTaOhf2!WXjsv* zIn6C=wi9+&HF-O`lk>DjWUC!r=o{IrlD5pWXf-s`g#wPwyJfu86ctzLx~^Kx60{C99NdmU;w)>zj>cCWvrk zVILhB1GChA% fvL6iDyPd2A@`tmnh3+*T#FND*Ij54G945RYvoJ6pC(E_crd2wg zwQBoz;XyK2-3-f~0R_^pq|0M)oD~l{sYOR0ta9+JII|&kmMAt=;mZ0Db6FM#A*+7L6L(Rto*A^T>5qHdGPz7Qb z2OJ!p05y*U5VYy4s0oS@3z&%h7z+nQ)(jqt1eyvEK+IFLC{O`#f_#_d$X?^ZR*V?Q zSuFg%3tJeo{QVDM%=)>Qwjk@9rN4oPkoaA+Y#1#-fGr7Y2XK}ipq>nO1enAT{d@p; z*0crjdIZDz2~2a4XT~_P*C~tX9QMlb#ay}!*)xV7{ryjmUSE@;3pZxyjZok_tLKxm z0G%lgGEZ=p`SLpt-_(MkEAqV;K;}$yWa*c_UieMuZnSb4vUKnB8?t`&@BjXm=@r5W zl7e8p$xhe^P`E*0P?`v5s{n;HHp(M_2~+2SL5SD4ViBZm00IQ{mtX>!sxZ}s~TMI&rA>jGR+RA)XCe(ZyU1ZLP)^oWynhI zG`P`PBYQX1kwB|gv*sl%z*Jq!Wp)tO>!a-BQ8H)DH?e>_^L9$NX9mkcBZDvDCBi5>~sTEG-c6DCybDET%UJ|7L| z2Z@Ot4#Y@QC00%WEhONCs)%YVja5_FG@z++W^Wg=v%P&m@*d0YAdAGzP+gRWkL=G9 z-$wAANKWWinj<^m{_R$a!-F3S!h0a8aXP+KC%yH z830fvs}4P4Y@iCtw27@+Q|(EwTq`R>8lRy_Mbh>CNWz=ub8%g8!b9Uh(t&~;kA~{i zLi4C;wwiroNgoOFJyba;^>c}#JFINcj|B=9M#=c1^0+b|7raW1l|y2CdKj2`dI}yT zJICYALe71fhr~K6MW3d225NB;i5q4m2P{tIZAx-Uv&B|32QJYufY^>W#`<9Jl}3qG zx>>hW1uG3L0|h%YydCQ$h zTUn{-QM~VXaHL1eMq+Q3(EV?AXeMk|UwTGjWGK4FatUZ>)`@J6A`yAnQD&WR+Oldg zJ;GKk({z_{+n}F|Sy=ak5vTH2X@X+_AZZd%(^14rqhFJB)`cxMjx0x(8%LHS%Z($;jU&sE<;Ica$a3Sza%4HOpE^JvLPM*Jb{_5nP_s=2AjoW97?C#6cljkQdUY(x$T`C+|Zl67}r>7?`PQRzf z-us3l%k8IdFgShw;@Pv)SI%ThcmJpj!%zUmm4HWspy&Y2;;9r0 zA{pFLf=xP^v|y7he-{siF5N;PSMw6G{E0|hlF0h55C_SKFpIPc+NGx^RBkc zvJml=-FfGm&bc$kFNjE1#iy?JO>?_ZF`8{70E(GvPu;XMR9*&3-mhK z|IcCok_AW>Bula&S%73gvLp*($%e-2`?bqJpOe+m%YJ*b0m(u}vNm6Tk5*-(NfsiK z4F=Wft9lK8uA2=>7JW~47?tMnxmqR@L$VN(tTt)BOy(pD8G}Jk`. +**Pro tip:** Use `__init__` to hold references (pointers) to other `Object`s or immutable state only. That is because a charm is reinitialised on every event. See [Talking to a workload: Control flow from A to Z](). ``` @@ -228,7 +228,7 @@ Finally, define the `pebble_layer` function as below. The `command` variable re def _pebble_layer(self) -> ops.pebble.Layer: """A Pebble layer for the FastAPI demo services.""" command = ' '.join( - {ref}` + [ 'uvicorn', 'api_demo_server.app:app', '--host=0.0.0.0', diff --git a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/integrate-your-charm-with-postgresql.md b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/integrate-your-charm-with-postgresql.md index b83f70ffe..e6e711488 100644 --- a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/integrate-your-charm-with-postgresql.md +++ b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/integrate-your-charm-with-postgresql.md @@ -245,14 +245,15 @@ def _on_database_created(self, event: DatabaseCreatedEvent) -> None: The diagram below illustrates the workflow for the case where the database integration exists and for the case where it does not: -![Integrate your charm with PostgreSQL](integrate_your_charm_with_postgresql.png) +![Integrate your charm with PostgreSQL](../../resources/integrate_your_charm_with_postgresql.png) ## Update the unit status to reflect the integration state Now that the charm is getting more complex, there are many more cases where the unit status needs to be set. It's often convenient to do this in a more declarative fashion, which is where the collect-status event can be used. -> Read more: {ref}`Events > Collect App Status and Collect Unit Status ` + +> Read more: [Events > Collect App Status and Collect Unit Status](https://juju.is/docs/sdk/events-collect-app-status-and-collect-unit-status) In your charm's `__init__` add a new observer: diff --git a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/observe-your-charm-with-cos-lite.md b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/observe-your-charm-with-cos-lite.md index b0b8bb9f3..0dd3c8f1f 100644 --- a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/observe-your-charm-with-cos-lite.md +++ b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/observe-your-charm-with-cos-lite.md @@ -91,7 +91,7 @@ Now, in your charm's `__init__` method, initialise the `MetricsEndpointProvider` self._prometheus_scraping = MetricsEndpointProvider( self, relation_name="metrics-endpoint", - jobs={ref}`{"static_configs": [{"targets": [f"*:{self.config['server-port']}"]}]}], + jobs=[{"static_configs": [{"targets": [f"*:{self.config['server-port']}"]}]}], refresh_event=self.on.config_changed, ) ``` @@ -449,7 +449,7 @@ In a while you should see the following data appearing on the dashboard: 3. Logs from your application that were collected by Loki and forwarded to Grafana. Here you can see some INFO level logs and ERROR logs with traceback from Python when you were calling the `/error` path. -![Observe your charm with COS Lite](observe_your_charm_with_cos_lite.png) +![Observe your charm with COS Lite](../../resources/observe_your_charm_with_cos_lite.png) ```{important} diff --git a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/preserve-your-charms-data.md b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/preserve-your-charms-data.md index 138f2a90a..6d2f14d2b 100644 --- a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/preserve-your-charms-data.md +++ b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/preserve-your-charms-data.md @@ -28,7 +28,7 @@ There are a few strategies you can adopt here: First, you can use an Ops construct called `Stored State`. With this strategy you can store data on the local unit (at least, so long as your `main` function doesn't set `use_juju_for_storage` to `True`). However, if your Kubernetes pod dies, your unit also dies, and thus also the data. For this reason this strategy is generally not recommended. -> Read more: {ref}`StoredState <7433md>`, {ref}`StoredState: Uses, Limitations ` +> Read more: [StoredState](), {ref}`StoredState: Uses, Limitations ` Second, you can make use of the Juju notion of 'peer relations' and 'data bags' and set up a peer relation data bag. This will help you store the information in the Juju's database backend. @@ -49,7 +49,7 @@ peers: fastapi-peer: interface: fastapi_demo_peers ``` -> Read more: {ref}`File ‘charmcraft.yaml’ <7433md>` +> Read more: [File ‘charmcraft.yaml`]() ## Set and get data from the peer relation databag diff --git a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/publish-your-charm-on-charmhub.md b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/publish-your-charm-on-charmhub.md index a08f97613..74f76f35e 100644 --- a/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/publish-your-charm-on-charmhub.md +++ b/docs/tutorial/from-zero-to-hero-write-your-first-kubernetes-charm/publish-your-charm-on-charmhub.md @@ -82,7 +82,7 @@ echo "Random 8-digit hash: $random_hash" ``` ```{important} -Naming your charm is usually less random than that; see {ref}`Charm naming guidelines `. However, here we are in a tutorial setting, so you just need to make sure to pick a unique name, any name. +Naming your charm is usually less random than that; see [Charm naming guidelines](). However, here we are in a tutorial setting, so you just need to make sure to pick a unique name, any name. ``` @@ -161,7 +161,7 @@ Release your charm as below. ```{important} **Do not worry:**
-While releasing a charm to Charmhub gives it a public URL, the charm will not appear in the Charmhub search results until it has passed formal review -- see {ref}`Requirements for public listing <12281md>`. +While releasing a charm to Charmhub gives it a public URL, the charm will not appear in the Charmhub search results until it has passed formal review -- see [Requirements for public listing](). ``` diff --git a/docs/tutorial/write-your-first-machine-charm.md b/docs/tutorial/write-your-first-machine-charm.md index d3e8da698..1bd48dda5 100644 --- a/docs/tutorial/write-your-first-machine-charm.md +++ b/docs/tutorial/write-your-first-machine-charm.md @@ -286,11 +286,11 @@ config: Then, in the `src/charm.py` file, update the `_on_install` function to make use of the new configuration option, as below: ```python -def _on_install(self, event: ops.ConfigChangedEvent): +def _on_install(self, event: ops.InstallEvent): """Handle install event.""" self.unit.status = ops.MaintenanceStatus("Installing microsample snap") channel = self.config.get('channel') - if channel in {ref}`'beta', 'edge', 'candidate', 'stable']: + if channel in ('beta', 'edge', 'candidate', 'stable'): os.system(f"snap install microsample --{channel}") self.unit.status = ops.ActiveStatus("Ready") else: @@ -345,7 +345,7 @@ Next, in the body of the charm definition, define the event handler, as below: ```python def _on_config_changed(self, event: ops.ConfigChangedEvent): channel = self.config.get('channel') - if channel in {ref}`'beta', 'edge', 'candidate', 'stable']: + if channel in ('beta', 'edge', 'candidate', 'stable'): os.system(f"snap refresh microsample --{channel}") self.unit.status = ops.ActiveStatus("Ready at '%s'" % channel) else: @@ -437,7 +437,7 @@ class MicrosampleVmCharm(ops.CharmBase): """Handle install event.""" self.unit.status = ops.MaintenanceStatus("Installing microsample snap") channel = self.config.get('channel') - if channel in {ref}`'beta', 'edge', 'candidate', 'stable']: + if channel in ('beta', 'edge', 'candidate', 'stable'): os.system(f"snap install microsample --{channel}") self.unit.status = ops.ActiveStatus("Ready") else: @@ -445,7 +445,7 @@ class MicrosampleVmCharm(ops.CharmBase): def _on_config_changed(self, event: ops.ConfigChangedEvent): channel = self.config.get('channel') - if channel in ['beta', 'edge', 'candidate', 'stable']: + if channel in ('beta', 'edge', 'candidate', 'stable'): os.system(f"snap refresh microsample --{channel}") workload_version = self._getWorkloadVersion() self.unit.set_workload_version(workload_version) @@ -505,8 +505,6 @@ microsample/0* active idle 1 10.122.219.101 Ready at 'beta' Machine State Address Inst id Base AZ Message 1 started 10.122.219.101 juju-f25b73-1 ubuntu@22.04 Running - - ``` Congratulations, your charm user can view the version of the workload deployed from your charm! @@ -523,7 +521,7 @@ By the end of this tutorial you will have built a machine charm and evolved it i | If you are wondering... | visit... | |-------------------------|----------------------| -| "How do I...?" | {ref}`how-to-guides` | +| "How do I...?" | {ref}`howto-guides` | | "What is...?" | {ref}`reference` | | "Why...?", "So what?" | {ref}`explanation` |