From 69b1763b6b396aa2873e26531f4ddb06535f333a Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:42:56 +0100 Subject: [PATCH 1/8] scout: fix manual cli bin install steps Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/scout/install.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/content/manuals/scout/install.md b/content/manuals/scout/install.md index eeb546ad4e5..078f5db791a 100644 --- a/content/manuals/scout/install.md +++ b/content/manuals/scout/install.md @@ -46,11 +46,16 @@ $ sh install-scout.sh ```json { "cliPluginsExtraDirs": [ - "$HOME/.docker/scout" + "/home//.docker/scout" ] } ``` + Substitute `` with your username on the system. + + > [!NOTE] + > The path for `cliPluginsExtraDirs` must be an absolute path. + {{< /tab >}} {{< tab name="macOS" >}} @@ -65,13 +70,13 @@ $ sh install-scout.sh 4. Make the binary executable: ```console - $ chmod +x $HOME/.docker/scout/docker-scout` + $ chmod +x $HOME/.docker/scout/docker-scout ``` 5. Authorize the binary to be executable on macOS: ```console - xattr -d com.apple.quarantine $HOME/.docker/scout/docker-scout`. + xattr -d com.apple.quarantine $HOME/.docker/scout/docker-scout. ``` 6. Add the `scout` subdirectory to your `.docker/config.json` as a plugin directory: @@ -79,11 +84,16 @@ $ sh install-scout.sh ```json { "cliPluginsExtraDirs": [ - "$HOME/.docker/scout" + "/Users//.docker/scout" ] } ``` + Substitute `` with your username on the system. + + > [!NOTE] + > The path for `cliPluginsExtraDirs` must be an absolute path. + {{< /tab >}} {{< tab name="Windows" >}} @@ -100,11 +110,16 @@ $ sh install-scout.sh ```json { "cliPluginsExtraDirs": [ - "C:\Users\MobyWhale\.docker\scout" + "C:\Users\\.docker\scout" ] } ``` + Substitute `` with your username on the system. + + > [!NOTE] + > The path for `cliPluginsExtraDirs` must be an absolute path. + {{< /tab >}} {{< /tabs >}} From 72786ec3977d057a83cbcd7ea65cdb0be638d317 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:17:57 +0100 Subject: [PATCH 2/8] storage: document how to set mount opts with --tmpfs Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/engine/storage/tmpfs.md | 63 +++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 5 deletions(-) diff --git a/content/manuals/engine/storage/tmpfs.md b/content/manuals/engine/storage/tmpfs.md index 299103c080f..5a8dc09e0d9 100644 --- a/content/manuals/engine/storage/tmpfs.md +++ b/content/manuals/engine/storage/tmpfs.md @@ -60,10 +60,67 @@ $ docker run --tmpfs ``` In general, `--mount` is preferred. The main difference is that the `--mount` -flag is more explicit and supports all the available options. +flag is more explicit. On the other hand, `--tmpfs` is less verbose and gives +you more flexibility as it lets you set more mount options. The `--tmpfs` flag cannot be used with swarm services. You must use `--mount`. +### Options for --tmpfs + +The `--tmpfs` flag consists of two fields, separated by a colon character +(`:`). + +```console +$ docker run --tmpfs [:opts] +``` + +The first field is the container path to mount into a tmpfs. The second field +is optional and lets you set mount options. Valid mount options for `--tmpfs` +include: + +| Option | Description | +| ------------ | ------------------------------------------------------------------------------------------- | +| `ro` | Creates a read-only tmpfs mount. | +| `rw` | Creates a read-write tmpfs mount (default behavior). | +| `nosuid` | Prevents `setuid` and `setgid` bits from being honored during execution. | +| `suid` | Allows `setuid` and `setgid` bits to be honored during execution (default behavior). | +| `nodev` | Device files can be created but are not functional (access results in an error). | +| `dev` | Device files can be created and are fully functional. | +| `exec` | Allows the execution of executable binaries in the mounted file system. | +| `noexec` | Does not allow the execution of executable binaries in the mounted file system. | +| `sync` | All I/O to the file system is done synchronously. | +| `async` | All I/O to the file system is done asynchronously (default behavior). | +| `dirsync` | Directory updates within the file system are done synchronously. | +| `atime` | Updates file access time each time the file is accessed. | +| `noatime` | Does not update file access times when the file is accessed. | +| `diratime` | Updates directory access times each time the directory is accessed. | +| `nodiratime` | Does not update directory access times when the directory is accessed. | +| `size` | Specifies the size of the tmpfs mount, for example, `size=64m`. | +| `mode` | Specifies the file mode (permissions) for the tmpfs mount (for example, `mode=1777`). | +| `uid` | Specifies the user ID for the owner of the tmpfs mount (for example, `uid=1000`). | +| `gid` | Specifies the group ID for the owner of the tmpfs mount (for example, `gid=1000`). | +| `nr_inodes` | Specifies the maximum number of inodes for the tmpfs mount (for example, `nr_inodes=400k`). | +| `nr_blocks` | Specifies the maximum number of blocks for the tmpfs mount (for example, `nr_blocks=1024`). | + +```console {title="Example"} +$ docker run --tmpfs /data:noexec,size=1024,mode=1777 +``` + +Not all tmpfs mount features available in the Linux mount command are supported +with the `--tmpfs` flag. If you require advanced tmpfs options or features, you +may need to use a privileged container or configure the mount outside of +Docker. + +> [!CAUTION] +> Running containers with `--privileged` grants elevated permissions and can +> expose the host system to security risks. Use this option only when +> absolutely necessary and in trusted environments. + +```console +$ docker run --privileged -it debian sh +/# mount -t tmpfs -o tmpfs /data +``` + ### Options for --mount The `--mount` flag consists of multiple key-value pairs, separated by commas @@ -86,10 +143,6 @@ Valid options for `--mount type=tmpfs` include: $ docker run --mount type=tmpfs,dst=/app,tmpfs-size=21474836480,tmpfs-mode=1770 ``` -### Options for --tmpfs - -The `--tmpfs` flag does not let you specify any options. - ## Use a tmpfs mount in a container To use a `tmpfs` mount in a container, use the `--tmpfs` flag, or use the From dc28d62ce654a6d3565e7f3789852a166b502d44 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:20:39 +0100 Subject: [PATCH 3/8] storage: use different formatting template when inspecting --tmpfs mount Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/engine/storage/tmpfs.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/content/manuals/engine/storage/tmpfs.md b/content/manuals/engine/storage/tmpfs.md index 5a8dc09e0d9..b4e186acb3d 100644 --- a/content/manuals/engine/storage/tmpfs.md +++ b/content/manuals/engine/storage/tmpfs.md @@ -162,6 +162,14 @@ $ docker run -d \ nginx:latest ``` +Verify that the mount is a `tmpfs` mount by looking in the `Mounts` section of +the `docker inspect` output: + +```console +$ docker inspect tmptest --format '{{ json .Mounts }}' +[{"Type":"tmpfs","Source":"","Destination":"/app","Mode":"","RW":true,"Propagation":""}] +``` + {{< /tab >}} {{< tab name="`--tmpfs`" >}} @@ -173,17 +181,17 @@ $ docker run -d \ nginx:latest ``` -{{< /tab >}} -{{< /tabs >}} - Verify that the mount is a `tmpfs` mount by looking in the `Mounts` section of the `docker inspect` output: ```console $ docker inspect tmptest --format '{{ json .Mounts }}' -[{"Type":"tmpfs","Source":"","Destination":"/app","Mode":"","RW":true,"Propagation":""}] +{"/app":""} ``` +{{< /tab >}} +{{< /tabs >}} + Stop and remove the container: ```console From a2e4fd55e19f59236546d98ddd68160e1339d003 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:12:19 +0100 Subject: [PATCH 4/8] vale: allow pluralized acronym initialization E.g., "Large Language Models (LLMs)" permits the use of "LLM" Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- _vale/Docker/Acronyms.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_vale/Docker/Acronyms.yml b/_vale/Docker/Acronyms.yml index 512319cdf37..9eb5e8b1442 100644 --- a/_vale/Docker/Acronyms.yml +++ b/_vale/Docker/Acronyms.yml @@ -5,7 +5,7 @@ level: warning ignorecase: false # Ensures that the existence of 'first' implies the existence of 'second'. first: '\b([A-Z]{2,5})\b' -second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{2,5})\)' +second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{2,5})s?\)' # ... with the exception of these: exceptions: - AGPL From d20098222d11464e4c8b73db4735fcd3852ec5a7 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Fri, 29 Nov 2024 16:14:12 +0100 Subject: [PATCH 5/8] vale: add "anonymize" to vocabulary Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- _vale/config/vocabularies/Docker/accept.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/_vale/config/vocabularies/Docker/accept.txt b/_vale/config/vocabularies/Docker/accept.txt index 205fcac3ab8..6caaf6f20c1 100644 --- a/_vale/config/vocabularies/Docker/accept.txt +++ b/_vale/config/vocabularies/Docker/accept.txt @@ -97,6 +97,7 @@ Windows WireMock Zscaler Zsh +[Aa]nonymized? [Aa]utobuild [Aa]llowlist [Bb]uildpack(s)? From d06f88b5a9b06861af5f8e0f64f6637a92e8489b Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:57:49 +0100 Subject: [PATCH 6/8] desktop: add ask gordon page Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/desktop/features/gordon.md | 292 ++++++++++++++++++ .../manuals/desktop/images/gordon-run-ctr.png | Bin 0 -> 17006 bytes 2 files changed, 292 insertions(+) create mode 100644 content/manuals/desktop/features/gordon.md create mode 100644 content/manuals/desktop/images/gordon-run-ctr.png diff --git a/content/manuals/desktop/features/gordon.md b/content/manuals/desktop/features/gordon.md new file mode 100644 index 00000000000..469a9ac6ee6 --- /dev/null +++ b/content/manuals/desktop/features/gordon.md @@ -0,0 +1,292 @@ +--- +title: Ask Gordon +description: Learn how to streamline your workflow with Docker's AI-powered assistant. +weight: 10 +params: + sidebar: + badge: + color: blue + text: Beta +--- + +{{% restricted title=Beta %}} +Ask Gordon is a [Beta](/manuals/release-lifecycle.md) feature, and only members +of the Ask Gordon beta program can access it. Features, user interface, and +behavior are subject to change in future releases. + +{{< button text="Apply for access" url="https://docker.qualtrics.com/jfe/form/SV_dmVHFjQ4fZlrEOy" >}} +{{% /restricted %}} + +Ask Gordon is your personal AI assistant embedded in Docker Desktop and the +Docker CLI. It's designed to streamline your workflow and help you make the +most of the Docker ecosystem. + +## What is Ask Gordon? + +Ask Gordon is a suite of AI-powered capabilities integrated into Docker's +tools. These features, currently in Beta, are not enabled by default, and are +not production-ready. You may also encounter the term "Docker AI" as a broader +reference to this technology. + +The goal of Ask Gordon is to make Docker's tools for managing images and +containers more intuitive and accessible. It provides contextual assistance +tailored to your local environment, including Dockerfiles, containers, and +applications. + +Ask Gordon integrates directly with Docker's tools to help you perform specific +tasks. It understands your local setup, such as your local source code and +images. For example, you can ask Gordon to help you identify vulnerabilities in +your project or how to optimize a Dockerfile in your local repository. This +tight integration ensures responses are practical and actionable. + +> [!NOTE] +> Ask Gordon is powered by Large Language Models (LLMs). Like all LLM-based +> tools, its responses may sometimes be inaccurate. Always verify the +> information provided. + +### What data does Gordon access? + +When you use Ask Gordon, the data it accesses depends on the context of your +query: + +- Local files: If you use the `docker ai` command, Ask Gordon can access + files and directories in the current working directory where the command is + executed. In Docker Desktop, if you ask about a specific file or directory in + the **Ask Gordon** view, you'll be prompted to select the relevant context. +- Local images: Gordon integrates with Docker Desktop and can view all images + in your local image store. This includes images you've built or pulled from a + registry. + +To provide accurate responses, Ask Gordon may send relevant files, directories, +or image metadata to the Gordon backend along with your query. This data +transfer occurs over the network but is never stored persistently or shared +with third parties. It is used exclusively to process your request and +formulate a response. + +All data transferred is encrypted in transit. + +### How your data is collected and used + +Docker collects anonymized data from your interactions with Ask Gordon to +enhance the service. This includes the following: + +- Your queries: Questions you ask Gordon. +- Responses: Answers provided by Gordon. +- Feedback: Thumbs-up and thumbs-down ratings. + +To ensure privacy and security: + +- Data is anonymized and cannot be traced back to you or your account. +- Docker does not use this data to train AI models or share it with third + parties. + +By using Ask Gordon, you help improve Docker AI's reliability and accuracy, +making it more effective for all users. + +If you have concerns about data collection or usage, you can +[disable](#disable-ask-gordon) the feature at any time. + +## Setup + +To use this feature, you must have: + +- [Access to the Ask Gordon beta program](https://docker.qualtrics.com/jfe/form/SV_dmVHFjQ4fZlrEOy). + +- Docker Desktop version 4.37 or later. + +Ask Gordon is not enabled by default. After having received access to the beta +program, you must enable the feature: + +1. [Sign in](#sign-in) to your Docker account. +2. [Enable the feature](#enable-the-feature) in the Docker Desktop settings. +3. [Accept the terms of service](#accept-the-terms-of-service). + +### Sign in + +1. Open Docker Desktop. +2. Select the **Sign in** button. +3. Complete the sign-in process in your web browser. + +### Enable the feature + +After signing in to your Docker Account, enable the Docker AI feature: + +1. Open the **Settings** view in Docker Desktop. +2. Navigate to **Features in development**. +3. Check the **Enable Docker AI** checkbox. +4. Select **Apply & restart**. + +### Accept the terms of service + +To start using Docker AI, you need to accept the terms of service. You can do +this in one of two ways: + +- Open the **Ask Gordon** view in Docker Desktop and ask a question. +- Use the `docker ai` CLI command to issue a query. + +The first time you interact with Docker AI, you'll see a prompt to accept the +terms of service. For example: + +```console +$ docker ai what can you do? + + Before using Gordon, please accept the terms of service +``` + +After accepting the terms, you can begin using Ask Gordon. + +## Using Ask Gordon + +The primary interfaces to Docker's AI capabilities are through the **Ask +Gordon** view in Docker Desktop, or if you prefer to use the CLI: the `docker +ai` CLI command. + +If you've used an AI chatbot before, these interfaces will be pretty familiar +to you. You can chat with the Docker AI to get help with your Docker tasks. + +### Contextual help + +Once you've enabled the Docker AI features, you'll also find references to +**Ask Gordon** in various other places throughout the Docker Desktop user +interface. Whenever you encounter a button with the "sparkles" (✨) icon in the +user interface, you can use the button to get contextual support from Ask +Gordon. + +## Example workflows + +Ask Gordon is a general-purpose AI assistant created to help you with all your +Docker-related tasks and workflows. If you need some inspiration, here are a +few ways things you can try: + +- [Troubleshoot a crashed container](#troubleshoot-a-crashed-container) +- [Get help with running a container](#get-help-with-running-a-container) +- [Improve a Dockerfile](#improve-a-dockerfile) + +For more examples, try asking Gordon directly. For example: + +```console +$ docker ai "What can you do?" +``` + +### Troubleshoot a crashed container + +If you try to start a container with an invalid configuration or command, you +can use Ask Gordon to troubleshoot the error. For example, try starting a +Postgres container without specifying a database password: + +```console +$ docker run postgres +Error: Database is uninitialized and superuser password is not specified. + You must specify POSTGRES_PASSWORD to a non-empty value for the + superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run". + + You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all + connections without a password. This is *not* recommended. + + See PostgreSQL documentation about "trust": + https://www.postgresql.org/docs/current/auth-trust.html +``` + +In the **Containers** view in Docker Desktop, select the ✨ icon next to the +container's name, or inspect the container and open the **Ask Gordon** tab. + +### Get help with running a container + +If you want to run a specific image but you're not sure how, Gordon might be +able to help you get set up: + +1. Pull an image from Docker Hub (for example, `postgres`). +2. Open the **Images** view in Docker Desktop and select the image. +3. Select the **Run** button. + +In the _Run a new container_ dialog that opens, you should see a message about +**Ask Gordon**. + +![Ask Gordon hint in Docker Desktop](../images/gordon-run-ctr.png) + +The linked text in the hint is a suggested prompt to start a conversation with +Ask Gordon. + +### Improve a Dockerfile + +Gordon can analyze your Dockerfile and suggest improvements. To have Gordon +evaluate your Dockerfile using the `docker ai` command: + +1. Navigate to your project directory: + + ```console + $ cd path/to/my/project + ``` + +2. Use the `docker ai` command to rate your Dockerfile: + + ```console + $ docker ai rate my Dockerfile + ``` + +Gordon will analyze your Dockerfile and identify opportunities for improvement +across several dimensions: + +- Build cache optimization +- Security +- Image size efficiency +- Best practices compliance +- Maintainability +- Reproducibility +- Portability +- Resource efficiency + +## Disable Ask Gordon + +If you've enabled Ask Gordon and you want to disable it again: + +1. Open the **Settings** view in Docker Desktop. +2. Navigate to **Features in development**. +3. Clear the **Enable Docker AI** checkbox. +4. Select **Apply & restart**. + +If you want to disable Ask Gordon for your entire Docker organization, using +[Settings Management](/manuals/security/for-admins/hardened-desktop/settings-management/_index.md), +add the following property to your `admin-settings.json` file: + +```json +{ + "enableDockerAI": { + "value": false, + "locked": true + } +} +``` + +Alternatively, you can disable all Beta features by setting `allowBetaFeatures` to false: + +```json +{ + "allowBetaFeatures": { + "value": false, + "locked": true + } +} +``` + +## Feedback + + + +We value your input on Ask Gordon and encourage you to share your experience. +Your feedback helps us improve and refine Ask Gordon for all users. If you +encounter issues, have suggestions, or simply want to share what you like, +here's how you can get in touch: + +- Thumbs-up and thumbs-down buttons + + Rate Ask Gordon's responses using the thumbs-up or thumbs-down buttons in the + response. + +- Feedback survey + + You can access the Ask Gordon survey by following the _Give feedback_ link in + the **Ask Gordon** view in Docker Desktop, or from the CLI by running the + `docker ai feedback` command. + +Thank you for helping us improve Ask Gordon. diff --git a/content/manuals/desktop/images/gordon-run-ctr.png b/content/manuals/desktop/images/gordon-run-ctr.png new file mode 100644 index 0000000000000000000000000000000000000000..5369a82a7b08082e2b34edd9e546f36a5c074357 GIT binary patch literal 17006 zcmch2rfZ7xVr_1hfA;kK|+w=9^4Wdcaji-209QV z!9oHAU-I3Vo!{>4%$YrB_xH!U{qDV0_3A!3Rk!L>9j~LULWEC)4}n04)KnF9ArKq@ z0>K;tux>|WE|Ms3JLfu@`byY1xHmU9*VosVmsb}T7iVYZCx32EPfw4JkAMC8wRd#= z^XJjQ!QuY?!QTG<=HB)0-ro1`-#0h6zOJv&u3fEsSzTOQ8kxVG`~3O+hmT#;7n4)d zvpv@zyRSya#@}~d4h@e?x19|P4%H2wk2jyZ>+2tB_&rp2)ZNqDUwu&6b=Ft0*V5MB z`}%v+o0hERKb=Ke^$ksJFTb_quUA#qzIlO;sXT4SUVU9&*^u?6{`pE>=5kH?(yQXq zm#>N|pUnppp5*4gEKB^9m6KZ>`@ucuIP-bV%c!Z;^vt~Qi5DTG{+ZQ&nN?4o{Z33y z&3ZcQlU5Ozkeum1;GI$$6PJ+gi%RwGb5AIY1Y-?ij-GkGOY!JUcJFnG$qNaKNO0+L zh|E$8JqipCjd5rXcpBm#7|a!OV;hpj9eo{X)65-t;o}#`9rh>Gs?pus*U~S6C+HVX z;32R7{!_DBUf*3OR}V9fC|<7}f8%O)-xXiON?!MGwvI0B-t$H-p+5TMd@f%(oeub% z)}Gio>Nx~j+1R`5l(M=`@!2i%+syM>&zU1_AKLivBWIZ%2kET$_$)s-slPNcM`|HG zjV$c=&8KLdeCIcvV7Bg1Gj}mCdCYG#Vyl?TZ!q{oKIf5v3IC%$8sjM?LmNw(=Wx@q zhq?y*THVz80~!x?%_P(KRa#Xvb@&w2}$1d=AsT~;TGbe z3=$*rVBz3p>j7CkD5KX6c$zN=Ch%BX9?!sR z43T~6GdF>qj&CFG*_B;2F8x*z50`aWWDFulym|`w!?D$)8`>lxwi7>29)Ocva-u&z zLwk*}E6P`58(1Afx-cmkkF#v(;k(1{`Q&(=)AtCG8o65GPNq#S;rSVEWUq2xPS^t( ze;BdH7SfkvXPD$3AOHY)bS@8Iz$p;#J{te?D+feFp$IrOsPivfB1`}t4*h@FTn}9KKm4&mW3*W#!)C@MiVk&cXFx93Hg3s%S7MFMzpz^2;)&p`HfNlJ{{qD z_r&3e-SQqj9;7U50hi@ZB^?9d^#kjX=#>Lu#%JpRr{DIk9uO7XkGkYwDb9}(*sT+Y zR?J+5=I-O`sVa656kQojP>?-hP}rV=m9r^kK7)3u3|7Hq@#9A>pq=(C*~$hl5KLog zKr(lfU_S*}+9_Nldy0?^p{*4+@)6oef}1Qu=H-M?w1}B`z})z=A~o)ks3=Gobt_aG z;qWqB{$B{~S;YS5vnXiU%e2FPqwj6L&Y2G9a0S{zByz51H+~_%R=n@XakkKZwC&+d z-V+Ip;S|cbQb7{ks5a=hD~^BDr4PlLU*BX~v;bC!gco?o%ZTBJg1VL>7{8Alf060@ zoeBl$uf|}}w6P7;*nK9}jNF!9q=>yXDRMWr;@VgNpUb=UjdNx2?z#CZ&T!O3HPj1> zyk`@dTQ_JU?yL8QV zxfOA<$KM;UyPb#Cx}cnx0sKM%--+#+ye_-%Yx2ny%=taq{Hw(#yg8aJk&q3Q3Ezcm z4`^Wu%o;=1q>16-%JlK%E#?GsxlWR}P`WkwqH+?-VPj{$If6D{+eg?b*A33Gb;(gk z$WUM|=+jK+s;;6w@rWv4LO4f4?-6lIWt6ubJ8>ED=GRR&T=M6_22p*QxO!JucZ3ZL zO8D$_@H4&{jBAi#?qISu?+4i&ky>Ohu4WrHE8uTTT$IwkW!Jr8n$&RJMI20E^2XhZ zw$YN!6TnPqeIa0W`2d1dG%D9_545P+-tosl<9Qg|DYB!7%s=Hn7{eq!=aVxAb-d}r z_tl%-A$$Bbug;;W%YetKqRpcyy|nH&V!1B7L$hXh_#TGwGiuP3oR?=8ARxDcy4^>D zb}$iYz@Mb(sO7y4?kgwpPq2I`tI09=Z{;*;+)+xtgB7d`FV3{OV=?&dYW>_gr3bg? zy>QvPfxD5y8Y%0o=i(5m_z_njoiB`QKN3gUiRLo)51iIwGy<Q2*z@r4bF;wBi10XoI%VL?cI*PEvl~herq@uhaPuXquo$_OdEpJ|cuO(EFYg_an&1j0;i^-i23TdVq7$0I%81 z2%P7IK!nFQ9&>o%rhx!8a7v8)QhHR`E(IPdm!ON!5`_Ta>p8JMM~(_>ZtJu~4kYh% z6!*RLp3YoY9i+%F;(wJ$`K86=DENHf6%{sVQECx3Hf}aP-&YoZI$sF%BU@hXyjva~ zWldQw2iJpTXtc^@X=1>!={hM`QUx!|)7Kv+t9&)L4)}P*);GM~w$a~n;eD|4Wv%0< zD8Y-y5x$MRyvzZcmCS&o{!L@HodI|~v`kU)IbCMa~35+F>XYUTsoK65?C^pK@RQF?GNDZM&!@q$z<^I3n8q-c8u?`O%}V_%QS z@mbodQ&l>}|5Wwc86c4R9694u0X@H!+|LhZk)xsp)r;7pG-3~p2Z)d~v?%m5I)^HE zg+I@;w?EWkGb*P?#R^Mg+?gRu&MIQpJ0pIq-Ez6TgLpIC=U*kP)3SW27YybHYb98MZb*<=^Wtwn;Zp{r8f#N2_l8!yb^FA- zhcBi&9{jGrQo0JFeWGv=^iyb=tVYf=6XL}Kh*NRZh_}DUVy={j}cOZnN7l?Tfy_Qww+$K!L9g# zc4*JRDRQ!SLu(3^qP+tsAc`YrF@7Vgnal=?*ttMNmk5BFw(3XZFA!K$N` z?fq=I19&XtMFGj88ymRJ_3r!mRZ@&o-ot(fQdPAXI#rM>VaIZ-tJ0#N21GjJ>ATBL%`hf3WhD&3Kp%s4(2sfTp0-odbf>4$CWkNU-@fvzOdV^}iX9qWBt zzS<^B>-u}GA|)*wH@^P)HCvf&`Rxm)qpuBDe}Yi2oY3#8_|AM2s@LlAFbbf#WL zygkb^T2%GDD!Sz)?jx5T&k8)`SCRekG38%Ey?JuvsF920meNKd!^o|+Vfdo}@iUUX zx$!@d?sHtJB_dwI92b;l^KpDg?=TBi_&XU{@HT=d1DMDnW% z(KC`*>8_vIi$6tgo+H;;y1l7=_w?J|xfkYszG*=0hK2{m=oBI*&3>*N3>@5nBr+iO z&xGw8!a`*b0EX4Af&KHw*5eRP<9-3aAv}7(G3V~j+Mjh9holIIaTAoQ_avo`S!IVA zgfzIo^@As=)fOH}{Uvn-I<_7@;QHd3$qYgvSupTC7R4Zp03aqnQK()0$GG z&MsBT;_<3s_2hT#5i)R%t@3?F91QsU|SyPJZUzLdA{`vFTH+^uIjE2z>^1H)yc&urTI=wV( zlETHLkBY`!XmPlx?4(~KGQ~$IDPqUj)D+D()3k87AD)CWGd${J5ejSazu`*}x^+r# z-c3_r=^5i0K06fg%Q8fXBJ)HZns%6iQTjote9>C4=xFJN9AyBN`9*y4O-YpVoX395 zR;$3OzvnPZNms)W%JU?adN+I>f+Y9fQkfyE%>;GEx?gB;+&l4(gV>fiRArK-a(x|7 zU8h2=%2nK4UGMG0mR-QHFRg>Ladd?r_i3+0Nw+J77him0wr%_vKhuce5G7B2-WfXkk znh~h%5f#251gGMqHkY$FVxFAS9+kqs;syvt zO2_+NR(PRnPILW}CHIlAX4}|j@)Bn$FF2#h`pebKk8yHRRHikTGn`*T;* zGx&Mnbu=iLZ!mY`U4qsmLX|mkIl;M(A7VOtqM&JUF&@ZjqjB&7 z0}+$DPDxaB?5vKK2D2^s7i3q%KG-%7_1?sI81J|h(G*kEiIreh#Oty*Z@hMgwz}cM z9R0&Rnty7zYAL2=5aux&L9?Lr;3yResTVV~nE!e7;*{=IY8D|{A7Lg&0ypQ&h>bdx zbbt@U#HrsK;@d;Mj@Oo%dl0MKQ6l%{5p^nOv>vpDv<}9jSpGU?`Ge*o193g4V!y&? z2Y`6)V(s?xYS{EiW(W0Cc?F8TOXuq!pSLf)S?SsYfGt+(3B;eEJB7r*)qvNBhG~&T zdC2`W-wjyPs^Bjvd=`YT6yBdSHmBebm_EWnUbQm(E&kmnT0X?E$mg+BLl1O_owu+( z5IDFMmG>8uQxshR(i$wziAz*8q4hnXwnEEx^zGM@g@cxk_J*cV=gU52K**j#sOM%4 zqVaWp#B{dyV(WiMwI$7s%QeQd*tb-e-|P)P%+S{9`3VWI!@N6IiwpQxP2h3Ave(88 zV(KjAgGJd36)@q-S+V()F|GZT4%|xr1zlv`a>v~g*O-bfD{AFYDJiQkZTb}bN%vmM z^F1!}{CKtuwYJ}eOIfTvzI;{4-m)SmpRy{4KSCSrwhF4TW)xEj0quExoM2(i=>aes z9Oyx(@Q2+E-*tf(uxBI=#REC#L?5B82aRxt1wqROXQ2p>u~(CtH)H^RIppv$#?8b( zGhw+XJWx1@#lOW{;oL?lnT}octlrz}Rv0UVHoUt>1!c*evYrJ&@0n+uLK$-8Z##F; zmvy(#zn@%q#B=!wmT$@U_Jut)-7ujST^kH2r zcJ{O#x+r9qy51felKhs%Qk3Dg`Q> zrO8{RL7)D=4O#pbBO=#3d(sd#2{TJ!a8m4@wCf<$!Vkl)lYyit2pW*rY6^5|g)f}< z!+oHb^&cq-iVgW^>{YFhg(XF zR8)N6CP5Lw0$*lk63b>vl>h~2mvHmUBe3Di*7N&_KensaCKR|RiIlf#Dv>b0ekQtv z!ChV;5#~LKilFo#q%@>7+$rmrlDTS{G&D4F72JzRer@HM{5%<&dTG(8G&~Y5DIV*Y z-L-K>aZQ~;$P_H7O%W+;G-Ui!p<*xs4HX(1qed`4QIF5jP99dAID9Rd)c7QJhNH10 zx#y#*gXaJ@TT&xt>`aCAcC%`^4&BcLJnNcw@LAM{DRQ}=;)o$*Y6J&Ql>UX4 zP+Uc<%TXzSa^x@t9*p|}vufh?Ubc(zUztpyBEpa?vItw#87J30hA zC}|TT@RmcJT{~!D-2KEmVk2b zkup%SSGm#@TQak-rVl8*`<4>BPpe1Ict51-Fad8JiioGruT^OgOnc@7l$2{H(>OVa zr|}lYWO85HEp`;2@0Ga98KpFer&>ZUSca>E&><==XCCGqop}=Q7MVq#kXXBWLz=zO@1vs(eT{siDlqIk_;R9{n%!B z{_>~pGIz7>alVty@144?S5FR-O!RS!IWASSfe0%A4x`Od`GSu@8o9*7(>`g|(4daA zC3k6kvnu0a-SXT3e<^%2TC3MfNfV3cg?)8Y9RO!}!ns}?jx{^{L|FF20FZ;!Ecb=(zjA5!eYVP>CBA;A0w zrBk#LIk+B_@b-}ncdTS(d%{d5-o>5n&s4&K-*gXPJsghNAD?MLaHhXuUjmvtQ@fu# z8iZJR%}*%R$8FQHKXN#2UFufKqwk-4jp5D;0hb!EMvjI}X%*h1m$dg4M$s3!Y&|#Mke1Qymsi&V<0c)#fz7Hx^EDrrL5t7!H`HJAvOX*<3 z@XtSB;0ctsHUFNukI|sm2LZQq{7n|~XZHn2m>T?%>|K{V3aZ)>njn^yjy1hRRF72+ zNp@pT`drQzs)0mna!?)Vt8RM!%S+fh;uB7h5PfLV!<+5H-al=|xL>}f4&T8fy~ZyZ z-aXvGh~J>;d^36U=w7#!5G4lZxRM&yiqgwr;)%yukH|nFtf-n1gw=wBX57%*mb^9t z0t7}6I{Dsq>00*vJJ| zYbN>mSc7zf?^Ygn!8#G19UI-pIOv0f@d1$F`JJzKDvLkHN=nKE`rok$Tj&a-{PbLa zaLsZ94-O@i$9`n9&_xgl6i-I3QQAlI>YC(_Z8l8$o$O@0wl+02snRx(x?m@|)_lOm zOg|-GzCXos9Vj~dHUIk*7Vc1ve>(ZdGiqUtxQf_0i+DfR0|VNSGD`0IJ71WI;r9=1 z0Y;mWl&LhG>4wwvkRS`yz%0q~yPg9B%6TVvHm8>O%I|@PFv9Yq#Cc^|SwjAR*hY97 zHMHtx9-c_1PW$2gdnje^$c7!@==SQl0#)9bv>$NF1oFSLQ3;d)3wGOrt+~yJx*wa$ zSfiMWNuibQrH^H56!Y_BQ6Cv{9^PtVy&?=OL?mWSH+zJ!%(4r_{c)0^y06<1tth-x zyj#XDX=Wp!&Cg$0S)9ihbFW#aJcMcOSMb6kT?I}SdU_({&qPhP*wmQtLiu*7Ww!&l zU_6vBk;hZU_XjY#cP?X@Grhz}5?0;DQ`%ml3C`A}1L$jd90BIrD_^WbztH2|^@mg+ z_ZDSz7YDbhd!$*;b*;)#B`=9CH6C{^+OvMWF4u_ zbtV&=6u~=sDOX8_SjDVS?{T|}a6qSi_6DjQ(o#}l8XO#vMweamh+GVMoT3j3$-rkq z#0#JOPmmx}07W za!{;TtUwU{Q!Mafu+V;WwueRM6R8%*30P{3~s!gaSX$WQn+1o90 zr8B3|=Mj(KAaUpn5tJC|zLQ#OAy!cW@1_vMup=DPYMSKSfNnZ)0jMd4`+W*A@>*Z0xT8?LeYqCfP7-`rlVgEpM z?mg5CSm=Ku%F#`Vsx5()9@ASHXuawgFTBnjo^zpra8X)K4i1|W38;sg%fzNC-&xa# zP$U63i)?G1Dq#|&FFa0<*jSAP3s|tN{NuAdfzMy*Ts`aP5MRFC8Vz1cn$Xz6py4sDu-bjVyfmsMNJAc)u>92{mz4@X0<^;e91$tZ z=+H2Ea9@xi9P$#pF(uTY|FisFg`V?MKO?)76Bo}FA{9+@@3I0F2vE-EH9RHn9r14b|O7{QliUfYGx0gCtVx5pTMO%7}hX zY#4YW_eLjOUZ(0Is&G1_X^d<{_}JL3ucJa;Wv`gce=~MYlp1gNJejcmk2zwEVmg7S z&y^G_4pyh9~9f_F>vfQ}Xh6kJ6 zv!|+GWR%iUAqn1*Q>A{NV63i`shXYg)XrX{e7w;`^7G2ng9WEkW-j1q?bP;%Y`8(5 zSsDb-wLK#lIA{S@8-{%>oFAucnin*xB)MK$#_3FF_QFCd8&CC-XPJ$$zJ?e6FD_CV zT}GN}`gzLxXr2*}T3k-dKQycHH13{sk+nUhv3{5!Y^`vm3d+E8!!>^|=LmJqa~swv zQ2|&2U?J^LI1+QN=IH1>R>Lb9=`qjL#MvR$caQ*8?k8{wLiG1^(sqnEP>771;9G-r zXJ5=X98y$Wy;OxI2fXUyQTkAW1H6lV-bL3+fud2koZuhapituV`h2{N(RmKY9D|{gH1}507H| z@z+UQr7ho+Eu4Y})~2A*((VF#=b~*3i7B}I{zrA<4b`}7(8=Z9D>-l&O0Fbqrg5Oi zZ+Y~Uv^myl&xsCCMw@e|Pjj4U!$LyOnQ1^k7l~VNzkX=Bu$*1XJZ&GD6RqBEONx3p zTSFvlz9be-%J-2RYhAb0sXyL9W=I`$IQtmK;YJft`~v634_zvI#fFH#isK78G~rBF zo=ks3o5R4oiYpWy(;5+o4i#DlU+RN-rb~G z&c60jdhT1z=b!z0%*m2Z<6vCochRM$b=C`)ZB`Q6z=|^PchOPm6h12p0*~8pyWcIV zUAM@^#xiS0ghtdlG^}sstl-54i@jc+vn8UJ-Y(s^6iC)NmHNm#I86AO7x~Jn+w$S3a)2tXHn%6kkBgT5&M~0 zk&KrM&cr)BVA|xZ>!zrXGd|VuE7#7NHK`@cy7Dr>Lv^n5X-K+ITT9RQEUaYGL)?mbSzo@1jK z_AM9a4M0e+5&&DYC|?Outc{Q`e97jYCsH}07Uogxry>d77#hT+1yR`sOp7)W9g*V9 zKmqF?>Bt%L81Anix*tG=%p1a`JC8H00qz_EIn`fI@h%VKanmpi8fxU`m4(}nnfIsV zw_$!|i203k!inr|mPVE?Qn}Z3t*Y`ge{bc;WLUT!2~{4+D)K0rwD<}6eUAjo0A#TPtrx{~&* zNY1LJt;0kzx2JVcHHHy^kNtZ%KRmis^s7p23vD2Ia+ba=zB4{3ed2b$Gm66wYbKfb z&ZV#}k(I~9%h;`sFSs>@ja2!}72=5q?j-}&*L_^xGwC&jd%T2qhY{Yt$lq#UmBk02 zF@R`Vf2`|N++o@V(K~2Af%Tshe9BN=sxP=ub!Y#g*If&+nme@Wn2pk*Lei>FlnHos zVY}E+Q9(6)kdpFxYo=W(lmZyfDeyABA5C4UPM{&nKy#m^m?9JA@??S)2gQ@+C`2@H zq6y7Ykd{&I3yR@uvKYy z9@VDDQvuDw*7I{w284U>x>?2?ri%|YNCz6s-Rfd!C7eV`s6hFV-vO2Laso*@n>fP<+z zhVay*oNm@8UQOaZSxKvQ%`q7@yx}dG?EMF8&0-mP!_zjien*}ae*ACD?6l8W&6GO2(#TcE^CK{ zmkwzU6_FzAG-uB{}wMt85N~2yY@lxQQ1@V7~WpcMNmll3} zb+JI^B836|reQGuC?HM?;pVrf;q5E5jPs59R8XsOh)RQ(8bM80O(O(u^ChdNp)Kf; z;$pdWTy7Hi09qAh=RpBKjeKj7c6S>gXvxMS*;>*L$)wU>YDvwi(KC{A(&{_8GDL`0 zA@dwCm5YY$h?@RQD|Qisq#zb{ZUcdNiZ$HlD`<7SyPAaIi6p8ti2c)YRHPW)3Qe(#WdU8Vmpr z!-&!M?SCF{xOL}v=byDbpa%t>e&Z?lF82rd-ZTH~wfLxi?Kk@r;hWBKX87zWLCTwk zMw(cix4rq^`CHYw#OR^rBQ5xBC@=R{H`C-#w(NM8=CKR;1LLL27K-Xx^yCOvBSn_g zOP>%RDnV89F2XhIv1ejoNm}8M0drGReO2YSUt1GXlb=wq`lpiaxJm{>M2^FTqUJZ4 z?^=o(BdBv##hrf9%Fjk4V;i&*x6!)3w8Y)P^kN0Z*GcNAO@?T3W^!Ao9x9AM$nu&2&q z_%yiZ(QIo(%KOvESvxhGB^nLOR@bQCoLyocVuCeEs$}=yS@}R(h21jK_6SLu=pC63 zrP8#A7(3c#&VOF(JoO+AV)d5?&VH2*^Wvdb=BKP=ZDUyZ3(&S^U@G)0BPcLZFTzaZ zKWJQFPE>hT)yi>SQxMJq1{^}azf9BQWG*Wbt}!F!+%V^Cgt34iw5@6*<#$TA=>kP- z%~W$kZ%2CVY@kOflnep66^IGDC4t=X-|pG|f*$bT5JbQ<^!j#F_wp(5_VF!(;^70Z z2EdR$hFaWqT(WLAcK-pNDu4k+Aa1b?|FP(QPjc!pl?2IY{Y6cHrq;u>TAZ@u0q<$z zg*$cyY(tw^un!$5!H*=!ujwWj0$SN`8Dzj3JdBEKyXh1YvILX_@h?LKU3pSvQW5M3 z1&zEQ4d=CGc1LHQ#1lhVIXw-tnXeShe=xA|u=RE|@j9q&%|CL>O#8I2f14&Dwh#5u zWl+fJq<0^Fr{C?{xxQdB7X>l}w1AY5Im!gG){-Zf4d?cU@?>3J5|X=Yxf zc^|Be`?~#;MT}M%gMbQ^7l9Yk&`8>7^bl+Mg4CJc8Wa%y!N~~Md{!@ZE80Y|c$SWG zQ{wAJER=Xs3e19Z=qC1?o};HcFjw8rzuffE zrVKyxcUK4ft-eGLPJoW39e&yTi5@#sH=}d=Ph{t{58C+SJp3-&8EckTZ#YpZ{w+rC zWllC=>{7=UljO~93XC7AxDoy^6tVv4RDX&)McU@R(7oZ2&|f%n6lw_djV>bzrdl2K zZ1(WXkgaM%_s_Cg;XbVo$(--W$Q4V3T7Yh>c&b0poSq4SsZBrb>ngs3rfF^Lh^jO7 zdM+{TcRm*t(9Sm>@fB3#`Djd}sLW*|B8ye|tJ1a-kw*=a!cGXIwW=N()j&H-KC~;I0<9gf|F!c57<#JBfhRH;^avsC{9<~fi6rB z>(io?Bz{s1J}W4uotXG6zu=j!j6C`M#YseE5c8cBMekJo&*k+1Ce8j`cVCi1Oj1Od z;I6@=d+P(O)31S^t--D7N%lQ?+%UMx;H+hGGylLJH+!fvO@iaPU;CsmH#zv%t+D_K)lT4sXrg-ILu)Cnt8 zMmUPsh*FZ2M@1ngEba66M@&&`q9_#Ro$+`*bLgv60`KZs9t15HgwBpAikvBAFfKKc3m{S{ z_7WC25wC1j8}Xvfi9r~HDT|XfNA#18gLM@&9zPktz6X9qrJt%3s|cSRElTDme)bU( zte&$mtp=}SwIT#~BR&Y2#^|`TE_(pu9_*d?BH8ff__5+_`RY&VwULMTetbi>DJS15 z4E<{Y5Q}3w@2p=OdIB@udGX0fsMZ9v<{=ErM?A(HM4sG1NhkHgdE``lvUSXG&}-Wy zJ{dYdfpz%A&;I3AlZLM*f;!t&BWi&MF6?-Sa9~xq`Xz6#o<2ICbvhP*(2Qi(OmDPdY&WmH8$>p$p z$A-@)yN`*b(&pWD7OH)S*jtl=yRFx9~eSp_(#fkxZz**pQ`AUF# ziGSoQXxSp%kP?JVC8jxQvcaTT}0pbaJ<3?nScHw$>}MT2m3DdEo50NFAE?MJ;zoG@V))NyY3 z3umMD@9HK(YM<`FK&~wwSBwQ`6+`)LnXq`wQH@h>eM}b|X9^iC3e&J(`N^0+`->{_ zGvYoxBwCHt*>9p8AYrq0NHB7j#YwHC#nocNLd$xo)Xu5?fVMkJyAiXdehecFR2gYr zVHkgwcbxa|$fAGvIuSeXlp(0^#g^d~r$q2uHSe_q3M-D#>B+jlm5fmvSgKzH`~@NSmKludDGD&}dubxUmJx9%4tl(_+qza7=!hc~eU>ly-$}fV@7?!L`XC3z zvC6@qb><#5myS%G!kQ1v!APSJOGmV-%d$66e7LiTEw$TJ zeSlS(|4-dkH1v?+7B^HkeG94hR}7JZ{A~{4)!Fy5#Ar+A{}kBtZ#w>?=zpQ6I(6cj92Ee4>Esr3C4nQnAG!ic2dyzX8_xF^Ar!j1#`PR6!n-qmjbr_Z673{EuG ze6`tp$%2!dUxw|q5I{f$GKt!lpD0N%`R@qP?Z}9t-OfVN76AY2<-@UW{ry|7|Mmc( zw|juwoxtruhWP8eBY;~s{?=2!J@Edw#2)9+lfN_T45;b9+=3*?(_0`mc$*TEX1|r0 z6a>ir6*cq#WdA$wNrEQ5y&!T~;ZMq6vVC|BIbyB#3Asg!!iB#NOA7$EOpdtW2BQ}H zGn;iPPV9ui*qtIx&x`pBs2>3LpoQ<&IkGI}PC~!8DgNv^VAuE#LjRn?yQkDm7lSji zeGZ%q6>^9ptt@nzhE1%)q1Q;G57jfKL9INs(@p@1)`kSTkSE?diidwPp_o4jkn&th zY3d!pdNZ9a7*P3{ zXQRCZg_>eA@nvN)wGWJy=YXGD?Is59r;GBoq1wb#t!4_Eh5>ajG%l&}SuSl{!i;K4i~_KbENf6s53z8D<6~ zFEm3>!k3N(^dx-s*cLVMxdMZ58pH92B z_z&4+&^*1vS2#ZFj=03>k@+nZ{uf6y`GE2>>p?z@>D^~DR0QbUJ35~Rj9zgXSXo++ zu0bi+tXM2r8KzaW)?(St;Us9H)R&fH|9zcm^VdA9D-3kcSV$aHkMh@`t@e2VS6gdp zCBpOW<3>rMC_2O{>F(_18)@z*fx~}wnDKv0khZ?NWJDUUm_F+T%i`@#f@EXB^%(-p z&p+P=hQ$5`h7PKAXYrrMM4q@q6V}%BvF~NO5li7u5f3)zg}uXy-K8##^4azSblvdz z5UNF1xs@7}aO-xOhWdNz@}!u$7CqDUowQ+Z(c_+n`!AP?k&*?{lI_%}+DY;057mQ= zfw2PSuBD03eRABaLpT9Afb^Qd7e1BIA078_YrKn!l8yHGEih|}YtZzD&dJ%*TlPsC z1L}jHd9RJ95+Dyu)4w$)vNtR&)Nd*9d3*9R1V~hQ8!Zsn<;M)pt(R2!{n>T{#P{79 zj5=ZukH78`t{6UL>;C1Vam#DZrgBlJ@`*LJu-7O|bn(W}+^;>%Yx4R@+tv4i1JX$7 zc|kce5{h5+|4W0qDW$ijGcutWrds+nozc6G8RD*DG51^C}{*>gygq#p1wUH3S;A$ zUi;A3uLE38PvMW=e;%axYxe&qYr4ve?O+JJ z%_l{?BmYkj#*~;MG9WoEMy{QgB)HNYl!mRV*+B|=|j+57up zij2d0C~FjQN|&xjf)K9+*-AoRFaR0Rrf;zw@~?j{qbA-dhnG=n@*|Az)BCvMIHc@b p2^E<9xmO1Hd~4!vZQtHKak=v#6M|Tc+y9Y(s3~bH)*-AS{~J^3!wLWZ literal 0 HcmV?d00001 From 09a6ee6a766fb136742557b3e8af3c38d4201ec7 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:06:56 +0100 Subject: [PATCH 7/8] desktop: add enableDockerAI settings management property Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- .../for-admins/hardened-desktop/settings-management/_index.md | 3 ++- .../settings-management/configure-json-file.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/content/manuals/security/for-admins/hardened-desktop/settings-management/_index.md b/content/manuals/security/for-admins/hardened-desktop/settings-management/_index.md index 2d5b2051474..cb08fa970c9 100644 --- a/content/manuals/security/for-admins/hardened-desktop/settings-management/_index.md +++ b/content/manuals/security/for-admins/hardened-desktop/settings-management/_index.md @@ -46,6 +46,7 @@ Using the `admin-settings.json` file, you can: - Turn off Docker Extensions - Turn off Docker Scout SBOM indexing - Turn off beta and experimental features +- Turn off Docker AI ([Ask Gordon](../../../../desktop/features/gordon.md)) - Turn off Docker Desktop's onboarding survey - Control whether developers can use the Docker terminal - Control the file sharing implementation for your developers on macOS @@ -79,4 +80,4 @@ In addition, if Enhanced Container Isolation is enforced, developers can't use p ## What's next? - [Configure Settings Management with a `.json` file](configure-json-file.md) -- [Configure Settings Management with the Docker Admin Console](configure-admin-console.md) \ No newline at end of file +- [Configure Settings Management with the Docker Admin Console](configure-admin-console.md) diff --git a/content/manuals/security/for-admins/hardened-desktop/settings-management/configure-json-file.md b/content/manuals/security/for-admins/hardened-desktop/settings-management/configure-json-file.md index d52ff4315e7..b59e1293881 100644 --- a/content/manuals/security/for-admins/hardened-desktop/settings-management/configure-json-file.md +++ b/content/manuals/security/for-admins/hardened-desktop/settings-management/configure-json-file.md @@ -258,6 +258,7 @@ The following `admin-settings.json` code and table provides an example of the re |:-------------------------------|---|:-------------------------------|---| | `allowExperimentalFeatures`| | If `value` is set to `false`, experimental features are disabled.| | | `allowBetaFeatures`| | If `value` is set to `false`, beta features are disabled.| | +| `enableDockerAI` | | If `value` is set to `false`, Docker AI (Ask Gordon) features are disabled. | | ### Enhanced Container Isolation From e41c490f39f5f49a689237a2261b5fb4f9cd867b Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:17:00 +0100 Subject: [PATCH 8/8] site: add landing page callout to Ask Gordon Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- layouts/index.html | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/layouts/index.html b/layouts/index.html index cc4cb02097f..04ee028ae60 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -161,23 +161,26 @@

Gen AI catalog {{ partial