From be0036166b2f1fca3234e1620bc55ae403ea8aa8 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 9 Apr 2025 15:43:26 -0400 Subject: [PATCH 01/33] create scaffolding for new SSI pages per platform --- config/_default/menus/main.en.yaml | 15 +++++++++ .../single-step-apm/_index.md | 5 +++ .../single-step-apm/docker.md | 32 +++++++++++++++++++ .../single-step-apm/kubernetes.md | 32 +++++++++++++++++++ .../single-step-apm/linux.md | 32 +++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md create mode 100644 content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md create mode 100644 content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md diff --git a/config/_default/menus/main.en.yaml b/config/_default/menus/main.en.yaml index 636eee3c1c4..edeb4b3ac77 100644 --- a/config/_default/menus/main.en.yaml +++ b/config/_default/menus/main.en.yaml @@ -3533,6 +3533,21 @@ menu: parent: automatic_instrumentation identifier: single_step_apm weight: 2011 + - name: Single Step APM Instrumentation on Linux + url: tracing/trace_collection/automatic_instrumentation/single-step-apm/linux + parent: single_step_apm + identifier: single_step_apm_linux + weight: 20111 + - name: Single Step APM Instrumentation on Docker + url: tracing/trace_collection/automatic_instrumentation/single-step-apm/docker + parent: single_step_apm + identifier: single_step_apm_docker + weight: 20112 + - name: Single Step APM Instrumentation on Kubernetes + url: tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes + parent: single_step_apm + identifier: single_step_apm_kubernetes + weight: 20113 - name: Using Datadog Tracing Libraries url: tracing/trace_collection/automatic_instrumentation/dd_libraries/ parent: automatic_instrumentation diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index c8c12f9beb6..dc1dcec65d0 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -2,6 +2,7 @@ title: Single Step APM Instrumentation aliases: - /tracing/trace_collection/single-step-apm +type: multi-code-lang further_reading: - link: /tracing/metrics/runtime_metrics/ tag: Documentation @@ -21,6 +22,10 @@ If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentat The following examples show how it works for each deployment type. +{{< partial name="apm/apm-compatibility.html" >}} + +
+ {{< tabs >}} {{% tab "Linux host or VM" %}} diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md new file mode 100644 index 00000000000..5e21ca1b2de --- /dev/null +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -0,0 +1,32 @@ +--- +title: Single Step APM Instrumentation on Docker +code_lang: docker +type: multi-code-lang +code_lang_weight: 10 +further_reading: + - link: /tracing/metrics/runtime_metrics/ + tag: Documentation + text: Enable Runtime Metrics +--- + +## Overview + +## Requirements + +TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here + +## Enable APM on your applications + +## Advanced Options + +## Removing Single Step APM instrumentation from your Agent + +### Removing instrumentation for specific services + +### Removing APM for all services on the infrastructure + +## Further reading + +{{< partial name="whats-next/whats-next.html" >}} + + diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md new file mode 100644 index 00000000000..d3eeb62b0cd --- /dev/null +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -0,0 +1,32 @@ +--- +title: Single Step APM Instrumentation on Kubernetes +code_lang: kubernetes +type: multi-code-lang +code_lang_weight: 20 +further_reading: + - link: /tracing/metrics/runtime_metrics/ + tag: Documentation + text: Enable Runtime Metrics +--- + +## Overview + +## Requirements + +TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here + +## Enable APM on your applications + +## Advanced Options + +## Removing Single Step APM instrumentation from your Agent + +### Removing instrumentation for specific services + +### Removing APM for all services on the infrastructure + +## Further reading + +{{< partial name="whats-next/whats-next.html" >}} + + diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md new file mode 100644 index 00000000000..26c91650a9a --- /dev/null +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -0,0 +1,32 @@ +--- +title: Single Step APM Instrumentation on Linux +code_lang: linux +type: multi-code-lang +code_lang_weight: 0 +further_reading: + - link: /tracing/metrics/runtime_metrics/ + tag: Documentation + text: Enable Runtime Metrics +--- + +## Overview + +## Requirements + +TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here + +## Enable APM on your applications + +## Advanced Options + +## Removing Single Step APM instrumentation from your Agent + +### Removing instrumentation for specific services + +### Removing APM for all services on the infrastructure + +## Further reading + +{{< partial name="whats-next/whats-next.html" >}} + + From 26b3a9c489c0fb61f1e628a6339969e2f7492b2a Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 9 Apr 2025 16:55:37 -0400 Subject: [PATCH 02/33] create html partial for three tiles --- .../single-step-apm/_index.md | 2 +- layouts/partials/apm/apm-single-step.html | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 layouts/partials/apm/apm-single-step.html diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index dc1dcec65d0..48a926c182e 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -22,7 +22,7 @@ If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentat The following examples show how it works for each deployment type. -{{< partial name="apm/apm-compatibility.html" >}} +{{< partial name="apm/apm-single-step.html" >}}
diff --git a/layouts/partials/apm/apm-single-step.html b/layouts/partials/apm/apm-single-step.html new file mode 100644 index 00000000000..591a4310979 --- /dev/null +++ b/layouts/partials/apm/apm-single-step.html @@ -0,0 +1,28 @@ +{{ $dot := . }} + \ No newline at end of file From b8d7afe215904931636322a0c846f43e6421bced Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 9 Apr 2025 17:32:13 -0400 Subject: [PATCH 03/33] move steps for enabling apm to individual pages --- .../single-step-apm/_index.md | 194 ------------------ .../single-step-apm/docker.md | 32 +++ .../single-step-apm/kubernetes.md | 134 ++++++++++++ .../single-step-apm/linux.md | 22 ++ 4 files changed, 188 insertions(+), 194 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 48a926c182e..707186dfe14 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -26,200 +26,6 @@ The following examples show how it works for each deployment type.
-{{< tabs >}} -{{% tab "Linux host or VM" %}} - -For an Ubuntu host: - -1. Run the one-line installation command: - - ```shell - DD_API_KEY= DD_SITE="" DD_APM_INSTRUMENTATION_ENABLED=host DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2,js:5,dotnet:3,php:1" DD_ENV= bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)" - ``` - - Replace `` with your [Datadog API key][4], `` with your [Datadog site][3], and `` with the environment your Agent is installed on (for example, `staging`). -
See Advanced options for more options.
-2. Start a new shell session. -3. Restart the services on the host or VM. - -[3]: /getting_started/site/ -[4]: https://app.datadoghq.com/organization-settings/api-keys -[5]: /tracing/software_catalog/ -[7]: https://github.com/DataDog/dd-trace-java/releases -[8]: https://github.com/DataDog/dd-trace-js/releases -[9]: https://github.com/DataDog/dd-trace-py/releases -[10]: https://github.com/DataDog/dd-trace-dotnet/releases -[11]: https://github.com/DataDog/dd-trace-rb/releases - -{{% /tab %}} - -{{% tab "Docker" %}} - -For a Docker Linux container: - -1. Run the one-line installation command: - ```shell - DD_APM_INSTRUMENTATION_ENABLED=docker DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2,js:5,dotnet:3,php:1" DD_NO_AGENT_INSTALL=true bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)" - ``` -2. Configure the Agent in Docker: - ```shell - docker run -d --name dd-agent \ - -e DD_API_KEY= \ - -e DD_APM_ENABLED=true \ - -e DD_ENV= \ - -e DD_APM_NON_LOCAL_TRAFFIC=true \ - -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \ - -e DD_APM_RECEIVER_SOCKET=/var/run/datadog/apm.socket \ - -e DD_DOGSTATSD_SOCKET=/var/run/datadog/dsd.socket \ - -v /var/run/datadog:/var/run/datadog \ - -v /var/run/docker.sock:/var/run/docker.sock:ro \ - gcr.io/datadoghq/agent:7 - ``` - Replace `` with your [Datadog API key][5] and `` with the environment your Agent is installed on (for example, `staging`). -
See Advanced options for more options.
-3. Restart the Docker containers. -4. [Explore the performance observability of your services in Datadog][6]. - -[5]: https://app.datadoghq.com/organization-settings/api-keys -[6]: /tracing/software_catalog/ - -{{% /tab %}} - -{{% tab "Kubernetes" %}} - -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - -You can enable APM by installing the Agent with either: - -- Datadog Operator -- Datadog Helm chart - -
Single Step Instrumentation doesn't instrument applications in the namespace where you install the Datadog Agent. It's recommended to install the Agent in a separate namespace in your cluster where you don't run your applications.
- -### Requirements - -- Kubernetes v1.20+ -- [`Helm`][1] for deploying the Datadog Operator. -- [`Kubectl` CLI][2] for installing the Datadog Agent. - -{{< collapse-content title="Installing with Datadog Operator" level="h4" >}} -Follow these steps to enable Single Step Instrumentation across your entire cluster with the Datadog Operator. This automatically sends traces for all applications in the cluster that are written in supported languages. - -**Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). - -To enable Single Step Instrumentation with the Datadog Operator: - -1. Install the [Datadog Operator][36] with Helm: - ```shell - helm repo add datadog https://helm.datadoghq.com - helm repo update - helm install my-datadog-operator datadog/datadog-operator - ``` -2. Create a Kubernetes secret to store your Datadog [API key][10]: - ```shell - kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY - ``` -3. Create `datadog-agent.yaml` with the spec of your Datadog Agent deployment configuration. The simplest configuration is as follows: - ```yaml - apiVersion: datadoghq.com/v2alpha1 - kind: DatadogAgent - metadata: - name: datadog - spec: - override: - clusterAgent: - image: - tag: 7.64.1 - global: - site: - tags: - - env: - credentials: - apiSecret: - secretName: datadog-secret - keyName: api-key - features: - apm: - instrumentation: - enabled: true - targets: - - name: "default-target" - ddTracerVersions: - java: "1" - dotnet: "3" - python: "2" - js: "5" - php: "1" - ``` - Replace `` with your [Datadog site][12] and `` with the environment your Agent is installed on (for example, `env:staging`). -
See Advanced options for more options.
- -4. Run the following command: - ```shell - kubectl apply -f /path/to/your/datadog-agent.yaml - ``` -5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. -{{< /collapse-content >}} - -{{< collapse-content title="Installing with Helm" level="h4" >}} -Follow these steps to enable Single Step Instrumentation across your entire cluster with Helm. This automatically sends traces for all applications in the cluster that are written in supported languages. - -**Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). - -To enable Single Step Instrumentation with Helm: - -1. Add the Helm Datadog repo: - ```shell - helm repo add datadog https://helm.datadoghq.com - helm repo update - ``` -2. Create a Kubernetes secret to store your Datadog [API key][10]: - ```shell - kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY - ``` -3. Create `datadog-values.yaml` and add the following configuration: - ``` - datadog: - apiKeyExistingSecret: datadog-secret - site: - tags: - - env: - apm: - instrumentation: - enabled: true - targets: - - name: "default-target" - ddTracerVersions: - java: "1" - dotnet: "3" - python: "2" - js: "5" - php: "1" - ``` - Replace `` with your [Datadog site][12] and `` with the environment your Agent is installed on (for example, `env:staging`). - -
See Advanced options for more options.
- -4. Run the following command: - ```shell - helm install datadog-agent -f datadog-values.yaml datadog/datadog - ``` -5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. - -{{< /collapse-content >}} - -[1]: https://v3.helm.sh/docs/intro/install/ -[2]: https://kubernetes.io/docs/tasks/tools/install-kubectl/ -[9]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator -[10]: https://app.datadoghq.com/organization-settings/api-keys -[11]: https://app.datadoghq.com/organization-settings/application-keys -[12]: /getting_started/site -[13]: https://v3.helm.sh/docs/intro/install/ -[36]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator - -{{% /tab %}} -{{< /tabs >}} - After you complete these steps, you may want to enable [runtime metrics][2] or view observability data from your application in the [Software Catalog][3]. ## Advanced options diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index 5e21ca1b2de..01cd04c94b8 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -17,6 +17,33 @@ TODO: Determine if we want to remove platform-specific requirements from Compati ## Enable APM on your applications +For a Docker Linux container: + +1. Run the one-line installation command: + ```shell + DD_APM_INSTRUMENTATION_ENABLED=docker DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2,js:5,dotnet:3,php:1" DD_NO_AGENT_INSTALL=true bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)" + ``` +2. Configure the Agent in Docker: + ```shell + docker run -d --name dd-agent \ + -e DD_API_KEY= \ + -e DD_APM_ENABLED=true \ + -e DD_ENV= \ + -e DD_APM_NON_LOCAL_TRAFFIC=true \ + -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \ + -e DD_APM_RECEIVER_SOCKET=/var/run/datadog/apm.socket \ + -e DD_DOGSTATSD_SOCKET=/var/run/datadog/dsd.socket \ + -v /var/run/datadog:/var/run/datadog \ + -v /var/run/docker.sock:/var/run/docker.sock:ro \ + gcr.io/datadoghq/agent:7 + ``` + Replace `` with your [Datadog API key][1] and `` with the environment your Agent is installed on (for example, `staging`). +
See Advanced options for more options.
+3. Restart the Docker containers. +4. [Explore the performance observability of your services in Datadog][2]. + +After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. + ## Advanced Options ## Removing Single Step APM instrumentation from your Agent @@ -29,4 +56,9 @@ TODO: Determine if we want to remove platform-specific requirements from Compati {{< partial name="whats-next/whats-next.html" >}} +[1]: https://app.datadoghq.com/organization-settings/api-keys +[2]: /tracing/software_catalog/ +[3]: /tracing/metrics/runtime_metrics/ +[4]: /tracing/software_catalog/ + diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index d3eeb62b0cd..ce6a6c5b001 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -17,6 +17,129 @@ TODO: Determine if we want to remove platform-specific requirements from Compati ## Enable APM on your applications +*Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. + +You can enable APM by installing the Agent with either: + +- Datadog Operator +- Datadog Helm chart + +
Single Step Instrumentation doesn't instrument applications in the namespace where you install the Datadog Agent. It's recommended to install the Agent in a separate namespace in your cluster where you don't run your applications.
+ +### Requirements + +- Kubernetes v1.20+ +- [`Helm`][1] for deploying the Datadog Operator. +- [`Kubectl` CLI][2] for installing the Datadog Agent. + +{{< collapse-content title="Installing with Datadog Operator" level="h4" >}} +Follow these steps to enable Single Step Instrumentation across your entire cluster with the Datadog Operator. This automatically sends traces for all applications in the cluster that are written in supported languages. + +**Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). + +To enable Single Step Instrumentation with the Datadog Operator: + +1. Install the [Datadog Operator][36] with Helm: + ```shell + helm repo add datadog https://helm.datadoghq.com + helm repo update + helm install my-datadog-operator datadog/datadog-operator + ``` +2. Create a Kubernetes secret to store your Datadog [API key][10]: + ```shell + kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY + ``` +3. Create `datadog-agent.yaml` with the spec of your Datadog Agent deployment configuration. The simplest configuration is as follows: + ```yaml + apiVersion: datadoghq.com/v2alpha1 + kind: DatadogAgent + metadata: + name: datadog + spec: + override: + clusterAgent: + image: + tag: 7.64.1 + global: + site: + tags: + - env: + credentials: + apiSecret: + secretName: datadog-secret + keyName: api-key + features: + apm: + instrumentation: + enabled: true + targets: + - name: "default-target" + ddTracerVersions: + java: "1" + dotnet: "3" + python: "2" + js: "5" + php: "1" + ``` + Replace `` with your [Datadog site][12] and `` with the environment your Agent is installed on (for example, `env:staging`). +
See Advanced options for more options.
+ +4. Run the following command: + ```shell + kubectl apply -f /path/to/your/datadog-agent.yaml + ``` +5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. +{{< /collapse-content >}} + +{{< collapse-content title="Installing with Helm" level="h4" >}} +Follow these steps to enable Single Step Instrumentation across your entire cluster with Helm. This automatically sends traces for all applications in the cluster that are written in supported languages. + +**Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). + +To enable Single Step Instrumentation with Helm: + +1. Add the Helm Datadog repo: + ```shell + helm repo add datadog https://helm.datadoghq.com + helm repo update + ``` +2. Create a Kubernetes secret to store your Datadog [API key][10]: + ```shell + kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY + ``` +3. Create `datadog-values.yaml` and add the following configuration: + ``` + datadog: + apiKeyExistingSecret: datadog-secret + site: + tags: + - env: + apm: + instrumentation: + enabled: true + targets: + - name: "default-target" + ddTracerVersions: + java: "1" + dotnet: "3" + python: "2" + js: "5" + php: "1" + ``` + Replace `` with your [Datadog site][12] and `` with the environment your Agent is installed on (for example, `env:staging`). + +
See Advanced options for more options.
+ +4. Run the following command: + ```shell + helm install datadog-agent -f datadog-values.yaml datadog/datadog + ``` +5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. + +{{< /collapse-content >}} + +After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. + ## Advanced Options ## Removing Single Step APM instrumentation from your Agent @@ -29,4 +152,15 @@ TODO: Determine if we want to remove platform-specific requirements from Compati {{< partial name="whats-next/whats-next.html" >}} +[1]: https://v3.helm.sh/docs/intro/install/ +[2]: https://kubernetes.io/docs/tasks/tools/install-kubectl/ +[3]: /tracing/metrics/runtime_metrics/ +[4]: /tracing/software_catalog/ +[9]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator +[10]: https://app.datadoghq.com/organization-settings/api-keys +[11]: https://app.datadoghq.com/organization-settings/application-keys +[12]: /getting_started/site +[13]: https://v3.helm.sh/docs/intro/install/ +[36]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator + diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 26c91650a9a..5232c0aca61 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -11,12 +11,29 @@ further_reading: ## Overview +Linux host or VM + ## Requirements TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here ## Enable APM on your applications +For an Ubuntu host: + +1. Run the one-line installation command: + + ```shell + DD_API_KEY= DD_SITE="" DD_APM_INSTRUMENTATION_ENABLED=host DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2,js:5,dotnet:3,php:1" DD_ENV= bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)" + ``` + + Replace `` with your [Datadog API key][2], `` with your [Datadog site][1], and `` with the environment your Agent is installed on (for example, `staging`). +
See Advanced options for more options.
+2. Start a new shell session. +3. Restart the services on the host or VM. + +After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. + ## Advanced Options ## Removing Single Step APM instrumentation from your Agent @@ -29,4 +46,9 @@ TODO: Determine if we want to remove platform-specific requirements from Compati {{< partial name="whats-next/whats-next.html" >}} +[1]: /getting_started/site/ +[2]: https://app.datadoghq.com/organization-settings/api-keys +[3]: /tracing/metrics/runtime_metrics/ +[4]: /tracing/software_catalog/ + From c66fdcf9723666a186022740d28c59e17afe6ba0 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 9 Apr 2025 17:43:36 -0400 Subject: [PATCH 04/33] move advanced options content to individual pages --- .../single-step-apm/_index.md | 484 ------------------ .../single-step-apm/docker.md | 29 ++ .../single-step-apm/kubernetes.md | 415 ++++++++++++++- .../single-step-apm/linux.md | 30 ++ 4 files changed, 465 insertions(+), 493 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 707186dfe14..19f1e946aef 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -26,490 +26,6 @@ The following examples show how it works for each deployment type.
-After you complete these steps, you may want to enable [runtime metrics][2] or view observability data from your application in the [Software Catalog][3]. - -## Advanced options - -When you run the one-line installation command, there are a few options to customize your experience: - -{{< tabs >}} -{{% tab "Linux host or VM" %}} - -### `DD_APM_INSTRUMENTATION_LIBRARIES` - customizing APM libraries - -By default, Java, Python, Ruby, Node.js, PHP and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. - -Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: - -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1"` - install only the Java Datadog APM library pinned to the major version 1 release line. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 2 respectively. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. - - -Available versions are listed in source repositories for each language: - -- [Java][8] (`java`) -- [Node.js][9] (`js`) -- [Python][10] (`python`) -- [.NET][11] (`dotnet`) -- [Ruby][12] (`ruby`) -- [PHP][13] (`php`) - - -[2]: /agent/remote_config -[6]: https://github.com/DataDog/dd-trace-js?tab=readme-ov-file#version-release-lines-and-maintenance -[8]: https://github.com/DataDog/dd-trace-java/releases -[9]: https://github.com/DataDog/dd-trace-js/releases -[10]: https://github.com/DataDog/dd-trace-py/releases -[11]: https://github.com/DataDog/dd-trace-dotnet/releases -[12]: https://github.com/DataDog/dd-trace-rb/releases -[13]: https://github.com/DataDog/dd-trace-php/releases - -{{% /tab %}} - -{{% tab "Docker" %}} - - -### `DD_APM_INSTRUMENTATION_LIBRARIES` - customizing APM libraries - -By default, Java, Python, Ruby, Node.js and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. - -Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: - -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1"` - install only the Java Datadog APM library pinned to the major version 1 release line. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 2 respectively. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. - - -Available versions are listed in source repositories for each language: - -- [Java][8] (`java`) -- [Node.js][9] (`js`) -- [Python][10] (`python`) -- [.NET][11] (`dotnet`) -- [Ruby][12] (`ruby`) -- [PHP][13] (`php`) - - -[5]: https://app.datadoghq.com/organization-settings/api-keys -[7]: https://github.com/DataDog/dd-trace-js?tab=readme-ov-file#version-release-lines-and-maintenance -[8]: https://github.com/DataDog/dd-trace-java/releases -[9]: https://github.com/DataDog/dd-trace-js/releases -[10]: https://github.com/DataDog/dd-trace-py/releases -[11]: https://github.com/DataDog/dd-trace-dotnet/releases -[12]: https://github.com/DataDog/dd-trace-rb/releases -[13]: https://github.com/DataDog/dd-trace-php/releases - -{{% /tab %}} - -{{% tab "Kubernetes (Agent v7.64+)" %}} - -### Configuring instrumentation for namespaces and pods - -By default, Single Step Instrumentation instruments all services in all namespaces in your cluster. Alternatively, you can create targeting blocks with the `targets` label to specify which workloads to instrument and what configurations to apply. - -Each target block has the following keys: - -| Key | Description | -|------------------|-------------| -| `name` | The name of the target block. This has no effect on monitoring state and is used only as metadata. | -| `namespaceSelector` | The namespace(s) to instrument. Specify using one or more of:
- `matchNames`: A list of one or more namespace name(s).
- `matchLabels`: A list of one or more label(s) defined in `{key,value}` pairs.
- `matchExpressions`: A list of namespace selector requirements.

Namespaces must meet all criteria to match. For more details, see the [Kubernetes selector documentation][3].| -| `podSelector` | The pod(s) to instrument. Specify using one or more of:
- `matchLabels`: A list of one or more label(s) defined in `{key,value}` pairs.
- `matchExpressions`: A list of pod selector requirements.

Pods must meet all criteria to match. For more details, see the [Kubernetes selector documentation][3]. | -| `ddTraceVersions` | The [Datadog APM SDK][2] version to use for each language. | -| `ddTraceConfigs` | APM SDK configs that allow setting Unified Service Tags, enabling Datadog products beyond tracing, and customizing other APM settings. [See full list of options][1]. | - - - -The file you need to configure depends on how you enabled Single Step Instrumentation: -- If you enabled SSI with Datadog Operator, edit `datadog-agent.yaml`. -- If you enabled SSI with Helm, edit `datadog-values.yaml`. - -#### Example configurations - -Review the following examples demonstrating how to select specific services: - -{{< collapse-content title="Example 1: Enable all namespaces except one" level="h4" >}} - -This configuration: -- enables APM for all namespaces except the `jenkins` namespace. -- instructs Datadog to instrument the Java applications with the default Java APM SDK and Python applications with `v.3.1.0` of the Python APM SDK. - -{{< highlight yaml "hl_lines=4-10" >}} - apm: - instrumentation: - enabled: true - disabledNamespaces: - - "jenkins" - targets: - - name: "all-remaining-services" - ddTraceVersions: - java: "default" - python: "3.1.0" -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Example 2: Instrument a subset of namespaces, matching on names and labels" level="h4" >}} - -This configuration creates two targets blocks: - -- The first block (named `login-service_namespace`): - - enables APM for services in the namespace `login-service`. - - instructs Datadog to instrument services in this namespace with the default version of the Java APM SDK. - - sets environment variables -- `DD_SERVICE`, `DD_ENV`, and `DD_PROFILING_ENABLED` -- for this target group. -- The second block (named `billing-service_apps`) - - enables APM for services in the namespace(s) with label `app:billing-service`. - - instructs Datadog to instrument this set of services with `v3.1.0` of the Python APM SDK. - - sets environment variables -- `DD_SERVICE` and `DD_ENV` -- for this target group. - -{{< highlight yaml "hl_lines=4-28" >}} - apm: - instrumentation: - enabled: true - targets: - - name: "login-service_namespace" - namespaceSelector: - matchNames: - - "login-service" - ddTraceVersions: - java: "default" - ddTraceConfigs: - - name: "DD_SERVICE" - value: "login-service" - - name: "DD_ENV" - value: "prod" - - name: "DD_PROFILING_ENABLED" ## profiling is enabled for all services in this namespace - value: "auto" - - name: "billing-service_apps" - namespaceSelector: - matchLabels: - app: "billing-service" - ddTraceVersions: - python: "3.1.0" - ddTraceConfigs: - - name: "DD_SERVICE" - value: "billing-service" - - name: "DD_ENV" - value: "prod -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Example 3: Instrument different workloads with different tracers" level="h4" >}} - -This configuration does the following: -- enables APM for pods with the following labels: - - `app:db-user`, which marks pods running the `db-user` application. - - `webserver:routing`, which marks pods running the `request-router` application. -- instructs Datadog to use the default versions of the Datadog Tracer SDKs. -- sets several Datadog environment variables to apply to each target group. - -{{< highlight yaml "hl_lines=4-28" >}} - apm: - instrumentation: - enabled: true - targets: - - name: "db-user" - podSelector: - matchLabels: - app: "db-user" - ddTraceVersions: - java: "default" - ddTraceConfigs: ## trace configs set for services in matching pods - - name: "DD_SERVICE" - value: "db-user" - - name: "DD_ENV" - value: "prod" - - name: "DD_DSM_ENABLED" - value: "true" - - name: "user-request-router" - podSelector: - matchLabels: - webserver: "user" - ddTraceVersions: - php: "default" - ddTraceConfigs: - - name: "DD_SERVICE" - value: "user-request-router" - - name: "DD_ENV" - value: "prod -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Example 4: Instrument a pod within a namespace" level="h4" >}} - -This configuration: -- enables APM for pods labeled `app:password-resolver` inside the `login-service` namespace. -- instructs Datadog to use the default version of the Datadog Java Tracer SDK. -- sets several Datadog environment variables to apply to this target. - -{{< highlight yaml "hl_lines=4-28" >}} - apm: - instrumentation: - enabled: true - targets: - - name: "login-service-namespace" - namespaceSelector: - matchNames: - - "login-service" - podSelector: - matchLabels: - app: "password-resolver" - ddTraceVersions: - java: "default" - ddTraceConfigs: - - name: "DD_SERVICE" - value: "password-resolver" - - name: "DD_ENV" - value: "prod" - - name: "DD_PROFILING_ENABLED" - value: "auto" -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Example 5: Instrument a subset of pods using matchExpressions" level="h4" >}} - -This configuration enables APM for all pods except those that have either of the labels `app=app1` or `app=app2`. - -{{< highlight yaml "hl_lines=4-28" >}} - apm: - instrumentation: - enabled: true - targets: - - name: "default-target" - matchExpressions: - - key: app - operator: NotIn - values: - - app1 - - app2 -{{< /highlight >}} - -{{< /collapse-content >}} - -[1]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes -[2]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility/#tracer-libraries -[3]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements - -{{% /tab %}} - -{{% tab "Kubernetes (Agent <=v7.63) (Preview)" %}} - -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - -### Enabling or disabling instrumentation for namespaces - -You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enabledNamespaces or disabledNamespaces, not both. - -The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: - -{{< collapse-content title="Datadog Operator" level="h4" >}} - -To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-agent.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - features: - apm: - instrumentation: - enabled: true - enabledNamespaces: # Add namespaces to instrument - - default - - applications -{{< /highlight >}} - -To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-agent.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - features: - apm: - instrumentation: - enabled: true - disabledNamespaces: # Add namespaces to not instrument - - default - - applications -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Helm" level="h4" >}} - -To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-values.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - datadog: - apm: - instrumentation: - enabled: true - enabledNamespaces: # Add namespaces to instrument - - namespace_1 - - namespace_2 -{{< /highlight >}} - -To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-values.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - datadog: - apm: - instrumentation: - enabled: true - disabledNamespaces: # Add namespaces to not instrument - - namespace_1 - - namespace_2 -{{< /highlight >}} - -{{< /collapse-content >}} - - -### Specifying tracing library versions - -
Starting with Datadog Cluster Agent v7.52.0+, you can automatically instrument a subset of your applications, based on the tracing libraries you specify.
- -Specify Datadog tracing libraries and their versions to automatically instrument applications written in those languages. You can configure this in two ways, which are applied in the following order of precedence: - -1. [Specify at the service level](#specifying-at-the-service-level), or -2. [Specify at the cluster level](#specifying-at-the-cluster-level). - -**Default**: If you don't specify any library versions and `apm.instrumentation.enabled=true`, applications written in supported languages are automatically instrumented using the latest tracing library versions. - -#### Specifying at the service level - -To automatically instrument applications in specific pods, add the appropriate language annotation and library version for your application in your pod spec: - -| Language | Pod annotation | -|------------|-----------------------------------------------------------------------| -| Java | `admission.datadoghq.com/java-lib.version: ""` | -| Node.js | `admission.datadoghq.com/js-lib.version: ""` | -| Python | `admission.datadoghq.com/python-lib.version: ""` | -| .NET | `admission.datadoghq.com/dotnet-lib.version: ""` | -| Ruby | `admission.datadoghq.com/ruby-lib.version: ""` | -| PHP | `admission.datadoghq.com/php-lib.version: ""` | - -Replace `` with the desired library version. Available versions are listed in the [Datadog container registries](#container-registries) and tracer source repositories for each language: - -- [Java][34] -- [Node.js][35] -- [Python][36] -- [.NET][37] -- [Ruby][38] -- [PHP][39] - -
Exercise caution when using the latest tag, as major library releases may introduce breaking changes.
- -For example, to automatically instrument Java applications: - -{{< highlight yaml "hl_lines=10" >}} -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - # ... -spec: - template: - metadata: - annotations: - admission.datadoghq.com/java-lib.version: "" - spec: - containers: - - # ... -{{< /highlight >}} - -#### Specifying at the cluster level - -If you don't enable automatic instrumentation for specific pods using annotations, you can specify which languages to instrument across the entire cluster using the Single Step Instrumentation configuration. When `apm.instrumentation.libVersions` is set, only applications written in the specified languages will be instrumented, using the specified library versions. - -The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: - -{{< collapse-content title="Datadog Operator" level="h4" >}} - -For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-agent.yaml` file: - -{{< highlight yaml "hl_lines=5-8" >}} - features: - apm: - instrumentation: - enabled: true - libVersions: # Add any libraries and versions you want to set - dotnet: "3.2.0" - python: "1.20.6" - js: "4.17.0" -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Helm" level="h4" >}} - -For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-values.yaml` file: - -{{< highlight yaml "hl_lines=5-8" >}} - datadog: - apm: - instrumentation: - enabled: true - libVersions: # Add any libraries and versions you want to set - dotnet: "3.2.0" - python: "1.20.6" - js: "4.17.0" -{{< /highlight >}} - -{{< /collapse-content >}} - - -#### Container registries - -Datadog publishes instrumentation libraries images on gcr.io, Docker Hub, and Amazon ECR: - -| Language | gcr.io | hub.docker.com | gallery.ecr.aws | -|------------|-------------------------------------|---------------------------------------------|-------------------------------------------| -| Java | [gcr.io/datadoghq/dd-lib-java-init][15] | [hub.docker.com/r/datadog/dd-lib-java-init][16] | [gallery.ecr.aws/datadog/dd-lib-java-init][17] | -| Node.js | [gcr.io/datadoghq/dd-lib-js-init][18] | [hub.docker.com/r/datadog/dd-lib-js-init][19] | [gallery.ecr.aws/datadog/dd-lib-js-init][20] | -| Python | [gcr.io/datadoghq/dd-lib-python-init][21] | [hub.docker.com/r/datadog/dd-lib-python-init][22] | [gallery.ecr.aws/datadog/dd-lib-python-init][23] | -| .NET | [gcr.io/datadoghq/dd-lib-dotnet-init][24] | [hub.docker.com/r/datadog/dd-lib-dotnet-init][25] | [gallery.ecr.aws/datadog/dd-lib-dotnet-init][26] | -| Ruby | [gcr.io/datadoghq/dd-lib-ruby-init][27] | [hub.docker.com/r/datadog/dd-lib-ruby-init][28] | [gallery.ecr.aws/datadog/dd-lib-ruby-init][29] | -| PHP | [gcr.io/datadoghq/dd-lib-php-init][30] | [hub.docker.com/r/datadog/dd-lib-php-init][31] | [gallery.ecr.aws/datadog/dd-lib-php-init][32] | - -The `DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY` environment variable in the Datadog Cluster Agent configuration specifies the registry used by the Admission Controller. The default value is `gcr.io/datadoghq`. - -You can pull the tracing library from a different registry by changing it to `docker.io/datadog`, `public.ecr.aws/datadog`, or another URL if you are hosting the images in a local container registry. - -For instructions on changing your container registry, see [Changing Your Container Registry][33]. - -[1]: https://helm.sh/ -[2]: https://kubernetes.io/docs/tasks/tools/ -[3]: https://app.datadoghq.com/organization-settings/api-keys -[4]: /getting_started/site/ -[5]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator -[6]: /getting_started/site -[15]: http://gcr.io/datadoghq/dd-lib-java-init -[16]: http://hub.docker.com/r/datadog/dd-lib-java-init -[17]: http://gallery.ecr.aws/datadog/dd-lib-java-init -[18]: http://gcr.io/datadoghq/dd-lib-js-init -[19]: http://hub.docker.com/r/datadog/dd-lib-js-init -[20]: http://gallery.ecr.aws/datadog/dd-lib-js-init -[21]: http://gcr.io/datadoghq/dd-lib-python-init -[22]: http://hub.docker.com/r/datadog/dd-lib-python-init -[23]: http://gallery.ecr.aws/datadog/dd-lib-python-init -[24]: http://gcr.io/datadoghq/dd-lib-dotnet-init -[25]: http://hub.docker.com/r/datadog/dd-lib-dotnet-init -[26]: http://gallery.ecr.aws/datadog/dd-lib-dotnet-init -[27]: http://gcr.io/datadoghq/dd-lib-ruby-init -[28]: http://hub.docker.com/r/datadog/dd-lib-ruby-init -[29]: http://gallery.ecr.aws/datadog/dd-lib-ruby-init -[30]: http://gcr.io/datadoghq/dd-lib-php-init -[31]: http://hub.docker.com/r/datadog/dd-lib-php-init -[32]: http://gallery.ecr.aws/datadog/dd-lib-php-init -[33]: /containers/guide/changing_container_registry/ -[34]: https://github.com/DataDog/dd-trace-java/releases -[35]: https://github.com/DataDog/dd-trace-js/releases -[36]: https://github.com/DataDog/dd-trace-py/releases -[37]: https://github.com/DataDog/dd-trace-dotnet/releases -[38]: https://github.com/DataDog/dd-trace-rb/releases -[39]: https://github.com/DataDog/dd-trace-php/releases - -{{% /tab %}} -{{< /tabs >}} - ## Removing Single Step APM instrumentation from your Agent If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index 01cd04c94b8..e951b3f39bb 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -46,6 +46,29 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v ## Advanced Options +When you run the one-line installation command, there are a few options to customize your experience: + +### `DD_APM_INSTRUMENTATION_LIBRARIES` - customizing APM libraries + +By default, Java, Python, Ruby, Node.js and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. + +Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: + +- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1"` - install only the Java Datadog APM library pinned to the major version 1 release line. +- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 2 respectively. +- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. + + +Available versions are listed in source repositories for each language: + +- [Java][8] (`java`) +- [Node.js][9] (`js`) +- [Python][10] (`python`) +- [.NET][11] (`dotnet`) +- [Ruby][12] (`ruby`) +- [PHP][13] (`php`) + + ## Removing Single Step APM instrumentation from your Agent ### Removing instrumentation for specific services @@ -60,5 +83,11 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v [2]: /tracing/software_catalog/ [3]: /tracing/metrics/runtime_metrics/ [4]: /tracing/software_catalog/ +[8]: https://github.com/DataDog/dd-trace-java/releases +[9]: https://github.com/DataDog/dd-trace-js/releases +[10]: https://github.com/DataDog/dd-trace-py/releases +[11]: https://github.com/DataDog/dd-trace-dotnet/releases +[12]: https://github.com/DataDog/dd-trace-rb/releases +[13]: https://github.com/DataDog/dd-trace-php/releases diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index ce6a6c5b001..2b2a38a39c5 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -39,13 +39,13 @@ Follow these steps to enable Single Step Instrumentation across your entire clus To enable Single Step Instrumentation with the Datadog Operator: -1. Install the [Datadog Operator][36] with Helm: +1. Install the [Datadog Operator][5] with Helm: ```shell helm repo add datadog https://helm.datadoghq.com helm repo update helm install my-datadog-operator datadog/datadog-operator ``` -2. Create a Kubernetes secret to store your Datadog [API key][10]: +2. Create a Kubernetes secret to store your Datadog [API key][6]: ```shell kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY ``` @@ -81,7 +81,7 @@ To enable Single Step Instrumentation with the Datadog Operator: js: "5" php: "1" ``` - Replace `` with your [Datadog site][12] and `` with the environment your Agent is installed on (for example, `env:staging`). + Replace `` with your [Datadog site][7] and `` with the environment your Agent is installed on (for example, `env:staging`).
See Advanced options for more options.
4. Run the following command: @@ -142,6 +142,377 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v ## Advanced Options +When you run the one-line installation command, there are a few options to customize your experience: + +{{% tab "Kubernetes (Agent v7.64+)" %}} + +### Configuring instrumentation for namespaces and pods + +By default, Single Step Instrumentation instruments all services in all namespaces in your cluster. Alternatively, you can create targeting blocks with the `targets` label to specify which workloads to instrument and what configurations to apply. + +Each target block has the following keys: + +| Key | Description | +|------------------|-------------| +| `name` | The name of the target block. This has no effect on monitoring state and is used only as metadata. | +| `namespaceSelector` | The namespace(s) to instrument. Specify using one or more of:
- `matchNames`: A list of one or more namespace name(s).
- `matchLabels`: A list of one or more label(s) defined in `{key,value}` pairs.
- `matchExpressions`: A list of namespace selector requirements.

Namespaces must meet all criteria to match. For more details, see the [Kubernetes selector documentation][10].| +| `podSelector` | The pod(s) to instrument. Specify using one or more of:
- `matchLabels`: A list of one or more label(s) defined in `{key,value}` pairs.
- `matchExpressions`: A list of pod selector requirements.

Pods must meet all criteria to match. For more details, see the [Kubernetes selector documentation][10]. | +| `ddTraceVersions` | The [Datadog APM SDK][9] version to use for each language. | +| `ddTraceConfigs` | APM SDK configs that allow setting Unified Service Tags, enabling Datadog products beyond tracing, and customizing other APM settings. [See full list of options][8]. | + +The file you need to configure depends on how you enabled Single Step Instrumentation: +- If you enabled SSI with Datadog Operator, edit `datadog-agent.yaml`. +- If you enabled SSI with Helm, edit `datadog-values.yaml`. + +#### Example configurations + +Review the following examples demonstrating how to select specific services: + +{{< collapse-content title="Example 1: Enable all namespaces except one" level="h4" >}} + +This configuration: +- enables APM for all namespaces except the `jenkins` namespace. +- instructs Datadog to instrument the Java applications with the default Java APM SDK and Python applications with `v.3.1.0` of the Python APM SDK. + +{{< highlight yaml "hl_lines=4-10" >}} + apm: + instrumentation: + enabled: true + disabledNamespaces: + - "jenkins" + targets: + - name: "all-remaining-services" + ddTraceVersions: + java: "default" + python: "3.1.0" +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Example 2: Instrument a subset of namespaces, matching on names and labels" level="h4" >}} + +This configuration creates two targets blocks: + +- The first block (named `login-service_namespace`): + - enables APM for services in the namespace `login-service`. + - instructs Datadog to instrument services in this namespace with the default version of the Java APM SDK. + - sets environment variables -- `DD_SERVICE`, `DD_ENV`, and `DD_PROFILING_ENABLED` -- for this target group. +- The second block (named `billing-service_apps`) + - enables APM for services in the namespace(s) with label `app:billing-service`. + - instructs Datadog to instrument this set of services with `v3.1.0` of the Python APM SDK. + - sets environment variables -- `DD_SERVICE` and `DD_ENV` -- for this target group. + +{{< highlight yaml "hl_lines=4-28" >}} + apm: + instrumentation: + enabled: true + targets: + - name: "login-service_namespace" + namespaceSelector: + matchNames: + - "login-service" + ddTraceVersions: + java: "default" + ddTraceConfigs: + - name: "DD_SERVICE" + value: "login-service" + - name: "DD_ENV" + value: "prod" + - name: "DD_PROFILING_ENABLED" ## profiling is enabled for all services in this namespace + value: "auto" + - name: "billing-service_apps" + namespaceSelector: + matchLabels: + app: "billing-service" + ddTraceVersions: + python: "3.1.0" + ddTraceConfigs: + - name: "DD_SERVICE" + value: "billing-service" + - name: "DD_ENV" + value: "prod +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Example 3: Instrument different workloads with different tracers" level="h4" >}} + +This configuration does the following: +- enables APM for pods with the following labels: + - `app:db-user`, which marks pods running the `db-user` application. + - `webserver:routing`, which marks pods running the `request-router` application. +- instructs Datadog to use the default versions of the Datadog Tracer SDKs. +- sets several Datadog environment variables to apply to each target group. + +{{< highlight yaml "hl_lines=4-28" >}} + apm: + instrumentation: + enabled: true + targets: + - name: "db-user" + podSelector: + matchLabels: + app: "db-user" + ddTraceVersions: + java: "default" + ddTraceConfigs: ## trace configs set for services in matching pods + - name: "DD_SERVICE" + value: "db-user" + - name: "DD_ENV" + value: "prod" + - name: "DD_DSM_ENABLED" + value: "true" + - name: "user-request-router" + podSelector: + matchLabels: + webserver: "user" + ddTraceVersions: + php: "default" + ddTraceConfigs: + - name: "DD_SERVICE" + value: "user-request-router" + - name: "DD_ENV" + value: "prod +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Example 4: Instrument a pod within a namespace" level="h4" >}} + +This configuration: +- enables APM for pods labeled `app:password-resolver` inside the `login-service` namespace. +- instructs Datadog to use the default version of the Datadog Java Tracer SDK. +- sets several Datadog environment variables to apply to this target. + +{{< highlight yaml "hl_lines=4-28" >}} + apm: + instrumentation: + enabled: true + targets: + - name: "login-service-namespace" + namespaceSelector: + matchNames: + - "login-service" + podSelector: + matchLabels: + app: "password-resolver" + ddTraceVersions: + java: "default" + ddTraceConfigs: + - name: "DD_SERVICE" + value: "password-resolver" + - name: "DD_ENV" + value: "prod" + - name: "DD_PROFILING_ENABLED" + value: "auto" +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Example 5: Instrument a subset of pods using matchExpressions" level="h4" >}} + +This configuration enables APM for all pods except those that have either of the labels `app=app1` or `app=app2`. + +{{< highlight yaml "hl_lines=4-28" >}} + apm: + instrumentation: + enabled: true + targets: + - name: "default-target" + matchExpressions: + - key: app + operator: NotIn + values: + - app1 + - app2 +{{< /highlight >}} + +{{< /collapse-content >}} + +{{% /tab %}} + +{{% tab "Kubernetes (Agent <=v7.63) (Preview)" %}} + +**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. + +### Enabling or disabling instrumentation for namespaces + +You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enabledNamespaces or disabledNamespaces, not both. + +The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: + +{{< collapse-content title="Datadog Operator" level="h4" >}} + +To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-agent.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + features: + apm: + instrumentation: + enabled: true + enabledNamespaces: # Add namespaces to instrument + - default + - applications +{{< /highlight >}} + +To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-agent.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + features: + apm: + instrumentation: + enabled: true + disabledNamespaces: # Add namespaces to not instrument + - default + - applications +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Helm" level="h4" >}} + +To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-values.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + datadog: + apm: + instrumentation: + enabled: true + enabledNamespaces: # Add namespaces to instrument + - namespace_1 + - namespace_2 +{{< /highlight >}} + +To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-values.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + datadog: + apm: + instrumentation: + enabled: true + disabledNamespaces: # Add namespaces to not instrument + - namespace_1 + - namespace_2 +{{< /highlight >}} + +{{< /collapse-content >}} + + +### Specifying tracing library versions + +
Starting with Datadog Cluster Agent v7.52.0+, you can automatically instrument a subset of your applications, based on the tracing libraries you specify.
+ +Specify Datadog tracing libraries and their versions to automatically instrument applications written in those languages. You can configure this in two ways, which are applied in the following order of precedence: + +1. [Specify at the service level](#specifying-at-the-service-level), or +2. [Specify at the cluster level](#specifying-at-the-cluster-level). + +**Default**: If you don't specify any library versions and `apm.instrumentation.enabled=true`, applications written in supported languages are automatically instrumented using the latest tracing library versions. + +#### Specifying at the service level + +To automatically instrument applications in specific pods, add the appropriate language annotation and library version for your application in your pod spec: + +| Language | Pod annotation | +|------------|-----------------------------------------------------------------------| +| Java | `admission.datadoghq.com/java-lib.version: ""` | +| Node.js | `admission.datadoghq.com/js-lib.version: ""` | +| Python | `admission.datadoghq.com/python-lib.version: ""` | +| .NET | `admission.datadoghq.com/dotnet-lib.version: ""` | +| Ruby | `admission.datadoghq.com/ruby-lib.version: ""` | +| PHP | `admission.datadoghq.com/php-lib.version: ""` | + +Replace `` with the desired library version. Available versions are listed in the [Datadog container registries](#container-registries) and tracer source repositories for each language: + +- [Java][34] +- [Node.js][35] +- [Python][36] +- [.NET][37] +- [Ruby][38] +- [PHP][39] + +
Exercise caution when using the latest tag, as major library releases may introduce breaking changes.
+ +For example, to automatically instrument Java applications: + +{{< highlight yaml "hl_lines=10" >}} +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + # ... +spec: + template: + metadata: + annotations: + admission.datadoghq.com/java-lib.version: "" + spec: + containers: + - # ... +{{< /highlight >}} + +#### Specifying at the cluster level + +If you don't enable automatic instrumentation for specific pods using annotations, you can specify which languages to instrument across the entire cluster using the Single Step Instrumentation configuration. When `apm.instrumentation.libVersions` is set, only applications written in the specified languages will be instrumented, using the specified library versions. + +The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: + +{{< collapse-content title="Datadog Operator" level="h4" >}} + +For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-agent.yaml` file: + +{{< highlight yaml "hl_lines=5-8" >}} + features: + apm: + instrumentation: + enabled: true + libVersions: # Add any libraries and versions you want to set + dotnet: "3.2.0" + python: "1.20.6" + js: "4.17.0" +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Helm" level="h4" >}} + +For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-values.yaml` file: + +{{< highlight yaml "hl_lines=5-8" >}} + datadog: + apm: + instrumentation: + enabled: true + libVersions: # Add any libraries and versions you want to set + dotnet: "3.2.0" + python: "1.20.6" + js: "4.17.0" +{{< /highlight >}} + +{{< /collapse-content >}} + + +#### Container registries + +Datadog publishes instrumentation libraries images on gcr.io, Docker Hub, and Amazon ECR: + +| Language | gcr.io | hub.docker.com | gallery.ecr.aws | +|------------|-------------------------------------|---------------------------------------------|-------------------------------------------| +| Java | [gcr.io/datadoghq/dd-lib-java-init][15] | [hub.docker.com/r/datadog/dd-lib-java-init][16] | [gallery.ecr.aws/datadog/dd-lib-java-init][17] | +| Node.js | [gcr.io/datadoghq/dd-lib-js-init][18] | [hub.docker.com/r/datadog/dd-lib-js-init][19] | [gallery.ecr.aws/datadog/dd-lib-js-init][20] | +| Python | [gcr.io/datadoghq/dd-lib-python-init][21] | [hub.docker.com/r/datadog/dd-lib-python-init][22] | [gallery.ecr.aws/datadog/dd-lib-python-init][23] | +| .NET | [gcr.io/datadoghq/dd-lib-dotnet-init][24] | [hub.docker.com/r/datadog/dd-lib-dotnet-init][25] | [gallery.ecr.aws/datadog/dd-lib-dotnet-init][26] | +| Ruby | [gcr.io/datadoghq/dd-lib-ruby-init][27] | [hub.docker.com/r/datadog/dd-lib-ruby-init][28] | [gallery.ecr.aws/datadog/dd-lib-ruby-init][29] | +| PHP | [gcr.io/datadoghq/dd-lib-php-init][30] | [hub.docker.com/r/datadog/dd-lib-php-init][31] | [gallery.ecr.aws/datadog/dd-lib-php-init][32] | + +The `DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY` environment variable in the Datadog Cluster Agent configuration specifies the registry used by the Admission Controller. The default value is `gcr.io/datadoghq`. + +You can pull the tracing library from a different registry by changing it to `docker.io/datadog`, `public.ecr.aws/datadog`, or another URL if you are hosting the images in a local container registry. + +For instructions on changing your container registry, see [Changing Your Container Registry][33]. + +{{% /tab %}} + ## Removing Single Step APM instrumentation from your Agent ### Removing instrumentation for specific services @@ -156,11 +527,37 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v [2]: https://kubernetes.io/docs/tasks/tools/install-kubectl/ [3]: /tracing/metrics/runtime_metrics/ [4]: /tracing/software_catalog/ -[9]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator -[10]: https://app.datadoghq.com/organization-settings/api-keys -[11]: https://app.datadoghq.com/organization-settings/application-keys -[12]: /getting_started/site -[13]: https://v3.helm.sh/docs/intro/install/ -[36]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator +[5]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator +[6]: https://app.datadoghq.com/organization-settings/api-keys +[7]: /getting_started/site +[8]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes +[9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility/#tracer-libraries +[10]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements +[15]: http://gcr.io/datadoghq/dd-lib-java-init +[16]: http://hub.docker.com/r/datadog/dd-lib-java-init +[17]: http://gallery.ecr.aws/datadog/dd-lib-java-init +[18]: http://gcr.io/datadoghq/dd-lib-js-init +[19]: http://hub.docker.com/r/datadog/dd-lib-js-init +[20]: http://gallery.ecr.aws/datadog/dd-lib-js-init +[21]: http://gcr.io/datadoghq/dd-lib-python-init +[22]: http://hub.docker.com/r/datadog/dd-lib-python-init +[23]: http://gallery.ecr.aws/datadog/dd-lib-python-init +[24]: http://gcr.io/datadoghq/dd-lib-dotnet-init +[25]: http://hub.docker.com/r/datadog/dd-lib-dotnet-init +[26]: http://gallery.ecr.aws/datadog/dd-lib-dotnet-init +[27]: http://gcr.io/datadoghq/dd-lib-ruby-init +[28]: http://hub.docker.com/r/datadog/dd-lib-ruby-init +[29]: http://gallery.ecr.aws/datadog/dd-lib-ruby-init +[30]: http://gcr.io/datadoghq/dd-lib-php-init +[31]: http://hub.docker.com/r/datadog/dd-lib-php-init +[32]: http://gallery.ecr.aws/datadog/dd-lib-php-init +[33]: /containers/guide/changing_container_registry/ +[34]: https://github.com/DataDog/dd-trace-java/releases +[35]: https://github.com/DataDog/dd-trace-js/releases +[36]: https://github.com/DataDog/dd-trace-py/releases +[37]: https://github.com/DataDog/dd-trace-dotnet/releases +[38]: https://github.com/DataDog/dd-trace-rb/releases +[39]: https://github.com/DataDog/dd-trace-php/releases + diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 5232c0aca61..511845d81b7 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -36,6 +36,30 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v ## Advanced Options +When you run the one-line installation command, there are a few options to customize your experience: + +### `DD_APM_INSTRUMENTATION_LIBRARIES` - customizing APM libraries + +By default, Java, Python, Ruby, Node.js, PHP and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. + +Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: + +- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1"` - install only the Java Datadog APM library pinned to the major version 1 release line. +- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 2 respectively. +- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. + + +Available versions are listed in source repositories for each language: + +- [Java][8] (`java`) +- [Node.js][9] (`js`) +- [Python][10] (`python`) +- [.NET][11] (`dotnet`) +- [Ruby][12] (`ruby`) +- [PHP][13] (`php`) + + + ## Removing Single Step APM instrumentation from your Agent ### Removing instrumentation for specific services @@ -50,5 +74,11 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v [2]: https://app.datadoghq.com/organization-settings/api-keys [3]: /tracing/metrics/runtime_metrics/ [4]: /tracing/software_catalog/ +[8]: https://github.com/DataDog/dd-trace-java/releases +[9]: https://github.com/DataDog/dd-trace-js/releases +[10]: https://github.com/DataDog/dd-trace-py/releases +[11]: https://github.com/DataDog/dd-trace-dotnet/releases +[12]: https://github.com/DataDog/dd-trace-rb/releases +[13]: https://github.com/DataDog/dd-trace-php/releases From e4dc13960a83f760190dd4f70a56f841f06e9c76 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 14 Apr 2025 11:58:32 -0400 Subject: [PATCH 05/33] move Remove steps into individual page --- .../single-step-apm/_index.md | 132 +----------------- .../single-step-apm/docker.md | 22 +++ .../single-step-apm/kubernetes.md | 68 +++++++++ .../single-step-apm/linux.md | 21 ++- 4 files changed, 111 insertions(+), 132 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 19f1e946aef..85b066bb15d 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -22,140 +22,10 @@ If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentat The following examples show how it works for each deployment type. -{{< partial name="apm/apm-single-step.html" >}} +{{< partial name="apm/apm-single-step.html" >}}
-## Removing Single Step APM instrumentation from your Agent - -If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: - -### Removing instrumentation for specific services - -To remove APM instrumentation and stop sending traces from a specific service, follow these steps: - -{{< tabs >}} -{{% tab "Linux host or VM" %}} - -1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: - - ```shell - DD_INSTRUMENT_SERVICE_WITH_APM=false - ``` -2. Restart the service. - -{{% /tab %}} - -{{% tab "Docker" %}} - -1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: - ```shell - docker run -e DD_INSTRUMENT_SERVICE_WITH_APM=false - ``` -2. Restart the service. -{{% /tab %}} - -{{% tab "Kubernetes" %}} - -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - -#### Using workload selection (recommended) - -With workload selection, you can enable and disable tracing for specific applications. [See configuration details here](#advanced-options). - -#### Using the Datadog Admission Controller - -As an alternative, or for a version of the agent that does not support workload selection, you can also disable pod mutation by adding a label to your pod. - -
In addition to disabling SSI, the following steps disable other mutating webhooks. Use with caution.
- -1. Set the `admission.datadoghq.com/enabled:` label to `"false"` for the pod spec: - ```yaml - spec: - template: - metadata: - labels: - admission.datadoghq.com/enabled: "false" - ``` -2. Apply the configuration: - ```shell - kubectl apply -f /path/to/your/deployment.yaml - ``` -3. Restart the services you want to remove instrumentation for. - -{{% /tab %}} -{{< /tabs >}} - -### Removing APM for all services on the infrastructure - -To stop producing traces, uninstall APM and restart the infrastructure: - -{{< tabs >}} -{{% tab "Linux host or VM" %}} - -1. Run: - ```shell - dd-host-install --uninstall - ``` -2. Restart the services on the host or VM. - -{{% /tab %}} - -{{% tab "Docker" %}} - -1. Run: - ```shell - dd-container-install --uninstall - ``` -2. Restart Docker: - ```shell - systemctl restart docker - ``` - Or use the equivalent for your environment. - -{{% /tab %}} - -{{% tab "Kubernetes" %}} - -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - -The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: - -{{< collapse-content title="Datadog Operator" level="h4" >}} - -1. Set `instrumentation.enabled=false` in `datadog-agent.yaml`: - ```yaml - features: - apm: - instrumentation: - enabled: false - ``` - -2. Deploy the Datadog Agent with the updated configuration file: - ```shell - kubectl apply -f /path/to/your/datadog-agent.yaml - ``` -{{< /collapse-content >}} - -{{< collapse-content title="Helm" level="h4" >}} - -1. Set `instrumentation.enabled=false` in `datadog-values.yaml`: - ```yaml - datadog: - apm: - instrumentation: - enabled: false - ``` - -2. Run the following command: - ```shell - helm upgrade datadog-agent -f datadog-values.yaml datadog/datadog - ``` -{{< /collapse-content >}} - -{{% /tab %}} -{{< /tabs >}} - ## Troubleshooting ### Single Step Instrumentation is not taking effect diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index e951b3f39bb..732b25fbd7d 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -71,10 +71,32 @@ Available versions are listed in source repositories for each language: ## Removing Single Step APM instrumentation from your Agent +If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: + ### Removing instrumentation for specific services +To remove APM instrumentation and stop sending traces from a specific service, follow these steps: + +1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: + ```shell + docker run -e DD_INSTRUMENT_SERVICE_WITH_APM=false + ``` +2. Restart the service. + ### Removing APM for all services on the infrastructure +To stop producing traces, uninstall APM and restart the infrastructure: + +1. Run: + ```shell + dd-container-install --uninstall + ``` +2. Restart Docker: + ```shell + systemctl restart docker + ``` + Or use the equivalent for your environment. + ## Further reading {{< partial name="whats-next/whats-next.html" >}} diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index 2b2a38a39c5..2906685313e 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -515,10 +515,78 @@ For instructions on changing your container registry, see [Changing Your Contain ## Removing Single Step APM instrumentation from your Agent +If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: + ### Removing instrumentation for specific services +To remove APM instrumentation and stop sending traces from a specific service, follow these steps: + +**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. + +#### Using workload selection (recommended) + +With workload selection, you can enable and disable tracing for specific applications. [See configuration details here](#advanced-options). + +#### Using the Datadog Admission Controller + +As an alternative, or for a version of the agent that does not support workload selection, you can also disable pod mutation by adding a label to your pod. + +
In addition to disabling SSI, the following steps disable other mutating webhooks. Use with caution.
+ +1. Set the `admission.datadoghq.com/enabled:` label to `"false"` for the pod spec: + ```yaml + spec: + template: + metadata: + labels: + admission.datadoghq.com/enabled: "false" + ``` +2. Apply the configuration: + ```shell + kubectl apply -f /path/to/your/deployment.yaml + ``` +3. Restart the services you want to remove instrumentation for. + ### Removing APM for all services on the infrastructure +To stop producing traces, uninstall APM and restart the infrastructure: + +**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. + +The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: + +{{< collapse-content title="Datadog Operator" level="h4" >}} + +1. Set `instrumentation.enabled=false` in `datadog-agent.yaml`: + ```yaml + features: + apm: + instrumentation: + enabled: false + ``` + +2. Deploy the Datadog Agent with the updated configuration file: + ```shell + kubectl apply -f /path/to/your/datadog-agent.yaml + ``` +{{< /collapse-content >}} + +{{< collapse-content title="Helm" level="h4" >}} + +1. Set `instrumentation.enabled=false` in `datadog-values.yaml`: + ```yaml + datadog: + apm: + instrumentation: + enabled: false + ``` + +2. Run the following command: + ```shell + helm upgrade datadog-agent -f datadog-values.yaml datadog/datadog + ``` +{{< /collapse-content >}} + ## Further reading {{< partial name="whats-next/whats-next.html" >}} diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 511845d81b7..d1c67bde2e9 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -15,7 +15,7 @@ Linux host or VM ## Requirements -TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here +TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here ## Enable APM on your applications @@ -62,10 +62,29 @@ Available versions are listed in source repositories for each language: ## Removing Single Step APM instrumentation from your Agent +If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: + ### Removing instrumentation for specific services +To remove APM instrumentation and stop sending traces from a specific service, follow these steps: + +1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: + + ```shell + DD_INSTRUMENT_SERVICE_WITH_APM=false + ``` +2. Restart the service. + ### Removing APM for all services on the infrastructure +To stop producing traces, uninstall APM and restart the infrastructure: + +1. Run: + ```shell + dd-host-install --uninstall + ``` +2. Restart the services on the host or VM. + ## Further reading {{< partial name="whats-next/whats-next.html" >}} From 2d0ebf274353f775f0866cfaf748b99079bc256a Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 14 Apr 2025 13:32:12 -0400 Subject: [PATCH 06/33] add overview sections and change collapse to tabs on kubernetes page --- .../single-step-apm/docker.md | 10 ++-- .../single-step-apm/kubernetes.md | 49 +++++++++++-------- .../single-step-apm/linux.md | 15 ++---- 3 files changed, 36 insertions(+), 38 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index 732b25fbd7d..91c650747c5 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -11,13 +11,11 @@ further_reading: ## Overview -## Requirements - -TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here +On a Docker Linux container, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration steps required. ## Enable APM on your applications -For a Docker Linux container: +To enable APM on a Docker Linux container: 1. Run the one-line installation command: ```shell @@ -48,7 +46,7 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v When you run the one-line installation command, there are a few options to customize your experience: -### `DD_APM_INSTRUMENTATION_LIBRARIES` - customizing APM libraries +### Customizing APM libraries By default, Java, Python, Ruby, Node.js and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. @@ -75,7 +73,7 @@ If you don't want to collect trace data for a particular service, host, VM, or c ### Removing instrumentation for specific services -To remove APM instrumentation and stop sending traces from a specific service, follow these steps: +To remove APM instrumentation and stop sending traces from a specific service: 1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: ```shell diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index 2906685313e..0b28d65b5e2 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -11,14 +11,18 @@ further_reading: ## Overview +On a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration steps required. + ## Requirements -TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here +- Kubernetes v1.20+ +- [`Helm`][1] for deploying the Datadog Operator. +- [`Kubectl` CLI][2] for installing the Datadog Agent. + +
Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63.
## Enable APM on your applications -*Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - You can enable APM by installing the Agent with either: - Datadog Operator @@ -26,13 +30,9 @@ You can enable APM by installing the Agent with either:
Single Step Instrumentation doesn't instrument applications in the namespace where you install the Datadog Agent. It's recommended to install the Agent in a separate namespace in your cluster where you don't run your applications.
-### Requirements +{{< tabs >}} +{{% tab "Installing with Datadog Operator" %}} -- Kubernetes v1.20+ -- [`Helm`][1] for deploying the Datadog Operator. -- [`Kubectl` CLI][2] for installing the Datadog Agent. - -{{< collapse-content title="Installing with Datadog Operator" level="h4" >}} Follow these steps to enable Single Step Instrumentation across your entire cluster with the Datadog Operator. This automatically sends traces for all applications in the cluster that are written in supported languages. **Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). @@ -40,12 +40,15 @@ Follow these steps to enable Single Step Instrumentation across your entire clus To enable Single Step Instrumentation with the Datadog Operator: 1. Install the [Datadog Operator][5] with Helm: + ```shell helm repo add datadog https://helm.datadoghq.com helm repo update helm install my-datadog-operator datadog/datadog-operator ``` + 2. Create a Kubernetes secret to store your Datadog [API key][6]: + ```shell kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY ``` @@ -89,9 +92,11 @@ To enable Single Step Instrumentation with the Datadog Operator: kubectl apply -f /path/to/your/datadog-agent.yaml ``` 5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. -{{< /collapse-content >}} -{{< collapse-content title="Installing with Helm" level="h4" >}} +{{% /tab %}} + +{{% tab "Installing with Helm" %}} + Follow these steps to enable Single Step Instrumentation across your entire cluster with Helm. This automatically sends traces for all applications in the cluster that are written in supported languages. **Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). @@ -136,14 +141,17 @@ To enable Single Step Instrumentation with Helm: ``` 5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. -{{< /collapse-content >}} +{{% /tab %}} +{{< /tabs >}} After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. -## Advanced Options +## Advanced options When you run the one-line installation command, there are a few options to customize your experience: +{{< tabs >}} + {{% tab "Kubernetes (Agent v7.64+)" %}} ### Configuring instrumentation for namespaces and pods @@ -512,6 +520,7 @@ You can pull the tracing library from a different registry by changing it to `do For instructions on changing your container registry, see [Changing Your Container Registry][33]. {{% /tab %}} +{{< /tabs >}} ## Removing Single Step APM instrumentation from your Agent @@ -521,8 +530,6 @@ If you don't want to collect trace data for a particular service, host, VM, or c To remove APM instrumentation and stop sending traces from a specific service, follow these steps: -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - #### Using workload selection (recommended) With workload selection, you can enable and disable tracing for specific applications. [See configuration details here](#advanced-options). @@ -551,11 +558,10 @@ As an alternative, or for a version of the agent that does not support workload To stop producing traces, uninstall APM and restart the infrastructure: -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: -{{< collapse-content title="Datadog Operator" level="h4" >}} +{{< tabs >}} +{{% tab "Datadog Operator" %}} 1. Set `instrumentation.enabled=false` in `datadog-agent.yaml`: ```yaml @@ -569,9 +575,9 @@ The file you need to configure depends on if you enabled Single Step Instrumenta ```shell kubectl apply -f /path/to/your/datadog-agent.yaml ``` -{{< /collapse-content >}} +{{% /tab %}} -{{< collapse-content title="Helm" level="h4" >}} +{{% tab "Helm" %}} 1. Set `instrumentation.enabled=false` in `datadog-values.yaml`: ```yaml @@ -585,7 +591,8 @@ The file you need to configure depends on if you enabled Single Step Instrumenta ```shell helm upgrade datadog-agent -f datadog-values.yaml datadog/datadog ``` -{{< /collapse-content >}} +{{% /tab %}} +{{< /tabs >}} ## Further reading diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index d1c67bde2e9..29440696edc 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -11,15 +11,11 @@ further_reading: ## Overview -Linux host or VM - -## Requirements - -TODO: Determine if we want to remove platform-specific requirements from Compatibility page and instead include them here +On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration steps required. ## Enable APM on your applications -For an Ubuntu host: +To enable APM on a Ubuntu host: 1. Run the one-line installation command: @@ -38,7 +34,7 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v When you run the one-line installation command, there are a few options to customize your experience: -### `DD_APM_INSTRUMENTATION_LIBRARIES` - customizing APM libraries +### Customizing APM libraries By default, Java, Python, Ruby, Node.js, PHP and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. @@ -48,7 +44,6 @@ Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: - `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:2"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 2 respectively. - `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. - Available versions are listed in source repositories for each language: - [Java][8] (`java`) @@ -58,15 +53,13 @@ Available versions are listed in source repositories for each language: - [Ruby][12] (`ruby`) - [PHP][13] (`php`) - - ## Removing Single Step APM instrumentation from your Agent If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: ### Removing instrumentation for specific services -To remove APM instrumentation and stop sending traces from a specific service, follow these steps: +To remove APM instrumentation and stop sending traces from a specific service: 1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: From 6c035f2b53d8d7d53a656ee779a357d4aa054ed3 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 14 Apr 2025 13:42:10 -0400 Subject: [PATCH 07/33] language tweaks - active verbs for headers --- .../single-step-apm/_index.md | 2 +- .../single-step-apm/docker.md | 14 +++++------ .../single-step-apm/kubernetes.md | 24 +++++++++---------- .../single-step-apm/linux.md | 12 +++++----- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 85b066bb15d..182aec21cec 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -20,7 +20,7 @@ To see requirements for compatible languages, operating systems, and architectur If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentation** option selected, the Agent is installed and configured to enable APM. This automatically instruments your application, without any additional installation or configuration steps. -The following examples show how it works for each deployment type. +Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: {{< partial name="apm/apm-single-step.html" >}} diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index 91c650747c5..26e062759a2 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -11,11 +11,11 @@ further_reading: ## Overview -On a Docker Linux container, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration steps required. +In a Docker Linux container, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration required. ## Enable APM on your applications -To enable APM on a Docker Linux container: +To enable APM in a Docker Linux container: 1. Run the one-line installation command: ```shell @@ -44,9 +44,9 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v ## Advanced Options -When you run the one-line installation command, there are a few options to customize your experience: +When you run the one-line installation command, there are options to customize your experience: -### Customizing APM libraries +### Customize APM libraries By default, Java, Python, Ruby, Node.js and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. @@ -67,11 +67,11 @@ Available versions are listed in source repositories for each language: - [PHP][13] (`php`) -## Removing Single Step APM instrumentation from your Agent +## Remove Single Step APM instrumentation from your Agent If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: -### Removing instrumentation for specific services +### Remove instrumentation for specific services To remove APM instrumentation and stop sending traces from a specific service: @@ -81,7 +81,7 @@ To remove APM instrumentation and stop sending traces from a specific service: ``` 2. Restart the service. -### Removing APM for all services on the infrastructure +### Remove APM for all services on the infrastructure To stop producing traces, uninstall APM and restart the infrastructure: diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index 0b28d65b5e2..bfa1c6e58e4 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -11,7 +11,7 @@ further_reading: ## Overview -On a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration steps required. +In a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration required. ## Requirements @@ -154,7 +154,7 @@ When you run the one-line installation command, there are a few options to custo {{% tab "Kubernetes (Agent v7.64+)" %}} -### Configuring instrumentation for namespaces and pods +### Configure instrumentation for namespaces and pods By default, Single Step Instrumentation instruments all services in all namespaces in your cluster. Alternatively, you can create targeting blocks with the `targets` label to specify which workloads to instrument and what configurations to apply. @@ -343,7 +343,7 @@ This configuration enables APM for all pods except those that have either of the **Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. -### Enabling or disabling instrumentation for namespaces +### Enable or disable instrumentation for namespaces You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enabledNamespaces or disabledNamespaces, not both. @@ -406,7 +406,7 @@ To disable instrumentation for specific namespaces, add `disabledNamespaces` con {{< /collapse-content >}} -### Specifying tracing library versions +### Specify tracing library versions
Starting with Datadog Cluster Agent v7.52.0+, you can automatically instrument a subset of your applications, based on the tracing libraries you specify.
@@ -417,7 +417,7 @@ Specify Datadog tracing libraries and their versions to automatically instrument **Default**: If you don't specify any library versions and `apm.instrumentation.enabled=true`, applications written in supported languages are automatically instrumented using the latest tracing library versions. -#### Specifying at the service level +#### Specify at the service level To automatically instrument applications in specific pods, add the appropriate language annotation and library version for your application in your pod spec: @@ -459,7 +459,7 @@ spec: - # ... {{< /highlight >}} -#### Specifying at the cluster level +#### Specify at the cluster level If you don't enable automatic instrumentation for specific pods using annotations, you can specify which languages to instrument across the entire cluster using the Single Step Instrumentation configuration. When `apm.instrumentation.libVersions` is set, only applications written in the specified languages will be instrumented, using the specified library versions. @@ -522,19 +522,19 @@ For instructions on changing your container registry, see [Changing Your Contain {{% /tab %}} {{< /tabs >}} -## Removing Single Step APM instrumentation from your Agent +## Remove Single Step APM instrumentation from your Agent If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: -### Removing instrumentation for specific services +### Remove instrumentation for specific services -To remove APM instrumentation and stop sending traces from a specific service, follow these steps: +To remove APM instrumentation and stop sending traces from a specific service, you can do one of the following: -#### Using workload selection (recommended) +#### Use workload selection (recommended) With workload selection, you can enable and disable tracing for specific applications. [See configuration details here](#advanced-options). -#### Using the Datadog Admission Controller +#### Use the Datadog Admission Controller As an alternative, or for a version of the agent that does not support workload selection, you can also disable pod mutation by adding a label to your pod. @@ -554,7 +554,7 @@ As an alternative, or for a version of the agent that does not support workload ``` 3. Restart the services you want to remove instrumentation for. -### Removing APM for all services on the infrastructure +### Remove APM for all services on the infrastructure To stop producing traces, uninstall APM and restart the infrastructure: diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 29440696edc..cc0b67a1396 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -11,7 +11,7 @@ further_reading: ## Overview -On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration steps required. +On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration required. ## Enable APM on your applications @@ -32,9 +32,9 @@ After you complete these steps, you may want to enable [runtime metrics][3] or v ## Advanced Options -When you run the one-line installation command, there are a few options to customize your experience: +When you run the one-line installation command, there are options to customize your experience: -### Customizing APM libraries +### Customize APM libraries By default, Java, Python, Ruby, Node.js, PHP and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. @@ -53,11 +53,11 @@ Available versions are listed in source repositories for each language: - [Ruby][12] (`ruby`) - [PHP][13] (`php`) -## Removing Single Step APM instrumentation from your Agent +## Remove Single Step APM instrumentation from your Agent If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: -### Removing instrumentation for specific services +### Remove instrumentation for specific services To remove APM instrumentation and stop sending traces from a specific service: @@ -68,7 +68,7 @@ To remove APM instrumentation and stop sending traces from a specific service: ``` 2. Restart the service. -### Removing APM for all services on the infrastructure +### Remove APM for all services on the infrastructure To stop producing traces, uninstall APM and restart the infrastructure: From 01216f403e44b82d50e6435702362df4f0df1c0a Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 14 Apr 2025 14:03:17 -0400 Subject: [PATCH 08/33] link fixing --- .../single-step-apm/docker.md | 3 +- .../single-step-apm/kubernetes.md | 80 ++++++++++--------- .../single-step-apm/linux.md | 3 +- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index 26e062759a2..49507f4d78e 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -11,7 +11,7 @@ further_reading: ## Overview -In a Docker Linux container, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration required. +In a Docker Linux container, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][14] your applications in one step, with no additional configuration required. ## Enable APM on your applications @@ -109,5 +109,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [11]: https://github.com/DataDog/dd-trace-dotnet/releases [12]: https://github.com/DataDog/dd-trace-rb/releases [13]: https://github.com/DataDog/dd-trace-php/releases +[14]: /tracing/glossary/#instrumentation diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index bfa1c6e58e4..f50409a8d19 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -11,7 +11,7 @@ further_reading: ## Overview -In a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration required. +In a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][10] your applications in one step, with no additional configuration required. ## Requirements @@ -93,6 +93,10 @@ To enable Single Step Instrumentation with the Datadog Operator: ``` 5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. +[5]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator +[6]: https://app.datadoghq.com/organization-settings/api-keys +[7]: /getting_started/site + {{% /tab %}} {{% tab "Installing with Helm" %}} @@ -108,7 +112,7 @@ To enable Single Step Instrumentation with Helm: helm repo add datadog https://helm.datadoghq.com helm repo update ``` -2. Create a Kubernetes secret to store your Datadog [API key][10]: +2. Create a Kubernetes secret to store your [Datadog API key][10]: ```shell kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY ``` @@ -141,6 +145,9 @@ To enable Single Step Instrumentation with Helm: ``` 5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. +[10]: https://app.datadoghq.com/organization-settings/api-keys +[12]: /getting_started/site + {{% /tab %}} {{< /tabs >}} @@ -337,12 +344,14 @@ This configuration enables APM for all pods except those that have either of the {{< /collapse-content >}} +[8]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes +[9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility/#tracer-libraries +[10]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements + {{% /tab %}} {{% tab "Kubernetes (Agent <=v7.63) (Preview)" %}} -**Note**: Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63. - ### Enable or disable instrumentation for namespaces You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enabledNamespaces or disabledNamespaces, not both. @@ -412,8 +421,8 @@ To disable instrumentation for specific namespaces, add `disabledNamespaces` con Specify Datadog tracing libraries and their versions to automatically instrument applications written in those languages. You can configure this in two ways, which are applied in the following order of precedence: -1. [Specify at the service level](#specifying-at-the-service-level), or -2. [Specify at the cluster level](#specifying-at-the-cluster-level). +1. [Specify at the service level](#specify-at-the-service-level), or +2. [Specify at the cluster level](#specify-at-the-cluster-level). **Default**: If you don't specify any library versions and `apm.instrumentation.enabled=true`, applications written in supported languages are automatically instrumented using the latest tracing library versions. @@ -519,6 +528,33 @@ You can pull the tracing library from a different registry by changing it to `do For instructions on changing your container registry, see [Changing Your Container Registry][33]. +[15]: http://gcr.io/datadoghq/dd-lib-java-init +[16]: http://hub.docker.com/r/datadog/dd-lib-java-init +[17]: http://gallery.ecr.aws/datadog/dd-lib-java-init +[18]: http://gcr.io/datadoghq/dd-lib-js-init +[19]: http://hub.docker.com/r/datadog/dd-lib-js-init +[20]: http://gallery.ecr.aws/datadog/dd-lib-js-init +[21]: http://gcr.io/datadoghq/dd-lib-python-init +[22]: http://hub.docker.com/r/datadog/dd-lib-python-init +[23]: http://gallery.ecr.aws/datadog/dd-lib-python-init +[24]: http://gcr.io/datadoghq/dd-lib-dotnet-init +[25]: http://hub.docker.com/r/datadog/dd-lib-dotnet-init +[26]: http://gallery.ecr.aws/datadog/dd-lib-dotnet-init +[27]: http://gcr.io/datadoghq/dd-lib-ruby-init +[28]: http://hub.docker.com/r/datadog/dd-lib-ruby-init +[29]: http://gallery.ecr.aws/datadog/dd-lib-ruby-init +[30]: http://gcr.io/datadoghq/dd-lib-php-init +[31]: http://hub.docker.com/r/datadog/dd-lib-php-init +[32]: http://gallery.ecr.aws/datadog/dd-lib-php-init +[33]: /containers/guide/changing_container_registry/ +[34]: https://github.com/DataDog/dd-trace-java/releases +[35]: https://github.com/DataDog/dd-trace-js/releases +[36]: https://github.com/DataDog/dd-trace-py/releases +[37]: https://github.com/DataDog/dd-trace-dotnet/releases +[38]: https://github.com/DataDog/dd-trace-rb/releases +[39]: https://github.com/DataDog/dd-trace-php/releases + + {{% /tab %}} {{< /tabs >}} @@ -532,7 +568,7 @@ To remove APM instrumentation and stop sending traces from a specific service, y #### Use workload selection (recommended) -With workload selection, you can enable and disable tracing for specific applications. [See configuration details here](#advanced-options). +With workload selection (available for Agent v7.64+), you can enable and disable tracing for specific applications. [See configuration details here](#advanced-options). #### Use the Datadog Admission Controller @@ -602,37 +638,9 @@ The file you need to configure depends on if you enabled Single Step Instrumenta [2]: https://kubernetes.io/docs/tasks/tools/install-kubectl/ [3]: /tracing/metrics/runtime_metrics/ [4]: /tracing/software_catalog/ -[5]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator -[6]: https://app.datadoghq.com/organization-settings/api-keys -[7]: /getting_started/site [8]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes [9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility/#tracer-libraries -[10]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements -[15]: http://gcr.io/datadoghq/dd-lib-java-init -[16]: http://hub.docker.com/r/datadog/dd-lib-java-init -[17]: http://gallery.ecr.aws/datadog/dd-lib-java-init -[18]: http://gcr.io/datadoghq/dd-lib-js-init -[19]: http://hub.docker.com/r/datadog/dd-lib-js-init -[20]: http://gallery.ecr.aws/datadog/dd-lib-js-init -[21]: http://gcr.io/datadoghq/dd-lib-python-init -[22]: http://hub.docker.com/r/datadog/dd-lib-python-init -[23]: http://gallery.ecr.aws/datadog/dd-lib-python-init -[24]: http://gcr.io/datadoghq/dd-lib-dotnet-init -[25]: http://hub.docker.com/r/datadog/dd-lib-dotnet-init -[26]: http://gallery.ecr.aws/datadog/dd-lib-dotnet-init -[27]: http://gcr.io/datadoghq/dd-lib-ruby-init -[28]: http://hub.docker.com/r/datadog/dd-lib-ruby-init -[29]: http://gallery.ecr.aws/datadog/dd-lib-ruby-init -[30]: http://gcr.io/datadoghq/dd-lib-php-init -[31]: http://hub.docker.com/r/datadog/dd-lib-php-init -[32]: http://gallery.ecr.aws/datadog/dd-lib-php-init -[33]: /containers/guide/changing_container_registry/ -[34]: https://github.com/DataDog/dd-trace-java/releases -[35]: https://github.com/DataDog/dd-trace-js/releases -[36]: https://github.com/DataDog/dd-trace-py/releases -[37]: https://github.com/DataDog/dd-trace-dotnet/releases -[38]: https://github.com/DataDog/dd-trace-rb/releases -[39]: https://github.com/DataDog/dd-trace-php/releases +[10]: /tracing/glossary/#instrumentation diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index cc0b67a1396..f8d242e8de4 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -11,7 +11,7 @@ further_reading: ## Overview -On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][4] your applications in one step, with no additional configuration required. +On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][14] your applications in one step, with no additional configuration required. ## Enable APM on your applications @@ -92,5 +92,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [11]: https://github.com/DataDog/dd-trace-dotnet/releases [12]: https://github.com/DataDog/dd-trace-rb/releases [13]: https://github.com/DataDog/dd-trace-php/releases +[14]: /tracing/glossary/#instrumentation From 1b00a6c09685ec09b10914d3635ca6b4233744ee Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 28 Apr 2025 15:41:00 -0400 Subject: [PATCH 09/33] update landing page --- .../single-step-apm/_index.md | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 5c0c6e9a330..c87ab2d80e6 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -15,11 +15,9 @@ further_reading: --- ## Overview -Single Step Instrumentation (SSI) for APM installs the Datadog Agent and [instruments][4] your applications in one step, with no additional configuration steps required. +Single Step Instrumentation (SSI) automatically installs the Datadog APM SDKs with no additional configuration required, reducing onboarding time from days to minutes. -## Compatibility - -To see requirements for compatible languages, operating systems, and architectures, see [Single Step Instrumentation compatibility][6]. +For more information about how SSI works, read the [guide on how injectors work with SSI][8]. ## Enabling APM on your applications @@ -31,6 +29,20 @@ Follow the relevant documentation to learn more about Single Step Instrumentatio
+
To see requirements for compatible languages, operating systems, and architectures, see Single Step Instrumentation compatibility.
+ +## Enabling additional APM features + +After installing the Datadog APM SDK with SSI, you can configure additional tracing-based features. These features use your application traces to provide enhanced visibility, security, and performance insights. + +The available features and setup methods depend on your platform: + +| Configuration method | Description | Supported platforms | +|:---|:---|:---| +| Configure in `application_monitoring.yaml` | Enable features across all services on a host without modifying application command lines. | Linux only | +| Configure with [workload targeting][9] | By default, Single Step Instrumentation instruments all services in all namespaces. Use workload targeting to limit instrumentation to specific namespaces, pods, or workloads, and apply custom configurations. | Kubernetes only | +| [Set environment variables][10] | Enable features by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | + ## Troubleshooting ### Single Step Instrumentation is not taking effect @@ -51,3 +63,6 @@ Single Step Instrumentation automatically disables when it detects [custom instr [5]: /containers/cluster_agent/admission_controller/ [6]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility [7]: /tracing/trace_collection/custom_instrumentation/ +[8]: /tracing/guide/injectors +[9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes/?tab=installingwithdatadogoperator#configure-instrumentation-for-namespaces-and-pods +[10]: /tracing/trace_collection/library_config/ \ No newline at end of file From 910dc6cb14f0b5fa57ddbcff3c41364e15a434b4 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 28 Apr 2025 15:47:42 -0400 Subject: [PATCH 10/33] small tweak to injector guide language --- .../automatic_instrumentation/single-step-apm/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index c87ab2d80e6..85d02da7196 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -17,7 +17,7 @@ further_reading: Single Step Instrumentation (SSI) automatically installs the Datadog APM SDKs with no additional configuration required, reducing onboarding time from days to minutes. -For more information about how SSI works, read the [guide on how injectors work with SSI][8]. +See the [injector guide for Single Step Instrumentation][8] to learn how SSI works. ## Enabling APM on your applications From 0c9137b6c0b7498e7e30bf584f6208d32fa3d6ef Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 28 Apr 2025 16:16:27 -0400 Subject: [PATCH 11/33] simplify setup instructions on docker and linux pages and add a next steps section to homepage --- .../single-step-apm/_index.md | 11 ++++++- .../single-step-apm/docker.md | 29 ++++--------------- .../single-step-apm/linux.md | 19 ++++-------- 3 files changed, 20 insertions(+), 39 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 85d02da7196..a0090631d41 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -52,6 +52,13 @@ Single Step Instrumentation automatically disables when it detects [custom instr 1. Remove any existing custom instrumentation code. 1. Restart your application. +## Next steps + +After setting up APM with Single Step Instrumentation, you may want to: + +- Enable [runtime metrics][11] to monitor CPU, memory, and other application-level stats. +- View observability data from your services in the [Software Catalog][12]. + ## Further reading {{< partial name="whats-next/whats-next.html" >}} @@ -65,4 +72,6 @@ Single Step Instrumentation automatically disables when it detects [custom instr [7]: /tracing/trace_collection/custom_instrumentation/ [8]: /tracing/guide/injectors [9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes/?tab=installingwithdatadogoperator#configure-instrumentation-for-namespaces-and-pods -[10]: /tracing/trace_collection/library_config/ \ No newline at end of file +[10]: /tracing/trace_collection/library_config/ +[11]: /tracing/metrics/runtime_metrics/ +[12]: /tracing/software_catalog/ \ No newline at end of file diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index ad3c723e0f8..01135931aa5 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -17,30 +17,10 @@ In a Docker Linux container, use Single Step Instrumentation (SSI) for APM to in To enable APM in a Docker Linux container: -1. Run the one-line installation command: - ```shell - DD_APM_INSTRUMENTATION_ENABLED=docker DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:3,js:5,dotnet:3,php:1" DD_NO_AGENT_INSTALL=true bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)" - ``` -2. Configure the Agent in Docker: - ```shell - docker run -d --name dd-agent \ - -e DD_API_KEY= \ - -e DD_APM_ENABLED=true \ - -e DD_ENV= \ - -e DD_APM_NON_LOCAL_TRAFFIC=true \ - -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \ - -e DD_APM_RECEIVER_SOCKET=/var/run/datadog/apm.socket \ - -e DD_DOGSTATSD_SOCKET=/var/run/datadog/dsd.socket \ - -v /var/run/datadog:/var/run/datadog \ - -v /var/run/docker.sock:/var/run/docker.sock:ro \ - gcr.io/datadoghq/agent:7 - ``` - Replace `` with your [Datadog API key][5] and `` with the environment your Agent is installed on (for example, `staging`). -
See Advanced options for more options.
-3. Restart the Docker containers. -4. [Explore the performance observability of your services in Datadog][2]. - -After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. +1. In the Datadog app, navigate to the [Install the Datadog Agent on Docker][15] page. +1. Turn on **APM Instrumentation**. +1. Copy and run the Agent installation command in your Docker container. +1. Restart your applications. ## Advanced Options @@ -109,5 +89,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [12]: https://github.com/DataDog/dd-trace-rb/releases [13]: https://github.com/DataDog/dd-trace-php/releases [14]: /tracing/glossary/#instrumentation +[15]: https://app.datadoghq.com/fleet/install-agent/latest?platform=docker diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 0b6a8eb84d2..c29ce068b29 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -17,18 +17,10 @@ On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install To enable APM on a Ubuntu host: -1. Run the one-line installation command: - - ```shell - DD_API_KEY= DD_SITE="" DD_APM_INSTRUMENTATION_ENABLED=host DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:3,js:5,dotnet:3,php:1" DD_ENV= bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)" - ``` - - Replace `` with your [Datadog API key][2], `` with your [Datadog site][1], and `` with the environment your Agent is installed on (for example, `staging`). -
See Advanced options for more options.
-2. Start a new shell session. -3. Restart the services on the host or VM. - -After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. +1. In the Datadog app, navigate to the [Install the Datadog Agent on Linux][15] page. +1. Turn on **APM Instrumentation**. +1. Copy and run the Agent installation command on your Linux host or VM. +1. Restart your applications. ## Advanced Options @@ -84,8 +76,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [1]: /getting_started/site/ [2]: https://app.datadoghq.com/organization-settings/api-keys -[3]: /tracing/metrics/runtime_metrics/ -[4]: /tracing/software_catalog/ [8]: https://github.com/DataDog/dd-trace-java/releases [9]: https://github.com/DataDog/dd-trace-js/releases [10]: https://github.com/DataDog/dd-trace-py/releases @@ -93,5 +83,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [12]: https://github.com/DataDog/dd-trace-rb/releases [13]: https://github.com/DataDog/dd-trace-php/releases [14]: /tracing/glossary/#instrumentation +[15]: https://app.datadoghq.com/fleet/install-agent/latest?platform=linux From 07018e783fd9e98c65d6d6b953bd8d2c7cecd293 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 28 Apr 2025 17:01:29 -0400 Subject: [PATCH 12/33] update docker and linux advanced config instructions and UST --- .../single-step-apm/docker.md | 23 ++++++++++++------- .../single-step-apm/linux.md | 23 ++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index 01135931aa5..fe7fd6594f2 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -22,19 +22,25 @@ To enable APM in a Docker Linux container: 1. Copy and run the Agent installation command in your Docker container. 1. Restart your applications. -## Advanced Options +## Setting Unified Service Tags -When you run the one-line installation command, there are options to customize your experience: +Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. -### Customize APM libraries +Learn how to set [USTs for Docker environments][16]. -By default, Java, Python, Ruby, Node.js and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. +## Controlling SDK tracer versions -Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: +By default, Single Step Instrumentation installs the latest major versions of Datadog APM SDKs. Minor version updates are applied automatically when they become available. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1"` - install only the Java Datadog APM library pinned to the major version 1 release line. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:3"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 3 respectively. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. +You may want to customize SDK versions based on your application's language version or specific environment requirements. You can control the major and minor versions used by customizing library versions during setup. + +To customize tracer versions: + +1. After you turn on **APM Instrumentation**, click **Customize library versions**. +1. Find your language(s) and use the dropdown to either: + - Pin an exact tracer version, or + - Select the major version you want to use. +1. Copy and run the updated installation command. Available versions are listed in source repositories for each language: @@ -90,5 +96,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [13]: https://github.com/DataDog/dd-trace-php/releases [14]: /tracing/glossary/#instrumentation [15]: https://app.datadoghq.com/fleet/install-agent/latest?platform=docker +[16]: /getting_started/tagging/unified_service_tagging/?tab=docker#containerized-environment diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index c29ce068b29..9cc692b9e8c 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -22,19 +22,25 @@ To enable APM on a Ubuntu host: 1. Copy and run the Agent installation command on your Linux host or VM. 1. Restart your applications. -## Advanced Options +## Setting Unified Service Tags -When you run the one-line installation command, there are options to customize your experience: +Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. -### Customize APM libraries +Learn how to set [USTs for non-containerized environments][16]. -By default, Java, Python, Ruby, Node.js, PHP and .NET Core Datadog APM libraries are installed when `DD_APM_INSTRUMENTATION_ENABLED` is set. `DD_APM_INSTRUMENTATION_LIBRARIES` is used to override which libraries are installed. The value is a comma-separated string of colon-separated library name and version pairs. +## Controlling SDK tracer versions -Example values for `DD_APM_INSTRUMENTATION_LIBRARIES`: +By default, Single Step Instrumentation installs the latest major versions of Datadog APM SDKs. Minor version updates are applied automatically when they become available. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1"` - install only the Java Datadog APM library pinned to the major version 1 release line. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1,python:3"` - install only the Java and Python Datadog APM libraries pinned to the major versions 1 and 3 respectively. -- `DD_APM_INSTRUMENTATION_LIBRARIES="java:1.38.0,python:2.10.5"` - install only the Java and Python Datadog APM libraries pinned to the specific versions 1.38.0 and 2.10.5 respectively. +You may want to customize SDK versions based on your application's language version or specific environment requirements. You can control the major and minor versions used by customizing library versions during setup. + +To customize tracer versions: + +1. After you turn on **APM Instrumentation**, click **Customize library versions**. +1. Find your language(s) and use the dropdown to either: + - Pin an exact tracer version, or + - Select the major version you want to use. +1. Copy and run the updated installation command. Available versions are listed in source repositories for each language: @@ -84,5 +90,6 @@ To stop producing traces, uninstall APM and restart the infrastructure: [13]: https://github.com/DataDog/dd-trace-php/releases [14]: /tracing/glossary/#instrumentation [15]: https://app.datadoghq.com/fleet/install-agent/latest?platform=linux +[16]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes From b7903c70e70840d4e2821a1a7bd334df3946895b Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Tue, 29 Apr 2025 13:12:40 -0400 Subject: [PATCH 13/33] update k8s page to follow proposed restructure, minor edits to docker and linux pages --- .../single-step-apm/docker.md | 2 +- .../single-step-apm/kubernetes.md | 136 ++---------------- .../single-step-apm/linux.md | 2 +- 3 files changed, 16 insertions(+), 124 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index fe7fd6594f2..f09409eaec7 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -18,7 +18,7 @@ In a Docker Linux container, use Single Step Instrumentation (SSI) for APM to in To enable APM in a Docker Linux container: 1. In the Datadog app, navigate to the [Install the Datadog Agent on Docker][15] page. -1. Turn on **APM Instrumentation**. +1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. 1. Copy and run the Agent installation command in your Docker container. 1. Restart your applications. diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index fa828dd3f07..1fa3e646df3 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -11,6 +11,8 @@ further_reading: ## Overview +
Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63.
+ In a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to install the Datadog Agent and [instrument][10] your applications in one step, with no additional configuration required. ## Requirements @@ -19,136 +21,25 @@ In a Kubernetes environment, use Single Step Instrumentation (SSI) for APM to in - [`Helm`][1] for deploying the Datadog Operator. - [`Kubectl` CLI][2] for installing the Datadog Agent. -
Single Step Instrumentation for Kubernetes is GA for Agent versions 7.64+, and in Preview for Agent versions <=7.63.
- ## Enable APM on your applications -You can enable APM by installing the Agent with either: - -- Datadog Operator -- Datadog Helm chart +
Single Step Instrumentation does not instrument applications in the namespace where the Datadog Agent is installed. Install the Agent in a separate namespace where you do not run your applications.
-
Single Step Instrumentation doesn't instrument applications in the namespace where you install the Datadog Agent. It's recommended to install the Agent in a separate namespace in your cluster where you don't run your applications.
+Follow these steps to enable Single Step Instrumentation across your entire cluster. This automatically sends traces from all applications written in supported languages. -{{< tabs >}} -{{% tab "Installing with Datadog Operator" %}} +**Note:** To instrument only specific namespaces or pods, see [Advanced options](#advanced-options). -Follow these steps to enable Single Step Instrumentation across your entire cluster with the Datadog Operator. This automatically sends traces for all applications in the cluster that are written in supported languages. +1. In the Datadog app, go to the [Install the Datadog Agent on Kubernetes][11] page. +1. Follow the on-screen instructions to choose your installation method, select an API key, and set up the Operator or Helm repository. +1. In the **Configure `datadog-agent.yaml`** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. +1. Deploy the Agent using the generated configuration file. +1. Restart your applications. -**Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). +## Setting Unified Service Tags -To enable Single Step Instrumentation with the Datadog Operator: - -1. Install the [Datadog Operator][5] with Helm: - ```shell - helm repo add datadog https://helm.datadoghq.com - helm repo update - helm install my-datadog-operator datadog/datadog-operator - ``` -2. Create a Kubernetes secret to store your Datadog [API key][6]: - ```shell - kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY - ``` -3. Create `datadog-agent.yaml` with the spec of your Datadog Agent deployment configuration. The simplest configuration is as follows: - ```yaml - apiVersion: datadoghq.com/v2alpha1 - kind: DatadogAgent - metadata: - name: datadog - spec: - override: - clusterAgent: - image: - tag: 7.64.1 - global: - site: - tags: - - env: - credentials: - apiSecret: - secretName: datadog-secret - keyName: api-key - features: - apm: - instrumentation: - enabled: true - targets: - - name: "default-target" - ddTraceVersions: - java: "1" - dotnet: "3" - python: "2" - js: "5" - php: "1" - ``` - Replace `` with your [Datadog site][7] and `` with the environment your Agent is installed on (for example, `env:staging`). -
See Advanced options for more options.
- -4. Run the following command: - ```shell - kubectl apply -f /path/to/your/datadog-agent.yaml - ``` -5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. - -[5]: https://github.com/DataDog/helm-charts/tree/master/charts/datadog-operator -[6]: https://app.datadoghq.com/organization-settings/api-keys -[7]: /getting_started/site - -{{% /tab %}} - -{{% tab "Installing with Helm" %}} - -Follow these steps to enable Single Step Instrumentation across your entire cluster with Helm. This automatically sends traces for all applications in the cluster that are written in supported languages. - -**Note**: To configure Single Step Instrumentation for specific namespace or pods, see [Advanced options](#advanced-options). - -To enable Single Step Instrumentation with Helm: - -1. Add the Helm Datadog repo: - ```shell - helm repo add datadog https://helm.datadoghq.com - helm repo update - ``` -2. Create a Kubernetes secret to store your [Datadog API key][10]: - ```shell - kubectl create secret generic datadog-secret --from-literal api-key=$DD_API_KEY - ``` -3. Create `datadog-values.yaml` and add the following configuration: - ``` - datadog: - apiKeyExistingSecret: datadog-secret - site: - tags: - - env: - apm: - instrumentation: - enabled: true - targets: - - name: "default-target" - ddTraceVersions: - java: "1" - dotnet: "3" - python: "2" - js: "5" - php: "1" - ``` - Replace `` with your [Datadog site][12] and `` with the environment your Agent is installed on (for example, `env:staging`). - -
See Advanced options for more options.
- -4. Run the following command: - ```shell - helm install datadog-agent -f datadog-values.yaml datadog/datadog - ``` -5. After waiting a few minutes for the Datadog Cluster Agent changes to apply, restart your applications. - -[10]: https://app.datadoghq.com/organization-settings/api-keys -[12]: /getting_started/site - -{{% /tab %}} -{{< /tabs >}} +Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. -After you complete these steps, you may want to enable [runtime metrics][3] or view observability data from your application in the [Software Catalog][4]. +In Kubernetes, set Unified Service Tags on both your Deployment objects and Pod template specs to ensure complete telemetry correlation. For details, see [how to set USTs for Kubernetes workloads][link]. ## Advanced options @@ -615,6 +506,7 @@ The file you need to configure depends on if you enabled Single Step Instrumenta [8]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes [9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility/#tracer-libraries [10]: /tracing/glossary/#instrumentation +[11]: https://app.datadoghq.com/fleet/install-agent/latest?platform=kubernetes diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 9cc692b9e8c..b53f2ba55f6 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -18,7 +18,7 @@ On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install To enable APM on a Ubuntu host: 1. In the Datadog app, navigate to the [Install the Datadog Agent on Linux][15] page. -1. Turn on **APM Instrumentation**. +1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. 1. Copy and run the Agent installation command on your Linux host or VM. 1. Restart your applications. From 05af069ec6ad0499e5ad7d3f2c856dd7156d91b7 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Tue, 29 Apr 2025 13:31:01 -0400 Subject: [PATCH 14/33] tweak headers for landing page and tweak Enable SSI section to make clear that we're loading SDKs --- .../automatic_instrumentation/single-step-apm/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index a0090631d41..bc4b995477b 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -19,9 +19,9 @@ Single Step Instrumentation (SSI) automatically installs the Datadog APM SDKs wi See the [injector guide for Single Step Instrumentation][8] to learn how SSI works. -## Enabling APM on your applications +## Automatically enable APM with Single Step Instrumentation -If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentation** option selected, the Agent is installed and configured to enable APM. This automatically instruments your application, without any additional installation or configuration steps. +If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentation** option selected, the Agent automatically loads the appropriate APM SDKs for your applications. This enables distributed tracing without any additional installation or configuration steps. Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: @@ -31,7 +31,7 @@ Follow the relevant documentation to learn more about Single Step Instrumentatio
To see requirements for compatible languages, operating systems, and architectures, see Single Step Instrumentation compatibility.
-## Enabling additional APM features +## Configure additional APM features After installing the Datadog APM SDK with SSI, you can configure additional tracing-based features. These features use your application traces to provide enhanced visibility, security, and performance insights. From ecd5cf05ceb3f5c50d686a9b694cb4e3b4d071bd Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Tue, 29 Apr 2025 13:36:14 -0400 Subject: [PATCH 15/33] retweak home page copy on instrumentation and SDK loading --- .../automatic_instrumentation/single-step-apm/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index bc4b995477b..69a36ee396d 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -21,7 +21,7 @@ See the [injector guide for Single Step Instrumentation][8] to learn how SSI wor ## Automatically enable APM with Single Step Instrumentation -If you [install or update a Datadog Agent][1] with the **Enable APM Instrumentation** option selected, the Agent automatically loads the appropriate APM SDKs for your applications. This enables distributed tracing without any additional installation or configuration steps. +If you [install or update a Datadog Agent][1] with **APM Instrumentation** enabled, your applications are automatically instrumented, without additional installation or configuration steps. Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: From 00285f76d736881b4dce7e8c27ee68dfbc0ce7f6 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Tue, 29 Apr 2025 13:51:51 -0400 Subject: [PATCH 16/33] clean up namespace enable/disable instructions and version specification for k8s - refer to UI instead --- .../single-step-apm/kubernetes.md | 114 +++--------------- 1 file changed, 19 insertions(+), 95 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index 1fa3e646df3..347f40cb801 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -219,66 +219,15 @@ This configuration enables APM for all pods except those that have either of the ### Enable or disable instrumentation for namespaces -You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enabledNamespaces or disabledNamespaces, not both. - -The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: - -{{< collapse-content title="Datadog Operator" level="h4" >}} - -To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-agent.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - features: - apm: - instrumentation: - enabled: true - enabledNamespaces: # Add namespaces to instrument - - default - - applications -{{< /highlight >}} - -To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-agent.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - features: - apm: - instrumentation: - enabled: true - disabledNamespaces: # Add namespaces to not instrument - - default - - applications -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Helm" level="h4" >}} - -To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-values.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - datadog: - apm: - instrumentation: - enabled: true - enabledNamespaces: # Add namespaces to instrument - - namespace_1 - - namespace_2 -{{< /highlight >}} - -To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-values.yaml`: - -{{< highlight yaml "hl_lines=5-7" >}} - datadog: - apm: - instrumentation: - enabled: true - disabledNamespaces: # Add namespaces to not instrument - - namespace_1 - - namespace_2 -{{< /highlight >}} - -{{< /collapse-content >}} +You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enable namespaces or disable namespaces, not both. +1. In the Datadog app, go to the [Install the Datadog Agent on Kubernetes][11] page. +1. In the **Configure `datadog-agent.yaml`** section, go to **Additional configuration** > **Application Observability**. +1. Under **APM Instrumentation**, you can do one of the following: + - List the namespaces you want to enable in the **Target Namespaces** text box. + - List the namespaces you want to disable in the **Disabled Namespaces** text box. +1. Deploy the Agent using the generated configuration file. +1. Restart your applications. ### Specify tracing library versions @@ -289,7 +238,7 @@ Specify Datadog tracing libraries and their versions to automatically instrument 1. [Specify at the service level](#specify-at-the-service-level), or 2. [Specify at the cluster level](#specify-at-the-cluster-level). -**Default**: If you don't specify any library versions and `apm.instrumentation.enabled=true`, applications written in supported languages are automatically instrumented using the latest tracing library versions. +**Default**: If you don't specify any library versions, applications written in supported languages are automatically instrumented using the latest tracing library versions. #### Specify at the service level @@ -337,42 +286,16 @@ spec: If you don't enable automatic instrumentation for specific pods using annotations, you can specify which languages to instrument across the entire cluster using the Single Step Instrumentation configuration. When `apm.instrumentation.libVersions` is set, only applications written in the specified languages will be instrumented, using the specified library versions. -The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: - -{{< collapse-content title="Datadog Operator" level="h4" >}} - -For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-agent.yaml` file: - -{{< highlight yaml "hl_lines=5-8" >}} - features: - apm: - instrumentation: - enabled: true - libVersions: # Add any libraries and versions you want to set - dotnet: "3.2.0" - python: "1.20.6" - js: "4.17.0" -{{< /highlight >}} - -{{< /collapse-content >}} - -{{< collapse-content title="Helm" level="h4" >}} - -For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-values.yaml` file: - -{{< highlight yaml "hl_lines=5-8" >}} - datadog: - apm: - instrumentation: - enabled: true - libVersions: # Add any libraries and versions you want to set - dotnet: "3.2.0" - python: "1.20.6" - js: "4.17.0" -{{< /highlight >}} - -{{< /collapse-content >}} +To specify SDK tracer versions at the cluster level: +1. In the Datadog app, go to the [Install the Datadog Agent on Kubernetes][11] page. +1. In the **Configure `datadog-agent.yaml`** section, go to **Additional configuration** > **Application Observability**. +1. Under **APM Instrumentation**, click **Customize library versions**. +1. Find your language(s) and use the dropdown to either: + - Pin an exact tracer version, or + - Select the major version you want to use. +1. Deploy the Agent using the generated configuration file. +1. Restart your applications. #### Container registries @@ -393,6 +316,7 @@ You can pull the tracing library from a different registry by changing it to `do For instructions on changing your container registry, see [Changing Your Container Registry][33]. +[11]: https://app.datadoghq.com/fleet/install-agent/latest?platform=kubernetes [15]: http://gcr.io/datadoghq/dd-lib-java-init [16]: http://hub.docker.com/r/datadog/dd-lib-java-init [17]: http://gallery.ecr.aws/datadog/dd-lib-java-init From 9fb6c3a71fc0e9a544ef2a06838a56ad8f87506e Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Tue, 29 Apr 2025 15:41:36 -0400 Subject: [PATCH 17/33] minor copy tweaks --- .../automatic_instrumentation/single-step-apm/_index.md | 7 ++++--- .../automatic_instrumentation/single-step-apm/docker.md | 7 ++++--- .../single-step-apm/kubernetes.md | 2 +- .../automatic_instrumentation/single-step-apm/linux.md | 7 ++++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 69a36ee396d..2c4469f66ce 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -19,9 +19,9 @@ Single Step Instrumentation (SSI) automatically installs the Datadog APM SDKs wi See the [injector guide for Single Step Instrumentation][8] to learn how SSI works. -## Automatically enable APM with Single Step Instrumentation +## Enable APM with Single Step Instrumentation -If you [install or update a Datadog Agent][1] with **APM Instrumentation** enabled, your applications are automatically instrumented, without additional installation or configuration steps. +If you [install or update a Datadog Agent][1] with **APM Instrumentation** enabled, your applications are automatically [instrumented][13], without additional installation or configuration steps. Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: @@ -74,4 +74,5 @@ After setting up APM with Single Step Instrumentation, you may want to: [9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes/?tab=installingwithdatadogoperator#configure-instrumentation-for-namespaces-and-pods [10]: /tracing/trace_collection/library_config/ [11]: /tracing/metrics/runtime_metrics/ -[12]: /tracing/software_catalog/ \ No newline at end of file +[12]: /tracing/software_catalog/ +[13]: /tracing/glossary/#instrumentation \ No newline at end of file diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index f09409eaec7..ec909d700c4 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -17,18 +17,18 @@ In a Docker Linux container, use Single Step Instrumentation (SSI) for APM to in To enable APM in a Docker Linux container: -1. In the Datadog app, navigate to the [Install the Datadog Agent on Docker][15] page. +1. In the Datadog app, go to the [Install the Datadog Agent on Docker][15] page. 1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. 1. Copy and run the Agent installation command in your Docker container. 1. Restart your applications. -## Setting Unified Service Tags +## Set Unified Service Tags Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. Learn how to set [USTs for Docker environments][16]. -## Controlling SDK tracer versions +## Set SDK tracer versions By default, Single Step Instrumentation installs the latest major versions of Datadog APM SDKs. Minor version updates are applied automatically when they become available. @@ -36,6 +36,7 @@ You may want to customize SDK versions based on your application's language vers To customize tracer versions: +1. In the Datadog app, go to the [Install the Datadog Agent on Docker][15] page. 1. After you turn on **APM Instrumentation**, click **Customize library versions**. 1. Find your language(s) and use the dropdown to either: - Pin an exact tracer version, or diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index 347f40cb801..cac16658821 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -35,7 +35,7 @@ Follow these steps to enable Single Step Instrumentation across your entire clus 1. Deploy the Agent using the generated configuration file. 1. Restart your applications. -## Setting Unified Service Tags +## Set Unified Service Tags Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index b53f2ba55f6..048842fed81 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -17,18 +17,18 @@ On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install To enable APM on a Ubuntu host: -1. In the Datadog app, navigate to the [Install the Datadog Agent on Linux][15] page. +1. In the Datadog app, go to the [Install the Datadog Agent on Linux][15] page. 1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. 1. Copy and run the Agent installation command on your Linux host or VM. 1. Restart your applications. -## Setting Unified Service Tags +## Set Unified Service Tags Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. Learn how to set [USTs for non-containerized environments][16]. -## Controlling SDK tracer versions +## Set SDK tracer versions By default, Single Step Instrumentation installs the latest major versions of Datadog APM SDKs. Minor version updates are applied automatically when they become available. @@ -36,6 +36,7 @@ You may want to customize SDK versions based on your application's language vers To customize tracer versions: +1. In the Datadog app, go to the [Install the Datadog Agent on Linux][15] page. 1. After you turn on **APM Instrumentation**, click **Customize library versions**. 1. Find your language(s) and use the dropdown to either: - Pin an exact tracer version, or From 1077f1fffcc3f5d5dd312ce64615e2c5f916229c Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Tue, 29 Apr 2025 15:44:33 -0400 Subject: [PATCH 18/33] update k8s ust link --- .../automatic_instrumentation/single-step-apm/kubernetes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index cac16658821..e80956b630b 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -39,7 +39,7 @@ Follow these steps to enable Single Step Instrumentation across your entire clus Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. -In Kubernetes, set Unified Service Tags on both your Deployment objects and Pod template specs to ensure complete telemetry correlation. For details, see [how to set USTs for Kubernetes workloads][link]. +In Kubernetes, set Unified Service Tags on both your Deployment objects and Pod template specs to ensure complete telemetry correlation. For details, see [how to set USTs for Kubernetes workloads][12]. ## Advanced options @@ -431,6 +431,7 @@ The file you need to configure depends on if you enabled Single Step Instrumenta [9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/compatibility/#tracer-libraries [10]: /tracing/glossary/#instrumentation [11]: https://app.datadoghq.com/fleet/install-agent/latest?platform=kubernetes +[12]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes From 1169c98bd00d4b5dc2559163618a8d3b439e7777 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 30 Apr 2025 14:54:11 -0400 Subject: [PATCH 19/33] update landing page --- .../single-step-apm/_index.md | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 2c4469f66ce..bb011e9ec57 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -17,11 +17,14 @@ further_reading: Single Step Instrumentation (SSI) automatically installs the Datadog APM SDKs with no additional configuration required, reducing onboarding time from days to minutes. -See the [injector guide for Single Step Instrumentation][8] to learn how SSI works. +To learn more about how it works, see the [injector guide for Single Step Instrumentation][8]. -## Enable APM with Single Step Instrumentation +## Instrument APM SDKs across applications -If you [install or update a Datadog Agent][1] with **APM Instrumentation** enabled, your applications are automatically [instrumented][13], without additional installation or configuration steps. +When you [install or update the Datadog Agent][1] with **APM Instrumentation** enabled, the Agent instruments your applications by loading the Datadog APM SDK into supported processes. +This enables distributed tracing by capturing and sending trace data from your services without requiring code changes. + +You can optionally configure [Unified Service Tags (USTs)][ust-link] or enable additional tracing-powered products such as Continuous Profiler or Application Security Monitoring. Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: @@ -31,11 +34,11 @@ Follow the relevant documentation to learn more about Single Step Instrumentatio
To see requirements for compatible languages, operating systems, and architectures, see Single Step Instrumentation compatibility.
-## Configure additional APM features +## Configure additional APM-related products -After installing the Datadog APM SDK with SSI, you can configure additional tracing-based features. These features use your application traces to provide enhanced visibility, security, and performance insights. +Once SSI loads the Datadog APM SDK into your applications and enables distributed tracing, you can configure additional products that rely on the SDK. These include capabilities such as Continuous Profiler, Application Security Monitoring, and trace ingestion controls. -The available features and setup methods depend on your platform: +The available setup methods depend on your platform: | Configuration method | Description | Supported platforms | |:---|:---|:---| @@ -45,20 +48,11 @@ The available features and setup methods depend on your platform: ## Troubleshooting -### Single Step Instrumentation is not taking effect - Single Step Instrumentation automatically disables when it detects [custom instrumentation][7] in your application. If you want to use SSI, you'll need to: 1. Remove any existing custom instrumentation code. 1. Restart your application. -## Next steps - -After setting up APM with Single Step Instrumentation, you may want to: - -- Enable [runtime metrics][11] to monitor CPU, memory, and other application-level stats. -- View observability data from your services in the [Software Catalog][12]. - ## Further reading {{< partial name="whats-next/whats-next.html" >}} From 89b83b6485918b83cb2f07e52fc41a6a522a4565 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 30 Apr 2025 15:06:51 -0400 Subject: [PATCH 20/33] add UST section to landing page and remove from child pages --- .../single-step-apm/_index.md | 19 +++++++++++++++++-- .../single-step-apm/docker.md | 6 ------ .../single-step-apm/kubernetes.md | 6 ------ .../single-step-apm/linux.md | 7 ------- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index bb011e9ec57..9fbc50fd265 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -24,7 +24,7 @@ To learn more about how it works, see the [injector guide for Single Step Instru When you [install or update the Datadog Agent][1] with **APM Instrumentation** enabled, the Agent instruments your applications by loading the Datadog APM SDK into supported processes. This enables distributed tracing by capturing and sending trace data from your services without requiring code changes. -You can optionally configure [Unified Service Tags (USTs)][ust-link] or enable additional tracing-powered products such as Continuous Profiler or Application Security Monitoring. +After instrumentation, you can optionally configure [Unified Service Tags (USTs)](#set-universal-service-tags) or [enable additional tracing-powered products](#configure-additional-apm-related-products) such as Continuous Profiler or Application Security Monitoring. Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: @@ -34,6 +34,18 @@ Follow the relevant documentation to learn more about Single Step Instrumentatio
To see requirements for compatible languages, operating systems, and architectures, see Single Step Instrumentation compatibility.
+## Set Universal Service Tags + +Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. + +Learn how to set USTs for: +- [Linux][14] +- [Docker][15] +- [Kubernetes][16] + + **Note**: In Kubernetes, USTs must be set on both the Deployment object and the Pod template spec. + + ## Configure additional APM-related products Once SSI loads the Datadog APM SDK into your applications and enables distributed tracing, you can configure additional products that rely on the SDK. These include capabilities such as Continuous Profiler, Application Security Monitoring, and trace ingestion controls. @@ -69,4 +81,7 @@ Single Step Instrumentation automatically disables when it detects [custom instr [10]: /tracing/trace_collection/library_config/ [11]: /tracing/metrics/runtime_metrics/ [12]: /tracing/software_catalog/ -[13]: /tracing/glossary/#instrumentation \ No newline at end of file +[13]: /tracing/glossary/#instrumentation +[14]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes#non-containerized-environment +[15]: /getting_started/tagging/unified_service_tagging/?tab=docker#containerized-environment +[16]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes \ No newline at end of file diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index ec909d700c4..bb0f259e5ab 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -22,12 +22,6 @@ To enable APM in a Docker Linux container: 1. Copy and run the Agent installation command in your Docker container. 1. Restart your applications. -## Set Unified Service Tags - -Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. - -Learn how to set [USTs for Docker environments][16]. - ## Set SDK tracer versions By default, Single Step Instrumentation installs the latest major versions of Datadog APM SDKs. Minor version updates are applied automatically when they become available. diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index e80956b630b..a02077c59c3 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -35,12 +35,6 @@ Follow these steps to enable Single Step Instrumentation across your entire clus 1. Deploy the Agent using the generated configuration file. 1. Restart your applications. -## Set Unified Service Tags - -Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. - -In Kubernetes, set Unified Service Tags on both your Deployment objects and Pod template specs to ensure complete telemetry correlation. For details, see [how to set USTs for Kubernetes workloads][12]. - ## Advanced options When you run the one-line installation command, there are a few options to customize your experience: diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 048842fed81..309f80cd0b5 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -22,12 +22,6 @@ To enable APM on a Ubuntu host: 1. Copy and run the Agent installation command on your Linux host or VM. 1. Restart your applications. -## Set Unified Service Tags - -Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. - -Learn how to set [USTs for non-containerized environments][16]. - ## Set SDK tracer versions By default, Single Step Instrumentation installs the latest major versions of Datadog APM SDKs. Minor version updates are applied automatically when they become available. @@ -91,6 +85,5 @@ To stop producing traces, uninstall APM and restart the infrastructure: [13]: https://github.com/DataDog/dd-trace-php/releases [14]: /tracing/glossary/#instrumentation [15]: https://app.datadoghq.com/fleet/install-agent/latest?platform=linux -[16]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes From 0c26184bc3e6ad175aa7d2351f2a04c94ae3e6ad Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 30 Apr 2025 15:18:31 -0400 Subject: [PATCH 21/33] update linux uninstall steps --- .../single-step-apm/linux.md | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 309f80cd0b5..16d91e7a0ce 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -48,22 +48,7 @@ Available versions are listed in source repositories for each language: ## Remove Single Step APM instrumentation from your Agent -If you don't want to collect trace data for a particular service, host, VM, or container, complete the following steps: - -### Remove instrumentation for specific services - -To remove APM instrumentation and stop sending traces from a specific service: - -1. Add the `DD_INSTRUMENT_SERVICE_WITH_APM` environment variable to the service startup command: - - ```shell - DD_INSTRUMENT_SERVICE_WITH_APM=false - ``` -2. Restart the service. - -### Remove APM for all services on the infrastructure - -To stop producing traces, uninstall APM and restart the infrastructure: +To stop producing traces for all services on your infrastructure: 1. Run: ```shell From c51199b9049140893ddbce2030262cf5cf6950df Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 30 Apr 2025 15:20:29 -0400 Subject: [PATCH 22/33] update k8s tabs --- .../automatic_instrumentation/single-step-apm/kubernetes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index a02077c59c3..55143c0a97d 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -41,7 +41,7 @@ When you run the one-line installation command, there are a few options to custo {{< tabs >}} -{{% tab "Kubernetes (Agent v7.64+)" %}} +{{% tab "Agent v7.64+ (Recommended)" %}} ### Configure instrumentation for namespaces and pods @@ -209,7 +209,7 @@ This configuration enables APM for all pods except those that have either of the {{% /tab %}} -{{% tab "Kubernetes (Agent <=v7.63) (Preview)" %}} +{{% tab "Agent <=v7.63 (Legacy)" %}} ### Enable or disable instrumentation for namespaces From 55cba24027a06641b083ec29e942de8c728d5d2f Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 30 Apr 2025 15:23:56 -0400 Subject: [PATCH 23/33] revert namespace and version docs for legacy k8s --- .../single-step-apm/kubernetes.md | 109 +++++++++++++++--- 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index 55143c0a97d..e0c3508860b 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -213,15 +213,65 @@ This configuration enables APM for all pods except those that have either of the ### Enable or disable instrumentation for namespaces -You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enable namespaces or disable namespaces, not both. +You can choose to enable or disable instrumentation for applications in specific namespaces. You can only set enabledNamespaces or disabledNamespaces, not both. -1. In the Datadog app, go to the [Install the Datadog Agent on Kubernetes][11] page. -1. In the **Configure `datadog-agent.yaml`** section, go to **Additional configuration** > **Application Observability**. -1. Under **APM Instrumentation**, you can do one of the following: - - List the namespaces you want to enable in the **Target Namespaces** text box. - - List the namespaces you want to disable in the **Disabled Namespaces** text box. -1. Deploy the Agent using the generated configuration file. -1. Restart your applications. +The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: + +{{< collapse-content title="Datadog Operator" level="h4" >}} + +To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-agent.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + features: + apm: + instrumentation: + enabled: true + enabledNamespaces: # Add namespaces to instrument + - default + - applications +{{< /highlight >}} + +To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-agent.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + features: + apm: + instrumentation: + enabled: true + disabledNamespaces: # Add namespaces to not instrument + - default + - applications +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Helm" level="h4" >}} + +To enable instrumentation for specific namespaces, add `enabledNamespaces` configuration to `datadog-values.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + datadog: + apm: + instrumentation: + enabled: true + enabledNamespaces: # Add namespaces to instrument + - namespace_1 + - namespace_2 +{{< /highlight >}} + +To disable instrumentation for specific namespaces, add `disabledNamespaces` configuration to `datadog-values.yaml`: + +{{< highlight yaml "hl_lines=5-7" >}} + datadog: + apm: + instrumentation: + enabled: true + disabledNamespaces: # Add namespaces to not instrument + - namespace_1 + - namespace_2 +{{< /highlight >}} + +{{< /collapse-content >}} ### Specify tracing library versions @@ -280,16 +330,41 @@ spec: If you don't enable automatic instrumentation for specific pods using annotations, you can specify which languages to instrument across the entire cluster using the Single Step Instrumentation configuration. When `apm.instrumentation.libVersions` is set, only applications written in the specified languages will be instrumented, using the specified library versions. -To specify SDK tracer versions at the cluster level: +The file you need to configure depends on if you enabled Single Step Instrumentation with Datadog Operator or Helm: -1. In the Datadog app, go to the [Install the Datadog Agent on Kubernetes][11] page. -1. In the **Configure `datadog-agent.yaml`** section, go to **Additional configuration** > **Application Observability**. -1. Under **APM Instrumentation**, click **Customize library versions**. -1. Find your language(s) and use the dropdown to either: - - Pin an exact tracer version, or - - Select the major version you want to use. -1. Deploy the Agent using the generated configuration file. -1. Restart your applications. +{{< collapse-content title="Datadog Operator" level="h4" >}} + +For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-agent.yaml` file: + +{{< highlight yaml "hl_lines=5-8" >}} + features: + apm: + instrumentation: + enabled: true + libVersions: # Add any libraries and versions you want to set + dotnet: "3.2.0" + python: "1.20.6" + js: "4.17.0" +{{< /highlight >}} + +{{< /collapse-content >}} + +{{< collapse-content title="Helm" level="h4" >}} + +For example, to instrument .NET, Python, and Node.js applications, add the following configuration to your `datadog-values.yaml` file: + +{{< highlight yaml "hl_lines=5-8" >}} + datadog: + apm: + instrumentation: + enabled: true + libVersions: # Add any libraries and versions you want to set + dotnet: "3.2.0" + python: "1.20.6" + js: "4.17.0" +{{< /highlight >}} + +{{< /collapse-content >}} #### Container registries From 1ad8b376a8c8f70582832cd0e98292e1b3c18953 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Wed, 30 Apr 2025 17:13:24 -0400 Subject: [PATCH 24/33] add new page for application monitoring yaml --- .../configure_apm_features_linux.md | 81 +++++++++++++++++++ .../single-step-apm/_index.md | 7 +- 2 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md new file mode 100644 index 00000000000..68d03237782 --- /dev/null +++ b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md @@ -0,0 +1,81 @@ +--- +title: Configure APM features with application_monitoring.yaml +--- + +## Overview + +On Linux hosts that use Single Step Instrumentation (SSI), you can enable or disable APM-related products at the host level with the `application_monitoring.yaml` file. All instrumented services on the host inherit these settings. + +## Getting started + +1. Ensure the `application_monitoring.yaml` file exists at the following path: + + ``` + /etc/datadog-agent/application_monitoring.yaml + ``` + +1. To enable or disable APM products, define them under the `apm_configuration_default` block and set them to `true` or `false`. + + **Note:** If a product is enabled through [environment variables set on the APM SDK][1], those values override the settings in `application_monitoring.yaml`. + +## Configuration examples + +### Example 1: Enable profiling, Data Streams Monitoring, and tracing + +``` +apm_configuration_default: + DD_PROFILING_ENABLED: true + DD_DATA_STREAMS_ENABLED: true + DD_APM_TRACING_ENABLED: true + DD_LOGS_INJECTION: true +``` + +### Example 2: Enable Application Security Management, disable tracing + +``` +apm_configuration_default: + DD_APM_TRACING_ENABLED: false + DD_APPSEC_ENABLED: true +``` + +## Supported products and configuration keys + +| Feature | Configuration key | +|----------------------------------|-------------------------------| +| [APM Tracing][2] | `DD_APM_TRACING_ENABLED` | +| [Continuous Profiler][3] | `DD_PROFILING_ENABLED` | +| [Data Streams Monitoring][4] | `DD_DATA_STREAMS_ENABLED` | +| [App and API Protection (AAP)][5] | `DD_APPSEC_ENABLED` | +| [Code Security (IAST)][6] | `DD_IAST_ENABLED` | +| [Data Jobs Monitoring][7] | `DD_DATA_JOBS_ENABLED` | +| [Software Composition Analysis][8] | `DD_APPSEC_SCA_ENABLED` | + + +## SDK version requirements + +The following minimum SDK versions support configuration via `application_monitoring.yaml`: + +| Language | Minimum SDK version | +|------------|---------------------| +| Java | v1.47.0 | +| Python | v3.2.0 | +| Node.js | v5.41.0 | +| .NET | WIP | +| PHP | v1.8.0 | +| Ruby | WIP | +| Go | WIP | + + + +## Further reading + +{{< partial name="whats-next/whats-next.html" >}} + +[1]: /tracing/trace_collection/library_config/ +[2]: https://www.datadoghq.com/product/apm/ +[3]: https://www.datadoghq.com/product/code-profiling/ +[4]: https://www.datadoghq.com/product/data-streams-monitoring/ +[5]: https://www.datadoghq.com/dg/security/application-security-management/ +[6]: https://www.datadoghq.com/dg/security/code-security/ +[7]: https://www.datadoghq.com/product/data-jobs-monitoring/ +[8]: https://www.datadoghq.com/product/software-composition-analysis/ \ No newline at end of file diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 9fbc50fd265..e67a85f8a81 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -54,8 +54,8 @@ The available setup methods depend on your platform: | Configuration method | Description | Supported platforms | |:---|:---|:---| -| Configure in `application_monitoring.yaml` | Enable features across all services on a host without modifying application command lines. | Linux only | -| Configure with [workload targeting][9] | By default, Single Step Instrumentation instruments all services in all namespaces. Use workload targeting to limit instrumentation to specific namespaces, pods, or workloads, and apply custom configurations. | Kubernetes only | +| [Configure in `application_monitoring.yaml`][17] | Enable features across all services on a host without modifying application command lines. | Linux only | +| [Configure with workload targeting][9] | By default, Single Step Instrumentation instruments all services in all namespaces. Use workload targeting to limit instrumentation to specific namespaces, pods, or workloads, and apply custom configurations. | Kubernetes only | | [Set environment variables][10] | Enable features by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | ## Troubleshooting @@ -84,4 +84,5 @@ Single Step Instrumentation automatically disables when it detects [custom instr [13]: /tracing/glossary/#instrumentation [14]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes#non-containerized-environment [15]: /getting_started/tagging/unified_service_tagging/?tab=docker#containerized-environment -[16]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes \ No newline at end of file +[16]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes +[17]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/configure-apm-features-linux/ \ No newline at end of file From 6bfb1f63dc3e0ebbbb447a2aa32436bd839f0bfb Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Thu, 1 May 2025 11:27:43 -0400 Subject: [PATCH 25/33] fix link --- .../automatic_instrumentation/single-step-apm/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index e67a85f8a81..b6d38f984d7 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -85,4 +85,4 @@ Single Step Instrumentation automatically disables when it detects [custom instr [14]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes#non-containerized-environment [15]: /getting_started/tagging/unified_service_tagging/?tab=docker#containerized-environment [16]: /getting_started/tagging/unified_service_tagging/?tab=kubernetes -[17]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/configure-apm-features-linux/ \ No newline at end of file +[17]: /tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux/ \ No newline at end of file From d9ddd0e7fe41318cb196ce676050a28a4d720769 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Thu, 1 May 2025 11:55:16 -0400 Subject: [PATCH 26/33] minor language tweaks on home page, update title and overview for application monitoring page --- .../configure_apm_features_linux.md | 12 ++++++++---- .../single-step-apm/_index.md | 15 ++++++++------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md index 68d03237782..77153ce638c 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md @@ -1,12 +1,16 @@ --- -title: Configure APM features with application_monitoring.yaml +title: Enable APM SDK-dependent products (Linux) --- +{{< callout url="#" btn_hidden="true" header="false" >}} +The following functionality is in Preview. +{{< /callout >}} + ## Overview -On Linux hosts that use Single Step Instrumentation (SSI), you can enable or disable APM-related products at the host level with the `application_monitoring.yaml` file. All instrumented services on the host inherit these settings. +On Linux hosts that use Single Step Instrumentation (SSI), you can enable or disable APM SDK-dependent products at the host level with the `application_monitoring.yaml` file. All instrumented services on the host inherit these settings. -## Getting started +## Configuration steps 1. Ensure the `application_monitoring.yaml` file exists at the following path: @@ -14,7 +18,7 @@ On Linux hosts that use Single Step Instrumentation (SSI), you can enable or dis /etc/datadog-agent/application_monitoring.yaml ``` -1. To enable or disable APM products, define them under the `apm_configuration_default` block and set them to `true` or `false`. +1. To enable or disable products, define them under the `apm_configuration_default` block and set them to `true` or `false`. **Note:** If a product is enabled through [environment variables set on the APM SDK][1], those values override the settings in `application_monitoring.yaml`. diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index b6d38f984d7..804e55c6479 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -21,10 +21,11 @@ To learn more about how it works, see the [injector guide for Single Step Instru ## Instrument APM SDKs across applications -When you [install or update the Datadog Agent][1] with **APM Instrumentation** enabled, the Agent instruments your applications by loading the Datadog APM SDK into supported processes. -This enables distributed tracing by capturing and sending trace data from your services without requiring code changes. +When you [install or update the Datadog Agent][1] with **APM Instrumentation** enabled, the Agent instruments your applications by loading the Datadog APM SDK into supported processes. This enables distributed tracing by capturing and sending trace data from your services without requiring code changes. -After instrumentation, you can optionally configure [Unified Service Tags (USTs)](#set-universal-service-tags) or [enable additional tracing-powered products](#configure-additional-apm-related-products) such as Continuous Profiler or Application Security Monitoring. +After instrumentation, you can optionally: +- [configure Unified Service Tags (USTs)](#configure-universal-service-tags) +- [enable additional tracing-powered products](#enable-additional-apm-related-products), such as Continuous Profiler or Application Security Monitoring Follow the relevant documentation to learn more about Single Step Instrumentation for your deployment type: @@ -34,7 +35,7 @@ Follow the relevant documentation to learn more about Single Step Instrumentatio
To see requirements for compatible languages, operating systems, and architectures, see Single Step Instrumentation compatibility.
-## Set Universal Service Tags +## Configure Universal Service Tags Unified Service Tags (USTs) connect traces, metrics, and logs by applying consistent tags across your telemetry. This makes it easier to navigate your observability data. @@ -46,7 +47,7 @@ Learn how to set USTs for: **Note**: In Kubernetes, USTs must be set on both the Deployment object and the Pod template spec. -## Configure additional APM-related products +## Enable additional APM-related products Once SSI loads the Datadog APM SDK into your applications and enables distributed tracing, you can configure additional products that rely on the SDK. These include capabilities such as Continuous Profiler, Application Security Monitoring, and trace ingestion controls. @@ -54,9 +55,9 @@ The available setup methods depend on your platform: | Configuration method | Description | Supported platforms | |:---|:---|:---| -| [Configure in `application_monitoring.yaml`][17] | Enable features across all services on a host without modifying application command lines. | Linux only | +| [Configure in `application_monitoring.yaml`][17] | Enable products across all services on a host without modifying application command lines. | Linux only | | [Configure with workload targeting][9] | By default, Single Step Instrumentation instruments all services in all namespaces. Use workload targeting to limit instrumentation to specific namespaces, pods, or workloads, and apply custom configurations. | Kubernetes only | -| [Set environment variables][10] | Enable features by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | +| [Set environment variables][10] | Enable products by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | ## Troubleshooting From 576395b7e335e3d2bf93869a14388b257fd7b552 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Thu, 1 May 2025 12:06:15 -0400 Subject: [PATCH 27/33] change title --- .../automatic_instrumentation/configure_apm_features_linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md index 77153ce638c..3883423a14c 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md @@ -1,5 +1,5 @@ --- -title: Enable APM SDK-dependent products (Linux) +title: Enable APM SDK-dependent products on Linux --- {{< callout url="#" btn_hidden="true" header="false" >}} From 9a47f71c3a1618e0db48c78d7c1b4e7d7aca5bc2 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Fri, 2 May 2025 12:19:14 -0400 Subject: [PATCH 28/33] datadog apm sdk -> datadog sdk --- .../configure_apm_features_linux.md | 37 +++++++------------ .../single-step-apm/_index.md | 10 ++--- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md index 3883423a14c..9df13f72ec6 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux.md @@ -1,5 +1,5 @@ --- -title: Enable APM SDK-dependent products on Linux +title: Enable SDK-dependent products on Linux --- {{< callout url="#" btn_hidden="true" header="false" >}} @@ -8,7 +8,7 @@ The following functionality is in Preview. ## Overview -On Linux hosts that use Single Step Instrumentation (SSI), you can enable or disable APM SDK-dependent products at the host level with the `application_monitoring.yaml` file. All instrumented services on the host inherit these settings. +On Linux hosts that use Single Step Instrumentation (SSI), you can enable or disable Datadog SDK-dependent products at the host level with the `application_monitoring.yaml` file. All instrumented services on the host inherit these settings. ## Configuration steps @@ -20,27 +20,16 @@ On Linux hosts that use Single Step Instrumentation (SSI), you can enable or dis 1. To enable or disable products, define them under the `apm_configuration_default` block and set them to `true` or `false`. - **Note:** If a product is enabled through [environment variables set on the APM SDK][1], those values override the settings in `application_monitoring.yaml`. + **Note:** If a product is enabled through [environment variables set on the SDK][1], those values override the settings in `application_monitoring.yaml`. -## Configuration examples + As an example, the following enables profiling and Data Streams Monitoring, and disables tracing: -### Example 1: Enable profiling, Data Streams Monitoring, and tracing - -``` -apm_configuration_default: - DD_PROFILING_ENABLED: true - DD_DATA_STREAMS_ENABLED: true - DD_APM_TRACING_ENABLED: true - DD_LOGS_INJECTION: true -``` - -### Example 2: Enable Application Security Management, disable tracing - -``` -apm_configuration_default: - DD_APM_TRACING_ENABLED: false - DD_APPSEC_ENABLED: true -``` + ``` + apm_configuration_default: + DD_PROFILING_ENABLED: true + DD_DATA_STREAMS_ENABLED: true + DD_APM_TRACING_ENABLED: false + ``` ## Supported products and configuration keys @@ -64,10 +53,10 @@ The following minimum SDK versions support configuration via `application_monito | Java | v1.47.0 | | Python | v3.2.0 | | Node.js | v5.41.0 | -| .NET | WIP | +| .NET | Not yet supported | | PHP | v1.8.0 | -| Ruby | WIP | -| Go | WIP | +| Ruby | Not yet supported | +| Go | Not yet supported | diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 804e55c6479..9e079bb1504 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -15,13 +15,13 @@ further_reading: --- ## Overview -Single Step Instrumentation (SSI) automatically installs the Datadog APM SDKs with no additional configuration required, reducing onboarding time from days to minutes. +Single Step Instrumentation (SSI) automatically installs the Datadog SDKs with no additional configuration required, reducing onboarding time from days to minutes. To learn more about how it works, see the [injector guide for Single Step Instrumentation][8]. -## Instrument APM SDKs across applications +## Instrument SDKs across applications -When you [install or update the Datadog Agent][1] with **APM Instrumentation** enabled, the Agent instruments your applications by loading the Datadog APM SDK into supported processes. This enables distributed tracing by capturing and sending trace data from your services without requiring code changes. +When you [install or update the Datadog Agent][1] with **APM Instrumentation** enabled, the Agent instruments your applications by loading the Datadog SDK into supported processes. This enables distributed tracing by capturing and sending trace data from your services without requiring code changes. After instrumentation, you can optionally: - [configure Unified Service Tags (USTs)](#configure-universal-service-tags) @@ -47,9 +47,9 @@ Learn how to set USTs for: **Note**: In Kubernetes, USTs must be set on both the Deployment object and the Pod template spec. -## Enable additional APM-related products +## Enable SDK-dependent products and features -Once SSI loads the Datadog APM SDK into your applications and enables distributed tracing, you can configure additional products that rely on the SDK. These include capabilities such as Continuous Profiler, Application Security Monitoring, and trace ingestion controls. +Once SSI loads the Datadog SDK into your applications and enables distributed tracing, you can configure additional products that rely on the SDK. These include capabilities such as Continuous Profiler, Application Security Monitoring, and trace ingestion controls. The available setup methods depend on your platform: From d22ad3323e59bb44d44c75bf05278bfb72456be4 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Fri, 2 May 2025 12:22:17 -0400 Subject: [PATCH 29/33] update enable sdk-dependent products section to include tabs --- .../single-step-apm/_index.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md index 9e079bb1504..ee4104a122e 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/_index.md @@ -53,12 +53,42 @@ Once SSI loads the Datadog SDK into your applications and enables distributed tr The available setup methods depend on your platform: +{{< tabs >}} +{{% tab "Linux" %}} + | Configuration method | Description | Supported platforms | |:---|:---|:---| | [Configure in `application_monitoring.yaml`][17] | Enable products across all services on a host without modifying application command lines. | Linux only | +| [Set environment variables][10] | Enable products by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | + +[10]: /tracing/trace_collection/library_config/ +[17]: /tracing/trace_collection/automatic_instrumentation/configure_apm_features_linux/ + +{{% /tab %}} + +{{% tab "Docker" %}} + +| Configuration method | Description | Supported platforms | +|:---|:---|:---| +| [Set environment variables][10] | Enable products by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | + +[10]: /tracing/trace_collection/library_config/ + +{{% /tab %}} + +{{% tab "Kubernetes" %}} + +| Configuration method | Description | Supported platforms | +|:---|:---|:---| | [Configure with workload targeting][9] | By default, Single Step Instrumentation instruments all services in all namespaces. Use workload targeting to limit instrumentation to specific namespaces, pods, or workloads, and apply custom configurations. | Kubernetes only | | [Set environment variables][10] | Enable products by setting environment variables directly in your application configuration. | Linux, Kubernetes, Windows, Docker | +[9]: /tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes/?tab=installingwithdatadogoperator#configure-instrumentation-for-namespaces-and-pods +[10]: /tracing/trace_collection/library_config/ + +{{% /tab %}} +{{< /tabs >}} + ## Troubleshooting Single Step Instrumentation automatically disables when it detects [custom instrumentation][7] in your application. If you want to use SSI, you'll need to: From 410bc91fb4223d77c6216ee8788a98c48cbb7843 Mon Sep 17 00:00:00 2001 From: domalessi <111786334+domalessi@users.noreply.github.com> Date: Mon, 5 May 2025 14:21:52 -0400 Subject: [PATCH 30/33] Update content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md Co-authored-by: Duncan Hewett --- .../automatic_instrumentation/single-step-apm/linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 16d91e7a0ce..cea4833751d 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -15,7 +15,7 @@ On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install ## Enable APM on your applications -To enable APM on a Ubuntu host: +To enable APM on a Linux host: 1. In the Datadog app, go to the [Install the Datadog Agent on Linux][15] page. 1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. From f4f7111862c7d46622e3cb0a33cb5f7af6c63747 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 5 May 2025 14:25:40 -0400 Subject: [PATCH 31/33] typo fix --- .../automatic_instrumentation/single-step-apm/linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index 16d91e7a0ce..cea4833751d 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -15,7 +15,7 @@ On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install ## Enable APM on your applications -To enable APM on a Ubuntu host: +To enable APM on a Linux host: 1. In the Datadog app, go to the [Install the Datadog Agent on Linux][15] page. 1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. From 2d56d2cae36026a1c335b7b8d6671423be6c6514 Mon Sep 17 00:00:00 2001 From: Dominique Alessi Date: Mon, 5 May 2025 16:38:33 -0400 Subject: [PATCH 32/33] add screenshots --- .../single-step-apm/docker.md | 7 +++++++ .../single-step-apm/kubernetes.md | 3 +++ .../single-step-apm/linux.md | 8 +++++++- .../apm-instrumentation-version-pinning.png | Bin 0 -> 98251 bytes .../docker-apm-instrumentation-toggle.png | Bin 0 -> 286373 bytes .../k8s-apm-instrumentation-toggle.jpg | Bin 0 -> 240951 bytes .../linux-apm-instrumentation-toggle.png | Bin 0 -> 275179 bytes 7 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 static/images/tracing/trace_collection/apm-instrumentation-version-pinning.png create mode 100644 static/images/tracing/trace_collection/docker-apm-instrumentation-toggle.png create mode 100644 static/images/tracing/trace_collection/k8s-apm-instrumentation-toggle.jpg create mode 100644 static/images/tracing/trace_collection/linux-apm-instrumentation-toggle.png diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md index bb0f259e5ab..346449531bc 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/docker.md @@ -19,6 +19,10 @@ To enable APM in a Docker Linux container: 1. In the Datadog app, go to the [Install the Datadog Agent on Docker][15] page. 1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. + + + {{< img src="tracing/trace_collection/docker-apm-instrumentation-toggle.png" alt="The 'Customize your agent install command' section of in-app instructions for installing the Datadog Agent on Docker" style="width:100%;" >}} + 1. Copy and run the Agent installation command in your Docker container. 1. Restart your applications. @@ -32,6 +36,9 @@ To customize tracer versions: 1. In the Datadog app, go to the [Install the Datadog Agent on Docker][15] page. 1. After you turn on **APM Instrumentation**, click **Customize library versions**. + + {{< img src="tracing/trace_collection/apm-instrumentation-version-pinning.png" alt="The 'Customize library versions' drop-down in the instructions for installing the Datadog Agent on Docker" style="width:100%;" >}} + 1. Find your language(s) and use the dropdown to either: - Pin an exact tracer version, or - Select the major version you want to use. diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md index e0c3508860b..68c8d1fea48 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/kubernetes.md @@ -32,6 +32,9 @@ Follow these steps to enable Single Step Instrumentation across your entire clus 1. In the Datadog app, go to the [Install the Datadog Agent on Kubernetes][11] page. 1. Follow the on-screen instructions to choose your installation method, select an API key, and set up the Operator or Helm repository. 1. In the **Configure `datadog-agent.yaml`** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. + + {{< img src="tracing/trace_collection/k8s-apm-instrumentation-toggle.jpg" alt="The configuration block for installing the Datadog Agent on Kubernets through the Datadog app" style="width:100%;" >}} + 1. Deploy the Agent using the generated configuration file. 1. Restart your applications. diff --git a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md index cea4833751d..d6ca50f65de 100644 --- a/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md +++ b/content/en/tracing/trace_collection/automatic_instrumentation/single-step-apm/linux.md @@ -18,7 +18,10 @@ On a Linux host or VM, use Single Step Instrumentation (SSI) for APM to install To enable APM on a Linux host: 1. In the Datadog app, go to the [Install the Datadog Agent on Linux][15] page. -1. In the **Customize my agent install command** section, go to **Additional configuration** > **Application Observability**, and turn on **APM Instrumentation**. +1. In the **Customize your observability coverage** section, go to **Additional features** > **Application Observability**, and turn on **APM Instrumentation**. + + {{< img src="tracing/trace_collection/linux-apm-instrumentation-toggle.png" alt="The 'Customize your observability coverage' section of in-app instructions for installing the Datadog Agent on Linux" style="width:100%;" >}} + 1. Copy and run the Agent installation command on your Linux host or VM. 1. Restart your applications. @@ -32,6 +35,9 @@ To customize tracer versions: 1. In the Datadog app, go to the [Install the Datadog Agent on Linux][15] page. 1. After you turn on **APM Instrumentation**, click **Customize library versions**. + + {{< img src="tracing/trace_collection/apm-instrumentation-version-pinning.png" alt="The 'Customize library versions' drop-down in the instructions for installing the Datadog Agent on Linux" style="width:100%;" >}} + 1. Find your language(s) and use the dropdown to either: - Pin an exact tracer version, or - Select the major version you want to use. diff --git a/static/images/tracing/trace_collection/apm-instrumentation-version-pinning.png b/static/images/tracing/trace_collection/apm-instrumentation-version-pinning.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2d6550da82f06df51524f69d73d7d5d0388d25 GIT binary patch literal 98251 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

mR&)BL7Vx?67T3Y1Ce;4yTlQfzTUHU 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

4NO81A4NRYG({lMO@hb7%Yz5lz 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ฮgOeILkGbm#e=y8<_~NFKIlnd}<15ai z2v1|=?#ATtXygD%sBJ!SQ#(NC5p1~~xbCg-rZ8m(PGk#i9+Gng8b-{82JSJDJ&Tkw zBY5oJYwV#VYAz2C;+mW12k~c9DC6TJeZ-D4jMh*~3z3@y(ES*N?N;Zs=NOjsh`nc7$a z-oEBR99i+0Cf<*xZI-Jt{0}TYPv>Q_?nc3 zBg^aan{pnBn^cGo9j#ZB{~2&fqk}wf{^{q8S^1fSixHDfXX|1>%xfecglka(jS`av zJVUzuT7Akf>rV?dhw6|HJENz3AEN*giPdy(xPrW@%~lCkHIE$6FJ%&WqJm(<|Bn?^ z5d4qBGRPO~)B`Ji&oeb7#`ZUIqhzz$#*B9n9fC{8rp~XAfx;A#?4-tFLp1ck23NIC z-CDoBrZIMT`_o9N1OE^<#_1}LZ`mUbQ2B+ zas7165Cl(?ETll~v4{CPLYtdvq@(wEgRQOBd>*$1P1Od|qasSWF3}r=9pm`aYSuoP zmzyp(zLf^FKGi_RnD`Kyn$l~-2Mc--YENal;wOPVWX4P0F`KDX=SW3^Rz;l*$S_8> zNv$(oDYXsTPZm+;Y7hFR)P&o8eiTd}x!KEjguO25CJX{2UjqsYl30hY(xe=VW1g6I zk}vniq^+1G=YFb>_FGFD-cMKk)& zTX`9CORq8Am9fNU7$59Pj=tgI7k8t*TICAA|D8M67YwS3&bStU4KOq&jk^1Uc?tFK zxIXt_WI2on#27>38@wWpo-sb}y(ZX);2B{Ddd2YsD&-X5{Bn+c=pR+Hn&&2p{n!+j zUqrMRU&Cz9xjAzo^m3$k6EnCJcSbf`I`meZFAB~p z=lkbe6)1ovRs6TbPhztOxPddLM8j*2-2oNnpj!Tx=ihfO<)p@_$YOaTYvpny9&UFA zj4=yf>iW$~Lo^W#cSvl|FnotoT(zwR8UPysbC9|FMMc5%w5LYUVyEvoq{R?8I>W%Z zB{W^32SsST1Y;_uRrOio=vP~z>0YmSAnS7=M;y)IZ`m}}B$HC3FW%u-L22GQC0duP zb#c4r>5by;9sc`FkGCa83$le7w3=ZY&wcz%)Q%My7g8INhalZo>o1x0$tX7BbVz&n z&^BNdN3uC|d3xdSbJ>`%|1bUa9yNIJqfeM6lj`&VXrH?VBC$1+JmjT0ubwYD#MOPi zhJxHtNrbYEEvD1Ss9((9GAq;fJ9IgyjHBzxPk(NX&`F{Lz_Nln{K7I(Oo01ax8MRi zY{=3QV$ysOYNCD2+_jFYy1>MjEhtBjX9Jd|5{Cf>m;U_y=xUkmA$X$GtNz=U%s`q1jKms^-Fp$J?*! zyoghQuKQ4)6-{PiAzjarl;|bV-64RXLQWCqu{T>n3-vmfVX#GIo6jtX#j_m<5A$Z> z2xnB(wC5fU$+BBru&LVTvlX{{oinF_uYwZm-7O#k80vQ-gQDxf5;YP?o221x}azx|&UMP`B-Z37b)q&vn)=R%U5Mr#9=VO}-i=fzy`fyyx^i zbJ~F5-FCGnU;X|kU&x6_>KKBLM(F8){5ML@zEvJ-`P!F&o$UZwXee!QIe32(%mi*j zlG3A?dgIH;QIwU>z2ayeB{8<^ywoeLO~!Y`A`59ap!0m9M|j~WtWc5RaBn2DOzO?A zUr`m%uHPrC*`?plc1t4i;mJHtD-}dm(QM$Q33iR|eI}>@?UVq6y#roHA&*|*0<^6k z6Q1b7`SO*`2{SRKU!51Pf^&!XaY}-Z@$G(>un{O-ZKMxsmYz%aSDd+M#4U2H782v4BnH&W_JoJwZg&W^~5X)s_SUOXPWy?cV)ZRVkn1~14h*)c~+#~6JhIT{bTf> zknqNFJ5mc@tK`Z-d6EF$(*9Tzcmv~Xnx5tOvAUw`-LQ{7rx6p8@58RD??{}R%3uc8 zYE?-d_Yi-f0=;lE>H>C;Q5x@-EC{$<(EOj&6*Rb>yLvHzNr31UlRe?&j8S?Om+Si$ zLhIu`IS!8t6|o1Y9__R}Ht4sppAPf&l8}#=tXhQDR;D;KGo3Lhbqr~RriT|!T(ex3 z#=^jQzZ)->7r?Lq3+y<{hDg#;~fWZ<%k z+;K99;d{9ZM3Q+wn>~NJu@>nOvaK8$a!EZkwI3#e4~7IVN1Joru?n^D84YfFv2;!e zUVJq@Wg!9b8}E0N%)u7kh)g+FQZ0x~nDj#A%g=cU^b$FKe9G_b=fRN-B)m&AZBDDv zFYLYp@6>5HWY1qXV(ql;M>?JvndMDM66b-L)p0#i02^VSeH1E)zB|$@(4oL<9MF50 zpFsd}I8z`7+M_4wbVYUFLSQB1>VaMA#-e*~s@0}4MA#M2%rDzF%k${`6~I{Mbvf&* z#J7KusnoAu3x*IYqUhyBTpUb2Sw)i~@3;7Pvm{e@BP&ONrD2Xiqq7(qRj7wmt#21a zQ1cfX9XW~9*}U~?g`WqA|}H+e1McOhp=A*OiE% zab>|J2qgY>WZfcc+#fvz%Q8ha508w8XTX#Br9EZi2Rr~C0Yj|R;6cv7YerOQmfdPn zzABSjL&n4uO$HA^RT90E%1-RbWEQQ-->6LUrkp7nsyU`yZy(tCW+u z@!;`0smWS2AOph}H=zk2{#;6BfE8uwbWlFuSuB{>K4?j1wP40F z%}3g~nzJ<5n32!>#Rc+AdBk^xZV%sNT4)86RbJGO-1?gcNUulE`E;h%&;c78V`5$w zZ=mrI8HdtX2trKI1?A+N3IF)(C^-UBXfH|VdAz{!o$`A0TS)oK{y?CzR!FXQKaeMy zD{L7Rfo?}qx4|)_eg3Sq2NYFhFs;N&@2PiYY`D$BuGS>u)60f#$v(J~UF3=aHTfuz6J$6)xEUS%B)G4VVS-EFV zrSjcVe!NbwrMvA{u+kqhrI5)B-kV5BIITRow^Y#cMshk~7Ia7f5*%HeT4PU5UGL!F z$Z}#^BzSJvBo$bAO>^MmHe|^@iU-iO)I9Rm6UKrTRAhs$F<39<~mpPoRW+5bQiS}Gf&h)Aby-jw}!`lYI-1kn6cML zqc;)E*W90ZcT;LUv=NY-{@07MWtEMPJ z)yzxUQqU}}Aax48+vz$mLFmmT$yFW}xqiZqCi*WM~7 zR0ttB5@WvApPb<*5x zbe%{mMdBkZd}8a!nPB=IN#IhOvkA85rk!#Nj!8!;Hp5|%4Jshu%iRh}mIk`~JCWCB zCx>5}tVum*^#;$;54txx>3drSGkfwf7lLx~8CA9Hzhv^n6Or`HrP=7i+X7bI@Q6&F zkZo0|wu8-pbl!&%fv6u5Yu=gPS7-^fY>)K;`eSjAR=!$MIy@nNtIp`{NgILI4W8rLR`Qw_V$LbN~`#?>LAP3G|h%SJe@h6A$G!{m&=n+*6z79a0>D~iQVwX$0%0l(y&6?HVbS(@|IvG2>B z5G}-4U2(7ie<%)~5=oA*lYjy$P5_J(SBATKZKkkPH$tA1tZ!_oLtdx2z1BKHsI6pvCN)5It=m;mGMj*Z3K z@%{1-R?!izfsfEcGU+mCKT6>PG($Zu)9Od$cA_sPqTXAFXu%6s*n6sks{}@C(G3%? zG!=Aco5sY&b3+xzc_~xPg$C>~FCT^!6p$+tdJFQh>>+h9@|!oow++9)`LxU;+82y; zQc-LAP2vL&F|Rep)MhO5}Z zGZQ&r)@|Q%dcyg3_uH5u>K{Yg+q7Ux{%|g$bxk(%OviN0J}gHLoX6UVf2U5?vR}uL zjjyg8Gut*lbFU?6I6>$ENLVzbg|8sC8%tw1X+H#xtkMm+9vL4UjN*Sd37kmIC7!k8a=LHmz8q z791%zlJ=fI9<@zXsR{v3H46>2dl5(*BN!RM>N3FdbHihRm^DPZ^UOsI3$+91zb1E~ zVOM_F?m>V`j5om)CcER2+sUMfn*eZT(J4jPRStm=Q1k>D8Vru3?xqZUXx-m_;ZhgN z8vndwo#66D>(@soQiX?z6ap3_nx3PE~nixR1>tjlEU=qn$)% z+4K~dN!^E{#dZt!q2~cn_!CvuvO(F?cr7?S4aW(WCJz0;dBD_7d0Cs^is2g3#t}jE zXU^QE{!>T{W0v?@8E`BDKe~QY)br98`E3gGOdaudN}IglLm;kPeCmUlO^VQ|CGRqu(P%5=!(N()BJIdxLO;=9Qg}P1z)5jUgOkPHU^pP2Hf+fP;|cUO&w_=quzhJJQ>IGAyu4s2O4&Z6;i`OJ5EoT$E8=-`v%QXd6P&|6)qF^`g!n=e>O)Q1Bz)H zq)qB~Z0y~+2)7eYaYhA&CoJRg+xtYb25S-i^$EryC$WIzR83%5EE4m&rW;lFns+^a z`btd+NDIJDd31JH@x9Y*A3z|Rg=Sa;FRW*k5(@G?t)0DdbqSD>>8(#@Rwc@O9)uTcoOK^=(>*KX|toWrm=<`e+cSmi(~D6ShLLy4mey~8*enW z07S*`N2mFnw!=gUG$pA3ny$ryVqv5#@+%qaXOfeFnUe!~6y58?#HR6*SiV3wi;2$_ z&)}__P7L&`A59fFaxf8E$@vpGaPHf5Dgs)|=IZz(W-b6yPMdUr`>E3`?3jKKL4cP5 zyh-p#PnTrL=C>^EQ^sI|&i?+z8xFV{XMHS7^)tyv2}wO$Ys%O7()u_P7)o zSNxl%VG-EtZ6)?ICzJq{6&oU3b?BB@&U0N@tRDWuPsLNQzs;S=3*8| z$dsLBAzLQv#1E^am9rtX6bPhDF%=I7adb@@hTUr+Rk$p8{gbI8&I}f(BYSq~9M*@t z_EQ&-zbt-n#dq&IpqiDS9Sz~6Yp0LS@!O(C*ba2BF4+74+4tj@yk?XHRV1!jUu{lUo6~{a)rUl01AS)g=bCnu2{e095pc_ZO)Xq` zgc3Jbd&1m(ifGu&q3NTsAIVqO`yUXucxsKw%jrzR=*oT14-4;KV9i)pCT;sZ!LmJ@ zyl;3}uUbHBk%}e&CXM-W8s>`&Dc=ZB00gP`e-ge(s^za}m6XJFcaHN_8a%rR1jcsz zP5H@i^Nt}$n8Z)^%itD`oFaG(`0m50=0x#}*8^dcsZmQ_&-Q?R`vsAb7C^xRk zb$+oD9WHXQ<;PmS>dLEjLEdo0Lca~iX}KodNeVxB-HYpd|86iITyMj?J>*?St_<_7 z9oyaM2#>v_MyL;Pg>R7;%LuO9?2`esy+Q*;4d45nK}H;L;gEqQ{i6@P_*<^luToQM zrkcKCWK(7$_QRq#B5)S(w*DA5b{DX?=$c(gez@e@P^s`5_Vwsa8useWePaJ}Cc&9H zBw&Oz*lOd6YQ_+^(AMFU(&H*u*jzJ-=7;$+%P23|>&*=x+8vn=PPc|h?DyoynSomf zO_VUycWjQpV7tMvDrAJ*_6cIb)BUC*q+8raeTgk$mPOs*?==3p2Ka_p{#1UH`Q_20 zM3k#!Jee$s8+tf~)f04s#+DOz(JnFj=>le(+7#QsLe_d++F6r2f=ZepT|rG@J!0n3 zAY$5VjR$ef=n%_60hu2sxA009bC@>L&6VlG(j7^ewdf|NQA;IYDeezkX1A=2rzRIR z6ZO2It^LW-EN1umIe3$Of1s#~PQgjP1-Ouk(87o$=y;=%iB2O|#bTHdULBJq3Sx)b69Go}iT zP-iFkol)J*4Y>8~W_`sdrsNV@<_GE`JDd;MhylR&7Q<*Sa#>~v2a9SZ=Oi{?uUC3Fcx@+A7ERBx_Q;q9)zp*sUSz2Ve+$6$0QC+<7 zA2Kpl?0f9_y-unm)O0)$Nc`Mi)woa?a0@-zS(}WAl-_^%kpU;5s)9u;redW zHAA&Hc`iTq&hv+}$2(YT9hMIo^nK7~Uq8!-ixS@U$D;%B=Lbxbbc&S8o7MqA;t?r> zFo`-KEIEE)@b1ym`<~Av7Af$$rAuBPmiXTUEy6E<#9(VQT)}#|4DR9sMmk9SCyxLN zSnNnve0cHYwe1%nT^+t-VuB%a*;<=>uPe29fCio39+IHx3LK{q$V+LEF9%Fj9P)7RqQS zfh*r|Y)t zxrLtcJ0LoY{aUXv&RgZZ_jg7T(4rJ5E0&drR8PqaZ-zKCW4I zanf^^uDiweAOCI@IL|9igd7Zh$CaD`ZIhkxmUmGQ;It~M)WboPQ*wwtz=(CKPrsdw zAM@r1c{=!SjxF@9E$sxkF@+Kz`^yUqTr3UAp;S~FqbFOyfrzo6GmM%8C5!e_gBOMp zIwxk#Xl7z+{mN}rr||ObVZ(grJ9^8^T5Qn*FKiW-$n;)QkvW($RsqTZ?}X;I-d&`u z!8evmZcddU^Cl)=h}&V2#To-S)@kVuTK0FAV(m*Cu(ue-vMf6Dp{P|F0nW_+d?O>= zIbl8o_F=W|I7JRVP>6tYlVI~`+$zxH82vP2oZIfXXlwPOuC7mT0Z z+A+@v+{!u*Lcf3tgalJs9K^9KZu9-$L9kz=7$GFe^L!WxSbL<1yL$qw?eclE?}9=i z3=;dG7U`k$w(pD!E{XFusbGT5M3g)P`3f9!_-ldX(TxE>oLL}h`l1xcfdW`1T8R21 z)=Q~&>N))a6I-pOPK3A*&@&|8G;^!bQYLgXSWD(*vTIFMmotX?Ueq}M=7^^{Mi;5o zL+T!4$LdFYF|jIzy#eRf3uv?0FqWA2I0(LOT}sPjgg{eYwi9gL1gcTIylE?ugAQG& znx{|~`+@sA?YHhRdhXll@cA*G*s@Q^fzI|3%|qO9ibJ0-3=b{q=elz@9E>(CT=@$G zJT4k!2lSa^vT8QjUHyQZM-J2-7Pp}}ybk^bsZ`TuMrBG)G0O$nsy4$|7|K-yF|~2c zj6-Jfd;~ol*?X13#f9`5HcNzr#oa55-%?~f;S?7m1(xL&8It6d*~KM%2ZSO9@#OiN z<81XGz@@&?T8T*CnzC@5c;(nN^VFA<88c(L1KV+K9=&4Znt!4_N%gRpMwzPjRR%-C zLr*NI7ZK-fi)|9lf&+sM8U`d!+Ho2*EqB@|RHu~i7T=#vON9$%Z)wK|49rm0haCw) z;q0uX6XG#lcEInQ_ZBhqvuqgD(+8_y&a|cw({%%N%n|)aiKH5L#f4~ur|0}xj8NtP ztnDc_hN)l-7yrHZ>(2(#z|H&_1o(z~xS;cHW2PwYk_;%p>WsOOriG`YQxY8SItkz> z9OUhea-iqwl48cka>9#1O`C&#@CLLUK0F7E{2Gl2@ETgp&CPPno0}v$lNU2Y|5!r)CTFbE&g(69+U+dg;;FZ+sy8)Vz#x zMTdxzJ{O^+xOB8GAEI?9!)so=p;Zdwzzo1eu$Yr1tJGF(w&Ch6)qST=#k0#4 zQ^4sg>*n2!uVw81xVvh~ayqxYBU)bDm@ij^GWjjQVF-dkARWAh}_2j@Zul$P|UL3uG*=#B`gx@XafU2ucf~fWD>|<%H^H=(iz8@(RgwWM%{VhHv zq%m8}SX|zD@$K;0!3-*^G+%KsspiMV80nVJcb0T6e62+{P0JUJs9M5!Vyw%mVePEh z6g0~o%;n#+B_G?DG@YBhz~rw!bo1kdYB*jjOu3%j>+r*r)YapQg3`A;B_QyO)f(SAke>1a?7koakwY{E zN}Kf+`Co3JmzY&IYN?eafDIKegixBuZnY__#bY5=72&a~#kXg#Pch-N8pxwsf8iI* zC30!fgJV^+kpb=c&Uyg+uJ7Cpf+WI_C-JTpN0&XxZWs= zX1YC{{ZLS4BRhw`(m$>gS-^w_DUMgsyJNzrvO+l{EQEHY{y>va8j8YJn><&YwdBGU zr#V6&Mb5Jh20v}KL^?$tO|7MebA8Kovv1sc*{V)HZmi+T^-$9z>7gPM__y5B!Aw))o+=xad zgZ?is$zMQ=e|cdV{FNOiGuXl+gd@*%44-62pSJNr)8+M-=mgspY?e?@H-C zktFvnV;37y8LrO7C6r5=p-s-}txuc-l*h|qF)aLTLTu-+aqu7g18y`pgr`J;&Y?Av zv|Xq~{G-VSgK08%js30$rZ`+y0F+ZSP3A1V8)ANoDvl;D6w4*Re6!Y``7oMjWc$;6V2=?C7edd#^U!=EGb}gY zWP2VW?7td+dfrQO!TJ2Ba9VqfUbPgR(_t+hhv7kswHx=thf?Lf;Q1mG|ME#y1qy?& zt7DQmtR+Hp!QU5V=Io)sc6)y)Kze|T`1CB zsNlQ&s&v-vdsYB0ay_$xLU?$c(eTG%TCUrM!C9#lQEk{E8I@L*?+=eUn?kQu=3D?Z z|HHzSjzkkc<*(lxj{AGL*^JxbC%P;c^Q7TUA1~a)e)4dIYkef#pt17PYV6dp0S19|{}1iAThtuhhsNCaMRm7J`esm&fvDD?+DxSER)P zPt%1cL%|dt(TX;~J5ruc8Eh6sU;x0Z0b{0WDj)+}(`;C&sI^ratZ=5c*z=W)?DPwJ z&1H)b>dbuYO-^w*l_0qeu>LKLtjABif5_hl)(yd)m!`J?B#>*uidV< zYu*cUlC|*#x*O8h&%3Pd1FI_)N4FY7EaZyCclFn2`b=% z%IYK@Pi!9^bUi|w)Nn%KK`RYfDgL-=Jz#DATFviV269lm1>4Os7;JkT); z{LJI7@j?B8G*zMDVzG9C9?hDIP2Zmg@`BSX@yx&n5(B<`*UuLRAdoYp_s8g?nXNm= zTAlUqre}QBi@qqJkUC6a?$NkNP)udW@UAmv1{3wu!#gj7O?l4Gb=8w21HtlDQ;Z;~ zS3hrT%y7TDkLRby%#_@YBMQ!`5kS6%N&x&+z)M2et!z4Nk-$3XE zF!w$R&suz4>S}kicm*BQ>N2kBI3kKQCeJHFGnu8}h!g+5j5A(@lmaS1f;G3MC9@bN71_Z#mM{)TI(QYpp8OOO)E zmXDShplu%%h{U5=IeDu;`Ht5#t_@;H#I9&#MBMJr3%6@Z2I!qI^+YO z0?QQI^@${yC?Vod0AmU1EuY1y#rO`Hm`$7Y8JF4M`{wXVaeCWt`o&ToGNjU+K(L%{ z3}lizy;!DWz={>GuaqvJ;GGiSdQO%$E22OwZw(gfVFOV|U$i}Dn`4T1zDBgSIL^o~ zQ~mKL4LSRt|FUDU*@8;kLoO(gokfvhz$<$I2qj(!#Bzxd9MEMhTu4&B13m zm%eZQAZ&J@nYM3S@cuT`lcE4Hll zSgy3Og7-pG(T^K@1w2ok(boO7v(+fNWcot+cakv=YOFIK-(GU~D4XA5 z82xPpmi`Rmx2T}d|J}`GPgc&XZ?MUBL;W}0f~HphoCO%In%{bFmmTsAt`N#ynI8u6 z3|wWsT-`V!oS3#yL#S9bly(n)N-P6EtiAOIcxC~Mc>dVei-s>SZqyip<{GUw1BR^o z-{Y#MH*qNP{|;8iING#4TCZwQJIbN)bhPTGQOse3clSjpar`M&!3vF(jPG`tES`DB zRUZK#UmAiB=k6F7hiSGX=Xp4-xW1^1c+`K6`_(6i^^dw{5LAV$Mg}<|G!wrPTp*6$ z^b4wA%z!x2M>>Q&r&&(jb%EWf>yA2PHgG27aF&Q(`()pomMg!tqak+v zFW?(^Rs?%)rCks?MCkO|u}~F*K{WHw0> zFe4Rx`ckg$VR6(Kty!TzYO`MrMYS`P_GdhT3k7R@n`}r8tqUBfN8v+2`n2Su$m~^` zbxHI0g@qhSv`@s!N=nX>joqO3(BFN!0j9~Qls4|sOyK3=4(n*T8fAS5!;S@`8zWus z$!*RdnTS_EN08k3@jCVre2V>(Dp!M-6FSCc+e$*Kx?MIu#sk3Thag7@ngvt4mP~#j zmk9FgWMwFI*nD{Q_Q;0~hGt|BVg<7UlFR9dwD9o{MCR$OVu|(`7C2|&piwk@me9p# zQ8jJ?-}DrSPi+bx(e3+1b>G!6`8^Ma!9P-|KXRHB^kV8T?xwH4N1~S|GU!+4^>hyo_8)1R$sczkkl$} zQSQ~CAX}yH7aoQX|EhUkN4-ICA&Vzg;)cJ^;ZML4jk)3FApcG9O9OwCiB}v~qKBkK zr_~+N(fGL}icd0exJJ2hE`DQWWP;yiSf59dDkws~=L^wY>vAD(nYYz5LQ(xMr9 zRvgOT{kg~{RYmZIm>3cXRo9f1n7B%P_J*CvOq*&QHRGxN&rF2WZ^!uV9*U)7{pbY##+LkDUV{&BLY_NC8r`e+jhbjzl$yJw}$sT(&~Es(BvJUfD`f-t zahivCdB?7dzehY2jHjbvI8E$rVCm4OtO@gIZiz6a(!Ds{a&Xi`w~L9Axs@FKvm6!) z%U$gSVb4~{9DJ+6FIhZqW(B%-J3O=9k-g$|*Q|chcxeSGbcll8#@!p}&+otNxC}}y zRt>8!x3+ez=#KFg0zjAbA)K!?;c}2&thRVTK2sAi{L>86@2Jg5 z+x20E$?JHy`RKYEb=CJ^mcWTgOjRDh?O_c2iZQQ-yloKe-loZxn3po3kIZ#X&vv-i z>ok~(@9Wh8EwL5Z0Af0WG|3E?-ttpZg65TnD%q0Mz^JC`bmW4ae&RxG%^zUZ2iPzJ z-t2Ed-i9qRCU5###j_rxKOqRfQ(ktvYpNwp+#ht}mMboki#J*=UQksfz`TTcm9b;J z{y=cSB*27AqSx21GeUyWYg72=Q#jIpvM>HbKz-pNJA;{{+F7tsX>`=h9uu~J^Ic8D zvX--zVp(UcD}I>@3-JlU&~Nv56ag00Rh6m}4r{gD?PrH*xf!ChN&d$nN(;XfRa6#j zXwR5)l3{Etm{WC4h4%{b0?Gtj#9;}duS9PVQ15aK_kG3)7qIG;gE6dEh> zlOFbqn!G&FuH3GZev#2`OG{!o_!!nzY?bUc$+4(r0w12i>y{X4AZzw3_h$|#Y>hNf z?A46P?PLt7NJOy1gH00gfVXyS+&2`LQB|8!)>>)WfR9h$%Q2u=pxJtCa?lc>2?(IL z4bJ71!+BZSrzl!69-Pq}2)x%R8!(IF^h*DQgeXK~`5v95V*3k{o{s;+y3$wy(e0#R z->S1tLQc1R%ZbN0RL%9$st+T-weMZw6yg~ROW($6EpAQ!#w6*BJB-B0mhr6F#o^E^Pc!-;Dd2+H>7;||P!g!6G5Ziqovam%zrqP#@w|YO-$NXx zdF$Xn4IS^``j80f&g}xV+l|N{#_W}d-9PX=V9dCe90YBWXY6J1>UWQpJehBMMB5dQ zZf8B$QI{4jbr6lu_R)r_Q_K!ZQsLA(pE)IxlZk_A5s8tp4YA@RgA%9joC3}PGg6go6faL1oJ2f_uc5ZA%T&oqeYZqY3eNBqwL}9=61?M7QDbr;*_>-{ZY$L}!o)#~r z863g<$ABzWplgNe`t8afv4!tmos`$xWf+}OX;dL7lhbDKrQxq!In(ID{psTeD8l0? z&~Pp8y>)W~9D5`wf`0>xlO3#;wPgKV8tBi`9xrqoIGIHgrwhT-J)rH@`yuUz9}(Q{ z~40|FIhW57z}D&KXw(I!^cj~Gf%)b`Zyi)oiK0Ke8sS`Hcz0sW;- zwxi!gr>(aRyFK%cG^>8}#YqkAZ&S^`>={(u`ZEa|1 zV;t9uuuuR%2HUTa-r)zhOQ2CNuju9w+ayJa( zF|?90OK<7 zUt=+;|FjVw@!vc97YiUaU+lB^-?xY4FqK0^wCZ?H%fa|T`{vJ`@B0Z_q%Ltbo{8vw z+!wP`*h+}J`?~)#g61AN;@+P1~ z7_+!!IIg1IYIzE};(>hAq5i|1smddZ1V|58dd#8A|9s?LC=C1ON(3aRp@HXR%Sk%U zw*RwVzzI?x5`k|%N?ZX&Lr~@{VZ7UDDNscY$8GNFlVzdRt~JMBs4!4-h)dzL!&zy0 zBRezcl3jKb_c83$o-wBlU`e6Up<~GSd$#KWoU39q*lzx0{Bt@kWq{ehd&!fq%j)>4 z?{nxfl>O|4$KglP`O~L6P=*MjaM>7%yoF3TpKSX-(>4G8z=kRtgIg(w`mBV04iD)? zB0Sza)u!_qiN>|BnhRO)Rjp*I7Wc}T&ubS!qRwBa8G^pocGbQ0`BeS;OW&|wwlQ5) zOZ}MZ-&f7}KY2%K4l2gKUHB^*7sL_u#muOLLr<_Q{lDk`(DA^DM^xn4#K`}4U4%di zOsD18=v5W`uea|7rvTlIos-r7w#fY>2{_C12f=dzmwNQ~_2D0x12}MY5jv!>=)>Q3 zet*4z_~AcTn;7m|b)~n*|RiB_r`)A1sCf+$RK1#%2GY0R8Rv zMU4O8cvyI3>Hc=%AE`bYB5`V6bF|J$1<65l>des-Uo}^R%Vo1Z?Az< zh^R)va(Mq7Hd){ z1b0b*;2PZB-Q8V+yC;DJ2@b&>g1dY0O@jNz-QD#rLeBG^=ezHZ`}3<>wTdd%UeY~h z_v|@lkC7h5>o#5WiyFCjIMX`QTWd~DT!y>At`?{V+|hi8ZZRp4_o1r z6khE-a7L|?==1vpjDLY>RlHJLPA31$2!+b=UJJ1CawV%rlJTY!KLfD|A*_3q#hNblgD8PX+Wq%tBUWTbrmkCQPBrh*%nvO?k@*p4m@;V zQb22?L$yTum{r01LfokyW#E0WbOrnAF zk9m9KBck znX`Up#H$}`QU`*Fo}p@$v70^5QJXwvqmJ2+xDUj zT&ot7_d92jE?IMu7;UpHU#8C6Y}0H#1oMaLDR+VB7=>$A?o7F6rAel*kLPfWwPGx{ zdTB=S=1E-9_Dq6aK8^bQ7#AE!N-`5VK;;v}ck_~v)bB=}{WyF1-3=N>3bFNnObPlO zlpuLP5U`UD*imJWm-&-UuO5^3BtZNW6FB0;;78^Gz>xuX6+f+xPwbxi=cLH^0f1 zfyD@xIFN>l`%+Jtipqhh{CP4uCqY#~+bY5rQ=a6y$Mgg}a6a&GE;l=@zAORPCvE_A zRZo00W9EZO>mlm}z|PmLZ!ga&$;duk5c7yEM&O7ViiQq{4)G>txC5**8SpWAiZ#@6 zTT!rHF$|Uz5+Zgvn$V4|I|9ZJccBl7P5w7Pu#u7G*A3osZ7Jgo$9;4Q+}vak8UDq2 zY6)OK&a}SLaZTEFITvnqc>o_fXQwdcRp>ImLT!QN zIPyxjBeHUb&X?mkiarVU08)?zFbEa-`li|zKCw(;(do*q55#9Kr~7Q7v9Ynm>-k*@ zH+q~>v^-8)$C5jlC2ZyorRB=EUd1z;4~h`C-Z#d4)vd6i1GI619<*D6q&|HvsH|?w zM_&IG)rq^P&AD>bqT6{mKYN~R0h9l+5{pXZOVZqkKi9%oyyH5kVAON9C4!QIB8cyH ziO_tOqX7d~vMu5^l?ebg~f_yV97TIENs9=QT>+i#chPJQetxLLLqG|3^p2Z_K>jC?J($D7XACzyXot&|D^S&;U& zf_+b5L`8M;^I!7h%+6mc$Uz6Z5At8g0_o5(_C=CeTUMG?hU?Y6?g1#?MG;!u9tDBW z)1OnjZff2AuG{_X-(fwH84eor1u|SlX^G?v@6@DvztddRA;h`Q8C9I-vJecFa1c^R z00cT@!SIvlgGJQO_r@1Gn0fLMrJwA@0_We5g~{TxtJL{Oj^XGJjXK!D~1= z4vq942aKFti;A(Qo7=NWQ3o;eKwWWd45FM@r zbI}dwN3!p46!eMYGpt&@7Wv#dXb%CzAUttt2&2_>AXW*{7tZ};+|tvduc1f z;7t|@-=YxY>~p&{jeG2b&FtLx#w+zU9*^Izy?r(EWjTGU^qj_GW6^IoJ}$Jt1u>ZS zoQ&a{HAxH6PbH0E_4H=>b_+C(gmjgoI}6NiHG4eg>Y6%|pwX6w7MYZJowCTWhU4Lv*jo`~DPY z&A1nAt4SU`+}wV%`a5-YGv0XD^XjzsbcrN{J}*X3>iDiin1){Q4{IBSxDh!dv)PH9 z;)cq%-l@U55moe!)GNLK^6pW1Zxt@gWDgXE{BE5BSqR8(RcX|7Tx}1sjEXB(zLx)h z*q9*}YA)j=D$Hsb9JsRd9)CQ36YH0K) zu)nfKYTlqPoWq75<$;Riz$Xk1aA0E|O54kum#hiTmXIH%W>(n>dRT;Zi+z#xmwG;@;`2Mx#o(#X=UZU7}Bj5 zNp(GRBsK+B-9Zxx?_Ka5Wp3dz{QSehC~9kOtU>R)%ip(jX0{l7hR*4TJhCdF{Qm9- z#>Zxl*kA-U9BRg+$WPXR&c_w*tREyoenU&Lepmc)88|ZLk=)r~iTjiO+6^X^*KOfi zg8|E5vsAq)uaV#D;f>3u#1|CV64-deuPzQs4;b_tdT{mAHR9fqjgu1gRPBz8a8Y)= zY`#uK$(!^TbFTcXTHAs2(coL=?&o>~F2M~qo%yvkw?+4v>ux%dB zh{9x0-#%R<4>q(CFO(K5xbTe`g;wx!7tb!^!nghJ0T*#pVjQ2a{|22BoX~-CpYg+3 z$c7>X@?%dKCG1=e=gY>`4PW@g)wRKgt1pLrOV5}p)>CDgFhFvxpnjM0i-ZpHQ&M4+ zH!$|;J&k?kB`^V;FUDd31Wv1`a7ZD*cO}Xf+QmX1o49%UpW?a^ zCm6Cbd~e$cizjU;eovRqmyg^@NUEQ14kRzNUccN+tJ%K*AhoT4w0RZOX`7EX<+z{B z$m(psr3ZkFK@vcepTgBkY!fS}Alrt8xo#wlOjXuEpm2KN;b)$Uw%BOQ?pdzx78oSa zz`S4!ZJ3SpGcZsMTb=!?%;>t(iU|S{MT6s`PX$GeE~B3>P!?BXrJ~&XB{V_j;N2$7 zcsus#3e5P{ac9=gP2$#F9h@T-EXIC=_*?#K0%UjBNCbp}<{A10WxNv^REghk?eAgo zumZ^R$HrtTG>d*~U>T-`Tl|%kpbGZi)bwPIwZ2?Nuiib9+!^1Cuc$Ih>5xgboUIJ6 zz8!|&8E$ft}`y9V= z(a)*Ix~@Vw{ZsE<+&S}npaJSip-7>R0eY3*pOr3y(J2)+QTFGcAk0;XQEsUNoS4oO z^|vhU)`qtzrFx5S+Tfs@G=GTVvr=XR?a^f3+5572+|YIlbV|mRf_;vo9VNguH#a{X ztK5i=6jgNb`Kiu6`JWAYp<^mGN{M@7!`xb5d(%xf{h$n?#OlJv>=HuHc`KXb3{4gI zgQSJs5}uU(!`{6_BanD ztDxG=_tp%1v**)tlb-jDLxEmR$iPhm5qIh3^2hJl?RfJNngfR2^G$~WcrcAJ+e+WM z_lajl_m7reR$qU9M;znp#-B0dnO=GD)}&oGpb}}yg>o_S9Z|)^>cKIsIFv`6Kda&Q znuwk_aNIdwZvzc3)rd;kd~ToPAHBp=XvfKX#+VCXT;Ic{>qZO=%U<}~-=BO?DQ6YZ z%*!M`kdMJs9>X3FJYKFjX?ggnm=@{s`Q?54Dw1Mx%T_WvF;}7t+k%|Po;gjziJs$k zNOVCanKoHKvy`4eGTfwXJ}*z1P|ov~Y1#$3ba2@5W}*(g#_>yJ;9)BPx%MP&Tw7gf zg5)ZnTWF#rqwCoZS%+#O=al)meBf|JyvQ`%-P@^Eea~U9lK1Upm1hb(N_mQ zBfFh^BVD97xl^S$G+K0P-pVwHciuGmUPIxst+D<_wOjLfxsaZz-6R?0x>fE}gkEVV z{N_!_R>SoRbtgXz_eO8F4QsElRwDkHb$iPTp?DbYJr)oP+p0SPJTxL?44}^0_6=0! z3RYVc#UEiBA)*9raF{!pAIzzwrADm)deD$)eY{W&g#yC3M3=LEIdZ0(SZF1*!iH)w z6SGL6F8kCAb$rI|M3l^ZHatL7UDMs)C32uV6GfQoTo64A`fObLg9DW4WJ~;_(e1#3 zVaGD{;zdK`CcME9vM%UVBHSVj<38IK+lrA=E`Gb_-xJr}`9xElg`yZ0RIa7W?Oc-| zZ3a-0YBne(=3oL&tPi|;nGZ@|ZB0pIciY?dkdJivBy%Md8ZMJ4lrG2b+XNczeQif> zia!$5~T(kfeBiwGO^r_cC=gwpJ_m$u!XLt5oSuY-U46H zh_Q={8$IkE?s{?hL-jfyQ_^IGdzDgt)v3Mq!drh01ElbmxVQVzyy6sVVO<)0h?vwC z3_%>rO#0w&bswB7hL2`ndcMLC3$wI=cId6zq#G~7ZHP=hN&L<9jm4z(1oZuJ42>`} z6xvv=p<>y^6VniNlW-*{^B0$06_K@W&(&C;ssW}q1mjl-rmzH>0;Pg1HH=J)hh{6= zBqNFr{FQ9!INB()^d_1F)rU_^i!$Y2`So5pX6uY<_dghVXE42Ed#}zus=l=AJF0uR z+hwSb<4^(=7nIhmMijBNoG%1>a?p20tggO@wdl*()Q<|o*%7)EhVtUE^plM|7J@J)Wnd zw)4K%G3^rGS=|tVIJ~k!AJ7XC4G|MFo3;$I43n8@UBdwMXi_YtuL`=MHP)iIm~C=Nf$UYFHPgbiv5dLUene1 z5@vaFoZac7HfIa4*5ztfzw&H&eJ)7k;Q+rZ!y+h<%!+Q-ZK9&-s%80YCw&|=>Z+u$ zrv{G@0nJbGFs5w2*o7AdF~P9BH1#jz#t(^BNt0{aZtlju1vj*`x?fA-J{(i(64|94 z=;i;CI~oryvs}Lp+_@bXLW!nPM_Wr&**yk-)US+yK@r9KI>9*Ux+*p$4G<%DX(nS8 zhHcfC+28BCpE&q<9tAV=TJ9j>GTVI8=p7s^_L-B13Xp;z?oOrZ9IVZZsGZ)Fm229S zysH{RsDGAXZ)bqN`V3`TM`3QHTAOf+2I}g{dCzLtJgxXPsQ;>8d7oj?ec9(e*Ze$` zA=XNqN`a)!v1y-F;?pM)xe`0Os5}X^9T{av^%H`C$YH-0eAJJK>Ko@)GHVO-woD`6 z2-$F#D(=_KUvA$bsm(hS92ao-eyYSm@m^~C7R;sFYcH)pkS~*7a_FKAM?WdiXsYTQ zj_9KCeRGi7{WYtU#gN@LdUl7@9k8``w|*-;lu#6Gp8Fxh9hs~k? z6bufU_-R#*w*dNL9RHzeeun4$xLWW8dXE;0-Gw~^gBq>WhXuRAEmOxz#oJOBCp~UKDU!9}s4*(ctg4N)Ejly%2{Gmht^&;(Ll?0;+dh4(MMO8Z zi^d6DP5<5Zl~hg1YIJhu*TN?Zl+&6n^UggK?{=JBiR=b6p^E%w=;)Hi`(|QHl(?fO z4c##)EqY48$EZkUll!&YE-4S+<;6J;CU>!ojMju?ic5PbgXIu!4BqP04yEyz^%BtI z;YLw}{Y)L}j3b=1rUaMgn28$n^SZ8x1nKaWV1FGCp%I-*Hm1rhgB?fJ0RpVLSBM*u zO^#WzX({QZlI@G|-gh$zGgd1x5qz;Ft1TYo{5)07GsKgBKD0rWWQulJA?f##s(rs0 zGZXqE5@nA|Q*e$fNstc*8;#wZ0@u-~X1xMwBBLo@;V8rG;G9{@b!Cx!&cm8WYM$NT z$54n^kr+j=>QEF0!irQ!58vGF;DO)XX^n^|CZ>!grbgE5u@u4%_qjxe^J?EB81R^} zZk)LO?s(z0m0KRzDN8mnEfz+C#2-!oQm>5Jwh1o{q^fSvasaL>Dw>~@`=gH@2@AIt z0);G!i)Gd;GmG0`A#52Wu+7Fal6J!HaFXM^H^cwi@I&*NPLfM$q(BC`fR3|aoXIb; z4y%Hoh^%J`XLm7@DyB3-YvE}rwU{8z$!?ctf$vB1NE(Fq80#|yGGWZ&s^XvVz+qXo zv1Y$YG@BHAbOUmc`@@!ML&~~vdK)|^s1Jw+9m#;y*sSY*b}$2TcuRvROI07|A0cXg zSm-mHA!B>+4!$V3f$jJ}`N28PC!`nwm$eE;EHLy_5iG=iaWH z8fM=m3WzL2MaRbO4au5-{|d4T@E0BZ`lk;fATTWsD@Bv5TxOy|7o&L{-Vp!s!8G5JQyz^#g&@SH|ltrR5Z8M}z@8s?z;w zKKW!kJTjoTuhCgiFg|XMY5xeP>!8-7qQ3)DzzJPlWF1u@LVvz$Nf(MV_*;rx0jloL zrkYANG&nST~;DTO$5{nEvgV9(@MkaP`ZEYMLR6R>XhBW=B=}90T zNg@lGr7bMJBnh2k5D}HeSyGQaID}6l0Nv0m47A8XL;T*?S8zDpoK#ejr8*67fMWdU zb(+b6j*sF69Jl`b^3Of6lmvmXEftrQdrl{tD>^0?&F|+6kBFH4W*-mt^2ss$d!dC; z2su-gNE<)(!k$2&!HGeYv%RCB=wE&-ZVIaQaO^yvk{H-v2bj=dKE8&%m3cNJb7*?~ zZ!r_resTKjA7UPSngGV=5i}yAypmDhNfox>KLbHDM9deMHB;kkr;iZDLz0sHXxP~K zahnhKjgq&ubOk({J>5&3&yiRPT05*RPx4XN&tN^Cs-wN1EMdS*Y`~BXHPaH$euC;hk2^%KmEpnvr}5q30AoNApG3oewlU_16;+>+{BvCZk8r!0 zM;@YET0_Pj9DJleDOv_pYSER)iT~U7%LxA_6C1`SbAslDe^1+i>^U5R5BT?wNOv25ZmiMC0mR2Y(f)1TV^&u#3} z+n3+=t{shJ2Xd|*MP-iyVgfBXq+D9mu?+bM*ME#cg5(hW=^?!xETEGV+A?IDH+}?H z;xGNGq)Li3l*81&aP}-tB)*L?z57Xb@{pZ+@}O$?>bZ}BzHv;2z}T>?+TgP7y+KY^ zssnE*{77D~P%ca*Y7c+*IFCSqQkr3fSVPN&%-BuB+qhje!1!uy?U&g~=ghQ8l*Rp4 zCN#nfGYtW6Xcag>06)*b0#F`F?bVw6R?<~XsqYb3<1F01RuKGYW{QA0^$bHpwfK#x zHr*21LHqgI@H*=%0pnjnyKB0AKtW>+z?eTvgZ%1M!jCM`T>E9A3)=;q=^C#x=cau* zOBZEC+|zBi4{E;~q5Rtm#vUbfbW-drof|6Au&_2NCn|PYd5R9?`&7F_rK8?_){S?m zc}vfy2P~;I@$|s{YEdc@ESrM~H1P1FZEmmBryX6m`6>x{eT6QFIevf@ORP-4(hro! z>9kPtcqpJ4660#Nen|Fj-||wzC~2>gtKz(a_xsPDQfj%lFh;NgjB!75h)am z-N!jz0U&h*AF=xgES%SRKZlwg?-dXc54;Hc*nT#{->8zopx11oo>nECZMUyAx)C2g zyGqJ^z7}VEEVz3BS=YZl;GjfH4JvD7b?G4};YpxV)&i0eloN$&BWhb7q49l5=lE;e z2`>jeRXm;+u~jjVMPkDXc(9dD&ukM%hmraw^> zkyEX6b`$N|eD#teYy}nSbf$7k+6J5AL9J`{%IRxR_dEDWyMMi{62%U2%-$`nn5ytz zxANHfYQA1{NYS5qe_IG^Q0jfjZNP*pRP`jZyj85+=v)^`X zL0+fVYmBvPYr@Y85d&eTdoS4?XHZ_wp32{v@*gUO@Y4PwoUN9MAT{8kN;B%~6wT?bwSvM}QT~$8cxs z<0Q?>(~Z1Cb5<5uZ>kYskl1=T_~01s80->T7v%S2MRiE}@F3OnATZqokO67z8)IlG z-Ruq#?O(!v@Noc&*rGlLf9s3Ity-I+YunDTblDw8YZg&2(-I{%zOQn7giO5al(}}= zq;JS6Hvc{TqRAtsXEbX&eA38qZQ22s$+7xu%dtqMKu3{6E|Ff_7fdf1;_!P%HBQtg zW4v&gSI$yy5VH>c>|jK-M?S6au*eJcLf&m|9JlJcb^&DTb$7|11CE&Xap$mkuuUca z$|rM;niioPy^HM~>r2TI8*guwUI{igH*PsK6+4)EsEz55_ zi?$fQCeCG_0Y69SGs4Zofupq-6&|i7KVOyW647Et?62_TS`eP-|gqweKN+gZLBy_Z#6zB!4AiS;GuM@)@L4nQtIHfe-<>1C+JLb<%fW9#eB0%vH&T4DPJ>3Oo#AdjHq<{u5OL>qyn*6Sx>4ows1^XusjE3)q3cH|C1YNXWf6e@8e#^2+Rc<1Ico zr<5Em&@fQ?-Oh!`#U8jUqC~&WHK@O#nGGvFgk#OLWp!WH-pxv7MpWpc1@+>=w8xYStiA{6mM5Y7LuiI`9qZq_}N&IZJ-ts>% z3f7ir(@S{6CYGX2nUHC=H${K|B45_??t&L!(!r##`SF=EcS>+lY3XwZlJ3)|f0N)&U7 z&B4^EkPEi+4n$(?mk*n-ec+nKnbEr3{LT(gb=S@_J8M?LT3eXcbW3>nZ@c_phy``v zOX2xu1xAQDJ&WmUH9g9fjCH>jh0sIP&V~g-s{?XcUa&m)=@SP3qkh(e*`3tcA+ZWt=@7!E$ zDBau|^$xbZKhA-3E4=SiUTHo^VoNrbi+I?+o6a*~l}}v)r4n*_?8FjqIBP`K;Hc$8 z?&M-t zj*q8TRL7vu07Y_?)jmME^E-hdea=Okzs2Xg5!uu3ezlm;aM`dC?!qv|-*{W zi~3C`mr2#h5i)bD(DV%>J6)l}6`W zwhcW@Zx?V^)Nuz`c404L1k~Vhrfkf6xv59;WW+#KR53HnF-jTpsv(Lf>;H`G;_Ytq zb2y8dR4KJ#vjtdYre9kdt*CJArDMk#5NS>dRM6mD)#A--^qVXPTqSvGv`ad7!l*Qb zV%Kp`F^W6!QjtAY8q`M#kw0JCV)k0*_@$?5Ws277WZx}y<1^IbQ1qc+_5j;#q_(3i zgL4`Vl8Vj?22(Qs&)qr)!su@XNDZIaoR&Hz2_Hmx$ zTNm)9V5ov_VO(TK*y=kwYw#uwDC>h#Ewfh%;9n;cMPPHFpz~3CGoB&e21E9qOu8WL z!kAt!JbLL6x$jZ6AgX!v>L5-U*ULb8e1#BFMzva&b*SUZ#(1kAK$Cg07lKq5^Ay~E zfCqxWprTs3yqPX8uu*z2@0=c*d|{XHapCH4aySl*W|LJub-$G6Btn&9Qbp-SFh-%_ zH_#}-u@6p9p+wYAE}D~Ykdbk?uvji~TwrK|Sr=<(QjlqvrO?ggcIM{6gG1QY9*1S> zuaVgVQa+K|F*o0tYpiE(!f?dv%d_^y=1LZ0H|H*)QPm?}F)3vD>9vTN>x-dLN{B5W zNyM`{Ux{x=hYBh>idTBdcOcK`3f@ND+4Q7bYX$TiE}WHk73LBEAV}-O`KNyRBC%f; zssXMO-`Mp%^a=~7&Aawi=Dusqj|(9SU)GOxd2f6Yk06{1g`2R)(8$K8vgRzV_qrsM z$QIZf|A2($EhCmuzj!}v9N6VZrz-TmKG2-Z;uKMykK+EoR{*<7Ui0!b^HQmRX3#EI z?1w(|i0K`NOZWJ<0nJkFNsPZ{#aBW5AkXmCxwx=c3+kZ*B@@o4xvb9vD)AP>vjF*= zCP4v2Puo)vqeV1)fX7=}6=FXLs!A)W=j~#(E~-?^GPHbf3tZ>yB6_r`bfA%TVS`pn z#!mB;G5@i@*d)%ij;q?)g5fY2$$5&^A4dak)v8doI9nQ?)^rPNS9kyy>)AJwU7O&& z%cPJJPEu5%3N)@KQi6|sMjc)j9Mn2my!j_sovHSV%pO(i)*II>HIyjI-6jU{{&-gD z^}~`~(`ez8mZH@vPkB~SY}y?BN=*h;u_(=nJ*B}K#DVzHnKxI!c+XrT4fV3PHy}vJXB|S! zMNNvCr&86`R@$aYZ<1-qswpw~zOO6Xw1zjwo-iGCFFr{I$)ONf(@x2CrM=M`RSd%~ zTy>S7jKakZWHKOxk&Gu%P?4F-GsZ2wWrswH`}Exa36WKeswWcc2{y{st?{0_lJuMk zmFF!D@@f=(6Ecm#t&VFzxO+Uo%bJl+m*Vp{A{KWj&~ zT5qG8RlvhNy3F;IOIhQC99od88qp(z@BD<#sl8#_JX|2zWLwlw!Hkc{Qaofoq-Hlu z>Y47iI;mN=JZMWhDv742)vbb6nj9YA;75sJ8g>q6z5K4AQ|@eMl3W(XKDYZ5_F;DK znD)0Zj6sv!qzb>bg{+O5qPoQOYF#GOgsi?~+GBS6fQt(m6Am z2cY$V1k+#a=x5&-aS2bs7ld3GofSx8&^VW=``KR|Fhy}Svc-Kk2TPZX@q?Q2ika<& zgW6a%-l2Sa6aL6g@n68V1n<9q@BYY4`YwJl06nU&1f;>tO~%+jRojJ%SrtPwIKz~i zg>uTlMVzq~NUElDjkx$KZ3p;CTMJ`zVNR(KYYBW06BIFOr ztSnv?(2iJlG(g=dt)%gLzvDEo;T=YWm$;DJF^m3h_`H|ETZZXic(QUZ-p56rRFVk8 zOk;{vV$U?(w5Jw)dl4J1T?^ugGblDLdl=2MwVsavm}e~6jmXA5FT>B^AMA@&BSlI? zZ%esc>jdu`xneF$+b*|`a}-O(H@{7;SjHcF5wh$EZ}TqkdAJW(1zH1AhSfx`W~%Qe zHq+&t!rsw@CX~f46Gw~&3qZQMq-G#>t`l@dbreB!BBQ3;GW&Pl&y(San98?YC8?!F z+3c;G!)`}Ln=6&{et6~E&xgfS;gugd_SnCRxVT0fYxR$G5QQZevc*V{2% z2`8q#cL_oQ7PrO5=DSc&^$d{^e9_#>L8-RFm$nr{$tltH-u(7jU-17Xy}$X(V_FQ4 z2&)z>7lx7DXRq9ZnQGDuC}hQuR~xX_%(JmoYbmH%P>xZdsa584j$1p)&xw?&s~I*g z88weX-rszwGG27Q=JdGwip~{!^hI8L*HtKh4cA#%xMpVF^0u>ci~_y$NR7h|bT-56 zd!lm7q_7r6(q9;BlI!dBS?35h0CnJ89En~hajGcN{~2vZuAuntb)6_Un}k?&P(Oa9 zLclMii3rPgq~9x?TI%H}pLokn`^(83v-t}id9``nS!eUVvGrl$zQmWEHH7i{Z*gm0 zv_YC|2IWq49SSM_0oSu*p1}1Zlz^HUYCs+rGi-wIrsxBVaSMLO^)ci?lEU!VqK5Mf zb6%sfX6rup_|KAk@YY_Nw6C7!d@;*i-3Om49_K|}OCi=HKh$QO5X{ig^){T#l7}Bb zU6ysZC;%767Y}ygWdq4HcH6AVU-`D^Juick+1EPV7BI-_S)fckCua4}?5+1zHm<(e zYA5QZ#0aF3L4;PYS2}R_$Zkq%>|y*#8dC*C3X99-t9%(u^2%cWPM$_YLzUo0Gp|7o zD;&sVYgnt9W$07;N;x-PShd)x6_lu*(>y}2?m~j-SR}`LKCm0zFt!&@WWLUXLcf9# zRWVh##YM9_Sc}NS`X1m4e zD?2@rP4VN$i{YYQ5OF)a5iU)e3>C5Jj>`%)%wk5r^9vvaMaL-TcstL$m#R9~I6L>p z+bC2E-?@0@GU_-v=W_e7bMQt_5R6rr zn1(Oocxb=HULhd`RdmsPnq9Eh2Q&KCw8{RH07(cbBQqeu!t{j(2LJYMJ1r!Hn)-Vs z^_9fu?;Cq?J*$IZMfvC2bkm81p*i*xOgdtwBU8Xe1Tz(~PM@@Ds?L!580Zs9NXqtI z)jV7EPUVIjw&E!ukLgmA{I^`_1R_93Jwq5#B`QbSFGnlw^=cTjAhz}8R17_hS=d=3v zO%*nTe_m8z7`?p;VThKe$wta~_$}!ZW{1|t1{5UBi1i@^0KHv$Dr4d z;9B$y_2zde6~PRTb+y%!DAAhOB1kw*@HYpZ`}Amkfsolc>nT0WN}KSMHq`8NRd=)H z8Bs*%mrM1bPyNJ0g6g={w;hWxLe9hSNmP=A13o7wM?y&{TBjj8!zhD6+Qz2%?&6kS zv&lDxfXi9tXhn$h8B+|HdjoOn*d4N-<1r=%Waetf-nL{!DH5Zk}LOFH@lbgf4;gl_%mnyG2NV+h1b@6j7H zv}pOC;{y_{-q&YSK9rMeFkJbAzdZi}izF|gKzB$mcp=QizZG(rdby0#S(bWqpKN4_ z6nH}-DC6TL3Il11pif3Pqo9jus3|*^02JHd4xfnf%RiS{Ls77PUu6Lm-!}5{5dZOG zQ@|)rPbN$k9mD)Rs5%IsV3M9eZD8pj+s>2li>D6UdHUq^0(wC430Ik};ze&h^e@Da z#M`qq9^C)3??``nc*g8c@(!mae@*v4xaY{# zF&W+<@5CjPGjcht?b8e{{FzS-P$i_K;$!lSO?vgkb3G@Nl*$EK+buY>|2Q$EkpG8! zNXN`+na4K}>kW?GXiB9r7;)y0jqh!cpIRN771DdSy9)lP{D$(mofgP}@}MRjO>IsO`W&V-!6A(duslES>!Iff|7Q zgoMxGZ=PN3U*{wCr{QNmq@4G^`t*;1_(}qAqOXU=7V=NW{HJHz7vZkuW=y>vM_FXFvP*pR?baC3gBbF#oMU{5)7&&PIdgtCXOejABe$C|N2m9eLwf{QYA}TqqT( zqv%gENvg^3u8);^@!7~rK0TeI>_Bqfy4 z<0p6|sm4rq^yyyY-;qSc6@_TU1!iU{y%&+SGCjOu_4TkU)sc)GaBzrDN!d%-H_nzI zQGh2SCzmub%DQP2xHpfa9;{9DnMvI=nV+%6k9e}ue-5BTOUGrIueA6#V(bYLo!)0| zM7__3EFQB+5o)CRXegKri)|JMa47Ofry0Eoprt(q!LrFL&pYzHpBD$#sz zT6#C*w-h<&;iXTdxkCLxb-?pERCzu_g$a~W4fn>L@Ejhbv6*V#Pe?g^QA&#wO36T~ z?Wv5-(y2w9Y7ldM_)tMcW33#mRESvUG2)%+NJg(nH4KtM{>_be0!lvYi%wV1cWX5rLSy z9Uh)zxhl4O(bNPf=BGEs&L+0Llb+>TJv@r{@QNVE`QEgsY-@E;F3nf1 z068^qh6J`^lBnC^z}mZgZhHkF5mJ>ld0(l>hjSz5TDVa` z7WqxUW=~YJX<5A?SG3Ccwz$lch&CIfTBM~3P{zet&g@~;XT@%g z7`H|Z5`v|Gg6b-5!vC@(63BG4K1>+TNnPF=v@nOl>UB-3_S%MSv=YX4G~LT6a}&pV z3qn}rb=>1&g^UU$@m(b;#Im^@kJ=1g=f(Natw!rT7n|GrSKCgT_sjrYt;bq`7ceGL zU-;;dKz=}-u5@WqBN@nTB=*XdQ-;-P2e!;)>V!*wm&F}K#GoXZ=XU#59#-c{#N*wi zty)3!KNb#{Ixrun(+pdSp(Ob1s!Kl%tC(uK%uGkrkk3{wELE7V_c2(nndk(9no53V z#>JPMnSE7`kz)&LNctHwPRxL?5~ocyFh5i@xy2!!Ef8_DLNn9!n9+Q5r|hVDY-Bme z;Q(@;sdh=`xj4F4Dv?@$f4lUJ?>ZRwWFU`@`rApyc&VmvqstBnT{7#)dMl7l*}LNTFv8R#2{A9vcXv#C`GHbq)89A9 zN`)ry4VlX|o^>;7b!xIyK&`g#txqt4a_K^Sg0zmRj-NfXgX*ltl5+mz>y*bxrRX93 zFC*8`06pMa7ptjApj61TSD)LZ%>k-Q=TPxr4|VQzJ$qoMF@k`*)Yr*NRe#7jB2sDR ztw8E5tBby{>PmYt+}zCN0e^-&K|GM&fS*;V5UL(8){|{&(B2J;XnWIUcP)Ez; zs-sz;p6}Y|_$Lt$ObaulM|Gf0|HsR@H~<7MO`0fb)J|D{cI;*upnm3T^wr`7h{Y%w z@du8?y%dskwI@@sg>>}|Sb=Kj{J=v2g8sa&YXiQ?Wo1s3%qMwuuB5>n7A2ldZ5jghG zK&hYRW8YHr*lKOc0ZOKr-8$aD0~J)uA97VQ-1Zk}7G;yD0ggwtTRo@Zq+Lh}2!yvr zneu5|bolHaCXNRaU5uv=c$xi1lyqtJAH2CbrpuE3&}G=`EU2gQJr&x$R>G93NfYRM z`;XDzojH#5!ST9Xz}ii4yX|BB3Wu_-?e6O8EAShX2n10QV`5Tm4)ykZMbBT0;CJhv zr~U@^mI!p@0w~CId5xM8v1mzPQHUm$bGY0@qTW<0`UnW!v8<)Dm;|S^GGo|aZk8V6XLEX>6S+i(+ zKEhdue311(g{-6+Liy;Y{dkL90(|Zhmk9oMs(AVgu)Qd8YoFX3s2i(O_&k;9sT1t> z_rejXf0kg$m@d4@+6hp4AjnfG3e59h88B3mk+&WhQ9ls&2!uYq7w zfBeWAZSuly`DR!aW^lJfHDNdCX9;ChED#H{ z?FT2P3qGN(kgGrCpE{`R!T*Q4w+xDF`__H~A;Fyl2<{HS-3jglx8T9u-66P3ps^5w zyK5l02X}XOhr596v-dv#bKZOF{dTLmx>Ctn>F&A4nrqJSjNdcl9OHCj1^*s9tB3w^ zSaZ0AY6Z%-A+c>6dL&xyBwxzN1wRD~d!2-dJ4;VBDF&DB)R|H0xnSZI)4ZIh!pK=ENH2YLpC)TZD0;wxdIn%p4!AkQ3tUeXx*| zs#ohN1@zW`h`LWUA3%-g-f^fkh5!IGO+SOGs3T%0;81bKBPwgi(Qb}26w1&d` zM|uoyXPw`?EaXWc7@zsYLzatZ0fJgiTCzc4FSz`~U~}L4s?q88ml!vz#f%DtW|`l- z;XN9Kyh;lgi1=w^&;<=HOfk@fBDKa&)>SV3I2#uhGw^qfpObJ2}dax0e$#$y({3S&2{vh}m9+6|}5 zk$(Pm3oCOY;5k_$1C4cueEBd{ptVovpLrl&WTV^OlvhK8`z|;MA3m-X41Kn6#xnu1 z;@?_hhxPb<^Q5ib##BSK)J-*=(J+{gM;xE@F!#jOM33kzqJI>i6*Xp_jm^UEehUG! z80QC3pFLTsp)^4hd%Q`W(Y3yTZy#IFR_0u+b`uhQARNjXI{*}eSi3qE=!qx!Lw2yo z@%2G1H|n?#e!0~vjVzY8*dKtfUPdC{i7Yda;H*saefj2dSdb_19~Q#xJ73!Ekt@YQZFLz_pm^81b_I(2r9c6bLU-#l*I6cYV|8=S#wwGvFO zi;PTauF94y&P({-a+`msNP@MMG-;)ZMO3C8nSWcOQ%{8<@(wj1&*uVS`J2&0 zjcncQG|xzAX~N2~{=luj&6Ru#Q|*z3d>�lGn9CHe&&?)Xs6I`-ZSl zR=X0S+YdOeU{)Px;|y_<8lH+FB1a%n9yw*(WR9Ju-N_)-CH3p;)1G#DQFvE{gQSV< zt&IhV3(N1lAu|_ZCmz+^bw3BYtKLwp7L+lihRH;-ot43$A2=CgjN4Wg&YmS3lsO07*4ir9Q6eu` zzELU2;1Znr&;UI0MO{7Le^XR~z{~mclgIr!)XzU~%j_b^vq~Be{>n^6@(LD^{3O{Z zdoL3mm1<)Z9@j$vSduOT;8(KF=dY|mzK`2xE}})oSJ#(y%w_JEUv0LErA(&D6CTv) zL`cJ9vlJf40^@08tqh>WKhljUkJ^y}J7>lC64)M^>39w54}_y0HC9BX)hyci9<9e3 zDvkIF7PEcjT1K+(EGjLVZc}KF=0&nb6YC!)C5U3^AmRn``{d(w8=UH+y8-Fd+PdE( zbc6H$2Jh4aD5Oj7SCa#(pT8FE#Ek0DxYU-UOd&1{w4i$J*w!nt?s(ibtrXkc(bIQg zsKKu=V)08JYMUgIiOx+k_Z$91l0^#b+@-QM#9^I(gMrc;B!=X$x@lc5HYhk2sfZL4 zDp~x47s{wBe1|DIkw5ZoM$TAdxddYE9N{N(OCU^5h#vX-{M&3E2mace$Kj9G1qhUAqn*`3HG9Wl5MJ7C&q6Bivn5BpXAliVD3oL%EM=6bEXNFM8zNt z`7d^v$ICo9-=WsN!%ytF0hJvvz2#+4KPm0x8egC*#gkaV#;U>1_&W6gs$2BMf`?{W zrr?Z{i&J_rnPfaov$^t7s+7TC)1Ap>FbO6L*cZuSunX}(mg>z*as7GW`fg74wTJSSZBfQtPeEsrvp16d4;gR+l&3iEe=1k8H{;oJd4An?4}<4 zRDhG&BMdA3M$coLHENx1U4r=)6S~5xSOeQQ z#v8=Vk)%VYf>;_&HOn@YKBQ0?O=)-%#j1+_o^YLVpad|JmvnE=Q-ATiQq0tgkn*jagkPAto-Hometc zAuxV8L3+=p1w2&~T2Qvqx8ZVh#RaxwWUe6A01AbN`(ahj1+%+}=T5hv0N|0eWDTN% z;80Ag$q-@TQT3&@xHcduvKekX&gO`@Kfcu(IM|#}7xv`R0BWag?<(OdVA-pH9tt9= zQzO;=YM@?kkrzk%1K-A^`YU@&=Qm^_+Bhps-D8x(t1V^-usr4nWkEX=`Gp6lJF;?C zYx^Tv`9-E_@&Zwlu;Zr6y2*Ox3FYSDoq++ju9k%7n0r&eMzuh-S&;C}Cv}DePH+Av@E#jktNRc*q`ew_i2F>!}MZEeOml%4&VSa=d44 zW;FepY7VTrnziP>g_jLwHTCDYW3if#=?Sg~`d&?XaV)va=eru2|LmL`-Wh}B)o1Or zH_k0v7cAHq!FpcBJnx!B@qa-1VRP7UWD8W##8^t7yXl9OMf0Bd*W2WZQpD1Ito``C zi+Tlv$RkuCus0t18r7{}92`4>g@>?sv zg($vjdYl#dlZ&Z#WDWbKTyFkH} z?IHr00mOvWk!4L3ifV*$5}zpybOM%BWT=L8; zG24A;@i|{?Hx6~LLj=MZ*M$EbF@uh`|Nx$Wrg{;}*4lR8$ zvG)bS6(fX%OQwIOo{bS4Y@amT?xtgN;!!dC%=g! zbl2T8fmZDPnTf?3)tfuMftF38EFW(IRWKY!(>tk@Z4BFYoPvKt*8!q=`-Viy((D@} z?MAJ1nc(yE{`Wi5B7|GK5OoWC=@s!OvKBvT2Q(m|^t4p91$Q&Nx_YI10^BO#;a-Ef z=`X|Ku%6+;f9B!%z~2I?Ynt~p|CaimKcfi1;~YK&{83;3+;q>`>lOhZtNrRVx>ySi zII=(N51r2UpV*LsA+hP!-fXYfI(f4&x) zH!Qui&F(K}F-b|3f9MJ=*6EGCF_o_{y<>88S2vGrQCx$^H}UIFcWEEP7GRctakZI$ zjW=p;;4%Yh3;1yH0TLItCTLe+AGrkKWM(t_rz~cd- z)T`0XjO`yc#j}v=MfXUjl9+>@ptq2WPN&g+HHsc;W>a@P{34-8WbWE z$$cZ;4FG(izAkGd)S&~|&UeY>o{xbH2-?xn(QB()7*j_Ra)2vQEE;tr9a3^X%Om8) z*MhXD?%AS2$ugP-#phh4QR){lwY3H_JS?B##@^V+`#hI8Kb8kHc!o_0{xvasQzLn`a+!~7M(;fu{%=+>teH@h=(q#uX?N7?JhO&fzTmEStFh!H?FUK7Lt0^2egBtV9{yW%s*rZ_>_v!o2qwQPL&2LJP~zL&xO@n-YU^W`xYE3qye)ANSv@?q>)7Z&i3CB+NB z)_6BsOvXqW-fPp}-QA6X>MBP_^hNYDc}$%VgbiR((+y}f+k{!X?`Zeb7Iw=n|2MpI zj%s33@y@&I4oHU{-`gK6ygB>>N;i`rjlxtcXuZK>+TC`s|JF}KlRYLyQ)XXfzb$do z_;68EaBo}`OQA`rZvSfJ=ZMk6ro4BP(^0gh^8i9jU8Sk>+B>5h_Ve^pfp39(p}lr z(#LUJOna2gH|)EQls*8(6m&dS_%j<<&SS}D6Ub(7&?q!i)H9cUYv$<(+s$d$*wxMl z*Z`fb#H$zP;OFZ)_Ca(=J&otLBOWt-BM&LV=B_JiMt1`o`_)5}?@g*dU{jYZ zlAxZgx`JglyA5)`Su3Y&RzmEzIX+!^*pT(@qHDH@2eN^%1q~Mq_JK7DIk~Hs!7*iq zcdvgcA1*vxN{9n0g~`|tTA;;W6p;R9YCm=BzYZ%qPk^s$EKyUEx7gI=s2UlG((5$% z)iwOP+>~tXyQYX?UlJVvk;e2=zII$z&U!^(HL0EB0PnmxU%z|Sbi2+eUui?K=fVP5 zHecDFD6u=%@o*n#cQg27auW}oHom{vJccM&Fwf3x zLQVU^#-Mky_p58m(Yvgc`8!DcV?@Ta!PNTI=&~*r1v>BkuT1f8r7SD(BK(0AbZ-G3 z`sNLnR(tedK@*{>Y= zl22fm9G8#x`0$N2-U_I*Q6pF2)m%JnbyY%URMhzjqp3*r^_+!lbN&AcR4&~M&-((~ z**PuNw^qEKtj2jj4Go^n?j>~XeVysI((A^`KQyJ*`1|$;NJUEJ*kFb4z3~fGumjrV zE{a!!b1%mZ#?G;R^4}ohMnmFx3g;>25~q3IHZ=~O!_dG!q?A$&eF&MJHkpdsBE)FT z|2g#_CJ|p8d&Nr=XQD{etA{w3Rz!RIaN1FiCt3j0?z9NT&eePHv?r$tNj@v@~#LV@T6MNI!P&-6gLm5JX1QEeuQdxX5@;!Sy2XGT-S=9O)3-#Fr zHdz5EIH;)kGb#;Ev0r>~3iTT83Cp|V<}=rq zkKkpoh$kT+93r0@f7jL3@2%RCXRE}Kl_f8Nwo~jOKzq!iXDg&Nu?v9)2+|; zI~@*P=to_*yv)@s4`|v~uYRCCa6dIpcJi=AWYf|k-Gfa(VK?wPNoKGFgTwQgEW>l1W3cvM zDuSu10WdY;z++Qx&H+2n759SU`?giQ*|FZwjP6&rJ_jUFtJ**`;aq z-un3l>q_Ats$EDW) zsW=qaoX@h~{SG$=SoBuO*<94MPyIf<`!6qMDIU!bRb!gRPPQn!Csq)7y$IFfsj7|1 z2c4!s@6SE!`o=4J^^a2UR+nxLSlUmqm6*v%09KKhlcgZKnWeCsX$n0y-71dY9o*1E zGfQ#h1gF!cm6*7A^dlyBF;=Xuo@NA4l3Vt%j<@NN-}yD7j<;V*#$XjarpdFfO2C-P z*Qa^JPvw-hh1#c*ZWrz@x)O+ZhbE3Y@kqO>?0d5{sni9^wkWNogu!>tsCr;vuRc$z z``o;~xVqhnIkk6n{6%&=QkHh+v4dyU35lbzp{YJjVVbwM5>^QpKWqWT!^Ykd%3f8K z#IVD1n-^y^OSjVLMoNV~5FbYM7FyS9=?dVlwb_&i2ByIdV6(Wg=t7KS#zu;%(06W{ z00Mh!n;z>EjpyE;j+%4R!2l8fWbe5*Ba-5{p^=ILSi+srW%4O_&1Vz;#9#p`+ z<#uCo<3QbfbEG{!r={7HWl0xIt3IwprjZk-xN|tH=i*vilzKL+QX#qYLBex9~Aac+R zxSfgJ-(Ky;Gima__5^uu({sL5`31UchO{?U$#j&i()A=pypoMSI(k*c=a0sRwCLQ(df8%|BS^nNmqaJfi;Hri}LGI`yxlg0-HV{Zn}i? zUV1{{wJz?1xx19w*9nC*dBmwwkDc+rLQ`JcQDVWir~b3Rv;x>n~Lo=n-`-P z+NW$M4?OFli_>3lthn|$#E5*^W4=1?q1Uuj7eckBYn!ABV=TdJDb=Cysbo^s#8LM4&a~ z#r_axcdhM)0bsH}O@pxl*+zngf{vFktiy4R`6`*B+E9f43(Y>ah`0S%s&x?Zg_&+O zI;|?H_0NN?4 zRXgBuy!WA4KgY&HSmgJCTgsN0+V&#aM#8s45_C=N8a0&_t2szvz2+t+eJ^ylf_XJ0Rf)$Ph^wRrBZc9U~Nj= zxA$=&9O(+d;2|;C=#b40G=LaiPe>~uqRWMbv6rS8l$B0X&}(mv8-~&nI6^Uhqta`k zOtD(dGG38 zz%|Owb39K-Cy8R{Z=!R;_W#~x_;$d5CY4q&cmTSWaXI1PpnId@`1VJSQoY-~Bo1mY z+c5CF&j!rgrEyMK^ymF_eODzTfgR*zoRZ9rpTSQ4AkT05Tv4^x?KswHg1nb16JhB3 zS!`_#prn?vxHrLan9ewBK4o?SU*6b)W_wDxCKyQ{-G?<_^pH>wio!W)`sOoMql-3h$2SU-d=t1i z%;+TkAUH?!v9CmKz2JhLx_Bpkz>y=4+&Zq(Bq83}53}X};66M;Yp@o`7T%jOwxF0i zP*bZLd($_2B8S7J$)jMgApB^V^j;&m-Y3Fc*tvtA4I}{mQ=o+y#&)+j>$m_Y4iUu^ zwv()Y{8Gj~Fg2UR$r@*5^sOfBF+*n)!N*5FRKoRGcHm|w-Ol@$<*=x#`%+mjx_cK- z9L|*7q6st=diYf4GP%(}YH^6&!R)Zs=mFf>m zqfXW3%stNg(VVi5z^}IT;!XzVwjj`p0C54y_xn+$;`9Nt<1=ruQkyEwduxuWR3_2W zTr}#}MbIcR9cy}C?5H4?(FjIP&B;a9z=E$$%wB{W%xdBd4ZcMTU0Mv4$PB(=vBxKV z0lxNbe`$bJhEcxlZ*St2muSn*n!%-?+j`(6Y84l&%y}q3ek@9@CF$T^Aiu$^T)8o3 zw7+HFr}<@-_0UyhZbPYWM;%b*dc8Jbk6h!vA~+{%Ff77A4_GMPfi ztf&mFMED=wiII?Cn5YMYgI_a{{}v@S3=27bEv{$ayOTGz=Nu&t7oY+x221e>9yUVli4pD;1m@qQ7DhI2))(vQ;^p_)LHU%%M57Z3;m&pJyCeWrP?8@F<#{b zHaoIJX{O69hu5*^pC}~h;_nHN1_^FXn0)`hI%Q(45DcvQJKfAVd9w6Miyx6tWb#mq zkx8iKaHB!>AIgk21gvX}U-ht!y4=>{y!BOTEF(YlQL?gBxI+nG{BjPg(IGDnpDE~6 zONg>Vtc5A?L42_;h^QN^35{~VFZb(U2e42WL1ToTN5XsD_%q$iYStDs2z9tI{@hPp z-e#*Y*0Vud)qPBToUO0NYrMwD_ZUrB*@fYOS?=-1p2UvT%Oiw_Z@S9QRPsD}<21X;|pxUeApzxf*XO=D&VeZ4dyA5wEx zI{Dfpb0ZI`oHiF>{$VLG^wQukctcCBv~PHt18NPEZt6dLjZ?_%38PRL4jllu;U0?K z)!LJdvEE{ux5%ZD!k8k_-{N}mUQ_8NG`&<5UVnRShr##`=BI0qKXbiLsgur?31A_F zdxF_^#dm)*0j;?@ z(cv!7DGp9>y>~=0=divDzg5+(Wdx3xE$#-wODzP0UIZ9p-JZMt&K`WRRTx0mTC+%{ zR6IuC9kd{#w7Uy~V#co%V2|VDI{vOV)V%s)j{>XOEY6wor%I>R-I;rY$0shkThROY z%X-TOpG-`c=pU7z7Zf}9moEY$;Ob+SgKtoNw=E+tt042}hGL#&oZ?!gadB;`{$&2~ z&Eo>&4-V?U)wg%n-mBbm7$LHCY;|I1pX#9iJqGeHE;*;oRnPx^Ur2Q_a(lj*@T+E9FiKdLIka-FX824#Uzpi?{JTFT5yw82#sfOY zO`{t9HbYXc?~0&JILLn2tQxEY9~uG!%ni-)I~?asK+%+L8Y}x=HrdgjG}Yo`9uRmn z6C=HcsmOpNc?bQgLC0HKQqpv<-KjK77%m1#s7z}&9kt$EOAKzKYm<+K%ct{stU1gG zk_q_46)NU2nD#i!lj-7Q@aZ)e6P4iqOuhAXJz)A;L3rFwhSwE&A^f==QjZ&pekxV! z`^wM|QaM#WSNR=A*`|3mn&Rc6Na{jF5YvBXIbt}pt zy7n}(h36wDlrO;w|)5TG@r(B65geKSrH*OU21{6H$~{S3SWx1 zy8C0xjPbWEbK>>;<=n*&qvRRf_1Q9^uc?k8Et`v0GCkF*2>aa;Cmd8f!t_TGD$qfA zB^Akts+V(wSWen!-YwhLp*I-ghWYsP6Z&ridDK*0fEnCq!T;Hmd8^NZm5q&S_U*a% z+Gpm5IOI<11w+ntC@lK!`cNwFD#48QgJx5crdMXZE&aH-RHS%6fu-gc9v_mtjrul{ zF*)Ri>Hpo9xue9nq@!9PX@#@O+`z$F`Vml~?zrS_o7khrQH}EnXV_w=pyE5 z-(c_BzmvSJNc`QWCG328O`?ZTi!@BVe%|=Xx1hfSTfjQlCi>@$Jkuh&^0Uw!m4C;_ z#iezao{m{<(fL}(snVi)E_dbh4`ABq?f_7#6MC_NIj`JHkT0fH*X+HQVgX-teWzx2 zQv{7EYea#mfaRn&-Xs^3!Kj!vXBAq+@>E4A2N~K)&>CAyie3=jP_Ifo`buy^ns8+W zt;X`?=6I+R?L7^90bsMdt|krQn9w_d_l7}z&gFPGu*|-J74baKD4zAEt?p5nz^?{u z#b3P>XClo)d-;WVUA5jc-&_>m@Qo?vj)QXVKb)VFX#>#BjV#Ld8+PkBBJ%fu@gjLW zt}a7e1B$gDV^N;TfUD0!BC=>u8|x{`TXLX7^@{#HYp1Cg_DvQ^8HVM2Y2MM{K`*Vi zea^LCu|D05(2s!A=ctBpW!v~p3D&`|b6M@@H7F^)*giJjQK>zK#o!E^EBtY}jkb73 zIZ~Csl&f(DKfcq%U0*ld|0fijy&fGKfh7qti#Su_JJSl)fHmhzUmtUtm3@1*Keo_P zN32>dwEY}_De@3>iw|IB&A;am(p2%WP2>-Z#6=W2g)tajN$>=kV(%`g1YV4OiPrCMxDP?GJmP~2iwN@o8?EiPqgLYk@GxPtfn{IUqnwk z8ruRt=DPH;z-gtz=R{r&6K<^)42;-Jyab$}w~zXKv7zgqWSuF(PZG3B(i1w=BU5>i zkk5)E1T|P12{NpT03cklA$<~f3yH7sh^_*Kk?N0X^Io=28*tIVV;>EmAwG*tnLSU5 z|9bC20CMS58J&91^6x*@E1v*BAxf_u-6j7I-HOlQQ3pcc#>I+-AcR4W{Pt}%eV3C{ z>M0Wev~+v~LPP!-EOP^Tc4KEW^DAiY&9e5@)vZMQEt>j2?C6jG?a<%Zglm0MAtu0tY2WDSS^E`JX6`H5+a=^WfE|` z^=k1?WMg+&ZXhNlg$619#hRfkvJK6zbx-?*wsb4d+nipq2R90t+C^%*I3zq?)7$75 zx}c>hsorvJE!;<93?C6G{S^nIhL8in1=O?ab7z{-zpERxQ9i*{&>5d-JkMYMd-ty$B9nCWMWYhl7lZcT@9$CcQY`wPsyh?75INSf9Kdkj-)fy1N zmtcRZ{S@U%B|ELKkkeR}Q zgImo6tg&Z`dgE`>)c=8!gZ_e&|0vTJz@2iAD>05n41si_QAe!T>$7U}3^X1-?4?3C zgpNIQHlLrVm1*n4tI9_O^=Oq5o65=adh))Z$Q2@%5UZl*^{19AJ0K7!^N*BACe$!h z-EXga7~JUNjsRTYl3X|5*&1EBX&2X?^f?c(+Ya1d8uAQYxHXe~hF+|PSx{wqzT+2= z)4k4dB+k)DAtK+0(hus`l(IkhYeVURUlsviC4Q3^HZT+N@u8%9A$0Y&@;{a}{rd&+ z4h&|KubvS5Keg=t`_n|RBD0p$|GpFO`Jk|QY(650e1Hb&1V#vnjZwy(T4!{LQhY4& z;#q$pLGZnY$oRl;t|t;1|I4^p^fegN`qT+}ty!({iH!AHxDnKL9wM7iW$$b1=YxP2 zcW6Td)|l+j|1}9}qa<>BmYy?_Rmu?kpva674?TPQCIH&)SLtZv;Gl>ng0_>h(vj&{9=W@cu%`1R=)iS|5~($&=o`s%_+PT@rE z$hWA1Bu0tz-KhcwTt6Nl#P6dfCsnwIyTGr;w0;}UN^=Oi)5_!zlI@14u#*4{%q@26 zIFVhqq9v0#H23pWytSg(L{Hwj6D1UDM2+`@>;h@p`BC*-aB!tEb!01U4 zd>~qbTY~6UqM0>=K67cgX6uzrmm@!2KE6d%C~`3OwI1eLr>(MIT6KiV#ac0=xeCCi zVGFo@!RF6a7BUB|ZKeW^x4d5(((Ho12?q*(_ye4Gm_etHfeX z&~RLhmCBD-%Q4Db(|*Z|YthI83ACk*%lXP0_xjBAM5N3crFGE#wVS^Cd9R-i0 z`e{}LYB;|A@M^L;DicbJh-=Oo=+PFrkJAHciOlQ@G=drl6JirKkJs{T=+C1y>QShi z%W|U1+HEDq#0^&W<=fq0Dzx^J<$+o`paVg{?!9f=TXv-J2jdB07dzK6qXWhL{onG1 zJuhvRmS3^kv59+3mWVxw-n$IAC9xZ%w7istMFh8fOYK0FUaI>uXhS{2+Hp%>{$}`{ z{K?XG^>3-JivC!Nm=cWv9%OB-UfezWB0{zQlput2sW@HX zsd^4Lh|>fr2}-7Y&@K96HgBugG}9o@kj+6wllFu9Y-c=lf~A%YKbC6FHDb)|Y})?! z(b)d+6}onJd7=6bx)#x$*+OhCt?DYf>%kKxbWc1E!a~qN`iE1%Q-7^HAVPh^38@aE z?8n+o4ZknRoU_e_`1@glg~D-zAC6Q4l&)1!SGzF;(AS6?KJ%9Lu#;O6U%3={aOs5$ z>$<52E6hkojQZgxOKm<8BjrKN25-ET!rB3J{*5R$IMo_Wl6Qib2{wV-Wd0`r+6`p{ z?(t?wxmYvd6_sO8IInb9E@Og*%^;-+Nj~<-@|2=~5cZX#wa1n25$@I22JhOLGAJe# z)4l#z{WuZx=s8;4nC50-nbCnq8uaIlt69~Wbgm0YMwu5c=nTY!_&+XuuhcTUx!LDN z8yfHuIJGY)!|ER0VtmCaHC=6<`YE1qgLcTEf3$2bS9?(03b*toB%v_UocAD>$XY#* zOQ|}Z$*rIWtt)LXFCx1|P$WE#AzMPc^L$Wsjcw9%F&*Xe2}D{wY!8vT)E$)D=1)rb z#_g9!+l89VV(WBTlyh}<(Gry3UG`f^%C>LpZIpwT8ID)HkG8cMT@>fHIAu4WHy7#y z^=+;lotH-`Fq!OPuP>7MU!OaR$Y+aZ&lE3Id>FT!rpEG^rFMKv`K|N!;gL%;4Pomx zZ>cr@L(6*MjDD{Sr+(u$q#jKqUD`(gCws@Mwa~*lq~LF^A(yYtgL?=XV?`MFAkvGj z-5;Cgc_$T)%Sn5Yk7c4rIY)M8!cB?E@U43L-S?U)#R^fKE1M4NsrwT;pNr;vA^J*_ z?7~<|)!97H#RI`(PtEzrx{lXdl=v;hG4?bRTRwV z0>4(9s*8)upXgy-@E~gsc>|!n+7)TPJ152_Z#>w9kbHhGT~*0fNmAq^EN|Yxzsu9T zpzD^v0ZmNIadf{#fuaXD458dG=I3gQF>B}+7Mdxy$O@-IPDP_TO}n{|ZoE0?Y%ZLc zAQ^jTzI+IHc6W$mfVibh7m-mXsz+ptc8H@)mUt_@uh-8Z9K77atWI@sLaSQ7?y8Ba zT9G33mZn%+@MD|o>p`aNdmN(QxwbM%Tsnz78@;@u$7_ha(Ig?f^8p9Qd=T#_tf9cT z1!?9S-wq*F%{c6$K`p0HddE`jFdh=AHvL}8rgc{qd*e`|>~MRW@5ba7TcE+D9!Qj~ zX=fKotyZUzsi(UP{Tb?FV%|g95#G{BNJt42sDbckI1yHMKB_e;sJ^>7)R_~xDl^bu zoji&cnH|f6^TWSAIWWda_WCM|bn2j9rCYfV%lbOh3B;mT)lmEki`uiP!DexhK(%g} zQ?=$)J&EZYwL6i(mnUJ8P1y6ib`gw9ZB_aXj*b@>k^9n%B)$K)Q@vM*RG9;g_OPCa zAThMx1v;XiW2ihUjASco+bLjYSmrvY)&KGg5r-#JIePJR+p#lag~|tQ-dt1X#l?kd zZ<5q~6r@aArPd1bG0Boqw~P5ka`Cb`?a~I6pLnKCBwx@gEjn;GJp}45w(~pL5AwTd zZv=~ifyTY!5f`t4+MGLDKzy&PiMY1&K_GhpIm?t0#Yc|X!ZTO|wTf6k-?-3a-Lbo{P|g)hAg^Q4no=beAdCMKggf$w9*GsdCH%8PW{1DNkPSklRi&W*uB-uB~!>agJx0U>aupxW&hLBNd<~0_7Ce+ZV56 z0Fl`IxT8q3o^+vuX2QQS-w~?Ps>10lFdD`OSR6C-%)TSshw*a>vdQ4^ z3XjvOj<)MI!6**zOBxguSF+5$4jPrFz>p8c}Gf+~qgi7I#rC>f<2^ zR2)yDH7%vUqx)-&~m8 zJ$gyoECAD^zYqtaRGH-|qGK zioXvx0l{jHe=ZW9nx1d20J5J|;g|pA?e0=z+GB$POD&sAbMs zLAE_n+AMiGIddKC&;|3n{n0``{OYAuZjg4(zoAkVjQo!7r0V4swGNydyzc~N<~tLB7vHQ@TG5U)fCmS9lmxy4$I!}Qd2kkc*c1XMy>+sy zGSb>5mZ?5STpZ3g*%?q=X%voT_{IHjJ%cyhJAR*CbeyH;00VaPX-)iS`}o6WRK9q} zM9t630X==ru%|}*OD2eQuU-&9AQm5e5#UO?bao5p#^m}Ilpo*~NH&Yn5b}Ut-G>Fz zHS*1Qr;FC>N^sie$~n>2j5(@#(&oZ`HrPCFY+L>!?X2fQadb^Wx#0KUq0>qy`L$F6 zZ7T3+lF)3jSTW3RWVd1tXEMf_@m`wE?oE(VtR&I&8~A4VriN`YH{MJTuB}9Jt`F9n zfJ3Llv`~BU9!NIMO>4nPY@`_<#q!i!K7i#b>EGWncwVD5&f|`&X_lHiqzu4fzVhNPDGuZ{^dR*I zxdx;MBwz*@Oqa+gs(w8W*BfnHne~qQU2TcCR@}6O*+kK6&shA>aBWx&VP4W_=k;a9 z&R~wi(WW-+&GM@-vOYylVv@Eti$m!!Eas07lhp|)Y!#2%^lR(a!!bPW9IE+cWqQ!3 zp4w&!pM}pEjXriby&(%R_-QowVW&p(6y25Lt&9b{#4nw((K16L##RTQu4y2r!jajr zh!Z826CMA_Nm#vBoNP%D=a*UA^p8~)VbT5DG3%9`%~I5(drf>{%z*4I^s%O?a}^UO z=hRMbgZaWS2P+j6?P_aS=l!kt-@-Khw5kn>`<)|rzsTFH1bLdOzZaJJoGp*uTiykN7~Pi1$d)vD#y{)BmHVt)b-bQ^4u@+WwCqsIE0E9}*b z3qN)B!RUv+emx`TI*sFZRJiI{!%cvt3L8O%p!;7W|1zf}7WeoZOHbj2SydNtfln|`j%NjA6_N$35 z0h)CfG-vs9Xd`t)y}X84`P8ZmI|W^cz1i`;?*lmAg zry88195Llu&a0GMbgm4MM6%nGHcqfXoF?1vWP9u-b3mgR&Q{31tVR_n%k%aPBon25 zoe_)1iFUCv1S0RLpwi6y#`Eh~n>wVU8B*_ZmvrpC2Qly0`a>+5^r&wz&_$o5mKpln zW-Q{1Ws+Iu%qN1_t6)Dnt~fPMsLM+}wY5D6gRDB(9xe=tC080Xe~=TwsePm2Z__`DMwzwYNYSCxd?cvjmcIO5vWA6zv!AP^AbNZOp~)x6=cEK+8{a3 z*uZjbUJyMdhVqWxQZLSrv;d_QBAMAkz%`wKmTFF2j_h@PwSaR3Xk;+QEw`Nj#o$aK zvs9qAo+Mvf=wb$sGUR4t4<+0GZXimNhq8wNdk-EzC2WZ_VylQaI5@zMbV8W7P z=AyYLKfEbFKT(Hh9sd*w7cAoDi+}kk_U?gExNRPml!GlR!mM9w^Ga3W*PY#UR8pCd z-mdD~3eC5Dm#yLjh6k{nq?qr{4IB-+0^oa-nI#%VR7`M#0%|tsSIATazcSg^onO~a z)Ar}-bMj$?APM!R+-h*dQCQM$Q!tyD2 z+Qn3-d1-5=-PJQE*nD8@>WQN|v2&_={n^9_N#ry! z04~F~#@6*Ir5S}F3Dqe~X4lP{lhR-QC<4V7F;V|x4@9ZnI->bnWy2%V95Z0j)ktue z7UNfO@GFO+n9&JyHI8NPgj};FL$ODN*!@#J8^$l@c!PQur+SW;y(M4s4`GRw1vS_J zn@!L}DrN*rL*HTS418}@zm$I~&ou1({KFpGy~{b5`^t+nKpxh+?<#`VNlk1|;ia2% zY0AmhnPRoD3jK)dPK=rr#m9!!;xSOvrv;e*rs`$x+3&j7P*qP@^8^G1d=8M~;v88r zeO$MQIzR4iwnnn!1_mb*a8uPqLAr|i=kg-oO=U0^ql7c*^*SHsDJCA~Xz93AwO+$- zW}JTxJD^}ZyOad?mVTl0V(>@er%Avb;gpeqz?EU;sxOuzOA+3>b%l(5THW6Q0Z1b7 zr+I(+1?uQPa%}k2&2aa71jR;yx728N1@6Z1N}MEJd0Rz;7^8gV<;7gSHo`j=`2mi0 zc)>o7gsGY7h|-7C;Fz4<57)0>pg8?32}|Ilaxv1OK_g(AxGf>jVvbpaKN=Q0TkP23 zYpiiP$_!PWw=%<7mzb%$Gs5Jy$Rs%&zG!Mj5XFo0#$u`Q#7kv^6L>dq-J4`<$9`Xf zrSK3Du(el%#2fw<5ox%j$nxyCOICRq4+RPg+%TVVBlnZ%qlxeGR0=EMyA6#!urQbX zYbN&^*MOi7CB+V+y&~M+=d9?hOpB#N&7OkmSXTcS`VVi zZ_+W+Mk|fhD|H(6E~>Ph9bIR=!_llF9L_Z+&bgDjV!7$@wZBF2(V&=&Wwiq$?mx<` z<#xc6s0;aZ8tcgD>Hqeqm+{<7YC-u7rL8=*tZDDJs(kmcYK`Y5Pjo>4j3{HJyPTgI z==QD-o`V$g25sg7a6lK4?}_{b>w`IOkAdPkrI#dkZWr>s%-{w=H4`P2`~0J6u69m5 zs1vYcIb&FUM~QkB=#ENyDX3mgaKU%x5@xqc8(*%E_Ny4U$hw%H5m8M+IcoTW!cT+k3y-oUQC9<6O3qD*h%Hcj+|a)D9F=;<++d%@a!^DF&YUO9B(2&m$ess98Emmyuux zTQ!@O%I?M0k&M39W_u3J&J>^y?;}D^R<1%)4|IVyQ!VO0upmeWFad*ucMbgx`LgF0 zNjygim^W8wN!5S{1`Nn()~tjKjj8*k!c0-d82&!K`SjQBUxZ`lN*yWXZeMMb2T7+g z>mN)@`fz)DZCAUBzIw7)e`x~q`DI+VTqW8D=+R%XNDqnWlJ2tEBA{J;^^#c4CLs@C zQD!lH6Yq7}B3$Y#>nLq+_3TZO72HU@BZ*%`l+ppFx}8#i#MIJH_I0hXe0hMW?i@K< z5|w1mpmB`X1;qGWjj{=s%I}*19y4#VSy6|V^sD;;{dlhD;wwsn+h(IHV@k$FyBc;C zDIwv*cNo^2c_7}N68)QsX)2r<3WJcYJmpNMlO~lOgahVZEL^$W^iDPrxV-yO`PFy2 zJ0&UNo4Q&}41H(m(?0n?mn>RG2+>`4i_Sz8R~ZnQ_b0;lx_ve3@AgfL?HaPro6NAG z7F3&35N{rB`n+RFBQtR~V?kUCX%IefFN6piLO^h08K3qcSO#>uopgIUuY%jrc)YWL*TiE}3UR79sooJdQ?^w&3`uS=PLm|_$2Zk6)2m;?LRSy)y z;P#vejLj=}?pccT4T3z~_q5e|l6W!v#d0QNKCvDtv=V%!JK9r;lV}Sk_`HRTe@Wab zDg23re!;VX6&VejrV!1u@D;-1r8h@da%aeiJ5Y=`b4a`UlwuS}dm+Sx+f`v+1uL}t z{#oeTD<)47d?;_heCkw2zz1e7dYA+u;KvtuKDfOXR8nl?3vfHK`rb%Mm^n|~C@BP6 zqBQ!BJadmEbNWOti=H<<6jEN`9NEP$fB|xoOtchX2_p*E^jDU9XA1^U{J}`jEED!*909R!+iZq=lnhA0G zi=PA&d9k2)Igt6h%)bnO@v7oLr7Y(?0a6lgU<%tC9MbYNrso+LxS&n>hp8W)zwIFo z7|iE|Qhga60enjk)YZkQb1=Ing`{Dh@#7Eyrjl4-ZX!$nQYaQ#l$!LqL9Ic2!Me`+ z3)*BP=F?2__}UKLZ=>i#4F_}ooJr|zJ6sCLb*i;4XUU88U!F5Oi|XLHK=V%fELnZp zh4Y?yQG7|L6gEs6xy}L6zE>_;ZL86?$&bGuX$TNwLJek4xgbvsmKTA9zfa-|?je4+ zBev66GA}&x+o*6X5rFItUo{A#DNazy9LyLt5~F zV7lW^I`|)Yz@9#a=RJze|8P<6fs3+-*yD!yoZa}xyLbAd@^P9FiTdxa_jt%5BrxWl zvg@w@O}BX*ZEiriNpJQ``FBt}9_YmjCChi?%dqg|?eX_lf7C%Xp=J3X??_hvL$3tH zQGPG*X}s7g-2V(Iei?l8p+PTHd~Y;jt7ZKPAskL3dUV?CMe@t>KSwX(M>5;K4(>}6 zJYEmRM|t{z-ZOk&;MXjC1_>E5_~*ahOkGTf)e;%K&6TZ6|0dSfj-BB-#{L8>Lb-uY z6lo@)=42X7;K|8ns^9|IEzL#5WTGcaQGCJ{?K^(EQnt|+f)_^`->hgUBI!8WZ5K7( zhWkDKlvdCSi_PVF=mojUqQ62r9tdqq=d$Ye_+ADxhg?Se(FAaYy%c{!j_5yv^}pma zq>~g@R=wWVRhvKIRRM9R>3=}|?&${gI(Qu2a1vJ-)MtqFeeGn*Gek-c=B7;FZGfcB zhXCAw`1p@wy=t)Z4=wDkcmfXt0xVqq>&5!}+s?%b6qvwbIqc95xj?`BUWW=UyM%L4odvFGkMiud_f=m+N|5_QK06{Of z%wU7^Ut!Zk{ND9mch6YbBu!XWL5M64W9M9(R}S1lEWV z)z03XiQ?XtGS-UEG*+Ldu~Xo_{|z0H)PUyR@{2lcDlO2qe+=h z8fyJe{rt}dA$eepe}A*)3`soMC>-ntHnZaK)Jb#W_Kt+-ze$pSP0g%wDR?8Hb>uqD zwJ@!AEn(qT?kxoMFYzl6@jvuB*IIrypRoZLCt=jpNe)n{u}+K>4j~+hnNVOXD710} zJVIl}Kw;1K5O^98Q6tRBz_u3i^2kcFZgGe1n^}^)G_w%Cg$b((?Ztv?L|>xYiA2?) zSA_mrawYWkSD)OK&dvI%gHxQ(U$}S%lUU^TDYVD+a6oXl;OB##lS{tY7KI|S2=~4O zXKt{)(k^|OIr|ZU{r=L>Yq^hF*t_?fw-F_>GfGO@ zV+eD)O^?ctd;~~vJx79Sgj1@n1B1E#qDY?-jLP7XdjUbW4aAAs##yr4 z8MlO<8U}wz2ci(MlCEiPn?I5qZ~mke{r>7ETeu=8!M01<^VtEqBs;S0QEfp#zFVlY zi#wbs<)W|HYU}|<)N$(j1)*@qiBop`!&!~KMqm*p^UT6WJB~)H3E#&X8r-^8PKr>8 zQA``m+|wlCU#pKM$lw(`ajTP8h3(P`W<0ORt9cQdh?J*a@NIeQ_Vwh88=(|zCABg- zx(UEL?uBsVi1!pRD6l1ny9y|{VYu+}LQg?=fPWJ$O6b4Pq&C_E)CKJZa!{zyxETW$ zK|P<)4IvtnzvggaCScT-OfNuyW%@oNx%wVWf~=@pT-5jmXXxKzw%7NSUQa=(KwY<6k(*SxWgxc2;WE zf&4e^C#5-DDy;zO~#qv}SZ^Y+>3KhK+? zY~8Ulym^qr$*dY9HatP81w*lvjQMuH+Sm!Y7&c;DZsjTO3cIXQ=EPI5!!>7ya$Q=l z+Zk$@<*o3eUPEuIo$!XnHDX&?D3UTVc8~2p$hnYs{y4i#Zq&pq_?w=RQ@X;>8cxOb ztp2lCE(QF)Y=2L-i)yVLR${&J#)!tY@_Eyy5URx;SmQK@TI!#j$DX@8{2mB-Ram=8 zegK1XU)ecxdZsPJnJ55Ljn;MC)0B5Ss#YPxO?g@6@f|4A#NHSgdlQh%6{~^6XBpL*!(xm!&e|b=k^*x(Q!^R{p6&#e&a~F2=~?P)OGTB&w*CER!pMDo4ylQ)1-@(goPrdm#<73z65<&3p%yrfMCR^1ylsN=6BdFAtp@l-!5s z15t0rn}yJH!V7^@aj2cv8}7pV*76=(iTsw^Is6vKU$hxc{;(TNRLawGVfv_WVzCvb zvGVU~$SZ1)sy1(`u|_=xduJD7{%(ens9`ovO01Y-PbsUszQrnE9(K0%JL4D_V8J zmu7tT&~~UnbvvIZoKnW`G{R?d+&IB|#yG_{bC>0`?dg*xv(@bxf}^E|SRzn>GwuoLdDWAfX6zWoKU z{z+MpogXoqOGLFdE!70oDAho~9G(5ZJM78M-V(z2&$@J(b(TF7dD2Z?{fz_+c%5bV zaNFh1qg7RQLMoomq8{U?HW9FwC-$S&6lTvDJF%_i~h;X>X2Ih*eKK(_Qds ztrZP2i%UkboCc2RTK)_d&n262MpL~aXBo5hb1~sm;J4s9(4Teh;%aCXqTlyT8d)d&9Gint_fKuN-$ThTc>5$ zY5IfQlQzg1D8F}RLa$ck>F+1&tv8Bqt~&&zvb{ag6-;_I2V&{Fw=~AiNwz>@euaGX z4D#|MoFyRkypag^u$MQ)?FWRUcWEtJwqg5a;JR% zJz$rwytTzp!2?g(esD+DXVO*XUHc6exRFZxbUImA%OThk0iEadlL#nbQ?G*3&e-nG z4DTh@lKBE~o0aa_ZiVj@nm^2>Jj7bfvel>i-Wgef;Yg7u{@W6wu!QyU=?DYG6X)B~%s4}>dbTJVlVg|V$a<B@lc+;nvlQVz%?4X`SS6~OfmP9{MIIdgrDyZW>b5}*Udwl zW!hI3hRQ2ev9X`l?;G;8Uzm>XoE>oSCa9eI&ramQE_@3Puo6y4@fqjUD`!OaY@1q+ zYTgmMrG}YiZIrP5kDOBYE$hzsV%sA>AcD2qtLYvDG~H4UFSyEiO5i^AIeh;!o9-64 z>oTV_Ma;(=-EVqIX_Lf3Zp3g#VrybDLij`{>o99j;sd8IX2)b5KW1sCNz+t{yHY;h(eR6Wwk$+V`1-lhdK?YCku)siLiotbnX=Q`Dek}>^@1t+rJ z?L#T6J>x_n=sw@A=PMO0KBy5}?mu^hTEF!k0x^Hd*iecd*IQMTYer4GGQ}WU=#`DjO-;w5MH+WZ~HvSI_lYB&y9YP(>M84+ERN z_ST7bLcP}=^;T4f4H@4giX7|jM)Rrukl2Hy^*cg}I`|DsQ!W{TZ6mW@ZhWa}i{pa!>4>Mfx+;#H zz~T^G+60m=X!>L$awb_>B`=Yyp9&^FG_pkRt3D~TT+`>=V_UGV;%DF!jvF z>=@!d$yQ^QE3|%E_ITK;EMY#rya2kiwSYgzK9eQP5pvHZ-Wx4BZgAR~TeKnTgjx0u z12K}~hRS06BnNhMyVDiEX=xkMt4=~ZoASz+lbxs#Ce0MvrEbx^oG`o%zKNqC2pz&_lqt;oYkFU3}o+p~h2~hCvZ_qoVAUDn(*xN6ZUDwO|I) zi0gzYJcEI)!waTD(@#&-7)M1$tgeDahsSG5m(aJ6<&Uc3E*`t}A&PIVI>anlW+Snt z2d-dm>}A+n8GM~o)QhPxwM)UF;O8n(9$7Og=`KqS$(Jdo+Idh^ z5!!9*XIA#LNJ~5BhVQVPUZBQo9JA7wCNR=)1n@k}Usy z?C5wUj#2UfRZ9HQqS%eASBNH&s8kdJ5CM8?*TNt$O8=#O>ET{KYMpJIc67zXx`}m( zG~fU`7QHAgGPI2HaRq;glz`U{-FH=xa7{jmBi1#M4_f;+1XsyD4r=?JeOy}#yCYY( zD0Ra_jbOX%|A^l?`DXVnc&;^gyWk?Yu}0Uki>hWA)Lb2_FbSTL>R@prU=61wn+|BI z$@iz3P^MP)9-?GiF#09v%i;Df4_HY)UI3EHfY3WJ*h)i@gu;2XmQc2Tx%bYPf+(Pt zM)TiRV-EQEFd^H4G~}%fqE!CgB}o^Lb9re`x(KoIz4ZGlt6ry`l7&B6$VaC=0a2eM z3v0fO8F5j*;09#4Ol!Q3blgu$;@ z{jQvEKPUcnd@gWlk(uqzOvpi~Tt+9!bxn*J#5GJdoXCW14Z>t4&w)(B+jyPmik56U9M4fm|FNJP}J4O7%MJoV-_HC3y< zR4uH$)Rv=dy(sy~9{pC5n9GcMR&l`D)jHXu6JJIjZP9(+`prulB?$#@**a*5??bV| z9Q)P1q91WFYv zs2*u}B=}$|Qu0kAMmcIdn-OWJ1j9B#Zj&2PMpy$+DwNka$ayX*>*| zeAFBNFfE~Ei-$W+I=5(kI{9SSzp&t>jWAUA2`TqDn|=8u_6`ues0|kPF8{$OW{3-Z zfxQMqFS0#)4=iE@yDMeFaWSDk`#DM77xFCq+LeDJcVQe<^+d-ICe)Yf$?UDg?J;U^kP`Il&86aFdukNRlwE{5#FF zJ3F{H_ikx=1{k60eD`Mo2c@al3)Dql4}-=Yc6x88jjPz%1_nYJ&wJ&wAE?a|C}n7r zHVS*yhYUFtv2pj{-;E+anG02VC1Xo9s^D_?WK;REF$e-K)79~Q zgXEw}CY}@7SCepCXSM}+tR38EXtYrCu&Bu>ZgHv0diasW zUOBJ5dTS1SL~(>*{U4fxRMBw)1Lf9jY$WWvy*G#U>oc%QbwftQ$(%PZQv)-@Ou_fL zMx%gJ(!Bu9{Iy0yH&P)DV>9XTm*!;<>AN=87mMM)~ z-4=+q%?N|r2`fs)%O|Gx9!t9wO zNCPec3I~4$6dI{?BftIr2J}}z;q)S^NiyOKhoobMw{^&0nx{qp)Vy>s$WP?U zAf7 z96dU|Y|-`V-zcNX3`y=^im8U!F!rX5#dH0|%vQ_IZXnC*7u1yYQhO22Z0g+n^XBr_@8f=-)nD(dQot#ssKmSe?bBbs-wBXD zK9iPSx)~R({cZc_QJq=5CT=_+GvA!o|U8YCWuLV-9BH$gs z-AF7#81(-2;ezKXuO5NI<3o1NrHV@rfeZOxwx6tk1L^+@Y6igUSA_t}RYrAV)eNJo$k0i}1Ogc1TGB1)Am9jQ`6?+}WJNR1F6 z)X-~4A~l9k-gw{M=bZ0+&wD-JAMk~1XHRBk&Fq=AX6?0pYhAq8*Hx#ZWuYY@A)(WF z^2mUMgnFHXgd*nx6|siksUAr}a!Jei;X{3mhYvaRy*(YA-Rwz7p1e;np*A(_XUefK zxJ_~4k+SBd&Xt5~%92J%{5z9{hESk+DfZO)%oR|QEXRgo|`cBV$7K? z3J9WJbXT_1kor!WbVw~o`JWMB>7gSs{_99Nk{`2p184d&8s*BndQ1#EFqX9Bp*wzL zte2=CDU;C$hglB1kD{fnzEmG7iuE9SG!5|4cR8&)?_?7G^hAV&0*jcUn(30+(gXu%F3U29!nJRWukMRe)d-|^ zsM22%8kFeNB)KL!5e9-M24$KPs5KQ^ae9sC!g$> z{;5XZ`3 zPT5q;hBri6{VvB1#VgVJ*ROnzV&jdzyIUi` zj!0U^_kI4h3>?e)90HoNPG+cB9p;Qn+UTQ?8HR;N8y3ai(AdvkeipL4W_I#}FGcAW z;0k>+CrR}yvPp@1%yy(NT}{9@+6@mWNEJVXUE(C8KOO3N_qBtarv2M%vY)(jdpuPD2FizOdwSb&0L?dC8LO=lr3=c>Gg*#)FTZ7#r9R ze2bEu^@Z8$PpMOPc1VEqa__CWGOB~RzQozmnO+1wdrxgLm(;;1bIOMGtcEnkbNK!C_Z>YHJ-d0#@2C-K6Jxv>L)y(steyk79nKayEJf-v_odo z3%5mXYeVm5BR|qb7eK0X<$|ip-FM^~Hg^sb87h64Khiq94$Qld{A$gHj*mLC%UGWh z7=D_^E)kZrDAY_*`Rdl9h@}GCBIPC(w#$)1<;exQ=bXpyXkNUZ;u^VdYgdIV!Rs!S zhN?lrrAM#%KBRvSE~GGfpUh?P!Nrcl`=-o$OXZmla^D{oG6cp3tKNUcHlY%$FX(%B z;IWL;O_oSqW$_>UPNc0QR#B;+QZ_~E=@s4sR6X<1n-}Y;$v?7u`>K7PIwtmI%@ZMJ ztv*QJMni~ z?{2*Vz2kl7{pdzXXDnp=r0wAjf&h(9O!Nz@0i?An;x*s&)q+FNx&VLuN|qImGY1 zl?flba&KL{@&3p?S>JcEld|&JLfO}{=Vc+X^Q|+jBCRy7a9=^+`0YmV`^Ah&eM8Sh zY%z{VyAT!!i5PKh3Af$qndc^vP{ggujS}85!O7VI|A*KlMJ*+LC5zCA5a=10e6DMR zbH=8u`*FB9l~s@5TM*riOQP%@p}#!ee*TpGJZ9-q59F=zTZPBp9(O-BDDZn+64M%! z{w?I2*|+l8cxL~Md)mR;UwO)P;xbRV$LwF4%2bF=IvY2YesX?S`o%ZexqQn}+_f&C zPPIf`IR{ zrO)4UUkIq9?W8JF}8#K%R9^M2mX6$c#geL*x~BPa?XV= zve)EM~l=c)86n@lgRIm$*S5+_2Tr|7t9qss);b&Rk{3pz(I#s>M z(#YPoDUk}aO&8N5q~g^2-o{x;9s%Cizqy;Qcg86OL}X<;hU>&Qmv!xA5*W-gdo9Pb|}?6g^g(%~nLXneV<& zVoB8Kr|F+f0)3;7vlj2*>Xj_wTU)0<(ZG2uKRVsJ@3=gwaiDRcL2W=&`o2`ou=6Ju zKIJ4w0x)x2??Gx(ZTwSplh;ys=XzkYaa2wbsH93eG-oNhMxa0(E>$N{r!~Zw7Hw@G zVdp*&l*^V5P>I3e;_934%}zmm$|s^J4BabAsH_#3PM&z=tc-$To}>IT4?Ta>Yk&F52ZaT zEq+q)#MsyM6XJ_b^iQ>AHAu9&D4^+=MNRdu7w-)Y0cQx#cRw>@F~U;9M85j~4E>*cN~YXf<7HTK5FE z3O}E1v7YLD<|#D=s69o|_s1QTeJq1dU?wKy==?>>Ra~!2X15stt)|(k+dfTx0uHjT z=OjXHs$O6@2nM+MIgZ9oJPAP=tuh#nx_qCW5pmlOj%r1Tqh@aneKWj0fY!n+*|q>bV{Y48Zl1>Abp< zk(VQEN?35m*6WRko*UCQP@*kXWv(yXWe&n2wMstSa1(r zfMX^@4xV@Qq^j4%V-%U>Lv|mXt!nkXE~zgmf@$X%Dfx#W$C<|i*W!0WecL~D{F*a5 zD4EPfSel>_tx4m$vQkI#qWnnXM^LHR-K?So((9=uC^dfA9$nga&b zJUQ6e9~UhYwYPTfd=PSx0IZT~YBCu}+a-ih-piApDJ1_HL`_nEm*nQpxhHH@vK&W@ zkNk?!4;Pi5PcYY3HIwRJJl`s4TU;0xCOPsT@1os?8r&-qeCJNM{m?KYh%J_uron#EVG%=T4sZ zmV}!4>l*QTlSlSXZ|e0t@_)({Im9*+6~l)b8pOMyt+&0shmVt|FYBwr5@H37*Ap`z z5)vlv-xsNd!QG!EBxKXh&rE$yb+lz|J>5l~+j+jQ7YT6p`aKSbe1I&m=x*=(oHM}P z&BI4FK;h0`J!FaH-_@dbIREP6>#A_aR7aolp{KV!=L3;@BKPhn(sFWg%6r>6$QnF) z{D++QOW}@_udkP^sHnfczlguMh^M!s=zSR(8PR)UqGDpg#2&&vfgZlk1B5+%xc(mG zpK%`9``CIrd-*zhdT{<8_xTG?KVOAAcYaUwug~AlX&>PH@0mP&{w#~QK+)eVqW4Aa ziT+PyzRnK+7qZ_if0O;SuD_>~|2>$jzH@-Ro9QEGcj8tPA5Bs0o|u^YU-SIGn*RNy zf0G*d*n2?#W#FAV2LaB8mg)!q!d?_|Cg_@&lgr>G)u2Xk&s>B zeD%M5rILgNdQklDqmokO^C{aXMm1lL{ojWCJ!@DX=KsT^{{MsWeUOW?H_CQ&mgU$QCx_IYSJYOpnvi0rEB< z`y0vnl9IUj`TJK+_SOb@->=8NAn~m8aq`l46bnf4J?e=Ssk@Zg zdChKH`No`z%W_e0vIf=g##BV-*Wf_4Aq0SK+?Dd(DRrDFK7y9#T3$Sy5DtI**IDC4 zQeGJ9Bd~Shx&Ge3S6a&9d!_0)vwg~eXIEeEiLmgD@!bm=3J7%m^&}pGnyBPv=d;y}j?0p&*(tp{N8Wb;9|w4%XO5bKXuiV8)r`FZ)h zk1E7DYonF1VV4Kuqf-O2Mov$Iw5l-vL96!}n8V1a<1bG)o25%2IT*dtPc?48XQrBgZ=*qf&9ga+3KgjojEo! z6?Db~n}v6zC5hni1=a%>VQk%(P-b4;te;JMJb2=6=ZAgB$PiFE-)1HO&gi{(p~!F6 z-kdD-bk4UkW3!$%@alDGuSFXQtwE$3Sjn-HRWbPM#$8uL#qA9v$WD?T6ofO4zcA!w1THWAk z_L8Wa2p2<`Db3HJ*c5q!QP@gO2- z?}mTs)F2iw{L#&vITS>BflsVkUj0j1zY`BDas|He`!*8`W&5ZnQ@fBci6Ej0y4fRp zB|)1%pHDXjMx*4*o>lNs(ysas_pMOyBtW-k=Bww|s;M?374Io)rU+e~&MvH}N6P^R zFi?<{1)}mLsW6!p%e3o@Z#x_(IX|)jFWSM7U}MqCAto>4(6O4~-WQELeFLQ2t{51t&Ec^g5vGY5%ndnvoL91owXyp!IvB4bq~+)&73j zgy~aC@P%SGt?znvzhKXt3Im4X*#*Uu)+oM($Z7yM@NuYS-r#$hEaO!h8S#BI+WGzy zC15GT^$}~no}8d(l`es52f*tu`oqt0g(vmC>8@y_P7w(u;D-0GcmkM$M<<=-r(H*; zq`ItsGxwsb&?T!^8%~?Xqn6@z3O)samC0<(r05PnpBQ3tiein+mL=BUU}jTt%+;vX z?rLj8Je8RJoj=O0`0Dp`=eRfIzt7QM>$xM8*X{34YMrOeh%zdXgjshGf{uKpBcD}a zZ!$}Q)ub~Y`OTApF$s^&XLr7$Z?~5u;tGwedUBZ z0Ma^|hvP7)S^Hn0iC4khwMMJq_)LfqQF9{}%9vBFoAqxyFC0;!u(RoPYaQJW!AGZ~ zpRbM;K7E*bQt@#YQ8rQg63%>H5pXgp?V$a|1ie7;XxaQCj$KIN)f<>Z%h~mO)2Vfs zr@|jLG3Kk>E|EAv;|d=i?yL3T;?y$kgFJ+QgNnAC_xz4=D!8&RLIX&ije zFv@^9sv`~TSjF*>4mPk3d_YOhDlZVYzv`fk-!xQryF3Gd9(m^>DxDI@t_r5T{>Od^ z8@fxhC&aDj;wb;{skWl)^VVRI_WWeAU&qJA69Z>`NDN*u(|M#sduuGN&!E^>qmQ^C znNxz9*=}_~(9p*>Fwj|`(b`z_EoqN{9n-{^d%`OV9O5G{17T;EzYkUMYWDgJ%8A4~ z@CXMLlx7AFOb*=14aKLxNUh+lMFE`)B_Rapr5!lj(Ms$K!%rZcr|Tp=&j+L2mhO@0 zwHn4Jx-z%>5)BG1)AO$?TwxP&`1%-+LKF~Al1SnLPoN2TvkKV!C6Gq4r zKYrw-3B*s!q7&WT|6yvn(JN2s^uqx!%RlDWm8+!aM5MwrWD)IwM%(M+TjLaXpwJw6 zd7NVvWDQ+N7-u@b;$ZS&frP0qfu}Y*6w@_6X|74@I=8e|v_|SH7od(+6YhutY3_|W5h=-xQLS@k9_K4iply4AgHLeBeJy@w{4VnvBCT#*)GXu%ug+Et>TvuZKR~ zaet9(OMF?l8d!xKA4=g*hc-gZo>Z|M z!YWELGM+VI+9$NWvO67g zZVkWK%j8N>ji5Ehodz0}e_xBerO^{Da=<4wH53F#b$#Jh$^@;8;{EX0+TQl6fn1+P zqxVZQ+%c?43JJ6d%Q)5N6%wa$av~tzam>#wcPvV z;&@?U;lLc_#kF`PlYYAy1l?X4Q<{X1wUGQJ%{0J7Zs4+0UsYK`~vuG>!Qv#Sa zHI7S#W*k7b=j}sE=+Un`)DQ9XnKREB*a@+wY!w$lURtLjp!*%Ck}&7cPgMKs8g-K^`z9)Zn{(UAb|YQ_dP= z;e0Hjr7~0f_WAH5l+1R$D7Kww_uR^roUA+a+%H3@C@~z0KgordSWR1+TOyxbyS5kP zxh8JzVNT1@r$=KGBJdD}fX(Wm3_0ud)8_BTXVvZmAPQOrYpEMn2sEA+ zb8z}}v9O^9Sfo|lX;65Sm=A3ZC>hL@NE{S_ewCZeh+hX)xo*&}v%-S06OQYvrSR3Z zbRWBvKqeH9R|g96ZRiL!6MuTP@iXD>KAZ69Zk>p5+oa9Ot#is%XcK}2%2tT*!-#hW zk{uv5KfzEqCMYn7j$x>I|L(ucls1}GX?Fvl9RCRQAJw+3t{lFs@D}#2pGGuvU)Qyh zEseCHdwifFa)GZGD&su214{a&zs=n7`4tWO z-VEdEPl9#s2=pwx0d6TAgoTlk*IVo5-mdCAtYj?QH;MBPnY~q+LQQ>;a;-PojI??K z5Hi0a4Mq58a3~$Sw@e9FH=lQr;=Q+<#Ga3(-S&^HQb{B&mUKy*_1L{74JKNzqskCa znMqr!HY=#OAtk$tbo4l_q2AG|%9+_kncRO%a@SwpI%F?F$n+$sU2NGMasN2;$G~OW z(WV30$Mtgfsze@jxn_)|0T= z_Z^XBg3{RRs{KykEce!tL-cFE)3-WeTjids#C86hG@1oYa@>kZXO z>KD;LhVl`ng3c6L#}yo6n~MDA_3u{7bYZ0>Zx#8ZtPqa@EN7`Pr@r|sKuo%VHg`$~ zZjSr6sR)aka*S60bbDxLrcOO40ArsE`tEFadMPOH96Hw0Bdi;370A46hM6&Y_1;w8 z2i^1jZMjt=)u%(y5Qrl%WO8;e8_))9)p<+LzG%J*j`i*S+u3mJaBMX`@l*}p0}uQ3 z%WWy__Wru8P1zEKjIM~X8x6)nkG{Z-drOGcsAdT}PBtV5RZR&70dX>oPaK_G@uv=1 zd$mP9SQJw%!0bB^dZ$+I1;s`ONw zzSFY+Ob09`BQE(pe0N(i^Vr>q@i`K|XgiwckTI?WME^Na`27{?X)sLT{8TwNkxQjH7k1a3M))qqipl zFT&60pk=_OWfgwb3jXZeUV5`;yj}u4`|Qh)$%?bF3_sLbC5T%3C}t5ld>St=Vxg^f z4S3N9yO!_~0pM=8`0U!EbIbaUj860kYSxmQBldjU*2EmopWM~nc*OSWXMtkM9eG-U z=VNl*Y$N(Zdti9eBya)HHW_-bbwf48!PWjM7}*x(n9bW-q1}7=`KknC!J&n=`ifjg&E79Cs!=k37gk6Qx@|;cDmZLcKa4zKgM+=?)r(FSb+d z`OQiWDhOt@c=q_(kV4-E32%)kRx@b*?ZYV(ozF+bO3(^_B zlAB<9ZRH`b^4?~V*;cUnRG3%W(5y#Ge~DiKR0vX)1_(}=U<8>rA|_W@SYsluyXYeu zKmJ-nR2n+~a|kH)6{U-Ue4d`=NLa@~tHP~1M5H#1PS-gV@ss9AmTd;4)X?I-u9yIPE_n` z2MJuLj|EP%jZC2iL(d;l(FF>v=G8$xPv@AO8ZWM~`rblAl;ef73K>c25${ZS4o7j# zIiAhV88n+pS5-wH09z7HgqjA2J|nzxTSk3#baW(1_td}850pfK%3{ z3FLhjM01y;*<&a!1aO===d*B13Stwme_Q_jov#qT*vr!a8ciAX%_KDlAP&)QVZFrdZE-`FB!+qCDn zY~?8dMP*?@f4Dg_T`;@ZvVTK1r@8T0`|eD6k!j7HS`ZE}?euMalCuJ&+`IyDx0(fZ zt^h}0zD-JulcOSOQ1f9EFD~~NFl?W);y)JAy#R3CW;=8B#opF_E(!LvIRu?aW+~2@? z#Hu|-QR?pQ(@?)zVEJKsBdfn2%k}odb<}BG5vs$ZzWDIWOLNA1hCfBv(7YbxK}X>- zwsh0?-32ym>vGE)gz0-IHifI}L}#&&A8AfWTPy^SZDno(OpCpShXdyyIz60U=LE=B?% zp|P&U#;>@vdP-l&#j?SpY&rYh0VONKQB#NE*%OAlKiNI!0eXW7&Iua0LR*|<=UfaO zHv1qaXlX)fwO^h60C2ZX#|uHosWUMse|spJOaw?RV4uA}x2gwea1$M#b4_hW+s5l1 z{kHa2&#K}i>0A80{2RBRtFm=Do%OCb_H>)pB7aSmU!HTDFZj(1t9RxaW?A4fZNVkz zxqV+tRLNWDcFtNx$67IJxTYahmGa_ui~?wFU$pZYQ6(vCf$>KKTRZ(u0A~8OPULac z7_3xlcq1ZPY+I&`0LKk5z&h=)Gb=`?eon8pH;hsgKsYnVN;XCdD&-sS-nGhQs|L&` zzJ(XMTy*lJl3_$#YNnFwaqN*r!uJl3HJIYyvqy6tL2G8{pl_1*vAiImBQG~&2*CCA z9!|z%@5ohD_9!MH0jp5rSb^)_b_CSJcUPaGrn3Z1Mtsqloo!R|2%;uZ+y6}KmG;qV#^(1Y8nxB>E2S$sXam>; z$DvwobZ)5lZ$K{?7))2WeRB*rQ@>^n8ap)Kf4#ppv61UL+@>cl<6Av+{Jeu^8J$SW zqwmB^h}5MUk!cu0dzyI7J|&pq7YNSW6)SO|G_2w0{vUqqEK@LAvH1Y^TcuA= z<#Q)Q+77Oj8luQrJb&uv+M}dAj%bElT?0!<@~J8m13=A2rF|k#!qsJYnhh5h0DS}_ z;m4sT@BJGYKLWRpgORU$#|p5@xra*l;96hon8t|k`MK3ht|HhR8H9b9>nFK#bmYEP z6Up(xvREuWyMFHjlAsGy1Z5v|xaiN7sfG#{@g;L5{DcdEn1cYU+$v`Hq}V$x(G7A9-&~ zLRRX{y5u2+0Tu{Quz=gvW6_V#Z=O(U+8!d|D`Nw(Gq)0qhR7C=sHVgzxydAfEUzJ5TFZ6#)#%_MJyv-Y`YG_ibJ4@edPjkK)$o3FA)b15N^Idqg@TN95fP4Q{8l%q+|-%ZLX{(1-`4NAKjDfXtf~n-w0L&8rL)sk zABj}YG&TvMpg{+tUm)bb$Gz9FLargJ1+UG z^~dMu;CQPB=jkuD0LOJvOQ9J7B>$EV3L5|ISZJ)auU%YqE_|;wu`z&6VNX&}db=(m zHzsW%V9-%xa6OGcvF67Oy+MpV^p)8xK@&PP6_Kc|;JZ17x@(WQ^dhhR)ZJDJIha+% zNQeu5z}|&M6e0lXTWs6ejfpEzD#?=Zm28$4CIv0IDvY?tY37 zAnCpBLKB7!I+=k}GTeQb)R|MJ$}czPcOdr*w7zd7Nassz2)L9 z^0&G4HQ^Q2s$ct&QRGEa;VGz|l|=*5@taSh9Pqb><%pOzMk#FVmf=ylDNSbsXm;8V#tdq{6!2 zz==6e?PzOG%;FLY1-{*Rl>BXD5xe=Km=8T zj~2%tzJk}d=v@eVZGi5%Fmzt$kPUn3gr8Y?)#;13j|G!uw_@zz`Ev@+sAnbPEf3{# zX*G_5W|kFyfO-I;kg8n0Bgpsso;v|1nC2h8j@WUldP5uQc>9vvSJ1}e;asKBT`#{} zE4lgg<{`QLshYceITU0@Uw)i!w*;0P7Lz^W<2Qhn>K~;b{o+^^wxwAg5*np66TU>8 zFnL~fUV?r(z&e5)@!9cT9a|Q@6f|=tJ9^Yxb!OtjSD25Q>ym6k%!x<&+9Ozj1@0NgCss(F#Yq<;ZdTQyl{8ghrX||3xgAXI(Gzzp?pg*FX?{beA zE7CLzdfa0`_gj)ALdRI7Q zbm%oJY;l~w`QUHEs$4Sa_SmcW_RH#$V!`3mEG%~ z_O)u9$aw>cJy|~=_o@O?M!Kkgc$MHGiuw5@;NVtreda2NTG6f{12cnv;M#8KF3c8P zsHEvJ-8yk{p=JK~rDfl=?t{?T#%%m;IN_si_CR|IO?$i~WM9e>)L^Tn+}18u+-6>q zyn47&&DAt{$r3PaCvd~5{E6QfNT|2I z5%CfMHGF(DkhfyyImu3=jqB-O52zq4JbN$&?Q2>))DVwr1C0fic+8Vi+WHY%8(hs* z>_b<+%@Te@$>~}ZP}53mH_n`%K&0k5xsWn&mN5}M!K+!)FI9JPKb!F>O5YkDr*VxCk+ceF9De?Z}5as0OY-p7nz>Eey!bi2ZgJxQah~ zkcyXddjkh`8WMoUFtsos6H#FylT75~)5zEy3)8aY0|%a&4y0GUKu@B9`U+MNYR^|V zZk*bs1ocRoPzqa-ubZ2>jwP2)ZoH$9{RBHDBFKX{pY`{~??AhUQV=W#zsGF~?G?fY zmNG{q743a*g7oumy#VpyGqhLEC|WXKPDi5H0nsxh1AP<2>Ej zVqU$rYW8#djlF1m_n7rhX@xb%LwA@Yqc~YnzFHK8`Hp#`bF_~j4s<+^HRm0t3AK-C z1qUH~T$n5EnFKa1KRpVcBzogl+({wbYc?vI2kh3LXI&{t(M%?NchCA_B6h4=c*ebb zq1kQOp!f?+^<$Npf*-q#?=e6m7L$MD^@fe=$Z1Epsyfee($S4X9yXV5IcHBg;35)~ zu7It25e1cpR0Zi|B~qDWw|?%d_7G&9N1%MYI@5J;n`Ov{{sD4!{(MMhFbqY3`odE$cPA! z#UQS=IA>pTnp0}rMw_qX_%kz?VPD*VlyQCPr|xd41!nitd7`&`NS^DD82+>)I3;U- z)#m#OY+x@Xl)^%?GEL4e0Zo5xJAUaF>uWm9+8gm~q{vFobQ-Sp*tQ04x;o?fCN2e? z?QnX}IwyF^zHf3BiEtkfd}ed_n-Wu=)a%*iL$3N3Y6mvh5)ZQmN|1ER-HxYXmQ=std1hTf=9 z)nnlon{aU6N>qgM{=j1t*;6E30A3xEcCU;_XeH@(;DfXSsAFO{kV`6K@~CGa1U7Rb zVn{l9HZs<#<}>PjXjVJ#>&M~rgwEA=Kc2ocPbE<2cskF1^M}~+d{A8}#fO}(b|b#? ze`Ux`Yj@!g`EJ11S@i!vJl0|3w$y9&Te6Ci8Ww0*eL(z%wky81MzQcSS}9R!-SrA? zNd?z$QANjansDDV2-j0HhC91$T>i-h^|sE^B5V6*B{4IgoKe(R=$Gd0iW*S7PxQu> z2gA?Gf4R1RRSx%q<9zx>J2i>9J`QDh?Nlx7fy>kHh@j=yq{OT~=y2}M;LU`5wQyYP zVpT9YPSJG0wKWo`iNQx+=GZkW$}4rdD#R$tg6}$c0WYdHymD`*eLn=7*?%I2NHCGD*ZE&+Ck%0LG|WU9ck>b$<% z=%Ei38TDjO_)3@5Iv5jgNx3+=2T6YwJ3*^s_w@zA$AaO(|2kZCG(TP_)>&PR`zN5L zdd*26Qc-~ycekYn0AzA2kl6xq^dKre)tQx2GUv%o!R>V`2N zRbt$UM>x}33qGw9=K8WrohmiZi(PKF6=8I8d zo0$eLVhDS5vL4Zdy>=8*+e6jex<`M=I`~nf$0P_+0kI5^Rlzj8mjpe}p3$9VPLz7S zoEArL_U=#TC`3n?;|omAyN@dR%BjXM+um*CWl!g~U5qWPwxz4A^)heAE8+6{S`%_c zU%E7uo0Sw=H7$(p8kY~cLUCFjHJJl-IDaOTc&RTIkr{qyr5R`L;=U$DU`%>PN`jQ z0~VF#cF)eaS$L4ug68#XtZ$!kcYUSWZ@CK(+z^2!a z)Ur0Vx4svOE(R;)It8by!}~?#{yxLtPcV1vlA>zho1r4Q zAn8j2UYGvKv1n8dcd@rSnBz|54ZR9?;X8P_9tkkhZmjwRc#8yv&+YB%%4B6VE_Q&s zN_0g{jVhV;&+_&<^x1%2S4n2S8JPXFWJZ{lSKGzn;-;JoA1hmp!|Z8<{b;Je6l=QGx&!r};oL;CjTJmzI9xVV4~ za39y+8R;2fO)&VibnEkIhqV5mH*!;gX=oJJvczBwP9-(Dy1sJ}0P4^%cyjV0G&xz= zaG+)`d;OG2$bA+gzurOso{`mqhJLkmk6{!#`tnpB;KX1rZ$^d;PC~k)Qmt<9C^_Bs z5Om559gtdRT`LUr9*}}7knP*+6kRMSRQaYne;0M-g6@hND9xz2-e>VVE)H$=kUGGV zL2tk4xO*^Y_SrnXJ>nFx4h@t z?sUO>00}{UE}GdHIl`aNw(k(Q9I91Ay{zN|igiNzB0*09!-#G?OT;bIY7nFQOsK+? z@(d~W7qL?3eb(iwv_pi8jT-~$XCy&|uYc-RZb4IZ?Gq#a;p^dU zFLXiT9D{y+Pxx{1{ceV6hvL}o1&NPl=baulXh!3+mVumu0Pt3N9~%)6_#IPIn2h}v zV_0-u0T`+hsPNXP96_Ow{H0jVwnU^M)a=Nj%iYk>(EjvoEGc3%;_TbPBs1MSsPT-fF!Y?^M6q`8`$&~J%@DuvnRBUOqo5v0;#dDc$YQoYjs;RqaCRv2 zHw#^RX*))=LI5nIpMVFf#UY9#2cO5D=7f5GUh&%z-+VrbWXv*X@4)S?_H*->c1KFS z6sz0c8StB-gU&NTp+Z?EbUUt1xQsh&Kbj)BcQJ1jvsMOaQQHmUuA2W!O|MNN3B&LB zO3K{$TYE2SD_fLUtPEu?HaBKm<{nnkH)aPtFFXl3aWiY<4H(o5wRh3N2QZr;b5-j1 zQ6G2jm1y5wY0iwzd;nVA7)tN4Mdtj@k5t(D)e4-a>N}Z{ESFn%U59lZQ$0MXWbL7J zmh6A`&?ERIdEa~t3pyCeW)k;weO=h12$UPPhaQ@aQ@{7wQxuLa+lc>uUSWo+!{8^% zqNu8~6VDdU_Q$$Z+;C{`b+5C9Rvn8oKkH#z^FDXK?MZ0JylhC@O$5`JdDxv~-;rrY ze8o}!M$#!&g6|r0-Ntb}?IHhHyU$ojhy@WIa=peEP{}T9_twA6yd_aRwbLWaFXl*j ztFGUg(wz0ER+RNE^AFm~Rh>WU^vLMvk5r)+J7VvSCv$v>pz4W zsc?SlduZB>o3sJN5Zny9?td+TWv%=IlrCPm*El#-R^|NL z+iFn7`vglL1|APLEf7{qBp>!MR)qkJT=yS9DzCGd_sLPRcq*26;@V-7k~wp;|(4BjzTBkSBRUai1!zu$InWOT3bv);nD-aWf3GiL>o+ z*#3D{7YiZkKsk>B>;&~&#iiyU{<>Xmy6oDu=`_HN!vozm?Hl`C3#VOjv)GeZ1OVOa zwrL29Zsa-Ajil#DJy$q=?cXRFiZ;qoIlG9GrI!5`yq8|F(A-}W!x3W1H}m3wfks;| zPyox~QxW*^l7WQh%+#(|hwsI*8~g^QE^@vR5JC>VN4^i;gq`BYX5du$`0raQwsbF< z6CE^cIK@L4GS$mf}0`kb%Ttz26KuCs$9E7*5htEzLWF4jT9 zJ@~zCi1DB{_ID780d7DEFNbA5GPz zs2bnCiaTP4DHFT-*k;TV?J-ne}H{EVz`A6}WL zl_JFKD`e3Z3r~=FIq(esD+vbaS`?PD^87aAA+V9-)7VUX?=rjmUC)fJH-_a%ADB#^ zE%unJy>Z}xJ=`c%e}ZG6!4GZbAhhPrlUMK7i_KT*8DJEA!W~(e)3Df=!^U%&en(KU zJlC^fWTGag@8b%X7!+qG3=fI_RzN;udDU_EPl*{K_#NHQABFr08aeZx9QPR{R2+u>U0Y-484n}syd5?#2Fs_t1U5YgorcJh8~ zFUlcNN{@ZoP2fhwuNBdj)5%Qk`}d!^0QBce61&Ge9lvwap|k|+VpGe*RM=!+Ou2H| zP46u{ROCU2;Co&&1WzJ-;F>f+^Tgy#yM{ajJ0*aH`09gV47);^)2xEt8@2SbQJz~e zaAL;`;wMh`iK_H_sbL8OgKLnYDjA>`&amPc7HJ!|mFkURO2PQgi4-WEedV&QGMk-k z>xaiH3K2sv!fHDD7Ub@5hoS3`XV>~A&~0XMy;j8NTVHUAHhS6AVkQWO$%9fkdCg;L zJFyD>8pL$oU)Nt^yCPT5LZE9=gQ7`3gSo=9P1xkzVJ`~N_Pw{Tx=BadrWgy)4gimI zeOIXc*V$s~#05K>g`7#yBXVu?Er;{4@O;Kc^?SpsRh?JS#@21vP?XU|6r)F5)Gxco z^6Ik-!38jAF>gMUmUvXnh(S6{0h2O5>X^ZS&a>3C$j-G*rEv-mtxVW{MQZ-;kWsi( z>x0gU8bK!%1_FBr%*G^!D1hD>D+?O7Ci{tcPPZD>AMXDj_P#PMs;%w&03xM?2nY%& zNOyM#(kb03< zo4sc3Ypv^A>mNHpS4^kacx9XMazr9!*6QNKbgVzJ9towiwV!TRLxE#EuekmD^kGsjrzW)xmMG!AJZ zJA|0ENgBFYxFBbu;wcYvLxGUY40qRL(aVR|!aO z09Pzqwec-q&C5$Sd2E=x$XAS*(BE$(2aUX!|FGx8tOg?Hq4YWA7wuKVuvs>8f9G1C zhw&OtT~{YDD<)(^vNFKH;1`&+Fj$YAR1aqi%gL5N-?KfStj39A@bNn<)H7OsNZdJw z=ADzF|2VV8kMGtVmAV{xJ+E^{tB36B`wzXu1naP8KbDbC&m5Fq%1P5a))RE|ps>Cd zEW5pNXxo2R+3kCWM3mnjE&Qcfv=sspg|N`?h43eE|F$UP!poDKw(4` z6>bEwk4e|NzaOg+1c`~TK|1Pz0s;B8*`FTb_9|a3S@9fw0v!i~tW3Xxrx{j6iorj!j6Hho~N( zn#`PdCe7%qKny`Gjma_Yf-xQk3_H0}!%VB5r;%1=f^VlZnG)|Hoo}3dZ$`gvQiHu# zIK*0$;Y+g+HnK05%7WlqKEghrM$Pa(L;**W5wRp?P|f{^%GV!<>S~e6 zz=nen^k=ERhPkVA)>>Z5K%&XQObz6X<7)!N)&qIYF$V!&=?5fntRwL zQu6&w3Y(+~RT`l+{W8r%)hN*X@jmFRUM_!7C0tHA{bOCf_tAC1TeOA%HR*?2XyhU7 z77H6)e3?He9%OJ=X314NcnSbZJxj(ZO`ds|A3BUaURfQft*P7@YWvGC4XLef^71 zaP?@Kb;?x-FXXH0jpC`xMl)G$p~8^$ClpGjm#z!$*|T8g0Tr9 zLGTCI;S>D+F$v$O$H4t}ePdE$sqgm=ks$a5mNYUbcx}SBBb3vHY6uHeW_^&4^o`!AhXcSoMyOPY*Ube0|05r4#>!JkO_2u zSjxBZGDp$lE`X7=!J*VJ&tJ$(qQ4J@6w*Mix-OeZ2we4=yS0lQ8UL_8IAIgJrr%}9 zTo}A5%))yp^3d>&KC>9CJw!r}Z%*D=YqHLZ7*rGe40xK`1 z-&>i3aR%O%$^_4s`mml+cplV}Of7xlv=VHRtQ+GfEhjyFF=O@l;t!4n|I7+p_2#S0 zYuMXDhhVM#V}>-VGCKl0Z99V71ss)-^R~(;hSqX#Wj5h!vA!^U<&6=mtxF^ClA7l? zk|D7rYdVwaUt3G-qCvA~WUk1kOW;74UZ>xGAb4E5cjV^z*ibxVd;*XN&cc*fp$7a9 zd51}SrYizw>F|3qMG8g81Z*{Jum>*6uPrz({h-t7m0sDW*ivgr(fIwnsct2Y94)ih zx*%0^vG>Th$!+CwY6J)jpt5&+1~7FN7d#5NH(x$x_mw|%h}pnW4WYfUC?SE3viRWZ`L zy4{9LM6dF!cwC(p`P>f0RH@}Vz_1I%KJhGwAJ($+%xqWnlsKFxKtjZMmG#>9Z?6UU6ui`4CiiX>mY2vRTU~(>Tkb z(eEEcdHv+c``a68i%lTq;AQ2 zCP49tt~%WSl6f=qSDU z-J)|n(jgxb#j(l#{nwtteHbTRtcp+=hB>b#$6VmXl{9v-Y+?>W z_k9MjK>e8if_#bgkMBv;bi30Q0WgyKV z;ymC=*-uVu34hu-q%5sOuT=|5+C?@qcKKtx(r<&dai4aDf?V`&*RYYkn?lx=a^da* z$*C+A^A+7gYJB{K_@9434|`-*=^p!TY$7gBW4_I$0G6CPCVBU0%4td=@sUHsUPR3R z_Dxvbfzyz$B;vd1?{NL3J-Mb0irrYD%;HkkljoTA zDTZ1G7m)n5RP^p<9(s;b&QIYNK9tJ89s5hy*{vsz*0vx8Z$p!L+g#74_qzRHp7_8# z9CY`KK#3H<(lQj%?Y4;;IiQX{|5r~1@Dsgcrz{}J_|sG1cPQawGCQ8naU^qF6v1}d z^1qU|JFNIkY#}B)+FEnv^TH6sR)e=lzQPwoBV98PPA=rpXa!W{vvIAgX4HuCbQxnu~tQaPeu?lN237twtjJe!EzJz|&=4krR`JkHY z6DYLWm3xHY-@StJfV1F_m5-b|ZfigO(vGU{9jzW7vB+f-=bH=z-ILuep-p6pi9;eP z#Lb$%p8D0iNK63#Im%;9x}*+A=Rqt1OVl1Ack*aqFGV8>`vHK_SyD&k!~LTyVKbLF zU61kwrPhb*NNA#_sYpdx)HE2M-&FG>JyLmua$N$n5pez!ZT#|49QVv(&-KAz7UpjN z^7qrK3KCaSi(%GnQY5~w(XbpzXY17K2Y@aTjh4jWV3))=CVg53(qAqXS|zvY#4Ojk zNZAqdkT!zgec$qEfD7=MAqCRtn>x{uDO2?f|vNZNPh_2!8SCE z;koXRw*^SZ0jV;`cGhaFQY%y3vz-w{Ao*qU)gGAwpunn?w1d-)zC7`OTdUC-4MExA zzNF!Ate2aJcA^h@-HF$uq;I;N~n%WN?Q3hY-Hv*R}W@@GOHif=>x>`ouQK41;i!~~K zzihyZ0;RBXT>sR1scj`)rglVyz+pC9)4G9;ySip$h3<7ly#?A|7yo~^-sMace~Wg; zL}C}q04a^0X+M&`^vduswQ1ZtZc=ML)!kzaNBz6&{(A09ym&Y2nR$jWRki31-TKZ% zRoAuiPP8-uTO#WJ>MLOexMFPAI|#ncp}2lGd*4X+p-;cjQf?1spw6J3&N~_@!B_I324o+*-o|;7Q`&^^nt;~4Dlc0PWr7L{=fSJf4dzJ zFw7jyRfmNrv;9Yt z^Y0CbzrSG#RdjyGZPHHSTQ|jPaZka7*5l0o-Tm+}h1lDjCwP-#^I{w#e9P?=GFrdP z8DsqG?MQrSER>KAkONgNpyQ7i?H^!zq}-cMHg4v?Lap*|HAsg0ImOBM62taatM1Hi z{|Gq8%FWLo+>H|ZHY#!)?;WYH6y+x}<;&L%Y%a920D7}C>(!kYAP0;m-f$9EsXu}h6dqY{M zUYuW|b6v1Bnb%xvd%Ih|wT|>l(}^NgK`9+R8T?Y8CyuzS@*H)Q8%`W^LErv0GN|#R zR_vl)2rwe)ngGN5I}AMUC5(S{N#3t6`II;J1@lnMu>%H{Q&tX@O@8|6FSC=l77->B z`~6}IOBKA{FnQeo#((a~YO5vM_0{ThOySqov&4ci;x<&v#0U-P!~)_*T2W1Om>w^g zR)*BHi!<2(knqA&2F5p9d@dMAZ#2x4X-LP---;AjF(nm^Wq8UHj=<^y zp=63})#@09T6tC0CWs=Y)S>bre-EeKYW@tgv#cdLBpTNPowUjz<87!Y8)9Qpd`&LK zO7@ZoX+^O)5KG7Og0nA48l`P9mw**D)gl;Dr(8fV$Te!yJe)x?=w$)3@~~`w_=58P z&RqWSPND539c!Saxs_QNy)xMM0syVlZ z1RX6*GBcc)XG%A-0(|p~()Ipj6M~J?^mRErwAHVrHP|_GZj9e|d#31}$Pj_Z**ahr z_y#Ed(!v4R6Wzyf%U}IqMftz&hv-y$O0d6y-<_#T)1`jC&#T5pE5pX!Fqf^}wWp+x zuw3rM!oHk7%^y0w93!5z*)<6y9bq6|tK1NRO(s*dQ(tL+&g>bLz`;nC((j7q_>K;QTPy>ixStjN>stR{gTEr5qCkv8Ji*=2Dvb_Y9j*Z zC@7R+{M}^%Npr5fy8WQpQ-;6Q<`*wdw6)X7wYgas>$JiGq`wTk;B;~;Cf2eDP7~-V zYTg;8h_xy8;XP_j=9uRb8qq;^!TXZ>DX`h~^6Z``H(Q)lTDu*Wiy!??e0=6|@_dH5 z9A9Sjz9$W9POe1u0!H>Hh z4+1{EX_m!{b0t3_6H`sO+4w0QPTj^#Lo@TBLpiT-X{ta4LnKoi9penUrj)|vrNU!X zBp;@Bxb^0uIgHh)wd|mmX<9}uZA~?ODM_!jwnPUn!J(tioB%CRLc+ul&X0xG9mxH!;YN|&H{ils z*(G&vw%p4$#W6Q|2x3M%gp{9X^Cmzq2)d*==JDJO(}GeN#7X8gduKW-G|Mo(6M5ql ze6y@ouQcTQ1H?4vz9zh}H1?*T_Et3`2fUbPB|7aJ>|#{u>3-l#c<7t1RbT>IDqQ;2 zWM%qHbZ_vUT$XKS#u)Bhi!8)Vt~d|87=XxR6tTAr|LY{?j*r>cbDKhBL#dCrX0wko z%Y(}FC`1*X^2Fz;x#wb&BQw!_lW(&|na-OGf3qJll^0dbkV9sc@`j}dnfve-Q7E}? z8&r|K^23%q^l0;*5@giZ2-50UP%8gwTqf5yE?R6LU^8*ZX=AP@s8y)(Zq{y&o-!i+ zWu^*ZP*3K*u@&fmv|VbsIyYC#x)q@CS{vPs(q0)&W6AX6kU|*ME)YGPC_}*bT_bk1 zSW*;_mRyEXi#toDQ+AfRT*>Tv3cApt@+y-FmD!60sAeBe+hvBmTGM+ukUN+Vo-+%Y zvU(OZKw+*3D%X~2a&6(UuAdRSsPSgyDi`E!q^&K{stubVau2EF(?jZZU&LjgJ=C89 zrIsDmhI=ddC!eL;=~??J>$O$%n;&xgfx9@Y}fR%vN-|H7D@4OF=NuVH*%Ufqkc(9|*jHMv9M zyt!ek{feKM4B`qHZ+q=gT&oDFKPYdMx92j13TbkVQ(_(6{6Jc+ZXK7UiwxFSxgX6_ z-%)sWr_5B@w;{-Y-x`2z&_hDCG6UUf+sUV1_Zz2W8@otqurO5IAH>^9JAI_C9!%Tn ze@@nVJ!%c`gHG>hC2r3ue)K11M#$0n3CujZw{NX?{SgLt1L)f?(EQ6>=2up%?Qodd zm+yvfABr|&Nc62<5$?0^m`YM?RB6B^mWF^L8 zNb5eX&+?0t;o5dYd?2uG6d{Tx3g1+}-b=KwRD^13NfD7B-1$u9$O5O}a5%4a=)>OD z*h}BDjjhC$grO&AZPU5Sg~so}V|U&c(MbO85#u@%4c-YuM7n4mxUAkq^)@Dm!iU)z4rdic3=Qq;MWYOul0uh(7b!sdw36Ec2hdI; zI0VUIi(hnT)n(Sa&a)a?F7T^Csnh_61P+ z01e5IZ!1t|>>FEwACtn!jeO>rcjm5DglN~nd4~Ol)LK*;Z zuGoNU+vw(mbokGnGZ^jf6}w5O zt^3h=J63DH2>fwazg1HP1gYTD%S0ON-bK}7+<{#!s`DocC4~;iydYxLzKDfP!+^HM z;G4#6ztICe+Zd-zrI^NTt`Wr7>`RBnDvM2|8MBTEaMwf1?OJen>}PK7>tqgK+04*r z6YO~@Q01}|^c|_Jne|AO#oHn{7Ui0%)^E>gw?wS`^81G(bL{)GgwpN#^FkQ%)foP; zX3#J05U|PZRR7z|9b8b!YSRNB;xcJ9(MKp+kMMsB;kyIpT!N4kDpz0PT`u|iOsRIr z?&TXL!6nUt3%gQCBbaERMQo*Z{j(qF>Ke2)dtbl1Gtxsclc>OEvkL#}hjd`Sc3di$ zy_CJ9$d_wRJ-Da7I0kD%cT{SiE%)=tQr#L|Q>5;3{?F{Yj0roWRFz(&d3nwIxXIyp z;n<@)3Pk8Nt{}34JOIY|u}$nWkhxm}V>d31FE>oc{<2sK@O*+Pz~1f!yRXN_C86K( zNBM+g{S0Ka_T}l=tWd(cSf-4`MEWce368YyCXCSx25?zck1UGG%HyZD+mZein@;@4 zrQ%{4?C&xtF2eep(PUEQx!n? z7Zg0P51-6keCuZ9(ctxt17q7Vhf}k7BNy@)0)SN`e?=JB$p3J%o#DO@?A0NsRAcJ1 z`?B@YD3>}D9X}6iGW;A|td^^7Gx_ep8&wo^hEGok@NGVQ$27x0CMG^9Z^F$~tFHqV z)dOIA_e=h-J6rXylNE==Vv`M!Y~*j)5F}Zx5U)b86r6q7N!=F~C2CY2I899X>HGUW zho8HNZ_x@pE3ie^+nD2Rl2%QKdej)vPf?7RwjIE5km{@mBN4COKCfM=M(|cy@Q7+A-ux1R7o^H5$>Bic{?o_a`hSsDz zEX?7AGKi%}#epNL^^j`C=RT*Ce2_M`{KQokrC6T67^7`&S*!C4r=wE!4%^e%g0{7H zuQPOSwaO4WEmU;)B?)$qmjGI&>jWy4%<-`%!I2c@c*w7y7d0m)ciRA=<1n3OmozP+ z-rZTlDeMO~`G#l=m(LbV6WgiP?*+61pT%?!O1J}(ymUdOUibnJ8PjFgBJStMso4fDrcCW`KQQH z88MYzoP_=hOd65RI}6INfhl1K$xpY`F2sEMeXq1ZgXaXM7!zHD4m$Qj1HOee-Eoh# zdczAEn+Dy{UrNA&a96xyp$xb^&r`Z^v*cdLDftjsS z`aR$3CZ?Z1d_4yx?2cmFe<4D<&*!kyqjL#ShH(GD%V4TEV#9V4wY&c3S zHDH(9%6cvLiEQc=!2uW*=CGT!1zZ&QcL1^chQO&CJXy^7k?r1xP?-Jm-G=a(jUSP9A|AN12%Y~yzd|kX%6>3H&X*7T z9QF*e9`3vKT4M>Pde_6FrOWopu~0UdGw9ki?q=c+*Q|}U1rLvcV|F9u95@Em1at!( z##9N<7Tk~a2rx*3+FKt+Ug?@tK^h1M2-RRcDSekL&^ug6&UPi%Mr6usrXjJ*F)x@0 z#^AWTe|nVtSrYfXlBBIi~ zPl6ULc8{-1xG(Ltpv<$-#K)r)T)|B#rMJ6vPw-+QEBBm7Pi%GSR&!;f$wj2fT2MymSOMZ zV)d%==1)H}Og*+>W(Ew3!Ey(mhmDKBt*6N?)MSxx`YJ~Xr(T1r)GsJcir*?tlFgLF z$>@8xY*Md>)%@sskL45BgCS##szRd2fCp}Ea#NcHU+rQ8UJJLYQgz7JIN+&_5ecsJ zOrD`V*wg28$UYwMcQ!nSrPh&^?XR(9!K=r_P6qBjQ z_cn2&Zxf3;W~uXa46mX0Gs-kmQ}psb=Bq8z3)3R_)`A%1L#g+O+1Eo_2T~RRzhv z!BEhfevGQ%iYZLkQT#FCNl)0WVIK=~O9q5%{7Mx!ygmQ%K_MQT#JhFRwZ^^lx+?$^k$WivhBE4+*fJN5KBQDJl7&yE7Z4v57t8elVUT z=Xic}d4;hDBYTZ>IF&B(TlRR@x7h6Q{H9Ct_i0`4Gw9ymC^5#DVff!EwJ_0PXZe$h ztZDL;O@A|bdmFD>!$6NQasOeDfn_Y5m?1ae`pVPy^CW)QbH&Y6rdG1o@^Pv%JawKI zHEL~=2ivHir~&Gvm!B?B-rRrjz!R>w#FDzMz;pnWCa!;Ro^Z&*O)NLyh&xn?_mUtA z_xLCc+n06VY0O){c_lzUUJrpd<58O z(;L-%fws7+DQ~0EDaLiZ@4JGM^N)+-#*&_bKYPeVxL9O(YP8i`Bx^4l+D01=$DMHi9GdB z6=>Z#XkS|;Ei`K^m~N&J=H5d*15a8GwUItL<;XT}`WBv)(lgGbh~N@~xs zEfaoLIrKDdzz+E0=;F+rTl!zpS!TD(2+0U;3Z2%Heg!vwBIPoQ2REMI@WO$f!a#mw zQK$W3QUSSJ7oK-Mg(ZAJ4`e_7*YWbx$Ca>ag?j^!5nDt9Cf`~a*U2~bB=75f-USt# z15A3tbNJl0e8*OH!bI0Y#-Iq%USj*f(=`^km~O^rl))!~Rnkn`#hPW-KKOhEZq0ak z6$yNK7DA$PEUQ;(?V>ygA*oMFY) zmos%QBD`Y3Gjlp+GMm#=>(K~?!R1=fsM2=U z=~|()c7&)EebX9Z;Sli@z`SlwDym_oi$Z@~YTv4oCYZMroMY>Q|2bwU@ncjSyYVX` zV)w9Xmc@4VDr+jk0RUi&Ef2@GG)_jh!LM3Voola+)RyBEWw1Car}xHn%@c_;ZV1Dj%O5!E_1iu=cE41UtKyc_zQJ z=!@vSEF)f8B!R#6Z0cz3og^$&&zmghsUFk7kJNM1AXar0TG0?KRxMe?db*Bd*}hhJ zj=)$OZ~5Y9*XMK*yRc1 zSYPgb;j=#%)yK zcHom(U`1Sjriq)dB@`fi5_g&t5AY=agNA3pZ0PG4(}Au|Fmd!y>eIL*5G9sW>QBy> zyV@_chHMmj#WN$Vu#cR(3iN}@L(!OsTdBhoXrhQCNS@`?P+`YbmV{la#zi3>v=?MD zvw%~0=QkQ>-8w~X98ZN|WoGUuhDMC7-+z=Z^P3euWgf~FnR@`WCmd|k1(CYB2<3NC zxeqRHS+MhV;(Tc|%v$b@_w74wC2F2cH^yHCm0x&Ujk{sFAE@{f+LFpr_BRAy?H;(@ z^yQ9p`cl&st_t%%PTY9h;`nCi+{u&V`FL}4pR=4NM(492D>Q7~X%zFX^9m7+<6Hg# z347a3X+^~QZNTYh6bY3Fvld!qIz}2L1eNcf&~Bn825H>pJGt-Xy=ysr z5m-{YAT3ru&_;4+jCAbQ=e_weD%#IdnxbQ||6Le$1d6{bYbWu#Nhr86^q&e60=E{C zEEWDFZ&-G?EuMNXi-M~`rZ8ktjk=H~8h?vlz7?Y(I)^n&&doG>xc-@Q*nm!_b3T+U zPk7w}veYTb5XDYkh5_3PHKfropJq1pgGD;=4`)B>#?mQ~e1{pZMJXB#2q0=taG%5; zQg+H23o*k1u(r~Q#68XQt?Xi2bbC%^ICx`T7!|eD1g=Qy@jliHVDe^h14!$w0){Bk zp1&5uO^JtMO5W^&8(WP#r=}yZ&bwf5bZ^jQh~mDIg@3A{n1r4M1bTx2 z;X7i63*1I)Ixadx1dRp~^ympGfUTG(deX8?d`JW9Wy0+?^y8$0b|Q`}6iTzxN<9_C z`1R^M<-)y`Fa4_WLgM)zcxFSAdwu=dX0fX9+hLMM%xAT2g>WAh9omk4a@2#)iv(Dh za_GL7IIxOw%k7RaF8qW)z+7iONX=|WB&7NM5emu}&n%!`UU{!|t7k{(d1o<5%9Dy6 z)#vcRVm|u>rq((>Jr*T{(R6VQiJ;U4U4^2@6Z+9%c`x#Ey)F6PNt}~MrU|MEcz92_ zj7T9cgVdp}*C^F$Mwx*>$r8@-=|3#X(%)Db`mvh}(oXJGq9#Bs^IAqJ!~E$pUa3BU zTz#k)B}%ZyaqK-2+JWcV#SM5ACuMK?r zHc6VxY{hAjX7I^H`&)@lZkBpEZ1p=VFPh zLck6eE=!*p_f}SU4y+GUZE&KW5& zz+Fs-YXyF()$w9Adr3|{b#^Z}+`VCL29PY2hvmV~yjG)83VJ)NU-NdA`ol}Li!vsC z0GZF~6et4E2jsBCo_+WY;3j!8u`&RiJM3L3!Q=r_e8jogjo!(fsZFq;ESqTVC8j*6 z)rdEGd`qB14bWvW+)G7geN%hmql1!K+KMa3H-g_FJ9FTcI%P(Qt)=4z=!74wJ=K9f zqz=yom|#Bbu1MljSWY3p#{Jw`+oU->s9=1QRadj*{-nVZwEiAuoNMxiT&)&@>;7ry0p(_n!Y40^;aG`^Tv>XWx+NE#OPf>J zFsP;Z^}}`hWkitjlP%skUN_mMA0RcOrrml%&yaCDC~$9fQLf_k*L3lBs1UN~oIVjc z_~$AgW`fmezPXv97Y`k1n^u~sT2UImsa}k1LzlnqSq7zOwWXfT+*Gj7R84UcybB3( zey-@h;UI!a4q7FWQW@-Mh@>G{MS0!yT4}!@f!MFbRN-7>6-u)RZi18<9_g}eRc*&| z$?&!wTzZldg5MNr6q!sfw&X0n`kBF~J~#_RPZ*wbmTvPG!U6{ko7a2|5q$zF$G1&S zC?6ksj}EV=q^(P$%ewOBbL6r#!Qx<1R!B6>rcL-n0j5Q(`mA9~`$5+TvU#Ag@?0H~Y^50yWW&x6(W1$s&C?be25&esih zoN&$JJhzu#Z|1|@{|GSi*dkNex=FvMVmTsaFW-~gLDDA;PzR*Bh=Ed`Z zj34-W=^dCghe`2L+v*LO%431^pUB6=>Cp*|Ys6ozM zXa!R7(`*(eL!v{O>^a9Vr{s{Rw~Pce*nu^v?B0 z;dAyl2j0RYmQlol8RdRMh2>Zl*Y2~3CVTJj(DyoM*Bx2Ln^iAlx*=6cAw?`9MGmuW zGy3)BP4fU8T5W!;g>>SUo6icjM-HDDR*o8Y?Iv|5j2Jg3h)*&?DN9n;uv>bo$2@hP zV(7_4CZ9@!Go%38k=G~|OD-HF=2t($jB@%i#2l#ou%jvS((97AtPRiMuJVq>f+ zGP7uFsG^$y{CL>bm$nT!Ig(^bq0VJhlW7uqSZ(3vH+EKFA0dhQTKum^W$3TXj^30F%q@NvHGXDx%Kbq4fIm z{xjAcx(G7biUbG}+t}y=~pQl%13Z97t3S=-}Z!FsNJa!P3bb!XW4M?;rL z^~IA4$lRc#rrXd-WUYWoHh(mu@WqJx@Gg=x%UWGk6@yVZ?0ULT{b5SH zS~NyVf8njLGipw(Nn@t=W>eR*uAekn`>99!JC=%KJ|13J5p?c^46Xu}2Q~#3pIi+V z?YJY`>n!w9m%jo|Osd?ksW@CNn$6}zkV~6?SlX4dw*k!I6YyOv$az zBQBUv@3!$m9cc=;pj%AdAa~%qGM5smYEU1-wo